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
1102 geraldo 1
<?php
1115 geraldo 2
 
1102 geraldo 3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
16768 efrain 8
 
1102 geraldo 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;
1320 efrain 14
use LeadersLinked\Mapper\BehaviorMapper;
15444 efrain 15
use LeadersLinked\Form\Behavior\BehaviorForm;
1320 efrain 16
use LeadersLinked\Model\Behavior;
1102 geraldo 17
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
18
 
1115 geraldo 19
class BehaviorsController extends AbstractActionController {
20
 
1102 geraldo 21
    /**
22
     *
16769 efrain 23
     * @var \Laminas\Db\Adapter\AdapterInterface
1102 geraldo 24
     */
25
    private $adapter;
16768 efrain 26
 
1102 geraldo 27
    /**
28
     *
16769 efrain 29
     * @var \LeadersLinked\Cache\CacheInterface
1102 geraldo 30
     */
16769 efrain 31
    private $cache;
32
 
33
 
34
    /**
35
     *
36
     * @var \Laminas\Log\LoggerInterface
37
     */
1102 geraldo 38
    private $logger;
16768 efrain 39
 
1102 geraldo 40
    /**
41
     *
42
     * @var array
43
     */
44
    private $config;
16768 efrain 45
 
16769 efrain 46
 
1102 geraldo 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
1102 geraldo 59
     * @param array $config
16769 efrain 60
     * @param \Laminas\Mvc\I18n\Translator $translator
1102 geraldo 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;
1102 geraldo 69
    }
70
 
14989 efrain 71
    public function indexAction()
72
    {
1115 geraldo 73
        $currentUserPlugin = $this->plugin('currentUserPlugin');
74
        $currentUser = $currentUserPlugin->getUser();
75
        $currentCompany = $currentUserPlugin->getCompany();
14989 efrain 76
 
1115 geraldo 77
        $request = $this->getRequest();
14989 efrain 78
 
1115 geraldo 79
        $request = $this->getRequest();
14989 efrain 80
        if($request->isGet()) {
81
 
82
 
83
            $headers  = $request->getHeaders();
84
 
1115 geraldo 85
            $isJson = false;
14989 efrain 86
            if($headers->has('Accept')) {
1115 geraldo 87
                $accept = $headers->get('Accept');
14989 efrain 88
 
1115 geraldo 89
                $prioritized = $accept->getPrioritized();
14989 efrain 90
 
91
                foreach($prioritized as $key => $value) {
1115 geraldo 92
                    $raw = trim($value->getRaw());
14989 efrain 93
 
94
                    if(!$isJson) {
1115 geraldo 95
                        $isJson = strpos($raw, 'json');
96
                    }
14989 efrain 97
 
1115 geraldo 98
                }
99
            }
14989 efrain 100
 
1115 geraldo 101
 
14989 efrain 102
            if($isJson) {
103
 
104
 
105
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
15444 efrain 106
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'jobs-description/behaviors/edit');
107
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'jobs-description/behaviors/delete');
14989 efrain 108
 
109
 
110
 
111
 
112
                $search = $this->params()->fromQuery('search');
16766 efrain 113
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
14989 efrain 114
 
115
                $page               = intval($this->params()->fromQuery('start', 1), 10);
116
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
117
                $order =  $this->params()->fromQuery('order', []);
118
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
16766 efrain 119
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));
14989 efrain 120
 
121
                $fields =  ['description'];
122
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'description';
123
 
124
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
125
                    $order_direction = 'ASC';
126
                }
127
 
1320 efrain 128
                $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
14989 efrain 129
 
130
                if($currentCompany) {
131
                    $paginator = $behaviorMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
132
 
133
                } else {
15444 efrain 134
                    $paginator = $behaviorMapper->fetchAllDataTableDefault($search, $page, $records_x_page, $order_field, $order_direction);
14989 efrain 135
 
136
                }
137
 
1115 geraldo 138
                $items = [];
14989 efrain 139
                $records = $paginator->getCurrentItems();
140
                foreach($records as $record)
141
                {
1115 geraldo 142
                    $item = [
1121 geraldo 143
                        'description' => $record->description,
14989 efrain 144
                        'status' => $record->status,
145
                        'actions' => [
15444 efrain 146
                            'link_edit' => $allowEdit ?  $this->url()->fromRoute('jobs-description/behaviors/edit', ['id' => $record->uuid ]) : '',
147
                            'link_delete' => $allowDelete ? $this->url()->fromRoute('jobs-description/behaviors/delete', ['id' => $record->uuid ]) : '',
14989 efrain 148
                        ],
149
 
1115 geraldo 150
                    ];
14989 efrain 151
 
1115 geraldo 152
                    array_push($items, $item);
153
                }
14989 efrain 154
 
1115 geraldo 155
                return new JsonModel([
156
                    'success' => true,
14989 efrain 157
                    'data' => [
158
                        'items' => $items,
159
                        'total' => $paginator->getTotalItemCount(),
160
                    ]
1115 geraldo 161
                ]);
14989 efrain 162
            } else  {
163
                $form = new BehaviorForm();
164
 
165
                $this->layout()->setTemplate('layout/layout-backend');
166
                $viewModel = new ViewModel();
167
                $viewModel->setTemplate('leaders-linked/behaviors/index.phtml');
168
                $viewModel->setVariable('form', $form);
169
                return $viewModel ;
1115 geraldo 170
            }
14989 efrain 171
 
1115 geraldo 172
        } else {
1102 geraldo 173
            return new JsonModel([
174
                'success' => false,
175
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
14989 efrain 176
            ]);;
1115 geraldo 177
        }
178
    }
1102 geraldo 179
 
1115 geraldo 180
    public function addAction() {
1102 geraldo 181
        $currentUserPlugin = $this->plugin('currentUserPlugin');
182
        $currentUser = $currentUserPlugin->getUser();
183
        $currentCompany = $currentUserPlugin->getCompany();
1115 geraldo 184
 
1102 geraldo 185
        $request = $this->getRequest();
1115 geraldo 186
 
187
 
188
        if ($request->isPost()) {
14989 efrain 189
 
190
            $inline = $this->params()->fromRoute('inline');
191
            $inline = $inline == 'yes' ? true : false;
192
 
1320 efrain 193
            $form = new BehaviorForm();
1102 geraldo 194
            $dataPost = $request->getPost()->toArray();
14989 efrain 195
 
196
            if($inline) {
197
                $dataPost['status'] = Behavior::STATUS_ACTIVE;
198
            }
1115 geraldo 199
 
1102 geraldo 200
            $form->setData($dataPost);
14989 efrain 201
            if ($form->isValid()) {
1115 geraldo 202
 
1102 geraldo 203
                $dataPost = (array) $form->getData();
204
 
205
                $hydrator = new ObjectPropertyHydrator();
1320 efrain 206
                $behavior = new Behavior();
1102 geraldo 207
                $hydrator->hydrate($dataPost, $behavior);
1115 geraldo 208
 
14989 efrain 209
 
210
                if(empty($dataPost['status'])) {
1320 efrain 211
                    $behavior->status = Behavior::STATUS_INACTIVE;
1102 geraldo 212
                }
14989 efrain 213
 
1115 geraldo 214
                if ($currentCompany) {
1102 geraldo 215
                    $behavior->company_id = $currentCompany->id;
216
                }
217
 
1320 efrain 218
                $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
14989 efrain 219
                $result = $behaviorMapper->insert($behavior);
220
                if ($result) {
221
 
222
                    if($inline) {
223
 
224
                        $behavior = $behaviorMapper->fetchOne($behavior->id);
225
 
226
                        $response = [
227
                            'success' => true,
228
                            'data' => [
229
                                'message' => 'LABEL_RECORD_ADDED',
230
                                'behavior' => [
231
                                    'uuid' => $behavior->uuid,
232
                                    'description' => $behavior->description,
233
                                ]
234
                            ]
235
                        ];
1134 geraldo 236
                    } else {
14989 efrain 237
 
238
                        $response = [
239
                            'success' => true,
240
                            'data' => 'LABEL_RECORD_ADDED',
1134 geraldo 241
                        ];
242
                    }
14989 efrain 243
 
244
                    $this->logger->info('Se agrego la conducta observable ' . $behavior->description, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
245
 
246
                } else {
247
                    $response = [
248
                        'success' => false,
249
                                'data' => $behaviorMapper->getError()
250
                    ];
1102 geraldo 251
                }
1115 geraldo 252
 
14989 efrain 253
                return new JsonModel($response);
1102 geraldo 254
            } else {
255
                $messages = [];
256
                $form_messages = (array) $form->getMessages();
1115 geraldo 257
                foreach ($form_messages as $fieldname => $field_messages) {
258
 
1102 geraldo 259
                    $messages[$fieldname] = array_values($field_messages);
260
                }
1115 geraldo 261
 
1102 geraldo 262
                return new JsonModel([
1115 geraldo 263
                    'success' => false,
264
                    'data' => $messages
1102 geraldo 265
                ]);
266
            }
267
        } else {
268
            $data = [
269
                'success' => false,
270
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
271
            ];
1115 geraldo 272
 
1102 geraldo 273
            return new JsonModel($data);
274
        }
1115 geraldo 275
 
1102 geraldo 276
        return new JsonModel($data);
277
    }
1115 geraldo 278
 
14989 efrain 279
    public function editAction()
280
    {
1102 geraldo 281
        $currentUserPlugin = $this->plugin('currentUserPlugin');
282
        $currentUser = $currentUserPlugin->getUser();
14989 efrain 283
        $currentCompany = $currentUserPlugin->getCompany();
1115 geraldo 284
 
1102 geraldo 285
        $request = $this->getRequest();
286
        $id = $this->params()->fromRoute('id');
287
 
1115 geraldo 288
 
289
        if (!$id) {
1102 geraldo 290
            $data = [
1115 geraldo 291
                'success' => false,
292
                'data' => 'ERROR_INVALID_PARAMETER'
1102 geraldo 293
            ];
1115 geraldo 294
 
1102 geraldo 295
            return new JsonModel($data);
296
        }
297
 
1320 efrain 298
        $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1102 geraldo 299
        $behavior = $behaviorMapper->fetchOneByUuid($id);
1115 geraldo 300
        if (!$behavior) {
1102 geraldo 301
            $data = [
1115 geraldo 302
                'success' => false,
303
                'data' => 'ERROR_RECORD_NOT_FOUND'
1102 geraldo 304
            ];
1115 geraldo 305
 
1102 geraldo 306
            return new JsonModel($data);
307
        }
14989 efrain 308
 
309
        if($currentCompany) {
310
 
311
            if($behavior->company_id != $currentCompany->id) {
312
                $response = [
313
                    'success' => false,
314
                    'data' =>  'ERROR_UNAUTHORIZED'
315
                ];
316
 
317
                return new JsonModel($response);
318
            }
319
 
320
        } else {
321
            if($behavior->company_id) {
322
                $response = [
323
                    'success' => false,
324
                    'data' =>  'ERROR_UNAUTHORIZED'
325
                ];
326
 
327
                return new JsonModel($response);
328
            }
329
        }
1115 geraldo 330
 
331
        if ($request->isPost()) {
1320 efrain 332
            $form = new BehaviorForm();
1102 geraldo 333
            $dataPost = $request->getPost()->toArray();
1115 geraldo 334
 
1102 geraldo 335
            $form->setData($dataPost);
1115 geraldo 336
 
337
            if ($form->isValid()) {
1102 geraldo 338
                $dataPost = (array) $form->getData();
1115 geraldo 339
 
1102 geraldo 340
                $hydrator = new ObjectPropertyHydrator();
341
                $hydrator->hydrate($dataPost, $behavior);
14989 efrain 342
 
343
                if(empty($dataPost['status'])) {
1320 efrain 344
                    $behavior->status = Behavior::STATUS_INACTIVE;
1102 geraldo 345
                }
1115 geraldo 346
 
1102 geraldo 347
                $result = $behaviorMapper->update($behavior);
1115 geraldo 348
                if ($result) {
1114 geraldo 349
                    $this->logger->info('Se actualizo la conducta observable ' . $behavior->description, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1115 geraldo 350
 
1102 geraldo 351
                    $data = [
352
                        'success' => true,
353
                        'data' => 'LABEL_RECORD_UPDATED'
354
                    ];
355
                } else {
356
                    $data = [
1115 geraldo 357
                        'success' => false,
358
                        'data' => $behaviorMapper->getError()
1102 geraldo 359
                    ];
360
                }
1115 geraldo 361
 
1102 geraldo 362
                return new JsonModel($data);
363
            } else {
364
                $messages = [];
365
                $form_messages = (array) $form->getMessages();
1115 geraldo 366
                foreach ($form_messages as $fieldname => $field_messages) {
1102 geraldo 367
                    $messages[$fieldname] = array_values($field_messages);
368
                }
1115 geraldo 369
 
1102 geraldo 370
                return new JsonModel([
1115 geraldo 371
                    'success' => false,
372
                    'data' => $messages
1102 geraldo 373
                ]);
374
            }
375
        } else if ($request->isGet()) {
376
            $hydrator = new ObjectPropertyHydrator();
1115 geraldo 377
 
1102 geraldo 378
            $data = [
379
                'success' => true,
15460 efrain 380
                'data' => [
381
                    'description' => $behavior->description,
382
                    'status' => $behavior->status,
383
                ]
1102 geraldo 384
            ];
1115 geraldo 385
 
1102 geraldo 386
            return new JsonModel($data);
387
        } else {
388
            $data = [
389
                'success' => false,
390
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
391
            ];
1115 geraldo 392
 
1102 geraldo 393
            return new JsonModel($data);
394
        }
1115 geraldo 395
 
1102 geraldo 396
        return new JsonModel($data);
397
    }
1115 geraldo 398
 
14989 efrain 399
    public function deleteAction()
400
    {
14303 kerby 401
        $currentUserPlugin = $this->plugin('currentUserPlugin');
402
        $currentUser = $currentUserPlugin->getUser();
14989 efrain 403
        $currentCompany = $currentUserPlugin->getCompany();
1115 geraldo 404
 
14303 kerby 405
        $request = $this->getRequest();
14989 efrain 406
        if ($request->isPost()) {
407
 
408
            $id = $this->params()->fromRoute('id');
409
            if (!$id) {
410
                $response = [
411
                    'success' => false,
412
                    'data' => 'ERROR_INVALID_PARAMETER'
413
                ];
414
 
415
                return new JsonModel($response);
416
            }
417
 
418
 
419
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
420
            $behavior = $behaviorMapper->fetchOneByUuid($id);
421
            if (!$behavior) {
422
                $response = [
423
                    'success' => false,
424
                    'data' => 'ERROR_RECORD_NOT_FOUND'
425
                ];
426
 
427
                return new JsonModel($response);
428
            }
429
 
430
            if($currentCompany) {
431
 
432
                if($behavior->company_id != $currentCompany->id) {
433
                    $response = [
434
                        'success' => false,
435
                        'data' =>  'ERROR_UNAUTHORIZED'
436
                    ];
437
 
438
                    return new JsonModel($response);
439
                }
440
 
441
            } else {
442
                if($behavior->company_id) {
443
                    $response = [
444
                        'success' => false,
445
                        'data' =>  'ERROR_UNAUTHORIZED'
446
                    ];
447
 
448
                    return new JsonModel($response);
449
                }
450
            }
1115 geraldo 451
 
14989 efrain 452
 
1115 geraldo 453
 
14989 efrain 454
 
455
            $result = $behaviorMapper->delete($behavior->id);
456
            if ($result) {
457
                $this->logger->info('Se borro la conducta observable : ' . $behavior->description, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1115 geraldo 458
 
14989 efrain 459
                $response = [
460
                    'success' => true,
461
                    'data' => 'LABEL_RECORD_DELETED'
462
                ];
463
            } else {
464
 
465
                $response = [
466
                    'success' => false,
467
                    'data' => $behaviorMapper->getError()
468
                ];
469
 
470
            }
471
        } else {
472
            $response = [
14305 kerby 473
                'success' => false,
14989 efrain 474
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
14305 kerby 475
            ];
1115 geraldo 476
 
14305 kerby 477
        }
14291 kerby 478
 
14989 efrain 479
        return new JsonModel($response);
480
    }
481
 
482
    public function importAction() {
483
        $currentUserPlugin = $this->plugin('currentUserPlugin');
484
        $currentUser = $currentUserPlugin->getUser();
485
        $currentCompany = $currentUserPlugin->getCompany();
486
 
487
        if (!$currentCompany) {
14305 kerby 488
            $data = [
489
                'success' => false,
14989 efrain 490
                'data' => 'ERROR_UNAUTHORIZED'
14305 kerby 491
            ];
14989 efrain 492
 
14305 kerby 493
            return new JsonModel($data);
494
        }
14989 efrain 495
 
496
        $request = $this->getRequest();
497
 
14306 kerby 498
        if ($request->isPost()) {
14989 efrain 499
 
500
            $behaviorMapper =BehaviorMapper::getInstance($this->adapter);
501
            $behaviorsDefault = $behaviorMapper->fetchAllByDefault();
502
 
503
            $new_records = 0;
504
            foreach ($behaviorsDefault as $behaviorDefault) {
505
 
506
                $behavior = $behaviorMapper->fetchOneByCompanyIdAndIdDefault($currentCompany->id, $behaviorDefault->id);
507
                if (!$behavior) {
508
                    $behavior = new Behavior();
509
                    $behavior->behavior_id_default  = $behaviorDefault->id;
510
                    $behavior->company_id           = $currentCompany->id;
511
                    $behavior->description          = $behaviorDefault->description;
512
                    $behavior->status               = $behaviorDefault->status;
513
 
514
 
515
 
516
 
517
 
518
                    if ($behaviorMapper->insert($behavior)) {
519
                        $new_records++;
520
                    } else {
521
                        $data = [
522
                            'success' => false,
523
                            'data' => 'ERROR_CANT_ADD_BEHAVIOR'
524
                        ];
525
 
526
                        return new JsonModel($data);
527
                    }
528
                }
529
            }
1115 geraldo 530
 
14989 efrain 531
            if ($new_records) {
532
 
533
                if (1 == $new_records) {
534
                    $data = [
535
                        'success' => true,
536
                        'data' => 'LABEL_1_BEHAVIOR_IMPORTED'
537
                    ];
538
 
539
                    return new JsonModel($data);
540
                } else {
541
                    $data = [
542
                        'success' => true,
543
                        'data' => $new_records . ' LABEL_MULTI_BEHAVIORS_IMPORTED'
544
                    ];
545
 
546
                    return new JsonModel($data);
547
                }
548
            } else {
14306 kerby 549
                $data = [
550
                    'success' => true,
14989 efrain 551
                    'data' => 'LABEL_NO_BEHAVIOR_IMPORTED'
14306 kerby 552
                ];
14989 efrain 553
 
14306 kerby 554
                return new JsonModel($data);
555
            }
556
        } else {
1102 geraldo 557
            $data = [
558
                'success' => false,
559
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
560
            ];
14989 efrain 561
 
14306 kerby 562
            return new JsonModel($data);
563
        }
14989 efrain 564
 
1102 geraldo 565
        return new JsonModel($data);
566
    }
14989 efrain 567
 
568
 
569
 
570
 
1115 geraldo 571
 
1102 geraldo 572
}