Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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