Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 3639 | Rev 3712 | 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
 
456
 
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]) : '',
1 www 477
            ]);
478
            return $viewModel ;
479
        }
480
 
481
    }
482
 
483
    public function leaveAction()
484
    {
485
        $flashMessenger = $this->plugin('FlashMessenger');
486
        $currentUserPlugin = $this->plugin('currentUserPlugin');
487
        $currentUser = $currentUserPlugin->getUser();
488
 
489
        $request = $this->getRequest();
490
        if($request->isPost()) {
491
            $id = $this->params()->fromRoute('id');
492
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
493
            $flash = $flash === 'true'? true: false;
494
 
495
            if(!$id) {
496
                return new JsonModel([
497
                    'success' => false,
498
                    'data' => 'ERROR_INVALID_PARAMETER'
499
                ]);
500
 
501
            }
502
 
503
            $groupMapper = GroupMapper::getInstance($this->adapter);
3648 efrain 504
            $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1 www 505
 
506
            if(!$group) {
507
                return new JsonModel([
508
                    'success' => false,
509
                    'data' => 'ERROR_GROUP_NOT_FOUND'
510
                ]);
511
            }
512
 
513
            if($group->status != Group::STATUS_ACTIVE) {
514
                return new JsonModel([
515
                    'success' => false,
516
                    'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
517
                ]);
518
            }
519
 
520
            if($group->user_id == $currentUser->id) {
521
                return new JsonModel([
522
                    'success' => false,
523
                    'data' => 'ERROR_GROUP_YOU_ARE_THE_OWNER_OF_THIS_GROUP'
524
                ]);
525
            }
526
 
527
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
528
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
529
            if($groupMember) {
530
 
531
                if($groupMember->status == GroupMember::STATUS_ACCEPTED ||$groupMember->status == GroupMember::STATUS_AUTO_JOIN ) {
532
 
533
                    $groupMember->status = GroupMember::STATUS_CANCELLED;
534
                    if($groupMemberMapper->update($groupMember)) {
535
                        if($flash) {
536
 
537
                            $flashMessenger->addSuccessMessage('LABEL_GROUP_YOU_HAVE_LEFT_THE_GROUP');
538
 
539
                            return new JsonModel([
540
                                'success' => true,
541
                                'data' =>  [
542
                                    'message' => 'LABEL_GROUP_YOU_HAVE_LEFT_THE_GROUP',
543
                                    'reload' => true
544
                                 ]
545
                            ]);
546
                        } else {
547
                            return new JsonModel([
548
                                'success' => true,
549
                                'data' =>  'LABEL_GROUP_YOU_HAVE_LEFT_THE_GROUP',
550
                            ]);
551
                        }
552
 
553
                    } else {
554
                        return new JsonModel([
555
                            'success' => false,
556
                            'data' => $groupMemberMapper->getError()
557
                        ]);
558
                    }
559
 
560
 
561
                } else {
562
                    return new JsonModel([
563
                        'success' => false,
564
                        'data' => 'ERROR_GROUP_THERE_IS_NO_PENDING_REQUEST_TO_CANCEL'
565
                    ]);
566
                }
567
 
568
            } else {
569
                return new JsonModel([
570
                    'success' => false,
571
                    'data' => 'ERROR_GROUP_YOU_NOT_MEMBER'
572
                ]);
573
            }
574
 
575
 
576
 
577
 
578
        } else {
579
 
580
            return new JsonModel([
581
                'success' => false,
582
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
583
            ]);
584
        }
585
    }
586
 
587
    public function cancelAction()
588
    {
589
        $flashMessenger = $this->plugin('FlashMessenger');
590
        $currentUserPlugin = $this->plugin('currentUserPlugin');
591
        $currentUser = $currentUserPlugin->getUser();
592
 
593
        $request = $this->getRequest();
594
        if($request->isPost()) {
595
            $id = $this->params()->fromRoute('id');
596
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
597
            $flash = $flash === 'true'? true: false;
598
 
599
            if(!$id) {
600
                return new JsonModel([
601
                    'success' => false,
602
                    'data' => 'ERROR_INVALID_PARAMETER'
603
                ]);
604
 
605
            }
606
 
607
            $groupMapper = GroupMapper::getInstance($this->adapter);
3648 efrain 608
            $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1 www 609
 
610
            if(!$group) {
611
                return new JsonModel([
612
                    'success' => false,
613
                    'data' => 'ERROR_GROUP_NOT_FOUND'
614
                ]);
615
            }
616
 
617
            if($group->status != Group::STATUS_ACTIVE) {
618
                return new JsonModel([
619
                    'success' => false,
620
                    'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
621
                ]);
622
            }
623
 
624
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
625
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
626
            if($groupMember) {
627
 
628
                if($groupMember->status == GroupMember::STATUS_JOINING_REQUESTED || $groupMember->status == GroupMember::STATUS_ADDED_BY_ADMIN) {
629
 
630
                    $groupMember->status = GroupMember::STATUS_CANCELLED;
631
                    if($groupMemberMapper->update($groupMember)) {
632
                        if($flash) {
633
                            $flashMessenger->addSuccessMessage('LABEL_GROUP_REQUEST_CANCELLED');
634
 
635
                            return new JsonModel([
636
                                'success' => true,
637
                                'data' =>  [
638
                                    'message' => 'LABEL_GROUP_REQUEST_CANCELLED',
639
                                    'reload' => true
640
                                 ]
641
                            ]);
642
 
643
                        } else {
644
                            return new JsonModel([
645
                                'success' => true,
646
                                'data' =>  'LABEL_GROUP_REQUEST_CANCELLED'
647
                            ]);
648
                        }
649
 
650
 
651
 
652
                    } else {
653
                        return new JsonModel([
654
                            'success' => false,
655
                            'data' => $groupMemberMapper->getError()
656
                        ]);
657
                    }
658
 
659
 
660
                } else {
661
                    return new JsonModel([
662
                        'success' => false,
663
                        'data' => 'ERROR_GROUP_THERE_IS_NO_PENDING_REQUEST_TO_CANCEL'
664
                    ]);
665
                }
666
 
667
            } else {
668
                return new JsonModel([
669
                    'success' => false,
670
                    'data' => 'ERROR_GROUP_YOU_NOT_MEMBER'
671
                ]);
672
            }
673
 
674
 
675
 
676
 
677
        } else {
678
 
679
            return new JsonModel([
680
                'success' => false,
681
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
682
            ]);
683
        }
684
    }
685
 
1361 efrain 686
 
1 www 687
    public function rejectAction()
688
    {
689
        $flashMessenger = $this->plugin('FlashMessenger');
690
        $currentUserPlugin = $this->plugin('currentUserPlugin');
691
        $currentUser = $currentUserPlugin->getUser();
692
 
693
        $request = $this->getRequest();
694
        if($request->isPost()) {
695
            $id = $this->params()->fromRoute('id');
696
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
697
            $flash = $flash === 'true'? true: false;
698
 
699
            if(!$id) {
700
                return new JsonModel([
701
                    'success' => false,
702
                    'data' => 'ERROR_INVALID_PARAMETER'
703
                ]);
704
 
705
            }
706
 
707
            $groupMapper = GroupMapper::getInstance($this->adapter);
3648 efrain 708
            $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1 www 709
 
710
            if(!$group) {
711
                return new JsonModel([
712
                    'success' => false,
713
                    'data' => 'ERROR_GROUP_NOT_FOUND'
714
                ]);
715
            }
716
 
717
            if($group->status != Group::STATUS_ACTIVE) {
718
                return new JsonModel([
719
                    'success' => false,
720
                    'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
721
                ]);
722
            }
723
 
724
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
725
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
726
            if($groupMember) {
727
 
728
                if($groupMember->status == GroupMember::STATUS_ADDED_BY_ADMIN) {
729
 
1362 efrain 730
                    $groupMember->status = GroupMember::STATUS_REJECTED;
1 www 731
                    if($groupMemberMapper->update($groupMember)) {
732
                        if($flash) {
733
                            $flashMessenger->addSuccessMessage('LABEL_GROUP_REQUEST_REJECTED');
734
 
735
                            return new JsonModel([
736
                                'success' => true,
737
                                'data' =>  [
1362 efrain 738
                                    'message' => 'LABEL_GROUP_REQUEST_REJECTED',
1 www 739
                                    'reload' => true
740
                                ]
741
                            ]);
742
 
743
                        } else {
744
                            return new JsonModel([
745
                                'success' => true,
1362 efrain 746
                                'data' =>  'LABEL_GROUP_REQUEST_REJECTED'
1 www 747
                            ]);
748
                        }
749
 
750
 
751
 
752
                    } else {
753
                        return new JsonModel([
754
                            'success' => false,
755
                            'data' => $groupMemberMapper->getError()
756
                        ]);
757
                    }
758
 
759
 
760
                } else {
761
                    return new JsonModel([
762
                        'success' => false,
763
                        'data' => 'ERROR_GROUP_THERE_IS_NO_PENDING_REQUEST_TO_CANCEL'
764
                    ]);
765
                }
766
 
767
            } else {
768
                return new JsonModel([
769
                    'success' => false,
770
                    'data' => 'ERROR_GROUP_YOU_NOT_MEMBER'
771
                ]);
772
            }
773
 
774
 
775
 
776
 
777
        } else {
778
 
779
            return new JsonModel([
780
                'success' => false,
781
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
782
            ]);
783
        }
784
    }
785
 
786
    public function acceptAction()
787
    {
788
        $flashMessenger = $this->plugin('FlashMessenger');
789
        $currentUserPlugin = $this->plugin('currentUserPlugin');
790
        $currentUser = $currentUserPlugin->getUser();
791
 
792
        $request = $this->getRequest();
793
        if($request->isPost()) {
794
            $id = $this->params()->fromRoute('id');
795
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
796
            $flash = $flash === 'true'? true: false;
797
 
798
            if(!$id) {
799
                return new JsonModel([
800
                    'success' => false,
801
                    'data' => 'ERROR_INVALID_PARAMETER'
802
                ]);
803
 
804
            }
805
 
806
            $groupMapper = GroupMapper::getInstance($this->adapter);
3648 efrain 807
            $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1 www 808
 
809
            if(!$group) {
810
                return new JsonModel([
811
                    'success' => false,
812
                    'data' => 'ERROR_GROUP_NOT_FOUND'
813
                ]);
814
            }
815
 
816
            if($group->status != Group::STATUS_ACTIVE) {
817
                return new JsonModel([
818
                    'success' => false,
819
                    'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
820
                ]);
821
            }
822
 
823
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
824
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
825
            if($groupMember) {
826
 
827
                if($groupMember->status == GroupMember::STATUS_ADDED_BY_ADMIN) {
828
 
829
                    $groupMember->status = GroupMember::STATUS_ACCEPTED;
830
                    if($groupMemberMapper->update($groupMember)) {
831
                        if($flash) {
832
                            $flashMessenger->addSuccessMessage('LABEL_GROUP_AUTO_JOIN_SUCCESS');
833
 
834
                            return new JsonModel([
835
                                'success' => true,
836
                                'data' => [
837
                                    'message' => 'LABEL_GROUP_AUTO_JOIN_SUCCESS',
838
                                    'reload' => true
839
                                ]
840
                            ]);
841
                        } else {
842
                            return new JsonModel([
843
                                'success' => true,
844
                                'data' => 'LABEL_GROUP_AUTO_JOIN_SUCCESS'
845
                            ]);
846
                        }
847
 
848
                    } else {
849
                        return new JsonModel([
850
                            'success' => false,
851
                            'data' => $groupMemberMapper->getError()
852
                        ]);
853
                    }
854
                } else {
855
                    return new JsonModel([
856
                        'success' => false,
857
                        'data' => 'ERROR_GROUP_YOU_HAVE_NOT_INVITED_THIS_GROUP'
858
                    ]);
859
                }
860
 
861
            } else {
862
                return new JsonModel([
863
                    'success' => false,
864
                    'data' => 'ERROR_GROUP_YOU_NOT_MEMBER'
865
                ]);
866
            }
867
        } else {
868
 
869
            return new JsonModel([
870
                'success' => false,
871
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
872
            ]);
873
        }
874
    }
1361 efrain 875
 
1 www 876
 
877
    public function requestAction()
878
    {
879
        $flashMessenger = $this->plugin('FlashMessenger');
880
        $currentUserPlugin = $this->plugin('currentUserPlugin');
881
        $currentUser = $currentUserPlugin->getUser();
882
 
883
        $request = $this->getRequest();
884
        if($request->isPost()) {
885
            $id = $this->params()->fromRoute('id');
886
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
887
            $flash = $flash === 'true'? true: false;
888
 
889
            if(!$id) {
890
                return new JsonModel([
891
                    'success' => false,
892
                    'data' => 'ERROR_INVALID_PARAMETER'
893
                ]);
894
 
895
            }
896
 
897
            $groupMapper = GroupMapper::getInstance($this->adapter);
3648 efrain 898
            $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1 www 899
 
900
            if(!$group) {
901
                return new JsonModel([
902
                    'success' => false,
903
                    'data' => 'ERROR_GROUP_NOT_FOUND'
904
                ]);
905
            }
906
 
907
            if($group->status != Group::STATUS_ACTIVE) {
908
                return new JsonModel([
909
                    'success' => false,
910
                    'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
911
                ]);
912
            }
913
 
914
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
915
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
916
            if($groupMember) {
917
                if($groupMember->status == GroupMember::STATUS_ACCEPTED || $groupMember->status == GroupMember::STATUS_AUTO_JOIN) {
918
                    return new JsonModel([
919
                        'success' => false,
920
                        'data' => 'ERROR_GROUP_YOU_ARE_MEMBER'
921
                    ]);
922
                }
923
                if($groupMember->status == GroupMember::STATUS_REJECTED) {
924
                    return new JsonModel([
925
                        'success' => false,
926
                        'data' => 'ERROR_GROUP_YOUR_REQUEST_WAS_PREVIOUSLY_REJECTED'
927
                    ]);
928
                }
929
 
930
            }
931
 
932
            if($group->privacy == Group::PRIVACY_IS_PRIVATE || $group->accessibility == Group::ACCESSIBILITY_ADMIN_WILL_ADD) {
933
                return new JsonModel([
934
                    'success' => false,
935
                    'data' => 'ERROR_GROUP_ACCESS_ONLY_BY_ADMIN_INVITATION'
936
                ]);
937
            }
938
 
939
 
940
            if($groupMember) {
941
                if($group->accessibility == Group::ACCESSIBILITY_AUTO_JOIN) {
942
                    $groupMember->status    = GroupMember::STATUS_AUTO_JOIN;
943
                    $groupMember->joined_on = new Expression('NOW()');
944
                }
945
 
946
                if($group->accessibility == Group::ACCESSIBILITY_REQUEST_TO_JOIN) {
947
                    $groupMember->status                = GroupMember::STATUS_JOINING_REQUESTED;
948
                    $groupMember->joining_request_on    = new Expression('NOW()');
949
                }
950
 
951
                $result = $groupMemberMapper->update($groupMember);
952
 
953
 
954
            } else {
955
                $groupMember = new GroupMember();
956
                $groupMember->group_id  = $group->id;
957
                $groupMember->user_id   = $currentUser->id;
958
                if($group->accessibility == Group::ACCESSIBILITY_AUTO_JOIN) {
959
                    $groupMember->status    = GroupMember::STATUS_AUTO_JOIN;
960
                }
961
 
962
                if($group->accessibility == Group::ACCESSIBILITY_REQUEST_TO_JOIN) {
963
                    $groupMember->status    = GroupMember::STATUS_JOINING_REQUESTED;
964
                }
965
 
966
                $result = $groupMemberMapper->insert($groupMember);
967
            }
968
 
969
            if($result) {
970
 
971
                $userMapper = UserMapper::getInstance($this->adapter);
972
                $userOwnerGroup = $userMapper->fetchOne($group->user_id);
973
 
974
                $notification = new Notification();
975
                $notification->type     = Notification::TYPE_RECEIVE_REQUEST_JOIN_MY_GROUP;
976
                $notification->read     = Notification::NO;
977
                $notification->user_id  = $userOwnerGroup->id;
978
                $notification->group_id = $group->id;
979
                $notification->message  = 'LABEL_NOTIFICATION_RECEIVE_REQUEST_JOIN_MY_GROUP';
980
                $notification->url      = $this->url()->fromRoute('group/view', ['id' => $group->uuid]);
981
 
982
                $notificationMapper = NotificationMapper::getInstance($this->adapter);
983
                $notificationMapper->insert($notification);
984
 
985
 
986
 
987
                $userNotificationSettingMapper = UserNotificationSettingMapper::getInstance($this->adapter);
988
                $userNotificationSetting = $userNotificationSettingMapper->fetchOne($group->user_id);
989
 
990
 
991
                if($userNotificationSetting->receive_request_join_my_group) {
992
                    $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
3639 efrain 993
                    $emailTemplate = $emailTemplateMapper->fetchOne(EmailTemplate::CODE_RECEIVE_REQUEST_JOIN_MY_GROUP);
1 www 994
                    if($emailTemplate) {
995
                        $arrayCont = [
996
                            'firstname'             => $currentUser->first_name,
997
                            'lastname'              => $currentUser->last_name,
998
                            'other_user_firstname'  => $userOwnerGroup->first_name,
999
                            'other_user_lastname'   => $userOwnerGroup->last_name,
1000
                            'company_name'          => '',
1001
                            'group_name'            => $group->name,
1002
                            'content'               => '',
1003
                            'code'                  => '',
1004
                            'link'                  => $this->url()->fromRoute('group/view', ['id' => $group->uuid], ['force_canonical' => true])
1005
                        ];
1006
 
1007
                        $email = new QueueEmail($this->adapter);
1008
                        $email->processEmailTemplate($emailTemplate, $arrayCont, $userOwnerGroup->email, trim($userOwnerGroup->first_name . ' ' . $userOwnerGroup->last_name));
1009
                    }
1010
                }
1011
 
1012
                if($group->accessibility == Group::ACCESSIBILITY_AUTO_JOIN) {
1013
                    if($flash) {
1014
                        $flashMessenger->addSuccessMessage('LABEL_GROUP_AUTO_JOIN_SUCCESS');
1015
 
1016
                        return new JsonModel([
1017
                            'success' => true,
1018
                            'data' => [
1019
                                'message' => 'LABEL_GROUP_AUTO_JOIN_SUCCESS',
1020
                                'reload' => true
1021
                            ]
1022
                        ]);
1023
                    } else {
1024
                        return new JsonModel([
1025
                            'success' => true,
1026
                            'data' => 'LABEL_GROUP_AUTO_JOIN_SUCCESS'
1027
                        ]);
1028
                    }
1029
                }
1030
                if($group->accessibility == Group::ACCESSIBILITY_REQUEST_TO_JOIN) {
1031
                    if($flash) {
1032
                        $flashMessenger->addSuccessMessage('LABEL_GROUP_REQUEST_SUCCESS');
1033
 
1034
                        return new JsonModel([
1035
                            'success' => true,
1036
                            'data' => [
1037
                                'message' => 'LABEL_GROUP_REQUEST_SUCCESS',
1038
                                'reload' => true
1039
                            ]
1040
                        ]);
1041
                    } else {
1042
                        return new JsonModel([
1043
                            'success' => true,
1044
                            'data' => 'LABEL_GROUP_REQUEST_SUCCESS'
1045
                        ]);
1046
                    }
1047
                }
1048
 
1049
 
1050
 
1051
            } else {
1052
                return new JsonModel([
1053
                    'success' => false,
1054
                    'data' => $groupMapper->getError()
1055
                ]);
1056
            }
1057
 
1058
 
1059
        } else {
1060
 
1061
            return new JsonModel([
1062
                'success' => false,
1063
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1064
            ]);
1065
        }
1066
 
1067
    }
1068
 
1069
    /**
1070
     *
1071
     * Generación del listado de perfiles
1072
     * {@inheritDoc}
1073
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
1074
     */
1075
    public function joinedGroupsAction()
1076
    {
1077
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1078
        $currentUser = $currentUserPlugin->getUser();
1079
 
1080
        $request = $this->getRequest();
1081
        if($request->isGet()) {
1082
 
1083
 
1084
            $headers  = $request->getHeaders();
1085
            $isJson = false;
1086
            if($headers->has('Accept')) {
1087
                $accept = $headers->get('Accept');
1088
 
1089
                $prioritized = $accept->getPrioritized();
1090
 
1091
                foreach($prioritized as $key => $value) {
1092
                    $raw = trim($value->getRaw());
1093
 
1094
                    if(!$isJson) {
1095
                        $isJson = strpos($raw, 'json');
1096
                    }
1097
 
1098
                }
1099
            }
1100
 
1101
            if($isJson) {
1102
                $values = [
1103
                    Group::PRIVACY_IS_PRIVATE => 'LABEL_PRIVATE',
1104
                    Group::PRIVACY_IS_PUBLIC => 'LABEL_PUBLIC'
1105
                ];
1106
 
1107
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
1108
 
1109
 
1110
                $queryMapper = QueryMapper::getInstance($this->adapter);
1111
 
1112
                $select = $queryMapper->getSql()->select();
1113
                $select->columns(['id', 'uuid', 'name', 'privacy',  'image']);
1114
                $select->from(['g' => GroupMapper::_TABLE]);
1115
                $select->join(['gm' => GroupMemberMapper::_TABLE], 'gm.group_id = g.id', []);
1116
                $select->where->equalTo('g.status', Group::STATUS_ACTIVE);
1117
                $select->where->in('gm.status', [ GroupMember::STATUS_ACCEPTED, GroupMember::STATUS_AUTO_JOIN]);
1118
                $select->where->equalTo('gm.user_id', $currentUser->id);
1119
                $select->where->notEqualTo('g.user_id', $currentUser->id);
3648 efrain 1120
                $select->where->equalTo('g.network_id', $currentUser->network_id);
1 www 1121
 
1122
                if($search) {
1123
                    $select->where->like('name', '%' . $search . '%');
1124
                }
1125
                $select->order('name ASC');
1126
 
1127
                $records = $queryMapper->fetchAll($select);
1128
 
1129
                $items = [];
1130
                foreach($records as $record)
1131
                {
1132
 
1133
                    $item = [
1134
                        'name' => $record['name'],
1135
                        'privacy' => $values[$record['privacy']],
1136
                        'image' => $this->url()->fromRoute('storage', ['type' => 'group', 'code' => $record['uuid'], 'filename' => $record['image'] ]),
1137
                        'link_view' => $this->url()->fromRoute('group/view', ['id' => $record['uuid'] ]),
1138
                        'link_leave' => $this->url()->fromRoute('group/leave', ['id' => $record['uuid'] ]),
1139
                    ];
1140
 
1141
                    array_push($items, $item);
1142
                }
1143
 
1144
 
1145
 
1146
                $response = [
1147
                    'success' => true,
1148
                    'data' => $items
1149
                ];
1150
 
1151
                return new JsonModel($response);
1152
 
1153
 
1154
            } else {
1155
                $this->layout()->setTemplate('layout/layout.phtml');
1156
                $viewModel = new ViewModel();
1157
                $viewModel->setTemplate('leaders-linked/group/joined-groups.phtml');
1158
                return $viewModel ;
1159
            }
1160
 
1161
        } else {
1162
            return new JsonModel([
1163
                'success' => false,
1164
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1165
            ]);
1166
        }
1167
    }
1168
 
1169
    public function invitationsReceivedAction()
1170
    {
1171
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1172
        $currentUser = $currentUserPlugin->getUser();
1173
 
1174
        $request = $this->getRequest();
1175
        if($request->isGet()) {
1176
 
1177
 
1178
            $headers  = $request->getHeaders();
1179
            $isJson = false;
1180
            if($headers->has('Accept')) {
1181
                $accept = $headers->get('Accept');
1182
 
1183
                $prioritized = $accept->getPrioritized();
1184
 
1185
                foreach($prioritized as $key => $value) {
1186
                    $raw = trim($value->getRaw());
1187
 
1188
                    if(!$isJson) {
1189
                        $isJson = strpos($raw, 'json');
1190
                    }
1191
 
1192
                }
1193
            }
1194
 
1195
            if($isJson) {
1196
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
1197
 
1198
                $queryMapper = QueryMapper::getInstance($this->adapter);
1199
 
1200
                $select = $queryMapper->getSql()->select();
1201
                $select->columns([ 'uuid', 'name', 'image']);
1202
                $select->from(['g' => GroupMapper::_TABLE]);
1203
                $select->join(['gm' => GroupMemberMapper::_TABLE], 'gm.group_id  = g.id', []);
1204
                $select->where->equalTo('gm.user_id', $currentUser->id);
1205
                $select->where->equalTo('gm.status', GroupMember::STATUS_ADDED_BY_ADMIN);
1206
                $select->where->equalTo('g.status', Group::STATUS_ACTIVE);
3648 efrain 1207
                $select->where->equalTo('g.network_id', $currentUser->network_id);
1 www 1208
 
1209
                if($search) {
1182 efrain 1210
                    $select->where->like('g.name', '%' . $search . '%');
1 www 1211
                }
1212
                $select->order('name ASC');
1213
 
1214
                //echo $select2->getSqlString($this->adapter->platform); exit;
1215
 
1216
                $records = $queryMapper->fetchAll($select);
1217
 
1218
                $items = [];
1219
                foreach($records as $record)
1220
                {
1221
                    $item = [
1222
                        'name' => $record['name'],
1223
                        'image' => $this->url()->fromRoute('storage', ['type' => 'group', 'code' => $record['uuid'], 'filename' => $record['image']]),
1224
                        'link_view' => $this->url()->fromRoute('group/view', ['id' => $record['uuid'] ]),
1225
                        'link_accept' => $this->url()->fromRoute('group/accept', ['id' => $record['uuid'] ]),
1226
                        'link_reject' => $this->url()->fromRoute('group/reject', ['id' => $record['uuid'] ]),
1227
                    ];
1228
 
1229
 
1230
                    array_push($items, $item);
1231
                }
1232
 
1233
                $response = [
1234
                    'success' => true,
1235
                    'data' => $items
1236
                ];
1237
 
1238
                return new JsonModel($response);
1239
 
1240
 
1241
            } else {
1242
                $this->layout()->setTemplate('layout/layout.phtml');
1243
                $viewModel = new ViewModel();
1244
                $viewModel->setTemplate('leaders-linked/group/invitations-received.phtml');
1245
                return $viewModel ;
1246
            }
1247
 
1248
        } else {
1249
            return new JsonModel([
1250
                'success' => false,
1251
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1252
            ]);
1253
        }
1254
    }
1255
 
1256
    public function requestsSentAction()
1257
    {
1258
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1259
        $currentUser = $currentUserPlugin->getUser();
1260
 
1261
        $request = $this->getRequest();
1262
        if($request->isGet()) {
1263
 
1264
 
1265
            $headers  = $request->getHeaders();
1266
            $isJson = false;
1267
            if($headers->has('Accept')) {
1268
                $accept = $headers->get('Accept');
1269
 
1270
                $prioritized = $accept->getPrioritized();
1271
 
1272
                foreach($prioritized as $key => $value) {
1273
                    $raw = trim($value->getRaw());
1274
 
1275
                    if(!$isJson) {
1276
                        $isJson = strpos($raw, 'json');
1277
                    }
1278
 
1279
                }
1280
            }
1281
 
1282
            if($isJson) {
1283
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
1284
 
1285
 
1286
 
1287
                $queryMapper = QueryMapper::getInstance($this->adapter);
1288
 
1289
                $select = $queryMapper->getSql()->select();
1290
                $select->columns([ 'uuid', 'name', 'image']);
1291
                $select->from(['g' => GroupMapper::_TABLE]);
1292
                $select->join(['gm' => GroupMemberMapper::_TABLE], 'gm.group_id  = g.id', []);
1293
                $select->where->equalTo('gm.user_id', $currentUser->id);
1294
                $select->where->equalTo('gm.status', GroupMember::STATUS_JOINING_REQUESTED);
1295
                $select->where->equalTo('g.status', Group::STATUS_ACTIVE);
3648 efrain 1296
                $select->where->equalTo('g.network_id', $currentUser->network_id);
1 www 1297
 
1298
 
1299
                if($search) {
1182 efrain 1300
                    $select->where->like('g.name', '%' . $search . '%');
1 www 1301
                }
1302
                $select->order('name ASC');
1303
 
1304
                //echo $select2->getSqlString($this->adapter->platform); exit;
1305
 
1306
                $records = $queryMapper->fetchAll($select);
1307
 
1308
                $items = [];
1309
                foreach($records as $record)
1310
                {
1311
                    $item = [
1312
                        'name' => $record['name'],
1313
                        'image' => $this->url()->fromRoute('storage', ['type' => 'group', 'code' => $record['uuid'], 'filename' => $record['image']]),
1314
                        'link_view' => $this->url()->fromRoute('group/view', ['id' => $record['uuid'] ]),
1315
                        'link_cancel' => $this->url()->fromRoute('group/cancel', ['id' => $record['uuid'] ]),
1316
                    ];
1317
 
1318
 
1319
                    array_push($items, $item);
1320
                }
1321
 
1322
                $response = [
1323
                    'success' => true,
1324
                    'data' => $items
1325
                ];
1326
 
1327
                return new JsonModel($response);
1328
 
1329
 
1330
            } else {
1331
                $this->layout()->setTemplate('layout/layout.phtml');
1332
                $viewModel = new ViewModel();
1333
                $viewModel->setTemplate('leaders-linked/group/requests-sent.phtml');
1334
                return $viewModel ;
1335
            }
1336
 
1337
        } else {
1338
            return new JsonModel([
1339
                'success' => false,
1340
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1341
            ]);
1342
        }
1343
    }
1344
 
1345
 
1346
}