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);
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
 
5613 eleazar 111
                $fields = ['first_name'];
112
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'first_name';
113
 
5614 eleazar 114
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
115
                    $order_direction = 'ASC';
116
                }
117
 
5620 eleazar 118
                $surveyTestMapper = SurveyTestMapper::getInstance($this->adapter);
6038 eleazar 119
                $paginator = $surveyTestMapper->fetchAllDataTableBySurveyId($survey->id, $search, $page, $records_x_page, $order_field, $order_direction);
5619 eleazar 120
 
5287 eleazar 121
                $items = [];
122
                $records = $paginator->getCurrentItems();
6671 eleazar 123
 
5287 eleazar 124
                foreach ($records as $record) {
5569 eleazar 125
                    $params = [
5897 eleazar 126
                        'survey_id' => $survey->uuid,
127
                        'id' => $record->uuid,
5569 eleazar 128
                    ];
6668 eleazar 129
 
5287 eleazar 130
                    $item = [
131
                        'id' => $record->id,
5557 eleazar 132
                        'first_name' => $record->first_name,
6672 eleazar 133
                        'date' => $record->added_on,
5288 eleazar 134
 
5287 eleazar 135
                        'actions' => [
6662 eleazar 136
                            'link_delete' => $this->url()->fromRoute('survey/test/delete', ['id' => $record->uuid]),
137
                            'link_report' => $this->url()->fromRoute('survey/test/report', ['id' => $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([
161
                    'form'      => $form,
162
                    'survies' => $survies
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
                ],
206
            ];
5663 eleazar 207
            return new JsonModel([
208
                'success' => true,
209
                'data' => $data,
210
            ]);
5563 eleazar 211
 
5452 eleazar 212
 
213
        } else if ($request->isPost()) {
5287 eleazar 214
 
215
            $form = new SurveyTestForm($this->adapter, $currentCompany->id);
216
 
217
            $dataPost = $request->getPost()->toArray();
218
 
219
            $form->setData($dataPost);
220
 
221
            if ($form->isValid()) {
222
                $dataPost = (array) $form->getData();
223
 
224
                $hydrator = new ObjectPropertyHydrator();
225
                $survey = new SurveyTest();
226
                $hydrator->hydrate($dataPost, $survey);
227
 
5831 eleazar 228
                $surveyDoneMapper = SurveyMapper::getInstance($this->adapter);
229
                $surveyDone = $surveyDoneMapper->fetchOneByUuid($survey_id);
230
 
5287 eleazar 231
                $survey->company_id = $currentCompany->id;
5831 eleazar 232
                $survey->survey_id = $surveyDone->id;
5287 eleazar 233
 
234
                $surveyMapper = SurveyTestMapper::getInstance($this->adapter);
235
                $result = $surveyMapper->insert($survey);
236
 
237
                if ($result) {
5832 eleazar 238
                    $this->logger->info('Se agrego el formulario' . $survey->first_name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
5287 eleazar 239
 
240
                    // Get record by id
241
                    $record = $surveyMapper->fetchOne($survey->id);
242
 
243
                    if ($record) {
244
 
245
                        $data = [
246
                            'success' => true,
247
                            'id' => $record->id,
248
                            'data' => 'LABEL_RECORD_ADDED'
249
                        ];
250
                    } else {
251
 
252
                        $data = [
253
                            'success' => false,
254
                            'data' => 'ERROR_RECORD_NOT_FOUND'
255
                        ];
256
                    }
257
                } else {
258
                    $data = [
259
                        'success' => false,
260
                        'data' => $surveyMapper->getError()
261
                    ];
262
                }
263
 
264
                return new JsonModel($data);
265
            } else {
266
                $messages = [];
267
                $form_messages = (array) $form->getMessages();
268
                foreach ($form_messages as $fieldname => $field_messages) {
269
 
270
                    $messages[$fieldname] = array_values($field_messages);
271
                }
272
 
273
                return new JsonModel([
274
                    'success' => false,
275
                    'data' => $messages
276
                ]);
277
            }
278
        } else {
279
            $data = [
280
                'success' => false,
281
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
282
            ];
283
 
284
            return new JsonModel($data);
285
        }
286
 
287
        return new JsonModel($data);
288
    }
289
 
6668 eleazar 290
    public function reportAction() {
291
        $request = $this->getRequest();
292
        $currentUserPlugin = $this->plugin('currentUserPlugin');
293
        $currentCompany = $currentUserPlugin->getCompany();
294
        $currentUser = $currentUserPlugin->getUser();
295
 
296
        $request = $this->getRequest();
297
        $uuid = $this->params()->fromRoute('id');
298
 
299
 
300
 
301
        if (!$uuid) {
302
            $data = [
303
                'success' => false,
304
                'data' => 'ERROR_INVALID_PARAMETER'
305
            ];
306
 
307
            return new JsonModel($data);
308
        }
309
 
310
        $surveyTestMapper = SurveyTestMapper::getInstance($this->adapter);
311
        $surveyTests = $surveyTestMapper->fetchOneByuuid($uuid);
312
 
313
 
314
        $surveyMapper = SurveyMapper::getInstance($this->adapter);
315
        $survey = $surveyMapper->fetchOne($surveyTests->survey_id);
316
 
317
        if (!$surveyTests) {
318
            $data = [
319
                'success' => false,
320
                'data' => 'ERROR_RECORD_NOT_FOUND'
321
            ];
322
 
323
            return new JsonModel($data);
324
        }
325
 
326
 
327
        if ($request->isGet()) {
328
            $hydrator = new ObjectPropertyHydrator();
329
 
330
            //get form data
331
            $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
332
            $surveyForm = $surveyFormMapper->fetchOne($survey->form_id);
333
 
334
            if ($surveyForm) {
335
 
336
                return $this->renderPDF($surveyForm, $surveyTests, $survey);
337
            } else {
338
 
339
                $data = [
340
                    'success' => false,
341
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
342
                ];
343
 
344
                return new JsonModel($data);
345
            }
346
        } else {
347
            $data = [
348
                'success' => false,
349
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
350
            ];
351
 
352
            return new JsonModel($data);
353
        }
354
 
355
        return new JsonModel($data);
356
    }
357
 
358
 
359
 
5287 eleazar 360
    public function deleteAction() {
361
        $request = $this->getRequest();
362
        $currentUserPlugin = $this->plugin('currentUserPlugin');
363
        $currentCompany = $currentUserPlugin->getCompany();
364
        $currentUser = $currentUserPlugin->getUser();
365
 
366
        $request = $this->getRequest();
367
        $uuid = $this->params()->fromRoute('id');
368
 
369
        if (!$uuid) {
370
            $data = [
371
                'success' => false,
372
                'data' => 'ERROR_INVALID_PARAMETER'
373
            ];
374
 
375
            return new JsonModel($data);
376
        }
377
 
378
        $surveyMapper = SurveyFormMapper::getInstance($this->adapter);
379
        $survey = $surveyMapper->fetchOneByUuid($uuid);
380
        if (!$survey) {
381
            $data = [
382
                'success' => false,
383
                'data' => 'ERROR_RECORD_NOT_FOUND'
384
            ];
385
 
386
            return new JsonModel($data);
387
        }
388
 
389
        if ($survey->company_id != $currentCompany->id) {
390
            return new JsonModel([
391
                'success' => false,
392
                'data' => 'ERROR_UNAUTHORIZED'
393
            ]);
394
        }
395
 
396
        if ($request->isPost()) {
397
 
398
            $result = $surveyMapper->delete($survey->id);
399
            if ($result) {
400
                $this->logger->info('Se borro el formulario ' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
401
 
402
                $data = [
403
                    'success' => true,
404
                    'data' => 'LABEL_RECORD_DELETED'
405
                ];
406
            } else {
407
 
408
                $data = [
409
                    'success' => false,
410
                    'data' => $surveyMapper->getError()
411
                ];
412
 
413
                return new JsonModel($data);
414
            }
415
        } else {
416
            $data = [
417
                'success' => false,
418
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
419
            ];
420
 
421
            return new JsonModel($data);
422
        }
423
 
424
        return new JsonModel($data);
425
    }
426
 
427
}