Proyectos de Subversion LeadersLinked - Backend

Rev

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