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;
15
use LeadersLinked\Model\HighPerformanceTeamsGroupsViewTopic;
16
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
17
use LeadersLinked\Form\HighPerformanceTeamsGroupsViewTopicForm;
18
use LeadersLinked\Library\Functions;
19
use LeadersLinked\Mapper\UserMapper;
20
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsViewTopicMapper;
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
            }
108
 
109
            if($isJson) {
7621 nelberth 110
 
7544 nelberth 111
                $uuid = $this->params()->fromRoute('id');
7547 nelberth 112
                if(!$uuid) {
113
                    $data = [
114
                        'success'   => false,
115
                        'data'   => 'ERROR_INVALID_PARAMETER'
116
                    ];
117
 
118
                    return new JsonModel($data);
119
                }
7549 nelberth 120
 
7547 nelberth 121
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
122
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($uuid);
123
 
124
                if (!$highPerformanceTeamsGroups) {
125
                    $data = [
126
                        'success' => false,
127
                        'data' => 'ERROR_RECORD_NOT_FOUND'
128
                    ];
129
 
130
                    return new JsonModel($data);
131
                }
7759 nelberth 132
 
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
 
153
 
154
                $search = $this->params()->fromQuery('search', []);
155
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
156
 
157
 
158
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
159
                $page               = (intval($this->params()->fromQuery('start', 1), 10)/$records_x_page)+1;
160
                $order =  $this->params()->fromQuery('order', []);
161
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
162
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
163
 
164
                $fields =  ['title', 'date'];
165
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'title';
166
 
167
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
168
                    $order_direction = 'ASC';
169
                }
170
 
171
                $highPerformanceTeamsGroupsViewTopicMapper = HighPerformanceTeamsGroupsViewTopicMapper::getInstance($this->adapter);
172
                $paginator = $highPerformanceTeamsGroupsViewTopicMapper->fetchAllByGroup($highPerformanceTeamsGroups->id);
173
 
174
                $items = [];
7554 nelberth 175
 
7760 nelberth 176
 
177
 
178
                foreach($paginator as $record)
179
                {
180
 
181
 
182
                    $item = [
183
                        'title' => $record->title,
184
                        'status'=> $record->status,
185
                        'actions' => [
186
                            'link_edit' => $allowEdit ? $this->url()->fromRoute('high-performance-teams/groups/view/topic/edit', ['id' => $highPerformanceTeamsGroups->uuid, 'topic_id' => $record->uuid]) : '',
187
                            'link_delete' => $allowDelete ? $this->url()->fromRoute('high-performance-teams/groups/view/topic/delete', ['id' => $highPerformanceTeamsGroups->uuid,'topic_id' => $record->uuid]) : '',
188
                            'link_view' => $allowView ? $this->url()->fromRoute('high-performance-teams/groups/view/topic/view', ['id' => $highPerformanceTeamsGroups->uuid,'topic_id' => $record->uuid]) : '',
189
                        ]
190
 
191
                    ];
7489 nelberth 192
 
7760 nelberth 193
                    array_push($items, $item);
7489 nelberth 194
 
195
                }
7760 nelberth 196
 
197
                return new JsonModel([
198
                    'success' => true,
199
                    'data' => [
200
                        'items' => $items
201
                    ]
202
                ]);
7489 nelberth 203
 
7500 nelberth 204
            }
7489 nelberth 205
        } else {
206
            return new JsonModel([
207
                'success' => false,
208
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
209
            ]);
210
        }
211
    }
212
 
213
    public function addAction()
214
    {
215
 
7704 nelberth 216
 
7717 nelberth 217
 
7514 nelberth 218
        $currentUserPlugin = $this->plugin('currentUserPlugin');
219
        $currentUser = $currentUserPlugin->getUser();
220
        $currentCompany = $currentUserPlugin->getCompany();
7499 nelberth 221
 
7489 nelberth 222
        $request = $this->getRequest();
223
        if($request->isPost()) {
224
            $form = new  HighPerformanceTeamsGroupsViewTopicForm($this->adapter);
225
            $dataPost = $request->getPost()->toArray();
226
 
227
            $form->setData($dataPost);
228
 
229
            if($form->isValid()) {
230
                $dataPost = (array) $form->getData();
231
                $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : HighPerformanceTeamsGroupsViewTopic::STATUS_INACTIVE;
7514 nelberth 232
 
7489 nelberth 233
 
7514 nelberth 234
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
7763 nelberth 235
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($dataPost['group_id']);
7514 nelberth 236
 
7763 nelberth 237
                if (!$highPerformanceTeamsGroups) {
7514 nelberth 238
                    $data = [
239
                        'success' => false,
240
                        'data' => 'ERROR_RECORD_NOT_FOUND'
241
                    ];
242
 
243
                    return new JsonModel($data);
244
                }
245
 
7763 nelberth 246
                $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
247
                $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
248
                if(!$highPerformanceTeamsGroupsMember) {
7514 nelberth 249
                    return new JsonModel([
250
                        'success' => false,
7763 nelberth 251
                        'data' => 'ERROR_RECORD_NOT_FOUND'
7514 nelberth 252
                    ]);
7763 nelberth 253
                }
254
                if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
255
                    return new JsonModel([
256
                        'success' => false,
257
                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
258
                    ]);
259
                }
7514 nelberth 260
 
7763 nelberth 261
                $dataPost['group_id']=$highPerformanceTeamsGroups->id;
7515 nelberth 262
 
7489 nelberth 263
                $hydrator = new ObjectPropertyHydrator();
264
                $highPerformanceTeamsGroupsViewTopic = new HighPerformanceTeamsGroupsViewTopic();
265
                $hydrator->hydrate($dataPost, $highPerformanceTeamsGroupsViewTopic);
266
 
267
                $highPerformanceTeamsGroupsViewTopicMapper = HighPerformanceTeamsGroupsViewTopicMapper::getInstance($this->adapter);
268
                $result = $highPerformanceTeamsGroupsViewTopicMapper->insert($highPerformanceTeamsGroupsViewTopic);
269
 
270
                if($result) {
271
 
7512 nelberth 272
                    $this->logger->info('Se agrego el topic del grupo ' . $highPerformanceTeamsGroupsViewTopic->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
7489 nelberth 273
 
274
                    $data = [
275
                        'success'   => true,
276
                        'data'   => 'LABEL_RECORD_ADDED'
277
                    ];
278
                } else {
279
                    $data = [
280
                        'success'   => false,
7703 nelberth 281
                        'data'      => $highPerformanceTeamsGroupsViewTopicMapper->getError()
7489 nelberth 282
                    ];
283
 
284
                }
285
 
286
                return new JsonModel($data);
287
 
288
            } else {
289
                $messages = [];
290
                $form_messages = (array) $form->getMessages();
291
                foreach($form_messages  as $fieldname => $field_messages)
292
                {
293
 
294
                    $messages[$fieldname] = array_values($field_messages);
295
                }
296
 
297
                return new JsonModel([
298
                    'success'   => false,
299
                    'data'   => $messages
300
                ]);
301
            }
302
 
303
        } else {
304
            $data = [
305
                'success' => false,
7704 nelberth 306
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
7489 nelberth 307
            ];
308
 
309
            return new JsonModel($data);
310
        }
311
 
312
        return new JsonModel($data);
313
 
314
 
315
    }
316
 
317
 
318
 
319
     public function editAction(){
320
 
321
        $currentUserPlugin = $this->plugin('currentUserPlugin');
322
        $currentUser = $currentUserPlugin->getUser();
323
        $currentCompany = $currentUserPlugin->getCompany();
324
        $request = $this->getRequest();
325
        $uuid = $this->params()->fromRoute('id');
7743 nelberth 326
 
327
        $topic_uuid = $this->params()->fromRoute('topic_id');
7489 nelberth 328
 
329
 
330
        if(!$uuid) {
331
            $data = [
332
                'success'   => false,
333
                'data'   => 'ERROR_INVALID_PARAMETER'
334
            ];
335
 
336
            return new JsonModel($data);
337
        }
7743 nelberth 338
        if(!$topic_uuid) {
339
            $data = [
340
                'success'   => false,
341
                'data'   => 'ERROR_INVALID_PARAMETER'
342
            ];
343
 
344
            return new JsonModel($data);
345
        }
7750 nelberth 346
 
7489 nelberth 347
 
348
        $highPerformanceTeamsGroupsViewTopicMapper = HighPerformanceTeamsGroupsViewTopicMapper::getInstance($this->adapter);
7743 nelberth 349
        $topic = $highPerformanceTeamsGroupsViewTopicMapper->fetchOneByUuid($topic_uuid);
7489 nelberth 350
 
7743 nelberth 351
        if (!$topic) {
7489 nelberth 352
            $data = [
353
                'success' => false,
354
                'data' => 'ERROR_RECORD_NOT_FOUND'
355
            ];
356
 
357
            return new JsonModel($data);
358
        }
359
 
360
 
7743 nelberth 361
 
7489 nelberth 362
        if($request->isPost()) {
363
            $form = new  HighPerformanceTeamsGroupsViewTopicForm($this->adapter);
364
            $dataPost = $request->getPost()->toArray();
365
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : HighPerformanceTeamsGroupsViewTopic::STATUS_INACTIVE;
7756 nelberth 366
 
7752 nelberth 367
 
7755 nelberth 368
 
7756 nelberth 369
 
7489 nelberth 370
            $form->setData($dataPost);
371
 
372
            if($form->isValid()) {
7757 nelberth 373
                $dataPost = (array) $form->getData();
7756 nelberth 374
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
7763 nelberth 375
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($dataPost['group_id']);
7756 nelberth 376
 
7763 nelberth 377
                if (!$highPerformanceTeamsGroups) {
7756 nelberth 378
                    $data = [
379
                        'success' => false,
380
                        'data' => 'ERROR_RECORD_NOT_FOUND'
381
                    ];
382
 
383
                    return new JsonModel($data);
384
                }
7763 nelberth 385
 
386
                $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
387
                $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
388
                if(!$highPerformanceTeamsGroupsMember) {
389
                    return new JsonModel([
390
                        'success' => false,
391
                        'data' => 'ERROR_RECORD_NOT_FOUND'
392
                    ]);
393
                }
394
                if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
395
                    return new JsonModel([
396
                        'success' => false,
397
                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
398
                    ]);
399
                }
400
                $dataPost['group_id']=$highPerformanceTeamsGroups->id;
7756 nelberth 401
 
7489 nelberth 402
                $hydrator = new ObjectPropertyHydrator();
7748 nelberth 403
                $hydrator->hydrate($dataPost, $topic);
7758 nelberth 404
 
7744 nelberth 405
                $result = $highPerformanceTeamsGroupsViewTopicMapper->update($topic);
7751 nelberth 406
 
7489 nelberth 407
                if($result) {
7744 nelberth 408
                    $this->logger->info('Se actualizo el grupo de alto rendimiento ' . $topic->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
7489 nelberth 409
 
410
                    $data = [
411
                        'success' => true,
412
                        'data' => 'LABEL_RECORD_UPDATED'
413
                    ];
414
                } else {
415
                    $data = [
416
                        'success'   => false,
417
                        'data'      => $highPerformanceTeamsGroupsViewTopicMapper->getError()
418
                    ];
419
                }
420
 
421
                return new JsonModel($data);
422
 
423
            } else {
424
                $messages = [];
425
                $form_messages = (array) $form->getMessages();
426
                foreach($form_messages  as $fieldname => $field_messages)
427
                {
428
                    $messages[$fieldname] = array_values($field_messages);
429
                }
430
 
431
                return new JsonModel([
432
                    'success'   => false,
433
                    'data'   => $messages
434
                ]);
435
            }
436
        }else if ($request->isGet()) {
437
            $hydrator = new ObjectPropertyHydrator();
438
 
439
            $data = [
440
                'success' => true,
7743 nelberth 441
                'data' => $hydrator->extract($topic)
7489 nelberth 442
            ];
443
 
444
            return new JsonModel($data);
445
        } else {
446
            $data = [
447
                'success' => false,
448
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
449
            ];
450
 
451
            return new JsonModel($data);
452
        }
453
 
454
        return new JsonModel($data);
455
 
456
    }
457
 
458
 
459
 
460
 
461
    public function deleteAction(){
7737 nelberth 462
 
7489 nelberth 463
        $currentUserPlugin = $this->plugin('currentUserPlugin');
464
        $currentCompany = $currentUserPlugin->getCompany();
465
        $currentUser = $currentUserPlugin->getUser();
466
 
467
        $request = $this->getRequest();
468
        $uuid = $this->params()->fromRoute('id');
7739 nelberth 469
        $topic_uuid = $this->params()->fromRoute('topic_id');
7489 nelberth 470
 
471
 
472
        if (!$uuid) {
473
            $data = [
474
                'success' => false,
475
                'data' => 'ERROR_INVALID_PARAMETER'
476
            ];
477
 
478
            return new JsonModel($data);
479
        }
7763 nelberth 480
        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
481
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($uuid);
482
 
483
                if (!$highPerformanceTeamsGroups) {
484
                    $data = [
485
                        'success' => false,
486
                        'data' => 'ERROR_RECORD_NOT_FOUND'
487
                    ];
488
 
489
                    return new JsonModel($data);
490
                }
7489 nelberth 491
 
7763 nelberth 492
        $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
493
        $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
494
        if(!$highPerformanceTeamsGroupsMember) {
495
            return new JsonModel([
496
                'success' => false,
497
                'data' => 'ERROR_RECORD_NOT_FOUND'
498
            ]);
499
        }
500
        if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
501
            return new JsonModel([
502
                'success' => false,
503
                'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
504
            ]);
505
        }
7489 nelberth 506
 
507
 
7738 nelberth 508
        $highPerformanceTeamsGroupsViewTopicMapper = HighPerformanceTeamsGroupsViewTopicMapper::getInstance($this->adapter);
7739 nelberth 509
        $topic = $highPerformanceTeamsGroupsViewTopicMapper->fetchOneByUuid($topic_uuid);
7489 nelberth 510
 
7737 nelberth 511
        if (!$topic) {
7489 nelberth 512
            $data = [
513
                'success' => false,
514
                'data' => 'ERROR_RECORD_NOT_FOUND'
515
            ];
516
 
517
            return new JsonModel($data);
518
        }
519
 
7763 nelberth 520
 
7489 nelberth 521
 
522
        if ($request->isPost()) {
523
 
524
 
7737 nelberth 525
            $result = $highPerformanceTeamsGroupsViewTopicMapper->delete($topic->id);
7489 nelberth 526
            if ($result) {
7737 nelberth 527
                $this->logger->info('Se borro el grupo de alto rendimiento  ' . $topic->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
7489 nelberth 528
 
529
                $data = [
530
                    'success' => true,
531
                    'data' => 'LABEL_RECORD_DELETED'
532
                ];
533
            } else {
534
 
535
                $data = [
536
                    'success' => false,
537
                    'data' => $highPerformanceTeamsGroupsViewTopicMapper->getError()
538
                ];
539
 
540
                return new JsonModel($data);
541
            }
542
        } else {
543
            $data = [
544
                'success' => false,
545
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
546
            ];
547
 
548
            return new JsonModel($data);
549
        }
550
 
551
        return new JsonModel($data);
552
    }
553
 
554
 
555
 
556
 
557
}