Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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