Proyectos de Subversion LeadersLinked - Backend

Rev

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