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;
17
use LeadersLinked\Form\HighPerformanceTeamsGroupsViewTopicForm;
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');
151
                $allowView = $acl->isAllowed($currentUser->usertype_id,'high-performance-teams/groups/view');
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]) : '',
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()) {
9513 nelberth 217
            $form = new  HighPerformanceTeamsGroupsViewTopicForm();
7489 nelberth 218
            $dataPost = $request->getPost()->toArray();
219
 
220
            $form->setData($dataPost);
221
 
222
            if($form->isValid()) {
223
                $dataPost = (array) $form->getData();
224
                $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : HighPerformanceTeamsGroupsViewTopic::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);
9532 nelberth 259
                $topic->high_performance_group_id=$highPerformanceTeamsGroups->id;
9516 nelberth 260
                $topicMapper = TopicMapper::getInstance($this->adapter);
9533 nelberth 261
 
9524 nelberth 262
                $result = $topicMapper->insert($topic);
7489 nelberth 263
 
264
                if($result) {
265
 
9524 nelberth 266
                    $this->logger->info('Se agrego el topic del grupo ' . $topic->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
7489 nelberth 267
 
268
                    $data = [
269
                        'success'   => true,
270
                        'data'   => 'LABEL_RECORD_ADDED'
271
                    ];
272
                } else {
273
                    $data = [
274
                        'success'   => false,
9516 nelberth 275
                        'data'      => $topicMapper->getError()
7489 nelberth 276
                    ];
277
 
278
                }
279
 
280
                return new JsonModel($data);
281
 
282
            } else {
283
                $messages = [];
284
                $form_messages = (array) $form->getMessages();
285
                foreach($form_messages  as $fieldname => $field_messages)
286
                {
287
 
288
                    $messages[$fieldname] = array_values($field_messages);
289
                }
290
 
291
                return new JsonModel([
292
                    'success'   => false,
293
                    'data'   => $messages
294
                ]);
295
            }
296
 
297
        } else {
298
            $data = [
299
                'success' => false,
7704 nelberth 300
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
7489 nelberth 301
            ];
302
 
303
            return new JsonModel($data);
304
        }
305
 
306
        return new JsonModel($data);
307
 
308
 
309
    }
310
 
311
 
312
 
313
     public function editAction(){
314
 
315
        $currentUserPlugin = $this->plugin('currentUserPlugin');
316
        $currentUser = $currentUserPlugin->getUser();
317
        $currentCompany = $currentUserPlugin->getCompany();
318
        $request = $this->getRequest();
7847 nelberth 319
        $group_uuid = $this->params()->fromRoute('group_uuid');
7743 nelberth 320
 
7834 nelberth 321
        $topic_uuid = $this->params()->fromRoute('topic_uuid');
7489 nelberth 322
 
323
 
7847 nelberth 324
        if(!$group_uuid) {
7489 nelberth 325
            $data = [
326
                'success'   => false,
327
                'data'   => 'ERROR_INVALID_PARAMETER'
328
            ];
329
 
330
            return new JsonModel($data);
331
        }
7743 nelberth 332
        if(!$topic_uuid) {
333
            $data = [
334
                'success'   => false,
335
                'data'   => 'ERROR_INVALID_PARAMETER'
336
            ];
337
 
338
            return new JsonModel($data);
339
        }
7750 nelberth 340
 
9536 nelberth 341
 
9516 nelberth 342
        $topicMapper = TopicMapper::getInstance($this->adapter);
343
        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
7489 nelberth 344
 
7743 nelberth 345
        if (!$topic) {
7489 nelberth 346
            $data = [
347
                'success' => false,
348
                'data' => 'ERROR_RECORD_NOT_FOUND'
349
            ];
350
 
351
            return new JsonModel($data);
352
        }
353
 
9535 nelberth 354
 
7489 nelberth 355
 
356
        if($request->isPost()) {
9513 nelberth 357
            $form = new  HighPerformanceTeamsGroupsViewTopicForm();
7489 nelberth 358
            $dataPost = $request->getPost()->toArray();
359
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : HighPerformanceTeamsGroupsViewTopic::STATUS_INACTIVE;
7756 nelberth 360
 
7752 nelberth 361
 
7755 nelberth 362
 
7756 nelberth 363
 
7489 nelberth 364
            $form->setData($dataPost);
365
 
366
            if($form->isValid()) {
7757 nelberth 367
                $dataPost = (array) $form->getData();
7756 nelberth 368
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
7860 nelberth 369
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
7756 nelberth 370
 
7763 nelberth 371
                if (!$highPerformanceTeamsGroups) {
7756 nelberth 372
                    $data = [
373
                        'success' => false,
374
                        'data' => 'ERROR_RECORD_NOT_FOUND'
375
                    ];
376
 
377
                    return new JsonModel($data);
378
                }
7763 nelberth 379
 
380
                $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
381
                $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
382
                if(!$highPerformanceTeamsGroupsMember) {
383
                    return new JsonModel([
384
                        'success' => false,
385
                        'data' => 'ERROR_RECORD_NOT_FOUND'
386
                    ]);
387
                }
388
                if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
389
                    return new JsonModel([
390
                        'success' => false,
391
                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
392
                    ]);
393
                }
7756 nelberth 394
 
7489 nelberth 395
                $hydrator = new ObjectPropertyHydrator();
7748 nelberth 396
                $hydrator->hydrate($dataPost, $topic);
9534 nelberth 397
                $topic->high_performance_group_id=$highPerformanceTeamsGroups->id;
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
}