Proyectos de Subversion LeadersLinked - Backend

Rev

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

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