Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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