Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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