Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 241 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
/**
3
 *
4
 * Controlador: Mis Perfiles
5
 *
6
 */
7
declare(strict_types=1);
8
 
9
namespace LeadersLinked\Controller;
10
 
11
use Laminas\Db\Adapter\AdapterInterface;
12
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
13
use Laminas\Mvc\Controller\AbstractActionController;
14
use Laminas\Log\LoggerInterface;
15
use Laminas\View\Model\ViewModel;
16
 
17
use LeadersLinked\Mapper\GroupMapper;
18
use LeadersLinked\Mapper\GroupMemberMapper;
19
use LeadersLinked\Mapper\GroupTypeMapper;
20
use LeadersLinked\Model\Group;
21
use LeadersLinked\Model\GroupMember;
22
use LeadersLinked\Library\Functions;
23
use LeadersLinked\Mapper\IndustryMapper;
24
use LeadersLinked\Form\Feed\CreateGroupCompanyForm;
25
use LeadersLinked\Form\Feed\ShareGroupCompanyForm;
26
use LeadersLinked\Mapper\UserBlockedMapper;
27
use LeadersLinked\Mapper\QueryMapper;
28
use LeadersLinked\Mapper\UserMapper;
29
use LeadersLinked\Mapper\UserProfileMapper;
30
use LeadersLinked\Model\User;
31
use Laminas\View\Model\JsonModel;
32
use PhpParser\Node\Stmt\GroupUse;
33
use LeadersLinked\Library\UserNotification;
34
use LeadersLinked\Mapper\EmailTemplateMapper;
35
use LeadersLinked\Model\EmailTemplate;
36
use LeadersLinked\Mapper\UserNotificationSettingMapper;
37
use LeadersLinked\Library\QueueEmail;
38
use phpDocumentor\Reflection\PseudoTypes\True_;
39
use Laminas\Db\Sql\Expression;
40
use LeadersLinked\Model\Notification;
41
use LeadersLinked\Mapper\NotificationMapper;
42
 
43
 
44
class GroupController extends AbstractActionController
45
{
46
    /**
47
     *
48
     * @var AdapterInterface
49
     */
50
    private $adapter;
51
 
52
 
53
    /**
54
     *
55
     * @var AbstractAdapter
56
     */
57
    private $cache;
58
 
59
    /**
60
     *
61
     * @var  LoggerInterface
62
     */
63
    private $logger;
64
 
65
 
66
    /**
67
     *
68
     * @var array
69
     */
70
    private $config;
71
 
72
    /**
73
     *
74
     * @param AdapterInterface $adapter
75
     * @param AbstractAdapter $cache
76
     * @param LoggerInterface $logger
77
     * @param array $config
78
     */
79
    public function __construct($adapter, $cache , $logger,  $config)
80
    {
81
        $this->adapter      = $adapter;
82
        $this->cache        = $cache;
83
        $this->logger       = $logger;
84
        $this->config       = $config;
85
 
86
    }
87
 
88
    /**
89
     *
90
     * Generación del listado de perfiles
91
     * {@inheritDoc}
92
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
93
     */
94
    public function indexAction()
95
    {
96
 
97
        $this->layout()->setTemplate('layout/layout.phtml');
98
        $viewModel = new ViewModel();
99
        $viewModel->setTemplate('leaders-linked/group/index.phtml');
100
        return $viewModel ;
101
 
102
    }
103
 
104
 
105
    /**
106
     * Presenta el perfil con las opciónes de edición de cada sección
107
     * @return \Laminas\Http\Response|\Laminas\View\Model\ViewModel|\Laminas\View\Model\JsonModel
108
     */
109
    public function viewAction()
110
    {
111
        $request = $this->getRequest();
112
 
113
        $currentUserPlugin = $this->plugin('currentUserPlugin');
114
        $currentUser = $currentUserPlugin->getUser();
115
 
116
        $flashMessenger = $this->plugin('FlashMessenger');
117
        $id = $this->params()->fromRoute('id');
118
 
119
        $isJson = false;
120
 
121
        $headers  = $request->getHeaders();
122
        if($headers->has('Accept')) {
123
            $accept = $headers->get('Accept');
124
 
125
            $prioritized = $accept->getPrioritized();
126
 
127
            foreach($prioritized as $key => $value) {
128
                $raw = trim($value->getRaw());
129
 
130
                if(!$isJson) {
131
                    $isJson = strpos($raw, 'json');
132
                }
133
 
134
            }
135
        }
136
 
137
        if($isJson) {
138
 
139
            $flashMessenger = $this->plugin('FlashMessenger');
140
 
141
            if(!$id) {
142
                return new JsonModel([
143
                    'success' => false,
144
                    'data' => 'ERROR_INVALID_PARAMETER'
145
                ]);
146
 
147
            }
148
 
149
            $groupMapper = GroupMapper::getInstance($this->adapter);
150
            $group = $groupMapper->fetchOneByUuid($id);
151
 
152
            if(!$group) {
153
                return new JsonModel([
154
                    'success' => false,
155
                    'data' => 'ERROR_GROUP_NOT_FOUND'
156
                ]);
157
            }
158
 
159
            if($group->status != Group::STATUS_ACTIVE) {
160
                return new JsonModel([
161
                    'success' => false,
162
                    'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
163
                ]);
164
            }
165
 
166
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
167
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
168
 
169
            $data = [
170
                'link_request' => '',
171
                'link_accept' => '',
172
                'link_cancel' => '',
173
                'link_leave' => '',
174
            ];
175
 
176
 
177
 
178
            if($groupMember) {
179
                if($groupMember->status == GroupMember::STATUS_ACCEPTED || $groupMember->status == GroupMember::STATUS_AUTO_JOIN) {
180
                    $data['link_leave'] = $this->url()->fromRoute('group/leave', ['id' => $group->uuid] );
181
                }
182
                if($groupMember->status == GroupMember::STATUS_ADDED_BY_ADMIN) {
183
                    $data['link_accept'] = $this->url()->fromRoute('group/accept', ['id' => $group->uuid] );
184
                    $data['link_cancel'] = $this->url()->fromRoute('group/cancel', ['id' => $group->uuid] );
185
                }
186
                if( $groupMember->status == GroupMember::STATUS_JOINING_REQUESTED) {
187
                    $data['link_cancel'] = $this->url()->fromRoute('group/cancel', ['id' => $group->uuid] );
188
                }
189
                if(in_array($group->accessibility, [ Group::ACCESSIBILITY_AUTO_JOIN, Group::ACCESSIBILITY_REQUEST_TO_JOIN]) && $groupMember->status == GroupMember::STATUS_CANCELLED) {
190
 
191
                    $userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);
192
                    $userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($group->id, $currentUser->id);
193
 
194
                    if(!$userBlocked) {
195
                        $data['link_request'] =$this->url()->fromRoute('group/request', ['id' => $group->uuid] );;
196
                    }
197
                }
198
            } else {
199
 
200
                if(in_array($group->accessibility, [ Group::ACCESSIBILITY_AUTO_JOIN, Group::ACCESSIBILITY_REQUEST_TO_JOIN])) {
201
 
202
                    $userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);
203
                    $userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($group->id, $currentUser->id);
204
 
205
                    if(!$userBlocked) {
206
                        $data['link_request'] = $this->url()->fromRoute('group/request', ['id' => $group->uuid] );;
207
                    }
208
                }
209
 
210
            }
211
 
212
 
213
            return new JsonModel([
214
                'success'   => true,
215
                'data'      => $data
216
            ]);
217
 
218
 
219
 
220
        } else {
221
 
222
 
223
 
224
            if(!$id) {
225
                $flashMessenger->addErrorMessage('ERROR_INVALID_PARAMETER');
226
                return $this->redirect()->toRoute('dashboard');
227
            }
228
 
229
            $groupMapper = GroupMapper::getInstance($this->adapter);
230
            $group = $groupMapper->fetchOneByUuid($id);
231
            if(!$group) {
232
                $flashMessenger->addErrorMessage('ERROR_RECORD_NOT_FOUND');
233
                return $this->redirect()->toRoute('dashboard');
234
            }
235
 
236
 
237
 
238
 
239
 
240
 
241
            $userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);
242
            $userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($group->user_id, $currentUser->id);
243
 
244
            if($userBlocked) {
245
                $flashMessenger->addErrorMessage('ERROR_UNAUTHORIZED');
246
                return $this->redirect()->toRoute('dashboard');
247
            }
248
 
249
            $userMapper = UserMapper::getInstance($this->adapter);
250
            $ownerGroup = $userMapper->fetchOne($group->user_id);
251
 
252
            $values = [
253
                Group::ACCESSIBILITY_AUTO_JOIN => 'LABEL_AUTO_JOIN',
254
                Group::ACCESSIBILITY_REQUEST_TO_JOIN => 'LABEL_REQUEST_TO_JOIN',
255
                Group::ACCESSIBILITY_ADMIN_WILL_ADD => 'LABEL_ADMIN_WILL_ADD',
256
            ];
257
 
258
            $accessibility = $values[$group->accessibility];
259
 
260
            $values = [
261
                Group::PRIVACY_IS_PRIVATE => 'LABEL_PRIVATE',
262
                Group::PRIVACY_IS_PUBLIC => 'LABEL_PUBLIC'
263
            ];
264
 
265
            $privacy = $values[$group->privacy];
266
 
267
            $industryMapper = IndustryMapper::getInstance($this->adapter);
268
            $record = $industryMapper->fetchOne($group->industry_id);
269
 
270
            $industry = $record->name;
271
 
272
            $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
273
            $record = $groupTypeMapper->fetchOne($group->type_id);
274
 
275
            $group_type = $record->name;
276
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
277
 
278
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $group->user_id);
279
            if($groupMember) {
280
 
281
                if($groupMember->status != GroupMember::STATUS_ACCEPTED) {
282
                    $groupMember->status = $groupMember::STATUS_ACCEPTED;
283
                    $groupMemberMapper->update($groupMember);
284
                }
285
 
286
            } else {
287
                $groupMember = new GroupMember();
288
                $groupMember->user_id = $group->user_id;
289
                $groupMember->group_id = $group->id;
290
                $groupMember->status = GroupMember::STATUS_ACCEPTED;
291
 
292
                $groupMemberMapper->insert($groupMember);
293
            }
294
 
295
 
296
            $total_members = $groupMemberMapper->fetchTotalByGroupId($group->id);
297
 
298
 
299
            $member = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
300
            $show_feeds = false;
301
            if($member) {
302
                if($member->status == GroupMember::STATUS_ACCEPTED || $member->status == GroupMember::STATUS_AUTO_JOIN) {
303
                    $show_feeds = true;
304
                }
305
            }
306
 
307
            $queryMapper = QueryMapper::getInstance($this->adapter);
308
            $select = $queryMapper->getSql()->select();
309
            $select->columns(['user_id' => 'id',  'user_uuid' => 'uuid', 'first_name','last_name', 'image']);
310
            $select->from(['u' => UserMapper::_TABLE]);
311
            $select->join(['tgm' => GroupMemberMapper::_TABLE], 'tgm.user_id = u.id',[]);
312
            $select->join(['up' => UserProfileMapper::_TABLE], 'up.user_id = u.id',['user_profile_id' => 'id', 'user_profile_uuid' => 'uuid']);
313
            $select->where->equalTo('u.status', User::STATUS_ACTIVE);
314
            $select->where->equalTo('tgm.status',GroupMember::STATUS_ACCEPTED);
315
 
316
           // echo $select->getSqlString($this->adapter->platform); exit;
317
 
318
            $members = [];
319
 
320
            $records = $queryMapper->fetchAll($select);
321
            foreach($records as $record)
322
            {
323
                $userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($record['user_id'], $currentUser->id);
324
 
325
                array_push($members, [
326
                    'name' => trim($record['first_name'] . ' ' . $record['last_name']),
327
                    'image' => $this->url()->fromRoute('storage', ['code' => $record['user_uuid'], 'type' => 'user', 'filename' => $record['image'] ]),
328
                    'link_profile' => $userBlocked ? '' : $this->url()->fromRoute('profile/view',['id' => $record['user_profile_uuid'] ])
329
 
330
                ]);
331
            }
332
 
333
            $formFeed = new CreateGroupCompanyForm();
334
            $formShare = new ShareGroupCompanyForm();
335
 
336
 
337
            $this->layout()->setTemplate('layout/layout.phtml');
338
            $viewModel = new ViewModel();
339
 
340
            if($show_feeds) {
341
                $viewModel->setTemplate('leaders-linked/group/view-with-feeds.phtml');
342
            } else {
343
                $viewModel->setTemplate('leaders-linked/group/view-without-feeds.phtml');
344
            }
345
 
346
 
347
 
348
            $notificationMapper = NotificationMapper::getInstance($this->adapter);
349
            $notificationMapper->markAllNotificationsAsReadByUserIdAndGroupId($currentUser->id, $group->id);
350
 
351
 
352
 
353
 
354
 
355
 
356
            $viewModel->setVariables([
357
                'user_id'               => $currentUser->id,
358
                'total_members'         => $total_members,
359
                'accessibility'         => $accessibility ,
360
                'privacy'               => $privacy,
361
                'industry'              => $industry,
362
                'group_id'              => $group->id,
363
                'group_type'            => $group_type,
364
                'group_uuid'            => $group->uuid,
365
                'name'                  => trim($group->name),
366
                'image'                 => $group->image,
367
                'cover'                 => $group->cover,
368
                'overview'              => $group->description,
369
                'website'               => $group->website,
370
                'formFeed'              => $formFeed,
371
                'formShare'             => $formShare,
372
                'members'               => $members,
373
                'link_inmail'           => $this->url()->fromRoute('inmail', ['id' => $ownerGroup->uuid]),
374
            ]);
375
            return $viewModel ;
376
        }
377
 
378
    }
379
 
380
    public function leaveAction()
381
    {
382
        $flashMessenger = $this->plugin('FlashMessenger');
383
        $currentUserPlugin = $this->plugin('currentUserPlugin');
384
        $currentUser = $currentUserPlugin->getUser();
385
 
386
        $request = $this->getRequest();
387
        if($request->isPost()) {
388
            $id = $this->params()->fromRoute('id');
389
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
390
            $flash = $flash === 'true'? true: false;
391
 
392
            if(!$id) {
393
                return new JsonModel([
394
                    'success' => false,
395
                    'data' => 'ERROR_INVALID_PARAMETER'
396
                ]);
397
 
398
            }
399
 
400
            $groupMapper = GroupMapper::getInstance($this->adapter);
401
            $group = $groupMapper->fetchOneByUuid($id);
402
 
403
            if(!$group) {
404
                return new JsonModel([
405
                    'success' => false,
406
                    'data' => 'ERROR_GROUP_NOT_FOUND'
407
                ]);
408
            }
409
 
410
            if($group->status != Group::STATUS_ACTIVE) {
411
                return new JsonModel([
412
                    'success' => false,
413
                    'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
414
                ]);
415
            }
416
 
417
            if($group->user_id == $currentUser->id) {
418
                return new JsonModel([
419
                    'success' => false,
420
                    'data' => 'ERROR_GROUP_YOU_ARE_THE_OWNER_OF_THIS_GROUP'
421
                ]);
422
            }
423
 
424
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
425
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
426
            if($groupMember) {
427
 
428
                if($groupMember->status == GroupMember::STATUS_ACCEPTED ||$groupMember->status == GroupMember::STATUS_AUTO_JOIN ) {
429
 
430
                    $groupMember->status = GroupMember::STATUS_CANCELLED;
431
                    if($groupMemberMapper->update($groupMember)) {
432
                        if($flash) {
433
 
434
                            $flashMessenger->addSuccessMessage('LABEL_GROUP_YOU_HAVE_LEFT_THE_GROUP');
435
 
436
                            return new JsonModel([
437
                                'success' => true,
438
                                'data' =>  [
439
                                    'message' => 'LABEL_GROUP_YOU_HAVE_LEFT_THE_GROUP',
440
                                    'reload' => true
441
                                 ]
442
                            ]);
443
                        } else {
444
                            return new JsonModel([
445
                                'success' => true,
446
                                'data' =>  'LABEL_GROUP_YOU_HAVE_LEFT_THE_GROUP',
447
                            ]);
448
                        }
449
 
450
                    } else {
451
                        return new JsonModel([
452
                            'success' => false,
453
                            'data' => $groupMemberMapper->getError()
454
                        ]);
455
                    }
456
 
457
 
458
                } else {
459
                    return new JsonModel([
460
                        'success' => false,
461
                        'data' => 'ERROR_GROUP_THERE_IS_NO_PENDING_REQUEST_TO_CANCEL'
462
                    ]);
463
                }
464
 
465
            } else {
466
                return new JsonModel([
467
                    'success' => false,
468
                    'data' => 'ERROR_GROUP_YOU_NOT_MEMBER'
469
                ]);
470
            }
471
 
472
 
473
 
474
 
475
        } else {
476
 
477
            return new JsonModel([
478
                'success' => false,
479
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
480
            ]);
481
        }
482
    }
483
 
484
    public function cancelAction()
485
    {
486
        $flashMessenger = $this->plugin('FlashMessenger');
487
        $currentUserPlugin = $this->plugin('currentUserPlugin');
488
        $currentUser = $currentUserPlugin->getUser();
489
 
490
        $request = $this->getRequest();
491
        if($request->isPost()) {
492
            $id = $this->params()->fromRoute('id');
493
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
494
            $flash = $flash === 'true'? true: false;
495
 
496
            if(!$id) {
497
                return new JsonModel([
498
                    'success' => false,
499
                    'data' => 'ERROR_INVALID_PARAMETER'
500
                ]);
501
 
502
            }
503
 
504
            $groupMapper = GroupMapper::getInstance($this->adapter);
505
            $group = $groupMapper->fetchOneByUuid($id);
506
 
507
            if(!$group) {
508
                return new JsonModel([
509
                    'success' => false,
510
                    'data' => 'ERROR_GROUP_NOT_FOUND'
511
                ]);
512
            }
513
 
514
            if($group->status != Group::STATUS_ACTIVE) {
515
                return new JsonModel([
516
                    'success' => false,
517
                    'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
518
                ]);
519
            }
520
 
521
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
522
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
523
            if($groupMember) {
524
 
525
                if($groupMember->status == GroupMember::STATUS_JOINING_REQUESTED || $groupMember->status == GroupMember::STATUS_ADDED_BY_ADMIN) {
526
 
527
                    $groupMember->status = GroupMember::STATUS_CANCELLED;
528
                    if($groupMemberMapper->update($groupMember)) {
529
                        if($flash) {
530
                            $flashMessenger->addSuccessMessage('LABEL_GROUP_REQUEST_CANCELLED');
531
 
532
                            return new JsonModel([
533
                                'success' => true,
534
                                'data' =>  [
535
                                    'message' => 'LABEL_GROUP_REQUEST_CANCELLED',
536
                                    'reload' => true
537
                                 ]
538
                            ]);
539
 
540
                        } else {
541
                            return new JsonModel([
542
                                'success' => true,
543
                                'data' =>  'LABEL_GROUP_REQUEST_CANCELLED'
544
                            ]);
545
                        }
546
 
547
 
548
 
549
                    } else {
550
                        return new JsonModel([
551
                            'success' => false,
552
                            'data' => $groupMemberMapper->getError()
553
                        ]);
554
                    }
555
 
556
 
557
                } else {
558
                    return new JsonModel([
559
                        'success' => false,
560
                        'data' => 'ERROR_GROUP_THERE_IS_NO_PENDING_REQUEST_TO_CANCEL'
561
                    ]);
562
                }
563
 
564
            } else {
565
                return new JsonModel([
566
                    'success' => false,
567
                    'data' => 'ERROR_GROUP_YOU_NOT_MEMBER'
568
                ]);
569
            }
570
 
571
 
572
 
573
 
574
        } else {
575
 
576
            return new JsonModel([
577
                'success' => false,
578
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
579
            ]);
580
        }
581
    }
582
 
583
    /*
584
    public function rejectAction()
585
    {
586
        $flashMessenger = $this->plugin('FlashMessenger');
587
        $currentUserPlugin = $this->plugin('currentUserPlugin');
588
        $currentUser = $currentUserPlugin->getUser();
589
 
590
        $request = $this->getRequest();
591
        if($request->isPost()) {
592
            $id = $this->params()->fromRoute('id');
593
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
594
            $flash = $flash === 'true'? true: false;
595
 
596
            if(!$id) {
597
                return new JsonModel([
598
                    'success' => false,
599
                    'data' => 'ERROR_INVALID_PARAMETER'
600
                ]);
601
 
602
            }
603
 
604
            $groupMapper = GroupMapper::getInstance($this->adapter);
605
            $group = $groupMapper->fetchOneByUuid($id);
606
 
607
            if(!$group) {
608
                return new JsonModel([
609
                    'success' => false,
610
                    'data' => 'ERROR_GROUP_NOT_FOUND'
611
                ]);
612
            }
613
 
614
            if($group->status != Group::STATUS_ACTIVE) {
615
                return new JsonModel([
616
                    'success' => false,
617
                    'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
618
                ]);
619
            }
620
 
621
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
622
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
623
            if($groupMember) {
624
 
625
                if($groupMember->status == GroupMember::STATUS_ADDED_BY_ADMIN) {
626
 
627
                    $groupMember->status = GroupMember::STATUS_CANCELLED;
628
                    if($groupMemberMapper->update($groupMember)) {
629
                        if($flash) {
630
                            $flashMessenger->addSuccessMessage('LABEL_GROUP_REQUEST_REJECTED');
631
 
632
                            return new JsonModel([
633
                                'success' => true,
634
                                'data' =>  [
635
                                    'message' => 'LABEL_GROUP_REQUEST_CANCELLED',
636
                                    'reload' => true
637
                                ]
638
                            ]);
639
 
640
                        } else {
641
                            return new JsonModel([
642
                                'success' => true,
643
                                'data' =>  'LABEL_GROUP_REQUEST_CANCELLED'
644
                            ]);
645
                        }
646
 
647
 
648
 
649
                    } else {
650
                        return new JsonModel([
651
                            'success' => false,
652
                            'data' => $groupMemberMapper->getError()
653
                        ]);
654
                    }
655
 
656
 
657
                } else {
658
                    return new JsonModel([
659
                        'success' => false,
660
                        'data' => 'ERROR_GROUP_THERE_IS_NO_PENDING_REQUEST_TO_CANCEL'
661
                    ]);
662
                }
663
 
664
            } else {
665
                return new JsonModel([
666
                    'success' => false,
667
                    'data' => 'ERROR_GROUP_YOU_NOT_MEMBER'
668
                ]);
669
            }
670
 
671
 
672
 
673
 
674
        } else {
675
 
676
            return new JsonModel([
677
                'success' => false,
678
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
679
            ]);
680
        }
681
    }
682
 
683
    public function acceptAction()
684
    {
685
        $flashMessenger = $this->plugin('FlashMessenger');
686
        $currentUserPlugin = $this->plugin('currentUserPlugin');
687
        $currentUser = $currentUserPlugin->getUser();
688
 
689
        $request = $this->getRequest();
690
        if($request->isPost()) {
691
            $id = $this->params()->fromRoute('id');
692
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
693
            $flash = $flash === 'true'? true: false;
694
 
695
            if(!$id) {
696
                return new JsonModel([
697
                    'success' => false,
698
                    'data' => 'ERROR_INVALID_PARAMETER'
699
                ]);
700
 
701
            }
702
 
703
            $groupMapper = GroupMapper::getInstance($this->adapter);
704
            $group = $groupMapper->fetchOneByUuid($id);
705
 
706
            if(!$group) {
707
                return new JsonModel([
708
                    'success' => false,
709
                    'data' => 'ERROR_GROUP_NOT_FOUND'
710
                ]);
711
            }
712
 
713
            if($group->status != Group::STATUS_ACTIVE) {
714
                return new JsonModel([
715
                    'success' => false,
716
                    'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
717
                ]);
718
            }
719
 
720
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
721
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
722
            if($groupMember) {
723
 
724
                if($groupMember->status == GroupMember::STATUS_ADDED_BY_ADMIN) {
725
 
726
                    $groupMember->status = GroupMember::STATUS_ACCEPTED;
727
                    if($groupMemberMapper->update($groupMember)) {
728
                        if($flash) {
729
                            $flashMessenger->addSuccessMessage('LABEL_GROUP_AUTO_JOIN_SUCCESS');
730
 
731
                            return new JsonModel([
732
                                'success' => true,
733
                                'data' => [
734
                                    'message' => 'LABEL_GROUP_AUTO_JOIN_SUCCESS',
735
                                    'reload' => true
736
                                ]
737
                            ]);
738
                        } else {
739
                            return new JsonModel([
740
                                'success' => true,
741
                                'data' => 'LABEL_GROUP_AUTO_JOIN_SUCCESS'
742
                            ]);
743
                        }
744
 
745
                    } else {
746
                        return new JsonModel([
747
                            'success' => false,
748
                            'data' => $groupMemberMapper->getError()
749
                        ]);
750
                    }
751
                } else {
752
                    return new JsonModel([
753
                        'success' => false,
754
                        'data' => 'ERROR_GROUP_YOU_HAVE_NOT_INVITED_THIS_GROUP'
755
                    ]);
756
                }
757
 
758
            } else {
759
                return new JsonModel([
760
                    'success' => false,
761
                    'data' => 'ERROR_GROUP_YOU_NOT_MEMBER'
762
                ]);
763
            }
764
        } else {
765
 
766
            return new JsonModel([
767
                'success' => false,
768
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
769
            ]);
770
        }
771
    }
772
    */
773
 
774
    public function requestAction()
775
    {
776
        $flashMessenger = $this->plugin('FlashMessenger');
777
        $currentUserPlugin = $this->plugin('currentUserPlugin');
778
        $currentUser = $currentUserPlugin->getUser();
779
 
780
        $request = $this->getRequest();
781
        if($request->isPost()) {
782
            $id = $this->params()->fromRoute('id');
783
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
784
            $flash = $flash === 'true'? true: false;
785
 
786
            if(!$id) {
787
                return new JsonModel([
788
                    'success' => false,
789
                    'data' => 'ERROR_INVALID_PARAMETER'
790
                ]);
791
 
792
            }
793
 
794
            $groupMapper = GroupMapper::getInstance($this->adapter);
795
            $group = $groupMapper->fetchOneByUuid($id);
796
 
797
            if(!$group) {
798
                return new JsonModel([
799
                    'success' => false,
800
                    'data' => 'ERROR_GROUP_NOT_FOUND'
801
                ]);
802
            }
803
 
804
            if($group->status != Group::STATUS_ACTIVE) {
805
                return new JsonModel([
806
                    'success' => false,
807
                    'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
808
                ]);
809
            }
810
 
811
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
812
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
813
            if($groupMember) {
814
                if($groupMember->status == GroupMember::STATUS_ACCEPTED || $groupMember->status == GroupMember::STATUS_AUTO_JOIN) {
815
                    return new JsonModel([
816
                        'success' => false,
817
                        'data' => 'ERROR_GROUP_YOU_ARE_MEMBER'
818
                    ]);
819
                }
820
                if($groupMember->status == GroupMember::STATUS_REJECTED) {
821
                    return new JsonModel([
822
                        'success' => false,
823
                        'data' => 'ERROR_GROUP_YOUR_REQUEST_WAS_PREVIOUSLY_REJECTED'
824
                    ]);
825
                }
826
 
827
            }
828
 
829
            if($group->privacy == Group::PRIVACY_IS_PRIVATE || $group->accessibility == Group::ACCESSIBILITY_ADMIN_WILL_ADD) {
830
                return new JsonModel([
831
                    'success' => false,
832
                    'data' => 'ERROR_GROUP_ACCESS_ONLY_BY_ADMIN_INVITATION'
833
                ]);
834
            }
835
 
836
 
837
            if($groupMember) {
838
                if($group->accessibility == Group::ACCESSIBILITY_AUTO_JOIN) {
839
                    $groupMember->status    = GroupMember::STATUS_AUTO_JOIN;
840
                    $groupMember->joined_on = new Expression('NOW()');
841
                }
842
 
843
                if($group->accessibility == Group::ACCESSIBILITY_REQUEST_TO_JOIN) {
844
                    $groupMember->status                = GroupMember::STATUS_JOINING_REQUESTED;
845
                    $groupMember->joining_request_on    = new Expression('NOW()');
846
                }
847
 
848
                $result = $groupMemberMapper->update($groupMember);
849
 
850
 
851
            } else {
852
                $groupMember = new GroupMember();
853
                $groupMember->group_id  = $group->id;
854
                $groupMember->user_id   = $currentUser->id;
855
                if($group->accessibility == Group::ACCESSIBILITY_AUTO_JOIN) {
856
                    $groupMember->status    = GroupMember::STATUS_AUTO_JOIN;
857
                }
858
 
859
                if($group->accessibility == Group::ACCESSIBILITY_REQUEST_TO_JOIN) {
860
                    $groupMember->status    = GroupMember::STATUS_JOINING_REQUESTED;
861
                }
862
 
863
                $result = $groupMemberMapper->insert($groupMember);
864
            }
865
 
866
            if($result) {
867
 
868
                $userMapper = UserMapper::getInstance($this->adapter);
869
                $userOwnerGroup = $userMapper->fetchOne($group->user_id);
870
 
871
                $notification = new Notification();
872
                $notification->type     = Notification::TYPE_RECEIVE_REQUEST_JOIN_MY_GROUP;
873
                $notification->read     = Notification::NO;
874
                $notification->user_id  = $userOwnerGroup->id;
875
                $notification->group_id = $group->id;
876
                $notification->message  = 'LABEL_NOTIFICATION_RECEIVE_REQUEST_JOIN_MY_GROUP';
877
                $notification->url      = $this->url()->fromRoute('group/view', ['id' => $group->uuid]);
878
 
879
                $notificationMapper = NotificationMapper::getInstance($this->adapter);
880
                $notificationMapper->insert($notification);
881
 
882
 
883
 
884
                $userNotificationSettingMapper = UserNotificationSettingMapper::getInstance($this->adapter);
885
                $userNotificationSetting = $userNotificationSettingMapper->fetchOne($group->user_id);
886
 
887
 
888
                if($userNotificationSetting->receive_request_join_my_group) {
889
                    $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
890
                    $emailTemplate = $emailTemplateMapper->fetchOne(EmailTemplate::ID_RECEIVE_REQUEST_JOIN_MY_GROUP);
891
                    if($emailTemplate) {
892
                        $arrayCont = [
893
                            'firstname'             => $currentUser->first_name,
894
                            'lastname'              => $currentUser->last_name,
895
                            'other_user_firstname'  => $userOwnerGroup->first_name,
896
                            'other_user_lastname'   => $userOwnerGroup->last_name,
897
                            'company_name'          => '',
898
                            'group_name'            => $group->name,
899
                            'content'               => '',
900
                            'code'                  => '',
901
                            'link'                  => $this->url()->fromRoute('group/view', ['id' => $group->uuid], ['force_canonical' => true])
902
                        ];
903
 
904
                        $email = new QueueEmail($this->adapter);
905
                        $email->processEmailTemplate($emailTemplate, $arrayCont, $userOwnerGroup->email, trim($userOwnerGroup->first_name . ' ' . $userOwnerGroup->last_name));
906
                    }
907
                }
908
 
909
                if($group->accessibility == Group::ACCESSIBILITY_AUTO_JOIN) {
910
                    if($flash) {
911
                        $flashMessenger->addSuccessMessage('LABEL_GROUP_AUTO_JOIN_SUCCESS');
912
 
913
                        return new JsonModel([
914
                            'success' => true,
915
                            'data' => [
916
                                'message' => 'LABEL_GROUP_AUTO_JOIN_SUCCESS',
917
                                'reload' => true
918
                            ]
919
                        ]);
920
                    } else {
921
                        return new JsonModel([
922
                            'success' => true,
923
                            'data' => 'LABEL_GROUP_AUTO_JOIN_SUCCESS'
924
                        ]);
925
                    }
926
                }
927
                if($group->accessibility == Group::ACCESSIBILITY_REQUEST_TO_JOIN) {
928
                    if($flash) {
929
                        $flashMessenger->addSuccessMessage('LABEL_GROUP_REQUEST_SUCCESS');
930
 
931
                        return new JsonModel([
932
                            'success' => true,
933
                            'data' => [
934
                                'message' => 'LABEL_GROUP_REQUEST_SUCCESS',
935
                                'reload' => true
936
                            ]
937
                        ]);
938
                    } else {
939
                        return new JsonModel([
940
                            'success' => true,
941
                            'data' => 'LABEL_GROUP_REQUEST_SUCCESS'
942
                        ]);
943
                    }
944
                }
945
 
946
 
947
 
948
            } else {
949
                return new JsonModel([
950
                    'success' => false,
951
                    'data' => $groupMapper->getError()
952
                ]);
953
            }
954
 
955
 
956
        } else {
957
 
958
            return new JsonModel([
959
                'success' => false,
960
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
961
            ]);
962
        }
963
 
964
    }
965
 
966
    /**
967
     *
968
     * Generación del listado de perfiles
969
     * {@inheritDoc}
970
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
971
     */
972
    public function joinedGroupsAction()
973
    {
974
        $currentUserPlugin = $this->plugin('currentUserPlugin');
975
        $currentUser = $currentUserPlugin->getUser();
976
 
977
        $request = $this->getRequest();
978
        if($request->isGet()) {
979
 
980
 
981
            $headers  = $request->getHeaders();
982
            $isJson = false;
983
            if($headers->has('Accept')) {
984
                $accept = $headers->get('Accept');
985
 
986
                $prioritized = $accept->getPrioritized();
987
 
988
                foreach($prioritized as $key => $value) {
989
                    $raw = trim($value->getRaw());
990
 
991
                    if(!$isJson) {
992
                        $isJson = strpos($raw, 'json');
993
                    }
994
 
995
                }
996
            }
997
 
998
            if($isJson) {
999
                $values = [
1000
                    Group::PRIVACY_IS_PRIVATE => 'LABEL_PRIVATE',
1001
                    Group::PRIVACY_IS_PUBLIC => 'LABEL_PUBLIC'
1002
                ];
1003
 
1004
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
1005
 
1006
 
1007
                $queryMapper = QueryMapper::getInstance($this->adapter);
1008
 
1009
                $select = $queryMapper->getSql()->select();
1010
                $select->columns(['id', 'uuid', 'name', 'privacy',  'image']);
1011
                $select->from(['g' => GroupMapper::_TABLE]);
1012
                $select->join(['gm' => GroupMemberMapper::_TABLE], 'gm.group_id = g.id', []);
1013
                $select->where->equalTo('g.status', Group::STATUS_ACTIVE);
1014
                $select->where->in('gm.status', [ GroupMember::STATUS_ACCEPTED, GroupMember::STATUS_AUTO_JOIN]);
1015
                $select->where->equalTo('gm.user_id', $currentUser->id);
1016
                $select->where->notEqualTo('g.user_id', $currentUser->id);
1017
 
1018
                if($search) {
1019
                    $select->where->like('name', '%' . $search . '%');
1020
                }
1021
                $select->order('name ASC');
1022
 
1023
                $records = $queryMapper->fetchAll($select);
1024
 
1025
                $items = [];
1026
                foreach($records as $record)
1027
                {
1028
 
1029
                    $item = [
1030
                        'name' => $record['name'],
1031
                        'privacy' => $values[$record['privacy']],
1032
                        'image' => $this->url()->fromRoute('storage', ['type' => 'group', 'code' => $record['uuid'], 'filename' => $record['image'] ]),
1033
                        'link_view' => $this->url()->fromRoute('group/view', ['id' => $record['uuid'] ]),
1034
                        'link_leave' => $this->url()->fromRoute('group/leave', ['id' => $record['uuid'] ]),
1035
                    ];
1036
 
1037
                    array_push($items, $item);
1038
                }
1039
 
1040
 
1041
 
1042
                $response = [
1043
                    'success' => true,
1044
                    'data' => $items
1045
                ];
1046
 
1047
                return new JsonModel($response);
1048
 
1049
 
1050
            } else {
1051
                $this->layout()->setTemplate('layout/layout.phtml');
1052
                $viewModel = new ViewModel();
1053
                $viewModel->setTemplate('leaders-linked/group/joined-groups.phtml');
1054
                return $viewModel ;
1055
            }
1056
 
1057
        } else {
1058
            return new JsonModel([
1059
                'success' => false,
1060
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1061
            ]);
1062
        }
1063
    }
1064
 
1065
    public function invitationsReceivedAction()
1066
    {
1067
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1068
        $currentUser = $currentUserPlugin->getUser();
1069
 
1070
        $request = $this->getRequest();
1071
        if($request->isGet()) {
1072
 
1073
 
1074
            $headers  = $request->getHeaders();
1075
            $isJson = false;
1076
            if($headers->has('Accept')) {
1077
                $accept = $headers->get('Accept');
1078
 
1079
                $prioritized = $accept->getPrioritized();
1080
 
1081
                foreach($prioritized as $key => $value) {
1082
                    $raw = trim($value->getRaw());
1083
 
1084
                    if(!$isJson) {
1085
                        $isJson = strpos($raw, 'json');
1086
                    }
1087
 
1088
                }
1089
            }
1090
 
1091
            if($isJson) {
1092
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
1093
 
1094
                $queryMapper = QueryMapper::getInstance($this->adapter);
1095
 
1096
                $select = $queryMapper->getSql()->select();
1097
                $select->columns([ 'uuid', 'name', 'image']);
1098
                $select->from(['g' => GroupMapper::_TABLE]);
1099
                $select->join(['gm' => GroupMemberMapper::_TABLE], 'gm.group_id  = g.id', []);
1100
                $select->where->equalTo('gm.user_id', $currentUser->id);
1101
                $select->where->equalTo('gm.status', GroupMember::STATUS_ADDED_BY_ADMIN);
1102
                $select->where->equalTo('g.status', Group::STATUS_ACTIVE);
1103
 
1104
                if($search) {
1105
                    $select->where->like('c.name', '%' . $search . '%');
1106
                }
1107
                $select->order('name ASC');
1108
 
1109
                //echo $select2->getSqlString($this->adapter->platform); exit;
1110
 
1111
                $records = $queryMapper->fetchAll($select);
1112
 
1113
                $items = [];
1114
                foreach($records as $record)
1115
                {
1116
                    $item = [
1117
                        'name' => $record['name'],
1118
                        'image' => $this->url()->fromRoute('storage', ['type' => 'group', 'code' => $record['uuid'], 'filename' => $record['image']]),
1119
                        'link_view' => $this->url()->fromRoute('group/view', ['id' => $record['uuid'] ]),
1120
                        'link_accept' => $this->url()->fromRoute('group/accept', ['id' => $record['uuid'] ]),
1121
                        'link_reject' => $this->url()->fromRoute('group/reject', ['id' => $record['uuid'] ]),
1122
                    ];
1123
 
1124
 
1125
                    array_push($items, $item);
1126
                }
1127
 
1128
                $response = [
1129
                    'success' => true,
1130
                    'data' => $items
1131
                ];
1132
 
1133
                return new JsonModel($response);
1134
 
1135
 
1136
            } else {
1137
                $this->layout()->setTemplate('layout/layout.phtml');
1138
                $viewModel = new ViewModel();
1139
                $viewModel->setTemplate('leaders-linked/group/invitations-received.phtml');
1140
                return $viewModel ;
1141
            }
1142
 
1143
        } else {
1144
            return new JsonModel([
1145
                'success' => false,
1146
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1147
            ]);
1148
        }
1149
    }
1150
 
1151
    public function requestsSentAction()
1152
    {
1153
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1154
        $currentUser = $currentUserPlugin->getUser();
1155
 
1156
        $request = $this->getRequest();
1157
        if($request->isGet()) {
1158
 
1159
 
1160
            $headers  = $request->getHeaders();
1161
            $isJson = false;
1162
            if($headers->has('Accept')) {
1163
                $accept = $headers->get('Accept');
1164
 
1165
                $prioritized = $accept->getPrioritized();
1166
 
1167
                foreach($prioritized as $key => $value) {
1168
                    $raw = trim($value->getRaw());
1169
 
1170
                    if(!$isJson) {
1171
                        $isJson = strpos($raw, 'json');
1172
                    }
1173
 
1174
                }
1175
            }
1176
 
1177
            if($isJson) {
1178
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
1179
 
1180
 
1181
 
1182
                $queryMapper = QueryMapper::getInstance($this->adapter);
1183
 
1184
                $select = $queryMapper->getSql()->select();
1185
                $select->columns([ 'uuid', 'name', 'image']);
1186
                $select->from(['g' => GroupMapper::_TABLE]);
1187
                $select->join(['gm' => GroupMemberMapper::_TABLE], 'gm.group_id  = g.id', []);
1188
                $select->where->equalTo('gm.user_id', $currentUser->id);
1189
                $select->where->equalTo('gm.status', GroupMember::STATUS_JOINING_REQUESTED);
1190
                $select->where->equalTo('g.status', Group::STATUS_ACTIVE);
1191
 
1192
 
1193
                if($search) {
1194
                    $select->where->like('c.name', '%' . $search . '%');
1195
                }
1196
                $select->order('name ASC');
1197
 
1198
                //echo $select2->getSqlString($this->adapter->platform); exit;
1199
 
1200
                $records = $queryMapper->fetchAll($select);
1201
 
1202
                $items = [];
1203
                foreach($records as $record)
1204
                {
1205
                    $item = [
1206
                        'name' => $record['name'],
1207
                        'image' => $this->url()->fromRoute('storage', ['type' => 'group', 'code' => $record['uuid'], 'filename' => $record['image']]),
1208
                        'link_view' => $this->url()->fromRoute('group/view', ['id' => $record['uuid'] ]),
1209
                        'link_cancel' => $this->url()->fromRoute('group/cancel', ['id' => $record['uuid'] ]),
1210
                    ];
1211
 
1212
 
1213
                    array_push($items, $item);
1214
                }
1215
 
1216
                $response = [
1217
                    'success' => true,
1218
                    'data' => $items
1219
                ];
1220
 
1221
                return new JsonModel($response);
1222
 
1223
 
1224
            } else {
1225
                $this->layout()->setTemplate('layout/layout.phtml');
1226
                $viewModel = new ViewModel();
1227
                $viewModel->setTemplate('leaders-linked/group/requests-sent.phtml');
1228
                return $viewModel ;
1229
            }
1230
 
1231
        } else {
1232
            return new JsonModel([
1233
                'success' => false,
1234
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1235
            ]);
1236
        }
1237
    }
1238
 
1239
 
1240
}