Proyectos de Subversion LeadersLinked - Backend

Rev

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