Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 483 | Rev 14612 | 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
    }
2126 efrain 509
 
1 www 510
 
187 efrain 511
 
2 efrain 512
    public function progressAction()
1 www 513
    {
514
 
515
 
516
        $currentUserPlugin = $this->plugin('currentUserPlugin');
517
        $currentUser = $currentUserPlugin->getUser();
518
        $currentCompany = $currentUserPlugin->getCompany();
519
 
520
 
521
        $request = $this->getRequest();
522
        if($request->isGet()) {
523
 
524
 
525
            $headers  = $request->getHeaders();
526
 
527
            $isJson = false;
528
            if($headers->has('Accept')) {
529
                $accept = $headers->get('Accept');
530
 
531
                $prioritized = $accept->getPrioritized();
532
 
533
                foreach($prioritized as $key => $value) {
534
                    $raw = trim($value->getRaw());
535
 
536
                    if(!$isJson) {
537
                        $isJson = strpos($raw, 'json');
538
                    }
539
 
540
                }
541
            }
542
 
187 efrain 543
 
2126 efrain 544
 
1 www 545
            if($isJson) {
483 efrain 546
 
1 www 547
                $queryMapper = QueryMapper::getInstance($this->adapter);
548
 
187 efrain 549
                $selectUsers = $queryMapper->getSql()->select();
550
                $selectUsers->columns(['user_id' => new Expression('DISTINCT(user_id)')]);
551
                $selectUsers->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
552
                $selectUsers->where->equalTo('company_id', $currentCompany->id);
1 www 553
 
187 efrain 554
 
1 www 555
 
187 efrain 556
 
557
 
1 www 558
                $select = $queryMapper->getSql()->select();
559
                $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email']);
187 efrain 560
                $select->from([ 'u' => UserMapper::_TABLE]);
1 www 561
 
562
 
563
 
187 efrain 564
                $select->where->in('u.id', $selectUsers);
483 efrain 565
 
187 efrain 566
                $select->order(['u.first_name', 'u.last_name']);
567
 
568
               // echo $select->getSqlString($this->adapter->platform); exit;
483 efrain 569
 
187 efrain 570
 
571
 
572
 
573
                $companyMicrolearningProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
574
                $companyMicrolearningUserLogMapper = CompanyMicrolearningUserLogMapper::getInstance($this->adapter);
575
 
576
                $companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
577
 
578
               // $companyMicrolearningSlideMapper = CompanyMicrolearningSlideMapper::getInstance($this->adapter);
579
 
580
 
581
 
582
                $students = [];
583
 
1 www 584
                $records = $queryMapper->fetchAll($select);
187 efrain 585
 
586
 
1 www 587
                foreach($records as $record)
588
                {
187 efrain 589
 
590
 
1 www 591
                    $capsules               = $companyMicrolearningCapsuleUserMapper->fetchAllActiveByUserId($record['id']);
187 efrain 592
 
593
 
594
 
1 www 595
                    $totalCapsules          = count($capsules);
596
                    $totalCapsulesStarted   = 0;
597
                    $totalCapsulesCompleted = 0;
598
 
599
 
187 efrain 600
 
601
 
602
 
603
 
604
 
1 www 605
                    foreach($capsules as $capsule)
606
                    {
607
                        $userProgress = $companyMicrolearningProgressMapper->fetchOneByUseridAndCapsuleId($capsule->user_id, $capsule->capsule_id);
187 efrain 608
 
609
 
1 www 610
                        if($userProgress) {
611
                            $totalCapsulesStarted++;
612
                            if($userProgress->completed) {
613
                                $totalCapsulesCompleted++;
187 efrain 614
                            }
1 www 615
                        }
187 efrain 616
 
1 www 617
 
618
 
619
                    }
620
 
187 efrain 621
 
622
 
623
 
624
                    if($totalCapsulesCompleted > 0 && $totalCapsules > 0) {
625
                        $total_capsules_percentaje = intval ( ($totalCapsulesCompleted * 100 ) / $totalCapsules);
626
                    }  else {
627
                        $total_capsules_percentaje = 0;
628
                    }
629
 
1 www 630
 
187 efrain 631
 
1 www 632
                    $student = [
633
                        'uuid' => $record['uuid'],
634
                        'first_name' => $record['first_name'],
635
                        'last_name' => $record['last_name'],
187 efrain 636
                        'email' => $record['email'],
637
 
1 www 638
                        'total_capsules' => $totalCapsules,
187 efrain 639
                        'total_capsules_incomplete' => ( $totalCapsules - $totalCapsulesCompleted ),
1 www 640
                        'total_capsules_started' => $totalCapsulesStarted,
641
                        'total_capsules_completed' => $totalCapsulesCompleted,
187 efrain 642
                        'total_capsules_percentaje' => $total_capsules_percentaje,
643
 
1 www 644
                        'first_date' => '',
645
                        'first_time' => '',
646
                        'last_date' => '',
647
                        'last_time' => '',
648
                    ];
187 efrain 649
 
1 www 650
                    $first_added_on = $companyMicrolearningUserLogMapper->fetchFirstDateByCompanyIdAndUserId($currentCompany->id, $record['id']);
651
                    if($first_added_on) {
652
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $first_added_on);
653
                        if($dt) {
654
                            $student['first_date'] = $dt->format('d/m/Y');
655
                            $student['first_time'] = $dt->format('h:i a');
656
                        }
657
                    }
658
 
659
                    $last_added_on  = $companyMicrolearningUserLogMapper->fetchLastDateByCompanyIdAndUserId($currentCompany->id, $record['id']);
660
                    if($last_added_on) {
661
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $last_added_on);
662
                        if($dt) {
663
                            $student['last_date'] = $dt->format('d/m/Y');
664
                            $student['last_time'] = $dt->format('h:i a');
187 efrain 665
                        }
1 www 666
                    }
187 efrain 667
 
1 www 668
                    array_push($students, $student);
187 efrain 669
 
1 www 670
 
671
 
672
                }
673
 
674
 
187 efrain 675
                //print_r($students);
1 www 676
 
677
 
187 efrain 678
 
1 www 679
                return new JsonModel([
187 efrain 680
                    'success' => true,
1 www 681
                    'data' => $students
682
 
187 efrain 683
                ]);
1 www 684
 
187 efrain 685
            } else {
1 www 686
 
687
 
688
 
2126 efrain 689
                // $form = new ExtendUserMicrolearningForm($this->adapter, $currentCompany->id);
690
                $form = new TopicCapsuleForm($this->adapter, $currentCompany->id, $topic_id = 0);
1 www 691
 
692
 
693
                $this->layout()->setTemplate('layout/layout-backend.phtml');
694
                $viewModel = new ViewModel();
483 efrain 695
                $viewModel->setTemplate('leaders-linked/microlearning-reports/progress-for-capsule.phtml');
1 www 696
                $viewModel->setVariables([
697
                    'form' => $form
187 efrain 698
                ]);
1 www 699
                return $viewModel ;
700
            }
701
        }
702
 
703
        return new JsonModel([
704
            'success' => false,
705
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
706
        ]);
707
    }
2 efrain 708
 
187 efrain 709
 
2 efrain 710
    public function devicesAction()
711
    {
712
 
713
 
714
        $currentUserPlugin = $this->plugin('currentUserPlugin');
715
        $currentUser = $currentUserPlugin->getUser();
716
        $currentCompany = $currentUserPlugin->getCompany();
717
 
718
 
719
        $request = $this->getRequest();
720
        if($request->isGet()) {
721
 
722
 
723
            $headers  = $request->getHeaders();
724
 
725
            $isJson = false;
726
            if($headers->has('Accept')) {
727
                $accept = $headers->get('Accept');
728
 
729
                $prioritized = $accept->getPrioritized();
730
 
731
                foreach($prioritized as $key => $value) {
732
                    $raw = trim($value->getRaw());
733
 
734
                    if(!$isJson) {
735
                        $isJson = strpos($raw, 'json');
736
                    }
737
 
738
                }
739
            }
740
 
741
            if($isJson) {
742
 
129 efrain 743
 
744
                $company_id = filter_var($this->params()->fromQuery('company_id', ''), FILTER_SANITIZE_STRING);
745
                $function_id = filter_var($this->params()->fromQuery('function_id', ''), FILTER_SANITIZE_STRING);
746
                $group_id = filter_var($this->params()->fromQuery('group_id', ''), FILTER_SANITIZE_STRING);
747
                $institution_id = filter_var($this->params()->fromQuery('institution_id', ''), FILTER_SANITIZE_STRING);
748
                $program_id = filter_var($this->params()->fromQuery('program_id', ''), FILTER_SANITIZE_STRING);
749
                $partner_id = filter_var($this->params()->fromQuery('partner_id', ''), FILTER_SANITIZE_STRING);
750
                $sector_id = filter_var($this->params()->fromQuery('sector_id', ''), FILTER_SANITIZE_STRING);
751
                $student_type_id = filter_var($this->params()->fromQuery('student_type_id', ''), FILTER_SANITIZE_STRING);
752
 
753
 
754
                if($company_id) {
755
                    $extendUserCompanyMapper = CompanyMicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
756
                    $extendUserCompany = $extendUserCompanyMapper->fetchOneByUuid($company_id);
757
 
758
                    if($extendUserCompany) {
759
                        $company_id = $extendUserCompany->id;
760
                    } else {
761
                        $company_id = 0;
762
                    }
763
                }
764
 
765
                if($function_id) {
766
                    $extendUserFunctionMapper = CompanyMicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
767
                    $extendUserFunction = $extendUserFunctionMapper->fetchOneByUuid($function_id);
768
 
769
                    if($extendUserFunction) {
770
                        $function_id = $extendUserFunction->id;
771
                    } else {
772
                        $function_id = 0;
773
                    }
774
                }
775
 
776
                if($group_id) {
777
                    $extendUserGroupMapper = CompanyMicrolearningExtendUserGroupMapper::getInstance($this->adapter);
778
                    $extendUserGroup = $extendUserGroupMapper->fetchOneByUuid($group_id);
779
 
780
                    if($extendUserGroup) {
781
                        $group_id = $extendUserGroup->id;
782
                    } else {
783
                        $group_id = 0;
784
                    }
785
                }
786
 
787
                if($institution_id) {
788
                    $extendUserInstitutionMapper = CompanyMicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
789
                    $extendUserInstitution = $extendUserInstitutionMapper->fetchOneByUuid($institution_id);
790
                    if($extendUserInstitution) {
791
                        $institution_id = $extendUserInstitution->id;
792
                    } else {
793
                        $institution_id = 0;
794
                    }
795
                }
796
 
797
                if($program_id) {
798
                    $extendUserProgramMapper = CompanyMicrolearningExtendUserProgramMapper::getInstance($this->adapter);
799
                    $extendUserProgram = $extendUserProgramMapper->fetchOneByUuid($program_id);
800
 
801
                    if($extendUserProgram) {
802
                        $program_id = $extendUserProgram->id;
803
                    } else {
804
                        $program_id = 0;
805
                    }
806
 
807
 
808
                }
809
 
810
                if($partner_id) {
811
                    $extendUserPartnerMapper = CompanyMicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
812
                    $extendUserPartner = $extendUserPartnerMapper->fetchOneByUuid($partner_id);
813
                    if($extendUserPartner) {
814
                        $partner_id = $extendUserPartner;
815
                    } else {
816
                        $partner_id = 0;
817
                    }
818
                }
819
 
820
                if($sector_id) {
821
                    $extendUserSectorMapper = CompanyMicrolearningExtendUserSectorMapper::getInstance($this->adapter);
822
                    $extendUserSector = $extendUserSectorMapper->fetchOneByUuid($sector_id);
823
                    if($extendUserSector) {
824
                        $sector_id = $extendUserSector->id;
825
                    } else {
826
                        $sector_id = 0;
827
                    }
828
                }
829
 
830
                if($student_type_id) {
831
                    $extendUserStudentTypeMapper = CompanyMicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
832
                    $extendUserStudentType = $extendUserStudentTypeMapper->fetchOneByUuid($student_type_id);
833
 
834
                    if($extendUserStudentType) {
835
                        $student_type_id = $extendUserStudentType->id;
836
                    } else {
837
                        $student_type_id = 0;
838
                    }
839
                }
840
 
841
 
842
 
843
                /*
844
                echo 'company_id 1 =  '. $company_id . PHP_EOL;
845
                echo 'function_id 1 =  '. $function_id . PHP_EOL;
846
                echo 'group_id 1 =  '. $group_id . PHP_EOL;
847
                echo 'institution_id 1 =  '. $institution_id . PHP_EOL;
848
                echo 'program_id 1 =  '. $program_id . PHP_EOL;
849
                echo 'partner_id 1 =  '. $partner_id . PHP_EOL;
850
                echo 'sector_id 1 =  '. $sector_id . PHP_EOL;
851
                echo 'student_type_id 1 =  '. $student_type_id . PHP_EOL;
852
                exit;
853
                */
854
 
855
 
2 efrain 856
                $date = date('Y-m-d');
857
                $deviceMapper = DeviceMapper::getInstance($this->adapter);
858
 
859
 
860
                $queryMapper = QueryMapper::getInstance($this->adapter);
861
 
862
                $selectCapsuleUser = $queryMapper->getSql()->select();
863
                $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
864
                $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
865
                $selectCapsuleUser->where->equalTo('company_id', $currentCompany->id);
866
                $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
867
                ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
868
                ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
869
                ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
870
 
871
                //echo $select->getSqlString($this->adapter->platform); exit;
872
 
873
                $select = $queryMapper->getSql()->select();
874
                $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email']);
129 efrain 875
                $select->from([ 'u' => UserMapper::_TABLE]);
876
                if( $company_id || $function_id  || $group_id || $institution_id || $program_id || $partner_id ||  $sector_id || $student_type_id ) {
877
 
187 efrain 878
                    $select->join(['e' => CompanyMicrolearningExtendUserMapper::_TABLE], 'e.user_id = u.id', []);
129 efrain 879
 
880
                }
2 efrain 881
 
129 efrain 882
                $select->where->in('u.id', $selectCapsuleUser);
883
                if($company_id) {
884
                    $select->where->equalTo('e.extend_company_id', $company_id);
885
                }
2 efrain 886
 
129 efrain 887
                if($function_id) {
888
                    $select->where->equalTo('e.extend_function_id', $function_id);
889
 
890
                }
891
                if($group_id) {
892
                    $select->where->equalTo('e.extend_group_id', $group_id);
893
                }
2 efrain 894
 
129 efrain 895
                if($institution_id) {
896
                    $select->where->equalTo('e.extend_institution_id', $institution_id);
897
                }
898
 
899
                if($program_id) {
900
                    $select->where->equalTo('e.extend_program_id', $program_id);
901
                }
902
 
903
                if($partner_id) {
904
                    $select->where->equalTo('e.extend_partner_id', $partner_id);
905
                }
906
 
907
                if($sector_id) {
908
                    $select->where->equalTo('e.extend_sector_id', $sector_id);
909
                }
910
 
911
                if($student_type_id) {
912
                    $select->where->equalTo('e.extend_student_type_id', $student_type_id);
913
                }
914
                $select->order(['u.first_name', 'u.last_name']);
915
 
916
 
917
 
2 efrain 918
                $students = [];
919
                $records = $queryMapper->fetchAll($select);
920
                foreach($records as $record)
921
                {
922
 
923
 
924
                    $record_devices = $deviceMapper->fetchAllByUserId($record['id']);
925
 
926
                    $devices = [];
927
                    foreach($record_devices as $device)
928
                    {
929
                        /*if($device->application_id != Application::LEADERSLINKED) {
930
                            continue;
931
                        }*/
932
 
933
                        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $device->updated_on);
934
 
935
                        array_push($devices, [
936
                            'brand' => $device->brand,
937
                            'manufacturer' => $device->manufacturer,
938
                            'model' => $device->model,
939
                            'platform' => $device->platform,
940
                            'version' => $device->version,
941
                            'token' => $device->token ? 'LABEL_YES' : 'LABEL_NO',
942
                            'updated_on' => $dt->format('d/m/Y h:i a')
943
                        ]);
944
                    }
945
 
187 efrain 946
                    if(empty($devices)) {
947
                        continue;
948
 
949
                    }
950
 
2 efrain 951
 
952
                    $student = [
953
                        'uuid' => $record['uuid'],
954
                        'first_name' => $record['first_name'],
955
                        'last_name' => $record['last_name'],
956
                        'email' => $record['email'],
957
                        'devices' => $devices
958
                    ];
959
 
960
                    array_push($students, $student);
961
 
962
 
963
                }
964
 
965
 
966
 
967
 
968
                return new JsonModel([
969
                    'success' => true,
129 efrain 970
                    'data' => $students,
971
                    'sql' => $select->getSqlString($this->adapter->platform),
2 efrain 972
 
973
                ]);
974
 
975
            } else {
976
 
977
 
978
 
979
                $form = new ExtendUserMicrolearningForm($this->adapter, $currentCompany->id);
980
 
981
 
982
                $this->layout()->setTemplate('layout/layout-backend.phtml');
983
                $viewModel = new ViewModel();
984
                $viewModel->setTemplate('leaders-linked/microlearning-reports/devices.phtml');
985
                $viewModel->setVariables([
986
                    'form' => $form
987
                ]);
988
                return $viewModel ;
989
            }
990
        }
991
 
992
        return new JsonModel([
993
            'success' => false,
994
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
995
        ]);
996
    }
187 efrain 997
 
998
 
999
    public function comentsForCapsulesAction()
1000
    {
1001
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1002
        $currentUser = $currentUserPlugin->getUser();
1003
        $currentCompany = $currentUserPlugin->getCompany();
1004
 
1005
        $request = $this->getRequest();
1006
 
1007
        if($request->isGet())
1008
        {
1009
 
1010
            $headers  = $request->getHeaders();
1011
 
1012
            $isJson = false;
1013
            if($headers->has('Accept')) {
1014
                $accept = $headers->get('Accept');
1015
 
1016
                $prioritized = $accept->getPrioritized();
1017
 
1018
                foreach($prioritized as $key => $value) {
1019
                    $raw = trim($value->getRaw());
1020
 
1021
                    if(!$isJson) {
1022
                        $isJson = strpos($raw, 'json');
1023
                    }
1024
 
1025
                }
1026
            }
1027
 
1028
            if($isJson) {
1029
                $topic_uuid     = filter_var($this->params()->fromQuery('topic_uuid'), FILTER_SANITIZE_STRING);
1030
                $capsule_uuid   = filter_var($this->params()->fromQuery('capsule_uuid'), FILTER_SANITIZE_STRING);
1031
 
1032
                $data = [
1033
                    'items' => [] ,
1034
                    'total' => 0,
1035
 
1036
                ];
1037
 
1038
 
1039
                if(!$topic_uuid) {
1040
                    return new JsonModel([
1041
                        'success' => true,
1042
                        'data' => $data
1043
                    ]);
1044
 
1045
                }
1046
 
1047
 
1048
                $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1049
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
1050
                if(!$topic) {
1051
                    return new JsonModel([
1052
                        'success' => true,
1053
                        'data' => 'ERROR_TOPIC_NOT_FOUND'
1054
                    ]);
1055
                }
1056
 
1057
                if($topic->company_id != $currentCompany->id) {
1058
                    return new JsonModel([
1059
                        'success' => true,
1060
                        'data' => 'ERROR_UNAUTHORIZED'
1061
                    ]);
1062
                }
1063
 
1064
 
1065
 
1066
                if(!$capsule_uuid) {
1067
                    $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1068
                    $records = $capsuleMapper->fetchAllByCompanyIdAndTopicId($topic->company_id, $topic->id);
1069
 
1070
                    $capsules = [];
1071
                    foreach($records as $record)
1072
                    {
1073
                        if(!$capsule_uuid) {
1074
                            $capsule_uuid = $record->uuid;
1075
                        }
1076
 
1077
                        $capsules[ $record->uuid ] = $record->name;
1078
                    }
1079
 
1080
                    $data['capsules']  = $capsules;
1081
                }
1082
 
1083
                if(!$capsule_uuid) {
1084
                    return new JsonModel([
1085
                        'success' => true,
1086
                        'data' => $data
1087
                    ]);
1088
 
1089
                }
1090
 
1091
                $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1092
                $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
1093
 
1094
 
1095
 
1096
                if(!$capsule) {
1097
                    return new JsonModel([
1098
                        'success' => true,
1099
                        'data' => 'ERROR_CAPSULE_NOT_FOUND'
1100
                    ]);
1101
                }
1102
 
1103
                if($capsule->topic_id != $topic->id) {
1104
                    return new JsonModel([
1105
                        'success' => true,
1106
                        'data' => 'ERROR_UNAUTHORIZED'
1107
                    ]);
1108
                }
1109
 
1110
 
1111
                $search = $this->params()->fromQuery('search', []);
1112
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
1113
 
1114
                $page               = intval($this->params()->fromQuery('start', 1), 10);
1115
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
1116
                $order =  $this->params()->fromQuery('order', []);
1117
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
1118
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
1119
 
1120
                $fields =  ['uuid', 'first_name', 'last_name', 'email', 'rating', 'comment', 'added_on'];
1121
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'added_on';
1122
 
1123
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
1124
                    $order_direction = 'DESC';
1125
                }
1126
 
1127
 
1128
                $queryMapper = QueryMapper::getInstance($this->adapter);
1129
                $sql = $queryMapper->getSql();
1130
                $select = $sql->select();
1131
                $select->columns(['access', 'paid_from', 'paid_to', 'added_on', 'updated_on']);
1132
                $select->from(['tb1' => CompanyMicrolearningCapsuleCommentMapper::_TABLE] );
1133
                $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
1134
                $select->where->equalTo('tb1.company_id', $capsule->company_id);
1135
                $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
1136
                $select->where->equalTo('tb1.capsule_id', $capsule->id);
1137
 
1138
                if($search) {
1139
                    $select->where->nest()
1140
                    ->like('first_name', '%' . $search . '%')
1141
                    ->or->like('last_name', '%' . $search . '%')
1142
                    ->or->like('email', '%' . $search . '%')
1143
                    ->unnest();
1144
 
1145
                }
1146
 
1147
 
1148
                $select->order($order_field . ' ' . $order_direction);
1149
 
1150
                $hydrator   = new ArraySerializableHydrator();
1151
                $resultset  = new HydratingResultSet($hydrator);
1152
 
1153
                $adapter = new DbSelect($select, $sql, $resultset);
1154
                $paginator = new Paginator($adapter);
1155
                $paginator->setItemCountPerPage($records_x_page);
1156
                $paginator->setCurrentPageNumber($page);
1157
 
1158
 
1159
                $items = [ ];
1160
                $records = $paginator->getCurrentItems();
1161
                foreach($records as $record)
1162
                {
1163
 
1164
 
1165
 
1166
                    $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
1167
                    $added_on = $dt_added_on->format('d/m/Y h:i a');
1168
 
1169
 
1170
                    $item = [
1171
                        'uuid' => $record['uuid'],
1172
                        'first_name' => $record['first_name'],
1173
                        'last_name' => $record['last_name'],
1174
                        'email' => $record['email'],
1175
                        'rating' => $record['rating'],
1176
                        'text' => $record['text'],
1177
                        'added_on' => $added_on,
1178
                    ];
1179
 
1180
 
1181
                    array_push($items, $item);
1182
 
1183
 
1184
                }
1185
 
1186
                $data['items'] = $items;
1187
                $data['total'] = $paginator->getTotalItemCount();
1188
 
1189
 
1190
                return new JsonModel([
1191
                    'success' => true,
1192
                    'data' => $data
1193
                ]);
1194
            } else {
1195
                $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1196
                $topics = $topicMapper->fetchAllByCompanyId($currentCompany->id);
1197
 
1198
                if($topics) {
1199
                    $topic_id = $topics[0]->id;
1200
                }  else {
1201
                    $topic_id = 0;
1202
                }
1203
 
1204
 
1205
                $form = new TopicCapsuleForm($this->adapter, $currentCompany->id, $topic_id);
1206
 
1207
 
1208
 
1209
                $this->layout()->setTemplate('layout/layout-backend');
1210
                $viewModel = new ViewModel();
1211
                $viewModel->setTemplate('leaders-linked/microlearning-reports/comments-for-capsule.phtml');
1212
                $viewModel->setVariables([
1213
                    'form' => $form,
1214
                ]);
1215
 
1216
                return $viewModel ;
1217
            }
1218
 
1219
        } else {
1220
            return new JsonModel([
1221
                'success' => false,
1222
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1223
            ]);
1224
        }
1225
    }
1226
 
1227
 
1228
 
483 efrain 1229
    public function progressForCapsulesAction()
1230
    {
1231
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1232
        $currentUser = $currentUserPlugin->getUser();
1233
        $currentCompany = $currentUserPlugin->getCompany();
1234
 
1235
        $request = $this->getRequest();
1236
 
1237
        if($request->isGet())
1238
        {
1239
 
1240
            $headers  = $request->getHeaders();
1241
 
1242
            $isJson = false;
1243
            if($headers->has('Accept')) {
1244
                $accept = $headers->get('Accept');
1245
 
1246
                $prioritized = $accept->getPrioritized();
1247
 
1248
                foreach($prioritized as $key => $value) {
1249
                    $raw = trim($value->getRaw());
1250
 
1251
                    if(!$isJson) {
1252
                        $isJson = strpos($raw, 'json');
1253
                    }
1254
 
1255
                }
1256
            }
1257
 
1258
            if($isJson) {
1259
                $topic_uuid     = filter_var($this->params()->fromQuery('topic_uuid'), FILTER_SANITIZE_STRING);
1260
                $capsule_uuid   = filter_var($this->params()->fromQuery('capsule_uuid'), FILTER_SANITIZE_STRING);
1261
 
1262
                $data = [
1263
                    'items' => [] ,
1264
                    'total' => 0,
1265
 
1266
                ];
1267
 
1268
 
1269
                if(!$topic_uuid) {
1270
                    return new JsonModel([
1271
                        'success' => true,
1272
                        'data' => $data
1273
                    ]);
1274
 
1275
                }
1276
 
1277
 
1278
                $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1279
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
1280
                if(!$topic) {
1281
                    return new JsonModel([
1282
                        'success' => true,
1283
                        'data' => 'ERROR_TOPIC_NOT_FOUND'
1284
                    ]);
1285
                }
1286
 
1287
                if($topic->company_id != $currentCompany->id) {
1288
                    return new JsonModel([
1289
                        'success' => true,
1290
                        'data' => 'ERROR_UNAUTHORIZED'
1291
                    ]);
1292
                }
1293
 
1294
 
1295
 
1296
                if(!$capsule_uuid) {
1297
                    $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1298
                    $records = $capsuleMapper->fetchAllByCompanyIdAndTopicId($topic->company_id, $topic->id);
1299
 
1300
                    $capsules = [];
1301
                    foreach($records as $record)
1302
                    {
1303
                        if(!$capsule_uuid) {
1304
                            $capsule_uuid = $record->uuid;
1305
                        }
1306
 
1307
                        $capsules[ $record->uuid ] = $record->name;
1308
                    }
1309
 
1310
                    $data['capsules']  = $capsules;
1311
                }
1312
 
1313
                if(!$capsule_uuid) {
1314
                    return new JsonModel([
1315
                        'success' => true,
1316
                        'data' => $data
1317
                    ]);
1318
 
1319
                }
1320
 
1321
                $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1322
                $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
1323
 
1324
 
1325
 
1326
                if(!$capsule) {
1327
                    return new JsonModel([
1328
                        'success' => true,
1329
                        'data' => 'ERROR_CAPSULE_NOT_FOUND'
1330
                    ]);
1331
                }
1332
 
1333
                if($capsule->topic_id != $topic->id) {
1334
                    return new JsonModel([
1335
                        'success' => true,
1336
                        'data' => 'ERROR_UNAUTHORIZED'
1337
                    ]);
1338
                }
1339
 
1340
 
1341
                $search = $this->params()->fromQuery('search', []);
1342
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
1343
 
1344
                $page               = intval($this->params()->fromQuery('start', 1), 10);
1345
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
1346
                $order =  $this->params()->fromQuery('order', []);
1347
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
1348
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
1349
 
1350
                $fields =  ['uuid', 'first_name', 'last_name', 'email', 'rating', 'comment', 'added_on'];
1351
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'added_on';
1352
 
1353
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
1354
                    $order_direction = 'DESC';
1355
                }
1356
 
1357
 
1358
                $queryMapper = QueryMapper::getInstance($this->adapter);
1359
                $sql = $queryMapper->getSql();
1360
                $select = $sql->select();
1361
                $select->columns(['access', 'paid_from', 'paid_to', 'added_on', 'updated_on']);
1362
                $select->from(['tb1' => CompanyMicrolearningCapsuleCommentMapper::_TABLE] );
1363
                $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
1364
                $select->where->equalTo('tb1.company_id', $capsule->company_id);
1365
                $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
1366
                $select->where->equalTo('tb1.capsule_id', $capsule->id);
1367
 
1368
                if($search) {
1369
                    $select->where->nest()
1370
                    ->like('first_name', '%' . $search . '%')
1371
                    ->or->like('last_name', '%' . $search . '%')
1372
                    ->or->like('email', '%' . $search . '%')
1373
                    ->unnest();
1374
 
1375
                }
1376
 
1377
 
1378
                $select->order($order_field . ' ' . $order_direction);
1379
 
1380
                $hydrator   = new ArraySerializableHydrator();
1381
                $resultset  = new HydratingResultSet($hydrator);
1382
 
1383
                $adapter = new DbSelect($select, $sql, $resultset);
1384
                $paginator = new Paginator($adapter);
1385
                $paginator->setItemCountPerPage($records_x_page);
1386
                $paginator->setCurrentPageNumber($page);
1387
 
1388
 
1389
                $items = [ ];
1390
                $records = $paginator->getCurrentItems();
1391
                foreach($records as $record)
1392
                {
1393
 
1394
 
1395
 
1396
                    $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
1397
                    $added_on = $dt_added_on->format('d/m/Y h:i a');
1398
 
1399
 
1400
                    $item = [
1401
                        'uuid' => $record['uuid'],
1402
                        'first_name' => $record['first_name'],
1403
                        'last_name' => $record['last_name'],
1404
                        'email' => $record['email'],
1405
                        'rating' => $record['rating'],
1406
                        'text' => $record['text'],
1407
                        'added_on' => $added_on,
1408
                    ];
1409
 
1410
 
1411
                    array_push($items, $item);
1412
 
1413
 
1414
                }
1415
 
1416
                $data['items'] = $items;
1417
                $data['total'] = $paginator->getTotalItemCount();
1418
 
1419
 
1420
                return new JsonModel([
1421
                    'success' => true,
1422
                    'data' => $data
1423
                ]);
1424
            } else {
1425
                $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1426
                $topics = $topicMapper->fetchAllByCompanyId($currentCompany->id);
1427
 
1428
                if($topics) {
1429
                    $topic_id = $topics[0]->id;
1430
                }  else {
1431
                    $topic_id = 0;
1432
                }
1433
 
1434
 
1435
                $form = new TopicCapsuleForm($this->adapter, $currentCompany->id, $topic_id);
1436
 
1437
 
1438
 
1439
                $this->layout()->setTemplate('layout/layout-backend');
1440
                $viewModel = new ViewModel();
1441
                $viewModel->setTemplate('leaders-linked/microlearning-reports/comments-for-capsule.phtml');
1442
                $viewModel->setVariables([
1443
                    'form' => $form,
1444
                ]);
1445
 
1446
                return $viewModel ;
1447
            }
1448
 
1449
        } else {
1450
            return new JsonModel([
1451
                'success' => false,
1452
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1453
            ]);
1454
        }
1455
    }
1456
 
1457
 
1458
 
1459
 
1 www 1460
 
1461
}