Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15355 | Rev 15394 | 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\Mapper\CompanyMicrolearningTopicMapper;
13
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleMapper;
14
use LeadersLinked\Form\TopicCapsuleForm;
15
use LeadersLinked\Form\PushMicrolearningNotificationForm;
16
use LeadersLinked\Mapper\QueryMapper;
17
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;
18
use LeadersLinked\Mapper\UserMapper;
19
use Laminas\Hydrator\ArraySerializableHydrator;
20
use Laminas\Db\ResultSet\HydratingResultSet;
21
use Laminas\Paginator\Adapter\DbSelect;
22
use Laminas\Paginator\Paginator;
23
use LeadersLinked\Model\CompanyMicrolearningCapsuleUser;
24
use LeadersLinked\Mapper\ApplicationMapper;
25
use LeadersLinked\Mapper\PushMapper;
26
use LeadersLinked\Mapper\PushTemplateMapper;
27
use LeadersLinked\Mapper\DeviceHistoryMapper;
28
use LeadersLinked\Model\Push;
29
use LeadersLinked\Model\Application;
30
use LeadersLinked\Form\CapsuleCustomerUploadForm;
31
use PhpOffice\PhpSpreadsheet\IOFactory;
32
use LeadersLinked\Model\User;
33
use LeadersLinked\Model\UserType;
34
use LeadersLinked\Model\UserPassword;
35
use LeadersLinked\Mapper\CompanyMicrolearningUserMapper;
36
use LeadersLinked\Mapper\UserPasswordMapper;
37
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserMapper;
38
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserCompanyMapper;
39
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserFunctionMapper;
40
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserGroupMapper;
41
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserInstitutionMapper;
42
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserProgramMapper;
43
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserPartnerMapper;
44
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserSectorMapper;
45
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserStudentTypeMapper;
46
use LeadersLinked\Model\CompanyMicrolearningExtendUser;
47
use LeadersLinked\Model\CompanyMicrolearningExtendUserCompany;
48
use LeadersLinked\Model\CompanyMicrolearningExtendUserFunction;
49
use LeadersLinked\Model\CompanyMicrolearningExtendUserGroup;
50
use LeadersLinked\Model\CompanyMicrolearningExtendUserInstitution;
51
use LeadersLinked\Model\CompanyMicrolearningExtendUserProgram;
52
use LeadersLinked\Model\CompanyMicrolearningExtendUserPartner;
53
use LeadersLinked\Model\CompanyMicrolearningExtendUserSector;
54
use LeadersLinked\Model\CompanyMicrolearningExtendUserStudentType;
55
use LeadersLinked\Model\CompanyMicrolearningUser;
13755 efrain 56
use LeadersLinked\Mapper\ApplicationVariantMapper;
1 www 57
 
58
 
59
class MicrolearningAccessForStudentsController extends AbstractActionController
60
{
61
    /**
62
     *
63
     * @var AdapterInterface
64
     */
65
    private $adapter;
66
 
67
 
68
    /**
69
     *
70
     * @var AbstractAdapter
71
     */
72
    private $cache;
73
 
74
    /**
75
     *
76
     * @var  LoggerInterface
77
     */
78
    private $logger;
79
 
80
 
81
    /**
82
     *
83
     * @var array
84
     */
85
    private $config;
86
 
87
    /**
88
     *
89
     * @param AdapterInterface $adapter
90
     * @param AbstractAdapter $cache
91
     * @param LoggerInterface $logger
92
     * @param array $config
93
     */
94
    public function __construct($adapter, $cache , $logger,  $config)
95
    {
96
        $this->adapter      = $adapter;
97
        $this->cache        = $cache;
98
        $this->logger       = $logger;
99
        $this->config       = $config;
100
 
101
    }
102
 
103
    public function indexAction()
104
    {
105
        $currentUserPlugin = $this->plugin('currentUserPlugin');
106
        $currentUser = $currentUserPlugin->getUser();
107
        $currentCompany = $currentUserPlugin->getCompany();
108
 
109
        $request = $this->getRequest();
110
 
111
        if($request->isGet())
112
        {
113
 
114
            $headers  = $request->getHeaders();
115
 
116
            $isJson = false;
117
            if($headers->has('Accept')) {
118
                $accept = $headers->get('Accept');
119
 
120
                $prioritized = $accept->getPrioritized();
121
 
122
                foreach($prioritized as $key => $value) {
123
                    $raw = trim($value->getRaw());
124
 
125
                    if(!$isJson) {
126
                        $isJson = strpos($raw, 'json');
127
                    }
128
 
129
                }
130
            }
131
 
132
            if($isJson) {
133
                $topic_uuid     = filter_var($this->params()->fromQuery('topic_uuid'), FILTER_SANITIZE_STRING);
134
                $capsule_uuid   = filter_var($this->params()->fromQuery('capsule_uuid'), FILTER_SANITIZE_STRING);
135
 
136
                $data = [
137
                    'link_upload' => '',
138
                    'items' => [] ,
139
                    'total' => 0,
140
 
141
                ];
142
 
143
 
144
                if(!$topic_uuid) {
145
                    return new JsonModel([
146
                        'success' => true,
147
                        'data' => $data
148
                    ]);
149
 
150
                }
151
 
152
 
153
                $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
154
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
155
                if(!$topic) {
156
                    return new JsonModel([
157
                        'success' => true,
158
                        'data' => 'ERROR_TOPIC_NOT_FOUND'
159
                    ]);
160
                }
161
 
162
                if($topic->company_id != $currentCompany->id) {
163
                    return new JsonModel([
164
                        'success' => true,
165
                        'data' => 'ERROR_UNAUTHORIZED'
166
                    ]);
167
                }
168
 
169
 
170
 
171
                if(!$capsule_uuid) {
172
                    $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
173
                    $records = $capsuleMapper->fetchAllByCompanyIdAndTopicId($topic->company_id, $topic->id);
174
 
175
                    $capsules = [];
176
                    foreach($records as $record)
177
                    {
178
                        if(!$capsule_uuid) {
179
                            $capsule_uuid = $record->uuid;
180
                        }
181
 
182
                        $capsules[ $record->uuid ] = $record->name;
183
                    }
184
 
185
                    $data['capsules']  = $capsules;
186
                }
187
 
188
                if(!$capsule_uuid) {
189
                    return new JsonModel([
190
                        'success' => true,
191
                        'data' => $data
192
                    ]);
193
 
194
                }
195
 
196
                $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
197
                $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
198
 
199
 
200
 
201
                if(!$capsule) {
202
                    return new JsonModel([
203
                        'success' => true,
204
                        'data' => 'ERROR_CAPSULE_NOT_FOUND'
205
                    ]);
206
                }
207
 
208
                if($capsule->topic_id != $topic->id) {
209
                    return new JsonModel([
210
                        'success' => true,
211
                        'data' => 'ERROR_UNAUTHORIZED'
212
                    ]);
213
                }
214
 
215
 
216
                $data['link_upload'] = $this->url()->fromRoute('microlearning/access-for-students/upload',['topic_uuid' => $topic->uuid, 'capsule_uuid' => $capsule->uuid]);
217
                $data['link_notification'] = $this->url()->fromRoute('microlearning/access-for-students/notification',['topic_uuid' => $topic->uuid, 'capsule_uuid' => $capsule->uuid]);
218
 
219
                $search = $this->params()->fromQuery('search', []);
220
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
221
 
222
                $page               = intval($this->params()->fromQuery('start', 1), 10);
223
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
224
                $order =  $this->params()->fromQuery('order', []);
225
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
226
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
227
 
228
                $fields =  ['uuid', 'first_name', 'last_name', 'email'];
229
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'first_name';
230
 
231
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
232
                    $order_direction = 'ASC';
233
                }
234
 
235
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
236
                $allowRevoke = $acl->isAllowed($currentUser->usertype_id, 'microlearning/access-for-students/revoke');
237
                $allowUnlimit = $acl->isAllowed($currentUser->usertype_id, 'microlearning/access-for-students/unlimit');
238
                $allowCancel = $acl->isAllowed($currentUser->usertype_id, 'microlearning/access-for-students/cancel');
239
                $allowReactive = $acl->isAllowed($currentUser->usertype_id, 'microlearning/access-for-students/reactive');
240
 
241
                $queryMapper = QueryMapper::getInstance($this->adapter);
242
                $sql = $queryMapper->getSql();
243
                $select = $sql->select();
244
                $select->columns(['access', 'paid_from', 'paid_to', 'added_on', 'updated_on']);
245
                $select->from(['tb1' => CompanyMicrolearningCapsuleUserMapper::_TABLE] );
246
                $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);
247
                $select->where->equalTo('tb1.company_id', $capsule->company_id);
248
                $select->where->equalTo('tb1.topic_id', $capsule->topic_id);
249
                $select->where->equalTo('tb1.capsule_id', $capsule->id);
250
 
251
                if($search) {
252
                    $select->where->nest()
253
                    ->like('first_name', '%' . $search . '%')
254
                    ->or->like('last_name', '%' . $search . '%')
255
                    ->or->like('email', '%' . $search . '%')
256
                    ->unnest();
257
 
258
                }
259
 
260
 
261
                $select->order($order_field . ' ' . $order_direction);
262
 
263
                $hydrator   = new ArraySerializableHydrator();
264
                $resultset  = new HydratingResultSet($hydrator);
265
 
266
                $adapter = new DbSelect($select, $sql, $resultset);
267
                $paginator = new Paginator($adapter);
268
                $paginator->setItemCountPerPage($records_x_page);
269
                $paginator->setCurrentPageNumber($page);
270
 
271
 
272
                $items = [ ];
273
                $records = $paginator->getCurrentItems();
274
                foreach($records as $record)
275
                {
276
                    $params = [
277
                        'topic_uuid' => $topic->uuid,
278
                        'capsule_uuid' => $capsule->uuid,
279
                        'user_uuid' => $record['uuid']
280
                    ];
281
 
282
                    $actions = [];
283
 
284
 
285
 
286
                    switch($record['access'])
287
                    {
288
                        case CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED :
289
                            $actions['link_revoke'] = $allowRevoke ? $this->url()->fromRoute('microlearning/access-for-students/revoke', $params) : '';
290
                            $details['access'] = 'LABEL_UNLIMIT';
291
                            break;
292
 
293
                        case CompanyMicrolearningCapsuleUser::ACCESS_REVOKE :
294
                            $actions['link_unlimit'] = $allowUnlimit ? $this->url()->fromRoute('microlearning/access-for-students/unlimit', $params) : '';
295
                            $details['access'] = 'LABEL_REVOKED';
296
                            break;
297
 
298
                        case CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD :
299
                            $actions['link_cancel'] = $allowCancel ? $this->url()->fromRoute('microlearning/access-for-students/cancel', $params) : '';
300
 
301
                            $dt_paid_from = \DateTime::createFromFormat('Y-m-d', $record['paid_from']);
302
                            $dt_paid_to = \DateTime::createFromFormat('Y-m-d', $record['paid_to']);
303
 
304
                            $details['access'] = 'LABEL_PAY_PERIOD';
305
                            $details['paid_from'] = $dt_paid_from->format('d/m/Y');
306
                            $details['paid_to'] = $dt_paid_to->format('d/m/Y');
307
                            break;
308
 
309
                        case CompanyMicrolearningCapsuleUser::ACCESS_SUPENDED :
310
                            $dt_paid_from = \DateTime::createFromFormat('Y-m-d', $record['paid_from']);
311
                            $dt_paid_to = \DateTime::createFromFormat('Y-m-d', $record['paid_to']);
312
 
313
                            $details['access'] = 'LABEL_SUSPENDED';
314
                            $details['paid_from'] = $dt_paid_from->format('d/m/Y');
315
                            $details['paid_to'] = $dt_paid_to->format('d/m/Y');
316
                            break;
317
 
318
                        case CompanyMicrolearningCapsuleUser::ACCESS_CANCELLED :
319
 
320
                            $date = date('Y-m-d');
321
                            if($allowCancel && $record['paid_from'] <= $date && $record['paid_to'] >= $date) {
322
                                $actions['link_reactive'] = $allowReactive ? $this->url()->fromRoute('microlearning/access-for-students/reactive', $params) : '';
323
                            }
324
 
325
                            $dt_paid_from = \DateTime::createFromFormat('Y-m-d', $record['paid_from']);
326
                            $dt_paid_to = \DateTime::createFromFormat('Y-m-d', $record['paid_to']);
327
 
328
                            $details['access'] = 'LABEL_CANCELLED';
329
                            $details['paid_from'] = $dt_paid_from->format('d/m/Y');
330
                            $details['paid_to'] = $dt_paid_to->format('d/m/Y');
331
                            break;
332
 
333
                    }
334
 
335
                    $dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
336
                    $details['added_on'] = $dt_added_on->format('d/m/Y h:i a');
337
 
338
                    $dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);
339
                    $details['updated_on'] = $dt_updated_on->format('d/m/Y h:i a');
340
 
341
                    $item = [
342
                        'uuid' => $record['uuid'],
343
                        'first_name' => $record['first_name'],
344
                        'last_name' => $record['last_name'],
345
                        'email' => $record['email'],
346
                        'details' => $details,
347
                        'actions' => $actions
348
                    ];
349
 
350
 
351
                    array_push($items, $item);
352
 
353
 
354
                }
355
 
356
                $data['items'] = $items;
357
                $data['total'] = $paginator->getTotalItemCount();
358
 
359
 
360
                return new JsonModel([
361
                    'success' => true,
362
                    'data' => $data
363
                ]);
364
            } else {
365
                $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
366
                $topics = $topicMapper->fetchAllByCompanyId($currentCompany->id);
367
 
368
                if($topics) {
369
                    $topic_id = $topics[0]->id;
370
                }  else {
371
                    $topic_id = 0;
372
                }
373
 
374
 
375
                $form = new TopicCapsuleForm($this->adapter, $currentCompany->id, $topic_id);
15355 efrain 376
                $formPushNotification = new PushMicrolearningNotificationForm($this->adapter, $currentCompany->id);
1 www 377
                $formCapsuleCustomer = new CapsuleCustomerUploadForm();
378
 
379
 
380
 
381
                $this->layout()->setTemplate('layout/layout-backend');
382
                $viewModel = new ViewModel();
383
                $viewModel->setTemplate('leaders-linked/microlearning-access-for-students/index.phtml');
384
                $viewModel->setVariables([
385
                    'form' => $form,
386
                    'formPushNotification' => $formPushNotification,
387
                    'formCapsuleCustomer' => $formCapsuleCustomer
388
                ]);
389
 
390
                return $viewModel ;
391
            }
392
 
393
        } else {
394
            return new JsonModel([
395
                'success' => false,
396
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
187 efrain 397
            ]);
1 www 398
        }
399
    }
400
 
401
 
402
 
403
 
404
    public function revokeAction()
405
    {
406
        $request = $this->getRequest();
407
 
408
        $currentUserPlugin = $this->plugin('currentUserPlugin');
409
        $currentUser    = $currentUserPlugin->getUser();
410
        $currentCompany = $currentUserPlugin->getCompany();
411
 
412
        $request    = $this->getRequest();
413
        $topic_uuid     = $this->params()->fromRoute('topic_uuid');
414
        $capsule_uuid   = $this->params()->fromRoute('capsule_uuid');
415
        $user_uuid   = $this->params()->fromRoute('user_uuid');
416
 
417
 
418
        $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
419
        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
420
        if(!$topic) {
421
            return new JsonModel([
422
                'success'   => false,
423
                'data'   => 'ERROR_TOPIC_NOT_FOUND'
424
            ]);
425
        }
426
 
427
 
428
 
429
        if($topic->company_id != $currentCompany->id) {
430
            return new JsonModel([
431
                'success'   => false,
432
                'data'   => 'ERROR_UNAUTHORIZED'
433
            ]);
434
        }
435
 
436
        $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
437
        $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
438
        if(!$capsule) {
439
            return new JsonModel([
440
                'success'   => false,
441
                'data'   => 'ERROR_CAPSULE_NOT_FOUND'
442
            ]);
443
        }
444
 
445
 
446
        if($capsule->topic_id != $topic->id) {
447
            return new JsonModel([
448
                'success'   => false,
449
                'data'   => 'ERROR_UNAUTHORIZED'
450
            ]);
451
        }
452
 
453
        $userMapper = UserMapper::getInstance($this->adapter);
454
        $user = $userMapper->fetchOneByUuid($user_uuid);
455
 
456
        if(!$user) {
457
            return new JsonModel([
458
                'success'   => false,
459
                'data'   => 'ERROR_USER_NOT_FOUND'
460
            ]);
461
        }
462
 
463
        $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
464
        $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user->id, $capsule->id);
465
        if(!$capsuleUser) {
466
            return new JsonModel([
467
                'success'   => false,
468
                'data'   => 'ERROR_UNAUTHORIZED'
469
            ]);
470
        }
471
 
472
        if($request->isPost()) {
473
 
474
 
475
            if($capsuleUser->access != CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED) {
476
                return new JsonModel([
477
                    'success'   => false,
478
                    'data'   => 'ERROR_USER_ACCESS_CANNT_BE_REVOKE'
479
                ]);
480
            }
481
            $capsuleUser->access = CompanyMicrolearningCapsuleUser::ACCESS_REVOKE;
482
            if($capsuleUserMapper->update($capsuleUser)) {
483
 
484
                $capsuleUser = $capsuleUserMapper->fetchOne($capsuleUser->id);
485
                if($capsuleUser) {
486
                    $companyMicrolearningUserMapper = CompanyMicrolearningUserMapper::getInstance($this->adapter);
487
                    $companyMicrolearningUser = $companyMicrolearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
488
                    if($companyMicrolearningUser) {
489
                        $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
490
 
491
                        $companyMicrolearningUserMapper->update($companyMicrolearningUser);
492
 
493
                    } else {
494
                        $companyMicrolearningUser = new CompanyMicrolearningUser();
495
                        $companyMicrolearningUser->company_id = $capsuleUser->company_id;
496
                        $companyMicrolearningUser->user_id = $capsuleUser->user_id;
497
                        $companyMicrolearningUser->added_on = $capsuleUser->added_on;
498
                        $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
499
 
500
                        $companyMicrolearningUserMapper->insert($companyMicrolearningUser);
501
                    }
502
                }
503
 
504
                return new JsonModel([
505
                    'success' => true,
506
                    'data' => 'LABEL_USER_ACCESS_HAS_BEEN_REVOKE'
507
                ]);
508
 
509
            } else {
510
 
511
                return new JsonModel([
512
                    'success'   => false,
513
                    'data'      => $capsuleUserMapper->getError()
514
                ]);
515
            }
516
        }
517
 
518
        return new JsonModel([
519
            'success' => false,
520
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
521
        ]);
522
    }
523
 
524
    public function unlimitAction()
525
    {
526
        $request = $this->getRequest();
527
 
528
        $currentUserPlugin = $this->plugin('currentUserPlugin');
529
        $currentUser    = $currentUserPlugin->getUser();
530
        $currentCompany = $currentUserPlugin->getCompany();
531
 
532
        $request    = $this->getRequest();
533
        $topic_uuid     = $this->params()->fromRoute('topic_uuid');
534
        $capsule_uuid   = $this->params()->fromRoute('capsule_uuid');
535
        $user_uuid   = $this->params()->fromRoute('user_uuid');
536
 
537
 
538
        $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
539
        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
540
        if(!$topic) {
541
            return new JsonModel([
542
                'success'   => false,
543
                'data'   => 'ERROR_TOPIC_NOT_FOUND'
544
            ]);
545
        }
546
 
547
 
548
 
549
        if($topic->company_id != $currentCompany->id) {
550
            return new JsonModel([
551
                'success'   => false,
552
                'data'   => 'ERROR_UNAUTHORIZED'
553
            ]);
554
        }
555
 
556
        $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
557
        $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
558
        if(!$capsule) {
559
            return new JsonModel([
560
                'success'   => false,
561
                'data'   => 'ERROR_CAPSULE_NOT_FOUND'
562
            ]);
563
        }
564
 
565
 
566
        if($capsule->topic_id != $topic->id) {
567
            return new JsonModel([
568
                'success'   => false,
569
                'data'   => 'ERROR_UNAUTHORIZED'
570
            ]);
571
        }
572
 
573
        $userMapper = UserMapper::getInstance($this->adapter);
574
        $user = $userMapper->fetchOneByUuid($user_uuid);
575
 
576
        if(!$user) {
577
            return new JsonModel([
578
                'success'   => false,
579
                'data'   => 'ERROR_USER_NOT_FOUND'
580
            ]);
581
        }
582
 
583
        $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
584
        $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user->id, $capsule->id);
585
        if(!$capsuleUser) {
586
            return new JsonModel([
587
                'success'   => false,
588
                'data'   => 'ERROR_UNAUTHORIZED'
589
            ]);
590
        }
591
 
592
        if($request->isPost()) {
593
 
594
 
595
            if($capsuleUser->access != CompanyMicrolearningCapsuleUser::ACCESS_REVOKE) {
596
                return new JsonModel([
597
                    'success'   => false,
598
                    'data'   => 'ERROR_USER_ACCESS_CANNT_BE_UNLIMIT'
599
                ]);
600
            }
601
            $capsuleUser->access = CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED;
602
            if($capsuleUserMapper->update($capsuleUser)) {
603
 
604
                $capsuleUser = $capsuleUserMapper->fetchOne($capsuleUser->id);
605
                if($capsuleUser) {
606
                    $companyMicrolearningUserMapper = CompanyMicrolearningUserMapper::getInstance($this->adapter);
607
                    $companyMicrolearningUser = $companyMicrolearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
608
                    if($companyMicrolearningUser) {
609
                        $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
610
 
611
                        $companyMicrolearningUserMapper->update($companyMicrolearningUser);
612
 
613
                    } else {
614
                        $companyMicrolearningUser = new CompanyMicrolearningUser();
615
                        $companyMicrolearningUser->company_id = $capsuleUser->company_id;
616
                        $companyMicrolearningUser->user_id = $capsuleUser->user_id;
617
                        $companyMicrolearningUser->added_on = $capsuleUser->added_on;
618
                        $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
619
 
620
                        $companyMicrolearningUserMapper->insert($companyMicrolearningUser);
621
                    }
622
                }
623
 
624
                return new JsonModel([
625
                    'success' => true,
626
                    'data' => 'LABEL_USER_ACCESS_HAS_BEEN_UNLIMITED'
627
                ]);
628
 
629
            } else {
630
 
631
                return new JsonModel([
632
                    'success'   => false,
633
                    'data'      => $capsuleUserMapper->getError()
634
                ]);
635
            }
636
        }
637
 
638
        return new JsonModel([
639
            'success' => false,
640
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
641
        ]);
642
    }
643
 
644
    public function uploadAction()
645
    {
646
        $request = $this->getRequest();
647
 
648
        $currentUserPlugin = $this->plugin('currentUserPlugin');
649
        $currentUser    = $currentUserPlugin->getUser();
650
        $currentCompany = $currentUserPlugin->getCompany();
651
 
652
        $request    = $this->getRequest();
653
        $topic_uuid     = $this->params()->fromRoute('topic_uuid');
654
        $capsule_uuid   = $this->params()->fromRoute('capsule_uuid');
655
 
656
 
657
        $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
658
        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
659
        if(!$topic) {
660
            return new JsonModel([
661
                'success'   => false,
662
                'data'   => 'ERROR_TOPIC_NOT_FOUND'
663
            ]);
664
        }
665
 
666
 
667
 
668
        if($topic->company_id != $currentCompany->id) {
669
            return new JsonModel([
670
                'success'   => false,
671
                'data'   => 'ERROR_UNAUTHORIZED'
672
            ]);
673
        }
674
 
675
        $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
676
        $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
677
        if(!$capsule) {
678
            return new JsonModel([
679
                'success'   => false,
680
                'data'   => 'ERROR_CAPSULE_NOT_FOUND'
681
            ]);
682
        }
683
 
684
 
685
        if($capsule->topic_id != $topic->id) {
686
            return new JsonModel([
687
                'success'   => false,
688
                'data'   => 'ERROR_UNAUTHORIZED'
689
            ]);
690
        }
691
 
692
 
693
 
694
        if($request->isPost()) {
695
 
696
            $step = filter_var( $this->params()->fromPost('step'), FILTER_SANITIZE_STRING);
697
            if($step == 'validation') {
698
                $userMapper = UserMapper::getInstance($this->adapter);
699
                $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
700
 
701
                $form = new  CapsuleCustomerUploadForm();
702
                $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
703
 
704
                $form->setData($dataPost);
705
 
706
                if($form->isValid()) {
707
 
708
                    $file = $_FILES['file'];
709
                    $tmp_filename = $file['tmp_name'];
710
                    $final_filename =  'data/' . $file['name'];
711
 
712
                    if(!move_uploaded_file($tmp_filename, $final_filename)) {
713
                        return new JsonModel([
714
                            'success' => false,
715
                            'data' => 'ERROR_UPLOAD_FILE'
716
                        ]);
717
                    }
718
 
719
 
720
                    $users = [];
721
 
722
 
723
                    $spreadsheet = IOFactory::load($final_filename);
724
                    $records = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
725
 
726
                    $emails = [];
727
 
728
                    foreach($records as $record)
729
                    {
730
                        //A = Nombre 	B = Apellidos	C = Email 	D = contraseña
731
 
732
 
733
                        $email = trim(filter_var($record['C'], FILTER_SANITIZE_EMAIL));
734
                        $first_name = trim(filter_var($record['A'], FILTER_SANITIZE_STRING));
735
                        $last_name = trim(filter_var($record['B'], FILTER_SANITIZE_STRING));
736
                        $password = trim(filter_var($record['D'], FILTER_SANITIZE_STRING));
737
 
738
                        $filterCompany =  isset($record['E']) ? trim(filter_var($record['E'], FILTER_SANITIZE_STRING)) : '';
739
                        $filterFunction = isset($record['F']) ? trim(filter_var($record['F'], FILTER_SANITIZE_STRING)) : '';
740
                        $filterGroup = isset($record['G']) ? trim(filter_var($record['G'], FILTER_SANITIZE_STRING)) : '';
741
                        $filterInstitution = isset($record['H']) ? trim(filter_var($record['H'], FILTER_SANITIZE_STRING)) : '';
742
                        $filterProgram = isset($record['I']) ? trim(filter_var($record['I'], FILTER_SANITIZE_STRING)) : '';
743
                        $filterPartner = isset($record['J']) ? trim(filter_var($record['J'], FILTER_SANITIZE_STRING)) : '';
744
                        $filterSector = isset($record['K']) ? trim(filter_var($record['K'], FILTER_SANITIZE_STRING)) : '';
745
                        $filterStudentType = isset($record['L']) ? trim(filter_var($record['L'], FILTER_SANITIZE_STRING)) : '';
746
 
129 efrain 747
 
748
                        //||  empty($password)
749
                        if(empty($first_name) || empty($last_name) || !filter_var($email, FILTER_VALIDATE_EMAIL) ) {
1 www 750
                            continue;
751
                        }
752
 
753
                        if(!in_array($email, $emails)) {
754
 
755
                            $user = $userMapper->fetchOneByEmail($email);
756
                            if($user) {
757
                                $assigned_capsules =  $capsuleUserMapper->fetchCountByCompanyIdAndTopicIdAndUserId($topic->company_id, $topic->id, $user->id);
758
                            } else {
759
                                $assigned_capsules = 0;
760
                            }
761
 
762
                            array_push($emails, $email);
763
                            array_push($users, [
764
                                'first_name' => $first_name,
765
                                'last_name' => $last_name,
766
                                'password'  => $password,
767
                                'email' => $email,
768
                                'assigned_capsules' => $assigned_capsules,
769
                                'filterCompany' => $filterCompany,
770
                                'filterFunction' => $filterFunction,
771
                                'filterGroup' => $filterGroup,
772
                                'filterInstitution' => $filterInstitution,
773
                                'filterProgram' => $filterProgram,
774
                                'filterPartner' => $filterPartner,
775
                                'filterSector' => $filterSector,
776
                                'filterStudentType' => $filterStudentType
777
                            ]);
778
                        }
779
 
780
 
781
 
782
 
783
 
784
                    }
785
 
786
                    $key = md5($currentUser->id . '-' . $topic->uuid . '-' . $capsule->uuid);
787
                    $this->cache->setItem($key, serialize($users));
788
 
789
                    return new JsonModel([
790
                        'success' => true,
791
                        'data' => [
792
                            'key' => $key,
793
                            'topic' => $topic->name,
794
                            'capsule' => $capsule->name,
795
                            'items' => $users,
796
                        ]
797
                    ]);
798
 
799
 
800
 
801
                } else {
802
                    $messages = [];
803
                    $form_messages = (array) $form->getMessages();
804
                    foreach($form_messages  as $fieldname => $field_messages)
805
                    {
806
 
807
                        $messages[$fieldname] = array_values($field_messages);
808
                    }
809
 
810
                    return new JsonModel([
811
                        'success'   => false,
812
                        'data'   => $messages
813
                    ]);
814
                }
815
            } else if($step == 'process') {
816
 
817
                $key = filter_var( $this->params()->fromPost('key'), FILTER_SANITIZE_STRING);
818
                if(!$key) {
819
                    return new JsonModel([
820
                        'success' => false,
821
                        'data' => 'ERROR_CACHE_KEY_EMPTY'
822
                    ]);
823
                }
824
 
825
                $value = $this->cache->getItem($key);
826
                if(!$value) {
827
 
828
                    return new JsonModel([
829
                        'success' => false,
830
                        'data' => 'ERROR_CACHE_NOT_FOUND'
831
                    ]);
832
                }
833
 
834
                $records = unserialize($value);
835
                if(!$records) {
836
                    return new JsonModel([
837
                        'success' => false,
838
                        'data' => 'ERROR_CACHE_INVALID'
839
                    ]);
840
                }
841
 
842
                $userMapper = UserMapper::getInstance($this->adapter);
843
                $userPasswordMapper = UserPasswordMapper::getInstance($this->adapter);
844
                $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
845
 
846
                $companyMicrolearningExtendUserMapper = CompanyMicrolearningExtendUserMapper::getInstance($this->adapter);
847
                $companyMicrolearningExtendUserCompanyMapper = CompanyMicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
848
                $companyMicrolearningExtendUserFunctionMapper = CompanyMicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
849
                $companyMicrolearningExtendUserGroupMapper = CompanyMicrolearningExtendUserGroupMapper::getInstance($this->adapter);
850
                $companyMicrolearningExtendUserInstitutionMapper = CompanyMicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
851
                $companyMicrolearningExtendUserProgramMapper = CompanyMicrolearningExtendUserProgramMapper::getInstance($this->adapter);
852
                $companyMicrolearningExtendUserPartnerMapper = CompanyMicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
853
                $companyMicrolearningExtendUserSectorMapper = CompanyMicrolearningExtendUserSectorMapper::getInstance($this->adapter);
854
                $companyMicrolearningExtendUserStudentTypeMapper = CompanyMicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
855
 
4 efrain 856
 
1 www 857
 
4 efrain 858
 
1 www 859
                $users_assigned = 0;
860
                $user_ids = [];
861
                foreach($records as $record)
862
                {
863
                    $first_name = $record['first_name'];
864
                    $last_name = $record['last_name'];
865
                    $password = $record['password'];
866
                    $email = $record['email'];
867
 
868
 
869
                    $filterCompany = $record['filterCompany'];
870
                    $filterFunction = $record['filterFunction'];
871
                    $filterGroup = $record['filterGroup'];
872
                    $filterInstitution = $record['filterInstitution'];
873
                    $filterProgram = $record['filterProgram'];
874
                    $filterPartner = $record['filterPartner'];
875
                    $filterSector = $record['filterSector'];
876
                    $filterStudentType = $record['filterStudentType'];
877
 
878
 
879
                    $user = $userMapper->fetchOneByEmail($email);
880
                    if(!$user) {
881
 
882
 
129 efrain 883
                        if($password) {
884
                            $password_hash = password_hash($password, PASSWORD_DEFAULT);
885
 
886
                            $user = new User();
887
 
888
                            $user->blocked = User::BLOCKED_NO;
889
                            $user->email_verified = User::EMAIL_VERIFIED_YES;
890
                            $user->email = $email;
891
                            $user->first_name = $first_name;
892
                            $user->last_name = $last_name;
893
                            $user->password = $password_hash;
894
                            $user->login_attempt = 0;
895
                            $user->usertype_id = UserType::USER;
896
                            $user->status = User::STATUS_ACTIVE;
897
 
898
                            $result = $userMapper->insert($user);
899
                            if($result) {
900
                                $userPassword = new UserPassword();
901
                                $userPassword->user_id = $user->id;
902
                                $userPassword->password = $password_hash;
903
                                $userPasswordMapper->insert($userPassword);
904
                            } else {
905
                                continue;
906
                            }
907
                        }
908
                    } else {
1 www 909
 
129 efrain 910
                        if($user->email_verified == User::EMAIL_VERIFIED_NO || $user->status != User::STATUS_ACTIVE) {
911
                            $user->email_verified = User::EMAIL_VERIFIED_YES;
912
                            $user->status != User::STATUS_ACTIVE;
913
 
914
                            if(!$userMapper->update($user)) {
915
                                continue;
916
                            }
917
                        }
918
 
919
 
1 www 920
                    }
921
 
922
                    if(!in_array($user->id, $user_ids)) {
923
                        array_push($user_ids, $user->id);
924
                    }
925
 
4 efrain 926
                    /*
927
                    echo '$filterCompany = ' . $filterCompany . PHP_EOL;
928
                    echo '$filterFunctio = ' . $filterFunction . PHP_EOL;
929
                    echo '$filterGroup = ' . $filterGroup . PHP_EOL;
930
                    echo '$filterInstitution = ' . $filterInstitution . PHP_EOL;
931
                    echo '$filterPartner = ' . $filterPartner . PHP_EOL;
932
                    echo '$filterProgram = ' . $filterProgram . PHP_EOL;
933
                    echo '$filterSector = ' . $filterSector . PHP_EOL;
934
                    echo '$filterStudentType = ' . $filterStudentType . PHP_EOL;
935
                  */
936
 
937
 
938
                    $extendUser = $companyMicrolearningExtendUserMapper->fetchOneByCompanyIdAndUserId($currentCompany->id, $user->id);
939
                    if(!$extendUser) {
940
                        $extendUser = new CompanyMicrolearningExtendUser();
941
                        $extendUser->company_id = $currentCompany->id;
942
                        $extendUser->user_id = $user->id;
943
                    }
944
 
945
 
946
                    if($filterCompany) {
947
                        $record = $companyMicrolearningExtendUserCompanyMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterCompany);
948
 
949
                        if(!$record) {
950
                            $record = new CompanyMicrolearningExtendUserCompany();
951
                            $record->company_id = $currentCompany->id;
952
                            $record->name = $filterCompany;
1 www 953
 
4 efrain 954
                            $companyMicrolearningExtendUserCompanyMapper->insert($record);
955
                        }
956
 
957
 
958
 
1 www 959
 
4 efrain 960
                        if($record->id) {
961
                            $extendUser->extend_company_id = $record->id;
962
                        }
963
                    }
1 www 964
 
4 efrain 965
                    if($filterFunction) {
966
                        $record = $companyMicrolearningExtendUserFunctionMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterFunction);
967
                        if(!$record) {
968
                            $record = new CompanyMicrolearningExtendUserFunction();
969
                            $record->company_id = $currentCompany->id;
970
                            $record->name = $filterFunction;
1 www 971
 
4 efrain 972
                            $companyMicrolearningExtendUserFunctionMapper->insert($record);
973
                        }
1 www 974
 
4 efrain 975
                        if($record->id) {
976
                            $extendUser->extend_function_id = $record->id;
977
                        }
978
                    }
1 www 979
 
4 efrain 980
                    if($filterGroup) {
981
                        $record = $companyMicrolearningExtendUserGroupMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterGroup);
982
                        if(!$record) {
983
                            $record = new CompanyMicrolearningExtendUserGroup();
984
                            $record->company_id = $currentCompany->id;
985
                            $record->name = $filterGroup;
1 www 986
 
4 efrain 987
                            $companyMicrolearningExtendUserGroupMapper->insert($record);
988
                        }
1 www 989
 
4 efrain 990
                        if($record->id) {
991
                            $extendUser->extend_group_id = $record->id;
992
                        }
993
                    }
1 www 994
 
4 efrain 995
                    if($filterInstitution) {
996
                        $record = $companyMicrolearningExtendUserInstitutionMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterInstitution);
997
                        if(!$record) {
998
                            $record = new CompanyMicrolearningExtendUserInstitution();
999
                            $record->company_id = $currentCompany->id;
1000
                            $record->name = $filterInstitution;
1 www 1001
 
4 efrain 1002
                            $companyMicrolearningExtendUserInstitutionMapper->insert($record);
1003
                        }
1 www 1004
 
4 efrain 1005
                        if($record->id) {
1006
                            $extendUser->extend_institution_id = $record->id;
1007
                        }
1008
                    }
1 www 1009
 
4 efrain 1010
                    if($filterProgram) {
1011
                        $record = $companyMicrolearningExtendUserProgramMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterProgram);
1012
                        if(!$record) {
1013
                            $record = new CompanyMicrolearningExtendUserProgram();
1014
                            $record->company_id = $currentCompany->id;
1015
                            $record->name = $filterProgram;
1 www 1016
 
4 efrain 1017
                            $companyMicrolearningExtendUserProgramMapper->insert($record);
1018
                        }
1 www 1019
 
4 efrain 1020
                        if($record->id) {
1021
                            $extendUser->extend_program_id = $record->id;
1022
                        }
1023
                    }
1 www 1024
 
4 efrain 1025
                    if($filterPartner) {
1026
 
1027
 
1028
                        $record = $companyMicrolearningExtendUserPartnerMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterPartner);
1029
                        if(!$record) {
1030
                            $record = new CompanyMicrolearningExtendUserPartner();
1031
                            $record->company_id = $currentCompany->id;
1032
                            $record->name = $filterPartner;
1 www 1033
 
4 efrain 1034
                            $companyMicrolearningExtendUserPartnerMapper->insert($record);
1035
                        }
1 www 1036
 
4 efrain 1037
                        if($record->id) {
1038
                            $extendUser->extend_partner_id = $record->id;
1039
                        }
1040
                    }
1 www 1041
 
4 efrain 1042
                    if($filterSector) {
1043
                        $record = $companyMicrolearningExtendUserSectorMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterSector);
1044
                        if(!$record) {
1045
                            $record = new CompanyMicrolearningExtendUserSector();
1046
                            $record->company_id = $currentCompany->id;
1047
                            $record->name = $filterSector;
1 www 1048
 
4 efrain 1049
                            $companyMicrolearningExtendUserSectorMapper->insert($record);
1050
                        }
1 www 1051
 
4 efrain 1052
                        if($record->id) {
1053
                            $extendUser->extend_sector_id = $record->id;
1054
                        }
1055
                    }
1 www 1056
 
4 efrain 1057
                    if($filterStudentType) {
1058
                        $record = $companyMicrolearningExtendUserStudentTypeMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterStudentType);
1059
                        if(!$record) {
1060
                            $record = new CompanyMicrolearningExtendUserStudentType();
1061
                            $record->company_id = $currentCompany->id;
1062
                            $record->name = $filterStudentType;
1 www 1063
 
4 efrain 1064
                            $companyMicrolearningExtendUserStudentTypeMapper->insert($record);
1065
                        }
1066
                        if($record->id) {
1067
                            $extendUser->extend_student_type_id = $record->id;
1068
                        }
1069
                    }
1070
 
1071
                    //print_r($extendUser); exit;
1072
 
1073
 
1 www 1074
 
4 efrain 1075
                    if($extendUser->id) {
1076
                       $result =   $companyMicrolearningExtendUserMapper->update($extendUser);
1077
                    } else {
1078
                       $result = $companyMicrolearningExtendUserMapper->insert($extendUser);
1079
                    }
1080
 
1081
 
1082
 
1 www 1083
                }
1084
 
4 efrain 1085
 
1 www 1086
                foreach($user_ids as $user_id)
1087
                {
1088
                    $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user_id, $capsule->id);
1089
                    if(!$capsuleUser) {
1090
 
1091
                        $capsuleUser = new CompanyMicrolearningCapsuleUser();
1092
                        $capsuleUser->company_id = $capsule->company_id;
1093
                        $capsuleUser->topic_id = $capsule->topic_id;
1094
                        $capsuleUser->capsule_id = $capsule->id;
1095
                        $capsuleUser->user_id = $user_id;
1096
                        $capsuleUser->access = CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED;
1097
 
1098
                        if($capsuleUserMapper->insert($capsuleUser)) {
1099
                            $users_assigned++;
1100
 
1101
 
1102
                            $capsuleUser = $capsuleUserMapper->fetchOne($capsuleUser->id);
1103
                            if($capsuleUser) {
1104
                                $companyMicrolearningUserMapper = CompanyMicrolearningUserMapper::getInstance($this->adapter);
1105
                                $companyMicrolearningUser = $companyMicrolearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
1106
                                if($companyMicrolearningUser) {
1107
                                    $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
1108
 
1109
                                    $companyMicrolearningUserMapper->update($companyMicrolearningUser);
1110
 
1111
                                } else {
1112
                                    $companyMicrolearningUser = new CompanyMicrolearningUser();
1113
                                    $companyMicrolearningUser->company_id = $capsuleUser->company_id;
1114
                                    $companyMicrolearningUser->user_id = $capsuleUser->user_id;
1115
                                    $companyMicrolearningUser->added_on = $capsuleUser->added_on;
1116
                                    $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
1117
 
1118
                                    $companyMicrolearningUserMapper->insert($companyMicrolearningUser);
1119
                                }
1120
                            }
1121
                        }
1122
 
1123
                    }
1124
 
1125
 
1126
 
1127
                }
1128
 
1129
                return new JsonModel([
1130
                    'success' => true,
1131
                    'data' => [
1132
                        'users_assigned' => $users_assigned
1133
                    ]
1134
                ]);
1135
 
1136
 
1137
 
1138
 
1139
            } else {
1140
                return new JsonModel([
1141
                    'success' => false,
1142
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
1143
                ]);
1144
            }
1145
 
1146
 
1147
 
1148
 
1149
        }
1150
 
1151
        return new JsonModel([
1152
            'success' => false,
1153
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1154
        ]);
1155
    }
1156
 
1157
    public function notificationAction()
1158
    {
1159
        $request = $this->getRequest();
1160
 
1161
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1162
        $currentUser    = $currentUserPlugin->getUser();
1163
        $currentCompany = $currentUserPlugin->getCompany();
1164
 
1165
        $request    = $this->getRequest();
1166
        $topic_uuid     = $this->params()->fromRoute('topic_uuid');
1167
        $capsule_uuid   = $this->params()->fromRoute('capsule_uuid');
1168
 
1169
 
1170
        $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1171
        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
1172
        if(!$topic) {
1173
            return new JsonModel([
1174
                'success'   => false,
1175
                'data'   => 'ERROR_TOPIC_NOT_FOUND'
1176
            ]);
1177
        }
1178
 
1179
 
1180
 
1181
        if($topic->company_id != $currentCompany->id) {
1182
            return new JsonModel([
1183
                'success'   => false,
1184
                'data'   => 'ERROR_UNAUTHORIZED'
1185
            ]);
1186
        }
1187
 
1188
        $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1189
        $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
1190
        if(!$capsule) {
1191
            return new JsonModel([
1192
                'success'   => false,
1193
                'data'   => 'ERROR_CAPSULE_NOT_FOUND'
1194
            ]);
1195
        }
1196
 
1197
 
1198
        if($capsule->topic_id != $topic->id) {
1199
            return new JsonModel([
1200
                'success'   => false,
1201
                'data'   => 'ERROR_UNAUTHORIZED'
1202
            ]);
1203
        }
1204
 
1205
 
1206
        if($request->isPost()) {
1207
            $dataPost = $request->getPost()->toArray();
15390 efrain 1208
            $form = new PushMicrolearningNotificationForm($this->adapter, $currentCompany->id);
1 www 1209
 
1210
            $form->setData($dataPost);
1211
 
1212
            if($form->isValid()) {
1213
                $customer_uuids = $this->params()->fromPost('customer_uuids');
1214
                if(!$customer_uuids) {
1215
                    return new JsonModel([
1216
                        'success' => false,
1217
                        'data' => 'ERROR_NOT_SELECTED_CUSTOMERS'
1218
                    ]);
1219
 
1220
                }
1221
 
1222
                $push_template_uuid = filter_var($form->get('push_template_id')->getValue(), FILTER_SANITIZE_STRING);
1223
                $pushMapper = PushMapper::getInstance($this->adapter);
1224
                $pushTemplateMapper = PushTemplateMapper::getInstance($this->adapter);
1225
                $pushTemplate = $pushTemplateMapper->fetchOneByUuid($push_template_uuid);
1226
 
1227
                if(!$pushTemplate) {
1228
                    return new JsonModel([
1229
                        'success' => false,
1230
                        'data' => 'ERROR_PUSH_TEMPLATE_NOT_FOUND'
1231
                    ]);
1232
                }
1233
 
1234
 
1235
 
1236
                $applicationMapper = ApplicationMapper::getInstance($this->adapter);
1237
                $application = $applicationMapper->fetchOne(Application::TWOGETSKILLS);
1238
 
1239
                $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
1240
 
1241
                $push_to_send = 0;
1242
 
1243
 
1244
 
1245
                $userMapper = UserMapper::getInstance($this->adapter);
1246
                $deviceHistoryMapper = DeviceHistoryMapper::getInstance($this->adapter);
1247
                foreach($customer_uuids as $customer_uuid)
1248
                {
1249
 
1250
 
1251
                    $user = $userMapper->fetchOneByUuid($customer_uuid);
1252
                    if(!$user) {
1253
                        continue;
1254
                    }
1255
 
1256
                    $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user->id, $capsule->id);
1257
                    if(!$capsuleUser) {
1258
                        continue;
1259
                    }
1260
 
1261
 
13755 efrain 1262
                    //$token = $deviceHistoryMapper->fetchLastDeviceTokenByApplicationIdAndUserId(Application::TWOGETSKILLS, $user->id);
1263
                    $device = $deviceHistoryMapper->fetchLastDeviceByApplicationIdAndUserId(Application::TWOGETSKILLS, $user->id);
1 www 1264
 
13755 efrain 1265
 
1266
 
1267
                    if($device && $device->token) {
1268
 
1269
                        $key = $application->key;
1270
                        if($device->variant_id) {
1271
 
1272
                            $applicationVariantMapper = ApplicationVariantMapper::getInstance($this->adapter);
1273
                            $applicationVariant = $applicationVariantMapper->fetchOneByApplicationIdAndVariantId($device->application_id, $device->variant_id);
1274
                            if($applicationVariant) {
1275
                                $key = $applicationVariant->key;
1276
                            } else {
1277
                                $applicationVariant = $applicationVariantMapper->fetchOneByApplicationIdAndDefault($device->application_id);
1278
                                if($applicationVariant) {
1279
                                    $key = $applicationVariant->key;
1280
                                }
1281
                            }
1282
 
1283
                        }
1284
 
1 www 1285
                        $push = new Push();
1286
                        $push->status = Push::STATUS_PENDING;
1287
                        $push->data = json_encode([
1288
                            'server' => [
13755 efrain 1289
                                'key' => $key,
1 www 1290
                            ],
1291
                            'push' => [
1292
                                'registration_ids'   => [
13755 efrain 1293
                                    $device->token,
1 www 1294
                                ],
1295
                                'notification' => [
1296
                                    'body' =>  $pushTemplate->body,
1297
                                    'title' => $pushTemplate->title,
1298
                                    'vibrate' => 1,
1299
                                    'sound' =>  1
1300
                                ],
1671 efrain 1301
                                'data' => [
10435 efrain 1302
                                    'command' => 'content-refresh',
1303
                                    'new_capsules' => '0',
1671 efrain 1304
                                ]
1 www 1305
                            ]
1306
                        ]);
1307
 
1308
                        if($pushMapper->insert($push)) {
1309
                            $push_to_send = $push_to_send + 1;
1310
                        }
1311
 
1312
                    }
1313
                }
1314
 
1315
                if(0 == $push_to_send) {
1316
                    return new JsonModel([
1317
                        'success' => false,
1318
                        'data' => 'ERROR_NO_USER_DEVICES_WERE_FOUND_TO_SEND_PUSH'
1319
                    ]);
1320
                }
1321
 
1322
 
1323
 
1324
 
1325
 
1326
                return new JsonModel([
1327
                    'success' => true,
1328
                    'data' => [
1329
                        'push_to_send' => $push_to_send,
1330
                    ]
1331
                ]);
1332
 
1333
 
1334
 
1335
 
1336
 
1337
            } else {
1338
 
1339
                $messages = [];
1340
                $form_messages = (array) $form->getMessages();
1341
                foreach($form_messages  as $fieldname => $field_messages)
1342
                {
1343
                    $messages[$fieldname] = array_values($field_messages);
1344
                }
1345
 
1346
                return new JsonModel([
1347
                    'success'   => false,
1348
                    'data'      => $messages
1349
                ]);
1350
            }
1351
        }
1352
 
1353
        return new JsonModel([
1354
            'success' => false,
1355
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1356
        ]);
1357
    }
1358
 
1359
 
1360
}