Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16769 | | 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
                {
16842 efrain 142
 
143
                    $description = trim(strip_tags($record->description));
144
                    if(strlen($description)) {
145
                        $description = substr($description, 0, 50) . '...';
146
                    }
147
 
1115 geraldo 148
                    $item = [
16842 efrain 149
                        'description' => $description,
14989 efrain 150
                        'status' => $record->status,
151
                        'actions' => [
15444 efrain 152
                            'link_edit' => $allowEdit ?  $this->url()->fromRoute('jobs-description/behaviors/edit', ['id' => $record->uuid ]) : '',
153
                            'link_delete' => $allowDelete ? $this->url()->fromRoute('jobs-description/behaviors/delete', ['id' => $record->uuid ]) : '',
14989 efrain 154
                        ],
155
 
1115 geraldo 156
                    ];
14989 efrain 157
 
1115 geraldo 158
                    array_push($items, $item);
159
                }
14989 efrain 160
 
1115 geraldo 161
                return new JsonModel([
162
                    'success' => true,
14989 efrain 163
                    'data' => [
164
                        'items' => $items,
165
                        'total' => $paginator->getTotalItemCount(),
166
                    ]
1115 geraldo 167
                ]);
14989 efrain 168
            } else  {
169
                $form = new BehaviorForm();
170
 
171
                $this->layout()->setTemplate('layout/layout-backend');
172
                $viewModel = new ViewModel();
173
                $viewModel->setTemplate('leaders-linked/behaviors/index.phtml');
174
                $viewModel->setVariable('form', $form);
175
                return $viewModel ;
1115 geraldo 176
            }
14989 efrain 177
 
1115 geraldo 178
        } else {
1102 geraldo 179
            return new JsonModel([
180
                'success' => false,
181
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
14989 efrain 182
            ]);;
1115 geraldo 183
        }
184
    }
1102 geraldo 185
 
1115 geraldo 186
    public function addAction() {
1102 geraldo 187
        $currentUserPlugin = $this->plugin('currentUserPlugin');
188
        $currentUser = $currentUserPlugin->getUser();
189
        $currentCompany = $currentUserPlugin->getCompany();
1115 geraldo 190
 
1102 geraldo 191
        $request = $this->getRequest();
1115 geraldo 192
 
193
 
194
        if ($request->isPost()) {
14989 efrain 195
 
196
 
1320 efrain 197
            $form = new BehaviorForm();
1102 geraldo 198
            $dataPost = $request->getPost()->toArray();
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
 
16842 efrain 222
                   $response = [
14989 efrain 223
                            'success' => true,
16842 efrain 224
                            'data' => 'LABEL_RECORD_ADDED',
14989 efrain 225
                        ];
226
 
227
 
16842 efrain 228
                    $this->logger->info('Se agrego la conducta observable ' . substr($behavior->description, 0, 50), ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
14989 efrain 229
 
230
                } else {
231
                    $response = [
232
                        'success' => false,
233
                                'data' => $behaviorMapper->getError()
234
                    ];
1102 geraldo 235
                }
1115 geraldo 236
 
14989 efrain 237
                return new JsonModel($response);
1102 geraldo 238
            } else {
239
                $messages = [];
240
                $form_messages = (array) $form->getMessages();
1115 geraldo 241
                foreach ($form_messages as $fieldname => $field_messages) {
242
 
1102 geraldo 243
                    $messages[$fieldname] = array_values($field_messages);
244
                }
1115 geraldo 245
 
1102 geraldo 246
                return new JsonModel([
1115 geraldo 247
                    'success' => false,
248
                    'data' => $messages
1102 geraldo 249
                ]);
250
            }
251
        } else {
252
            $data = [
253
                'success' => false,
254
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
255
            ];
1115 geraldo 256
 
1102 geraldo 257
            return new JsonModel($data);
258
        }
1115 geraldo 259
 
1102 geraldo 260
        return new JsonModel($data);
261
    }
1115 geraldo 262
 
14989 efrain 263
    public function editAction()
264
    {
1102 geraldo 265
        $currentUserPlugin = $this->plugin('currentUserPlugin');
266
        $currentUser = $currentUserPlugin->getUser();
14989 efrain 267
        $currentCompany = $currentUserPlugin->getCompany();
1115 geraldo 268
 
1102 geraldo 269
        $request = $this->getRequest();
270
        $id = $this->params()->fromRoute('id');
271
 
1115 geraldo 272
 
273
        if (!$id) {
1102 geraldo 274
            $data = [
1115 geraldo 275
                'success' => false,
276
                'data' => 'ERROR_INVALID_PARAMETER'
1102 geraldo 277
            ];
1115 geraldo 278
 
1102 geraldo 279
            return new JsonModel($data);
280
        }
281
 
1320 efrain 282
        $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1102 geraldo 283
        $behavior = $behaviorMapper->fetchOneByUuid($id);
1115 geraldo 284
        if (!$behavior) {
1102 geraldo 285
            $data = [
1115 geraldo 286
                'success' => false,
287
                'data' => 'ERROR_RECORD_NOT_FOUND'
1102 geraldo 288
            ];
1115 geraldo 289
 
1102 geraldo 290
            return new JsonModel($data);
291
        }
14989 efrain 292
 
293
        if($currentCompany) {
294
 
295
            if($behavior->company_id != $currentCompany->id) {
296
                $response = [
297
                    'success' => false,
298
                    'data' =>  'ERROR_UNAUTHORIZED'
299
                ];
300
 
301
                return new JsonModel($response);
302
            }
303
 
304
        } else {
305
            if($behavior->company_id) {
306
                $response = [
307
                    'success' => false,
308
                    'data' =>  'ERROR_UNAUTHORIZED'
309
                ];
310
 
311
                return new JsonModel($response);
312
            }
313
        }
1115 geraldo 314
 
315
        if ($request->isPost()) {
1320 efrain 316
            $form = new BehaviorForm();
1102 geraldo 317
            $dataPost = $request->getPost()->toArray();
1115 geraldo 318
 
1102 geraldo 319
            $form->setData($dataPost);
1115 geraldo 320
 
321
            if ($form->isValid()) {
1102 geraldo 322
                $dataPost = (array) $form->getData();
1115 geraldo 323
 
1102 geraldo 324
                $hydrator = new ObjectPropertyHydrator();
325
                $hydrator->hydrate($dataPost, $behavior);
14989 efrain 326
 
327
                if(empty($dataPost['status'])) {
1320 efrain 328
                    $behavior->status = Behavior::STATUS_INACTIVE;
1102 geraldo 329
                }
1115 geraldo 330
 
1102 geraldo 331
                $result = $behaviorMapper->update($behavior);
1115 geraldo 332
                if ($result) {
16842 efrain 333
                    $this->logger->info('Se actualizo la conducta observable ' .  substr($behavior->description, 0, 50), ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1115 geraldo 334
 
1102 geraldo 335
                    $data = [
336
                        'success' => true,
337
                        'data' => 'LABEL_RECORD_UPDATED'
338
                    ];
339
                } else {
340
                    $data = [
1115 geraldo 341
                        'success' => false,
342
                        'data' => $behaviorMapper->getError()
1102 geraldo 343
                    ];
344
                }
1115 geraldo 345
 
1102 geraldo 346
                return new JsonModel($data);
347
            } else {
348
                $messages = [];
349
                $form_messages = (array) $form->getMessages();
1115 geraldo 350
                foreach ($form_messages as $fieldname => $field_messages) {
1102 geraldo 351
                    $messages[$fieldname] = array_values($field_messages);
352
                }
1115 geraldo 353
 
1102 geraldo 354
                return new JsonModel([
1115 geraldo 355
                    'success' => false,
356
                    'data' => $messages
1102 geraldo 357
                ]);
358
            }
359
        } else if ($request->isGet()) {
360
            $hydrator = new ObjectPropertyHydrator();
1115 geraldo 361
 
1102 geraldo 362
            $data = [
363
                'success' => true,
15460 efrain 364
                'data' => [
365
                    'description' => $behavior->description,
366
                    'status' => $behavior->status,
367
                ]
1102 geraldo 368
            ];
1115 geraldo 369
 
1102 geraldo 370
            return new JsonModel($data);
371
        } else {
372
            $data = [
373
                'success' => false,
374
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
375
            ];
1115 geraldo 376
 
1102 geraldo 377
            return new JsonModel($data);
378
        }
1115 geraldo 379
 
1102 geraldo 380
        return new JsonModel($data);
381
    }
1115 geraldo 382
 
14989 efrain 383
    public function deleteAction()
384
    {
14303 kerby 385
        $currentUserPlugin = $this->plugin('currentUserPlugin');
386
        $currentUser = $currentUserPlugin->getUser();
14989 efrain 387
        $currentCompany = $currentUserPlugin->getCompany();
1115 geraldo 388
 
14303 kerby 389
        $request = $this->getRequest();
14989 efrain 390
        if ($request->isPost()) {
391
 
392
            $id = $this->params()->fromRoute('id');
393
            if (!$id) {
394
                $response = [
395
                    'success' => false,
396
                    'data' => 'ERROR_INVALID_PARAMETER'
397
                ];
398
 
399
                return new JsonModel($response);
400
            }
401
 
402
 
403
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
404
            $behavior = $behaviorMapper->fetchOneByUuid($id);
405
            if (!$behavior) {
406
                $response = [
407
                    'success' => false,
408
                    'data' => 'ERROR_RECORD_NOT_FOUND'
409
                ];
410
 
411
                return new JsonModel($response);
412
            }
413
 
414
            if($currentCompany) {
415
 
416
                if($behavior->company_id != $currentCompany->id) {
417
                    $response = [
418
                        'success' => false,
419
                        'data' =>  'ERROR_UNAUTHORIZED'
420
                    ];
421
 
422
                    return new JsonModel($response);
423
                }
424
 
425
            } else {
426
                if($behavior->company_id) {
427
                    $response = [
428
                        'success' => false,
429
                        'data' =>  'ERROR_UNAUTHORIZED'
430
                    ];
431
 
432
                    return new JsonModel($response);
433
                }
434
            }
1115 geraldo 435
 
14989 efrain 436
 
1115 geraldo 437
 
14989 efrain 438
 
439
            $result = $behaviorMapper->delete($behavior->id);
440
            if ($result) {
441
                $this->logger->info('Se borro la conducta observable : ' . $behavior->description, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1115 geraldo 442
 
14989 efrain 443
                $response = [
444
                    'success' => true,
445
                    'data' => 'LABEL_RECORD_DELETED'
446
                ];
447
            } else {
448
 
449
                $response = [
450
                    'success' => false,
451
                    'data' => $behaviorMapper->getError()
452
                ];
453
 
454
            }
455
        } else {
456
            $response = [
14305 kerby 457
                'success' => false,
14989 efrain 458
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
14305 kerby 459
            ];
1115 geraldo 460
 
14305 kerby 461
        }
14291 kerby 462
 
14989 efrain 463
        return new JsonModel($response);
464
    }
465
 
466
    public function importAction() {
467
        $currentUserPlugin = $this->plugin('currentUserPlugin');
468
        $currentUser = $currentUserPlugin->getUser();
469
        $currentCompany = $currentUserPlugin->getCompany();
470
 
471
        if (!$currentCompany) {
14305 kerby 472
            $data = [
473
                'success' => false,
14989 efrain 474
                'data' => 'ERROR_UNAUTHORIZED'
14305 kerby 475
            ];
14989 efrain 476
 
14305 kerby 477
            return new JsonModel($data);
478
        }
14989 efrain 479
 
480
        $request = $this->getRequest();
481
 
14306 kerby 482
        if ($request->isPost()) {
14989 efrain 483
 
484
            $behaviorMapper =BehaviorMapper::getInstance($this->adapter);
485
            $behaviorsDefault = $behaviorMapper->fetchAllByDefault();
486
 
487
            $new_records = 0;
488
            foreach ($behaviorsDefault as $behaviorDefault) {
489
 
490
                $behavior = $behaviorMapper->fetchOneByCompanyIdAndIdDefault($currentCompany->id, $behaviorDefault->id);
491
                if (!$behavior) {
492
                    $behavior = new Behavior();
493
                    $behavior->behavior_id_default  = $behaviorDefault->id;
494
                    $behavior->company_id           = $currentCompany->id;
495
                    $behavior->description          = $behaviorDefault->description;
496
                    $behavior->status               = $behaviorDefault->status;
497
 
498
 
499
 
500
 
501
 
502
                    if ($behaviorMapper->insert($behavior)) {
503
                        $new_records++;
504
                    } else {
505
                        $data = [
506
                            'success' => false,
507
                            'data' => 'ERROR_CANT_ADD_BEHAVIOR'
508
                        ];
509
 
510
                        return new JsonModel($data);
511
                    }
512
                }
513
            }
1115 geraldo 514
 
14989 efrain 515
            if ($new_records) {
516
 
517
                if (1 == $new_records) {
518
                    $data = [
519
                        'success' => true,
520
                        'data' => 'LABEL_1_BEHAVIOR_IMPORTED'
521
                    ];
522
 
523
                    return new JsonModel($data);
524
                } else {
525
                    $data = [
526
                        'success' => true,
527
                        'data' => $new_records . ' LABEL_MULTI_BEHAVIORS_IMPORTED'
528
                    ];
529
 
530
                    return new JsonModel($data);
531
                }
532
            } else {
14306 kerby 533
                $data = [
534
                    'success' => true,
14989 efrain 535
                    'data' => 'LABEL_NO_BEHAVIOR_IMPORTED'
14306 kerby 536
                ];
14989 efrain 537
 
14306 kerby 538
                return new JsonModel($data);
539
            }
540
        } else {
1102 geraldo 541
            $data = [
542
                'success' => false,
543
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
544
            ];
14989 efrain 545
 
14306 kerby 546
            return new JsonModel($data);
547
        }
14989 efrain 548
 
1102 geraldo 549
        return new JsonModel($data);
550
    }
14989 efrain 551
 
552
 
553
 
554
 
1115 geraldo 555
 
1102 geraldo 556
}