Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 2444 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
7
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
8
use Laminas\Mvc\Controller\AbstractActionController;
9
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
13
use LeadersLinked\Mapper\CompanyFollowerMapper;
14
use LeadersLinked\Mapper\QueryMapper;
15
use LeadersLinked\Mapper\UserMapper;
16
use LeadersLinked\Library\Functions;
17
use LeadersLinked\Mapper\UserPasswordMapper;
18
use LeadersLinked\Form\AccountSetting\NotificationSettingForm;
19
use LeadersLinked\Mapper\UserNotificationSettingMapper;
20
 
21
use LeadersLinked\Form\AccountSetting\ChangePasswordForm;
22
use LeadersLinked\Form\AccountSetting\ChangeImageForm;
23
use LeadersLinked\Library\Image;
24
use LeadersLinked\Form\AccountSetting\LocationForm;
25
use LeadersLinked\Model\Location;
26
use LeadersLinked\Model\User;
27
use LeadersLinked\Mapper\LocationMapper;
28
use LeadersLinked\Form\AccountSetting\PrivacySettingForm;
29
use LeadersLinked\Mapper\UserProfileMapper;
30
use LeadersLinked\Form\AccountSetting\BasicForm;
31
use LeadersLinked\Mapper\ConnectionMapper;
32
use LeadersLinked\Mapper\ProfileVisitMapper;
33
use LeadersLinked\Mapper\GroupMemberMapper;
34
use LeadersLinked\Model\GroupMember;
35
use LeadersLinked\Mapper\UserExperienceMapper;
36
use LeadersLinked\Model\UserExperience;
37
use LeadersLinked\Mapper\GroupMapper;
38
use LeadersLinked\Model\Group;
39
use Laminas\Db\Sql\Expression;
40
use LeadersLinked\Mapper\CompanyUserMapper;
41
use LeadersLinked\Model\CompanyUser;
42
use LeadersLinked\Model\UserType;
43
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;
44
use LeadersLinked\Model\Notification;
45
use LeadersLinked\Mapper\NotificationMapper;
46
use LeadersLinked\Mapper\EmailTemplateMapper;
47
use LeadersLinked\Model\EmailTemplate;
48
use LeadersLinked\Library\QueueEmail;
49
use LeadersLinked\Mapper\PostMapper;
50
use LeadersLinked\Mapper\CompanyMapper;
51
use LeadersLinked\Model\Company;
52
use LeadersLinked\Model\Connection;
53
 
54
class HelperController extends AbstractActionController
55
{
56
    /**
57
     *
58
     * @var AdapterInterface
59
     */
60
    private $adapter;
61
 
62
 
63
    /**
64
     *
65
     * @var AbstractAdapter
66
     */
67
    private $cache;
68
 
69
    /**
70
     *
71
     * @var  LoggerInterface
72
     */
73
    private $logger;
74
 
75
    /**
76
     *
77
     * @var array
78
     */
79
    private $config;
80
 
81
 
82
 
83
 
84
    /**
85
     *
86
     * @param AdapterInterface $adapter
87
     * @param AbstractAdapter $cache
88
     * @param LoggerInterface $logger
89
     * @param array $config
90
     */
91
    public function __construct($adapter, $cache , $logger, $config)
92
    {
93
        $this->adapter      = $adapter;
94
        $this->cache        = $cache;
95
        $this->logger       = $logger;
96
        $this->config       = $config;
97
    }
98
 
99
 
100
    /**
101
     * Recuperamos las personas que pueda conocer
102
     * tiene que enviarse un petición GET a la siguiente url: /helpers/people-you-may-know
103
     * retorna un json en caso de ser  positivo
104
     * [
105
     *  'success' : true,
106
     *  'data' : [
107
     *      [
108
     *        'id'      => 'id del usuario encriptado',
109
     *        'name'    => 'nombre del usuario',
110
     *        'image'   => 'imagen del usuario',
111
     *        'profile' => 'url del profile',
112
     *     ]
113
     * ]
114
     * En caso de ser negativo
115
     * [
116
     *  'success' : false,
117
     *  'data' : mensaje de error
118
     * ]
119
     * @return \Laminas\View\Model\JsonModel
120
     */
121
    public function peopleYouMayKnowAction()
122
    {
123
        $request = $this->getRequest();
124
        if($request->isGet()) {
125
 
126
            $currentUserPlugin = $this->plugin('currentUserPlugin');
127
            $currentUser = $currentUserPlugin->getUser();
128
 
129
            $connectionMapper = ConnectionMapper::getInstance($this->adapter);
130
            $first_degree_connections_ids = $connectionMapper->fetchAllConnectionsByUserReturnIds($currentUser->id);
131
            $first_degree_connections_ids = $first_degree_connections_ids ? $first_degree_connections_ids : [0];
132
 
133
 
134
 
135
            $second_degree_connections_ids = $connectionMapper->fetchAllSecondDegreeConnectionsForUserIdReturnIds($currentUser->id);
136
            $second_degree_connections_ids = $second_degree_connections_ids ? $second_degree_connections_ids : [0];
137
 
138
 
139
 
140
 
141
            /*Usuarios de la empresas donde trabajo o soy dueño */
142
            $company_user_ids = [];
143
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
144
 
145
            $records = $companyUserMapper->fetchAllByUserId($currentUser->id);
146
            foreach($records as $record)
147
            {
148
 
149
                if($record->status != CompanyUser::STATUS_ACCEPTED) {
150
                    continue;
151
                }
152
 
153
                $otherUsers = $companyUserMapper->fetchAllByCompanyId($record->company_id);
154
                foreach($otherUsers as $otherUser)
155
                {
156
                    if($currentUser->id != $otherUser->user_id && $otherUser->creator == CompanyUser::CREATOR_NO && $otherUser->status == CompanyUser::STATUS_ACCEPTED) {
157
 
158
                        if(!in_array($otherUser->user_id, $company_user_ids)) {
159
                            array_push($company_user_ids, $otherUser->user_id);
160
                        }
161
                    }
162
                }
163
            }
164
            $company_user_ids =  $company_user_ids ? $company_user_ids : [0];
165
 
166
            /* Usuario de los grupos donde soy dueño o participo */
167
 
168
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
169
 
170
            $group_member_ids = [];
171
 
172
            $records = $groupMemberMapper->fetchAllByUserId($currentUser->id);
173
            foreach($records as $record)
174
            {
175
                if($record->status != GroupMember::STATUS_ACCEPTED) {
176
                    continue;
177
                }
178
 
179
                $otherUsers = $groupMemberMapper->fetchAllByGroupId($record->group_id);
180
                foreach($otherUsers as $otherUser)
181
                {
182
                    if($currentUser->id != $otherUser->user_id && $otherUser->status == GroupMember::STATUS_ACCEPTED) {
183
 
184
                        if(!in_array($otherUser->user_id, $group_member_ids)) {
185
                            array_push($group_member_ids, $otherUser->user_id);
186
                        }
187
                    }
188
                }
189
 
190
 
191
            }
192
 
193
            $group_member_ids = $group_member_ids ? $group_member_ids : [0];
194
 
195
 
196
 
197
            /* Usuarios con que comparto capsulas */
198
            $capsule_user_ids = [];
199
            $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
200
 
201
            $company_ids = [];
202
            $records = $capsuleUserMapper->fetchAllActiveByUserId($currentUser->id);
203
            foreach($records as $record)
204
            {
205
                if(!in_array($record->company_id,$company_ids)) {
206
                    array_push($company_ids, $record->company_id);
207
                }
208
            }
209
 
210
 
211
 
212
            foreach($company_ids as $company_id)
213
            {
214
                $otherUsers = $capsuleUserMapper->fetchAllUserIdsForCapsulesActiveByCompanyId($company_id);
215
                foreach($otherUsers as $user_id)
216
                {
217
                    if($currentUser->id != $user_id ) {
218
 
219
                        if(!in_array($user_id, $capsule_user_ids)) {
220
                            array_push($capsule_user_ids, $user_id);
221
                        }
222
                    }
223
                }
224
            }
225
 
226
            $capsule_user_ids = $capsule_user_ids ? $capsule_user_ids : [0];
227
 
228
 
229
            $other_users = array_unique(array_merge(
230
                $second_degree_connections_ids,
231
                $company_user_ids,
232
                $group_member_ids,
233
                $capsule_user_ids
234
            ));
235
 
236
 
237
 
238
 
239
 
240
 
241
 
242
 
243
            $items = [];
244
            $queryMapper = QueryMapper::getInstance($this->adapter);
245
            $select = $queryMapper->getSql()->select();
246
            $select->columns(['id', 'uuid',  'first_name','last_name', 'image']);
247
            $select->from(['u' => UserMapper::_TABLE]);
248
            $select->where->in('u.id', $other_users);
249
            $select->where->notIn('u.id', $first_degree_connections_ids);
250
            $select->where->notEqualTo('u.id', $currentUser->id);
251
            $select->where->equalTo('u.status', User::STATUS_ACTIVE);
252
            $select->where->in('u.usertype_id', [UserType::ADMIN, UserType::USER]);
253
            $select->order(['first_name','last_name']);
254
 
255
                //echo $select->getSqlString($this->adapter->platform); exit;
256
 
257
            $records = $queryMapper->fetchAll($select);
258
            foreach($records as $record)
259
            {
260
 
261
                $relation = [];
262
                if(in_array($record['id'], $second_degree_connections_ids)) {
263
                    array_push($relation, 'LABEL_RELATION_TYPE_SECOND_GRADE');
264
                }
265
                if(in_array($record['id'], $company_user_ids)) {
266
                    array_push($relation, 'LABEL_RELATION_TYPE_COMPANY_USER');
267
                }
268
                if(in_array($record['id'], $group_member_ids)) {
269
                    array_push($relation, 'LABEL_RELATION_TYPE_GROUP_MEMBER');
270
                }
271
                if(in_array($record['id'], $capsule_user_ids)) {
272
                    array_push($relation, 'LABEL_RELATION_TYPE_CAPSULE_USER');
273
                }
274
 
275
 
276
                $connection = $connectionMapper->fetchOneByUserId1AndUserId2($currentUser->id, $record['id']);
277
 
278
                $item = [
279
                    'id'    => $record['uuid'],
280
                    'name'  => trim($record['first_name'] . ' ' . $record['last_name']),
281
                    'image' => $this->url()->fromRoute('storage', ['code' => $record['uuid'], 'type' => 'user', 'filename' => $record['image']]),
282
                    'profile'   => $this->url()->fromRoute('profile/view', ['id' => $record['uuid'] ]),
283
                    'relation' => $relation,
284
                    'link_cancel'   => '',
285
                    'link_request'  => '',
286
                ];
287
 
288
                if($connection) {
289
                    switch($connection->status)
290
                    {
291
                        case Connection::STATUS_SENT :
292
                            $item['link_cancel'] = $this->url()->fromRoute('connection/delete',['id' => $record['uuid'] ]);
293
                            break;
294
 
295
                        case Connection::STATUS_ACCEPTED :
296
                            $item['link_cancel'] = $this->url()->fromRoute('connection/cancel',['id' => $record['uuid'] ]);
297
                            break;
298
 
299
                        default :
300
                            $item['link_request'] = $this->url()->fromRoute('connection/request',['id' => $record['uuid'] ]);
301
                            break;
302
 
303
                    }
304
 
305
 
306
                } else {
307
                    $item['link_request'] = $this->url()->fromRoute('connection/request',['id' => $record['uuid'] ]);
308
                }
309
 
310
 
311
                array_push($items, $item);
312
            }
313
 
314
            return new JsonModel([
315
                'success' => true,
316
                'data' => $items
317
            ]);
318
 
319
 
320
        } else {
321
            return new JsonModel([
322
                'success' => false,
323
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
324
            ]);
325
        }
326
 
327
    }
328
 
329
    /**
330
     * Recuperamos las personas que pueda conocer
331
     * tiene que enviarse un petición GET a la siguiente url: /helpers/people-viewed-profile/:user_profile_id
332
     * retorna un json en caso de ser  positivo
333
     * [
334
     *  'success' : true,
335
     *  'data' : [
336
     *      [
337
     *        'id'      => 'id del usuario encriptado',
338
     *        'name'    => 'nombre del usuario',
339
     *        'image'   => 'imagen del usuario',
340
     *        'profile' => 'url del profile',
341
     *     ]
342
     * ]
343
     * En caso de ser negativo
344
     * [
345
     *  'success' : false,
346
     *  'data' : mensaje de error
347
     * ]
348
     * @return \Laminas\View\Model\JsonModel
349
     */
350
    public function peopleViewedProfileAction()
351
    {
352
        $request = $this->getRequest();
353
        if($request->isGet()) {
354
 
355
            $items = [];
356
            $user_profile_id = $this->params()->fromRoute('user_profile_id');
357
 
358
            $items = [];
359
 
360
            $mapper = QueryMapper::getInstance($this->adapter);
361
            $select = $mapper->getSql()->select(ProfileVisitMapper::_TABLE);
362
            $select->columns(['user_id' => new Expression('DISTINCT(visitor_id)')]);
363
            $select->where->equalTo('user_profile_id', $user_profile_id);
364
            $records = $mapper->fetchAll($select);
365
 
366
            if($records) {
367
 
368
                $user_ids = [];
369
                foreach($records as $record)
370
                {
371
                    array_push($user_ids, $record['user_id']);
372
                }
373
 
374
                $mapper = QueryMapper::getInstance($this->adapter);
375
                $select = $mapper->getSql()->select( UserMapper::_TABLE);
376
                $select->columns(['id', 'uuid', 'first_name', 'last_name', 'image']);
377
                $select->where->in('id', $user_ids);
378
                $select->where->equalTo('status',User::STATUS_ACTIVE);
379
                $select->order(['last_name ASC', 'first_name ASC']);
380
 
381
                $records = $mapper->fetchAll($select);
382
                foreach($records as $record)
383
                {
384
                    array_push($items, [
385
                        'id'        => $record['uuid'],
386
                        'name'      => trim($record['first_name'] . ' ' . $record['last_name']),
387
                        'image'     => $this->url()->fromRoute('storage', ['code' => $record['uuid'], 'type' => 'user', 'filename' => $record['image']]),
388
                        'profile'   => $this->url()->fromRoute('profile/view', ['id' => $record['uuid'] ]),
389
                    ]);
390
                }
391
            }
392
 
393
 
394
            return new JsonModel([
395
                'success' => true,
396
                'data' => $items
397
            ]);
398
 
399
        } else {
400
            return new JsonModel([
401
                'success' => false,
402
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
403
            ]);
404
        }
405
    }
406
 
407
 
408
    /**
409
     * Recuperamos los seguidores de la empresa
410
     * tiene que enviarse un petición GET a la siguiente url: /helpers/company-follower/:company_id
411
     * retorna un json en caso de ser  positivo
412
     * [
413
     *  'success' : true,
414
     *  'data' : [
415
     *      [
416
     *        'id'      => 'id del usuario encriptado',
417
     *        'name'    => 'nombre del usuario',
418
     *        'image'   => 'imagen del usuario',
419
     *        'profile' => 'url del profile',
420
     *     ]
421
     * ]
422
     * En caso de ser negativo
423
     * [
424
     *  'success' : false,
425
     *  'data' : mensaje de error
426
     * ]
427
     * @return \Laminas\View\Model\JsonModel
428
     */
429
    public function companyFollowerAction()
430
    {
431
 
432
 
433
        $request = $this->getRequest();
434
        if($request->isGet()) {
435
 
436
            $company_uuid  = $this->params()->fromRoute('company_id');
437
 
438
            $companyMapper = CompanyMapper::getInstance($this->adapter);
439
            $company = $companyMapper->fetchOneByUuid($company_uuid);
440
 
441
            $items = [];
442
            if($company && $company->status == Company::STATUS_ACTIVE) {
443
 
444
 
445
                //print_r($company);
446
 
447
                $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
448
                $records = $companyFollowerMapper->fetchAllByCompanyId($company->id);
449
 
450
                $ids = [];
451
                foreach($records as $record)
452
                {
453
                    if(!in_array($record->follower_id, $ids)) {
454
                        array_push($ids, $record->follower_id);
455
                    }
456
                }
457
 
458
                //print_r($records);
459
 
460
 
461
                if($ids) {
462
 
463
                    $mapper = QueryMapper::getInstance($this->adapter);
464
                    $select = $mapper->getSql()->select(UserMapper::_TABLE);
465
                    $select->columns(['id', 'uuid', 'first_name', 'last_name', 'image']);
466
                    $select->where->in('id',$ids);
467
                    $select->where->equalTo('status',User::STATUS_ACTIVE);
468
                    $select->order(['last_name','first_name']);
469
 
470
                    //echo $select->getSqlString($this->adapter->platform); exit;
471
 
472
 
473
 
474
                    $records = $mapper->fetchAll($select);
475
                    foreach($records as $record)
476
                    {
477
 
478
 
479
                        array_push($items, [
480
                            'id'        => $record['uuid'],
481
                            'name'      => trim($record['first_name'] . ' ' . $record['last_name']),
482
                            'image'     => $this->url()->fromRoute('storage', ['code' => $record['uuid'], 'type' => 'user', 'filename' => $record['image']]),
483
                            'profile'   => $this->url()->fromRoute('profile/view', ['id' => $record['uuid'] ]),
484
                        ]);
485
                    }
486
                }
487
            }
488
 
489
            return new JsonModel([
490
                'success' => true,
491
                'data' => $items
492
            ]);
493
 
494
        } else {
495
            return new JsonModel([
496
                'success' => false,
497
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
498
            ]);
499
        }
500
    }
501
 
502
    public function companySuggestionAction()
503
    {
504
        $request = $this->getRequest();
505
        if($request->isGet()) {
506
 
507
            $company_id = $this->params()->fromRoute('company_id');
508
 
509
            $companyMapper = CompanyMapper::getInstance($this->adapter);
510
            $company = $companyMapper->fetchOneByUuid($company_id);
511
 
512
            $items = [];
513
            if($company && $company->status == Company::STATUS_ACTIVE) {
514
 
515
 
516
                $mapper = QueryMapper::getInstance($this->adapter);
517
                $select = $mapper->getSql()->select(CompanyMapper::_TABLE);
518
                $select->columns(['id', 'uuid', 'name', 'image']);
519
                $select->where->notEqualTo('id', $company->id);
520
                $select->where->equalTo('status',Company::STATUS_ACTIVE);
521
                $select->where->equalTo('industry_id', $company->industry_id);
522
              //  $select->where->equalTo('company_size_id', $company->company_size_id);
523
                $select->order(['name']);
524
 
525
 
526
                //echo $select->getSqlString($this->adapter->platform); exit;
527
 
528
                $records = $mapper->fetchAll($select);
529
                foreach($records as $record)
530
                {
531
                    array_push($items, [
532
                        'id'        => $record['uuid'],
533
                        'name'      => trim($record['name']),
534
                        'image'     => $this->url()->fromRoute('storage', ['code' => $record['uuid'], 'type' => 'company', 'filename' => $record['image']]),
535
                        'profile'   => $this->url()->fromRoute('company/view', ['id' => $record['uuid'] ]),
536
                    ]);
537
                }
538
            }
539
 
540
            return new JsonModel([
541
                'success' => true,
542
                'data' => $items
543
            ]);
544
 
545
        } else {
546
            return new JsonModel([
547
                'success' => false,
548
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
549
            ]);
550
        }
551
    }
552
 
553
    /**
554
     * Recuperamos los miembros del grupo
555
     * tiene que enviarse un petición GET a la siguiente url: /helpers/group-members/:group_id
556
     * retorna un json en caso de ser  positivo
557
     * [
558
     *  'success' : true,
559
     *  'data' : [
560
     *      [
561
     *        'id'      => 'id del usuario encriptado',
562
     *        'name'    => 'nombre del usuario',
563
     *        'image'   => 'imagen del usuario',
564
     *        'profile' => 'url del profile',
565
     *     ]
566
     * ]
567
     * En caso de ser negativo
568
     * [
569
     *  'success' : false,
570
     *  'data' : mensaje de error
571
     * ]
572
     * @return \Laminas\View\Model\JsonModel
573
     */
574
    public function groupMembersAction()
575
    {
576
        $currentUserPlugin = $this->plugin('currentUserPlugin');
577
        $currentUser = $currentUserPlugin->getUser();
578
 
579
        $request = $this->getRequest();
580
        if($request->isGet()) {
581
 
582
            $group_uuid = $this->params()->fromRoute('group_id');
583
 
584
            $groupMapper = GroupMapper::getInstance($this->adapter);
585
            $group = $groupMapper->fetchOneByUuid($group_uuid);
586
 
587
            $items = [];
588
            if($group && $group->status == Group::STATUS_ACTIVE) {
589
 
590
                $mapper = QueryMapper::getInstance($this->adapter);
591
                $select = $mapper->getSql()->select();
592
                $select->columns(['id', 'uuid', 'first_name', 'last_name', 'image']);
593
                $select->from(['u' => UserMapper::_TABLE]);
594
                $select->join(['gm' => GroupMemberMapper::_TABLE], 'gm.user_id = u.id ', ['user_id', 'status']);
595
                $select->join(['g' => GroupMapper::_TABLE], 'gm.group_id = g.id', ['group_uuid' => 'uuid']  );
596
                $select->where->equalTo('g.uuid', $group_uuid);
597
 
598
                if($group->user_id == $currentUser->id) {
599
                    $select->where->in('gm.status', [
600
                        GroupMember::STATUS_ACCEPTED,
601
                        GroupMember::STATUS_ADDED_BY_ADMIN,
602
                        GroupMember::STATUS_AUTO_JOIN,
603
                        GroupMember::STATUS_JOINING_REQUESTED,
604
                    ]);
605
                } else {
606
                    $select->where->in('gm.status', [GroupMember::STATUS_ACCEPTED, GroupMember::STATUS_AUTO_JOIN]);
607
                }
608
 
609
 
610
                $select->where->equalTo('u.status', User::STATUS_ACTIVE);
611
                $select->order(['last_name', 'first_name']);
612
 
613
                //echo $select->getSqlString($this->adapter->platform);
614
 
615
 
616
 
617
 
618
                $records = $mapper->fetchAll($select);
619
                foreach($records as $record)
620
                {
621
 
622
                    $actions = [];
623
                    if($group->user_id == $currentUser->id) {
624
                        if($record['id'] != $currentUser->id) {
625
 
626
 
627
 
628
                            switch($record['status'])
629
                            {
630
                                case GroupMember::STATUS_JOINING_REQUESTED :
631
                                    $actions['link_approve'] = $this->url()->fromRoute('helpers/group-members/approve', ['group_id' => $group->uuid, 'user_id' => $record['uuid']]);
632
                                    $actions['link_reject'] = $this->url()->fromRoute('helpers/group-members/reject', ['group_id' => $group->uuid, 'user_id' => $record['uuid']]);
633
                                    break;
634
 
635
                                case GroupMember::STATUS_ACCEPTED :
636
                                case GroupMember::STATUS_AUTO_JOIN :
637
                                case GroupMember::STATUS_ADDED_BY_ADMIN :
638
                                    $actions['link_cancel'] = $this->url()->fromRoute('helpers/group-members/cancel', ['group_id' => $group->uuid, 'user_id' => $record['uuid']]);
639
                                    break;
640
                            }
641
                        }
642
 
643
 
644
 
645
                    }
646
 
647
                    array_push($items, [
648
                        'id'        => $record['uuid'],
649
                        'name'      => trim($record['first_name'] . ' ' . $record['last_name']),
650
                        'image'     => $this->url()->fromRoute('storage', ['code' => $record['uuid'], 'type' => 'user', 'filename' => $record['image']]),
651
                        'profile'   => $this->url()->fromRoute('profile/view', ['id' => $record['uuid']]),
652
                        'actions'   => $actions,
653
 
654
                    ]);
655
                }
656
            }
657
 
658
            return new JsonModel([
659
                'success' => true,
660
                'data' => [
661
                    'items' => $items,
662
                    'link_invite' => $group->user_id == $currentUser->id ? $this->url()->fromRoute('helpers/group-members/invite',['group_id' => $group->uuid])  : '',
663
                ]
664
            ]);
665
 
666
        } else {
667
            return new JsonModel([
668
                'success' => false,
669
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
670
            ]);
671
        }
672
    }
673
 
674
    public function groupMemberInviteAction()
675
    {
676
 
677
 
678
        $currentUserPlugin = $this->plugin('currentUserPlugin');
679
        $currentUser = $currentUserPlugin->getUser();
680
 
681
        $group_uuid = $this->params()->fromRoute('group_id');
682
 
683
        $groupMapper = GroupMapper::getInstance($this->adapter);
684
        $group = $groupMapper->fetchOneByUuid($group_uuid);
685
 
686
        if(!$group) {
687
            return new JsonModel([
688
                'success' => false,
689
                'data' => 'ERROR_GROUP_NOT_FOUND'
690
            ]);
691
        }
692
 
693
        if($group->status != Group::STATUS_ACTIVE) {
694
            return new JsonModel([
695
                'success' => false,
696
                'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
697
            ]);
698
        }
699
 
700
        if($currentUser->id != $group->user_id) {
701
            return new JsonModel([
702
                'success' => false,
703
                'data' => 'ERROR_GROUP_IS_NOT_YOU_ARE_THE_OWNER_OF_THIS_GROUP'
704
            ]);
705
        }
706
 
707
 
708
        $request = $this->getRequest();
709
        if($request->isGet()) {
710
            $search = filter_var($this->params()->fromQuery('search', ''));
711
            if(strlen($search) >= 3) {
712
 
713
                $userMapper = UserMapper::getInstance($this->adapter);
714
                $records  = $userMapper->fetchAllSuggestForInvitationByGroupId($group->id, $search);
715
 
716
                $users = [];
717
                foreach($records as $record)
718
                {
719
                    array_push($users, [
720
                        'value' => $record->uuid,
721
                        'text' => trim($record->first_name . ' ' . $record->last_name) . ' (' . $record->email . ')'
722
 
723
                    ]);
724
                }
725
 
726
                return new JsonModel([
727
                    'success' => true,
728
                    'data' => $users
729
                ]);
730
 
731
 
732
 
733
 
734
            } else {
735
                return new JsonModel([
736
                    'success' => true,
737
                    'data' => [
738
 
739
                    ]
740
                ]);
741
            }
742
 
743
 
744
 
745
        }
746
        else if($request->isPost()) {
747
            $uuid = $this->params()->fromPost('id');
748
            if(!$uuid) {
749
                return new JsonModel([
750
                    'success'   => false,
751
                    'data'      => 'ERROR_INVALID_PARAMETER'
752
                ]);
753
            }
754
 
755
            $userMapper = UserMapper::getInstance($this->adapter);
756
            $user = $userMapper->fetchOneByUuid($uuid);
757
 
758
            if(!$user) {
759
                return new JsonModel([
760
                    'success'   => false,
761
                    'data'      => 'ERROR_USER_NOT_FOUND'
762
                ]);
763
            }
764
 
765
            if($user->status != User::STATUS_ACTIVE) {
766
                return new JsonModel([
767
                    'success'   => false,
768
                    'data'      => 'ERROR_USER_IS_INACTIVE'
769
                ]);
770
            }
771
 
772
            if($group->user_id == $user->id) {
773
                return new JsonModel([
774
                    'success'   => false,
775
                    'data'      => 'ERROR_GROUP_YOU_ARE_THE_OWNER_OF_THIS_GROUP'
776
                ]);
777
            }
778
 
779
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
780
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $user->id);
781
 
782
 
783
 
784
            if($groupMember) {
785
                $result = false;
786
 
787
                switch($groupMember->status)
788
                {
789
                    case GroupMember::STATUS_ACCEPTED:
790
                    case GroupMember::STATUS_AUTO_JOIN:
791
 
792
                        return new JsonModel([
793
                            'success'   => false,
794
                            'data'      => 'ERROR_GROUP_YOU_ARE_MEMBER',
795
                        ]);
796
                        break;
797
 
798
 
799
                    case $groupMember->status == GroupMember::STATUS_REJECTED :
800
                    case $groupMember->status == GroupMember::STATUS_CANCELLED :
801
 
802
                        $groupMember->status = GroupMember::STATUS_ADDED_BY_ADMIN;
803
                        $groupMember->joining_request_on = date('H-m-d H:i:s');
804
 
805
                        $result = $groupMemberMapper->update($groupMember);
806
                        break;
807
 
808
                    case GroupMember::STATUS_ADDED_BY_ADMIN :
809
                    case  GroupMember::STATUS_JOINING_REQUESTED :
810
                        return new JsonModel([
811
                            'success'   => false,
812
                            'data'      => 'ERROR_GROUP_THERE_IS_A_PENDING_REQUEST'
813
                        ]);
814
                        break;
815
 
816
                    default :
817
                        return new JsonModel([
818
                            'success'   => false,
819
                            'data'      => 'ERROR_UNKNOWN_OPERATION'
820
                        ]);
821
                        break;
822
 
823
                }
824
 
825
 
826
 
827
 
828
 
829
 
830
            } else {
831
 
832
 
833
 
834
                $groupMember = new GroupMember();
835
                $groupMember->user_id = $user->id;
836
                $groupMember->group_id = $group->id;
837
                $groupMember->status = GroupMember::STATUS_ADDED_BY_ADMIN;
838
                $groupMember->joining_request_on = date('H-m-d H:i:s');
839
 
840
                $result = $groupMemberMapper->insert($groupMember);
841
 
842
 
843
            }
844
 
845
            if($result) {
846
 
847
                $notification = new Notification();
848
                $notification->type     = Notification::TYPE_RECEIVE_INVITATION_GROUP;
849
                $notification->read     = Notification::NO;
850
                $notification->user_id  = $user->id;
851
                $notification->group_id = $group->id;
852
                $notification->message  = 'LABEL_NOTIFICATION_RECEIVE_INVITATION_GROUP';
853
                $notification->url      = $this->url()->fromRoute('group/view',['id' => $group->uuid]);
854
 
855
                $notificationMapper = NotificationMapper::getInstance($this->adapter);
856
                $notificationMapper->insert($notification);
857
 
858
                $userNotificationMapper = UserNotificationSettingMapper::getInstance($this->adapter);
859
                $userNotification = $userNotificationMapper->fetchOne($user->id);
860
 
861
                if($userNotification && $userNotification->receive_invitation_group)
862
                {
863
                    $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
864
                    $emailTemplate = $emailTemplateMapper->fetchOne(EmailTemplate::ID_RECEIVE_INVITATION_GROUP);
865
 
866
                    if($emailTemplate) {
867
                        $arrayCont = [
868
                            'firstname'             => $currentUser->first_name,
869
                            'lastname'              => $currentUser->last_name,
870
                            'other_user_firstname'  => $user->first_name,
871
                            'other_user_lastname'   => $user->last_name,
872
                            'company_name'          => '',
873
                            'group_name'            => $group->name,
874
                            'content'               => '',
875
                            'code'                  => '',
876
                            'link'                  => $this->url()->fromRoute('group/view', ['id' => $group->uuid], ['force_canonical' => true])
877
                        ];
878
 
879
                        $email = new QueueEmail($this->adapter);
880
                        $email->processEmailTemplate($emailTemplate, $arrayCont, $user->email, trim($user->first_name . ' ' . $user->last_name));
881
                    }
882
                }
883
 
884
                return new JsonModel([
885
                    'success'   => true,
886
                    'data'      => 'LABEL_GROUP_REQUEST_SUCCESS'
887
                ]);
888
 
889
            } else {
890
 
891
                return new JsonModel([
892
                    'success'   => false,
893
                    'data'      => 'ERROR_GROUP_REQUEST_COULD_NOT_BE_SENT'
894
                ]);
895
 
896
            }
897
 
898
 
899
 
900
        } else {
901
            return new JsonModel([
902
                'success' => false,
903
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
904
            ]);
905
        }
906
    }
907
 
908
    public function  groupMemberCancelAction()
909
    {
910
        $currentUserPlugin = $this->plugin('currentUserPlugin');
911
        $currentUser = $currentUserPlugin->getUser();
912
 
913
        $request = $this->getRequest();
914
        if($request->isPost()) {
915
            $group_uuid = $this->params()->fromRoute('group_id');
916
            $user_uuid  = $this->params()->fromRoute('user_id');
917
 
918
            $groupMapper = GroupMapper::getInstance($this->adapter);
919
            $group = $groupMapper->fetchOneByUuid($group_uuid);
920
 
921
            if(!$group) {
922
                return new JsonModel([
923
                    'success' => false,
924
                    'data' => 'ERROR_GROUP_NOT_FOUND'
925
                ]);
926
            }
927
 
928
            if($group->status != Group::STATUS_ACTIVE) {
929
                return new JsonModel([
930
                    'success' => false,
931
                    'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
932
                ]);
933
            }
934
 
935
            if($currentUser->id != $group->user_id) {
936
                return new JsonModel([
937
                    'success' => false,
938
                    'data' => 'ERROR_GROUP_IS_NOT_YOU_ARE_THE_OWNER_OF_THIS_GROUP'
939
                ]);
940
            }
941
 
942
            $userMapper = UserMapper::getInstance($this->adapter);
943
            $user = $userMapper->fetchOneByUuid($user_uuid);
944
 
945
            if(!$user) {
946
                return new JsonModel([
947
                    'success' => false,
948
                    'data' => 'ERROR_USER_NOT_FOUND'
949
                ]);
950
            }
951
 
952
            if($user->id == $currentUser->id) {
953
                return new JsonModel([
954
                    'success' => false,
955
                    'data' => 'ERROR_GROUP_YOU_ARE_THE_OWNER_OF_THIS_GROUP'
956
                ]);
957
            }
958
 
959
 
960
 
961
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
962
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $user->id);
963
            if($groupMember) {
964
 
965
                if($groupMember->status == GroupMember::STATUS_ACCEPTED ||
966
                    $groupMember->status == GroupMember::STATUS_ADDED_BY_ADMIN ||
967
                    $groupMember->status == GroupMember::STATUS_AUTO_JOIN) {
968
 
969
                    $groupMember->status = GroupMember::STATUS_CANCELLED;
970
                    if($groupMemberMapper->update($groupMember)) {
971
 
972
                        return new JsonModel([
973
                            'success' => true,
974
                            'data' =>  'LABEL_GROUP_MEMBER_CANCELLED_SUCCESS'
975
                        ]);
976
 
977
                    } else {
978
                        return new JsonModel([
979
                            'success' => true,
980
                            'data' =>    'LABEL_GROUP_MEMBER_CANCELLED_FAILED'
981
                        ]);
982
                    }
983
                }
984
 
985
            }
986
 
987
 
988
            return new JsonModel([
989
                'success' => false,
990
                'data' => 'ERROR_GROUP_REQUEST_OR_MEMBER_NOT_FOUND_TO_CANCEL'
991
            ]);
992
 
993
 
994
 
995
 
996
 
997
        } else {
998
 
999
            return new JsonModel([
1000
                'success' => false,
1001
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1002
            ]);
1003
        }
1004
    }
1005
 
1006
    public function  groupMemberRejectAction()
1007
    {
1008
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1009
        $currentUser = $currentUserPlugin->getUser();
1010
 
1011
        $request = $this->getRequest();
1012
        if($request->isPost()) {
1013
            $group_uuid = $this->params()->fromRoute('group_id');
1014
            $user_uuid  = $this->params()->fromRoute('user_id');
1015
 
1016
            $groupMapper = GroupMapper::getInstance($this->adapter);
1017
            $group = $groupMapper->fetchOneByUuid($group_uuid);
1018
 
1019
            if(!$group) {
1020
                return new JsonModel([
1021
                    'success' => false,
1022
                    'data' => 'ERROR_GROUP_NOT_FOUND'
1023
                ]);
1024
            }
1025
 
1026
            if($group->status != Group::STATUS_ACTIVE) {
1027
                return new JsonModel([
1028
                    'success' => false,
1029
                    'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
1030
                ]);
1031
            }
1032
 
1033
            if($currentUser->id != $group->user_id) {
1034
                return new JsonModel([
1035
                    'success' => false,
1036
                    'data' => 'ERROR_GROUP_IS_NOT_YOU_ARE_THE_OWNER_OF_THIS_GROUP'
1037
                ]);
1038
            }
1039
 
1040
            $userMapper = UserMapper::getInstance($this->adapter);
1041
            $user = $userMapper->fetchOneByUuid($user_uuid);
1042
 
1043
            if(!$user) {
1044
                return new JsonModel([
1045
                    'success' => false,
1046
                    'data' => 'ERROR_USER_NOT_FOUND'
1047
                ]);
1048
            }
1049
 
1050
            if($user->id == $currentUser->id) {
1051
                return new JsonModel([
1052
                    'success' => false,
1053
                    'data' => 'ERROR_GROUP_YOU_ARE_THE_OWNER_OF_THIS_GROUP'
1054
                ]);
1055
            }
1056
 
1057
 
1058
 
1059
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
1060
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $user->id);
1061
            if($groupMember) {
1062
 
1063
                if($groupMember->status == GroupMember::STATUS_JOINING_REQUESTED) {
1064
 
1065
                        $groupMember->status = GroupMember::STATUS_REJECTED;
1066
                        if($groupMemberMapper->update($groupMember)) {
1067
 
1068
                            return new JsonModel([
1069
                                'success' => true,
1070
                                'data' =>  'LABEL_GROUP_MEMBER_REJECTED_SUCCESS'
1071
                            ]);
1072
 
1073
                        } else {
1074
                            return new JsonModel([
1075
                                'success' => true,
1076
                                'data' =>    'LABEL_GROUP_MEMBER_REJECTED_FAILED'
1077
                            ]);
1078
                        }
1079
                    }
1080
 
1081
            }
1082
 
1083
 
1084
            return new JsonModel([
1085
                'success' => false,
1086
                'data' => 'ERROR_GROUP_THERE_IS_NO_PENDING_REQUEST_TO_REJECT'
1087
            ]);
1088
 
1089
 
1090
 
1091
 
1092
 
1093
        } else {
1094
 
1095
            return new JsonModel([
1096
                'success' => false,
1097
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1098
            ]);
1099
        }
1100
    }
1101
 
1102
    public function  groupMemberApproveAction()
1103
    {
1104
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1105
        $currentUser = $currentUserPlugin->getUser();
1106
 
1107
        $request = $this->getRequest();
1108
        if($request->isPost()) {
1109
            $group_uuid = $this->params()->fromRoute('group_id');
1110
            $user_uuid  = $this->params()->fromRoute('user_id');
1111
 
1112
            $groupMapper = GroupMapper::getInstance($this->adapter);
1113
            $group = $groupMapper->fetchOneByUuid($group_uuid);
1114
 
1115
            if(!$group) {
1116
                return new JsonModel([
1117
                    'success' => false,
1118
                    'data' => 'ERROR_GROUP_NOT_FOUND'
1119
                ]);
1120
            }
1121
 
1122
            if($group->status != Group::STATUS_ACTIVE) {
1123
                return new JsonModel([
1124
                    'success' => false,
1125
                    'data' => 'ERROR_GROUP_IS_NOT_ACTIVE'
1126
                ]);
1127
            }
1128
 
1129
            if($currentUser->id != $group->user_id) {
1130
                return new JsonModel([
1131
                    'success' => false,
1132
                    'data' => 'ERROR_GROUP_IS_NOT_YOU_ARE_THE_OWNER_OF_THIS_GROUP'
1133
                ]);
1134
            }
1135
 
1136
            $userMapper = UserMapper::getInstance($this->adapter);
1137
            $user = $userMapper->fetchOneByUuid($user_uuid);
1138
 
1139
            if(!$user) {
1140
                return new JsonModel([
1141
                    'success' => false,
1142
                    'data' => 'ERROR_USER_NOT_FOUND'
1143
                ]);
1144
            }
1145
 
1146
            if($user->id == $currentUser->id) {
1147
                return new JsonModel([
1148
                    'success' => false,
1149
                    'data' => 'ERROR_GROUP_YOU_ARE_THE_OWNER_OF_THIS_GROUP'
1150
                ]);
1151
            }
1152
 
1153
 
1154
 
1155
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
1156
            $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $user->id);
1157
            if($groupMember) {
1158
 
1159
                if($groupMember->status == GroupMember::STATUS_JOINING_REQUESTED) {
1160
 
1161
                    $groupMember->status = GroupMember::STATUS_ACCEPTED;
1162
                    if($groupMemberMapper->update($groupMember)) {
1163
 
1164
 
1165
                        $notification = new Notification();
1166
                        $notification->type     = Notification::TYPE_ACCEPT_MY_REQUEST_JOIN_GROUP;
1167
                        $notification->read     = Notification::NO;
1168
                        $notification->user_id  = $user->id;
1169
                        $notification->group_id = $group->id;
1170
                        $notification->message  = 'LABEL_NOTIFICATION_ACCEPT_MY_REQUEST_JOIN_GROUP';
1171
                        $notification->url      = $this->url()->fromRoute('group/view', ['id' => $group->uuid]);
1172
 
1173
                        $notificationMapper = NotificationMapper::getInstance($this->adapter);
1174
                        $notificationMapper->insert($notification);
1175
 
1176
                        $userNotificationMapper = UserNotificationSettingMapper::getInstance($this->adapter);
1177
                        $userNotification = $userNotificationMapper->fetchOne($user->id);
1178
 
1179
                        if($userNotification && $userNotification->receive_invitation_group)
1180
                        {
1181
                            $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
1182
                            $emailTemplate = $emailTemplateMapper->fetchOne(EmailTemplate::ID_ACCEPT_MY_REQUEST_JOIN_GROUP);
1183
 
1184
                            if($emailTemplate) {
1185
                                $arrayCont = [
1186
                                    'firstname'             => $currentUser->first_name,
1187
                                    'lastname'              => $currentUser->last_name,
1188
                                    'other_user_firstname'  => $user->first_name,
1189
                                    'other_user_lastname'   => $user->last_name,
1190
                                    'company_name'          => '',
1191
                                    'group_name'            => $group->name,
1192
                                    'content'               => '',
1193
                                    'code'                  => '',
1194
                                    'link'                  => $this->url()->fromRoute('group/view', ['id' => $group->uuid], ['force_canonical' => true])
1195
                                ];
1196
 
1197
                                $email = new QueueEmail($this->adapter);
1198
                                $email->processEmailTemplate($emailTemplate, $arrayCont, $user->email, trim($user->first_name . ' ' . $user->last_name));
1199
                            }
1200
                        }
1201
 
1202
                        return new JsonModel([
1203
                            'success' => true,
1204
                            'data' =>  'LABEL_GROUP_MEMBER_APPROVED_SUCCESS'
1205
                        ]);
1206
 
1207
                    } else {
1208
                        return new JsonModel([
1209
                            'success' => true,
1210
                            'data' =>    'LABEL_GROUP_MEMBER_APPROVED_FAILED'
1211
                        ]);
1212
                    }
1213
                }
1214
 
1215
            }
1216
 
1217
 
1218
            return new JsonModel([
1219
                'success' => false,
1220
                'data' => 'ERROR_GROUP_THERE_IS_NO_PENDING_REQUEST_TO_APPROVED'
1221
            ]);
1222
 
1223
 
1224
 
1225
 
1226
 
1227
        } else {
1228
 
1229
            return new JsonModel([
1230
                'success' => false,
1231
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1232
            ]);
1233
        }
1234
    }
1235
 
1236
 
1237
    /**
1238
     * Recuperamos los grupos sugeridos
1239
     * tiene que enviarse un petición GET a la siguiente url: /helpers/groups-suggestion/:group_id
1240
     * retorna un json en caso de ser  positivo
1241
     * [
1242
     *  'success' : true,
1243
     *  'data' : [
1244
     *      [
1245
     *        'id'      => 'id del grupo encriptado',
1246
     *        'name'    => 'nombre del grupo',
1247
     *        'image'   => 'imagen del grupo',
1248
     *        'profile' => 'url del profile',
1249
     *     ]
1250
     * ]
1251
     * En caso de ser negativo
1252
     * [
1253
     *  'success' : false,
1254
     *  'data' : mensaje de error
1255
     * ]
1256
     * @return \Laminas\View\Model\JsonModel
1257
     */
1258
    public function groupsSuggestionAction()
1259
    {
1260
 
1261
        $request = $this->getRequest();
1262
        if($request->isGet()) {
1263
 
1264
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1265
            $currentUser = $currentUserPlugin->getUser();
1266
 
1267
            $connectionMapper = ConnectionMapper::getInstance($this->adapter);
1268
            $first_degree_connections_ids = $connectionMapper->fetchAllConnectionsByUserReturnIds($currentUser->id);
1269
            $first_degree_connections_ids = $first_degree_connections_ids ? $first_degree_connections_ids : [0];
1270
 
1271
 
1272
 
1273
            $second_degree_connections_ids = $connectionMapper->fetchAllSecondDegreeConnectionsForUserIdReturnIds($currentUser->id);
1274
            $second_degree_connections_ids = $second_degree_connections_ids ? $second_degree_connections_ids : [0];
1275
 
1276
 
1277
            /*Usuarios de la empresas donde trabajo o soy dueño */
1278
            $company_user_ids = [];
1279
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1280
 
1281
            $records = $companyUserMapper->fetchAllByUserId($currentUser->id);
1282
            foreach($records as $record)
1283
            {
1284
 
1285
                if($record->status != CompanyUser::STATUS_ACCEPTED) {
1286
                    continue;
1287
                }
1288
 
1289
                $otherUsers = $companyUserMapper->fetchAllByCompanyId($record->company_id);
1290
                foreach($otherUsers as $otherUser)
1291
                {
1292
                    if($currentUser->id != $otherUser->user_id && $otherUser->creator == CompanyUser::CREATOR_NO && $otherUser->status == CompanyUser::STATUS_ACCEPTED) {
1293
 
1294
                        if(!in_array($otherUser->user_id, $company_user_ids)) {
1295
                            array_push($company_user_ids, $otherUser->user_id);
1296
                        }
1297
                    }
1298
                }
1299
            }
1300
            $company_user_ids =  $company_user_ids ? $company_user_ids : [0];
1301
 
1302
            /* Usuario de los grupos donde soy dueño o participo */
1303
 
1304
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
1305
 
1306
            $group_member_ids = [];
1307
 
1308
            $records = $groupMemberMapper->fetchAllByUserId($currentUser->id);
1309
            foreach($records as $record)
1310
            {
1311
                if($record->status != GroupMember::STATUS_ACCEPTED) {
1312
                    continue;
1313
                }
1314
 
1315
                $otherUsers = $groupMemberMapper->fetchAllByGroupId($record->group_id);
1316
                foreach($otherUsers as $otherUser)
1317
                {
1318
                    if($currentUser->id != $otherUser->user_id && $otherUser->status == GroupMember::STATUS_ACCEPTED) {
1319
 
1320
                        if(!in_array($otherUser->user_id, $group_member_ids)) {
1321
                            array_push($group_member_ids, $otherUser->user_id);
1322
                        }
1323
                    }
1324
                }
1325
 
1326
 
1327
            }
1328
 
1329
            $group_member_ids = $group_member_ids ? $group_member_ids : [0];
1330
 
1331
            /* Usuarios con que comparto capsulas */
1332
            $capsule_user_ids = [];
1333
            $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
1334
 
1335
            $company_ids = [];
1336
            $records = $capsuleUserMapper->fetchAllActiveByUserId($currentUser->id);
1337
            foreach($records as $record)
1338
            {
1339
                if(!in_array($record->company_id,$company_ids)) {
1340
                    array_push($company_ids, $record->company_id);
1341
                }
1342
            }
1343
 
1344
            foreach($company_ids as $company_id)
1345
            {
1346
                $otherUsers = $capsuleUserMapper->fetchAllUserIdsForCapsulesActiveByCompanyId($company_id);
1347
                foreach($otherUsers as $user_id)
1348
                {
1349
                    if($currentUser->id != $user_id ) {
1350
 
1351
                        if(!in_array($user_id, $capsule_user_ids)) {
1352
                            array_push($capsule_user_ids, $user_id);
1353
                        }
1354
                    }
1355
                }
1356
            }
1357
 
1358
            $capsule_user_ids = $capsule_user_ids ? $capsule_user_ids : [0];
1359
 
1360
 
1361
            $other_users = array_unique(array_merge(
1362
                $second_degree_connections_ids,
1363
                $company_user_ids,
1364
                $group_member_ids,
1365
                $capsule_user_ids
1366
            ));
1367
 
1368
 
1369
            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
1370
            $group_ids = $groupMemberMapper->fetchAllGroupIdsByUserIds( $other_users);
1371
            $group_ids = $group_ids ? $group_ids : [0];
1372
 
1373
 
1374
            $queryMapper = QueryMapper::getInstance($this->adapter);
1375
            $select = $queryMapper->getSql()->select();
1376
            $select->columns(['uuid', 'name','image','status','privacy']);
1377
            $select->from(['g' => GroupMapper::_TABLE]);
1378
            $select->where->equalTo('privacy', Group::PRIVACY_IS_PUBLIC);
1379
            $select->where->equalTo('status', Group::STATUS_ACTIVE);
1380
            $select->where->in('id', $group_ids);
1381
            $select->where->notEqualTo('g.user_id', $currentUser->id);
1382
            $select->order('name');
1383
 
1384
            //echo $select->getSqlString($this->adapter->platform); exit;
1385
 
1386
            $items = [];
1387
            $records = $queryMapper->fetchAll($select);
1388
            foreach($records as $record)
1389
            {
1390
 
1391
                array_push($items, [
1392
                    'id'        => $record['uuid'],
1393
                    'name'      => trim($record['name']),
1394
                    'image'     => $this->url()->fromRoute('storage', ['code' => $record['uuid'], 'type' => 'group', 'filename' => $record['image']]),
1395
                    'profile'   => $this->url()->fromRoute('group/view', ['id' => $record['uuid'] ]),
1396
                ]);
1397
 
1398
            }
1399
 
1400
            return new JsonModel([
1401
                'success' => true,
1402
                'data' => $items
1403
            ]);
1404
 
1405
 
1406
        } else {
1407
            return new JsonModel([
1408
                'success' => false,
1409
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1410
            ]);
1411
        }
1412
    }
1413
 
1414
    public function postsAction()
1415
    {
1416
        $request = $this->getRequest();
1417
        if($request->isGet()) {
1418
            $items = [];
1419
            $postMapper = PostMapper::getInstance($this->adapter);
1420
            $posts = $postMapper->fetchAllActives();
1421
 
1422
            //print_r($posts);
1423
 
1424
            foreach($posts as $post)
1425
            {
1426
                $dt = \DateTime::createFromFormat('Y-m-d', $post->date);
1427
                array_push($items, [
1428
                   'date' => $dt->format('d/m/Y'),
1429
                   'title' => $post->title,
1430
                   'link' => $this->url()->fromRoute('post', ['id' => $post->uuid]),
1431
                ]);
1432
 
1433
            }
1434
 
1435
            return new JsonModel([
1436
                'success' => true,
1437
                'data' => $items
1438
            ]);
1439
        }
1440
 
1441
        return new JsonModel([
1442
            'success' => false,
1443
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1444
        ]);
1445
    }
1446
 
1447
 
1448
 
1449
    public function searchPeopleAction()
1450
    {
1451
        $request = $this->getRequest();
1452
        if($request->isGet()) {
1453
 
1454
 
1455
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1456
            $currentUser = $currentUserPlugin->getUser();
1457
 
1458
            $search = trim(filter_var( $this->params()->fromQuery('search'), FILTER_SANITIZE_STRING)) ;
1459
            if(strlen($search) >= 3) {
1460
 
1461
 
1462
                $userMapper = UserMapper::getInstance($this->adapter);
1463
                $records  = $userMapper->fetchAllSuggest($search);
1464
 
1465
                $users = [];
1466
                foreach($records as $record)
1467
                {
1468
                    if($currentUser->id == $record->id) {
1469
                        continue;
1470
                    }
1471
 
1472
 
1473
                    array_push($users, [
1474
                        'value' => $record->uuid,
1475
                        'text' => trim($record->first_name . ' ' . $record->last_name) . ' (' . $record->email . ')'
1476
 
1477
                    ]);
1478
                }
1479
 
1480
                return new JsonModel([
1481
                    'success' => true,
1482
                    'data' => $users
1483
                ]);
1484
 
1485
 
1486
 
1487
 
1488
            } else {
1489
                return new JsonModel([
1490
                    'success' => true,
1491
                    'data' => [
1492
 
1493
                    ]
1494
                ]);
1495
            }
1496
 
1497
 
1498
 
1499
 
1500
        } else {
1501
            return new JsonModel([
1502
                'success' => false,
1503
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1504
            ]);
1505
        }
1506
    }
1507
 
1508
}