Proyectos de Subversion LeadersLinked - Backend

Rev

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