Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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