Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 17008 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
17007 efrain 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
 
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
13
use LeadersLinked\Library\Functions;
14
use LeadersLinked\Mapper\HabitUserMapper;
15
use LeadersLinked\Model\HabitUser;
16
use LeadersLinked\Mapper\UserMapper;
17
use LeadersLinked\Form\KnowledgeArea\HabitUserForm;
18
use LeadersLinked\Mapper\QueryMapper;
19
use Laminas\Paginator\Adapter\DbSelect;
20
use Laminas\Paginator\Paginator;
21
use LeadersLinked\Model\User;
22
use LeadersLinked\Model\Company;
23
use LeadersLinked\Mapper\JobDescriptionMapper;
24
 
25
 
26
class HabitUserController extends AbstractActionController {
27
 
28
    /**
29
     *
30
     * @var \Laminas\Db\Adapter\AdapterInterface
31
     */
32
    private $adapter;
33
 
34
    /**
35
     *
36
     * @var \LeadersLinked\Cache\CacheInterface
37
     */
38
    private $cache;
39
 
40
 
41
    /**
42
     *
43
     * @var \Laminas\Log\LoggerInterface
44
     */
45
    private $logger;
46
 
47
    /**
48
     *
49
     * @var array
50
     */
51
    private $config;
52
 
53
 
54
    /**
55
     *
56
     * @var \Laminas\Mvc\I18n\Translator
57
     */
58
    private $translator;
59
 
60
 
61
    /**
62
     *
63
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
64
     * @param \LeadersLinked\Cache\CacheInterface $cache
65
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
66
     * @param array $config
67
     * @param \Laminas\Mvc\I18n\Translator $translator
68
     */
69
    public function __construct($adapter, $cache, $logger, $config, $translator)
70
    {
71
        $this->adapter      = $adapter;
72
        $this->cache        = $cache;
73
        $this->logger       = $logger;
74
        $this->config       = $config;
75
        $this->translator   = $translator;
76
    }
77
 
78
    public function indexAction() {
79
        $request = $this->getRequest();
80
        $currentUserPlugin = $this->plugin('currentUserPlugin');
81
        $currentCompany = $currentUserPlugin->getCompany();
82
        $currentUser = $currentUserPlugin->getUser();
83
 
84
 
85
        $request = $this->getRequest();
86
        if ($request->isGet()) {
87
 
88
            $headers = $request->getHeaders();
89
 
90
            $isJson = false;
91
            if ($headers->has('Accept')) {
92
                $accept = $headers->get('Accept');
93
 
94
                $prioritized = $accept->getPrioritized();
95
 
96
                foreach ($prioritized as $key => $value) {
97
                    $raw = trim($value->getRaw());
98
 
99
                    if (!$isJson) {
100
                        $isJson = strpos($raw, 'json');
101
                    }
102
                }
103
            }
104
 
105
            //$isJson = true;
106
            if ($isJson) {
107
 
108
 
109
                $search = $this->params()->fromQuery('search', []);
110
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
111
 
112
                $start = intval($this->params()->fromQuery('start', 0), 10);
113
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
114
                $page =  intval($start / $records_x_page);
115
                $page++;
116
 
117
                $order = $this->params()->fromQuery('order', []);
118
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
119
                $order_direction = empty($order[0]['dir']) ? 'ASC' : Functions::sanitizeFilterString(filter_var($order[0]['dir']));
120
 
121
                $fields = ['first_name', 'last_name', 'email'];
122
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'first_name';
123
 
124
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
125
                    $order_direction = 'ASC';
126
                }
127
 
128
 
129
 
130
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
131
                $allowAdd = $acl->isAllowed($currentUser->usertype_id, 'habits/users/add');
132
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'habits/users/edit');
133
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'habits/users/delete');
134
                $allowUpload = $acl->isAllowed($currentUser->usertype_id, 'habits/users/upload');
135
 
136
 
137
                $items = [];
138
 
139
                $queryMapper = QueryMapper::getInstance($this->adapter);
140
                $select = $queryMapper->getSql()->select();
141
                $select->columns(['role']);
142
                $select->from(['cu' => HabitUserMapper::_TABLE]);
143
                $select->join(['u' => UserMapper::_TABLE], 'cu.user_id = u.id',  ['uuid', 'first_name', 'last_name', 'email']);
144
 
145
                if($search) {
146
                    $select->where->nest()->like('first_name', '%' . $search . '%')
147
                    ->or->like('last_name', '%' . $search . '%')
148
                    ->or->like('email', '%' . $search . '%')->unnest();
149
                }
150
 
151
                $select->order($order_field . ' ' . $order_direction);
152
 
153
                //echo $select->getSqlString($this->adapter->platform); exit;
154
 
155
 
156
                $paginatorAdapter = new DbSelect($select, $this->adapter);
157
                $paginator = new Paginator($paginatorAdapter);
158
                $paginator->setItemCountPerPage($records_x_page);
159
                $paginator->setCurrentPageNumber($page);
160
 
161
                $records = $paginator->getCurrentItems();
162
 
163
                foreach ($records as $record)
164
                {
165
                    $item = [
166
                        'first_name' => $record['first_name'],
167
                        'last_name' => $record['last_name'],
168
                        'email' => $record['email'],
169
                        'actions' => [
170
                            'link_edit' => $allowEdit ? $this->url()->fromRoute('habits/users/edit', ['id' => $record['uuid'] ]) : '',
171
                            'link_delete' => $allowDelete ? $this->url()->fromRoute('habits/users/delete', ['id' => $record['uuid'] ]) : '',
172
                        ]
173
                    ];
174
 
175
                    array_push($items, $item);
176
                }
177
 
178
 
179
 
180
 
181
                return new JsonModel([
182
                    'success' => true,
183
                    'data' => [
184
                        'total' => $paginator->getTotalItemCount(),
185
                        'items' => $items,
186
                        'link_add' => $allowAdd ? $this->url()->fromRoute('habits/users/add', [] ) : '',
187
                        'link_upload' => $allowUpload ? $this->url()->fromRoute('habits/users/upload', [ ] ) : '',
188
                    ]
189
                ]);
190
            } else {
191
 
192
 
193
                $form = new  HabitUserForm($this->adapter, $currentCompany->id);
194
 
195
 
196
                $this->layout()->setTemplate('layout/layout-backend');
197
                $viewModel = new ViewModel();
198
                $viewModel->setTemplate('leaders-linked/knowledge-area-category-users/index.phtml');
199
                $viewModel->setVariables([
200
                    'form' =>  $form,
201
                ]);
202
                return $viewModel;
203
            }
204
        } else {
205
            return new JsonModel([
206
                'success' => false,
207
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
208
            ]);
209
        }
210
 
211
    }
212
 
213
 
214
 
215
    public function addAction()
216
    {
217
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
218
        $currentCompany     = $currentUserPlugin->getCompany();
219
        $currentUser        = $currentUserPlugin->getUser();
220
        $request            = $this->getRequest();
221
 
222
        if($request->isPost()) {
223
 
224
 
225
            $dataPost = $request->getPost()->toArray();
226
 
227
            $form = new  HabitUserForm($this->adapter, $currentCompany->id);
228
            $form->setData($dataPost);
229
 
230
            if($form->isValid()) {
231
 
232
                $dataPost = (array) $form->getData();
233
 
234
 
235
                $userMapper = UserMapper::getInstance($this->adapter);
236
                $user = $userMapper->fetchOneByUuid($dataPost['user_id']);
237
 
238
                $habitUserMapper = HabitUserMapper::getInstance($this->adapter);
239
                $habitUser = $habitUserMapper->fetchOneByCategoryIdAndUserId($knowledgeAreaCategory->id, $user->id);
240
 
241
                if($habitUser) {
242
                    return new JsonModel([
243
                        'success' => false,
244
                        'data' => 'ERROR_KNOWLEDGE_AREA_CATEGORY_USER_ALREADY_FOUND'
245
                    ]);
246
                }
247
 
248
 
249
                $habitUser =  new HabitUser();
250
                $habitUser->category_id = $knowledgeAreaCategory->id;
251
                $habitUser->user_id = $user->id;
252
                $habitUser->role = $dataPost['role'];
253
                $habitUserMapper = HabitUserMapper::getInstance($this->adapter);
254
 
255
 
256
                if($habitUserMapper->insert($habitUser)) {
257
 
258
 
259
                    $this->logger->info('Se agrego el usuario ' . $user->first_name . ' ' . $user->last_name . ' (' . $user->email . ') la categoria ' . $knowledgeAreaCategory->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
260
 
261
                    $data = [
262
                        'success'   => true,
263
                        'data'   => 'LABEL_RECORD_ADDED'
264
                    ];
265
                } else {
266
                    $data = [
267
                        'success'   => false,
268
                        'data'      => $habitUserMapper->getError()
269
                    ];
270
 
271
                }
272
 
273
                return new JsonModel($data);
274
 
275
            } else {
276
                $messages = [];
277
                $form_messages = (array) $form->getMessages();
278
                foreach ($form_messages as $fieldname => $field_messages) {
279
 
280
                    $messages[$fieldname] = array_values($field_messages);
281
                }
282
 
283
                return new JsonModel([
284
                    'success' => false,
285
                    'data' => $messages
286
                ]);
287
 
288
            }
289
 
290
        } else {
291
            $data = [
292
                'success' => false,
293
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
294
            ];
295
 
296
            return new JsonModel($data);
297
        }
298
 
299
        return new JsonModel($data);
300
 
301
 
302
    }
303
 
304
    public function editAction()
305
    {
306
        $request = $this->getRequest();
307
        $currentUserPlugin = $this->plugin('currentUserPlugin');
308
        $currentCompany = $currentUserPlugin->getCompany();
309
        $currentUser = $currentUserPlugin->getUser();
310
 
311
        $request = $this->getRequest();
312
        $uuid = $this->params()->fromRoute('id');
313
 
314
 
315
        $userMapper = UserMapper::getInstance($this->adapter);
316
        $user = $userMapper->fetchOneByUuid($uuid);
317
 
318
        if(!$user) {
319
            return new JsonModel([
320
                'success' => false,
321
                'data' => 'ERROR_USER_NOT_FOUND'
322
            ]);
323
 
324
        }
325
 
326
        $habitUserMapper = HabitUserMapper::getInstance($this->adapter);
327
        $habitUser = $habitUserMapper->fetchOneByCompanyIdAndUserId($currentCompany->id, $user->id);
328
 
329
        if(!$habitUser) {
330
            return new JsonModel([
331
                'success' => false,
332
                'data' => 'ERROR_KNOWLEDGE_AREA_CATEGORY_USER_NOT_FOUND'
333
            ]);
334
        }
335
 
336
 
337
 
338
        if ($request->isPost()) {
339
            $dataPost = $request->getPost()->toArray();
340
 
341
            $form = new  HabitUserForm($this->adapter, $currentCompany->id);
342
            $form->setData($dataPost);
343
 
344
 
345
 
346
            if ($form->isValid()) {
347
                $dataPost = (array) $form->getData();
348
 
349
                $habitUser->role = $dataPost['role'];
350
 
351
 
352
                if($habitUserMapper->update($habitUser)) {
353
 
354
                  $this->logger->info('Se actualizo el usuario ' . $user->first_name . ' ' . $user->last_name . ' (' . $user->email . ') la categoria ' . $knowledgeAreaCategory->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
355
 
356
                   $data = [
357
                       'success'   => true,
358
                       'data'   => 'LABEL_RECORD_UPDATED'
359
                   ];
360
               } else {
361
                   $data = [
362
                       'success'   => false,
363
                       'data'      => $habitUserMapper->getError()
364
                   ];
365
 
366
               }
367
 
368
                return new JsonModel($data);
369
            } else {
370
                $messages = [];
371
                $form_messages = (array) $form->getMessages();
372
                foreach ($form_messages as $fieldname => $field_messages) {
373
                    $messages[$fieldname] = array_values($field_messages);
374
                }
375
 
376
                return new JsonModel([
377
                    'success' => false,
378
                    'data' => $messages
379
                ]);
380
            }
381
        } else if ($request->isGet()) {
382
 
383
 
384
            $data = [
385
                'success' => true,
386
                'data' => [
387
                    'user_id' => $user->uuid,
388
                    'role' => $habitUser->role,
389
                ]
390
            ];
391
 
392
            return new JsonModel($data);
393
        }
394
 
395
 
396
        $data = [
397
            'success' => false,
398
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
399
        ];
400
 
401
        return new JsonModel($data);
402
 
403
    }
404
 
405
    public function deleteAction()
406
    {
407
        $request = $this->getRequest();
408
        $currentUserPlugin = $this->plugin('currentUserPlugin');
409
        $currentCompany = $currentUserPlugin->getCompany();
410
        $currentUser = $currentUserPlugin->getUser();
411
 
412
        $request = $this->getRequest();
413
        $uuid = $this->params()->fromRoute('id');
414
        $user_id = $this->params()->fromRoute('user_id');
415
 
416
 
417
        $knowledgeAreaCategoryMapper = HabitMapper::getInstance($this->adapter);
418
        $knowledgeAreaCategory = $knowledgeAreaCategoryMapper->fetchOneByUuid($uuid);
419
 
420
        if(!$knowledgeAreaCategory) {
421
            return new JsonModel([
422
                'success' => false,
423
                'data' => 'ERROR_KNOWLEDGE_AREA_CATEGORY_NOT_FOUND'
424
            ]);
425
        }
426
 
427
        if($knowledgeAreaCategory->company_id != $currentCompany->id) {
428
            return new JsonModel([
429
                'success' => false,
430
                'data' => 'ERROR_KNOWLEDGE_AREA_CATEGORY_IS_OTHER_COMPANY'
431
            ]);
432
        }
433
 
434
        $userMapper = UserMapper::getInstance($this->adapter);
435
        $user = $userMapper->fetchOneByUuid($user_id);
436
 
437
        if(!$user) {
438
            return new JsonModel([
439
                'success' => false,
440
                'data' => 'ERROR_USER_NOT_FOUND'
441
            ]);
442
 
443
        }
444
 
445
        $habitUserMapper = HabitUserMapper::getInstance($this->adapter);
446
        $habitUser = $habitUserMapper->fetchOneByCategoryIdAndUserId($knowledgeAreaCategory->id, $user->id);
447
 
448
        if(!$habitUser) {
449
            return new JsonModel([
450
                'success' => false,
451
                'data' => 'ERROR_KNOWLEDGE_AREA_CATEGORY_USER_NOT_FOUND'
452
            ]);
453
        }
454
 
455
 
456
 
457
        if ($request->isPost()) {
458
 
459
            if ($habitUserMapper->deleteOneByCategoryIdAndUserId($knowledgeAreaCategory->id, $user->id)) {
460
            $this->logger->info('Se borro el usuario ' . $user->first_name . ' ' . $user->last_name . ' (' . $user->email . ') la categoria ' . $knowledgeAreaCategory->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
461
 
462
                $data = [
463
                    'success' => true,
464
                    'data' => 'LABEL_RECORD_DELETED'
465
                ];
466
            } else {
467
 
468
                $data = [
469
                    'success' => false,
470
                    'data' => $habitUserMapper->getError()
471
                ];
472
 
473
 
474
            }
475
        } else {
476
            $data = [
477
                'success' => false,
478
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
479
            ];
480
 
481
 
482
        }
483
 
484
 
485
        return new JsonModel($data);
486
 
487
    }
488
 
489
 
490
}