Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 28 | Rev 894 | 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;
370
 
371
            $response = [
372
                'success' => true,
373
                'data' => $data
374
            ];
375
 
376
            return new JsonModel($response);
377
        } else {
378
            $data = [
379
                'success' => false,
380
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
381
            ];
382
 
383
            return new JsonModel($data);
384
        }
385
 
386
        return new JsonModel($data);
387
    }
388
 
389
    public function deleteAction()
390
    {
391
        $currentUserPlugin = $this->plugin('currentUserPlugin');
392
        $currentUser = $currentUserPlugin->getUser();
28 efrain 393
        $currentCompany = $currentUserPlugin->getCompany();
1 www 394
 
395
        $request = $this->getRequest();
396
        $uuid = $this->params()->fromRoute('id');
397
 
398
        if(!$uuid) {
399
            $data = [
400
                'success'   => false,
401
                'data'   => 'ERROR_INVALID_PARAMETER'
402
            ];
403
 
404
            return new JsonModel($data);
405
        }
406
 
407
 
408
        $competenceMapper = CompetencyMapper::getInstance($this->adapter);
28 efrain 409
        $competence = $competenceMapper->fetchOneByUuid($uuid);
410
        if(!$competence) {
1 www 411
            $data = [
412
                'success'   => false,
413
                'data'   => 'ERROR_RECORD_NOT_FOUND'
414
            ];
415
 
416
            return new JsonModel($data);
417
        }
418
 
28 efrain 419
        if($currentCompany) {
420
            if($competence->company_id != $currentCompany->id) {
421
                $data = [
422
                    'success'   => false,
423
                    'data'   => 'ERROR_UNAUTHORIZED'
424
                ];
425
 
426
                return new JsonModel($data);
427
            }
428
        } else {
429
            if($competence->company_id) {
430
                $data = [
431
                    'success'   => false,
432
                    'data'   => 'ERROR_UNAUTHORIZED'
433
                ];
434
 
435
                return new JsonModel($data);
436
            }
437
        }
438
 
1 www 439
        if($request->isPost()) {
28 efrain 440
            $result = $competenceMapper->delete($competence);
1 www 441
            if($result) {
28 efrain 442
                $this->logger->info('Se borro la competencia ' . $competence->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1 www 443
 
444
                $data = [
445
                    'success' => true,
446
                    'data' => 'LABEL_RECORD_DELETED'
447
                ];
448
            } else {
449
 
450
                $data = [
451
                    'success'   => false,
452
                    'data'      => $competenceMapper->getError()
453
                ];
454
 
455
                return new JsonModel($data);
456
            }
457
 
458
        } else {
459
            $data = [
460
                'success' => false,
461
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
462
            ];
463
 
464
            return new JsonModel($data);
465
        }
466
 
467
        return new JsonModel($data);
468
    }
28 efrain 469
 
470
    public function importAction()
471
    {
472
        $currentUserPlugin = $this->plugin('currentUserPlugin');
473
        $currentUser = $currentUserPlugin->getUser();
474
        $currentCompany = $currentUserPlugin->getCompany();
475
 
476
        if(!$currentCompany) {
477
            $data = [
478
                'success' => false,
479
                'data' => 'ERROR_UNAUTHORIZED'
480
            ];
481
 
482
            return new JsonModel($data);
483
        }
484
 
485
        $request = $this->getRequest();
486
 
487
        if($request->isPost()) {
488
 
489
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
490
 
491
            $competenceMapper = CompetencyMapper::getInstance($this->adapter);
492
            $competenciesDefault = $competenceMapper->fetchAllByDefault();
493
 
494
            $new_records = 0;
495
            foreach($competenciesDefault as $competencyDefault)
496
            {
497
 
498
                if($competencyDefault->status == Competency::STATUS_INACTIVE) {
499
                    continue;
500
                }
501
 
502
                $competency = $competenceMapper->fetchOneByCompanyIdAndCompetencyIdDefault($currentCompany->id, $competencyDefault->id);
503
                if(!$competency) {
504
 
505
 
506
                    $competencyType = $competencyTypeMapper->fetchOneByCompanyId($currentCompany->id, $competencyDefault->competency_type_id);
507
                    if(!$competencyType) {
508
 
509
 
510
                        $competencyTypeDefault = $competencyTypeMapper->fetchOne($competencyDefault->competency_type_id);
511
                        if(!$competencyTypeDefault) {
512
                            continue;
513
                        }
514
 
515
                        $competencyType = new CompetencyType();
516
                        $competencyType->company_id = $currentCompany->id;
517
                        $competencyType->competency_type_id_default = $competencyTypeDefault->id;
518
                        $competencyType->description = $competencyTypeDefault->description;
519
                        $competencyType->name = $competencyTypeDefault->name;
520
                        $competencyType->status = CompetencyType::STATUS_ACTIVE;
521
 
522
 
523
                        if(!$competencyTypeMapper->insert($competencyType)) {
524
 
525
                            $data = [
526
                                'success' => false,
527
                                'data' => 'ERROR_CANT_ADD_COMPETENCY_TYPE'
528
                            ];
529
 
530
                            return new JsonModel($data);
531
 
532
 
533
                        }
534
 
535
                    }
536
 
537
 
538
                    $competency = new Competency();
539
                    $competency->competency_id_default = $competencyDefault->id;
540
                    $competency->behaviors = $competencyDefault->behaviors;
541
                    $competency->company_id = $currentCompany->id;
542
                    $competency->competency_type_id = $competencyType->id;
543
                    $competency->description = $competencyDefault->description;
544
                    $competency->name = $competencyDefault->name;
545
                    $competency->status = Competency::STATUS_ACTIVE;
546
 
547
 
548
 
549
                    if($competenceMapper->insert($competency)) {
550
                        $new_records++;
551
                    } else {
552
                        $data = [
553
                            'success' => false,
554
                            'data' => 'ERROR_CANT ADD THE COMPETENCY'
555
                        ];
556
 
557
                        return new JsonModel($data);
558
                    }
559
 
560
                }
561
            }
562
 
563
            if($new_records) {
564
 
565
                if(1 == $new_records) {
566
                    $data = [
567
                        'success' => true,
568
                        'data' => 'LABEL_1_COMPETENCY_IMPORTED'
569
                    ];
570
 
571
                    return new JsonModel($data);
572
                } else {
573
                    $data = [
574
                        'success' => true,
575
                        'data' =>  $new_records . ' LABEL_MULTI_COMPETENCIES_IMPORTED'
576
                    ];
577
 
578
                    return new JsonModel($data);
579
                }
580
 
581
            } else {
582
                $data = [
583
                    'success' => true,
584
                    'data' => 'LABEL_NO_COMPETENCY_IMPORTED'
585
                ];
586
 
587
                return new JsonModel($data);
588
            }
589
 
590
 
591
 
592
 
593
        } else {
594
            $data = [
595
                'success' => false,
596
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
597
            ];
598
 
599
            return new JsonModel($data);
600
        }
601
 
602
        return new JsonModel($data);
603
    }
1 www 604
}