Proyectos de Subversion LeadersLinked - Backend

Rev

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