Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16248 | Rev 16768 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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