Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16768 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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