Proyectos de Subversion LeadersLinked - Backend

Rev

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