Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 2 | Rev 187 | 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;
2 efrain 32
use LeadersLinked\Mapper\DeviceMapper;
33
use LeadersLinked\Model\Application;
129 efrain 34
use LeadersLinked\Mapper\CompanyMicrolearningUserMapper;
35
use LeadersLinked\Model\CompanyMicrolearningExtendUser;
1 www 36
 
37
 
38
class MicrolearningReportsController extends AbstractActionController
39
{
40
    /**
41
     *
42
     * @var AdapterInterface
43
     */
44
    private $adapter;
45
 
46
 
47
    /**
48
     *
49
     * @var AbstractAdapter
50
     */
51
    private $cache;
52
 
53
    /**
54
     *
55
     * @var  LoggerInterface
56
     */
57
    private $logger;
58
 
59
 
60
    /**
61
     *
62
     * @param AdapterInterface $adapter
63
     * @param AbstractAdapter $cache
64
     * @param LoggerInterface $logger
65
     * @param array $config
66
     */
67
    public function __construct($adapter, $cache , $logger, $config)
68
    {
69
        $this->adapter      = $adapter;
70
        $this->cache        = $cache;
71
        $this->logger       = $logger;
72
        $this->config       = $config;
73
 
74
 
75
    }
76
 
2 efrain 77
 
78
    public function indexAction()
79
    {
80
 
81
        $this->layout()->setTemplate('layout/layout-backend.phtml');
82
        $viewModel = new ViewModel();
83
        $viewModel->setTemplate('leaders-linked/microlearning-reports/index.phtml');
84
        return $viewModel ;
85
    }
86
 
1 www 87
 
88
    public function overviewAction()
89
    {
90
 
91
 
92
        $currentUserPlugin = $this->plugin('currentUserPlugin');
93
        $currentUser = $currentUserPlugin->getUser();
94
        $currentCompany = $currentUserPlugin->getCompany();
95
 
96
 
97
        $request = $this->getRequest();
98
        if($request->isGet()) {
99
            $reportsLastWeek = [];
100
            $reportsCapsuleResume = [];
101
            $reportsStudentsTotal = [];
102
 
103
            $companyMicrolearningExtendUserCompanyMapper = CompanyMicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
104
            $extendCompanies = $companyMicrolearningExtendUserCompanyMapper->fetchAllByCompanyId($currentCompany->id);
105
 
106
            foreach($extendCompanies as $extendCompany)
107
            {
108
                $reportsLastWeek['companies'][$extendCompany->id] = [
109
                    'name' => $extendCompany->name,
110
                    'total' => 0,
111
                    'value' => 0
112
                ] ;
113
 
114
                $reportsCapsuleResume['companies'][$extendCompany->id] = [
115
                    'name' => $extendCompany->name,
116
                    'total' => 0,
117
                    'value' => 0
118
                ] ;
119
 
120
                $reportsStudentsTotal['companies'][$extendCompany->id] = [
121
                    'name' => $extendCompany->name,
122
                    'total' => 0,
123
                ] ;
124
            }
125
 
126
 
127
            $companyMicrolearningExtendUserFunctionMapper = CompanyMicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
128
            $extendFunctions = $companyMicrolearningExtendUserFunctionMapper->fetchAllByCompanyId($currentCompany->id);
129
 
130
            foreach($extendFunctions as $extendFunction)
131
            {
132
                $reportsLastWeek['functions'][$extendFunction->id] = [
133
                    'name' => $extendFunction->name,
134
                    'total' => 0,
135
                    'value' => 0
136
                ] ;
137
 
138
                $reportsCapsuleResume['functions'][$extendFunction->id] = [
139
                    'name' => $extendFunction->name,
140
                    'total' => 0,
141
                    'value' => 0
142
                ] ;
143
 
144
                $reportsStudentsTotal['functions'][$extendFunction->id] = [
145
                    'name' => $extendFunction->name,
146
                    'total' => 0,
147
                ] ;
148
            }
149
 
150
            $companyMicrolearningExtendUserGroupMapper = CompanyMicrolearningExtendUserGroupMapper::getInstance($this->adapter);
151
            $extendGroups = $companyMicrolearningExtendUserGroupMapper->fetchAllByCompanyId($currentCompany->id);
152
 
153
            foreach($extendGroups as $extendGroup)
154
            {
155
                $reportsLastWeek['groups'][$extendGroup->id] = [
156
                    'name' => $extendGroup->name,
157
                    'total' => 0,
158
                    'value' => 0
159
                ];
160
 
161
                $reportsCapsuleResume['groups'][$extendGroup->id] = [
162
                    'name' => $extendFunction->name,
163
                    'total' => 0,
164
                    'value' => 0
165
                ] ;
166
 
167
                $reportsStudentsTotal['groups'][$extendGroup->id] = [
168
                    'name' => $extendGroup->name,
169
                    'total' => 0,
170
                ];
171
 
172
 
173
            }
174
 
175
 
176
            $companyMicrolearningExtendUserInstitutionMapper = CompanyMicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
177
            $extendInstitutions = $companyMicrolearningExtendUserInstitutionMapper->fetchAllByCompanyId($currentCompany->id);
178
 
179
            foreach($extendInstitutions as $extendInstitution)
180
            {
181
                $reportsLastWeek['institutions'][$extendInstitution->id] = [
182
                    'name' => $extendInstitution->name,
183
                    'total' => 0,
184
                    'value' => 0
185
                ] ;
186
 
187
                $reportsCapsuleResume['institutions'][$extendInstitution->id] = [
188
                    'name' => $extendInstitution->name,
189
                    'total' => 0,
190
                    'value' => 0
191
                ] ;
192
 
193
                $reportsStudentsTotal['institutions'][$extendInstitution->id] = [
194
                    'name' => $extendInstitution->name,
195
                    'total' => 0,
196
                ] ;
197
            }
198
 
199
 
200
            $companyMicrolearningExtendUserProgramMapper = CompanyMicrolearningExtendUserProgramMapper::getInstance($this->adapter);
201
            $extendPrograms = $companyMicrolearningExtendUserProgramMapper->fetchAllByCompanyId($currentCompany->id);
202
 
203
            foreach($extendPrograms as $extendProgram)
204
            {
205
                $reportsLastWeek['programs'][$extendProgram->id] = [
206
                    'name' => $extendProgram->name,
207
                    'total' => 0,
208
                    'value' => 0
209
                ] ;
210
 
211
                $reportsCapsuleResume['programs'][$extendProgram->id] = [
212
                    'name' => $extendProgram->name,
213
                    'total' => 0,
214
                    'value' => 0
215
                ] ;
216
 
217
                $reportsStudentsTotal['programs'][$extendProgram->id] = [
218
                    'name' => $extendProgram->name,
219
                    'total' => 0,
220
 
221
                ] ;
222
            }
223
 
224
 
225
            $companyMicrolearningExtendUserPartnerMapper = CompanyMicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
226
            $extendPartners = $companyMicrolearningExtendUserPartnerMapper->fetchAllByCompanyId($currentCompany->id);
227
 
228
            foreach($extendPartners as $extendPartner)
229
            {
230
                $reportsLastWeek['partners'][$extendPartner->id] = [
231
                    'name' => $extendPartner->name,
232
                    'total' => 0,
233
                    'value' => 0
234
                ] ;
235
 
236
                $reportsCapsuleResume['partners'][$extendPartner->id] = [
237
                    'name' => $extendPartner->name,
238
                    'total' => 0,
239
                    'value' => 0
240
                ] ;
241
 
242
                $reportsStudentsTotal['partners'][$extendPartner->id] = [
243
                    'name' => $extendPartner->name,
244
                    'total' => 0,
245
                ] ;
246
            }
247
 
248
 
249
            $companyMicrolearningExtendUserSectorMapper = CompanyMicrolearningExtendUserSectorMapper::getInstance($this->adapter);
250
            $extendSectors = $companyMicrolearningExtendUserSectorMapper->fetchAllByCompanyId($currentCompany->id);
251
 
252
            foreach($extendSectors as $extendSector)
253
            {
254
                $reportsLastWeek['sectors'][$extendSector->id] = [
255
                    'name' => $extendSector->name,
256
                    'total' => 0,
257
                    'value' => 0
258
                ] ;
259
 
260
                $reportsCapsuleResume['sectors'][$extendSector->id] = [
261
                    'name' => $extendSector->name,
262
                    'total' => 0,
263
                    'value' => 0
264
                ] ;
265
 
266
                $reportsStudentsTotal['sectors'][$extendSector->id] = [
267
                    'name' => $extendSector->name,
268
                    'total' => 0,
269
                ] ;
270
            }
271
 
272
            $companyMicrolearningExtendUserStudentTypeMapper = CompanyMicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
273
            $extendStudentTypes = $companyMicrolearningExtendUserStudentTypeMapper->fetchAllByCompanyId($currentCompany->id);
274
 
275
            foreach($extendStudentTypes as $extendStudentType)
276
            {
277
                $reportsLastWeek['student_types'][$extendStudentType->id] = [
278
                    'name' => $extendStudentType->name,
279
                    'total' => 0,
280
                    'value' => 0
281
                ] ;
282
 
283
                $reportsCapsuleResume['student_types'][$extendStudentType->id] = [
284
                    'name' => $extendStudentType->name,
285
                    'total' => 0,
286
                    'value' => 0
287
                ] ;
288
 
289
                $reportsStudentsTotal['student_types'][$extendStudentType->id] = [
290
                    'name' => $extendStudentType->name,
291
                    'total' => 0,
292
                ] ;
293
            }
294
 
295
            $companyMicrolearningUserProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
296
 
297
            $minLastWeek = date('Y-m-d', strtotime(' -180 days'));
298
            $maxLastWeek = date('Y-m-d');
299
            $companyMicrolearningUserLogMapper = CompanyMicrolearningUserLogMapper::getInstance($this->adapter);
300
            $companyUsersLogWithActivityLastWeek = $companyMicrolearningUserLogMapper->fetchAllUserIdsLastWeekByCompanyId($currentCompany->id, $minLastWeek, $maxLastWeek);
301
 
302
            //header('Content-type: text/plain');
303
           // print_r($companyUsersLogWithActivityLastWeek);
304
 
305
 
306
 
307
 
308
            $date = date('Y-m-d');
309
 
310
            $companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
311
            $user_ids = $companyMicrolearningCapsuleUserMapper->fetchAllDistinctUserIdActiveByCompanyIdAndDate($currentCompany->id, $date);
312
 
313
            $studentsTotal = count($user_ids);
314
            $studentsStarted = 0;
315
 
316
 
317
            $userIdsWithAllCapsulesCompleted = [];
318
 
319
 
320
            foreach($user_ids as $user_id)
321
            {
322
                $countSlides = $companyMicrolearningUserProgressMapper->fetchCountAllSlideCompletedByCompanyIdAndUserId($currentCompany->id, $user_id);
323
                if($countSlides) {
324
                    $studentsStarted++;
325
                }
326
 
327
                $incompleted = false;
328
 
329
                $capsuleUsers = $companyMicrolearningCapsuleUserMapper->fetchAllActiveByUserId($user_id);
330
                foreach($capsuleUsers as $capsuleUser)
331
                {
332
                    $userProgress = $companyMicrolearningUserProgressMapper->fetchOneByUseridAndCapsuleId($capsuleUser->user_id, $capsuleUser->capsule_id);
333
                    if($userProgress) {
334
                        if(!$userProgress->completed) {
335
                            $incompleted = true;
336
                            break;
337
                        }
338
                    }  else {
339
                        $incompleted = true;
340
                        break;
341
                    }
342
 
343
 
344
 
345
                }
346
 
347
                if(!$incompleted) {
348
                    array_push($userIdsWithAllCapsulesCompleted, $user_id);
349
                }
350
            }
351
 
352
 
353
            $studentsWithoutStarting =  $studentsTotal - $studentsStarted;
354
            $reportsLastWeek['general'] = ['total' => $studentsTotal, 'value' => count($companyUsersLogWithActivityLastWeek) ];
355
 
356
            $reportsCapsuleResume['general'] = ['total' => $studentsTotal, 'value' => count($userIdsWithAllCapsulesCompleted) ];
357
 
358
 
359
            $companyMicrolearningExtendUserMapper = CompanyMicrolearningExtendUserMapper::getInstance($this->adapter);
360
            $records = $companyMicrolearningExtendUserMapper->fetchAllByCompanyId($currentCompany->id);
361
            foreach($records as $record)
362
            {
363
 
364
                if($record->extend_company_id) {
365
                    $reportsLastWeek['companies'][$record->extend_company_id]['total'] += 1;
366
                    $reportsStudentsTotal['companies'][$record->extend_company_id]['total'] += 1;
367
 
368
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
369
                        $reportsLastWeek['companies'][$record->extend_company_id]['value'] += 1;
370
                    }
371
 
372
                    $reportsCapsuleResume['companies'][$record->extend_company_id]['total'] += 1;
373
 
374
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
375
                        $reportsCapsuleResume['companies'][$record->extend_company_id]['value'] += 1;
376
                    }
377
 
378
                }
379
 
380
                if($record->extend_function_id) {
381
                    $reportsLastWeek['functions'][$record->extend_function_id]['total'] += 1;
382
                    $reportsStudentsTotal['functions'][$record->extend_function_id]['total'] += 1;
383
 
384
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
385
                        $reportsLastWeek['functions'][$record->extend_function_id]['value'] += 1;
386
                    }
387
 
388
                    $reportsCapsuleResume['functions'][$record->extend_function_id]['total'] += 1;
389
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
390
                        $reportsCapsuleResume['functions'][$record->extend_function_id]['value'] += 1;
391
                    }
392
                }
393
 
394
                if($record->extend_group_id) {
395
                    $reportsLastWeek['groups'][$record->extend_group_id]['total'] += 1;
396
                    $reportsStudentsTotal['groups'][$record->extend_group_id]['total'] += 1;
397
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
398
                        $reportsLastWeek['groups'][$record->extend_group_id]['value'] += 1;
399
                    }
400
 
401
                    $reportsCapsuleResume['groups'][$record->extend_group_id]['total'] += 1;
402
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
403
                        $reportsCapsuleResume['groups'][$record->extend_group_id]['value'] += 1;
404
                    }
405
                }
406
 
407
                if($record->extend_institution_id) {
408
                    $reportsLastWeek['institutions'][$record->extend_institution_id]['total'] += 1;
409
                    $reportsStudentsTotal['institutions'][$record->extend_institution_id]['total'] += 1;
410
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
411
                        $reportsLastWeek['institutions'][$record->extend_institution_id]['value'] += 1;
412
                    }
413
 
414
                    $reportsCapsuleResume['institutions'][$record->extend_institution_id]['total'] += 1;
415
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
416
                        $reportsCapsuleResume['institutions'][$record->extend_institution_id]['value'] += 1;
417
                    }
418
                }
419
 
420
                if($record->extend_program_id) {
421
                    $reportsLastWeek['programs'][$record->extend_program_id]['total'] += 1;
422
                    $reportsStudentsTotal['programs'][$record->extend_program_id]['total'] += 1;
423
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
424
                        $reportsLastWeek['programs'][$record->extend_program_id]['value'] += 1;
425
                    }
426
 
427
                    $reportsCapsuleResume['programs'][$record->extend_program_id]['total'] += 1;
428
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
429
                        $reportsCapsuleResume['programs'][$record->extend_program_id]['value'] += 1;
430
                    }
431
                }
432
 
433
                if($record->extend_partner_id) {
434
                    $reportsLastWeek['partners'][$record->extend_partner_id]['total'] += 1;
435
                    $reportsStudentsTotal['partners'][$record->extend_partner_id]['total'] += 1;
436
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
437
                        $reportsLastWeek['partners'][$record->extend_partner_id]['value'] += 1;
438
                    }
439
 
440
                    $reportsCapsuleResume['partners'][$record->extend_partner_id]['total'] += 1;
441
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
442
                        $reportsCapsuleResume['partners'][$record->extend_partner_id]['value'] += 1;
443
                    }
444
                }
445
 
446
                if($record->extend_sector_id) {
447
                    $reportsLastWeek['sectors'][$record->extend_sector_id]['total'] += 1;
448
                    $reportsStudentsTotal['sectors'][$record->extend_sector_id]['total'] += 1;
449
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
450
                        $reportsLastWeek['sectors'][$record->extend_sector_id]['value'] += 1;
451
                    }
452
 
453
                    $reportsCapsuleResume['sectors'][$record->extend_sector_id]['total'] += 1;
454
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
455
                        $reportsCapsuleResume['sectors'][$record->extend_sector_id]['value'] += 1;
456
                    }
457
                }
458
 
459
                if($record->extend_student_type_id) {
460
                    $reportsLastWeek['student_types'][$record->extend_student_type_id]['total'] += 1;
461
                    $reportsStudentsTotal['student_types'][$record->extend_student_type_id]['total'] += 1;
462
                    if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {
463
                        $reportsLastWeek['student_types'][$record->extend_student_type_id]['value'] += 1;
464
                    }
465
 
466
                    $reportsCapsuleResume['student_types'][$record->extend_student_type_id]['total'] += 1;
467
                    if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {
468
                        $reportsCapsuleResume['student_types'][$record->extend_student_type_id]['value'] += 1;
469
                    }
470
                }
471
            }
472
 
473
 
474
            /*
475
            header('Content-type: text/plain');
476
            print_r($reportsStudentsTotal); exit;
477
            */
478
 
479
 
480
            $this->layout()->setTemplate('layout/layout-backend.phtml');
481
            $viewModel = new ViewModel();
482
            $viewModel->setTemplate('leaders-linked/microlearning-reports/overview.phtml');
483
            $viewModel->setVariables([
484
                'reportsLastWeek'       => $reportsLastWeek,
485
                'reportsCapsuleResume'  => $reportsCapsuleResume,
486
                'reportsStudentsTotal'  => $reportsStudentsTotal,
487
                'reportStudents' => [
488
                    'total' => $studentsTotal,
489
                    'started' => $studentsStarted,
490
                    'withoutStarting' => $studentsWithoutStarting,
491
                ]
492
 
493
            ]);
494
            return $viewModel ;
495
        }
496
 
497
        return new JsonModel([
498
           'success' => false,
499
           'data' => 'ERROR_METHOD_NOT_ALLOWED'
500
        ]);
501
    }
502
 
2 efrain 503
    public function progressAction()
1 www 504
    {
505
 
506
 
507
        $currentUserPlugin = $this->plugin('currentUserPlugin');
508
        $currentUser = $currentUserPlugin->getUser();
509
        $currentCompany = $currentUserPlugin->getCompany();
510
 
511
 
512
        $request = $this->getRequest();
513
        if($request->isGet()) {
514
 
515
 
516
            $headers  = $request->getHeaders();
517
 
518
            $isJson = false;
519
            if($headers->has('Accept')) {
520
                $accept = $headers->get('Accept');
521
 
522
                $prioritized = $accept->getPrioritized();
523
 
524
                foreach($prioritized as $key => $value) {
525
                    $raw = trim($value->getRaw());
526
 
527
                    if(!$isJson) {
528
                        $isJson = strpos($raw, 'json');
529
                    }
530
 
531
                }
532
            }
533
 
534
            if($isJson) {
535
 
536
                $date = date('Y-m-d');
537
 
538
                $companyMicrolearningProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
539
                $companyMicrolearningUserLogMapper = CompanyMicrolearningUserLogMapper::getInstance($this->adapter);
540
 
541
                $companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
542
 
543
                $companyMicrolearningSlideMapper = CompanyMicrolearningSlideMapper::getInstance($this->adapter);
544
 
545
 
546
 
547
                $queryMapper = QueryMapper::getInstance($this->adapter);
548
 
549
                $selectCapsuleUser = $queryMapper->getSql()->select();
550
                $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
551
                $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
552
                $selectCapsuleUser->where->equalTo('company_id', $currentCompany->id);
553
                $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
554
                ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
555
                ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
556
                ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
557
 
558
                //echo $select->getSqlString($this->adapter->platform); exit;
559
 
560
                $select = $queryMapper->getSql()->select();
561
                $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email']);
562
                $select->from(UserMapper::_TABLE);
563
                $select->where->in('id', $selectCapsuleUser);
564
                $select->order(['first_name', 'last_name']);
565
 
566
 
567
 
568
                $students = [];
569
                $records = $queryMapper->fetchAll($select);
570
                foreach($records as $record)
571
                {
572
                    $capsules               = $companyMicrolearningCapsuleUserMapper->fetchAllActiveByUserId($record['id']);
573
                    $totalCapsules          = count($capsules);
574
                    $totalCapsulesStarted   = 0;
575
                    $totalCapsulesCompleted = 0;
576
 
577
                    $totalSlides            = 0;
578
                    $totalSlidesStarted     = 0;
579
                    $totalSlidesCompleted   = 0;
580
 
581
                    foreach($capsules as $capsule)
582
                    {
583
                        $userProgress = $companyMicrolearningProgressMapper->fetchOneByUseridAndCapsuleId($capsule->user_id, $capsule->capsule_id);
584
                        if($userProgress) {
585
                            $totalCapsulesStarted++;
586
                            if($userProgress->completed) {
587
                                $totalCapsulesCompleted++;
588
                            }
589
                        }
590
 
591
                        $slides = $companyMicrolearningSlideMapper->fetchAllByCompanyIdAndTopicIdAndCapsuleId($capsule->company_id, $capsule->topic_id, $capsule->capsule_id);
592
                        $totalSlides = count($slides);
593
                        foreach($slides as $slide)
594
                        {
595
 
596
                             $userProgress = $companyMicrolearningProgressMapper->fetchOneByUserIdAndSlideId($capsule->user_id, $slide->id);
597
                             if($userProgress) {
598
 
599
                                 $totalSlidesStarted++;
600
                                 if($userProgress->completed) {
601
                                     $totalSlidesCompleted++;
602
                                 }
603
 
604
                             }
605
                        }
606
 
607
 
608
                    }
609
 
610
 
611
 
612
                    $student = [
613
                        'uuid' => $record['uuid'],
614
                        'first_name' => $record['first_name'],
615
                        'last_name' => $record['last_name'],
616
                        'email' => $record['email'],
617
                        'total_capsules' => $totalCapsules,
618
                        'total_capsules_incomplete' => ( $totalCapsules - $totalCapsulesCompleted ),
619
                        'total_capsules_started' => $totalCapsulesStarted,
620
                        'total_capsules_completed' => $totalCapsulesCompleted,
621
                        'total_slides' => $totalSlides,
622
                        'total_slides_started' => $totalSlidesStarted,
623
                        'total_slides_completed' => $totalSlidesCompleted,
624
                        'totql_slides_incompleted' => ($totalSlides - $totalSlidesCompleted ) ,
625
                        'first_date' => '',
626
                        'first_time' => '',
627
                        'last_date' => '',
628
                        'last_time' => '',
629
                    ];
630
 
631
                    $first_added_on = $companyMicrolearningUserLogMapper->fetchFirstDateByCompanyIdAndUserId($currentCompany->id, $record['id']);
632
                    if($first_added_on) {
633
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $first_added_on);
634
                        if($dt) {
635
                            $student['first_date'] = $dt->format('d/m/Y');
636
                            $student['first_time'] = $dt->format('h:i a');
637
                        }
638
                    }
639
 
640
                    $last_added_on  = $companyMicrolearningUserLogMapper->fetchLastDateByCompanyIdAndUserId($currentCompany->id, $record['id']);
641
                    if($last_added_on) {
642
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $last_added_on);
643
                        if($dt) {
644
                            $student['last_date'] = $dt->format('d/m/Y');
645
                            $student['last_time'] = $dt->format('h:i a');
646
                        }
647
                    }
648
 
649
                    array_push($students, $student);
650
 
651
 
652
                }
653
 
654
 
655
 
656
 
657
                return new JsonModel([
658
                    'success' => true,
659
                    'data' => $students
660
 
661
                ]);
662
 
663
            } else {
664
 
665
 
666
 
667
                $form = new ExtendUserMicrolearningForm($this->adapter, $currentCompany->id);
668
 
669
 
670
                $this->layout()->setTemplate('layout/layout-backend.phtml');
671
                $viewModel = new ViewModel();
2 efrain 672
                $viewModel->setTemplate('leaders-linked/microlearning-reports/progress.phtml');
1 www 673
                $viewModel->setVariables([
674
                    'form' => $form
675
                ]);
676
                return $viewModel ;
677
            }
678
        }
679
 
680
        return new JsonModel([
681
            'success' => false,
682
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
683
        ]);
684
    }
2 efrain 685
 
686
    public function devicesAction()
687
    {
688
 
689
 
690
        $currentUserPlugin = $this->plugin('currentUserPlugin');
691
        $currentUser = $currentUserPlugin->getUser();
692
        $currentCompany = $currentUserPlugin->getCompany();
693
 
694
 
695
        $request = $this->getRequest();
696
        if($request->isGet()) {
697
 
698
 
699
            $headers  = $request->getHeaders();
700
 
701
            $isJson = false;
702
            if($headers->has('Accept')) {
703
                $accept = $headers->get('Accept');
704
 
705
                $prioritized = $accept->getPrioritized();
706
 
707
                foreach($prioritized as $key => $value) {
708
                    $raw = trim($value->getRaw());
709
 
710
                    if(!$isJson) {
711
                        $isJson = strpos($raw, 'json');
712
                    }
713
 
714
                }
715
            }
716
 
717
            if($isJson) {
718
 
129 efrain 719
 
720
                $company_id = filter_var($this->params()->fromQuery('company_id', ''), FILTER_SANITIZE_STRING);
721
                $function_id = filter_var($this->params()->fromQuery('function_id', ''), FILTER_SANITIZE_STRING);
722
                $group_id = filter_var($this->params()->fromQuery('group_id', ''), FILTER_SANITIZE_STRING);
723
                $institution_id = filter_var($this->params()->fromQuery('institution_id', ''), FILTER_SANITIZE_STRING);
724
                $program_id = filter_var($this->params()->fromQuery('program_id', ''), FILTER_SANITIZE_STRING);
725
                $partner_id = filter_var($this->params()->fromQuery('partner_id', ''), FILTER_SANITIZE_STRING);
726
                $sector_id = filter_var($this->params()->fromQuery('sector_id', ''), FILTER_SANITIZE_STRING);
727
                $student_type_id = filter_var($this->params()->fromQuery('student_type_id', ''), FILTER_SANITIZE_STRING);
728
 
729
 
730
                if($company_id) {
731
                    $extendUserCompanyMapper = CompanyMicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
732
                    $extendUserCompany = $extendUserCompanyMapper->fetchOneByUuid($company_id);
733
 
734
                    if($extendUserCompany) {
735
                        $company_id = $extendUserCompany->id;
736
                    } else {
737
                        $company_id = 0;
738
                    }
739
                }
740
 
741
                if($function_id) {
742
                    $extendUserFunctionMapper = CompanyMicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
743
                    $extendUserFunction = $extendUserFunctionMapper->fetchOneByUuid($function_id);
744
 
745
                    if($extendUserFunction) {
746
                        $function_id = $extendUserFunction->id;
747
                    } else {
748
                        $function_id = 0;
749
                    }
750
                }
751
 
752
                if($group_id) {
753
                    $extendUserGroupMapper = CompanyMicrolearningExtendUserGroupMapper::getInstance($this->adapter);
754
                    $extendUserGroup = $extendUserGroupMapper->fetchOneByUuid($group_id);
755
 
756
                    if($extendUserGroup) {
757
                        $group_id = $extendUserGroup->id;
758
                    } else {
759
                        $group_id = 0;
760
                    }
761
                }
762
 
763
                if($institution_id) {
764
                    $extendUserInstitutionMapper = CompanyMicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
765
                    $extendUserInstitution = $extendUserInstitutionMapper->fetchOneByUuid($institution_id);
766
                    if($extendUserInstitution) {
767
                        $institution_id = $extendUserInstitution->id;
768
                    } else {
769
                        $institution_id = 0;
770
                    }
771
                }
772
 
773
                if($program_id) {
774
                    $extendUserProgramMapper = CompanyMicrolearningExtendUserProgramMapper::getInstance($this->adapter);
775
                    $extendUserProgram = $extendUserProgramMapper->fetchOneByUuid($program_id);
776
 
777
                    if($extendUserProgram) {
778
                        $program_id = $extendUserProgram->id;
779
                    } else {
780
                        $program_id = 0;
781
                    }
782
 
783
 
784
                }
785
 
786
                if($partner_id) {
787
                    $extendUserPartnerMapper = CompanyMicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
788
                    $extendUserPartner = $extendUserPartnerMapper->fetchOneByUuid($partner_id);
789
                    if($extendUserPartner) {
790
                        $partner_id = $extendUserPartner;
791
                    } else {
792
                        $partner_id = 0;
793
                    }
794
                }
795
 
796
                if($sector_id) {
797
                    $extendUserSectorMapper = CompanyMicrolearningExtendUserSectorMapper::getInstance($this->adapter);
798
                    $extendUserSector = $extendUserSectorMapper->fetchOneByUuid($sector_id);
799
                    if($extendUserSector) {
800
                        $sector_id = $extendUserSector->id;
801
                    } else {
802
                        $sector_id = 0;
803
                    }
804
                }
805
 
806
                if($student_type_id) {
807
                    $extendUserStudentTypeMapper = CompanyMicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
808
                    $extendUserStudentType = $extendUserStudentTypeMapper->fetchOneByUuid($student_type_id);
809
 
810
                    if($extendUserStudentType) {
811
                        $student_type_id = $extendUserStudentType->id;
812
                    } else {
813
                        $student_type_id = 0;
814
                    }
815
                }
816
 
817
 
818
 
819
                /*
820
                echo 'company_id 1 =  '. $company_id . PHP_EOL;
821
                echo 'function_id 1 =  '. $function_id . PHP_EOL;
822
                echo 'group_id 1 =  '. $group_id . PHP_EOL;
823
                echo 'institution_id 1 =  '. $institution_id . PHP_EOL;
824
                echo 'program_id 1 =  '. $program_id . PHP_EOL;
825
                echo 'partner_id 1 =  '. $partner_id . PHP_EOL;
826
                echo 'sector_id 1 =  '. $sector_id . PHP_EOL;
827
                echo 'student_type_id 1 =  '. $student_type_id . PHP_EOL;
828
                exit;
829
                */
830
 
831
 
2 efrain 832
                $date = date('Y-m-d');
833
                $deviceMapper = DeviceMapper::getInstance($this->adapter);
834
 
835
 
836
                $queryMapper = QueryMapper::getInstance($this->adapter);
837
 
838
                $selectCapsuleUser = $queryMapper->getSql()->select();
839
                $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
840
                $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
841
                $selectCapsuleUser->where->equalTo('company_id', $currentCompany->id);
842
                $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
843
                ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
844
                ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
845
                ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
846
 
847
                //echo $select->getSqlString($this->adapter->platform); exit;
848
 
849
                $select = $queryMapper->getSql()->select();
850
                $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email']);
129 efrain 851
                $select->from([ 'u' => UserMapper::_TABLE]);
852
                if( $company_id || $function_id  || $group_id || $institution_id || $program_id || $partner_id ||  $sector_id || $student_type_id ) {
853
 
854
                    $select->join(['e' => CompanyMicrolearningExtendUserMapper::_TABLE], 'e.user_id = u.id');
855
 
856
                }
2 efrain 857
 
129 efrain 858
                $select->where->in('u.id', $selectCapsuleUser);
859
                if($company_id) {
860
                    $select->where->equalTo('e.extend_company_id', $company_id);
861
                }
2 efrain 862
 
129 efrain 863
                if($function_id) {
864
                    $select->where->equalTo('e.extend_function_id', $function_id);
865
 
866
                }
867
                if($group_id) {
868
                    $select->where->equalTo('e.extend_group_id', $group_id);
869
                }
2 efrain 870
 
129 efrain 871
                if($institution_id) {
872
                    $select->where->equalTo('e.extend_institution_id', $institution_id);
873
                }
874
 
875
                if($program_id) {
876
                    $select->where->equalTo('e.extend_program_id', $program_id);
877
                }
878
 
879
                if($partner_id) {
880
                    $select->where->equalTo('e.extend_partner_id', $partner_id);
881
                }
882
 
883
                if($sector_id) {
884
                    $select->where->equalTo('e.extend_sector_id', $sector_id);
885
                }
886
 
887
                if($student_type_id) {
888
                    $select->where->equalTo('e.extend_student_type_id', $student_type_id);
889
                }
890
                $select->order(['u.first_name', 'u.last_name']);
891
 
892
 
893
 
2 efrain 894
                $students = [];
895
                $records = $queryMapper->fetchAll($select);
896
                foreach($records as $record)
897
                {
898
 
899
 
900
                    $record_devices = $deviceMapper->fetchAllByUserId($record['id']);
901
 
902
                    $devices = [];
903
                    foreach($record_devices as $device)
904
                    {
905
                        /*if($device->application_id != Application::LEADERSLINKED) {
906
                            continue;
907
                        }*/
908
 
909
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $device->updated_on);
910
 
911
                        array_push($devices, [
912
                            'brand' => $device->brand,
913
                            'manufacturer' => $device->manufacturer,
914
                            'model' => $device->model,
915
                            'platform' => $device->platform,
916
                            'version' => $device->version,
917
                            'token' => $device->token ? 'LABEL_YES' : 'LABEL_NO',
918
                            'updated_on' => $dt->format('d/m/Y h:i a')
919
                        ]);
920
                    }
921
 
922
 
923
                    $student = [
924
                        'uuid' => $record['uuid'],
925
                        'first_name' => $record['first_name'],
926
                        'last_name' => $record['last_name'],
927
                        'email' => $record['email'],
928
                        'devices' => $devices
929
                    ];
930
 
931
                    array_push($students, $student);
932
 
933
 
934
                }
935
 
936
 
937
 
938
 
939
                return new JsonModel([
940
                    'success' => true,
129 efrain 941
                    'data' => $students,
942
                    'sql' => $select->getSqlString($this->adapter->platform),
2 efrain 943
 
944
                ]);
945
 
946
            } else {
947
 
948
 
949
 
950
                $form = new ExtendUserMicrolearningForm($this->adapter, $currentCompany->id);
951
 
952
 
953
                $this->layout()->setTemplate('layout/layout-backend.phtml');
954
                $viewModel = new ViewModel();
955
                $viewModel->setTemplate('leaders-linked/microlearning-reports/devices.phtml');
956
                $viewModel->setVariables([
957
                    'form' => $form
958
                ]);
959
                return $viewModel ;
960
            }
961
        }
962
 
963
        return new JsonModel([
964
            'success' => false,
965
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
966
        ]);
967
    }
1 www 968
 
969
}