Proyectos de Subversion LeadersLinked - Backend

Rev

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