Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15831 | Rev 16768 | 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;
16766 efrain 8
use LeadersLinked\Cache\CacheInterface;
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
     *
32
     * @var AdapterInterface
33
     */
34
    private $adapter;
35
 
36
    /**
37
     *
16766 efrain 38
     * @var CacheInterface
15831 efrain 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
16766 efrain 57
     *@param CacheInterface $cache
15831 efrain 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
 
16766 efrain 98
                $category_uuid = Functions::sanitizeFilterString($this->params()->fromQuery('category_id'));
99
 
15831 efrain 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', []);
16766 efrain 136
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
15831 efrain 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);
16766 efrain 145
                $order_direction = empty($order[0]['dir']) ? 'ASC' : Functions::sanitizeFilterString(filter_var($order[0]['dir']));
15831 efrain 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
 
16766 efrain 291
            $category_uuid = Functions::sanitizeFilterString($this->params()->fromRoute('id'));
15831 efrain 292
 
293
            $myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);
294
            $myCoachCategory = $myCoachCategoryMapper->fetchOneByUuid($category_uuid);
295
 
296
            if(!$myCoachCategory) {
297
                return new JsonModel([
298
                    'success' => false,
299
                    'data' => 'ERROR_MY_COACH_CATEGORY_NOT_FOUND'
300
                ]);
301
            }
302
 
303
            if($myCoachCategory->company_id != $currentCompany->id) {
304
                return new JsonModel([
305
                    'success' => false,
306
                    'data' => 'ERROR_MY_COACH_CATEGORY_IS_OTHER_COMPANY'
307
                ]);
308
            }
309
 
310
            $dataPost = $request->getPost()->toArray();
311
 
312
            $form = new  MyCoachCategoryUserForm($this->adapter, $currentCompany->id, $myCoachCategory->privacy);
313
            $form->setData($dataPost);
314
 
315
            if($form->isValid()) {
316
 
317
                $dataPost = (array) $form->getData();
318
 
319
 
320
                $userMapper = UserMapper::getInstance($this->adapter);
321
                $user = $userMapper->fetchOneByUuid($dataPost['user_id']);
322
 
323
                $myCoachCategoryUserMapper = MyCoachCategoryUserMapper::getInstance($this->adapter);
324
                $myCoachCategoryUser = $myCoachCategoryUserMapper->fetchOneByCategoryIdAndUserId($myCoachCategory->id, $user->id);
325
 
326
                if($myCoachCategoryUser) {
327
                    return new JsonModel([
328
                        'success' => false,
329
                        'data' => 'ERROR_MY_COACH_CATEGORY_USER_ALREADY_FOUND'
330
                    ]);
331
                }
332
 
333
 
334
                $myCoachCategoryUser =  new MyCoachCategoryUser();
335
                $myCoachCategoryUser->category_id = $myCoachCategory->id;
336
                $myCoachCategoryUser->user_id = $user->id;
337
                $myCoachCategoryUser->role = $dataPost['role'];
338
                $myCoachCategoryUserMapper = MyCoachCategoryUserMapper::getInstance($this->adapter);
339
 
340
 
341
                if($myCoachCategoryUserMapper->insert($myCoachCategoryUser)) {
342
 
343
 
344
                    $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()]);
345
 
346
                    $data = [
347
                        'success'   => true,
348
                        'data'   => 'LABEL_RECORD_ADDED'
349
                    ];
350
                } else {
351
                    $data = [
352
                        'success'   => false,
353
                        'data'      => $myCoachCategoryUserMapper->getError()
354
                    ];
355
 
356
                }
357
 
358
                return new JsonModel($data);
359
 
360
            } else {
361
                $messages = [];
362
                $form_messages = (array) $form->getMessages();
363
                foreach ($form_messages as $fieldname => $field_messages) {
364
 
365
                    $messages[$fieldname] = array_values($field_messages);
366
                }
367
 
368
                return new JsonModel([
369
                    'success' => false,
370
                    'data' => $messages
371
                ]);
372
 
373
            }
374
 
375
        } else {
376
            $data = [
377
                'success' => false,
378
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
379
            ];
380
 
381
            return new JsonModel($data);
382
        }
383
 
384
        return new JsonModel($data);
385
 
386
 
387
    }
388
 
389
    public function editAction()
390
    {
391
        $request = $this->getRequest();
392
        $currentUserPlugin = $this->plugin('currentUserPlugin');
393
        $currentCompany = $currentUserPlugin->getCompany();
394
        $currentUser = $currentUserPlugin->getUser();
395
 
396
        $request = $this->getRequest();
397
        $uuid = $this->params()->fromRoute('id');
398
        $user_uuid = $this->params()->fromRoute('user_id');
399
 
400
        $myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);
401
        $myCoachCategory = $myCoachCategoryMapper->fetchOneByUuid($uuid);
402
 
403
        if(!$myCoachCategory) {
404
            return new JsonModel([
405
                'success' => false,
406
                'data' => 'ERROR_MY_COACH_CATEGORY_NOT_FOUND'
407
            ]);
408
        }
409
 
410
        if($myCoachCategory->company_id != $currentCompany->id) {
411
            return new JsonModel([
412
                'success' => false,
413
                'data' => 'ERROR_MY_COACH_CATEGORY_IS_OTHER_COMPANY'
414
            ]);
415
        }
416
 
417
        $userMapper = UserMapper::getInstance($this->adapter);
418
        $user = $userMapper->fetchOneByUuid($user_uuid);
419
 
420
        if(!$user) {
421
            return new JsonModel([
422
                'success' => false,
423
                'data' => 'ERROR_USER_NOT_FOUND'
424
            ]);
425
 
426
        }
427
 
428
        $myCoachCategoryUserMapper = MyCoachCategoryUserMapper::getInstance($this->adapter);
429
        $myCoachCategoryUser = $myCoachCategoryUserMapper->fetchOneByCategoryIdAndUserId($myCoachCategory->id, $user->id);
430
 
431
        if(!$myCoachCategoryUser) {
432
            return new JsonModel([
433
                'success' => false,
434
                'data' => 'ERROR_MY_COACH_CATEGORY_USER_NOT_FOUND'
435
            ]);
436
        }
437
 
438
 
439
 
440
        if ($request->isPost()) {
441
            $dataPost = $request->getPost()->toArray();
442
 
443
            $form = new  MyCoachCategoryUserForm($this->adapter, $currentCompany->id, $myCoachCategory->privacy);
444
            $form->setData($dataPost);
445
 
446
 
447
 
448
            if ($form->isValid()) {
449
                $dataPost = (array) $form->getData();
450
 
451
                $myCoachCategoryUser->role = $dataPost['role'];
452
 
453
 
454
                if($myCoachCategoryUserMapper->update($myCoachCategoryUser)) {
455
 
456
                  $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()]);
457
 
458
                   $data = [
459
                       'success'   => true,
460
                       'data'   => 'LABEL_RECORD_UPDATED'
461
                   ];
462
               } else {
463
                   $data = [
464
                       'success'   => false,
465
                       'data'      => $myCoachCategoryUserMapper->getError()
466
                   ];
467
 
468
               }
469
 
470
                return new JsonModel($data);
471
            } else {
472
                $messages = [];
473
                $form_messages = (array) $form->getMessages();
474
                foreach ($form_messages as $fieldname => $field_messages) {
475
                    $messages[$fieldname] = array_values($field_messages);
476
                }
477
 
478
                return new JsonModel([
479
                    'success' => false,
480
                    'data' => $messages
481
                ]);
482
            }
483
        } else if ($request->isGet()) {
484
 
485
 
486
            $data = [
487
                'success' => true,
488
                'data' => [
489
                    'user_id' => $user->uuid,
490
                    'role' => $myCoachCategoryUser->role,
491
                ]
492
            ];
493
 
494
            return new JsonModel($data);
495
        }
496
 
497
 
498
        $data = [
499
            'success' => false,
500
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
501
        ];
502
 
503
        return new JsonModel($data);
504
 
505
    }
506
 
507
    public function deleteAction()
508
    {
509
        $request = $this->getRequest();
510
        $currentUserPlugin = $this->plugin('currentUserPlugin');
511
        $currentCompany = $currentUserPlugin->getCompany();
512
        $currentUser = $currentUserPlugin->getUser();
513
 
514
        $request = $this->getRequest();
515
        $uuid = $this->params()->fromRoute('id');
516
        $user_id = $this->params()->fromRoute('user_id');
517
 
518
 
519
        $myCoachCategoryMapper = MyCoachCategoryMapper::getInstance($this->adapter);
520
        $myCoachCategory = $myCoachCategoryMapper->fetchOneByUuid($uuid);
521
 
522
        if(!$myCoachCategory) {
523
            return new JsonModel([
524
                'success' => false,
525
                'data' => 'ERROR_MY_COACH_CATEGORY_NOT_FOUND'
526
            ]);
527
        }
528
 
529
        if($myCoachCategory->company_id != $currentCompany->id) {
530
            return new JsonModel([
531
                'success' => false,
532
                'data' => 'ERROR_MY_COACH_CATEGORY_IS_OTHER_COMPANY'
533
            ]);
534
        }
535
 
536
        $userMapper = UserMapper::getInstance($this->adapter);
537
        $user = $userMapper->fetchOneByUuid($user_id);
538
 
539
        if(!$user) {
540
            return new JsonModel([
541
                'success' => false,
542
                'data' => 'ERROR_USER_NOT_FOUND'
543
            ]);
544
 
545
        }
546
 
547
        $myCoachCategoryUserMapper = MyCoachCategoryUserMapper::getInstance($this->adapter);
548
        $myCoachCategoryUser = $myCoachCategoryUserMapper->fetchOneByCategoryIdAndUserId($myCoachCategory->id, $user->id);
549
 
550
        if(!$myCoachCategoryUser) {
551
            return new JsonModel([
552
                'success' => false,
553
                'data' => 'ERROR_MY_COACH_CATEGORY_USER_NOT_FOUND'
554
            ]);
555
        }
556
 
557
 
558
 
559
        if ($request->isPost()) {
560
 
561
            if ($myCoachCategoryUserMapper->deleteOneByCategoryIdAndUserId($myCoachCategory->id, $user->id)) {
562
            $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()]);
563
 
564
                $data = [
565
                    'success' => true,
566
                    'data' => 'LABEL_RECORD_DELETED'
567
                ];
568
            } else {
569
 
570
                $data = [
571
                    'success' => false,
572
                    'data' => $myCoachCategoryUserMapper->getError()
573
                ];
574
 
575
 
576
            }
577
        } else {
578
            $data = [
579
                'success' => false,
580
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
581
            ];
582
 
583
 
584
        }
585
 
586
 
587
        return new JsonModel($data);
588
 
589
    }
590
}