Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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