Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
5287 eleazar 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
8
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\Log\LoggerInterface;
10
use Laminas\View\Model\ViewModel;
11
use Laminas\View\Model\JsonModel;
12
use LeadersLinked\Library\Functions;
5572 eleazar 13
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
14
use LeadersLinked\Mapper\UserMapper;
15
use LeadersLinked\Mapper\CompanyMapper;
16
use LeadersLinked\Model\Company;
17
use Laminas\Hydrator\ArraySerializableHydrator;
18
use Laminas\Db\ResultSet\HydratingResultSet;
19
use LeadersLinked\Mapper\QueryMapper;
20
use Laminas\Paginator\Adapter\DbSelect;
21
use Laminas\Paginator\Paginator;
22
use Laminas\Db\Adapter\AdapterInterface;
5287 eleazar 23
use LeadersLinked\Mapper\SurveyTestMapper;
5557 eleazar 24
use LeadersLinked\Mapper\SurveyMapper;
25
use LeadersLinked\Mapper\SurveyFormMapper;
5287 eleazar 26
use LeadersLinked\Form\SurveyTestForm;
27
use LeadersLinked\Model\SurveyTest;
28
class SurveyTestController 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() {
5889 eleazar 69
 
5287 eleazar 70
        $request = $this->getRequest();
71
        $currentUserPlugin = $this->plugin('currentUserPlugin');
72
        $currentCompany = $currentUserPlugin->getCompany();
73
        $currentUser = $currentUserPlugin->getUser();
74
 
5887 eleazar 75
        try{
5287 eleazar 76
        $request = $this->getRequest();
77
        if ($request->isGet()) {
78
 
79
            $headers = $request->getHeaders();
80
 
81
            $isJson = false;
82
            if ($headers->has('Accept')) {
83
                $accept = $headers->get('Accept');
84
 
85
                $prioritized = $accept->getPrioritized();
86
 
87
                foreach ($prioritized as $key => $value) {
88
                    $raw = trim($value->getRaw());
89
 
90
                    if (!$isJson) {
91
                        $isJson = strpos($raw, 'json');
92
                    }
93
                }
94
            }
95
 
96
            if ($isJson) {
5885 eleazar 97
                $survey_uuid = $this->params()->fromRoute('survey_id');
98
 
99
                $surveyMapper = SurveyMapper::getInstance($this->adapter);
100
                $survey = $surveyMapper->fetchOneByUuid($survey_uuid);
6837 eleazar 101
 
5607 eleazar 102
                $search = $this->params()->fromQuery('search', []);
5287 eleazar 103
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
104
 
105
                $page = intval($this->params()->fromQuery('start', 1), 10);
106
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
107
                $order = $this->params()->fromQuery('order', []);
108
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
109
                $order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var($order[0]['dir'], FILTER_SANITIZE_STRING));
110
 
6801 eleazar 111
                $fields = ['first_name'];
112
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'first_name';
5613 eleazar 113
 
5614 eleazar 114
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
115
                    $order_direction = 'ASC';
116
                }
117
 
6837 eleazar 118
                $surveyTestMapper = SurveyTestMapper::getInstance($this->adapter);
119
                $paginator = $surveyTestMapper->fetchAllDataTableBySurveyId($survey->id, $search, $page, $records_x_page, $order_field, $order_direction);
120
 
5287 eleazar 121
                $items = [];
122
                $records = $paginator->getCurrentItems();
6822 eleazar 123
 
5287 eleazar 124
                foreach ($records as $record) {
5569 eleazar 125
                    $params = [
6837 eleazar 126
                        'survey_id' => $survey->uuid,
127
                        'id' => $record->uuid,
5569 eleazar 128
                    ];
6668 eleazar 129
 
5287 eleazar 130
                    $item = [
6813 eleazar 131
                        'id' => $record['id'],
132
                        'first_name' => $record['first_name'],
133
                        'date' => $record['added_on'],
5288 eleazar 134
 
5287 eleazar 135
                        'actions' => [
6821 eleazar 136
                            'link_delete' => $this->url()->fromRoute('survey/test/delete', 'id'),
6813 eleazar 137
                            'link_report' => $this->url()->fromRoute('survey/test/report', ['uuid' => $record['uuid']])
5287 eleazar 138
                        ]
139
                    ];
140
 
141
                    array_push($items, $item);
142
                }
143
 
144
                return new JsonModel([
145
                    'success' => true,
146
                    'data' => [
147
                        'items' => $items,
148
                        'total' => $paginator->getTotalItemCount(),
149
                    ]
150
                ]);
151
            } else {
5564 eleazar 152
                $surveyMapper = SurveyMapper::getInstance($this->adapter);
153
                $survies = $surveyMapper->fetchAllByCompanyId($currentCompany->id);
154
 
5287 eleazar 155
                $form = new SurveyTestForm($this->adapter, $currentCompany->id);
156
 
157
                $this->layout()->setTemplate('layout/layout-backend');
158
                $viewModel = new ViewModel();
159
                $viewModel->setTemplate('leaders-linked/survey-test/index.phtml');
5564 eleazar 160
                $viewModel->setVariables([
6839 eleazar 161
                    'form'      => $form,
162
                    'survies' => $survies
5564 eleazar 163
                ]);
5287 eleazar 164
                return $viewModel;
165
            }
166
        } else {
167
            return new JsonModel([
168
                'success' => false,
169
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
170
            ]);
5663 eleazar 171
 
5287 eleazar 172
        }
5894 eleazar 173
        } catch (\Throwable $e) {
5887 eleazar 174
            $e->getMessage();
5888 eleazar 175
            return new JsonModel([
176
                'success' => false,
177
                'data' => $e
178
            ]);
5887 eleazar 179
        }
5287 eleazar 180
    }
181
 
182
    public function addAction() {
183
        $request = $this->getRequest();
184
        $currentUserPlugin = $this->plugin('currentUserPlugin');
185
        $currentCompany = $currentUserPlugin->getCompany();
186
        $currentUser = $currentUserPlugin->getUser();
187
 
188
        $request = $this->getRequest();
189
 
5732 eleazar 190
        $survey_id = $this->params()->fromRoute('survey_id');
5823 eleazar 191
 
5452 eleazar 192
        if ($request->isGet()) {
5649 eleazar 193
            $surveyMapper = SurveyMapper::getInstance($this->adapter);
5732 eleazar 194
            $survey = $surveyMapper->fetchOneByUuid($survey_id);
5570 eleazar 195
 
5452 eleazar 196
            $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
197
            $surveyForm = $surveyFormMapper->fetchOne($survey->form_id);
5570 eleazar 198
 
5452 eleazar 199
            $data = [
200
                'survey' => [
201
                    'id' => $survey->uuid,
202
                    'content' => $surveyForm->content ? json_decode($surveyForm->content) : [],
203
                    'description' => $surveyForm->description,
204
                    'text' => $surveyForm->text,
205
                ],
6865 eleazar 206
            ];
5452 eleazar 207
 
208
        } else if ($request->isPost()) {
5287 eleazar 209
 
210
            $form = new SurveyTestForm($this->adapter, $currentCompany->id);
211
 
212
            $dataPost = $request->getPost()->toArray();
213
 
214
            $form->setData($dataPost);
215
 
216
            if ($form->isValid()) {
217
                $dataPost = (array) $form->getData();
218
 
219
                $hydrator = new ObjectPropertyHydrator();
220
                $survey = new SurveyTest();
221
                $hydrator->hydrate($dataPost, $survey);
222
 
5831 eleazar 223
                $surveyDoneMapper = SurveyMapper::getInstance($this->adapter);
224
                $surveyDone = $surveyDoneMapper->fetchOneByUuid($survey_id);
225
 
5287 eleazar 226
                $survey->company_id = $currentCompany->id;
5831 eleazar 227
                $survey->survey_id = $surveyDone->id;
5287 eleazar 228
 
229
                $surveyMapper = SurveyTestMapper::getInstance($this->adapter);
230
                $result = $surveyMapper->insert($survey);
231
 
232
                if ($result) {
5832 eleazar 233
                    $this->logger->info('Se agrego el formulario' . $survey->first_name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
5287 eleazar 234
 
235
                    // Get record by id
236
                    $record = $surveyMapper->fetchOne($survey->id);
237
 
238
                    if ($record) {
239
 
240
                        $data = [
241
                            'success' => true,
242
                            'id' => $record->id,
243
                            'data' => 'LABEL_RECORD_ADDED'
244
                        ];
245
                    } else {
246
 
247
                        $data = [
248
                            'success' => false,
249
                            'data' => 'ERROR_RECORD_NOT_FOUND'
250
                        ];
251
                    }
252
                } else {
253
                    $data = [
254
                        'success' => false,
255
                        'data' => $surveyMapper->getError()
256
                    ];
257
                }
258
 
259
                return new JsonModel($data);
260
            } else {
261
                $messages = [];
262
                $form_messages = (array) $form->getMessages();
263
                foreach ($form_messages as $fieldname => $field_messages) {
264
 
265
                    $messages[$fieldname] = array_values($field_messages);
266
                }
267
 
268
                return new JsonModel([
269
                    'success' => false,
270
                    'data' => $messages
271
                ]);
272
            }
273
        } else {
274
            $data = [
275
                'success' => false,
276
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
277
            ];
278
 
279
            return new JsonModel($data);
280
        }
281
 
282
        return new JsonModel($data);
283
    }
284
 
6668 eleazar 285
    public function reportAction() {
286
        $request = $this->getRequest();
287
        $currentUserPlugin = $this->plugin('currentUserPlugin');
288
        $currentCompany = $currentUserPlugin->getCompany();
289
        $currentUser = $currentUserPlugin->getUser();
290
 
291
        $request = $this->getRequest();
6805 eleazar 292
        $uuid = $this->params()->fromRoute('uuid');
6668 eleazar 293
 
294
 
295
 
296
        if (!$uuid) {
297
            $data = [
298
                'success' => false,
299
                'data' => 'ERROR_INVALID_PARAMETER'
300
            ];
301
 
302
            return new JsonModel($data);
303
        }
304
 
305
        $surveyTestMapper = SurveyTestMapper::getInstance($this->adapter);
306
        $surveyTests = $surveyTestMapper->fetchOneByuuid($uuid);
307
 
308
 
309
        $surveyMapper = SurveyMapper::getInstance($this->adapter);
310
        $survey = $surveyMapper->fetchOne($surveyTests->survey_id);
311
 
312
        if (!$surveyTests) {
313
            $data = [
314
                'success' => false,
315
                'data' => 'ERROR_RECORD_NOT_FOUND'
316
            ];
317
 
318
            return new JsonModel($data);
319
        }
320
 
321
 
322
        if ($request->isGet()) {
323
            $hydrator = new ObjectPropertyHydrator();
324
 
325
            //get form data
326
            $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
327
            $surveyForm = $surveyFormMapper->fetchOne($survey->form_id);
328
 
329
            if ($surveyForm) {
330
 
331
                return $this->renderPDF($surveyForm, $surveyTests, $survey);
332
            } else {
333
 
334
                $data = [
335
                    'success' => false,
336
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
337
                ];
338
 
339
                return new JsonModel($data);
340
            }
341
        } else {
342
            $data = [
343
                'success' => false,
344
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
345
            ];
346
 
347
            return new JsonModel($data);
348
        }
349
 
350
        return new JsonModel($data);
351
    }
352
 
353
 
354
 
5287 eleazar 355
    public function deleteAction() {
356
        $request = $this->getRequest();
357
        $currentUserPlugin = $this->plugin('currentUserPlugin');
358
        $currentCompany = $currentUserPlugin->getCompany();
359
        $currentUser = $currentUserPlugin->getUser();
6817 eleazar 360
        try{
5287 eleazar 361
        $request = $this->getRequest();
6819 eleazar 362
        $uuid = $this->params()->fromRoute('id');
363
 
5287 eleazar 364
        if (!$uuid) {
365
            $data = [
366
                'success' => false,
367
                'data' => 'ERROR_INVALID_PARAMETER'
368
            ];
369
 
370
            return new JsonModel($data);
371
        }
372
 
6805 eleazar 373
        $surveyTestMapper = SurveyTestMapper::getInstance($this->adapter);
6807 eleazar 374
        $survey = $surveyTestMapper->fetchOne($uuid);
5287 eleazar 375
        if (!$survey) {
376
            $data = [
377
                'success' => false,
378
                'data' => 'ERROR_RECORD_NOT_FOUND'
379
            ];
380
 
381
            return new JsonModel($data);
382
        }
383
 
384
        if ($survey->company_id != $currentCompany->id) {
385
            return new JsonModel([
386
                'success' => false,
387
                'data' => 'ERROR_UNAUTHORIZED'
388
            ]);
389
        }
390
 
391
        if ($request->isPost()) {
392
 
6805 eleazar 393
            $result = $surveyTestMapper->delete($survey->id);
5287 eleazar 394
            if ($result) {
395
                $this->logger->info('Se borro el formulario ' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
396
 
397
                $data = [
398
                    'success' => true,
399
                    'data' => 'LABEL_RECORD_DELETED'
400
                ];
401
            } else {
402
 
403
                $data = [
404
                    'success' => false,
6805 eleazar 405
                    'data' => $surveyTestMapper->getError()
5287 eleazar 406
                ];
407
 
408
                return new JsonModel($data);
409
            }
410
        } else {
411
            $data = [
412
                'success' => false,
413
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
414
            ];
415
 
416
            return new JsonModel($data);
417
        }
418
 
419
        return new JsonModel($data);
6817 eleazar 420
        } catch (\Throwable $e) {
421
            $e->getMessage();
422
            return new JsonModel([
423
                'success' => false,
424
                'data' => $e
425
            ]);
426
        }
427
 
5287 eleazar 428
    }
429
 
430
}