Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 1 | Rev 66 | 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  {
151
                $form = new CompetencyForm($this->adapter);
152
 
153
                $this->layout()->setTemplate('layout/layout-backend');
154
                $viewModel = new ViewModel();
155
                $viewModel->setTemplate('leaders-linked/competencies/index.phtml');
156
                $viewModel->setVariable('form', $form);
157
                return $viewModel ;
158
            }
159
 
160
        } else {
161
            return new JsonModel([
162
                'success' => false,
163
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
164
            ]);;
165
        }
166
    }
167
 
168
    public function addAction()
169
    {
170
        $currentUserPlugin = $this->plugin('currentUserPlugin');
171
        $currentUser = $currentUserPlugin->getUser();
28 efrain 172
        $currentCompany = $currentUserPlugin->getCompany();
1 www 173
 
174
        $request = $this->getRequest();
175
 
176
 
177
        if($request->isPost()) {
178
            $form = new  CompetencyForm($this->adapter);
179
            $dataPost = $request->getPost()->toArray();
180
 
181
            $form->setData($dataPost);
182
 
183
            if($form->isValid()) {
184
                $dataPost = (array) $form->getData();
185
                $dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : Competency::STATUS_INACTIVE;
186
 
187
                $competenceTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
188
                $competenceType = $competenceTypeMapper->fetchOneByUuid($dataPost['competency_type_id']);
189
                $dataPost['competency_type_id'] = $competenceType->id;
28 efrain 190
 
1 www 191
 
28 efrain 192
 
1 www 193
                $hydrator = new ObjectPropertyHydrator();
28 efrain 194
                $competence = new Competency();
195
 
196
                $hydrator->hydrate($dataPost, $competence);
197
 
198
                if($currentCompany) {
199
                    $competence->company_id = $currentCompany->id;
200
                }
201
 
1 www 202
 
203
                $competenceMapper = CompetencyMapper::getInstance($this->adapter);
28 efrain 204
                $result = $competenceMapper->insert($competence);
1 www 205
 
28 efrain 206
 
1 www 207
                if($result) {
28 efrain 208
                    $this->logger->info('Se agrego la competencia ' . $competence->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1 www 209
 
210
                    $data = [
211
                        'success'   => true,
212
                        'data'   => 'LABEL_RECORD_ADDED'
213
                    ];
214
                } else {
215
                    $data = [
216
                        'success'   => false,
217
                        'data'      => $competenceMapper->getError()
218
                    ];
219
 
220
                }
221
 
222
                return new JsonModel($data);
223
 
224
            } else {
225
                $messages = [];
226
                $form_messages = (array) $form->getMessages();
227
                foreach($form_messages  as $fieldname => $field_messages)
228
                {
229
 
230
                    $messages[$fieldname] = array_values($field_messages);
231
                }
232
 
233
                return new JsonModel([
234
                    'success'   => false,
235
                    'data'   => $messages
236
                ]);
237
            }
238
 
239
        } else {
240
            $data = [
241
                'success' => false,
242
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
243
            ];
244
 
245
            return new JsonModel($data);
246
        }
247
 
248
        return new JsonModel($data);
249
    }
250
 
251
    public function editAction()
252
    {
253
        $currentUserPlugin = $this->plugin('currentUserPlugin');
254
        $currentUser = $currentUserPlugin->getUser();
28 efrain 255
        $currentCompany = $currentUserPlugin->getCompany();
1 www 256
 
257
        $request = $this->getRequest();
258
        $uuid = $this->params()->fromRoute('id');
259
 
260
 
261
        if(!$uuid) {
262
            $data = [
263
                'success'   => false,
264
                'data'   => 'ERROR_INVALID_PARAMETER'
265
            ];
266
 
267
            return new JsonModel($data);
268
        }
269
 
270
        $competenceMapper = CompetencyMapper::getInstance($this->adapter);
271
        $competence = $competenceMapper->fetchOneByUuid($uuid);
272
        if(!$competence) {
273
            $data = [
274
                'success'   => false,
275
                'data'   => 'ERROR_RECORD_NOT_FOUND'
276
            ];
277
 
278
            return new JsonModel($data);
279
        }
280
 
28 efrain 281
        if($currentCompany) {
282
            if($competence->company_id != $currentCompany->id) {
283
                $data = [
284
                    'success'   => false,
285
                    'data'   => 'ERROR_UNAUTHORIZED'
286
                ];
287
 
288
                return new JsonModel($data);
289
            }
290
        } else {
291
            if($competence->company_id) {
292
                $data = [
293
                    'success'   => false,
294
                    'data'   => 'ERROR_UNAUTHORIZED'
295
                ];
296
 
297
                return new JsonModel($data);
298
            }
299
        }
300
 
1 www 301
        if($request->isPost()) {
302
            $form = new  CompetencyForm($this->adapter);
303
            $dataPost = $request->getPost()->toArray();
304
 
305
 
306
            $form->setData($dataPost);
307
 
308
            if($form->isValid()) {
309
                $dataPost = (array) $form->getData();
310
                $dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : Competency::STATUS_INACTIVE;
311
 
312
                $competenceTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
313
                $competenceType = $competenceTypeMapper->fetchOneByUuid($dataPost['competency_type_id']);
314
                $dataPost['competency_type_id'] = $competenceType->id;
315
 
316
                $hydrator = new ObjectPropertyHydrator();
28 efrain 317
                $hydrator->hydrate($dataPost, $competence);
318
 
319
                $result = $competenceMapper->update($competence);
1 www 320
 
321
                if($result) {
322
                    $this->logger->info('Se actualizo la competencia ' . $competenceType->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
323
 
324
                    $data = [
325
                        'success' => true,
326
                        'data' => 'LABEL_RECORD_UPDATED'
327
                    ];
328
                } else {
329
                    $data = [
330
                        'success'   => false,
331
                        'data'      => $competenceMapper->getError()
332
                    ];
333
                }
334
 
335
                return new JsonModel($data);
336
 
337
            } else {
338
                $messages = [];
339
                $form_messages = (array) $form->getMessages();
340
                foreach($form_messages  as $fieldname => $field_messages)
341
                {
342
                    $messages[$fieldname] = array_values($field_messages);
343
                }
344
 
345
                return new JsonModel([
346
                    'success'   => false,
347
                    'data'   => $messages
348
                ]);
349
            }
350
        } else if ($request->isGet()) {
351
            $competenceTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
352
            $competenceType = $competenceTypeMapper->fetchOne($competence->competency_type_id);
353
 
354
            $hydrator = new ObjectPropertyHydrator();
355
 
356
            $data = $hydrator->extract($competence);
357
            $data['competency_type_id'] = $competenceType->uuid;
358
 
359
            $response = [
360
                'success' => true,
361
                'data' => $data
362
            ];
363
 
364
            return new JsonModel($response);
365
        } else {
366
            $data = [
367
                'success' => false,
368
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
369
            ];
370
 
371
            return new JsonModel($data);
372
        }
373
 
374
        return new JsonModel($data);
375
    }
376
 
377
    public function deleteAction()
378
    {
379
        $currentUserPlugin = $this->plugin('currentUserPlugin');
380
        $currentUser = $currentUserPlugin->getUser();
28 efrain 381
        $currentCompany = $currentUserPlugin->getCompany();
1 www 382
 
383
        $request = $this->getRequest();
384
        $uuid = $this->params()->fromRoute('id');
385
 
386
        if(!$uuid) {
387
            $data = [
388
                'success'   => false,
389
                'data'   => 'ERROR_INVALID_PARAMETER'
390
            ];
391
 
392
            return new JsonModel($data);
393
        }
394
 
395
 
396
        $competenceMapper = CompetencyMapper::getInstance($this->adapter);
28 efrain 397
        $competence = $competenceMapper->fetchOneByUuid($uuid);
398
        if(!$competence) {
1 www 399
            $data = [
400
                'success'   => false,
401
                'data'   => 'ERROR_RECORD_NOT_FOUND'
402
            ];
403
 
404
            return new JsonModel($data);
405
        }
406
 
28 efrain 407
        if($currentCompany) {
408
            if($competence->company_id != $currentCompany->id) {
409
                $data = [
410
                    'success'   => false,
411
                    'data'   => 'ERROR_UNAUTHORIZED'
412
                ];
413
 
414
                return new JsonModel($data);
415
            }
416
        } else {
417
            if($competence->company_id) {
418
                $data = [
419
                    'success'   => false,
420
                    'data'   => 'ERROR_UNAUTHORIZED'
421
                ];
422
 
423
                return new JsonModel($data);
424
            }
425
        }
426
 
1 www 427
        if($request->isPost()) {
28 efrain 428
            $result = $competenceMapper->delete($competence);
1 www 429
            if($result) {
28 efrain 430
                $this->logger->info('Se borro la competencia ' . $competence->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1 www 431
 
432
                $data = [
433
                    'success' => true,
434
                    'data' => 'LABEL_RECORD_DELETED'
435
                ];
436
            } else {
437
 
438
                $data = [
439
                    'success'   => false,
440
                    'data'      => $competenceMapper->getError()
441
                ];
442
 
443
                return new JsonModel($data);
444
            }
445
 
446
        } else {
447
            $data = [
448
                'success' => false,
449
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
450
            ];
451
 
452
            return new JsonModel($data);
453
        }
454
 
455
        return new JsonModel($data);
456
    }
28 efrain 457
 
458
    public function importAction()
459
    {
460
        $currentUserPlugin = $this->plugin('currentUserPlugin');
461
        $currentUser = $currentUserPlugin->getUser();
462
        $currentCompany = $currentUserPlugin->getCompany();
463
 
464
        if(!$currentCompany) {
465
            $data = [
466
                'success' => false,
467
                'data' => 'ERROR_UNAUTHORIZED'
468
            ];
469
 
470
            return new JsonModel($data);
471
        }
472
 
473
        $request = $this->getRequest();
474
 
475
        if($request->isPost()) {
476
 
477
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
478
 
479
            $competenceMapper = CompetencyMapper::getInstance($this->adapter);
480
            $competenciesDefault = $competenceMapper->fetchAllByDefault();
481
 
482
            $new_records = 0;
483
            foreach($competenciesDefault as $competencyDefault)
484
            {
485
 
486
                if($competencyDefault->status == Competency::STATUS_INACTIVE) {
487
                    continue;
488
                }
489
 
490
                $competency = $competenceMapper->fetchOneByCompanyIdAndCompetencyIdDefault($currentCompany->id, $competencyDefault->id);
491
                if(!$competency) {
492
 
493
 
494
                    $competencyType = $competencyTypeMapper->fetchOneByCompanyId($currentCompany->id, $competencyDefault->competency_type_id);
495
                    if(!$competencyType) {
496
 
497
 
498
                        $competencyTypeDefault = $competencyTypeMapper->fetchOne($competencyDefault->competency_type_id);
499
                        if(!$competencyTypeDefault) {
500
                            continue;
501
                        }
502
 
503
                        $competencyType = new CompetencyType();
504
                        $competencyType->company_id = $currentCompany->id;
505
                        $competencyType->competency_type_id_default = $competencyTypeDefault->id;
506
                        $competencyType->description = $competencyTypeDefault->description;
507
                        $competencyType->name = $competencyTypeDefault->name;
508
                        $competencyType->status = CompetencyType::STATUS_ACTIVE;
509
 
510
 
511
                        if(!$competencyTypeMapper->insert($competencyType)) {
512
 
513
                            $data = [
514
                                'success' => false,
515
                                'data' => 'ERROR_CANT_ADD_COMPETENCY_TYPE'
516
                            ];
517
 
518
                            return new JsonModel($data);
519
 
520
 
521
                        }
522
 
523
                    }
524
 
525
 
526
                    $competency = new Competency();
527
                    $competency->competency_id_default = $competencyDefault->id;
528
                    $competency->behaviors = $competencyDefault->behaviors;
529
                    $competency->company_id = $currentCompany->id;
530
                    $competency->competency_type_id = $competencyType->id;
531
                    $competency->description = $competencyDefault->description;
532
                    $competency->name = $competencyDefault->name;
533
                    $competency->status = Competency::STATUS_ACTIVE;
534
 
535
 
536
 
537
                    if($competenceMapper->insert($competency)) {
538
                        $new_records++;
539
                    } else {
540
                        $data = [
541
                            'success' => false,
542
                            'data' => 'ERROR_CANT ADD THE COMPETENCY'
543
                        ];
544
 
545
                        return new JsonModel($data);
546
                    }
547
 
548
                }
549
            }
550
 
551
            if($new_records) {
552
 
553
                if(1 == $new_records) {
554
                    $data = [
555
                        'success' => true,
556
                        'data' => 'LABEL_1_COMPETENCY_IMPORTED'
557
                    ];
558
 
559
                    return new JsonModel($data);
560
                } else {
561
                    $data = [
562
                        'success' => true,
563
                        'data' =>  $new_records . ' LABEL_MULTI_COMPETENCIES_IMPORTED'
564
                    ];
565
 
566
                    return new JsonModel($data);
567
                }
568
 
569
            } else {
570
                $data = [
571
                    'success' => true,
572
                    'data' => 'LABEL_NO_COMPETENCY_IMPORTED'
573
                ];
574
 
575
                return new JsonModel($data);
576
            }
577
 
578
 
579
 
580
 
581
        } else {
582
            $data = [
583
                'success' => false,
584
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
585
            ];
586
 
587
            return new JsonModel($data);
588
        }
589
 
590
        return new JsonModel($data);
591
    }
1 www 592
}