Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

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