Proyectos de Subversion LeadersLinked - Backend

Rev

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