Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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