Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 3639 | Rev 4179 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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