Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 3712 | Rev 5501 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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