Proyectos de Subversion LeadersLinked - Backend

Rev

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