Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
7489 nelberth 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Authentication\AuthenticationService;
7
use Laminas\Authentication\Result as AuthResult;
8
use Laminas\Db\Adapter\AdapterInterface;
9
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
10
use Laminas\Mvc\Controller\AbstractActionController;
11
use Laminas\Mvc\I18n\Translator;
12
use Laminas\Log\LoggerInterface;
13
use Laminas\View\Model\ViewModel;
14
use Laminas\View\Model\JsonModel;
9524 nelberth 15
use LeadersLinked\Model\Topic;
7489 nelberth 16
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
9627 nelberth 17
use LeadersLinked\Form\TopicForm;
7489 nelberth 18
use LeadersLinked\Library\Functions;
19
use LeadersLinked\Mapper\UserMapper;
9513 nelberth 20
use LeadersLinked\Mapper\TopicMapper;
7515 nelberth 21
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMapper;
7759 nelberth 22
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMembersMapper;
23
use LeadersLinked\Model\HighPerformanceTeamsGroupsMembers;
7489 nelberth 24
use LeadersLinked\Mapper\CompanyMapper;
25
use LeadersLinked\Mapper\CompanyUserMapper;
26
 
27
 
28
 
29
class HighPerformanceTeamsGroupsViewTopicController extends AbstractActionController
30
{
31
    /**
32
     *
33
     * @var AdapterInterface
34
     */
35
    private $adapter;
36
 
37
 
38
    /**
39
     *
40
     * @var AbstractAdapter
41
     */
42
    private $cache;
43
 
44
    /**
45
     *
46
     * @var  LoggerInterface
47
     */
48
    private $logger;
49
 
50
    /**
51
     *
52
     * @var array
53
     */
54
    private $config;
55
 
56
 
57
 
58
    /**
59
     *
60
     * @param AdapterInterface $adapter
61
     * @param AbstractAdapter $cache
62
     * @param LoggerInterface $logger
63
     * @param array $config
64
     */
65
    public function __construct($adapter, $cache , $logger, $config)
66
    {
67
        $this->adapter      = $adapter;
68
        $this->cache        = $cache;
69
        $this->logger       = $logger;
70
        $this->config       = $config;
71
 
72
 
73
    }
74
 
75
 
76
 
77
 
78
    public function indexAction()
79
    {
80
 
7713 nelberth 81
 
7489 nelberth 82
        $currentUserPlugin = $this->plugin('currentUserPlugin');
83
        $currentUser = $currentUserPlugin->getUser();
84
        $currentCompany = $currentUserPlugin->getCompany();
85
 
7622 nelberth 86
 
7489 nelberth 87
        $request = $this->getRequest();
88
        if($request->isGet()) {
89
 
90
 
91
            $headers  = $request->getHeaders();
92
 
93
            $isJson = false;
94
            if($headers->has('Accept')) {
95
                $accept = $headers->get('Accept');
96
 
97
                $prioritized = $accept->getPrioritized();
98
 
99
                foreach($prioritized as $key => $value) {
100
                    $raw = trim($value->getRaw());
101
 
102
                    if(!$isJson) {
103
                        $isJson = strpos($raw, 'json');
104
                    }
105
 
106
                }
107
            }
7855 nelberth 108
 
7489 nelberth 109
            if($isJson) {
7621 nelberth 110
 
7847 nelberth 111
                $group_uuid = $this->params()->fromRoute('group_uuid');
112
                if(!$group_uuid) {
7547 nelberth 113
                    $data = [
114
                        'success'   => false,
115
                        'data'   => 'ERROR_INVALID_PARAMETER'
116
                    ];
117
 
118
                    return new JsonModel($data);
119
                }
7856 nelberth 120
 
7547 nelberth 121
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
7847 nelberth 122
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
7547 nelberth 123
 
124
                if (!$highPerformanceTeamsGroups) {
125
                    $data = [
126
                        'success' => false,
127
                        'data' => 'ERROR_RECORD_NOT_FOUND'
128
                    ];
129
 
130
                    return new JsonModel($data);
131
                }
7857 nelberth 132
 
7759 nelberth 133
                $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
134
                $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
7760 nelberth 135
                if(!$highPerformanceTeamsGroupsMember) {
136
                    return new JsonModel([
137
                        'success' => false,
138
                        'data' => 'ERROR_RECORD_NOT_FOUND'
139
                    ]);
140
                }
7763 nelberth 141
                if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
7760 nelberth 142
                    return new JsonModel([
143
                        'success' => false,
144
                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
145
                    ]);
146
                }
7551 nelberth 147
 
7760 nelberth 148
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
149
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'high-performance-teams/groups/view/topic/edit');
150
                $allowDelete = $acl->isAllowed($currentUser->usertype_id,'high-performance-teams/groups/view/topic/delete');
9684 nelberth 151
                $allowView = $acl->isAllowed($currentUser->usertype_id,'high-performance-teams/groups/view');
7760 nelberth 152
 
9519 nelberth 153
 
154
 
155
                $topicMapper = TopicMapper::getInstance($this->adapter);
9522 nelberth 156
 
9523 nelberth 157
                $paginator = $topicMapper->fetchAllHighPerfromanceTeamsGroup($highPerformanceTeamsGroups->id);
9522 nelberth 158
 
7760 nelberth 159
                $items = [];
7554 nelberth 160
 
7760 nelberth 161
 
162
 
163
                foreach($paginator as $record)
164
                {
165
 
166
 
167
                    $item = [
168
                        'title' => $record->title,
169
                        'status'=> $record->status,
170
                        'actions' => [
7859 nelberth 171
                            'link_edit' => $allowEdit ? $this->url()->fromRoute('high-performance-teams/groups/view/topic/edit', ['group_uuid' => $highPerformanceTeamsGroups->uuid, 'topic_uuid' => $record->uuid]) : '',
172
                            'link_delete' => $allowDelete ? $this->url()->fromRoute('high-performance-teams/groups/view/topic/delete', ['group_uuid' => $highPerformanceTeamsGroups->uuid,'topic_uuid' => $record->uuid]) : '',
9684 nelberth 173
                            'link_view' => $allowView ? $this->url()->fromRoute('high-performance-teams/groups/view/topic/view', ['group_uuid' => $highPerformanceTeamsGroups->uuid,'topic_uuid' => $record->uuid]) : '',
7760 nelberth 174
                        ]
175
 
176
                    ];
7489 nelberth 177
 
7760 nelberth 178
                    array_push($items, $item);
7489 nelberth 179
 
180
                }
7760 nelberth 181
 
182
                return new JsonModel([
183
                    'success' => true,
184
                    'data' => [
185
                        'items' => $items
186
                    ]
187
                ]);
7489 nelberth 188
 
7500 nelberth 189
            }
7489 nelberth 190
        } else {
191
            return new JsonModel([
192
                'success' => false,
193
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
194
            ]);
195
        }
196
    }
197
 
198
    public function addAction()
199
    {
200
 
7857 nelberth 201
        $group_uuid = $this->params()->fromRoute('group_uuid');
202
        if(!$group_uuid) {
203
            $data = [
204
                'success'   => false,
205
                'data'   => 'ERROR_INVALID_PARAMETER'
206
            ];
207
 
208
            return new JsonModel($data);
209
        }
7717 nelberth 210
 
7514 nelberth 211
        $currentUserPlugin = $this->plugin('currentUserPlugin');
212
        $currentUser = $currentUserPlugin->getUser();
213
        $currentCompany = $currentUserPlugin->getCompany();
7499 nelberth 214
 
7489 nelberth 215
        $request = $this->getRequest();
216
        if($request->isPost()) {
9627 nelberth 217
            $form = new  TopicForm();
7489 nelberth 218
            $dataPost = $request->getPost()->toArray();
219
 
220
            $form->setData($dataPost);
221
 
222
            if($form->isValid()) {
223
                $dataPost = (array) $form->getData();
9656 nelberth 224
                $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : Topic::STATUS_INACTIVE;
7514 nelberth 225
 
7489 nelberth 226
 
7514 nelberth 227
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
7857 nelberth 228
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
7514 nelberth 229
 
7763 nelberth 230
                if (!$highPerformanceTeamsGroups) {
7514 nelberth 231
                    $data = [
232
                        'success' => false,
233
                        'data' => 'ERROR_RECORD_NOT_FOUND'
234
                    ];
235
 
236
                    return new JsonModel($data);
237
                }
9527 nelberth 238
 
7763 nelberth 239
                $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
240
                $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
241
                if(!$highPerformanceTeamsGroupsMember) {
7514 nelberth 242
                    return new JsonModel([
243
                        'success' => false,
7763 nelberth 244
                        'data' => 'ERROR_RECORD_NOT_FOUND'
7514 nelberth 245
                    ]);
7763 nelberth 246
                }
247
                if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
248
                    return new JsonModel([
249
                        'success' => false,
250
                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
251
                    ]);
252
                }
7514 nelberth 253
 
9528 nelberth 254
                $hydrator = new ObjectPropertyHydrator();
255
                $topic = new Topic();
256
 
9530 nelberth 257
 
9524 nelberth 258
                $hydrator->hydrate($dataPost, $topic);
9677 nelberth 259
                $topic->type='hptg';
9532 nelberth 260
                $topic->high_performance_group_id=$highPerformanceTeamsGroups->id;
9516 nelberth 261
                $topicMapper = TopicMapper::getInstance($this->adapter);
9533 nelberth 262
 
9524 nelberth 263
                $result = $topicMapper->insert($topic);
7489 nelberth 264
 
265
                if($result) {
266
 
9524 nelberth 267
                    $this->logger->info('Se agrego el topic del grupo ' . $topic->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
7489 nelberth 268
 
269
                    $data = [
270
                        'success'   => true,
271
                        'data'   => 'LABEL_RECORD_ADDED'
272
                    ];
273
                } else {
274
                    $data = [
275
                        'success'   => false,
9516 nelberth 276
                        'data'      => $topicMapper->getError()
7489 nelberth 277
                    ];
278
 
279
                }
280
 
281
                return new JsonModel($data);
282
 
283
            } else {
284
                $messages = [];
285
                $form_messages = (array) $form->getMessages();
286
                foreach($form_messages  as $fieldname => $field_messages)
287
                {
288
 
289
                    $messages[$fieldname] = array_values($field_messages);
290
                }
291
 
292
                return new JsonModel([
293
                    'success'   => false,
294
                    'data'   => $messages
295
                ]);
296
            }
297
 
298
        } else {
299
            $data = [
300
                'success' => false,
7704 nelberth 301
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
7489 nelberth 302
            ];
303
 
304
            return new JsonModel($data);
305
        }
306
 
307
        return new JsonModel($data);
308
 
309
 
310
    }
311
 
312
 
313
 
314
     public function editAction(){
315
 
316
        $currentUserPlugin = $this->plugin('currentUserPlugin');
317
        $currentUser = $currentUserPlugin->getUser();
318
        $currentCompany = $currentUserPlugin->getCompany();
319
        $request = $this->getRequest();
7847 nelberth 320
        $group_uuid = $this->params()->fromRoute('group_uuid');
7743 nelberth 321
 
7834 nelberth 322
        $topic_uuid = $this->params()->fromRoute('topic_uuid');
7489 nelberth 323
 
324
 
7847 nelberth 325
        if(!$group_uuid) {
7489 nelberth 326
            $data = [
327
                'success'   => false,
328
                'data'   => 'ERROR_INVALID_PARAMETER'
329
            ];
330
 
331
            return new JsonModel($data);
332
        }
7743 nelberth 333
        if(!$topic_uuid) {
334
            $data = [
335
                'success'   => false,
336
                'data'   => 'ERROR_INVALID_PARAMETER'
337
            ];
338
 
339
            return new JsonModel($data);
340
        }
7750 nelberth 341
 
9536 nelberth 342
 
9516 nelberth 343
        $topicMapper = TopicMapper::getInstance($this->adapter);
344
        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
7489 nelberth 345
 
7743 nelberth 346
        if (!$topic) {
7489 nelberth 347
            $data = [
348
                'success' => false,
349
                'data' => 'ERROR_RECORD_NOT_FOUND'
350
            ];
351
 
352
            return new JsonModel($data);
353
        }
354
 
9535 nelberth 355
 
7489 nelberth 356
 
357
        if($request->isPost()) {
9627 nelberth 358
            $form = new  TopicForm();
7489 nelberth 359
            $dataPost = $request->getPost()->toArray();
9656 nelberth 360
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : Topic::STATUS_INACTIVE;
7756 nelberth 361
 
7752 nelberth 362
 
7755 nelberth 363
 
7756 nelberth 364
 
7489 nelberth 365
            $form->setData($dataPost);
366
 
367
            if($form->isValid()) {
7757 nelberth 368
                $dataPost = (array) $form->getData();
7756 nelberth 369
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
7860 nelberth 370
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
7756 nelberth 371
 
7763 nelberth 372
                if (!$highPerformanceTeamsGroups) {
7756 nelberth 373
                    $data = [
374
                        'success' => false,
375
                        'data' => 'ERROR_RECORD_NOT_FOUND'
376
                    ];
377
 
378
                    return new JsonModel($data);
379
                }
7763 nelberth 380
 
381
                $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
382
                $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
383
                if(!$highPerformanceTeamsGroupsMember) {
384
                    return new JsonModel([
385
                        'success' => false,
386
                        'data' => 'ERROR_RECORD_NOT_FOUND'
387
                    ]);
388
                }
389
                if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
390
                    return new JsonModel([
391
                        'success' => false,
392
                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
393
                    ]);
394
                }
7756 nelberth 395
 
7489 nelberth 396
                $hydrator = new ObjectPropertyHydrator();
7748 nelberth 397
                $hydrator->hydrate($dataPost, $topic);
7860 nelberth 398
 
9516 nelberth 399
                $result = $topicMapper->update($topic);
7751 nelberth 400
 
7489 nelberth 401
                if($result) {
7744 nelberth 402
                    $this->logger->info('Se actualizo el grupo de alto rendimiento ' . $topic->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
7489 nelberth 403
 
404
                    $data = [
405
                        'success' => true,
406
                        'data' => 'LABEL_RECORD_UPDATED'
407
                    ];
408
                } else {
409
                    $data = [
410
                        'success'   => false,
9516 nelberth 411
                        'data'      => $topicMapper->getError()
7489 nelberth 412
                    ];
413
                }
414
 
415
                return new JsonModel($data);
416
 
417
            } else {
418
                $messages = [];
419
                $form_messages = (array) $form->getMessages();
420
                foreach($form_messages  as $fieldname => $field_messages)
421
                {
422
                    $messages[$fieldname] = array_values($field_messages);
423
                }
424
 
425
                return new JsonModel([
426
                    'success'   => false,
427
                    'data'   => $messages
428
                ]);
429
            }
430
        }else if ($request->isGet()) {
431
            $hydrator = new ObjectPropertyHydrator();
432
 
433
            $data = [
434
                'success' => true,
7743 nelberth 435
                'data' => $hydrator->extract($topic)
7489 nelberth 436
            ];
437
 
438
            return new JsonModel($data);
439
        } else {
440
            $data = [
441
                'success' => false,
442
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
443
            ];
444
 
445
            return new JsonModel($data);
446
        }
447
 
448
        return new JsonModel($data);
449
 
450
    }
451
 
452
 
453
 
454
 
455
    public function deleteAction(){
7737 nelberth 456
 
7489 nelberth 457
        $currentUserPlugin = $this->plugin('currentUserPlugin');
458
        $currentCompany = $currentUserPlugin->getCompany();
459
        $currentUser = $currentUserPlugin->getUser();
460
 
461
        $request = $this->getRequest();
7847 nelberth 462
        $group_uuid = $this->params()->fromRoute('group_uuid');
7834 nelberth 463
        $topic_uuid = $this->params()->fromRoute('topic_uuid');
7489 nelberth 464
 
465
 
7847 nelberth 466
        if (!$group_uuid) {
7489 nelberth 467
            $data = [
468
                'success' => false,
469
                'data' => 'ERROR_INVALID_PARAMETER'
470
            ];
471
 
472
            return new JsonModel($data);
473
        }
7763 nelberth 474
        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
7847 nelberth 475
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
7763 nelberth 476
 
477
                if (!$highPerformanceTeamsGroups) {
478
                    $data = [
479
                        'success' => false,
480
                        'data' => 'ERROR_RECORD_NOT_FOUND'
481
                    ];
482
 
483
                    return new JsonModel($data);
484
                }
7489 nelberth 485
 
7763 nelberth 486
        $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
487
        $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
488
        if(!$highPerformanceTeamsGroupsMember) {
489
            return new JsonModel([
490
                'success' => false,
491
                'data' => 'ERROR_RECORD_NOT_FOUND'
492
            ]);
493
        }
494
        if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
495
            return new JsonModel([
496
                'success' => false,
497
                'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
498
            ]);
499
        }
7489 nelberth 500
 
501
 
9516 nelberth 502
        $topicMapper = TopicMapper::getInstance($this->adapter);
503
        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
7489 nelberth 504
 
7737 nelberth 505
        if (!$topic) {
7489 nelberth 506
            $data = [
507
                'success' => false,
508
                'data' => 'ERROR_RECORD_NOT_FOUND'
509
            ];
510
 
511
            return new JsonModel($data);
512
        }
513
 
7763 nelberth 514
 
7489 nelberth 515
 
516
        if ($request->isPost()) {
517
 
518
 
9516 nelberth 519
            $result = $topicMapper->delete($topic->id);
7489 nelberth 520
            if ($result) {
7737 nelberth 521
                $this->logger->info('Se borro el grupo de alto rendimiento  ' . $topic->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
7489 nelberth 522
 
523
                $data = [
524
                    'success' => true,
525
                    'data' => 'LABEL_RECORD_DELETED'
526
                ];
527
            } else {
528
 
529
                $data = [
530
                    'success' => false,
9516 nelberth 531
                    'data' => $topicMapper->getError()
7489 nelberth 532
                ];
533
 
534
                return new JsonModel($data);
535
            }
536
        } else {
537
            $data = [
538
                'success' => false,
539
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
540
            ];
541
 
542
            return new JsonModel($data);
543
        }
544
 
545
        return new JsonModel($data);
546
    }
547
 
548
 
549
 
550
 
551
}