Proyectos de Subversion LeadersLinked - Services

Rev

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

Rev Autor Línea Nro. Línea
119 efrain 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Mvc\Controller\AbstractActionController;
7
use Laminas\View\Model\JsonModel;
8
use LeadersLinked\Library\Functions;
9
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleMapper;
10
use LeadersLinked\Mapper\QueryMapper;
11
use LeadersLinked\Mapper\UserMapper;
12
use Laminas\Db\Sql\Select;
13
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;
14
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleCommentMapper;
15
use LeadersLinked\Form\Service\CapsuleCommentForm;
16
use LeadersLinked\Model\CompanyMicrolearningCapsuleComment;
17
use LeadersLinked\Model\CompanyMicrolearningCapsuleUser;
18
use LeadersLinked\Model\CompanyMicrolearningAnswer;
19
use LeadersLinked\Mapper\CompanyMicrolearningUserProgressMapper;
20
use LeadersLinked\Mapper\CompanyMicrolearningSlideMapper;
21
use LeadersLinked\Mapper\CompanyMicrolearningUserLogMapper;
22
use LeadersLinked\Model\CompanyMicrolearningUserLog;
23
use LeadersLinked\Mapper\CompanyMicrolearningTopicMapper;
24
use LeadersLinked\Mapper\CompanyMapper;
25
use LeadersLinked\Model\CompanyMicrolearningUserProgress;
26
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserMapper;
27
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserCompanyMapper;
28
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserFunctionMapper;
29
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserGroupMapper;
30
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserInstitutionMapper;
31
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserPartnerMapper;
32
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserProgramMapper;
33
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserStudentTypeMapper;
34
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserSectorMapper;
35
 
36
 
37
class MicrolearningUserAccessGrantedIds
38
{
39
    public $companies;
40
    public $topics;
41
    public $capsules;
42
 
43
 
44
    public function __construct()
45
    {
46
        $this->companies    = [];
47
        $this->topics       = [];
48
        $this->capsules     = [];
49
    }
50
}
51
 
52
class MicrolearningController extends AbstractActionController
53
{
54
 
55
    /**
56
     *
57
     * @var \Laminas\Db\Adapter\AdapterInterface
58
     */
59
    private $adapter;
60
 
61
    /**
62
     *
63
     * @var \LeadersLinked\Cache\CacheInterface
64
     */
65
    private $cache;
66
 
67
 
68
    /**
69
     *
70
     * @var \Laminas\Log\LoggerInterface
71
     */
72
    private $logger;
73
 
74
    /**
75
     *
76
     * @var array
77
     */
78
    private $config;
79
 
80
 
81
    /**
82
     *
83
     * @var \Laminas\Mvc\I18n\Translator
84
     */
85
    private $translator;
86
 
87
 
88
    /**
89
     *
90
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
91
     * @param \LeadersLinked\Cache\CacheInterface $cache
92
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
93
     * @param array $config
94
     * @param \Laminas\Mvc\I18n\Translator $translator
95
     */
96
    public function __construct($adapter, $cache, $logger, $config, $translator)
97
    {
98
        $this->adapter      = $adapter;
99
        $this->cache        = $cache;
100
        $this->logger       = $logger;
101
        $this->config       = $config;
102
        $this->translator   = $translator;
103
    }
104
 
105
    public function indexAction()
106
    {
107
        $request = $this->getRequest();
108
 
109
        if($request->isGet()) {
110
            return new JsonModel([
111
                'success' => true,
112
                'data' =>  [
113
                    'link_companies' => $this->url()->fromRoute('microlearning/companies',[], ['force_canonical' => true]),
114
                    'link_timeline' => $this->url()->fromRoute('microlearning/timeline',[], ['force_canonical' => true]),
115
                    'link_last_capsule_in_progress' => $this->url()->fromRoute('microlearning/last-capsule-in-progress',[], ['force_canonical' => true]),
116
                    'link_profile' => $this->url()->fromRoute('microlearning/profile',[], ['force_canonical' => true]),
117
                    'link_topics' => $this->url()->fromRoute('microlearning/topics',[], ['force_canonical' => true]),
118
                    'link_capsules_pending' => $this->url()->fromRoute('microlearning/capsules-pending',[], ['force_canonical' => true]),
119
                    'link_capsules_completed' => $this->url()->fromRoute('microlearning/capsules-completed',[], ['force_canonical' => true]),
120
                    'link_capsules_in_progress' => $this->url()->fromRoute('microlearning/capsules-in-progress',[], ['force_canonical' => true]),
121
 
122
 
123
                ]
124
            ]);
125
        }
126
 
127
        return new JsonModel([
128
            'success' => false,
129
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
130
        ]);
131
    }
132
 
133
    public function companiesAction()
134
    {
135
 
136
        $request = $this->getRequest();
137
 
138
        if($request->isGet()) {
139
            $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
140
            $currentNetwork = $currentNetworkPlugin->getNetwork();
141
 
142
 
143
            $accessGrantedIds = $this->getAccessGranted();
144
            $companyMapper = CompanyMapper::getInstance($this->adapter);
145
            $records = $companyMapper->fetchAllByIdsAndNetworkId($accessGrantedIds->companies, $currentNetwork->id);
146
 
147
 
148
            $companies = [];
149
            foreach($records as $record)
150
            {
151
                array_push($companies, [
152
                    'name' => $record->name,
153
                    'image' => $this->url()->fromRoute('services/storage',['type' => 'company', 'code' => $record->uuid, 'filename' => $record->image], ['force_canonical' => true]),
154
                    'link_progress' => $this->url()->fromRoute('microlearning/progress',['id' => $record->uuid], ['force_canonical' => true]),
155
                ]);
156
            }
157
 
158
            return new JsonModel([
159
                'success' => true,
160
                'data' =>  $companies
161
            ]);
162
 
163
 
164
        }
165
        return new JsonModel([
166
            'success' => false,
167
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
168
        ]);
169
    }
170
 
171
 
172
 
173
    public function capsuleCommentsAction()
174
    {
175
 
176
        $request = $this->getRequest();
177
 
178
        if($request->isGet()) {
179
            $serviceDatetimeFormat = $this->config['leaderslinked.services.datetime'];
180
 
181
            $currentUserPlugin = $this->plugin('currentUserPlugin');
182
            $currentUser = $currentUserPlugin->getUser();
183
 
184
            $capsule_id = $this->params()->fromRoute('capsule_id');
185
 
186
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
187
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
188
 
189
            if(!$capsule) {
190
                return new JsonModel([
191
                    'success' => false,
192
                    'data' => 'ERROR_CAPSULE_NOT_FOUND'
193
 
194
                ]);
195
 
196
            }
197
 
198
            $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
199
            $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
200
            if(! $capsuleUser) {
201
                return new JsonModel([
202
                    'success' => false,
203
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE',
204
                ]);
205
            }
206
 
207
            $userMapper = UserMapper::getInstance($this->adapter);
208
            $users = [];
209
 
210
            $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
211
            $records = $capsuleCommentMapper->fetchAllByCapsuleId($capsule->id);
212
 
213
            $comments = [];
214
            foreach($records as $record)
215
            {
216
 
217
                if(isset($users[$record->user_id])) {
218
 
219
                    $user = $users[$record->user_id];
220
 
221
                } else {
222
 
223
                    $user = $userMapper->fetchOne($record->user_id);
224
                    if(!$user) {
225
                        continue;
226
                    }
227
 
228
                    $users[$record->user_id] = $user;
229
 
230
 
231
                }
232
 
233
 
234
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
235
 
236
                array_push($comments, [
237
                    'date' => $dt->format($serviceDatetimeFormat),
238
                    'image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image], ['force_canonical' => true]),
239
                    'fullname' => trim(trim($user->first_name) . ' ' . trim($user->last_name)),
240
                    'rating' => strval($record->rating),
241
                    'comment' => $record->comment,
242
                    'link_delete' => $record->user_id == $currentUser->id ? $this->url()->fromRoute('microlearning/capsules-comments/delete', ['capsule_id' => $capsule->uuid, 'comment_id' => $record->uuid], ['force_canonical' => true]) : '',
243
                ]);
244
            }
245
 
246
            $dataCountAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
247
 
248
            return new JsonModel([
249
                'success' => true,
250
                'data' => [
251
                    'comments' => $comments,
252
                    'capsule' => [
253
                        'total_comments' => strval($dataCountAndRatingAverage['total_comments']),
254
                        'total_rating' => strval($dataCountAndRatingAverage['total_rating'])
255
                    ]
256
                ]
257
 
258
            ]);
259
 
260
        }
261
 
262
        return new JsonModel([
263
            'success' => false,
264
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
265
        ]);
266
    }
267
 
268
 
269
 
270
    public function capsuleDeleteMyCommentAction()
271
    {
272
 
273
        $request = $this->getRequest();
274
 
275
        if($request->isPost()) {
276
 
277
            $currentUserPlugin = $this->plugin('currentUserPlugin');
278
            $currentUser = $currentUserPlugin->getUser();
279
 
280
            $capsule_id = $this->params()->fromRoute('capsule_id');
281
            $comment_id = $this->params()->fromRoute('comment_id');
282
 
283
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
284
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
285
 
286
            if(!$capsule) {
287
                return new JsonModel([
288
                    'success' => false,
289
                    'data' => 'ERROR_CAPSULE_NOT_FOUND'
290
 
291
                ]);
292
 
293
            }
294
 
295
            $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
296
            $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
297
            if(! $capsuleUser) {
298
                return new JsonModel([
299
                    'success' => false,
300
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE',
301
                ]);
302
            }
303
 
304
            $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
305
            $capsuleComment = $capsuleCommentMapper->fetchOneByUuid($comment_id);
306
 
307
            if(!$capsuleComment) {
308
                return new JsonModel([
309
                    'success' => false,
310
                    'data' => 'ERROR_CAPSULE_COMMENT_NOT_FOUND',
311
                ]);
312
            }
313
 
314
            if($capsuleComment->capsule_id != $capsule->id || $capsuleComment->user_id != $currentUser->id) {
315
                return new JsonModel([
316
                    'success' => false,
317
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE_COMMENT',
318
                ]);
319
            }
320
 
321
 
322
            $result = $capsuleCommentMapper->delete($capsuleComment->id);
323
            if($result) {
324
                $dataCountAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
325
 
326
 
327
 
328
 
329
                return new JsonModel([
330
                    'success' => true,
331
                    'data' => [
332
                        'message' => 'LABEL_CAPSULE_COMMENT_HAVE_BEEN_SUCCESSFULLY_DELETE',
333
                        'capsule' => [
334
                            'total_comments' => strval($dataCountAndRatingAverage['total_comments']),
335
                            'total_rating' => strval($dataCountAndRatingAverage['total_rating'])
336
                        ]
337
                    ],
338
 
339
                ]);
340
            } else {
341
                return new JsonModel([
342
                    'success' => false,
343
                    'data' => $capsuleCommentMapper->getError()
344
 
345
                ]);
346
            }
347
 
348
 
349
 
350
        }
351
 
352
        return new JsonModel([
353
            'success' => false,
354
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
355
        ]);
356
    }
357
 
358
    public function capsuleAddMyCommentAction()
359
    {
360
 
361
        $request = $this->getRequest();
362
 
363
        if($request->isPost()) {
364
 
365
            $currentUserPlugin = $this->plugin('currentUserPlugin');
366
            $currentUser = $currentUserPlugin->getUser();
367
 
368
            $capsule_id = $this->params()->fromRoute('capsule_id');
369
 
370
 
371
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
372
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
373
 
374
            if(!$capsule) {
375
                return new JsonModel([
376
                    'success' => false,
377
                    'data' => 'ERROR_CAPSULE_NOT_FOUND'
378
 
379
                ]);
380
 
381
            }
382
 
383
            $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
384
            $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
385
            if(! $capsuleUser) {
386
                return new JsonModel([
387
                    'success' => false,
388
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE',
389
                ]);
390
            }
391
 
392
            //$rawdata = file_get_contents("php://input");
393
            //  error_log('$rawdata = ' . $rawdata );
394
 
395
 
396
            $form = new  CapsuleCommentForm();
397
            $dataPost = $request->getPost()->toArray();
398
            $dataPost['added_on'] = $capsuleMapper->getDatebaseNow();
399
 
400
 
401
            $form->setData($dataPost);
402
 
403
            if($form->isValid()) {
404
                $dataPost = (array) $form->getData();
405
 
406
 
407
                $capsuleComment = new CompanyMicrolearningCapsuleComment();
408
                $capsuleComment->company_id = $capsule->company_id;
409
                $capsuleComment->topic_id = $capsule->topic_id;
410
                $capsuleComment->capsule_id = $capsule->id;
411
                $capsuleComment->user_id = $currentUser->id;
412
                $capsuleComment->comment = $dataPost['comment'];
413
                $capsuleComment->rating = strval($dataPost['rating']);
414
                $capsuleComment->added_on =  $dataPost['added_on'];
415
 
416
 
417
                $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
418
                $result = $capsuleCommentMapper->insert($capsuleComment);
419
                if($result) {
420
 
421
                    $capsuleComment = $capsuleCommentMapper->fetchOne($capsuleComment->id);
422
 
423
                    $dataCountAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
424
 
425
 
426
 
427
                    return new JsonModel([
428
                        'success' => true,
429
                        'data' => [
430
                            'message' =>'LABEL_CAPSULE_COMMENT_HAVE_BEEN_SUCCESSFULLY_ADDED',
431
 
432
                            'comment' => [
433
                                'comment' => $capsuleComment->comment,
434
                                'rating' => $capsuleComment->rating,
435
                                'link_delete' => $this->url()->fromRoute('microlearning/capsules-comments/delete', ['capsule_id' => $capsule->uuid, 'comment_id' => $capsuleComment->uuid], ['force_canonical' => true])
436
                            ],
437
                            'capsule' => [
438
                                'total_comments' => strval($dataCountAndRatingAverage['total_comments']),
439
                                'total_rating' => strval($dataCountAndRatingAverage['total_rating'])
440
                            ]
441
                        ]
442
 
443
                    ]);
444
                } else {
445
                    return new JsonModel([
446
                        'success' => false,
447
                        'data' => $capsuleCommentMapper->getError()
448
 
449
                    ]);
450
                }
451
 
452
 
453
            } else {
454
                $messages = [];
455
                $form_messages = (array) $form->getMessages();
456
                foreach($form_messages  as $fieldname => $field_messages)
457
                {
458
 
459
                    $messages[$fieldname] = array_values($field_messages);
460
                }
461
 
462
                return new JsonModel([
463
                    'success'   => false,
464
                    'data'   => $messages
465
                ]);
466
            }
467
 
468
 
469
 
470
 
471
        }
472
 
473
        return new JsonModel([
474
            'success' => false,
475
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
476
        ]);
477
    }
478
 
479
    public function lastCapsuleInProgressAction()
480
    {
481
        $request = $this->getRequest();
482
 
483
        if($request->isGet())
484
        {
485
            $currentUserPlugin = $this->plugin('currentUserPlugin');
486
            $currentUser = $currentUserPlugin->getUser();
487
 
488
            $accessGrantedIds = $this->getAccessGranted();
489
 
490
 
491
            $userProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
492
            $userProgress = $userProgressMapper->fetchOneLastCapsuleInProgressByUserIdAndCapsuleIds($currentUser->id, $accessGrantedIds->capsules);
493
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
494
 
495
            if($userProgress) {
496
                $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
497
                $capsule = $capsuleMapper->fetchOne($userProgress->capsule_id);
498
 
499
                $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
500
 
501
 
502
                $dataCountAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
503
 
504
                $topic = $topicMapper->fetchOne($capsule->topic_id);
505
 
506
                $response = [
507
                    'success' => true,
508
                    'data' => [
509
                        'name'              => $capsule->name ? $capsule->name : '',
510
                        'description'       => $capsule->description ? $capsule->description : '',
511
                        'image'             => $capsule->image ? $this->url()->fromRoute('services/storage',['type' => 'microlearning-capsule', 'code' => $capsule->uuid, 'filename' => $capsule->image ], ['force_canonical' => true])  : '',
512
                        'link_comments'     => $this->url()->fromRoute('microlearning/capsules-comments', ['capsule_id' => $capsule->uuid], ['force_canonical' => true]),
513
                        'link_comment_add'  => $this->url()->fromRoute('microlearning/capsules-comments/add', ['capsule_id' => $capsule->uuid],['force_canonical' => true]),
514
                        'link_slides'       => $this->url()->fromRoute('microlearning/slides', ['topic_id' => $topic->uuid,  'capsule_id' => $capsule->uuid], ['force_canonical' => true]),
515
                        'total_comments'    => strval($dataCountAndRatingAverage['total_comments']),
516
                        'total_rating'      => strval($dataCountAndRatingAverage['total_rating']),
517
                        'completed'         => $userProgress->completed,
145 efrain 518
                        'progress'          => $userProgress->progress,
162 efrain 519
                        'link_get'          => $this->url()->fromRoute('microlearning/get-capsule', ['id' => $capsule->uuid], ['force_canonical' => true]),
119 efrain 520
                        'added_on'          => $userProgress->added_on,
521
                        'updated_on'        => $userProgress->updated_on
522
                    ]
523
                ];
524
 
525
 
526
            } else {
527
                $response = [
528
                    'success' => true,
529
                    'data' => [
530
 
531
                    ]
532
                ];
533
            }
534
 
535
 
536
        } else {
537
 
538
            $response = [
539
                'success' => false,
540
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
541
            ];
542
 
543
 
544
        }
545
 
546
        return new JsonModel($response);
547
    }
548
 
549
    public function capsulesPendingAction()
550
    {
551
        $request = $this->getRequest();
552
        if($request->isGet()) {
553
            $currentUserPlugin = $this->plugin('currentUserPlugin');
554
            $currentUser = $currentUserPlugin->getUser();
555
 
556
            $name = Functions::sanitizeFilterString($this->params()->fromQuery('name'));
557
 
558
 
559
            $userProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
560
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
561
            $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
562
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
563
 
564
            $accessGranted = $this->getAccessGranted();
565
 
566
 
567
            $topics = [];
568
            $capsules = [];
569
 
570
            foreach($accessGranted->capsules as $capsule_id)
571
            {
572
                $userProgress = $userProgressMapper->fetchOneByUseridAndCapsuleId($currentUser->id, $capsule_id);
573
                if($userProgress) {
574
                    continue;
575
                }
576
 
577
                $capsule = $capsuleMapper->fetchOne($capsule_id);
578
 
579
                if($name) {
580
                    if(empty($name) || stripos($capsule->name, $name) === false) {
581
                        continue;
582
                    }
583
                }
584
 
585
                $dataCountAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
586
 
587
                if(isset($topics[$capsule->topic_id])) {
588
                    $topic = $topics[$capsule->topic_id];
589
                } else {
590
                    $topic = $topicMapper->fetchOne($capsule->topic_id);
591
                    $topics[ $capsule->topic_id ] = $topic;
592
                }
593
 
594
 
595
                array_push($capsules, [
596
                    'uuid'              => $capsule->uuid,
597
                    'name'              => $capsule->name ? $capsule->name : '',
598
                    'description'       => $capsule->description ? $capsule->description : '',
599
                    'image'             => $capsule->image ? $this->url()->fromRoute('services/storage',['type' => 'microlearning-capsule', 'code' => $capsule->uuid, 'filename' => $capsule->image ], ['force_canonical' => true])  : '',
600
                    'position'          => $capsule->order,
601
                    'link_comments'     => $this->url()->fromRoute('microlearning/capsules-comments', ['capsule_id' => $capsule->uuid], ['force_canonical' => true]),
602
                    'link_comment_add'  => $this->url()->fromRoute('microlearning/capsules-comments/add', ['capsule_id' => $capsule->uuid],['force_canonical' => true]),
603
                    'link_slides'       => $this->url()->fromRoute('microlearning/slides', ['topic_id' => $topic->uuid,  'capsule_id' => $capsule->uuid], ['force_canonical' => true]),
604
                    'total_comments'    => strval($dataCountAndRatingAverage['total_comments']),
605
                    'total_rating'      => strval($dataCountAndRatingAverage['total_rating']),
145 efrain 606
                    'progress'          => $userProgress->progress,
162 efrain 607
                    'link_get'          => $this->url()->fromRoute('microlearning/get-capsule', ['id' => $capsule->uuid], ['force_canonical' => true]),
119 efrain 608
                    'added_on'          => $capsule->added_on,
609
                    'updated_on'        => $capsule->updated_on,
610
                ]);
611
            }
612
 
613
            usort($capsules, function($a, $b) {
614
                $result = strcasecmp($a['name'], $b['name']);
615
                if($result < 0) {
616
                    return 1;
617
                } else if($result > 0) {
618
                    return -1;
619
                } else  {
620
                    return  0;
621
                }
622
 
623
            });
624
 
625
 
626
            return new JsonModel([
627
                'success' => true,
628
                'data' => $capsules
629
            ]);
630
 
631
 
632
 
633
        }
634
 
635
        return new JsonModel([
636
            'success' => false,
637
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
638
        ]);
639
 
640
    }
641
 
642
    public function capsulesCompletedAction()
643
    {
644
        $request = $this->getRequest();
645
        if($request->isGet()) {
646
            $currentUserPlugin = $this->plugin('currentUserPlugin');
647
            $currentUser = $currentUserPlugin->getUser();
648
 
649
            $name = Functions::sanitizeFilterString($this->params()->fromQuery('name'));
650
 
651
 
652
            $userProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
653
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
654
            $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
655
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
656
 
657
            $accessGranted = $this->getAccessGranted();
658
 
659
            $topics = [];
660
            $capsules = [];
661
 
662
            foreach($accessGranted->capsules as $capsule_id)
663
            {
664
                $userProgress = $userProgressMapper->fetchOneByUseridAndCapsuleId($currentUser->id, $capsule_id);
665
                if(!$userProgress) {
666
                    continue;
667
                }
668
 
669
                if(!$userProgress->completed) {
670
                    continue;
671
                }
672
 
673
 
674
 
675
                $capsule = $capsuleMapper->fetchOne($capsule_id);
676
 
677
                if($name) {
678
                    if(empty($name) || stripos($capsule->name, $name) === false) {
679
                        continue;
680
                    }
681
                }
682
 
683
                $dataCountAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
684
 
685
                if(isset($topics[$capsule->topic_id])) {
686
                    $topic = $topics[$capsule->topic_id];
687
                } else {
688
                    $topic = $topicMapper->fetchOne($capsule->topic_id);
689
                    $topics[ $capsule->topic_id ] = $topic;
690
                }
691
 
692
 
693
 
694
                array_push($capsules, [
695
                    'uuid'              => $capsule->uuid,
696
                    'name'              => $capsule->name ? $capsule->name : '',
697
                    'description'       => $capsule->description ? $capsule->description : '',
698
                    'image'             => $capsule->image ? $this->url()->fromRoute('services/storage',['type' => 'microlearning-capsule', 'code' => $capsule->uuid, 'filename' => $capsule->image ], ['force_canonical' => true])  : '',
699
                    'position'          => $capsule->order,
700
                    'link_comments'     => $this->url()->fromRoute('microlearning/capsules-comments', ['capsule_id' => $capsule->uuid], ['force_canonical' => true]),
701
                    'link_comment_add'  => $this->url()->fromRoute('microlearning/capsules-comments/add', ['capsule_id' => $capsule->uuid],['force_canonical' => true]),
702
                    'link_slides'       => $this->url()->fromRoute('microlearning/slides', ['topic_id' => $topic->uuid,  'capsule_id' => $capsule->uuid], ['force_canonical' => true]),
703
                    'total_comments'    => strval($dataCountAndRatingAverage['total_comments']),
704
                    'total_rating'      => strval($dataCountAndRatingAverage['total_rating']),
145 efrain 705
                    'progress'          => $userProgress->progress,
162 efrain 706
                    'link_get'          => $this->url()->fromRoute('microlearning/get-capsule', ['id' => $capsule->uuid], ['force_canonical' => true]),
119 efrain 707
                    'added_on'          => $capsule->added_on,
708
                    'updated_on'        => $capsule->updated_on,
709
                ]);
710
            }
711
 
712
            usort($capsules, function($a, $b) {
713
                $result = strcasecmp($a['name'], $b['name']);
714
                if($result < 0) {
715
                    return 1;
716
                } else if($result > 0) {
717
                    return -1;
718
                } else  {
719
                    return  0;
720
                }
721
 
722
            });
723
 
724
 
725
            return new JsonModel([
726
                'success' => true,
727
                'data' => $capsules
728
            ]);
729
 
730
        }
731
 
732
        return new JsonModel([
733
            'success' => false,
734
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
735
        ]);
736
    }
737
 
738
    public function capsulesInProgressAction()
739
    {
740
        $request = $this->getRequest();
741
        if($request->isGet()) {
742
            $currentUserPlugin = $this->plugin('currentUserPlugin');
743
            $currentUser = $currentUserPlugin->getUser();
744
 
745
            $name = Functions::sanitizeFilterString($this->params()->fromQuery('name'));
746
 
747
 
748
            $userProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
749
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
750
            $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
751
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
752
 
753
            $accessGranted = $this->getAccessGranted();
754
 
755
            $topics = [];
756
            $capsules = [];
757
 
758
            foreach($accessGranted->capsules as $capsule_id)
759
            {
760
                $userProgress = $userProgressMapper->fetchOneByUseridAndCapsuleId($currentUser->id, $capsule_id);
761
                if(!$userProgress) {
762
                    continue;
763
                }
764
 
765
                if($userProgress->completed) {
766
                    continue;
767
                }
768
 
769
 
770
 
771
                $capsule = $capsuleMapper->fetchOne($capsule_id);
772
 
773
                if($name) {
774
                    if(empty($name) || stripos($capsule->name, $name) === false) {
775
                        continue;
776
                    }
777
                }
778
 
779
 
780
                $dataCountAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
781
 
782
                if(isset($topics[$capsule->topic_id])) {
783
                    $topic = $topics[$capsule->topic_id];
784
                } else {
785
                    $topic = $topicMapper->fetchOne($capsule->topic_id);
786
                    $topics[ $capsule->topic_id ] = $topic;
787
                }
788
 
789
 
790
 
791
 
792
                array_push($capsules, [
793
                    'uuid'              => $capsule->uuid,
794
                    'name'              => $capsule->name ? $capsule->name : '',
795
                    'description'       => $capsule->description ? $capsule->description : '',
796
                    'image'             => $capsule->image ? $this->url()->fromRoute('services/storage',['type' => 'microlearning-capsule', 'code' => $capsule->uuid, 'filename' => $capsule->image ], ['force_canonical' => true])  : '',
797
                    'position'          => $capsule->order,
798
                    'link_comments'     => $this->url()->fromRoute('microlearning/capsules-comments', ['capsule_id' => $capsule->uuid], ['force_canonical' => true]),
799
                    'link_comment_add'  => $this->url()->fromRoute('microlearning/capsules-comments/add', ['capsule_id' => $capsule->uuid],['force_canonical' => true]),
800
                    'link_slides'       => $this->url()->fromRoute('microlearning/slides', ['topic_id' => $topic->uuid,  'capsule_id' => $capsule->uuid], ['force_canonical' => true]),
801
                    'total_comments'    => strval($dataCountAndRatingAverage['total_comments']),
802
                    'total_rating'      => strval($dataCountAndRatingAverage['total_rating']),
145 efrain 803
                    'progress'          => $userProgress->progress,
162 efrain 804
                    'link_get'          => $this->url()->fromRoute('microlearning/get-capsule', ['id' => $capsule->uuid], ['force_canonical' => true]),
119 efrain 805
                    'added_on'          => $capsule->added_on,
806
                    'updated_on'        => $capsule->updated_on,
807
                ]);
808
            }
809
 
810
            usort($capsules, function($a, $b) {
811
                $result = strcasecmp($a['name'], $b['name']);
812
                if($result < 0) {
813
                    return 1;
814
                } else if($result > 0) {
815
                    return -1;
816
                } else  {
817
                    return  0;
818
                }
819
 
820
            });
821
 
822
 
823
            return new JsonModel([
824
                'success' => true,
825
                'data' => $capsules
826
            ]);
827
 
828
 
829
 
830
        }
831
 
832
        return new JsonModel([
833
            'success' => false,
834
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
835
        ]);
836
    }
837
 
838
 
839
    public function timelineAction()
840
    {
841
 
842
        $request = $this->getRequest();
843
        if($request->isGet()) {
844
            $currentUserPlugin = $this->plugin('currentUserPlugin');
845
            $currentUser = $currentUserPlugin->getUser();
846
 
847
 
848
            $page = intval($this->params()->fromQuery('page'), 10);
849
 
850
            $activities = [
851
                CompanyMicrolearningUserLog::ACTIVITY_SIGNIN            => 'LABEL_MICROLEARNING_ACTIVITY_SIGNIN',
852
                CompanyMicrolearningUserLog::ACTIVITY_SIGNOUT           => 'LABEL_MICROLEARNING_ACTIVITY_SIGNOUT',
853
                CompanyMicrolearningUserLog::ACTIVITY_START_TOPIC       => 'LABEL_MICROLEARNING_ACTIVITY_START_TOPIC',
854
                CompanyMicrolearningUserLog::ACTIVITY_START_CAPSULE     => 'LABEL_MICROLEARNING_ACTIVITY_START_CAPSULE',
855
                CompanyMicrolearningUserLog::ACTIVITY_VIEW_SLIDE        => 'LABEL_MICROLEARNING_ACTIVITY_VIEW_SLIDE',
856
                CompanyMicrolearningUserLog::ACTIVITY_TAKE_A_TEST       => 'LABEL_MICROLEARNING_ACTIVITY_TAKE_A_TEST',
857
                CompanyMicrolearningUserLog::ACTIVITY_RETAKE_A_TEST     => 'LABEL_MICROLEARNING_ACTIVITY_RETAKE_A_TEST',
858
                CompanyMicrolearningUserLog::ACTIVITY_APPROVED_TEST     => 'LABEL_MICROLEARNING_ACTIVITY_APPROVED_TEST',
859
                CompanyMicrolearningUserLog::ACTIVITY_COMPLETED_CAPSULE => 'LABEL_MICROLEARNING_ACTIVITY_COMPLETED_CAPSULE',
860
                CompanyMicrolearningUserLog::ACTIVITY_COMPLETED_TOPIC   => 'LABEL_MICROLEARNING_ACTIVITY_COMPLETED_TOPIC',
861
            ];
862
 
863
 
864
 
865
            $companyMicrolearningUserLogMapper = CompanyMicrolearningUserLogMapper::getInstance($this->adapter);
866
            $paginator = $companyMicrolearningUserLogMapper->getAllMessagesPaginatorByUserId($currentUser->id, $page);
867
 
868
            $items = [];
869
            foreach($paginator as $record)
870
            {
871
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
872
 
873
                array_push($items, [
874
                    'activity' => $activities[$record->activity],
875
                    'added_on' => $dt->format('d/m/Y H:i a')
876
                ]);
877
            }
878
 
879
 
880
            return new JsonModel([
881
                'success' => true,
882
                'data' => [
883
                    'total' => [
884
                        'count' => $paginator->getTotalItemCount(),
885
                        'pages' => $paginator->getPages()->pageCount,
886
                    ],
887
                    'current' => [
888
                        'items'    => $items,
889
                        'page'     => $paginator->getCurrentPageNumber(),
890
                        'count'    => $paginator->getCurrentItemCount(),
891
                    ]
892
                ]
893
            ]);
894
 
895
 
896
        } else {
897
            return new JsonModel([
898
                'success' => false,
899
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
900
            ]);
901
        }
902
    }
903
 
904
    /**
905
     * Valores para la generación de los gráficos de progreso
906
     * Para las repuesta afirmativa
907
     * [
908
     *  'success' => true,
909
     *      'data' => [
910
     *          'topicTotal' => cantidad total de tópicos,
911
     *          'topicStarted' => cantidad de tópicos iniciados,
912
     *          'topicIncompleted' => cantidad de tópicos incompletos,
913
     *          'topicCompleted' => cantidad de tópicos completos,
914
     *          'percentCompleted' => % de diapositivas completados ,
915
     *          'percentIncompleted' => % de diapositivas incompletos ,
916
     *          'percentWithoutReturning' => % de cápsulas sin retorno después de completada,
917
     *          'percentWithReturning' => % de cápsulas con retorno después de completada,
918
     *       ],
919
     * ]
920
     *
921
     *
922
     *  En caso contrario
923
     *  [
924
     *      'success' => false,
925
     *      'data' => mensaje de error
926
     *  ]
927
     *
928
     *
929
     * @return \Laminas\View\Model\JsonModel
930
     */
931
    public function progressAction()
932
    {
933
 
934
        $request = $this->getRequest();
935
        if($request->isGet()) {
936
            $currentUserPlugin = $this->plugin('currentUserPlugin');
937
            $currentUser = $currentUserPlugin->getUser();
938
 
939
 
940
            $accessGrantedIds = $this->getAccessGranted();
941
            $id = $this->params()->fromRoute('id');
942
 
943
            $companyMapper = CompanyMapper::getInstance($this->adapter);
944
            $company = $companyMapper->fetchOneByUuid($id);
945
 
946
            if(!$company) {
947
                $response = [
948
                    'success' => false,
949
                    'data' => 'ERROR_COMPANY_NOT_FOUND',
950
                ];
951
 
952
 
953
                return new JsonModel($response);
954
            }
955
 
956
            if(!in_array($company->id, $accessGrantedIds->companies)) {
957
                $response = [
958
                    'success' => false,
959
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_COMPANY',
960
                ];
961
 
962
 
963
                return new JsonModel($response);
964
            }
965
 
966
            $capsuleTotal              = 0;
967
            $capsuleCompleted          = 0;
968
            $capsuleWithReturning      = 0;
969
            $capsuleWithoutReturning   = 0;
970
            $capsuleStarted            = 0;
971
            $capsuleToStart            = 0;
972
            $percentCompleted          = 0;
973
            $percentIncompleted        = 100;
974
 
975
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
976
            $topics = $topicMapper->fetchAllActiveByCompanyIdAndIds($company->id, $accessGrantedIds->topics);
977
 
978
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
979
            $progressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
980
 
981
 
982
            foreach($topics as $topic)
983
            {
984
                $resultCount = $capsuleMapper->fetchCountByCompanyIdAndTopicId($company->id, $topic->id);
985
                $capsuleTotal =  $capsuleTotal + $resultCount;
986
 
987
                $resultCount = $progressMapper->fetchCountCapsulesCompletedByIdAndTopicId($currentUser->id, $topic->id);
988
                $capsuleCompleted = $capsuleCompleted + $resultCount;
989
 
990
                $resultCount = $progressMapper->fetchCountCapsulesCompletedWithReturningByIdAndTopicId($currentUser->id, $topic->id);
991
                $capsuleWithReturning = $capsuleWithReturning + $resultCount;
992
 
993
                $resultCount = $progressMapper->fetchCountCapsulesCompletedWithoutReturningByIdAndTopicId($currentUser->id, $topic->id);
994
                $capsuleWithoutReturning = $capsuleWithoutReturning + $resultCount;
995
 
996
                $resultCount = $progressMapper->fetchCountCapsulesCompletedByIdAndTopicId($currentUser->id, $topic->id);
997
                $capsuleStarted = $capsuleStarted + $resultCount;
998
            }
999
 
1000
            $capsuleToStart = $capsuleTotal -  $capsuleStarted;
1001
 
1002
 
1003
            if($capsuleTotal > 0) {
1004
                $percentCompleted = ($capsuleCompleted * 100) /  $capsuleTotal;
1005
                $percentIncompleted = 100 - $percentCompleted;
1006
            }
1007
 
1008
 
1009
 
1010
            return new JsonModel([
1011
                'success' => true,
1012
                'data' => [
1013
                    'capsuleTotal' => $capsuleTotal,
1014
                    'capsuleCompleted' => $capsuleCompleted,
1015
                    'capsuleStarted' => $capsuleStarted,
1016
                    'capsuleToStart' => $capsuleToStart,
1017
                    'percentCompleted' => number_format($percentCompleted, 2, '.', ','),
1018
                    'percentIncompleted' => number_format($percentIncompleted, 2, '.', ','),
1019
                    'capsuleWithReturning' => $capsuleWithReturning,
1020
                    'capsuleWithoutReturning' => $capsuleWithoutReturning,
1021
                ],
1022
            ]);
1023
 
1024
 
1025
        } else {
1026
            return new JsonModel([
1027
                'success' => false,
1028
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1029
            ]);
1030
        }
1031
    }
1032
 
1033
 
1034
    public function topicsAction()
1035
    {
1036
        $request = $this->getRequest();
1037
        if($request->isGet()) {
1038
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1039
            $currentUser = $currentUserPlugin->getUser();
1040
 
1041
 
1042
            $data = [];
1043
            $accessGrantedIds = $this->getAccessGranted();
1044
 
1045
            $userProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
1046
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1047
 
1048
 
1049
            foreach($accessGrantedIds->topics as $id)
1050
            {
1051
                $topic = $topicMapper->fetchOne($id);
1052
                if(!$topic) {
1053
                    continue;
1054
                }
1055
 
1056
                $userProgress = $userProgressMapper->fetchOneByUserIdAndTopicId($currentUser->id, $id);
1057
                if($userProgress) {
1058
                    $progress = $userProgress->progress;
1059
                    $completed = $userProgress->completed;
1060
                } else {
1061
                    $progress = 0;
1062
                    $completed = 0;
1063
                }
1064
 
1065
 
1066
 
1067
                array_push($data, [
1068
                    'name'          => $topic->name ? $topic->name : '',
1069
                    'description'   => $topic->description ? $topic->description : '',
1070
                    'image'         => $topic->image ? $this->url()->fromRoute('services/storage',['type' => 'microlearning-topic', 'code' => $topic->uuid, 'filename' => $topic->image ], ['force_canonical' => true]) : '',
1071
                    'progress'      => $progress,
1072
                    'completed'     => $completed,
1073
                    'order'         => $topic->order,
1074
                    'added_on'      => $topic->added_on,
1075
                    'updated_on'    => $topic->updated_on,
1076
                    'link_capsules' => $this->url()->fromRoute('microlearning/capsules', ['topic_id' => $topic->uuid], ['force_canonical' => true]),
161 efrain 1077
                    'link_get'      => $this->url()->fromRoute('microlearning/get-topic', ['id' => $topic->uuid], ['force_canonical' => true]),
119 efrain 1078
 
1079
                ]);
1080
            }
1081
 
1082
            usort($data, function($a, $b) {
1083
 
1084
                $result =  $a['order'] <=> $b['order'];
1085
                if(0 == $result) {
1086
                    $result = strcasecmp($a['added_on'], $b['added_on']);
1087
                    if(0 == $result) {
1088
                        $result = strcasecmp($a['name'], $b['name']);
1089
                    }
1090
                }
1091
 
1092
                if($result < 0) {
1093
                    return 1;
1094
                } else if($result > 0) {
1095
                    return -1;
1096
                } else  {
1097
                    return  0;
1098
                }
1099
            });
1100
 
1101
 
1102
 
1103
                return new JsonModel([
1104
                    'success' => true,
1105
                    'data' => $data
1106
                ]);
1107
 
1108
        } else {
1109
            return new JsonModel([
1110
                'success' => false,
1111
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1112
            ]);
1113
        }
1114
    }
1115
 
161 efrain 1116
    public function getTopicAction()
1117
    {
1118
        $request = $this->getRequest();
1119
        if($request->isGet()) {
1120
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1121
            $currentUser = $currentUserPlugin->getUser();
1122
 
1123
 
1124
            $id = $this->params()->fromRoute('id');
1125
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1126
            $topic = $topicMapper->fetchOneByUuid($id);
1127
 
1128
            if(!$topic) {
1129
                return new JsonModel([
1130
                    'success' => false,
1131
                    'data' => 'ERROR_TOPIC_NOT_FOUND'
1132
                ]);
1133
            }
1134
 
1135
            $accessGrantedIds = $this->getAccessGranted();
1136
 
1137
            if(!in_array($topic->id, $accessGrantedIds->topics)) {
1138
                return new JsonModel([
1139
                    'success' => false,
1140
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_TOPIC'
1141
                ]);
1142
            }
1143
 
1144
 
1145
            $data = [];
1146
            $accessGrantedIds = $this->getAccessGranted();
1147
 
1148
            $userProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
1149
 
1150
            $userProgress = $userProgressMapper->fetchOneByUserIdAndTopicId($currentUser->id, $id);
1151
            if($userProgress) {
1152
                $progress = $userProgress->progress;
1153
                $completed = $userProgress->completed;
1154
            } else {
1155
                $progress = 0;
1156
                $completed = 0;
1157
            }
1158
 
1159
 
1160
 
1161
            $data = [
1162
                'name'          => $topic->name ? $topic->name : '',
1163
                'description'   => $topic->description ? $topic->description : '',
1164
                'image'         => $topic->image ? $this->url()->fromRoute('services/storage',['type' => 'microlearning-topic', 'code' => $topic->uuid, 'filename' => $topic->image ], ['force_canonical' => true]) : '',
1165
                'progress'      => $progress,
1166
                'completed'     => $completed,
1167
                'order'         => $topic->order,
1168
                'added_on'      => $topic->added_on,
1169
                'updated_on'    => $topic->updated_on,
1170
                'link_capsules' => $this->url()->fromRoute('microlearning/capsules', ['topic_id' => $topic->uuid], ['force_canonical' => true]),
1171
 
1172
            ];
1173
 
1174
 
1175
 
1176
            return new JsonModel([
1177
                'success' => true,
1178
                'data' => $data
1179
            ]);
1180
 
1181
        } else {
1182
            return new JsonModel([
1183
                'success' => false,
1184
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1185
            ]);
1186
        }
1187
    }
119 efrain 1188
 
161 efrain 1189
 
119 efrain 1190
    public function capsulesAction()
1191
    {
1192
        $request = $this->getRequest();
1193
        if($request->isGet()) {
1194
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1195
            $currentUser = $currentUserPlugin->getUser();
1196
 
1197
 
1198
 
1199
            $topic_id = $this->params()->fromRoute('topic_id');
1200
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1201
            $topic = $topicMapper->fetchOneByUuid($topic_id);
1202
 
1203
            if(!$topic) {
1204
                return new JsonModel([
1205
                    'success' => false,
1206
                    'data' => 'ERROR_TOPIC_NOT_FOUND'
1207
                ]);
1208
            }
1209
 
1210
            $accessGrantedIds = $this->getAccessGranted();
1211
 
1212
            if(!in_array($topic->id, $accessGrantedIds->topics)) {
1213
                return new JsonModel([
1214
                    'success' => false,
1215
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_TOPIC'
1216
                ]);
1217
            }
1218
 
1219
 
1220
 
1221
            $data = [];
1222
 
1223
 
1224
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1225
            $userProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
1226
            $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
1227
 
1228
 
1229
            $capsules = $capsuleMapper->fetchAllActiveByCompanyIdAndTopicId($topic->company_id, $topic->id);
1230
            foreach($capsules as $capsule)
1231
            {
1232
 
1233
                if(!in_array($capsule->id, $accessGrantedIds->capsules)) {
1234
                    continue;
1235
                }
1236
 
1237
                $userProgress = $userProgressMapper->fetchOneByUseridAndCapsuleId($currentUser->id, $capsule->id);
1238
                if($userProgress) {
1239
                    $progress = $userProgress->progress;
1240
                    $completed = $userProgress->completed;
1241
                } else {
1242
                    $progress = 0;
1243
                    $completed = 0;
1244
                }
1245
 
1246
                $dataCountAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
1247
 
1248
 
1249
 
1250
                array_push($data, [
1251
                    'name'              => $capsule->name ? $capsule->name : '',
1252
                    'description'       => $capsule->description ? $capsule->description : '',
1253
                    'image'             => $capsule->image ? $this->url()->fromRoute('services/storage',['type' => 'microlearning-capsule', 'code' => $capsule->uuid, 'filename' => $capsule->image ], ['force_canonical' => true])  : '',
1254
                    'link_comments'     => $this->url()->fromRoute('microlearning/capsules-comments', ['capsule_id' => $capsule->uuid], ['force_canonical' => true]),
1255
                    'link_comment_add'  => $this->url()->fromRoute('microlearning/capsules-comments/add', ['capsule_id' => $capsule->uuid],['force_canonical' => true]),
1256
                    'link_slides'       => $this->url()->fromRoute('microlearning/slides', ['topic_id' => $topic->uuid,  'capsule_id' => $capsule->uuid], ['force_canonical' => true]),
161 efrain 1257
                    'link_get'          => $this->url()->fromRoute('microlearning/get-capsule', ['id' => $capsule->uuid], ['force_canonical' => true]),
119 efrain 1258
                    'total_comments'    => strval($dataCountAndRatingAverage['total_comments']),
1259
                    'total_rating'      => strval($dataCountAndRatingAverage['total_rating']),
1260
                    'progress'          => $progress,
1261
                    'completed'         => $completed,
1262
                    'order'             => $capsule->order,
1263
                    'added_on'          => $capsule->added_on,
1264
                    'updated_on'        => $capsule->updated_on,
1265
                ]);
1266
 
1267
 
1268
 
1269
            }
1270
 
1271
            usort($data, function($a, $b) {
1272
 
1273
                $result =  $a['order'] <=> $b['order'];
1274
                if(0 == $result) {
1275
                    $result = strcasecmp($a['added_on'], $b['added_on']);
1276
                    if(0 == $result) {
1277
                        $result = strcasecmp($a['name'], $b['name']);
1278
                    }
1279
                }
1280
 
1281
                if($result < 0) {
1282
                    return 1;
1283
                } else if($result > 0) {
1284
                    return -1;
1285
                } else  {
1286
                    return  0;
1287
                }
1288
            });
1289
 
1290
 
1291
 
1292
                return new JsonModel([
1293
                    'success' => true,
1294
                    'data' => $data
1295
                ]);
1296
 
1297
        } else {
1298
            return new JsonModel([
1299
                'success' => false,
1300
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1301
            ]);
1302
        }
1303
    }
1304
 
161 efrain 1305
    public function getCapsuleAction()
1306
    {
1307
        $request = $this->getRequest();
1308
        if($request->isGet()) {
1309
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1310
            $currentUser = $currentUserPlugin->getUser();
1311
 
1312
 
1313
 
1314
            $capsule_id = $this->params()->fromRoute('id');
1315
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1316
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
1317
 
1318
            if(!$capsule) {
1319
                return new JsonModel([
1320
                    'success' => false,
1321
                    'data' => 'ERROR_CAPSULE_NOT_FOUND'
1322
                ]);
1323
            }
1324
 
1325
            $accessGrantedIds = $this->getAccessGranted();
1326
 
1327
            if(!in_array($capsule->id, $accessGrantedIds->capsules)) {
1328
                return new JsonModel([
1329
                    'success' => false,
1330
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE'
1331
                ]);
1332
            }
1333
 
1334
 
1335
 
1336
 
1337
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1338
            $topic = $topicMapper->fetchOne($capsule->topic_id);
1339
 
1340
            $userProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
1341
            $capsuleCommentMapper = CompanyMicrolearningCapsuleCommentMapper::getInstance($this->adapter);
1342
 
1343
 
1344
 
1345
            $userProgress = $userProgressMapper->fetchOneByUseridAndCapsuleId($currentUser->id, $capsule->id);
1346
            if($userProgress) {
1347
                $progress = $userProgress->progress;
1348
                $completed = $userProgress->completed;
1349
            } else {
1350
                $progress = 0;
1351
                $completed = 0;
1352
            }
1353
 
1354
            $dataCountAndRatingAverage = $capsuleCommentMapper->fetchCountAndRatingAverage($capsule->company_id, $capsule->topic_id, $capsule->id);
1355
 
1356
 
1357
 
1358
            $data = [
1359
                    'name'              => $capsule->name ? $capsule->name : '',
1360
                    'description'       => $capsule->description ? $capsule->description : '',
1361
                    'image'             => $capsule->image ? $this->url()->fromRoute('services/storage',['type' => 'microlearning-capsule', 'code' => $capsule->uuid, 'filename' => $capsule->image ], ['force_canonical' => true])  : '',
1362
                    'link_comments'     => $this->url()->fromRoute('microlearning/capsules-comments', ['capsule_id' => $capsule->uuid], ['force_canonical' => true]),
1363
                    'link_comment_add'  => $this->url()->fromRoute('microlearning/capsules-comments/add', ['capsule_id' => $capsule->uuid],['force_canonical' => true]),
1364
                    'link_slides'       => $this->url()->fromRoute('microlearning/slides', ['topic_id' => $topic->uuid,  'capsule_id' => $capsule->uuid], ['force_canonical' => true]),
1365
                    'total_comments'    => strval($dataCountAndRatingAverage['total_comments']),
1366
                    'total_rating'      => strval($dataCountAndRatingAverage['total_rating']),
1367
                    'progress'          => $progress,
1368
                    'completed'         => $completed,
1369
                    'order'             => $capsule->order,
1370
                    'added_on'          => $capsule->added_on,
1371
                    'updated_on'        => $capsule->updated_on,
1372
            ];
1373
 
1374
 
1375
 
1376
            return new JsonModel([
1377
                'success' => true,
1378
                'data' => $data
1379
            ]);
1380
 
1381
        } else {
1382
            return new JsonModel([
1383
                'success' => false,
1384
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1385
            ]);
1386
        }
1387
    }
1388
 
119 efrain 1389
    public function slidesAction()
1390
    {
1391
        $request = $this->getRequest();
1392
        if($request->isGet()) {
1393
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1394
            $currentUser = $currentUserPlugin->getUser();
1395
 
1396
 
1397
 
1398
            $topic_id = $this->params()->fromRoute('topic_id');
1399
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1400
            $topic = $topicMapper->fetchOneByUuid($topic_id);
1401
 
1402
            if(!$topic) {
1403
                return new JsonModel([
1404
                    'success' => false,
1405
                    'data' => 'ERROR_TOPIC_NOT_FOUND'
1406
                ]);
1407
            }
1408
 
1409
            $accessGrantedIds = $this->getAccessGranted();
1410
 
1411
            if(!in_array($topic->id, $accessGrantedIds->topics)) {
1412
                return new JsonModel([
1413
                    'success' => false,
1414
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_TOPIC'
1415
                ]);
1416
            }
1417
 
1418
            $capsule_id = $this->params()->fromRoute('capsule_id');
1419
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1420
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
1421
 
1422
            if(!$capsule) {
1423
                return new JsonModel([
1424
                    'success' => false,
1425
                    'data' => 'ERROR_CAPSULE_NOT_FOUND'
1426
                ]);
1427
            }
1428
 
1429
 
1430
 
1431
            if(!in_array($capsule->id, $accessGrantedIds->capsules)) {
1432
                return new JsonModel([
1433
                    'success' => false,
1434
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE'
1435
                ]);
1436
            }
1437
 
1438
 
1439
 
1440
            $data = [];
1441
 
1442
 
1443
            $slideMapper = CompanyMicrolearningSlideMapper::getInstance($this->adapter);
1444
            $userProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
1445
 
1446
 
1447
            $slides = $slideMapper->fetchAllByCompanyIdAndTopicIdAndCapsuleId($capsule->company_id, $capsule->topic_id, $capsule->id);
1448
            foreach($slides as $slide)
1449
            {
1450
 
1451
 
1452
                $userProgress = $userProgressMapper->fetchOneByUserIdAndSlideId($currentUser->id, $slide->id);
1453
                if($userProgress) {
1454
                    $completed = 0;
1455
                } else {
1456
                    $completed = 0;
1457
                }
1458
 
1459
 
1460
 
1461
                array_push($data, [
1462
                    'quiz'          => '',
1463
                    'name'          => $slide->name ? $slide->name : '',
1464
                    'description'   => $slide->description ? $slide->description : '',
1465
                    'type'          => $slide->type,
1466
                    'background'    => $slide->background ? $this->url()->fromRoute('services/storage',['type' => 'microlearning-slide', 'code' => $slide->uuid, 'filename' => $slide->background], ['force_canonical' => true]) : '',
1467
                    'file'          => $slide->file ? $this->url()->fromRoute('services/storage',['type' => 'microlearning-slide', 'code' => $slide->uuid, 'filename' => $slide->file], ['force_canonical' => true]) : '',
1468
                    'order'         => $slide->order,
1469
                    'completed'     => $completed,
161 efrain 1470
                    'link_get'      => $this->url()->fromRoute('microlearning/get-slide', ['id' => $slide->uuid], ['force_canonical' => true]),
119 efrain 1471
                    'added_on'      => $slide->added_on,
1472
                    'updated_on'    => $slide->updated_on,
1473
                ]);
1474
 
1475
 
1476
 
1477
            }
1478
 
1479
            usort($data, function($a, $b) {
1480
 
1481
                $result =  $a['order'] <=> $b['order'];
1482
                if(0 == $result) {
1483
                    $result = strcasecmp($a['added_on'], $b['added_on']);
1484
                    if(0 == $result) {
1485
                        $result = strcasecmp($a['name'], $b['name']);
1486
                    }
1487
                }
1488
 
1489
                if($result < 0) {
1490
                    return 1;
1491
                } else if($result > 0) {
1492
                    return -1;
1493
                } else  {
1494
                    return  0;
1495
                }
1496
            });
1497
 
1498
 
1499
 
1500
                return new JsonModel([
1501
                    'success' => true,
1502
                    'data' => $data
1503
                ]);
1504
 
1505
        } else {
1506
            return new JsonModel([
1507
                'success' => false,
1508
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1509
            ]);
1510
        }
1511
    }
1512
 
161 efrain 1513
 
1514
    public function getSlideAction()
1515
    {
1516
        $request = $this->getRequest();
1517
        if($request->isGet()) {
1518
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1519
            $currentUser = $currentUserPlugin->getUser();
1520
 
1521
 
1522
 
1523
            $id = $this->params()->fromRoute('id');
1524
            $slideMapper = CompanyMicrolearningSlideMapper::getInstance($this->adapter);
1525
            $slide = $slideMapper->fetchOneByUuid($id);
1526
 
1527
            if(!$slide) {
1528
                return new JsonModel([
1529
                    'success' => false,
1530
                    'data' => 'ERROR_SLIDE_NOT_FOUND'
1531
                ]);
1532
            }
1533
 
1534
            $accessGrantedIds = $this->getAccessGranted();
1535
 
1536
 
1537
 
1538
            if(!in_array($slide->capsule_id, $accessGrantedIds->capsules)) {
1539
                return new JsonModel([
1540
                    'success' => false,
1541
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_CAPSULE'
1542
                ]);
1543
            }
1544
 
1545
 
1546
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1547
            $topic = $topicMapper->fetchOne($slide->topic_id);
1548
 
1549
            $capsuleMapper =  CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1550
            $capsule = $capsuleMapper->fetchOne($slide->capsule_id);
1551
 
1552
 
1553
 
1554
 
1555
 
1556
            $slideMapper = CompanyMicrolearningSlideMapper::getInstance($this->adapter);
1557
            $userProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
1558
 
1559
 
1560
            $userProgress = $userProgressMapper->fetchOneByUserIdAndSlideId($currentUser->id, $slide->id);
1561
            if($userProgress) {
1562
                $completed = $userProgress->completed;
1563
            } else {
1564
                $completed = 0;
1565
            }
1566
 
1567
 
1568
 
1569
            $data =[
1570
                'quiz'          => '',
1571
                'name'          => $slide->name ? $slide->name : '',
1572
                'description'   => $slide->description ? $slide->description : '',
1573
                'type'          => $slide->type,
1574
                'background'    => $slide->background ? $this->url()->fromRoute('services/storage',['type' => 'microlearning-slide', 'code' => $slide->uuid, 'filename' => $slide->background], ['force_canonical' => true]) : '',
1575
                'file'          => $slide->file ? $this->url()->fromRoute('services/storage',['type' => 'microlearning-slide', 'code' => $slide->uuid, 'filename' => $slide->file], ['force_canonical' => true]) : '',
1576
                'order'         => $slide->order,
1577
                'completed'     => $completed,
1578
                'added_on'      => $slide->added_on,
1579
                'updated_on'    => $slide->updated_on,
1580
            ];
1581
 
1582
 
1583
 
1584
 
1585
            return new JsonModel([
1586
                'success' => true,
1587
                'data' => $data
1588
            ]);
1589
 
1590
        } else {
1591
            return new JsonModel([
1592
                'success' => false,
1593
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1594
            ]);
1595
        }
1596
    }
1597
 
119 efrain 1598
    public function profileAction()
1599
    {
1600
        $request = $this->getRequest();
1601
        if($request->isGet()) {
1602
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1603
            $currentUser = $currentUserPlugin->getUser();
1604
 
1605
 
1606
            $accessGrantedIds = $this->getAccessGranted();
1607
 
1608
            $companyMapper = CompanyMapper::getInstance($this->adapter);
1609
            $companyExtendUserMapper = CompanyMicrolearningExtendUserMapper::getInstance($this->adapter);
1610
            $companyExtendUserCompanyMapper = CompanyMicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
1611
            $companyExtendUserFunctionMapper = CompanyMicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
1612
            $companyExtendUserGroupMapper = CompanyMicrolearningExtendUserGroupMapper::getInstance($this->adapter);
1613
            $companyExtendUserInstitutionMapper = CompanyMicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
1614
            $companyExtendUserPartnerMapper = CompanyMicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
1615
            $companyExtendUserProgramMapper = CompanyMicrolearningExtendUserProgramMapper::getInstance($this->adapter);
1616
            $companyExtendUserStudentTypeMapper = CompanyMicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
1617
            $companyExtendUserSectorMapper = CompanyMicrolearningExtendUserSectorMapper::getInstance($this->adapter);
1618
 
1619
 
1620
            $data = [];
1621
            foreach($accessGrantedIds->companies as $company_id)
1622
            {
1623
                $company = $companyMapper->fetchOne($company_id);
1624
                if(!$company) {
1625
                    continue;
1626
                }
1627
 
1628
                $record = [
1629
                    'name' => $company->name,
1630
                    'image' => $this->url()->fromRoute('services/storage',['type' => 'company', 'code' => $company->uuid, 'filename' => $company->image], ['force_canonical' => true]),
1631
                    'details' => [],
1632
                ];
1633
 
1634
                $companyExtendUser = $companyExtendUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
1635
                if(!$companyExtendUser) {
1636
                    continue;
1637
                }
1638
 
1639
                if($companyExtendUser->extend_company_id) {
1640
 
1641
                    $extendedCompany = $companyExtendUserCompanyMapper->fetchOne($companyExtendUser->company_id);
1642
                    if($extendedCompany) {
1643
                        array_push($record['details'],[
1644
                            'uuid' => $extendedCompany->uuid,
1645
                            'label' => 'LABEL_COMPANY',
1646
                            'value' => $extendedCompany->name
1647
                        ]);
1648
                    }
1649
                }
1650
 
1651
                if($companyExtendUser->extend_function_id) {
1652
                    $extendedFunction = $companyExtendUserFunctionMapper->fetchOne($companyExtendUser->extend_function_id);
1653
                    if($extendedFunction) {
1654
                        array_push($record['details'],[
1655
                            'uuid' => $extendedFunction->uuid,
1656
                            'label' => 'LABEL_FUNCTION',
1657
                            'value' => $extendedFunction->name
1658
                        ]);
1659
                    }
1660
                }
1661
 
1662
                if($companyExtendUser->extend_group_id) {
1663
                    $extendedGroup = $companyExtendUserGroupMapper->fetchOne($companyExtendUser->extend_group_id);
1664
                    if($extendedGroup) {
1665
                        array_push($record['details'],[
1666
                            'uuid' => $extendedGroup->uuid,
1667
                            'label' => 'LABEL_GROUP',
1668
                            'value' => $extendedGroup->name
1669
                        ]);
1670
                    }
1671
                }
1672
 
1673
                if($companyExtendUser->extend_institution_id) {
1674
                    $extendedInstitution= $companyExtendUserInstitutionMapper->fetchOne($companyExtendUser->extend_institution_id);
1675
                    if($extendedInstitution) {
1676
                        array_push($record['details'],[
1677
                            'uuid' => $extendedInstitution->uuid,
1678
                            'label' => 'LABEL_INSTITUTION',
1679
                            'value' => $extendedInstitution->name
1680
                        ]);
1681
                    }
1682
                }
1683
 
1684
                if($companyExtendUser->extend_program_id) {
1685
                    $extendedProgram = $companyExtendUserProgramMapper->fetchOne($companyExtendUser->extend_program_id);
1686
                    if($extendedProgram) {
1687
                        array_push($record['details'],[
1688
                            'uuid' => $extendedProgram->uuid,
1689
                            'label' => 'LABEL_PROGRAM',
1690
                            'value' => $extendedProgram->name
1691
                        ]);
1692
 
1693
                    }
1694
                }
1695
 
1696
                if($companyExtendUser->extend_sector_id) {
1697
                    $extendedSector = $companyExtendUserSectorMapper->fetchOne($companyExtendUser->extend_sector_id);
1698
                    if($extendedSector) {
1699
                        array_push($record['details'],[
1700
                            'uuid' => $extendedSector->uuid,
1701
                            'label' => 'LABEL_SECTOR',
1702
                            'value' => $extendedSector->name
1703
                        ]);
1704
                    }
1705
                }
1706
 
1707
                if($companyExtendUser->extend_partner_id) {
1708
                    $extendedPartner = $companyExtendUserPartnerMapper->fetchOne($companyExtendUser->extend_partner_id);
1709
                    if($extendedPartner) {
1710
                        array_push($record['details'],[
1711
                            'uuid' => $extendedPartner->uuid,
1712
                            'label' => 'LABEL_PARTNER',
1713
                            'value' => $extendedPartner->name
1714
                        ]);
1715
                    }
1716
                }
1717
 
1718
                if($companyExtendUser->extend_student_type_id) {
1719
                    $extendedStudentType = $companyExtendUserStudentTypeMapper->fetchOne($companyExtendUser->extend_student_type_id);
1720
                    if($extendedStudentType) {
1721
                        array_push($record['details'],[
1722
                            'uuid' => $extendedStudentType->uuid,
1723
                            'label' => 'LABEL_TYPE',
1724
                            'value' => $extendedStudentType->name
1725
                        ]);
1726
                    }
1727
                }
1728
 
1729
                array_push($data, $record);
1730
            }
1731
 
1732
            return new JsonModel([
1733
                'success' => true,
1734
                'data' => $data
1735
            ]);
1736
 
1737
        } else {
1738
            return new JsonModel([
1739
                'success' => false,
1740
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1741
            ]);
1742
        }
1743
    }
1744
 
1745
 
1746
    /**
1747
     *
1748
     * @return \LeadersLinked\Controller\MicrolearningUserAccessGrantedIds
1749
     */
1750
    private function getAccessGranted()
1751
    {
1752
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1753
        $currentUser = $currentUserPlugin->getUser();
1754
 
1755
        $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
1756
        $now = $capsuleUserMapper->getDatebaseNow();
1757
 
1758
        $records = $capsuleUserMapper->fetchAllActiveByUserId($currentUser->id);
1759
 
1760
        $accessGrantedIds = new MicrolearningUserAccessGrantedIds();
1761
 
1762
 
1763
        foreach($records as $record)
1764
        {
1765
            if($record->access != CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED && $record->access != CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD) {
1766
                continue;
1767
            }
1768
            if($record->access == CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD) {
1769
                if($now < $record->paid_from || $now > $record->paid_to) {
1770
                    continue;
1771
                }
1772
            }
1773
 
1774
 
1775
            if(!in_array($record->company_id, $accessGrantedIds->companies )) {
1776
                array_push($accessGrantedIds->companies, $record->company_id);
1777
            }
1778
 
1779
            if(!in_array($record->topic_id, $accessGrantedIds->topics )) {
1780
                array_push( $accessGrantedIds->topics, $record->topic_id);
1781
            }
1782
 
1783
            if(!in_array($record->capsule_id, $accessGrantedIds->capsules)) {
1784
                array_push( $accessGrantedIds->capsules, $record->capsule_id);
1785
            }
1786
        }
1787
 
1788
        return $accessGrantedIds;
1789
    }
1790
 
1791
 
1792
}