Proyectos de Subversion LeadersLinked - Services

Rev

Rev 346 | | Comparar con el anterior | Ultima modificación | Ver Log |

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