Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 187 | Rev 2126 | 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 Laminas\Log\LoggerInterface;
10
use Laminas\View\Model\ViewModel;
11
use Laminas\View\Model\JsonModel;
12
use LeadersLinked\Form\ExtendUserMicrolearningForm;
13
use LeadersLinked\Mapper\QueryMapper;
14
use LeadersLinked\Mapper\UserMapper;
15
use Laminas\Db\Sql\Expression;
16
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;
17
use LeadersLinked\Model\CompanyMicrolearningCapsuleUser;
18
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleMapper;
19
use LeadersLinked\Mapper\CompanyMicrolearningUserProgressMapper;
20
use LeadersLinked\Mapper\CompanyMicrolearningSlideMapper;
21
use LeadersLinked\Mapper\CompanyMicrolearningUserLogMapper;
22
use Google\Service\Classroom\Student;
23
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserCompanyMapper;
24
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserFunctionMapper;
25
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserGroupMapper;
26
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserInstitutionMapper;
27
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserProgramMapper;
28
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserPartnerMapper;
29
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserSectorMapper;
30
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserStudentTypeMapper;
31
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserMapper;
187 efrain 32
use LeadersLinked\Mapper\CompanyMicrolearningTopicMapper;
2 efrain 33
use LeadersLinked\Mapper\DeviceMapper;
34
use LeadersLinked\Model\Application;
129 efrain 35
use LeadersLinked\Mapper\CompanyMicrolearningUserMapper;
36
use LeadersLinked\Model\CompanyMicrolearningExtendUser;
187 efrain 37
use LeadersLinked\Form\TopicCapsuleForm;
38
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleCommentMapper;
39
use Laminas\Hydrator\ArraySerializableHydrator;
40
use Laminas\Db\ResultSet\HydratingResultSet;
41
use Laminas\Paginator\Adapter\DbSelect;
42
use Laminas\Paginator\Paginator;
1 www 43
 
44
 
45
class MicrolearningReportsController extends AbstractActionController
46
{
47
    /**
48
     *
49
     * @var AdapterInterface
50
     */
51
    private $adapter;
52
 
53
 
54
    /**
55
     *
56
     * @var AbstractAdapter
57
     */
58
    private $cache;
59
 
60
    /**
61
     *
62
     * @var  LoggerInterface
63
     */
64
    private $logger;
65
 
66
 
67
    /**
68
     *
69
     * @param AdapterInterface $adapter
70
     * @param AbstractAdapter $cache
71
     * @param LoggerInterface $logger
72
     * @param array $config
73
     */
74
    public function __construct($adapter, $cache , $logger, $config)
75
    {
76
        $this->adapter      = $adapter;
77
        $this->cache        = $cache;
78
        $this->logger       = $logger;
79
        $this->config       = $config;
80
 
81
 
82
    }
83
 
2 efrain 84
 
85
    public function indexAction()
86
    {
87
 
88
        $this->layout()->setTemplate('layout/layout-backend.phtml');
89
        $viewModel = new ViewModel();
90
        $viewModel->setTemplate('leaders-linked/microlearning-reports/index.phtml');
91
        return $viewModel ;
92
    }
93
 
1 www 94
 
95
    public function overviewAction()
96
    {
97
 
98
 
99
        $currentUserPlugin = $this->plugin('currentUserPlugin');
100
        $currentUser = $currentUserPlugin->getUser();
101
        $currentCompany = $currentUserPlugin->getCompany();
102
 
103
 
104
        $request = $this->getRequest();
105
        if($request->isGet()) {
106
            $reportsLastWeek = [];
107
            $reportsCapsuleResume = [];
108
            $reportsStudentsTotal = [];
109
 
110
            $companyMicrolearningExtendUserCompanyMapper = CompanyMicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
111
            $extendCompanies = $companyMicrolearningExtendUserCompanyMapper->fetchAllByCompanyId($currentCompany->id);
112
 
113
            foreach($extendCompanies as $extendCompany)
114
            {
115
                $reportsLastWeek['companies'][$extendCompany->id] = [
116
                    'name' => $extendCompany->name,
117
                    'total' => 0,
118
                    'value' => 0
119
                ] ;
120
 
121
                $reportsCapsuleResume['companies'][$extendCompany->id] = [
122
                    'name' => $extendCompany->name,
123
                    'total' => 0,
124
                    'value' => 0
125
                ] ;
126
 
127
                $reportsStudentsTotal['companies'][$extendCompany->id] = [
128
                    'name' => $extendCompany->name,
129
                    'total' => 0,
130
                ] ;
131
            }
132
 
133
 
134
            $companyMicrolearningExtendUserFunctionMapper = CompanyMicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
135
            $extendFunctions = $companyMicrolearningExtendUserFunctionMapper->fetchAllByCompanyId($currentCompany->id);
136
 
137
            foreach($extendFunctions as $extendFunction)
138
            {
139
                $reportsLastWeek['functions'][$extendFunction->id] = [
140
                    'name' => $extendFunction->name,
141
                    'total' => 0,
142
                    'value' => 0
143
                ] ;
144
 
145
                $reportsCapsuleResume['functions'][$extendFunction->id] = [
146
                    'name' => $extendFunction->name,
147
                    'total' => 0,
148
                    'value' => 0
149
                ] ;
150
 
151
                $reportsStudentsTotal['functions'][$extendFunction->id] = [
152
                    'name' => $extendFunction->name,
153
                    'total' => 0,
154
                ] ;
155
            }
156
 
157
            $companyMicrolearningExtendUserGroupMapper = CompanyMicrolearningExtendUserGroupMapper::getInstance($this->adapter);
158
            $extendGroups = $companyMicrolearningExtendUserGroupMapper->fetchAllByCompanyId($currentCompany->id);
159
 
160
            foreach($extendGroups as $extendGroup)
161
            {
162
                $reportsLastWeek['groups'][$extendGroup->id] = [
163
                    'name' => $extendGroup->name,
164
                    'total' => 0,
165
                    'value' => 0
166
                ];
167
 
168
                $reportsCapsuleResume['groups'][$extendGroup->id] = [
169
                    'name' => $extendFunction->name,
170
                    'total' => 0,
171
                    'value' => 0
172
                ] ;
173
 
174
                $reportsStudentsTotal['groups'][$extendGroup->id] = [
175
                    'name' => $extendGroup->name,
176
                    'total' => 0,
177
                ];
178
 
179
 
180
            }
181
 
182
 
183
            $companyMicrolearningExtendUserInstitutionMapper = CompanyMicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
184
            $extendInstitutions = $companyMicrolearningExtendUserInstitutionMapper->fetchAllByCompanyId($currentCompany->id);
185
 
186
            foreach($extendInstitutions as $extendInstitution)
187
            {
188
                $reportsLastWeek['institutions'][$extendInstitution->id] = [
189
                    'name' => $extendInstitution->name,
190
                    'total' => 0,
191
                    'value' => 0
192
                ] ;
193
 
194
                $reportsCapsuleResume['institutions'][$extendInstitution->id] = [
195
                    'name' => $extendInstitution->name,
196
                    'total' => 0,
197
                    'value' => 0
198
                ] ;
199
 
200
                $reportsStudentsTotal['institutions'][$extendInstitution->id] = [
201
                    'name' => $extendInstitution->name,
202
                    'total' => 0,
203
                ] ;
204
            }
205
 
206
 
207
            $companyMicrolearningExtendUserProgramMapper = CompanyMicrolearningExtendUserProgramMapper::getInstance($this->adapter);
208
            $extendPrograms = $companyMicrolearningExtendUserProgramMapper->fetchAllByCompanyId($currentCompany->id);
209
 
210
            foreach($extendPrograms as $extendProgram)
211
            {
212
                $reportsLastWeek['programs'][$extendProgram->id] = [
213
                    'name' => $extendProgram->name,
214
                    'total' => 0,
215
                    'value' => 0
216
                ] ;
217
 
218
                $reportsCapsuleResume['programs'][$extendProgram->id] = [
219
                    'name' => $extendProgram->name,
220
                    'total' => 0,
221
                    'value' => 0
222
                ] ;
223
 
224
                $reportsStudentsTotal['programs'][$extendProgram->id] = [
225
                    'name' => $extendProgram->name,
226
                    'total' => 0,
227
 
228
                ] ;
229
            }
230
 
231
 
232
            $companyMicrolearningExtendUserPartnerMapper = CompanyMicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
233
            $extendPartners = $companyMicrolearningExtendUserPartnerMapper->fetchAllByCompanyId($currentCompany->id);
234
 
235
            foreach($extendPartners as $extendPartner)
236
            {
237
                $reportsLastWeek['partners'][$extendPartner->id] = [
238
                    'name' => $extendPartner->name,
239
                    'total' => 0,
240
                    'value' => 0
241
                ] ;
242
 
243
                $reportsCapsuleResume['partners'][$extendPartner->id] = [
244
                    'name' => $extendPartner->name,
245
                    'total' => 0,
246
                    'value' => 0
247
                ] ;
248
 
249
                $reportsStudentsTotal['partners'][$extendPartner->id] = [
250
                    'name' => $extendPartner->name,
251
                    'total' => 0,
252
                ] ;
253
            }
254
 
255
 
256
            $companyMicrolearningExtendUserSectorMapper = CompanyMicrolearningExtendUserSectorMapper::getInstance($this->adapter);
257
            $extendSectors = $companyMicrolearningExtendUserSectorMapper->fetchAllByCompanyId($currentCompany->id);
258
 
259
            foreach($extendSectors as $extendSector)
260
            {
261
                $reportsLastWeek['sectors'][$extendSector->id] = [
262
                    'name' => $extendSector->name,
263
                    'total' => 0,
264
                    'value' => 0
265
                ] ;
266
 
267
                $reportsCapsuleResume['sectors'][$extendSector->id] = [
268
                    'name' => $extendSector->name,
269
                    'total' => 0,
270
                    'value' => 0
271
                ] ;
272
 
273
                $reportsStudentsTotal['sectors'][$extendSector->id] = [
274
                    'name' => $extendSector->name,
275
                    'total' => 0,
276
                ] ;
277
            }
278
 
279
            $companyMicrolearningExtendUserStudentTypeMapper = CompanyMicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
280
            $extendStudentTypes = $companyMicrolearningExtendUserStudentTypeMapper->fetchAllByCompanyId($currentCompany->id);
281
 
282
            foreach($extendStudentTypes as $extendStudentType)
283
            {
284
                $reportsLastWeek['student_types'][$extendStudentType->id] = [
285
                    'name' => $extendStudentType->name,
286
                    'total' => 0,
287
                    'value' => 0
288
                ] ;
289
 
290
                $reportsCapsuleResume['student_types'][$extendStudentType->id] = [
291
                    'name' => $extendStudentType->name,
292
                    'total' => 0,
293
                    'value' => 0
294
                ] ;
295
 
296
                $reportsStudentsTotal['student_types'][$extendStudentType->id] = [
297
                    'name' => $extendStudentType->name,
298
                    'total' => 0,
299
                ] ;
300
            }
301
 
302
            $companyMicrolearningUserProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
303
 
304
            $minLastWeek = date('Y-m-d', strtotime(' -180 days'));
305
            $maxLastWeek = date('Y-m-d');
306
            $companyMicrolearningUserLogMapper = CompanyMicrolearningUserLogMapper::getInstance($this->adapter);
307
            $companyUsersLogWithActivityLastWeek = $companyMicrolearningUserLogMapper->fetchAllUserIdsLastWeekByCompanyId($currentCompany->id, $minLastWeek, $maxLastWeek);
308
 
309
            //header('Content-type: text/plain');
310
           // print_r($companyUsersLogWithActivityLastWeek);
311
 
312
 
313
 
314
 
315
            $date = date('Y-m-d');
316
 
317
            $companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
318
            $user_ids = $companyMicrolearningCapsuleUserMapper->fetchAllDistinctUserIdActiveByCompanyIdAndDate($currentCompany->id, $date);
319
 
320
            $studentsTotal = count($user_ids);
321
            $studentsStarted = 0;
322
 
323
 
324
            $userIdsWithAllCapsulesCompleted = [];
325
 
326
 
327
            foreach($user_ids as $user_id)
328
            {
329
                $countSlides = $companyMicrolearningUserProgressMapper->fetchCountAllSlideCompletedByCompanyIdAndUserId($currentCompany->id, $user_id);
330
                if($countSlides) {
331
                    $studentsStarted++;
332
                }
333
 
334
                $incompleted = false;
335
 
336
                $capsuleUsers = $companyMicrolearningCapsuleUserMapper->fetchAllActiveByUserId($user_id);
337
                foreach($capsuleUsers as $capsuleUser)
338
                {
339
                    $userProgress = $companyMicrolearningUserProgressMapper->fetchOneByUseridAndCapsuleId($capsuleUser->user_id, $capsuleUser->capsule_id);
340
                    if($userProgress) {
341
                        if(!$userProgress->completed) {
342
                            $incompleted = true;
343
                            break;
344
                        }
345
                    }  else {
346
                        $incompleted = true;
347
                        break;
348
                    }
349
 
350
 
351
 
352
                }
353
 
354
                if(!$incompleted) {
355
                    array_push($userIdsWithAllCapsulesCompleted, $user_id);
356
                }
357
            }
358
 
359
 
360
            $studentsWithoutStarting =  $studentsTotal - $studentsStarted;
361
            $reportsLastWeek['general'] = ['total' => $studentsTotal, 'value' => count($companyUsersLogWithActivityLastWeek) ];
362
 
363
            $reportsCapsuleResume['general'] = ['total' => $studentsTotal, 'value' => count($userIdsWithAllCapsulesCompleted) ];
364
 
365
 
366
            $companyMicrolearningExtendUserMapper = CompanyMicrolearningExtendUserMapper::getInstance($this->adapter);
367
            $records = $companyMicrolearningExtendUserMapper->fetchAllByCompanyId($currentCompany->id);
368
            foreach($records as $record)
369
            {
370
 
371
                if($record->extend_company_id) {
372
                    $reportsLastWeek['companies'][$record->extend_company_id]['total'] += 1;
373
                    $reportsStudentsTotal['companies'][$record->extend_company_id]['total'] += 1;
374
 
375
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
376
                        $reportsLastWeek['companies'][$record->extend_company_id]['value'] += 1;
377
                    }
378
 
379
                    $reportsCapsuleResume['companies'][$record->extend_company_id]['total'] += 1;
380
 
381
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
382
                        $reportsCapsuleResume['companies'][$record->extend_company_id]['value'] += 1;
383
                    }
384
 
385
                }
386
 
387
                if($record->extend_function_id) {
388
                    $reportsLastWeek['functions'][$record->extend_function_id]['total'] += 1;
389
                    $reportsStudentsTotal['functions'][$record->extend_function_id]['total'] += 1;
390
 
391
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
392
                        $reportsLastWeek['functions'][$record->extend_function_id]['value'] += 1;
393
                    }
394
 
395
                    $reportsCapsuleResume['functions'][$record->extend_function_id]['total'] += 1;
396
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
397
                        $reportsCapsuleResume['functions'][$record->extend_function_id]['value'] += 1;
398
                    }
399
                }
400
 
401
                if($record->extend_group_id) {
402
                    $reportsLastWeek['groups'][$record->extend_group_id]['total'] += 1;
403
                    $reportsStudentsTotal['groups'][$record->extend_group_id]['total'] += 1;
404
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
405
                        $reportsLastWeek['groups'][$record->extend_group_id]['value'] += 1;
406
                    }
407
 
408
                    $reportsCapsuleResume['groups'][$record->extend_group_id]['total'] += 1;
409
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
410
                        $reportsCapsuleResume['groups'][$record->extend_group_id]['value'] += 1;
411
                    }
412
                }
413
 
414
                if($record->extend_institution_id) {
415
                    $reportsLastWeek['institutions'][$record->extend_institution_id]['total'] += 1;
416
                    $reportsStudentsTotal['institutions'][$record->extend_institution_id]['total'] += 1;
417
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
418
                        $reportsLastWeek['institutions'][$record->extend_institution_id]['value'] += 1;
419
                    }
420
 
421
                    $reportsCapsuleResume['institutions'][$record->extend_institution_id]['total'] += 1;
422
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
423
                        $reportsCapsuleResume['institutions'][$record->extend_institution_id]['value'] += 1;
424
                    }
425
                }
426
 
427
                if($record->extend_program_id) {
428
                    $reportsLastWeek['programs'][$record->extend_program_id]['total'] += 1;
429
                    $reportsStudentsTotal['programs'][$record->extend_program_id]['total'] += 1;
430
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
431
                        $reportsLastWeek['programs'][$record->extend_program_id]['value'] += 1;
432
                    }
433
 
434
                    $reportsCapsuleResume['programs'][$record->extend_program_id]['total'] += 1;
435
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
436
                        $reportsCapsuleResume['programs'][$record->extend_program_id]['value'] += 1;
437
                    }
438
                }
439
 
440
                if($record->extend_partner_id) {
441
                    $reportsLastWeek['partners'][$record->extend_partner_id]['total'] += 1;
442
                    $reportsStudentsTotal['partners'][$record->extend_partner_id]['total'] += 1;
443
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
444
                        $reportsLastWeek['partners'][$record->extend_partner_id]['value'] += 1;
445
                    }
446
 
447
                    $reportsCapsuleResume['partners'][$record->extend_partner_id]['total'] += 1;
448
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
449
                        $reportsCapsuleResume['partners'][$record->extend_partner_id]['value'] += 1;
450
                    }
451
                }
452
 
453
                if($record->extend_sector_id) {
454
                    $reportsLastWeek['sectors'][$record->extend_sector_id]['total'] += 1;
455
                    $reportsStudentsTotal['sectors'][$record->extend_sector_id]['total'] += 1;
456
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
457
                        $reportsLastWeek['sectors'][$record->extend_sector_id]['value'] += 1;
458
                    }
459
 
460
                    $reportsCapsuleResume['sectors'][$record->extend_sector_id]['total'] += 1;
461
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
462
                        $reportsCapsuleResume['sectors'][$record->extend_sector_id]['value'] += 1;
463
                    }
464
                }
465
 
466
                if($record->extend_student_type_id) {
467
                    $reportsLastWeek['student_types'][$record->extend_student_type_id]['total'] += 1;
468
                    $reportsStudentsTotal['student_types'][$record->extend_student_type_id]['total'] += 1;
469
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
470
                        $reportsLastWeek['student_types'][$record->extend_student_type_id]['value'] += 1;
471
                    }
472
 
473
                    $reportsCapsuleResume['student_types'][$record->extend_student_type_id]['total'] += 1;
474
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
475
                        $reportsCapsuleResume['student_types'][$record->extend_student_type_id]['value'] += 1;
476
                    }
477
                }
478
            }
479
 
480
 
481
            /*
482
            header('Content-type: text/plain');
483
            print_r($reportsStudentsTotal); exit;
484
            */
485
 
486
 
487
            $this->layout()->setTemplate('layout/layout-backend.phtml');
488
            $viewModel = new ViewModel();
489
            $viewModel->setTemplate('leaders-linked/microlearning-reports/overview.phtml');
490
            $viewModel->setVariables([
491
                'reportsLastWeek'       => $reportsLastWeek,
492
                'reportsCapsuleResume'  => $reportsCapsuleResume,
493
                'reportsStudentsTotal'  => $reportsStudentsTotal,
494
                'reportStudents' => [
495
                    'total' => $studentsTotal,
496
                    'started' => $studentsStarted,
497
                    'withoutStarting' => $studentsWithoutStarting,
498
                ]
499
 
500
            ]);
501
            return $viewModel ;
502
        }
503
 
504
        return new JsonModel([
505
           'success' => false,
506
           'data' => 'ERROR_METHOD_NOT_ALLOWED'
507
        ]);
508
    }
509
 
187 efrain 510
    public function progressForCapsuleAction()
511
    {
512
 
513
    }
514
 
515
 
2 efrain 516
    public function progressAction()
1 www 517
    {
518
 
519
 
520
        $currentUserPlugin = $this->plugin('currentUserPlugin');
521
        $currentUser = $currentUserPlugin->getUser();
522
        $currentCompany = $currentUserPlugin->getCompany();
523
 
524
 
525
        $request = $this->getRequest();
526
        if($request->isGet()) {
527
 
528
 
529
            $headers  = $request->getHeaders();
530
 
531
            $isJson = false;
532
            if($headers->has('Accept')) {
533
                $accept = $headers->get('Accept');
534
 
535
                $prioritized = $accept->getPrioritized();
536
 
537
                foreach($prioritized as $key => $value) {
538
                    $raw = trim($value->getRaw());
539
 
540
                    if(!$isJson) {
541
                        $isJson = strpos($raw, 'json');
542
                    }
543
 
544
                }
545
            }
546
 
187 efrain 547
 
548
 
1 www 549
            if($isJson) {
483 efrain 550
 
1 www 551
                $queryMapper = QueryMapper::getInstance($this->adapter);
552
 
187 efrain 553
                $selectUsers = $queryMapper->getSql()->select();
554
                $selectUsers->columns(['user_id' => new Expression('DISTINCT(user_id)')]);
555
                $selectUsers->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
556
                $selectUsers->where->equalTo('company_id', $currentCompany->id);
1 www 557
 
187 efrain 558
 
1 www 559
 
187 efrain 560
 
561
 
1 www 562
                $select = $queryMapper->getSql()->select();
563
                $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email']);
187 efrain 564
                $select->from([ 'u' => UserMapper::_TABLE]);
1 www 565
 
566
 
567
 
187 efrain 568
                $select->where->in('u.id', $selectUsers);
483 efrain 569
 
187 efrain 570
                $select->order(['u.first_name', 'u.last_name']);
571
 
572
               // echo $select->getSqlString($this->adapter->platform); exit;
483 efrain 573
 
187 efrain 574
 
575
 
576
 
577
                $companyMicrolearningProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
578
                $companyMicrolearningUserLogMapper = CompanyMicrolearningUserLogMapper::getInstance($this->adapter);
579
 
580
                $companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
581
 
582
               // $companyMicrolearningSlideMapper = CompanyMicrolearningSlideMapper::getInstance($this->adapter);
583
 
584
 
585
 
586
                $students = [];
587
 
1 www 588
                $records = $queryMapper->fetchAll($select);
187 efrain 589
 
590
 
1 www 591
                foreach($records as $record)
592
                {
187 efrain 593
 
594
 
1 www 595
                    $capsules               = $companyMicrolearningCapsuleUserMapper->fetchAllActiveByUserId($record['id']);
187 efrain 596
 
597
 
598
 
1 www 599
                    $totalCapsules          = count($capsules);
600
                    $totalCapsulesStarted   = 0;
601
                    $totalCapsulesCompleted = 0;
602
 
603
 
187 efrain 604
 
605
 
606
 
607
 
608
 
1 www 609
                    foreach($capsules as $capsule)
610
                    {
611
                        $userProgress = $companyMicrolearningProgressMapper->fetchOneByUseridAndCapsuleId($capsule->user_id, $capsule->capsule_id);
187 efrain 612
 
613
 
1 www 614
                        if($userProgress) {
615
                            $totalCapsulesStarted++;
616
                            if($userProgress->completed) {
617
                                $totalCapsulesCompleted++;
187 efrain 618
                            }
1 www 619
                        }
187 efrain 620
 
1 www 621
 
622
 
623
                    }
624
 
187 efrain 625
 
626
 
627
 
628
                    if($totalCapsulesCompleted > 0 && $totalCapsules > 0) {
629
                        $total_capsules_percentaje = intval ( ($totalCapsulesCompleted * 100 ) / $totalCapsules);
630
                    }  else {
631
                        $total_capsules_percentaje = 0;
632
                    }
633
 
1 www 634
 
187 efrain 635
 
1 www 636
                    $student = [
637
                        'uuid' => $record['uuid'],
638
                        'first_name' => $record['first_name'],
639
                        'last_name' => $record['last_name'],
187 efrain 640
                        'email' => $record['email'],
641
 
1 www 642
                        'total_capsules' => $totalCapsules,
187 efrain 643
                        'total_capsules_incomplete' => ( $totalCapsules - $totalCapsulesCompleted ),
1 www 644
                        'total_capsules_started' => $totalCapsulesStarted,
645
                        'total_capsules_completed' => $totalCapsulesCompleted,
187 efrain 646
                        'total_capsules_percentaje' => $total_capsules_percentaje,
647
 
1 www 648
                        'first_date' => '',
649
                        'first_time' => '',
650
                        'last_date' => '',
651
                        'last_time' => '',
652
                    ];
187 efrain 653
 
1 www 654
                    $first_added_on = $companyMicrolearningUserLogMapper->fetchFirstDateByCompanyIdAndUserId($currentCompany->id, $record['id']);
655
                    if($first_added_on) {
656
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $first_added_on);
657
                        if($dt) {
658
                            $student['first_date'] = $dt->format('d/m/Y');
659
                            $student['first_time'] = $dt->format('h:i a');
660
                        }
661
                    }
662
 
663
                    $last_added_on  = $companyMicrolearningUserLogMapper->fetchLastDateByCompanyIdAndUserId($currentCompany->id, $record['id']);
664
                    if($last_added_on) {
665
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $last_added_on);
666
                        if($dt) {
667
                            $student['last_date'] = $dt->format('d/m/Y');
668
                            $student['last_time'] = $dt->format('h:i a');
187 efrain 669
                        }
1 www 670
                    }
187 efrain 671
 
1 www 672
                    array_push($students, $student);
187 efrain 673
 
1 www 674
 
675
 
676
                }
677
 
678
 
187 efrain 679
                //print_r($students);
1 www 680
 
681
 
187 efrain 682
 
1 www 683
                return new JsonModel([
187 efrain 684
                    'success' => true,
1 www 685
                    'data' => $students
686
 
187 efrain 687
                ]);
1 www 688
 
187 efrain 689
            } else {
1 www 690
 
691
 
692
 
693
                $form = new ExtendUserMicrolearningForm($this->adapter, $currentCompany->id);
694
 
695
 
696
                $this->layout()->setTemplate('layout/layout-backend.phtml');
697
                $viewModel = new ViewModel();
483 efrain 698
                $viewModel->setTemplate('leaders-linked/microlearning-reports/progress-for-capsule.phtml');
1 www 699
                $viewModel->setVariables([
700
                    'form' => $form
187 efrain 701
                ]);
1 www 702
                return $viewModel ;
703
            }
704
        }
705
 
706
        return new JsonModel([
707
            'success' => false,
708
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
709
        ]);
710
    }
2 efrain 711
 
187 efrain 712
 
2 efrain 713
    public function devicesAction()
714
    {
715
 
716
 
717
        $currentUserPlugin = $this->plugin('currentUserPlugin');
718
        $currentUser = $currentUserPlugin->getUser();
719
        $currentCompany = $currentUserPlugin->getCompany();
720
 
721
 
722
        $request = $this->getRequest();
723
        if($request->isGet()) {
724
 
725
 
726
            $headers  = $request->getHeaders();
727
 
728
            $isJson = false;
729
            if($headers->has('Accept')) {
730
                $accept = $headers->get('Accept');
731
 
732
                $prioritized = $accept->getPrioritized();
733
 
734
                foreach($prioritized as $key => $value) {
735
                    $raw = trim($value->getRaw());
736
 
737
                    if(!$isJson) {
738
                        $isJson = strpos($raw, 'json');
739
                    }
740
 
741
                }
742
            }
743
 
744
            if($isJson) {
745
 
129 efrain 746
 
747
                $company_id = filter_var($this->params()->fromQuery('company_id', ''), FILTER_SANITIZE_STRING);
748
                $function_id = filter_var($this->params()->fromQuery('function_id', ''), FILTER_SANITIZE_STRING);
749
                $group_id = filter_var($this->params()->fromQuery('group_id', ''), FILTER_SANITIZE_STRING);
750
                $institution_id = filter_var($this->params()->fromQuery('institution_id', ''), FILTER_SANITIZE_STRING);
751
                $program_id = filter_var($this->params()->fromQuery('program_id', ''), FILTER_SANITIZE_STRING);
752
                $partner_id = filter_var($this->params()->fromQuery('partner_id', ''), FILTER_SANITIZE_STRING);
753
                $sector_id = filter_var($this->params()->fromQuery('sector_id', ''), FILTER_SANITIZE_STRING);
754
                $student_type_id = filter_var($this->params()->fromQuery('student_type_id', ''), FILTER_SANITIZE_STRING);
755
 
756
 
757
                if($company_id) {
758
                    $extendUserCompanyMapper = CompanyMicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
759
                    $extendUserCompany = $extendUserCompanyMapper->fetchOneByUuid($company_id);
760
 
761
                    if($extendUserCompany) {
762
                        $company_id = $extendUserCompany->id;
763
                    } else {
764
                        $company_id = 0;
765
                    }
766
                }
767
 
768
                if($function_id) {
769
                    $extendUserFunctionMapper = CompanyMicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
770
                    $extendUserFunction = $extendUserFunctionMapper->fetchOneByUuid($function_id);
771
 
772
                    if($extendUserFunction) {
773
                        $function_id = $extendUserFunction->id;
774
                    } else {
775
                        $function_id = 0;
776
                    }
777
                }
778
 
779
                if($group_id) {
780
                    $extendUserGroupMapper = CompanyMicrolearningExtendUserGroupMapper::getInstance($this->adapter);
781
                    $extendUserGroup = $extendUserGroupMapper->fetchOneByUuid($group_id);
782
 
783
                    if($extendUserGroup) {
784
                        $group_id = $extendUserGroup->id;
785
                    } else {
786
                        $group_id = 0;
787
                    }
788
                }
789
 
790
                if($institution_id) {
791
                    $extendUserInstitutionMapper = CompanyMicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
792
                    $extendUserInstitution = $extendUserInstitutionMapper->fetchOneByUuid($institution_id);
793
                    if($extendUserInstitution) {
794
                        $institution_id = $extendUserInstitution->id;
795
                    } else {
796
                        $institution_id = 0;
797
                    }
798
                }
799
 
800
                if($program_id) {
801
                    $extendUserProgramMapper = CompanyMicrolearningExtendUserProgramMapper::getInstance($this->adapter);
802
                    $extendUserProgram = $extendUserProgramMapper->fetchOneByUuid($program_id);
803
 
804
                    if($extendUserProgram) {
805
                        $program_id = $extendUserProgram->id;
806
                    } else {
807
                        $program_id = 0;
808
                    }
809
 
810
 
811
                }
812
 
813
                if($partner_id) {
814
                    $extendUserPartnerMapper = CompanyMicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
815
                    $extendUserPartner = $extendUserPartnerMapper->fetchOneByUuid($partner_id);
816
                    if($extendUserPartner) {
817
                        $partner_id = $extendUserPartner;
818
                    } else {
819
                        $partner_id = 0;
820
                    }
821
                }
822
 
823
                if($sector_id) {
824
                    $extendUserSectorMapper = CompanyMicrolearningExtendUserSectorMapper::getInstance($this->adapter);
825
                    $extendUserSector = $extendUserSectorMapper->fetchOneByUuid($sector_id);
826
                    if($extendUserSector) {
827
                        $sector_id = $extendUserSector->id;
828
                    } else {
829
                        $sector_id = 0;
830
                    }
831
                }
832
 
833
                if($student_type_id) {
834
                    $extendUserStudentTypeMapper = CompanyMicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
835
                    $extendUserStudentType = $extendUserStudentTypeMapper->fetchOneByUuid($student_type_id);
836
 
837
                    if($extendUserStudentType) {
838
                        $student_type_id = $extendUserStudentType->id;
839
                    } else {
840
                        $student_type_id = 0;
841
                    }
842
                }
843
 
844
 
845
 
846
                /*
847
                echo 'company_id 1 =  '. $company_id . PHP_EOL;
848
                echo 'function_id 1 =  '. $function_id . PHP_EOL;
849
                echo 'group_id 1 =  '. $group_id . PHP_EOL;
850
                echo 'institution_id 1 =  '. $institution_id . PHP_EOL;
851
                echo 'program_id 1 =  '. $program_id . PHP_EOL;
852
                echo 'partner_id 1 =  '. $partner_id . PHP_EOL;
853
                echo 'sector_id 1 =  '. $sector_id . PHP_EOL;
854
                echo 'student_type_id 1 =  '. $student_type_id . PHP_EOL;
855
                exit;
856
                */
857
 
858
 
2 efrain 859
                $date = date('Y-m-d');
860
                $deviceMapper = DeviceMapper::getInstance($this->adapter);
861
 
862
 
863
                $queryMapper = QueryMapper::getInstance($this->adapter);
864
 
865
                $selectCapsuleUser = $queryMapper->getSql()->select();
866
                $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
867
                $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
868
                $selectCapsuleUser->where->equalTo('company_id', $currentCompany->id);
869
                $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
870
                ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
871
                ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
872
                ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
873
 
874
                //echo $select->getSqlString($this->adapter->platform); exit;
875
 
876
                $select = $queryMapper->getSql()->select();
877
                $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email']);
129 efrain 878
                $select->from([ 'u' => UserMapper::_TABLE]);
879
                if( $company_id || $function_id  || $group_id || $institution_id || $program_id || $partner_id ||  $sector_id || $student_type_id ) {
880
 
187 efrain 881
                    $select->join(['e' => CompanyMicrolearningExtendUserMapper::_TABLE], 'e.user_id = u.id', []);
129 efrain 882
 
883
                }
2 efrain 884
 
129 efrain 885
                $select->where->in('u.id', $selectCapsuleUser);
886
                if($company_id) {
887
                    $select->where->equalTo('e.extend_company_id', $company_id);
888
                }
2 efrain 889
 
129 efrain 890
                if($function_id) {
891
                    $select->where->equalTo('e.extend_function_id', $function_id);
892
 
893
                }
894
                if($group_id) {
895
                    $select->where->equalTo('e.extend_group_id', $group_id);
896
                }
2 efrain 897
 
129 efrain 898
                if($institution_id) {
899
                    $select->where->equalTo('e.extend_institution_id', $institution_id);
900
                }
901
 
902
                if($program_id) {
903
                    $select->where->equalTo('e.extend_program_id', $program_id);
904
                }
905
 
906
                if($partner_id) {
907
                    $select->where->equalTo('e.extend_partner_id', $partner_id);
908
                }
909
 
910
                if($sector_id) {
911
                    $select->where->equalTo('e.extend_sector_id', $sector_id);
912
                }
913
 
914
                if($student_type_id) {
915
                    $select->where->equalTo('e.extend_student_type_id', $student_type_id);
916
                }
917
                $select->order(['u.first_name', 'u.last_name']);
918
 
919
 
920
 
2 efrain 921
                $students = [];
922
                $records = $queryMapper->fetchAll($select);
923
                foreach($records as $record)
924
                {
925
 
926
 
927
                    $record_devices = $deviceMapper->fetchAllByUserId($record['id']);
928
 
929
                    $devices = [];
930
                    foreach($record_devices as $device)
931
                    {
932
                        /*if($device->application_id != Application::LEADERSLINKED) {
933
                            continue;
934
                        }*/
935
 
936
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $device->updated_on);
937
 
938
                        array_push($devices, [
939
                            'brand' => $device->brand,
940
                            'manufacturer' => $device->manufacturer,
941
                            'model' => $device->model,
942
                            'platform' => $device->platform,
943
                            'version' => $device->version,
944
                            'token' => $device->token ? 'LABEL_YES' : 'LABEL_NO',
945
                            'updated_on' => $dt->format('d/m/Y h:i a')
946
                        ]);
947
                    }
948
 
187 efrain 949
                    if(empty($devices)) {
950
                        continue;
951
 
952
                    }
953
 
2 efrain 954
 
955
                    $student = [
956
                        'uuid' => $record['uuid'],
957
                        'first_name' => $record['first_name'],
958
                        'last_name' => $record['last_name'],
959
                        'email' => $record['email'],
960
                        'devices' => $devices
961
                    ];
962
 
963
                    array_push($students, $student);
964
 
965
 
966
                }
967
 
968
 
969
 
970
 
971
                return new JsonModel([
972
                    'success' => true,
129 efrain 973
                    'data' => $students,
974
                    'sql' => $select->getSqlString($this->adapter->platform),
2 efrain 975
 
976
                ]);
977
 
978
            } else {
979
 
980
 
981
 
982
                $form = new ExtendUserMicrolearningForm($this->adapter, $currentCompany->id);
983
 
984
 
985
                $this->layout()->setTemplate('layout/layout-backend.phtml');
986
                $viewModel = new ViewModel();
987
                $viewModel->setTemplate('leaders-linked/microlearning-reports/devices.phtml');
988
                $viewModel->setVariables([
989
                    'form' => $form
990
                ]);
991
                return $viewModel ;
992
            }
993
        }
994
 
995
        return new JsonModel([
996
            'success' => false,
997
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
998
        ]);
999
    }
187 efrain 1000
 
1001
 
1002
    public function comentsForCapsulesAction()
1003
    {
1004
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1005
        $currentUser = $currentUserPlugin->getUser();
1006
        $currentCompany = $currentUserPlugin->getCompany();
1007
 
1008
        $request = $this->getRequest();
1009
 
1010
        if($request->isGet())
1011
        {
1012
 
1013
            $headers  = $request->getHeaders();
1014
 
1015
            $isJson = false;
1016
            if($headers->has('Accept')) {
1017
                $accept = $headers->get('Accept');
1018
 
1019
                $prioritized = $accept->getPrioritized();
1020
 
1021
                foreach($prioritized as $key => $value) {
1022
                    $raw = trim($value->getRaw());
1023
 
1024
                    if(!$isJson) {
1025
                        $isJson = strpos($raw, 'json');
1026
                    }
1027
 
1028
                }
1029
            }
1030
 
1031
            if($isJson) {
1032
                $topic_uuid     = filter_var($this->params()->fromQuery('topic_uuid'), FILTER_SANITIZE_STRING);
1033
                $capsule_uuid   = filter_var($this->params()->fromQuery('capsule_uuid'), FILTER_SANITIZE_STRING);
1034
 
1035
                $data = [
1036
                    'items' => [] ,
1037
                    'total' => 0,
1038
 
1039
                ];
1040
 
1041
 
1042
                if(!$topic_uuid) {
1043
                    return new JsonModel([
1044
                        'success' => true,
1045
                        'data' => $data
1046
                    ]);
1047
 
1048
                }
1049
 
1050
 
1051
                $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1052
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
1053
                if(!$topic) {
1054
                    return new JsonModel([
1055
                        'success' => true,
1056
                        'data' => 'ERROR_TOPIC_NOT_FOUND'
1057
                    ]);
1058
                }
1059
 
1060
                if($topic->company_id != $currentCompany->id) {
1061
                    return new JsonModel([
1062
                        'success' => true,
1063
                        'data' => 'ERROR_UNAUTHORIZED'
1064
                    ]);
1065
                }
1066
 
1067
 
1068
 
1069
                if(!$capsule_uuid) {
1070
                    $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1071
                    $records = $capsuleMapper->fetchAllByCompanyIdAndTopicId($topic->company_id, $topic->id);
1072
 
1073
                    $capsules = [];
1074
                    foreach($records as $record)
1075
                    {
1076
                        if(!$capsule_uuid) {
1077
                            $capsule_uuid = $record->uuid;
1078
                        }
1079
 
1080
                        $capsules[ $record->uuid ] = $record->name;
1081
                    }
1082
 
1083
                    $data['capsules']  = $capsules;
1084
                }
1085
 
1086
                if(!$capsule_uuid) {
1087
                    return new JsonModel([
1088
                        'success' => true,
1089
                        'data' => $data
1090
                    ]);
1091
 
1092
                }
1093
 
1094
                $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1095
                $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
1096
 
1097
 
1098
 
1099
                if(!$capsule) {
1100
                    return new JsonModel([
1101
                        'success' => true,
1102
                        'data' => 'ERROR_CAPSULE_NOT_FOUND'
1103
                    ]);
1104
                }
1105
 
1106
                if($capsule->topic_id != $topic->id) {
1107
                    return new JsonModel([
1108
                        'success' => true,
1109
                        'data' => 'ERROR_UNAUTHORIZED'
1110
                    ]);
1111
                }
1112
 
1113
 
1114
                $search = $this->params()->fromQuery('search', []);
1115
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
1116
 
1117
                $page               = intval($this->params()->fromQuery('start', 1), 10);
1118
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
1119
                $order =  $this->params()->fromQuery('order', []);
1120
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
1121
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
1122
 
1123
                $fields =  ['uuid', 'first_name', 'last_name', 'email', 'rating', 'comment', 'added_on'];
1124
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'added_on';
1125
 
1126
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
1127
                    $order_direction = 'DESC';
1128
                }
1129
 
1130
 
1131
                $queryMapper = QueryMapper::getInstance($this->adapter);
1132
                $sql = $queryMapper->getSql();
1133
                $select = $sql->select();
1134
                $select->columns(['access', 'paid_from', 'paid_to', 'added_on', 'updated_on']);
1135
                $select->from(['tb1' => CompanyMicrolearningCapsuleCommentMapper::_TABLE] );
1136
                $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
1137
                $select->where->equalTo('tb1.company_id', $capsule->company_id);
1138
                $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
1139
                $select->where->equalTo('tb1.capsule_id', $capsule->id);
1140
 
1141
                if($search) {
1142
                    $select->where->nest()
1143
                    ->like('first_name', '%' . $search . '%')
1144
                    ->or->like('last_name', '%' . $search . '%')
1145
                    ->or->like('email', '%' . $search . '%')
1146
                    ->unnest();
1147
 
1148
                }
1149
 
1150
 
1151
                $select->order($order_field . ' ' . $order_direction);
1152
 
1153
                $hydrator   = new ArraySerializableHydrator();
1154
                $resultset  = new HydratingResultSet($hydrator);
1155
 
1156
                $adapter = new DbSelect($select, $sql, $resultset);
1157
                $paginator = new Paginator($adapter);
1158
                $paginator->setItemCountPerPage($records_x_page);
1159
                $paginator->setCurrentPageNumber($page);
1160
 
1161
 
1162
                $items = [ ];
1163
                $records = $paginator->getCurrentItems();
1164
                foreach($records as $record)
1165
                {
1166
 
1167
 
1168
 
1169
                    $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
1170
                    $added_on = $dt_added_on->format('d/m/Y h:i a');
1171
 
1172
 
1173
                    $item = [
1174
                        'uuid' => $record['uuid'],
1175
                        'first_name' => $record['first_name'],
1176
                        'last_name' => $record['last_name'],
1177
                        'email' => $record['email'],
1178
                        'rating' => $record['rating'],
1179
                        'text' => $record['text'],
1180
                        'added_on' => $added_on,
1181
                    ];
1182
 
1183
 
1184
                    array_push($items, $item);
1185
 
1186
 
1187
                }
1188
 
1189
                $data['items'] = $items;
1190
                $data['total'] = $paginator->getTotalItemCount();
1191
 
1192
 
1193
                return new JsonModel([
1194
                    'success' => true,
1195
                    'data' => $data
1196
                ]);
1197
            } else {
1198
                $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1199
                $topics = $topicMapper->fetchAllByCompanyId($currentCompany->id);
1200
 
1201
                if($topics) {
1202
                    $topic_id = $topics[0]->id;
1203
                }  else {
1204
                    $topic_id = 0;
1205
                }
1206
 
1207
 
1208
                $form = new TopicCapsuleForm($this->adapter, $currentCompany->id, $topic_id);
1209
 
1210
 
1211
 
1212
                $this->layout()->setTemplate('layout/layout-backend');
1213
                $viewModel = new ViewModel();
1214
                $viewModel->setTemplate('leaders-linked/microlearning-reports/comments-for-capsule.phtml');
1215
                $viewModel->setVariables([
1216
                    'form' => $form,
1217
                ]);
1218
 
1219
                return $viewModel ;
1220
            }
1221
 
1222
        } else {
1223
            return new JsonModel([
1224
                'success' => false,
1225
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1226
            ]);
1227
        }
1228
    }
1229
 
1230
 
1231
 
483 efrain 1232
    public function progressForCapsulesAction()
1233
    {
1234
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1235
        $currentUser = $currentUserPlugin->getUser();
1236
        $currentCompany = $currentUserPlugin->getCompany();
1237
 
1238
        $request = $this->getRequest();
1239
 
1240
        if($request->isGet())
1241
        {
1242
 
1243
            $headers  = $request->getHeaders();
1244
 
1245
            $isJson = false;
1246
            if($headers->has('Accept')) {
1247
                $accept = $headers->get('Accept');
1248
 
1249
                $prioritized = $accept->getPrioritized();
1250
 
1251
                foreach($prioritized as $key => $value) {
1252
                    $raw = trim($value->getRaw());
1253
 
1254
                    if(!$isJson) {
1255
                        $isJson = strpos($raw, 'json');
1256
                    }
1257
 
1258
                }
1259
            }
1260
 
1261
            if($isJson) {
1262
                $topic_uuid     = filter_var($this->params()->fromQuery('topic_uuid'), FILTER_SANITIZE_STRING);
1263
                $capsule_uuid   = filter_var($this->params()->fromQuery('capsule_uuid'), FILTER_SANITIZE_STRING);
1264
 
1265
                $data = [
1266
                    'items' => [] ,
1267
                    'total' => 0,
1268
 
1269
                ];
1270
 
1271
 
1272
                if(!$topic_uuid) {
1273
                    return new JsonModel([
1274
                        'success' => true,
1275
                        'data' => $data
1276
                    ]);
1277
 
1278
                }
1279
 
1280
 
1281
                $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1282
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
1283
                if(!$topic) {
1284
                    return new JsonModel([
1285
                        'success' => true,
1286
                        'data' => 'ERROR_TOPIC_NOT_FOUND'
1287
                    ]);
1288
                }
1289
 
1290
                if($topic->company_id != $currentCompany->id) {
1291
                    return new JsonModel([
1292
                        'success' => true,
1293
                        'data' => 'ERROR_UNAUTHORIZED'
1294
                    ]);
1295
                }
1296
 
1297
 
1298
 
1299
                if(!$capsule_uuid) {
1300
                    $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1301
                    $records = $capsuleMapper->fetchAllByCompanyIdAndTopicId($topic->company_id, $topic->id);
1302
 
1303
                    $capsules = [];
1304
                    foreach($records as $record)
1305
                    {
1306
                        if(!$capsule_uuid) {
1307
                            $capsule_uuid = $record->uuid;
1308
                        }
1309
 
1310
                        $capsules[ $record->uuid ] = $record->name;
1311
                    }
1312
 
1313
                    $data['capsules']  = $capsules;
1314
                }
1315
 
1316
                if(!$capsule_uuid) {
1317
                    return new JsonModel([
1318
                        'success' => true,
1319
                        'data' => $data
1320
                    ]);
1321
 
1322
                }
1323
 
1324
                $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1325
                $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
1326
 
1327
 
1328
 
1329
                if(!$capsule) {
1330
                    return new JsonModel([
1331
                        'success' => true,
1332
                        'data' => 'ERROR_CAPSULE_NOT_FOUND'
1333
                    ]);
1334
                }
1335
 
1336
                if($capsule->topic_id != $topic->id) {
1337
                    return new JsonModel([
1338
                        'success' => true,
1339
                        'data' => 'ERROR_UNAUTHORIZED'
1340
                    ]);
1341
                }
1342
 
1343
 
1344
                $search = $this->params()->fromQuery('search', []);
1345
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
1346
 
1347
                $page               = intval($this->params()->fromQuery('start', 1), 10);
1348
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
1349
                $order =  $this->params()->fromQuery('order', []);
1350
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
1351
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
1352
 
1353
                $fields =  ['uuid', 'first_name', 'last_name', 'email', 'rating', 'comment', 'added_on'];
1354
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'added_on';
1355
 
1356
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
1357
                    $order_direction = 'DESC';
1358
                }
1359
 
1360
 
1361
                $queryMapper = QueryMapper::getInstance($this->adapter);
1362
                $sql = $queryMapper->getSql();
1363
                $select = $sql->select();
1364
                $select->columns(['access', 'paid_from', 'paid_to', 'added_on', 'updated_on']);
1365
                $select->from(['tb1' => CompanyMicrolearningCapsuleCommentMapper::_TABLE] );
1366
                $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
1367
                $select->where->equalTo('tb1.company_id', $capsule->company_id);
1368
                $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
1369
                $select->where->equalTo('tb1.capsule_id', $capsule->id);
1370
 
1371
                if($search) {
1372
                    $select->where->nest()
1373
                    ->like('first_name', '%' . $search . '%')
1374
                    ->or->like('last_name', '%' . $search . '%')
1375
                    ->or->like('email', '%' . $search . '%')
1376
                    ->unnest();
1377
 
1378
                }
1379
 
1380
 
1381
                $select->order($order_field . ' ' . $order_direction);
1382
 
1383
                $hydrator   = new ArraySerializableHydrator();
1384
                $resultset  = new HydratingResultSet($hydrator);
1385
 
1386
                $adapter = new DbSelect($select, $sql, $resultset);
1387
                $paginator = new Paginator($adapter);
1388
                $paginator->setItemCountPerPage($records_x_page);
1389
                $paginator->setCurrentPageNumber($page);
1390
 
1391
 
1392
                $items = [ ];
1393
                $records = $paginator->getCurrentItems();
1394
                foreach($records as $record)
1395
                {
1396
 
1397
 
1398
 
1399
                    $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
1400
                    $added_on = $dt_added_on->format('d/m/Y h:i a');
1401
 
1402
 
1403
                    $item = [
1404
                        'uuid' => $record['uuid'],
1405
                        'first_name' => $record['first_name'],
1406
                        'last_name' => $record['last_name'],
1407
                        'email' => $record['email'],
1408
                        'rating' => $record['rating'],
1409
                        'text' => $record['text'],
1410
                        'added_on' => $added_on,
1411
                    ];
1412
 
1413
 
1414
                    array_push($items, $item);
1415
 
1416
 
1417
                }
1418
 
1419
                $data['items'] = $items;
1420
                $data['total'] = $paginator->getTotalItemCount();
1421
 
1422
 
1423
                return new JsonModel([
1424
                    'success' => true,
1425
                    'data' => $data
1426
                ]);
1427
            } else {
1428
                $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1429
                $topics = $topicMapper->fetchAllByCompanyId($currentCompany->id);
1430
 
1431
                if($topics) {
1432
                    $topic_id = $topics[0]->id;
1433
                }  else {
1434
                    $topic_id = 0;
1435
                }
1436
 
1437
 
1438
                $form = new TopicCapsuleForm($this->adapter, $currentCompany->id, $topic_id);
1439
 
1440
 
1441
 
1442
                $this->layout()->setTemplate('layout/layout-backend');
1443
                $viewModel = new ViewModel();
1444
                $viewModel->setTemplate('leaders-linked/microlearning-reports/comments-for-capsule.phtml');
1445
                $viewModel->setVariables([
1446
                    'form' => $form,
1447
                ]);
1448
 
1449
                return $viewModel ;
1450
            }
1451
 
1452
        } else {
1453
            return new JsonModel([
1454
                'success' => false,
1455
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1456
            ]);
1457
        }
1458
    }
1459
 
1460
 
1461
 
1462
 
1 www 1463
 
1464
}