Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6849 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
6849 efrain 7
 
1 www 8
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\Log\LoggerInterface;
10
use Laminas\View\Model\ViewModel;
11
use Laminas\View\Model\JsonModel;
12
 
13
use LeadersLinked\Library\Functions;
14
use LeadersLinked\Form\MyCompanies\CreateForm;
15
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
16
 
17
use LeadersLinked\Mapper\CompanyLocationMapper;
18
use LeadersLinked\Model\Company;
19
use LeadersLinked\Model\CompanyUser;
20
use LeadersLinked\Mapper\CompanyFollowerMapper;
21
use LeadersLinked\Mapper\CompanyUserMapper;
22
use LeadersLinked\Mapper\QueryMapper;
23
use LeadersLinked\Mapper\CompanyMapper;
24
use LeadersLinked\Mapper\IndustryMapper;
25
use LeadersLinked\Mapper\CompanySizeMapper;
26
use LeadersLinked\Model\User;
27
use LeadersLinked\Mapper\UserMapper;
28
use LeadersLinked\Model\UserType;
29
use LeadersLinked\Mapper\CompanyRoleMapper;
30
 
31
 
32
class MyCompaniesController extends AbstractActionController
33
{
34
    /**
35
     *
6866 efrain 36
     * @var \Laminas\Db\Adapter\AdapterInterface
1 www 37
     */
38
    private $adapter;
39
 
40
    /**
41
     *
6866 efrain 42
     * @var \LeadersLinked\Cache\CacheInterface
1 www 43
     */
6866 efrain 44
    private $cache;
45
 
46
 
47
    /**
48
     *
49
     * @var \Laminas\Log\LoggerInterface
50
     */
1 www 51
    private $logger;
52
 
53
    /**
54
     *
55
     * @var array
56
     */
57
    private $config;
58
 
6866 efrain 59
 
1 www 60
    /**
61
     *
6866 efrain 62
     * @var \Laminas\Mvc\I18n\Translator
63
     */
64
    private $translator;
65
 
66
 
67
    /**
68
     *
69
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
70
     * @param \LeadersLinked\Cache\CacheInterface $cache
71
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
1 www 72
     * @param array $config
6866 efrain 73
     * @param \Laminas\Mvc\I18n\Translator $translator
1 www 74
     */
6866 efrain 75
    public function __construct($adapter, $cache, $logger, $config, $translator)
1 www 76
    {
77
        $this->adapter      = $adapter;
6866 efrain 78
        $this->cache        = $cache;
1 www 79
        $this->logger       = $logger;
80
        $this->config       = $config;
6866 efrain 81
        $this->translator   = $translator;
1 www 82
    }
83
 
84
    /**
85
     *
86
     * Generación del listado de perfiles
87
     * {@inheritDoc}
88
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
89
     */
90
    public function indexAction()
91
    {
92
        $currentUserPlugin = $this->plugin('currentUserPlugin');
93
        $currentUser = $currentUserPlugin->getUser();
3639 efrain 94
 
1 www 95
 
96
        $request = $this->getRequest();
97
        if($request->isGet()) {
98
 
99
 
100
            $headers  = $request->getHeaders();
101
            $isJson = false;
102
            if($headers->has('Accept')) {
103
                $accept = $headers->get('Accept');
104
 
105
                $prioritized = $accept->getPrioritized();
106
 
107
                foreach($prioritized as $key => $value) {
108
                    $raw = trim($value->getRaw());
109
 
110
                    if(!$isJson) {
111
                        $isJson = strpos($raw, 'json');
112
                    }
113
 
114
                }
115
            }
116
 
117
            if($isJson) {
118
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
119
 
6749 efrain 120
                $search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));
1 www 121
 
122
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
123
 
124
                $queryMapper = QueryMapper::getInstance($this->adapter);
125
 
126
                $select = $queryMapper->getSql()->select();
127
                $select->columns(['id', 'uuid', 'name', 'status',  'image', 'status']);
128
                $select->from(['c' => CompanyMapper::_TABLE]);
129
                $select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.company_id  = c.id', ['creator']);
130
                //$select->join(['i' => IndustryMapper::_TABLE], ' i.id = c.industry_id', ['industry' => 'name']);
131
                //$select->join(['cs' => CompanySizeMapper::_TABLE], 'cs.id = c.company_size_id', ['company_size' => new Expression("concat(minimum_no_of_employee , '-', maximum_no_of_employee)")]);
3639 efrain 132
                $select->where->equalTo('c.network_id', $currentUser->network_id);
1 www 133
                $select->where->equalTo('cu.user_id', $currentUser->id);
134
                $select->where->in('c.status', [Company::STATUS_ACTIVE, Company::STATUS_PENDING]);
135
                $select->where->in('cu.creator', [CompanyUser::CREATOR_YES]);
136
 
137
                if($search) {
138
                    $select->where->like('c.name', '%' . $search . '%');
139
                }
140
                $select->order('name ASC');
141
 
142
                //echo $select->getSqlString($this->adapter->platform); exit;
143
 
144
                $records = $queryMapper->fetchAll($select);
145
 
146
                $items = [];
147
                foreach($records as $record)
148
                {
149
 
150
                    switch($record['status']) {
151
                        case  Company::STATUS_ACTIVE :
152
                            $status = 'LABEL_ACTIVE';
153
                            break;
154
 
155
                        case  Company::STATUS_PENDING :
156
                            $status = 'LABEL_PENDING';
157
                            break;
158
 
159
                        default :
160
                            $status = '';
161
                            break;
162
                    }
163
 
3200 efrain 164
                    if($record['status'] == Company::STATUS_ACTIVE) {
3201 efrain 165
 
166
                        $link_view = $this->url()->fromRoute('company/view', ['id' => $record['uuid'] ]);
3200 efrain 167
                        $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($record['id'], $currentUser->id);
168
                        if($companyUser && $companyUser->status == CompanyUser::STATUS_ACCEPTED && $companyUser->backend == CompanyUser::BACKEND_YES ) {
169
                            $link_my_company = $this->url()->fromRoute('backend/signin-company', ['id' => $record['uuid'] ]);
170
                        } else {
171
                            $link_my_company = '';
172
                        }
1 www 173
                    } else {
174
                        $link_my_company = '';
3201 efrain 175
                        $link_view = '';
3200 efrain 176
                    }
1 www 177
 
178
                    $item = [
179
 
180
                        'name' => $record['name'],
181
                        'status' => $status,
182
                        'image' => $this->url()->fromRoute('storage', ['type' => 'company', 'code' => $record['uuid'], 'filename' => $record['image']]),
183
                        'link_my_company' =>  $link_my_company,
3201 efrain 184
                        'link_view' => $link_view,
1 www 185
                    ];
186
 
187
                    array_push($items, $item);
188
                }
189
 
190
 
191
 
192
                $response = [
193
                    'success' => true,
194
                    'data' => $items
195
                ];
196
 
197
                return new JsonModel($response);
198
 
199
 
200
            } else {
201
                $industries = [];
202
                $industryMapper = IndustryMapper::getInstance($this->adapter);
3454 efrain 203
                $records = $industryMapper->fetchAllActive();
1 www 204
                foreach($records as $record)
205
                {
206
                    $industries[$record->uuid] = $record->name;
207
                }
208
 
209
                $companySizes = [];
210
                $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
3454 efrain 211
                $records = $companySizeMapper->fetchAllActive();
1 www 212
                foreach($records as $record)
213
                {
3187 efrain 214
                    $companySizes[$record->uuid] = $record->name . ' ( ' . $record->minimum_no_of_employee . ' - ' . $record->maximum_no_of_employee . ' )';
1 www 215
                }
216
 
217
                $formAdd = new CreateForm($this->adapter);
218
 
219
 
220
 
221
                $this->layout()->setTemplate('layout/layout.phtml');
222
                $viewModel = new ViewModel();
223
                $viewModel->setTemplate('leaders-linked/my-companies/index.phtml');
224
                $viewModel->setVariables([
225
                    'formAdd' => $formAdd,
226
                    'industries' => $industries,
227
                    'company_sizes' => $companySizes,
228
                ]);
229
                return $viewModel ;
230
            }
231
 
232
        } else {
233
 
234
 
235
 
236
            return new JsonModel([
237
                'success' => false,
238
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
239
            ]);
240
        }
241
    }
242
 
243
    /**
244
     *
245
     * Agregar un nuevo perfil
246
     * @return \Laminas\View\Model\JsonModel
247
     */
248
    public function addAction()
249
    {
250
        $request = $this->getRequest();
251
 
252
        $currentUserPlugin = $this->plugin('currentUserPlugin');
253
        $currentUser = $currentUserPlugin->getUser();
254
 
255
 
256
        if($request->isPost()) {
257
            $form = new  CreateForm($this->adapter);
258
            $dataPost = $request->getPost()->toArray();
259
 
260
 
261
            $form->setData($dataPost);
262
 
263
            if($form->isValid()) {
264
                $dataPost = (array) $form->getData();
265
 
266
                $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
267
                $companySize = $companySizeMapper->fetchOneByUuid($dataPost['company_size_id']);
268
 
269
                $industryMapper = IndustryMapper::getInstance($this->adapter);
270
                $industry = $industryMapper->fetchOneByUuid($dataPost['industry_id']);
271
 
272
                $hydrator = new ObjectPropertyHydrator();
273
                $company = new Company();
274
                $hydrator->hydrate($dataPost, $company);
275
 
276
 
3639 efrain 277
                $company->network_id = $currentUser->network_id;
1 www 278
                $company->company_size_id =  $companySize->id;
279
                $company->industry_id = $industry->id;
280
                $company->foundation_year = date('Y');
281
                $company->status = Company::STATUS_PENDING;
282
                $company->description = '';
3639 efrain 283
 
1 www 284
 
285
                $companyMapper = CompanyMapper::getInstance($this->adapter);
286
                $result = $companyMapper->insert($company);
287
 
288
                if($result) {
289
 
290
                    $companyRoleMapper = CompanyRoleMapper::getInstance($this->adapter);
291
 
292
 
293
 
294
 
295
                    /** Creación del fake user propietario de la empresa */
296
                    $user = new User();
297
                    $user->email = 'fake-email'.$company->id;
298
                    $user->first_name = substr($company->name, 0, 64);
299
                    $user->last_name = substr($company->name, 64);
300
                    $user->status = User::STATUS_INACTIVE;
301
                    $user->blocked = User::BLOCKED_YES;
302
                    $user->login_attempt = 0;
303
                    $user->email_verified = User::EMAIL_VERIFIED_YES;
304
                    $user->show_in_search = User::SHOW_IN_SEARCH_NO;
305
                    $user->password = 'NO-PASSWORD';
306
                    $user->usertype_id = UserType::COMPANY;
307
 
308
                    $userMapper = UserMapper::getInstance($this->adapter);
309
                    $userMapper->insert($user);
310
 
311
                    $companyUser = new CompanyUser();
312
                    $companyUser->company_id = $company->id;
313
                    $companyUser->user_id = $user->id;
314
                    $companyUser->owner = CompanyUser::OWNER_YES;
315
                    $companyUser->creator = CompanyUser::CREATOR_NO;
316
                    $companyUser->status = CompanyUser::STATUS_ACCEPTED;
317
 
318
                    $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
319
                    $companyUserMapper->insert($companyUser);
320
 
321
                    /** agregamos el usuario que lo crea como full administrador */
322
                    $companyUser = new CompanyUser();
323
                    $companyUser->company_id = $company->id;
324
                    $companyUser->user_id = $currentUser->id;
325
                    $companyUser->owner = CompanyUser::OWNER_NO;
326
                    $companyUser->creator = CompanyUser::CREATOR_YES;
327
                    $companyUser->status = CompanyUser::STATUS_ACCEPTED;
328
                    $companyUser->backend = CompanyUser::BACKEND_YES;
329
                    $companyUserMapper->insert($companyUser);
330
 
331
 
332
 
333
                    $this->logger->info('Se agrego la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
334
 
335
                    $data = [
336
                        'success'   => true,
337
                        'data'   => 'LABEL_RECORD_ADDED'
338
                    ];
339
                } else {
340
                    $data = [
341
                        'success'   => false,
342
                        'data'      => $companyMapper->getError()
343
                    ];
344
 
345
                }
346
 
347
                return new JsonModel($data);
348
 
349
            } else {
350
                $messages = [];
351
                $form_messages = (array) $form->getMessages();
352
                foreach($form_messages  as $fieldname => $field_messages)
353
                {
354
 
355
                    $messages[$fieldname] = array_values($field_messages);
356
                }
357
 
358
                return new JsonModel([
359
                    'success'   => false,
360
                    'data'   => $messages
361
                ]);
362
            }
363
 
364
        } else {
365
            $data = [
366
                'success' => false,
367
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
368
            ];
369
 
370
            return new JsonModel($data);
371
        }
372
 
373
        return new JsonModel($data);
374
    }
375
 
376
    /**
377
     *
378
     * Borrar un perfil excepto el público
379
     * @return \Laminas\View\Model\JsonModel
380
     */
381
 
382
 
383
 
384
 
385
 
386
 
387
}