Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

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