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