Proyectos de Subversion LeadersLinked - Backend

Rev

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