Proyectos de Subversion LeadersLinked - Backend

Rev

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

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