Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
1 www 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
use Laminas\Mvc\Controller\AbstractActionController;
9
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
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\CompetencyMapper;
15
use LeadersLinked\Model\Competency;
16
use LeadersLinked\Form\CompetencyForm;
17
use LeadersLinked\Mapper\CompetencyTypeMapper;
28 efrain 18
use LeadersLinked\Model\CompetencyType;
1 www 19
 
20
 
21
class CompetencyController extends AbstractActionController
22
{
23
    /**
24
     *
25
     * @var AdapterInterface
26
     */
27
    private $adapter;
28
 
29
 
30
    /**
31
     *
32
     * @var AbstractAdapter
33
     */
34
    private $cache;
35
 
36
    /**
37
     *
38
     * @var  LoggerInterface
39
     */
40
    private $logger;
41
 
42
 
43
    /**
44
     *
45
     * @var array
46
     */
47
    private $config;
48
 
49
 
50
    /**
51
     *
52
     * @param AdapterInterface $adapter
53
     * @param AbstractAdapter $cache
54
     * @param LoggerInterface $logger
55
     * @param array $config
56
     */
57
    public function __construct($adapter, $cache , $logger, $config)
58
    {
59
        $this->adapter      = $adapter;
60
        $this->cache        = $cache;
61
        $this->logger       = $logger;
62
        $this->config       = $config;
63
 
64
    }
65
 
66
    public function indexAction()
67
    {
28 efrain 68
        $currentUserPlugin = $this->plugin('currentUserPlugin');
69
        $currentUser = $currentUserPlugin->getUser();
70
        $currentCompany = $currentUserPlugin->getCompany();
1 www 71
 
72
        $request = $this->getRequest();
73
 
74
        $headers  = $request->getHeaders();
75
 
76
        $request = $this->getRequest();
77
        if($request->isGet()) {
78
 
79
 
80
            $headers  = $request->getHeaders();
81
 
82
            $isJson = false;
83
            if($headers->has('Accept')) {
84
                $accept = $headers->get('Accept');
85
 
86
                $prioritized = $accept->getPrioritized();
87
 
88
                foreach($prioritized as $key => $value) {
89
                    $raw = trim($value->getRaw());
90
 
91
                    if(!$isJson) {
92
                        $isJson = strpos($raw, 'json');
93
                    }
94
 
95
                }
96
            }
97
 
98
            if($isJson) {
99
                $search = $this->params()->fromQuery('search', []);
100
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
101
 
102
                $page               = intval($this->params()->fromQuery('start', 1), 10);
103
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
104
                $order =  $this->params()->fromQuery('order', []);
105
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
106
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
107
 
108
                $fields =  ['type', 'name'];
109
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
110
 
111
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
112
                    $order_direction = 'ASC';
113
                }
114
 
115
                $competenceMapper = CompetencyMapper::getInstance($this->adapter);
116
 
28 efrain 117
 
118
 
119
                if($currentCompany) {
120
                    $paginator = $competenceMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
121
                } else {
122
                    $paginator = $competenceMapper->fetchAllDataTable($search, $page, $records_x_page, $order_field, $order_direction);
123
                }
1 www 124
                $items = [];
125
                $records = $paginator->getCurrentItems();
126
                foreach($records as $record)
127
                {
128
                    $item = [
129
                        'type' => $record['type'],
130
                        'name' => $record['name'],
131
                        'status' => $record['status'],
132
                        'actions' => [
133
                            'link_edit' => $this->url()->fromRoute('settings/competencies/edit', ['id' => $record['uuid'] ]),
134
                            'link_delete' => $this->url()->fromRoute('settings/competencies/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
 
149
 
150
            } else  {
66 efrain 151
                if($currentCompany) {
152
                    $form = new CompetencyForm($this->adapter, $currentCompany->id);
153
                } else {
154
                    $form = new CompetencyForm($this->adapter);
155
                }
1 www 156
 
157
                $this->layout()->setTemplate('layout/layout-backend');
158
                $viewModel = new ViewModel();
159
                $viewModel->setTemplate('leaders-linked/competencies/index.phtml');
160
                $viewModel->setVariable('form', $form);
161
                return $viewModel ;
162
            }
163
 
164
        } else {
165
            return new JsonModel([
166
                'success' => false,
167
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
168
            ]);;
169
        }
170
    }
171
 
172
    public function addAction()
173
    {
174
        $currentUserPlugin = $this->plugin('currentUserPlugin');
175
        $currentUser = $currentUserPlugin->getUser();
28 efrain 176
        $currentCompany = $currentUserPlugin->getCompany();
1 www 177
 
178
        $request = $this->getRequest();
179
 
180
 
181
        if($request->isPost()) {
66 efrain 182
            if($currentCompany) {
183
                $form = new CompetencyForm($this->adapter, $currentCompany->id);
184
            } else {
185
                $form = new CompetencyForm($this->adapter);
186
            }
1 www 187
            $dataPost = $request->getPost()->toArray();
188
 
189
            $form->setData($dataPost);
190
 
191
            if($form->isValid()) {
192
                $dataPost = (array) $form->getData();
193
                $dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : Competency::STATUS_INACTIVE;
194
 
195
                $competenceTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
196
                $competenceType = $competenceTypeMapper->fetchOneByUuid($dataPost['competency_type_id']);
197
                $dataPost['competency_type_id'] = $competenceType->id;
28 efrain 198
 
1 www 199
 
28 efrain 200
 
1 www 201
                $hydrator = new ObjectPropertyHydrator();
28 efrain 202
                $competence = new Competency();
203
 
204
                $hydrator->hydrate($dataPost, $competence);
205
 
206
                if($currentCompany) {
207
                    $competence->company_id = $currentCompany->id;
208
                }
209
 
1 www 210
 
211
                $competenceMapper = CompetencyMapper::getInstance($this->adapter);
28 efrain 212
                $result = $competenceMapper->insert($competence);
1 www 213
 
28 efrain 214
 
1 www 215
                if($result) {
28 efrain 216
                    $this->logger->info('Se agrego la competencia ' . $competence->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1 www 217
 
218
                    $data = [
219
                        'success'   => true,
220
                        'data'   => 'LABEL_RECORD_ADDED'
221
                    ];
222
                } else {
223
                    $data = [
224
                        'success'   => false,
225
                        'data'      => $competenceMapper->getError()
226
                    ];
227
 
228
                }
229
 
230
                return new JsonModel($data);
231
 
232
            } else {
233
                $messages = [];
234
                $form_messages = (array) $form->getMessages();
235
                foreach($form_messages  as $fieldname => $field_messages)
236
                {
237
 
238
                    $messages[$fieldname] = array_values($field_messages);
239
                }
240
 
241
                return new JsonModel([
242
                    'success'   => false,
243
                    'data'   => $messages
244
                ]);
245
            }
246
 
247
        } else {
248
            $data = [
249
                'success' => false,
250
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
251
            ];
252
 
253
            return new JsonModel($data);
254
        }
255
 
256
        return new JsonModel($data);
257
    }
258
 
259
    public function editAction()
260
    {
261
        $currentUserPlugin = $this->plugin('currentUserPlugin');
262
        $currentUser = $currentUserPlugin->getUser();
28 efrain 263
        $currentCompany = $currentUserPlugin->getCompany();
1 www 264
 
265
        $request = $this->getRequest();
266
        $uuid = $this->params()->fromRoute('id');
267
 
268
 
269
        if(!$uuid) {
270
            $data = [
271
                'success'   => false,
272
                'data'   => 'ERROR_INVALID_PARAMETER'
273
            ];
274
 
275
            return new JsonModel($data);
276
        }
277
 
278
        $competenceMapper = CompetencyMapper::getInstance($this->adapter);
279
        $competence = $competenceMapper->fetchOneByUuid($uuid);
280
        if(!$competence) {
281
            $data = [
282
                'success'   => false,
283
                'data'   => 'ERROR_RECORD_NOT_FOUND'
284
            ];
285
 
286
            return new JsonModel($data);
287
        }
288
 
28 efrain 289
        if($currentCompany) {
290
            if($competence->company_id != $currentCompany->id) {
291
                $data = [
292
                    'success'   => false,
293
                    'data'   => 'ERROR_UNAUTHORIZED'
294
                ];
295
 
296
                return new JsonModel($data);
297
            }
298
        } else {
299
            if($competence->company_id) {
300
                $data = [
301
                    'success'   => false,
302
                    'data'   => 'ERROR_UNAUTHORIZED'
303
                ];
304
 
305
                return new JsonModel($data);
306
            }
307
        }
308
 
1 www 309
        if($request->isPost()) {
66 efrain 310
            if($currentCompany) {
311
                $form = new CompetencyForm($this->adapter, $currentCompany->id);
312
            } else {
313
                $form = new CompetencyForm($this->adapter);
314
            }
1 www 315
            $dataPost = $request->getPost()->toArray();
316
 
317
 
318
            $form->setData($dataPost);
319
 
320
            if($form->isValid()) {
321
                $dataPost = (array) $form->getData();
322
                $dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : Competency::STATUS_INACTIVE;
323
 
324
                $competenceTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
325
                $competenceType = $competenceTypeMapper->fetchOneByUuid($dataPost['competency_type_id']);
326
                $dataPost['competency_type_id'] = $competenceType->id;
327
 
328
                $hydrator = new ObjectPropertyHydrator();
28 efrain 329
                $hydrator->hydrate($dataPost, $competence);
330
 
331
                $result = $competenceMapper->update($competence);
1 www 332
 
333
                if($result) {
334
                    $this->logger->info('Se actualizo la competencia ' . $competenceType->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
335
 
336
                    $data = [
337
                        'success' => true,
338
                        'data' => 'LABEL_RECORD_UPDATED'
339
                    ];
340
                } else {
341
                    $data = [
342
                        'success'   => false,
343
                        'data'      => $competenceMapper->getError()
344
                    ];
345
                }
346
 
347
                return new JsonModel($data);
348
 
349
            } else {
350
                $messages = [];
351
                $form_messages = (array) $form->getMessages();
352
                foreach($form_messages  as $fieldname => $field_messages)
353
                {
354
                    $messages[$fieldname] = array_values($field_messages);
355
                }
356
 
357
                return new JsonModel([
358
                    'success'   => false,
359
                    'data'   => $messages
360
                ]);
361
            }
362
        } else if ($request->isGet()) {
363
            $competenceTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
364
            $competenceType = $competenceTypeMapper->fetchOne($competence->competency_type_id);
365
 
366
            $hydrator = new ObjectPropertyHydrator();
367
 
368
            $data = $hydrator->extract($competence);
369
            $data['competency_type_id'] = $competenceType->uuid;
895 geraldo 370
            $data['behaviors']=$competenceType->behaviors ? json_decode($competenceType->behaviors) : [];
1 www 371
 
372
            $response = [
373
                'success' => true,
374
                'data' => $data
375
            ];
376
 
377
            return new JsonModel($response);
378
        } else {
379
            $data = [
380
                'success' => false,
381
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
382
            ];
383
 
384
            return new JsonModel($data);
385
        }
386
 
387
        return new JsonModel($data);
388
    }
389
 
390
    public function deleteAction()
391
    {
392
        $currentUserPlugin = $this->plugin('currentUserPlugin');
393
        $currentUser = $currentUserPlugin->getUser();
28 efrain 394
        $currentCompany = $currentUserPlugin->getCompany();
1 www 395
 
396
        $request = $this->getRequest();
397
        $uuid = $this->params()->fromRoute('id');
398
 
399
        if(!$uuid) {
400
            $data = [
401
                'success'   => false,
402
                'data'   => 'ERROR_INVALID_PARAMETER'
403
            ];
404
 
405
            return new JsonModel($data);
406
        }
407
 
408
 
409
        $competenceMapper = CompetencyMapper::getInstance($this->adapter);
28 efrain 410
        $competence = $competenceMapper->fetchOneByUuid($uuid);
411
        if(!$competence) {
1 www 412
            $data = [
413
                'success'   => false,
414
                'data'   => 'ERROR_RECORD_NOT_FOUND'
415
            ];
416
 
417
            return new JsonModel($data);
418
        }
419
 
28 efrain 420
        if($currentCompany) {
421
            if($competence->company_id != $currentCompany->id) {
422
                $data = [
423
                    'success'   => false,
424
                    'data'   => 'ERROR_UNAUTHORIZED'
425
                ];
426
 
427
                return new JsonModel($data);
428
            }
429
        } else {
430
            if($competence->company_id) {
431
                $data = [
432
                    'success'   => false,
433
                    'data'   => 'ERROR_UNAUTHORIZED'
434
                ];
435
 
436
                return new JsonModel($data);
437
            }
438
        }
439
 
1 www 440
        if($request->isPost()) {
28 efrain 441
            $result = $competenceMapper->delete($competence);
1 www 442
            if($result) {
28 efrain 443
                $this->logger->info('Se borro la competencia ' . $competence->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1 www 444
 
445
                $data = [
446
                    'success' => true,
447
                    'data' => 'LABEL_RECORD_DELETED'
448
                ];
449
            } else {
450
 
451
                $data = [
452
                    'success'   => false,
453
                    'data'      => $competenceMapper->getError()
454
                ];
455
 
456
                return new JsonModel($data);
457
            }
458
 
459
        } else {
460
            $data = [
461
                'success' => false,
462
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
463
            ];
464
 
465
            return new JsonModel($data);
466
        }
467
 
468
        return new JsonModel($data);
469
    }
28 efrain 470
 
471
    public function importAction()
472
    {
473
        $currentUserPlugin = $this->plugin('currentUserPlugin');
474
        $currentUser = $currentUserPlugin->getUser();
475
        $currentCompany = $currentUserPlugin->getCompany();
476
 
477
        if(!$currentCompany) {
478
            $data = [
479
                'success' => false,
480
                'data' => 'ERROR_UNAUTHORIZED'
481
            ];
482
 
483
            return new JsonModel($data);
484
        }
485
 
486
        $request = $this->getRequest();
487
 
488
        if($request->isPost()) {
489
 
490
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
491
 
492
            $competenceMapper = CompetencyMapper::getInstance($this->adapter);
493
            $competenciesDefault = $competenceMapper->fetchAllByDefault();
494
 
495
            $new_records = 0;
496
            foreach($competenciesDefault as $competencyDefault)
497
            {
498
 
499
                if($competencyDefault->status == Competency::STATUS_INACTIVE) {
500
                    continue;
501
                }
502
 
503
                $competency = $competenceMapper->fetchOneByCompanyIdAndCompetencyIdDefault($currentCompany->id, $competencyDefault->id);
504
                if(!$competency) {
505
 
506
 
507
                    $competencyType = $competencyTypeMapper->fetchOneByCompanyId($currentCompany->id, $competencyDefault->competency_type_id);
508
                    if(!$competencyType) {
509
 
510
 
511
                        $competencyTypeDefault = $competencyTypeMapper->fetchOne($competencyDefault->competency_type_id);
512
                        if(!$competencyTypeDefault) {
513
                            continue;
514
                        }
515
 
516
                        $competencyType = new CompetencyType();
517
                        $competencyType->company_id = $currentCompany->id;
518
                        $competencyType->competency_type_id_default = $competencyTypeDefault->id;
519
                        $competencyType->description = $competencyTypeDefault->description;
520
                        $competencyType->name = $competencyTypeDefault->name;
521
                        $competencyType->status = CompetencyType::STATUS_ACTIVE;
522
 
523
 
524
                        if(!$competencyTypeMapper->insert($competencyType)) {
525
 
526
                            $data = [
527
                                'success' => false,
528
                                'data' => 'ERROR_CANT_ADD_COMPETENCY_TYPE'
529
                            ];
530
 
531
                            return new JsonModel($data);
532
 
533
 
534
                        }
535
 
536
                    }
537
 
538
 
539
                    $competency = new Competency();
540
                    $competency->competency_id_default = $competencyDefault->id;
541
                    $competency->behaviors = $competencyDefault->behaviors;
542
                    $competency->company_id = $currentCompany->id;
543
                    $competency->competency_type_id = $competencyType->id;
544
                    $competency->description = $competencyDefault->description;
545
                    $competency->name = $competencyDefault->name;
546
                    $competency->status = Competency::STATUS_ACTIVE;
547
 
548
 
549
 
550
                    if($competenceMapper->insert($competency)) {
551
                        $new_records++;
552
                    } else {
553
                        $data = [
554
                            'success' => false,
555
                            'data' => 'ERROR_CANT ADD THE COMPETENCY'
556
                        ];
557
 
558
                        return new JsonModel($data);
559
                    }
560
 
561
                }
562
            }
563
 
564
            if($new_records) {
565
 
566
                if(1 == $new_records) {
567
                    $data = [
568
                        'success' => true,
569
                        'data' => 'LABEL_1_COMPETENCY_IMPORTED'
570
                    ];
571
 
572
                    return new JsonModel($data);
573
                } else {
574
                    $data = [
575
                        'success' => true,
576
                        'data' =>  $new_records . ' LABEL_MULTI_COMPETENCIES_IMPORTED'
577
                    ];
578
 
579
                    return new JsonModel($data);
580
                }
581
 
582
            } else {
583
                $data = [
584
                    'success' => true,
585
                    'data' => 'LABEL_NO_COMPETENCY_IMPORTED'
586
                ];
587
 
588
                return new JsonModel($data);
589
            }
590
 
591
 
592
 
593
 
594
        } else {
595
            $data = [
596
                'success' => false,
597
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
598
            ];
599
 
600
            return new JsonModel($data);
601
        }
602
 
603
        return new JsonModel($data);
604
    }
1 www 605
}