Proyectos de Subversion LeadersLinked - Backend

Rev

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