Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16768 | Rev 16785 | 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
213 geraldo 2
 
115 efrain 3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
16768 efrain 8
 
115 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;
15444 efrain 14
use LeadersLinked\Mapper\SelfEvaluationFormMapper;
15
use LeadersLinked\Form\SelfEvaluationFormForm;
16
use LeadersLinked\Model\SelfEvaluationForm;
115 efrain 17
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
15444 efrain 18
use LeadersLinked\Mapper\SelfEvaluationFormUserMapper;
115 efrain 19
 
213 geraldo 20
class SelfEvaluationFormController extends AbstractActionController {
21
 
115 efrain 22
    /**
23
     *
16769 efrain 24
     * @var \Laminas\Db\Adapter\AdapterInterface
115 efrain 25
     */
26
    private $adapter;
16768 efrain 27
 
115 efrain 28
    /**
29
     *
16769 efrain 30
     * @var \LeadersLinked\Cache\CacheInterface
115 efrain 31
     */
16769 efrain 32
    private $cache;
33
 
34
 
35
    /**
36
     *
37
     * @var \Laminas\Log\LoggerInterface
38
     */
115 efrain 39
    private $logger;
16768 efrain 40
 
115 efrain 41
    /**
42
     *
43
     * @var array
44
     */
45
    private $config;
16768 efrain 46
 
16769 efrain 47
 
115 efrain 48
    /**
49
     *
16769 efrain 50
     * @var \Laminas\Mvc\I18n\Translator
51
     */
52
    private $translator;
53
 
54
 
55
    /**
56
     *
57
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
58
     * @param \LeadersLinked\Cache\CacheInterface $cache
59
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
115 efrain 60
     * @param array $config
16769 efrain 61
     * @param \Laminas\Mvc\I18n\Translator $translator
115 efrain 62
     */
16769 efrain 63
    public function __construct($adapter, $cache, $logger, $config, $translator)
16768 efrain 64
    {
16769 efrain 65
        $this->adapter      = $adapter;
66
        $this->cache        = $cache;
67
        $this->logger       = $logger;
68
        $this->config       = $config;
69
        $this->translator   = $translator;
115 efrain 70
    }
213 geraldo 71
 
72
    public function indexAction() {
115 efrain 73
        $request = $this->getRequest();
74
        $currentUserPlugin = $this->plugin('currentUserPlugin');
75
        $currentCompany = $currentUserPlugin->getCompany();
213 geraldo 76
        $currentUser = $currentUserPlugin->getUser();
77
 
78
 
115 efrain 79
        $request = $this->getRequest();
213 geraldo 80
        if ($request->isGet()) {
81
 
82
            $headers = $request->getHeaders();
83
 
115 efrain 84
            $isJson = false;
213 geraldo 85
            if ($headers->has('Accept')) {
115 efrain 86
                $accept = $headers->get('Accept');
213 geraldo 87
 
115 efrain 88
                $prioritized = $accept->getPrioritized();
213 geraldo 89
 
90
                foreach ($prioritized as $key => $value) {
115 efrain 91
                    $raw = trim($value->getRaw());
213 geraldo 92
 
93
                    if (!$isJson) {
115 efrain 94
                        $isJson = strpos($raw, 'json');
95
                    }
96
                }
97
            }
213 geraldo 98
 
99
            if ($isJson) {
115 efrain 100
                $search = $this->params()->fromQuery('search', []);
16766 efrain 101
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
213 geraldo 102
 
15371 efrain 103
                $start = intval($this->params()->fromQuery('start', 0), 10);
213 geraldo 104
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
15371 efrain 105
                $page =  intval($start / $records_x_page);
106
                $page++;
107
 
213 geraldo 108
                $order = $this->params()->fromQuery('order', []);
109
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
16766 efrain 110
                $order_direction = empty($order[0]['dir']) ? 'ASC' : Functions::sanitizeFilterString(filter_var($order[0]['dir']));
213 geraldo 111
 
112
                $fields = ['name'];
115 efrain 113
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
213 geraldo 114
 
115
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
115 efrain 116
                    $order_direction = 'ASC';
117
                }
213 geraldo 118
 
15444 efrain 119
                $companySelfEvaluationMapper = SelfEvaluationFormMapper::getInstance($this->adapter);
115 efrain 120
                $paginator = $companySelfEvaluationMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
213 geraldo 121
 
115 efrain 122
                $items = [];
123
                $records = $paginator->getCurrentItems();
213 geraldo 124
                foreach ($records as $record) {
125
 
15444 efrain 126
                    if ($record->language == SelfEvaluationForm::LANGUAGE_SPANISH) {
115 efrain 127
                        $language = 'LABEL_SPANISH';
15444 efrain 128
                    } else if ($record->language == SelfEvaluationForm::LANGUAGE_ENGLISH) {
115 efrain 129
                        $language = 'LABEL_ENGLISH';
130
                    } else {
131
                        $language = '';
213 geraldo 132
                    }
133
 
115 efrain 134
                    $item = [
135
                        'id' => $record->id,
136
                        'name' => $record->name,
137
                        'language' => $language,
138
                        'status' => $record->status,
139
                        'actions' => [
213 geraldo 140
                            'link_edit' => $this->url()->fromRoute('self-evaluation/forms/edit', ['id' => $record->uuid]),
141
                            'link_delete' => $this->url()->fromRoute('self-evaluation/forms/delete', ['id' => $record->uuid])
142
                        ]
115 efrain 143
                    ];
213 geraldo 144
 
115 efrain 145
                    array_push($items, $item);
146
                }
213 geraldo 147
 
115 efrain 148
                return new JsonModel([
149
                    'success' => true,
150
                    'data' => [
151
                        'items' => $items,
152
                        'total' => $paginator->getTotalItemCount(),
153
                    ]
154
                ]);
213 geraldo 155
            } else {
115 efrain 156
 
15444 efrain 157
                $form = new SelfEvaluationFormForm();
213 geraldo 158
 
115 efrain 159
                $this->layout()->setTemplate('layout/layout-backend');
160
                $viewModel = new ViewModel();
161
                $viewModel->setTemplate('leaders-linked/self-evaluation-forms/index.phtml');
162
                $viewModel->setVariable('form', $form);
213 geraldo 163
                return $viewModel;
115 efrain 164
            }
165
        } else {
166
            return new JsonModel([
167
                'success' => false,
168
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
213 geraldo 169
            ]);
170
            ;
115 efrain 171
        }
172
    }
213 geraldo 173
 
174
    public function addAction() {
115 efrain 175
        $request = $this->getRequest();
176
        $currentUserPlugin = $this->plugin('currentUserPlugin');
177
        $currentCompany = $currentUserPlugin->getCompany();
213 geraldo 178
        $currentUser = $currentUserPlugin->getUser();
179
 
115 efrain 180
        $request = $this->getRequest();
213 geraldo 181
 
182
 
183
        if ($request->isPost()) {
15444 efrain 184
            $form = new SelfEvaluationFormForm();
115 efrain 185
            $dataPost = $request->getPost()->toArray();
15444 efrain 186
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : SelfEvaluationForm::STATUS_INACTIVE;
213 geraldo 187
 
115 efrain 188
            $form->setData($dataPost);
213 geraldo 189
 
190
            if ($form->isValid()) {
115 efrain 191
                $dataPost = (array) $form->getData();
192
 
193
                $hydrator = new ObjectPropertyHydrator();
15444 efrain 194
                $companySelfEvaluation = new SelfEvaluationForm();
115 efrain 195
                $hydrator->hydrate($dataPost, $companySelfEvaluation);
213 geraldo 196
 
197
                if (!$companySelfEvaluation->status) {
15444 efrain 198
                    $companySelfEvaluation->status = SelfEvaluationForm::STATUS_INACTIVE;
115 efrain 199
                }
200
                $companySelfEvaluation->company_id = $currentCompany->id;
201
 
213 geraldo 202
 
15444 efrain 203
                $companySelfEvaluationMapper = SelfEvaluationFormMapper::getInstance($this->adapter);
115 efrain 204
                $result = $companySelfEvaluationMapper->insert($companySelfEvaluation);
213 geraldo 205
 
206
                if ($result) {
115 efrain 207
                    $this->logger->info('Se agrego el tamaño de empresa ' . $companySelfEvaluation->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
213 geraldo 208
 
209
                    // Get record by id
210 geraldo 210
                    $record = $companySelfEvaluationMapper->fetchOne($companySelfEvaluation->id);
211
 
213 geraldo 212
                    if ($record) {
1098 geraldo 213
 
213 geraldo 214
                        $data = [
215
                            'success' => true,
216
                            'id' => $record->id,
217
                            'action_edit' => $this->url()->fromRoute('self-evaluation/forms/edit', ['id' => $record->uuid]),
218
                            'data' => 'LABEL_RECORD_ADDED'
219
                        ];
216 geraldo 220
                    } else {
1098 geraldo 221
 
216 geraldo 222
                        $data = [
223
                            'success' => false,
224
                            'data' => 'ERROR_RECORD_NOT_FOUND'
225
                        ];
213 geraldo 226
                    }
227
                } else {
115 efrain 228
                    $data = [
213 geraldo 229
                        'success' => false,
230
                        'data' => $companySelfEvaluationMapper->getError()
115 efrain 231
                    ];
210 geraldo 232
                }
233
 
115 efrain 234
                return new JsonModel($data);
235
            } else {
236
                $messages = [];
237
                $form_messages = (array) $form->getMessages();
213 geraldo 238
                foreach ($form_messages as $fieldname => $field_messages) {
239
 
115 efrain 240
                    $messages[$fieldname] = array_values($field_messages);
241
                }
213 geraldo 242
 
115 efrain 243
                return new JsonModel([
213 geraldo 244
                    'success' => false,
245
                    'data' => $messages
115 efrain 246
                ]);
247
            }
248
        } else {
249
            $data = [
250
                'success' => false,
251
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
252
            ];
213 geraldo 253
 
115 efrain 254
            return new JsonModel($data);
255
        }
213 geraldo 256
 
115 efrain 257
        return new JsonModel($data);
258
    }
213 geraldo 259
 
260
    public function editAction() {
115 efrain 261
        $request = $this->getRequest();
262
        $currentUserPlugin = $this->plugin('currentUserPlugin');
263
        $currentCompany = $currentUserPlugin->getCompany();
213 geraldo 264
        $currentUser = $currentUserPlugin->getUser();
265
 
115 efrain 266
        $request = $this->getRequest();
267
        $uuid = $this->params()->fromRoute('id');
268
 
213 geraldo 269
 
270
        if (!$uuid) {
115 efrain 271
            $data = [
213 geraldo 272
                'success' => false,
273
                'data' => 'ERROR_INVALID_PARAMETER'
115 efrain 274
            ];
213 geraldo 275
 
115 efrain 276
            return new JsonModel($data);
277
        }
278
 
15444 efrain 279
        $companySelfEvaluationMapper = SelfEvaluationFormMapper::getInstance($this->adapter);
115 efrain 280
        $companySelfEvaluation = $companySelfEvaluationMapper->fetchOneByUuid($uuid);
213 geraldo 281
        if (!$companySelfEvaluation) {
115 efrain 282
            $data = [
213 geraldo 283
                'success' => false,
284
                'data' => 'ERROR_RECORD_NOT_FOUND'
115 efrain 285
            ];
213 geraldo 286
 
115 efrain 287
            return new JsonModel($data);
288
        }
213 geraldo 289
 
290
        if ($companySelfEvaluation->company_id != $currentCompany->id) {
115 efrain 291
            return new JsonModel([
213 geraldo 292
                'success' => false,
293
                'data' => 'ERROR_UNAUTHORIZED'
115 efrain 294
            ]);
295
        }
213 geraldo 296
 
297
 
298
        if ($request->isPost()) {
15444 efrain 299
            $form = new SelfEvaluationFormForm();
115 efrain 300
            $dataPost = $request->getPost()->toArray();
15444 efrain 301
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : SelfEvaluationForm::STATUS_INACTIVE;
213 geraldo 302
 
115 efrain 303
            $form->setData($dataPost);
213 geraldo 304
 
305
            if ($form->isValid()) {
115 efrain 306
                $dataPost = (array) $form->getData();
213 geraldo 307
 
115 efrain 308
                $hydrator = new ObjectPropertyHydrator();
309
                $hydrator->hydrate($dataPost, $companySelfEvaluation);
213 geraldo 310
 
311
                if (!$companySelfEvaluation->status) {
15444 efrain 312
                    $companySelfEvaluation->status = SelfEvaluationForm::STATUS_INACTIVE;
115 efrain 313
                }
213 geraldo 314
 
115 efrain 315
                $result = $companySelfEvaluationMapper->update($companySelfEvaluation);
213 geraldo 316
 
317
                if ($result) {
115 efrain 318
                    $this->logger->info('Se actualizo el tamaño de empresa ' . $companySelfEvaluation->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
319
                    $data = [
320
                        'success' => true,
215 geraldo 321
                        'id' => $companySelfEvaluation->id,
322
                        'action_edit' => $this->url()->fromRoute('self-evaluation/forms/edit', ['id' => $companySelfEvaluation->uuid]),
115 efrain 323
                        'data' => 'LABEL_RECORD_UPDATED'
324
                    ];
325
                } else {
326
                    $data = [
213 geraldo 327
                        'success' => false,
216 geraldo 328
                        'data' => $companySelfEvaluationMapper->getError()
115 efrain 329
                    ];
330
                }
213 geraldo 331
 
115 efrain 332
                return new JsonModel($data);
333
            } else {
334
                $messages = [];
335
                $form_messages = (array) $form->getMessages();
213 geraldo 336
                foreach ($form_messages as $fieldname => $field_messages) {
115 efrain 337
                    $messages[$fieldname] = array_values($field_messages);
338
                }
213 geraldo 339
 
115 efrain 340
                return new JsonModel([
213 geraldo 341
                    'success' => false,
342
                    'data' => $messages
115 efrain 343
                ]);
344
            }
345
        } else if ($request->isGet()) {
346
            $hydrator = new ObjectPropertyHydrator();
213 geraldo 347
 
115 efrain 348
            $data = [
349
                'success' => true,
195 efrain 350
                'data' => [
351
                    'id' => $companySelfEvaluation->uuid,
352
                    'name' => $companySelfEvaluation->name,
353
                    'description' => $companySelfEvaluation->description,
354
                    'text' => $companySelfEvaluation->text,
355
                    'language' => $companySelfEvaluation->language,
356
                    'status' => $companySelfEvaluation->status,
357
                    'content' => $companySelfEvaluation->content ? json_decode($companySelfEvaluation->content) : [],
358
                ]
115 efrain 359
            ];
213 geraldo 360
 
115 efrain 361
            return new JsonModel($data);
362
        } else {
363
            $data = [
364
                'success' => false,
365
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
366
            ];
213 geraldo 367
 
115 efrain 368
            return new JsonModel($data);
369
        }
213 geraldo 370
 
115 efrain 371
        return new JsonModel($data);
372
    }
213 geraldo 373
 
374
    public function deleteAction() {
115 efrain 375
        $request = $this->getRequest();
376
        $currentUserPlugin = $this->plugin('currentUserPlugin');
377
        $currentCompany = $currentUserPlugin->getCompany();
213 geraldo 378
        $currentUser = $currentUserPlugin->getUser();
379
 
115 efrain 380
        $request = $this->getRequest();
381
        $uuid = $this->params()->fromRoute('id');
213 geraldo 382
 
383
        if (!$uuid) {
115 efrain 384
            $data = [
213 geraldo 385
                'success' => false,
386
                'data' => 'ERROR_INVALID_PARAMETER'
115 efrain 387
            ];
213 geraldo 388
 
115 efrain 389
            return new JsonModel($data);
390
        }
213 geraldo 391
 
15444 efrain 392
        $companySelfEvaluationMapper = SelfEvaluationFormMapper::getInstance($this->adapter);
115 efrain 393
        $companySelfEvaluation = $companySelfEvaluationMapper->fetchOneByUuid($uuid);
213 geraldo 394
        if (!$companySelfEvaluation) {
115 efrain 395
            $data = [
213 geraldo 396
                'success' => false,
397
                'data' => 'ERROR_RECORD_NOT_FOUND'
115 efrain 398
            ];
213 geraldo 399
 
115 efrain 400
            return new JsonModel($data);
401
        }
213 geraldo 402
 
403
        if ($companySelfEvaluation->company_id != $currentCompany->id) {
115 efrain 404
            return new JsonModel([
213 geraldo 405
                'success' => false,
406
                'data' => 'ERROR_UNAUTHORIZED'
115 efrain 407
            ]);
408
        }
190 efrain 409
 
213 geraldo 410
        if ($request->isPost()) {
411
 
189 efrain 412
            //Falta borrar los test  primeramente
15444 efrain 413
            $selfEvaluationFormUserMapper = SelfEvaluationFormUserMapper::getInstance($this->adapter);
414
            $selfEvaluationFormUserMapper->deleteAllByFormId($companySelfEvaluation->id);
213 geraldo 415
 
416
 
188 efrain 417
            $result = $companySelfEvaluationMapper->delete($companySelfEvaluation->id);
213 geraldo 418
            if ($result) {
188 efrain 419
                $this->logger->info('Se borro el formulario de auto-evaluación ' . $companySelfEvaluation->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
213 geraldo 420
 
115 efrain 421
                $data = [
422
                    'success' => true,
423
                    'data' => 'LABEL_RECORD_DELETED'
424
                ];
425
            } else {
426
 
427
                $data = [
213 geraldo 428
                    'success' => false,
429
                    'data' => $companySelfEvaluationMapper->getError()
115 efrain 430
                ];
431
 
432
                return new JsonModel($data);
433
            }
434
        } else {
435
            $data = [
436
                'success' => false,
437
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
438
            ];
213 geraldo 439
 
115 efrain 440
            return new JsonModel($data);
441
        }
213 geraldo 442
 
115 efrain 443
        return new JsonModel($data);
444
    }
213 geraldo 445
 
115 efrain 446
}