Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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