Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16769 | Rev 16998 | 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
 
16983 efrain 745
                    $count_users = 0;
1 www 746
                    $users = [];
16983 efrain 747
                    $count_errors = 0;
748
                    $errors = [];
1 www 749
 
750
 
751
                    $spreadsheet = IOFactory::load($final_filename);
752
                    $records = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
753
 
754
                    $emails = [];
16983 efrain 755
                    $row = 0;
1 www 756
 
757
                    foreach($records as $record)
758
                    {
15452 efrain 759
                        /*
760
                        A = Nombre
761
                        B = Apellido
762
                        C = Email
763
                        D = Contraseña
764
                        E = Empresa
765
                        F = Función
766
                        G = Grupo
767
                        H = Institución
768
                        I = Programa
769
                        J = Socio
770
                        K = Sector
771
                        L = Tipo de Estudiante
772
                        M = País
773
                        N = Es adulto
774
                        */
16983 efrain 775
                        $row++;
1 www 776
 
777
 
16766 efrain 778
                        $first_name = Functions::sanitizeFilterString($record['A']);
779
                        $last_name = Functions::sanitizeFilterString($record['B']);
15394 efrain 780
                        $email = trim(filter_var($record['C'], FILTER_SANITIZE_EMAIL));
16766 efrain 781
                        $password = Functions::sanitizeFilterString($record['D']);
1 www 782
 
16766 efrain 783
                        $company =  isset($record['E']) ? Functions::sanitizeFilterString($record['E']) : '';
784
                        $function = isset($record['F']) ? Functions::sanitizeFilterString($record['F']) : '';
785
                        $group = isset($record['G']) ? Functions::sanitizeFilterString($record['G']) : '';
786
                        $institution = isset($record['H']) ? Functions::sanitizeFilterString($record['H']) : '';
787
                        $program = isset($record['I']) ? Functions::sanitizeFilterString($record['I']) : '';
788
                        $partner = isset($record['J']) ? Functions::sanitizeFilterString($record['J']) : '';
789
                        $sector = isset($record['K']) ? Functions::sanitizeFilterString($record['K']) : '';
790
                        $studentType = isset($record['L']) ? Functions::sanitizeFilterString($record['L']) : '';
791
                        $country =  isset($record['M']) ? Functions::sanitizeFilterString($record['M']) : '';
792
                        $isAdult = isset($record['N']) ? Functions::sanitizeFilterString($record['N']) : '';
15452 efrain 793
 
15394 efrain 794
 
16983 efrain 795
                        if($row == 1) {
796
                            continue;
797
                        }
15394 efrain 798
 
129 efrain 799
                        //||  empty($password)
800
                        if(empty($first_name) || empty($last_name) || !filter_var($email, FILTER_VALIDATE_EMAIL) ) {
16983 efrain 801
 
802
 
803
 
1 www 804
                            continue;
16983 efrain 805
 
1 www 806
                        }
807
 
808
                        if(!in_array($email, $emails)) {
809
 
810
                            $user = $userMapper->fetchOneByEmail($email);
811
                            if($user) {
812
                                $assigned_capsules =  $capsuleUserMapper->fetchCountByCompanyIdAndTopicIdAndUserId($topic->company_id, $topic->id, $user->id);
813
                            } else {
814
                                $assigned_capsules = 0;
815
                            }
816
 
16983 efrain 817
                            $count_users++;
818
 
1 www 819
                            array_push($emails, $email);
820
                            array_push($users, [
16983 efrain 821
                                'id' => $count_users,
1 www 822
                                'first_name' => $first_name,
823
                                'last_name' => $last_name,
824
                                'password'  => $password,
825
                                'email' => $email,
826
                                'assigned_capsules' => $assigned_capsules,
15452 efrain 827
                                'company' => $company,
828
                                'function' => $function,
829
                                'group' => $group,
830
                                'institution' => $institution,
831
                                'program' => $program,
832
                                'partner' => $partner,
833
                                'sector' => $sector,
834
                                'studentType' => $studentType,
835
                                'country' => $country,
836
                                'isAdult' => $isAdult,
1 www 837
                            ]);
16983 efrain 838
                        } else {
839
                            $count_errors++;
840
                            array_push($errors,[
841
                                'id' => $count_errors,
842
                                'first_name' => $first_name,
843
                                'last_name' => $last_name,
844
                                'password'  => $password,
845
                                'email' => $email,
846
                                'status' => 'DUPLICATE IN EXCEL'
847
                            ]);
1 www 848
                        }
849
 
850
 
851
 
852
 
853
 
854
                    }
15457 efrain 855
 
1 www 856
 
857
                    $key = md5($currentUser->id . '-' . $topic->uuid . '-' . $capsule->uuid);
858
                    $this->cache->setItem($key, serialize($users));
859
 
860
                    return new JsonModel([
861
                        'success' => true,
862
                        'data' => [
863
                            'key' => $key,
864
                            'topic' => $topic->name,
865
                            'capsule' => $capsule->name,
16983 efrain 866
                            'items' => [
867
                                'ok' => $users,
868
                                'error' => $errors,
869
                            ],
1 www 870
                        ]
871
                    ]);
872
 
873
 
874
 
875
                } else {
876
                    $messages = [];
877
                    $form_messages = (array) $form->getMessages();
878
                    foreach($form_messages  as $fieldname => $field_messages)
879
                    {
880
 
881
                        $messages[$fieldname] = array_values($field_messages);
882
                    }
883
 
884
                    return new JsonModel([
885
                        'success'   => false,
886
                        'data'   => $messages
887
                    ]);
888
                }
889
            } else if($step == 'process') {
890
 
16766 efrain 891
                $key = Functions::sanitizeFilterString($this->params()->fromPost('key'));
1 www 892
                if(!$key) {
893
                    return new JsonModel([
894
                        'success' => false,
895
                        'data' => 'ERROR_CACHE_KEY_EMPTY'
896
                    ]);
897
                }
898
 
899
                $value = $this->cache->getItem($key);
900
                if(!$value) {
901
 
902
                    return new JsonModel([
903
                        'success' => false,
904
                        'data' => 'ERROR_CACHE_NOT_FOUND'
905
                    ]);
906
                }
907
 
908
                $records = unserialize($value);
909
                if(!$records) {
910
                    return new JsonModel([
911
                        'success' => false,
912
                        'data' => 'ERROR_CACHE_INVALID'
913
                    ]);
914
                }
915
 
16983 efrain 916
 
15455 efrain 917
 
16983 efrain 918
 
15453 efrain 919
                $networkMapper = NetworkMapper::getInstance($this->adapter);
920
                $companyMapper = CompanyMapper::getInstance($this->adapter);
921
                $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
922
 
923
                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
1 www 924
                $userMapper = UserMapper::getInstance($this->adapter);
925
                $userPasswordMapper = UserPasswordMapper::getInstance($this->adapter);
926
                $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
927
 
928
                $companyMicrolearningExtendUserMapper = CompanyMicrolearningExtendUserMapper::getInstance($this->adapter);
929
                $companyMicrolearningExtendUserCompanyMapper = CompanyMicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
930
                $companyMicrolearningExtendUserFunctionMapper = CompanyMicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
931
                $companyMicrolearningExtendUserGroupMapper = CompanyMicrolearningExtendUserGroupMapper::getInstance($this->adapter);
932
                $companyMicrolearningExtendUserInstitutionMapper = CompanyMicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
933
                $companyMicrolearningExtendUserProgramMapper = CompanyMicrolearningExtendUserProgramMapper::getInstance($this->adapter);
934
                $companyMicrolearningExtendUserPartnerMapper = CompanyMicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
935
                $companyMicrolearningExtendUserSectorMapper = CompanyMicrolearningExtendUserSectorMapper::getInstance($this->adapter);
936
                $companyMicrolearningExtendUserStudentTypeMapper = CompanyMicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
15394 efrain 937
                $companyMicrolearningExtendUserCountryMapper = CompanyMicrolearningExtendUserCountryMapper::getInstance($this->adapter);
4 efrain 938
 
1 www 939
 
15453 efrain 940
                $networkDefault = $networkMapper->fetchOneByDefault();
941
 
942
                //print_r($networkDefault);
943
 
944
                $userDefaultForConnection = $userMapper->fetchOneDefaultForConnection();
945
 
946
                //print_r($userDefaultForConnection);
947
 
948
 
949
                $companyForFollower = $companyMapper->fetchOneDefaultForFollowers();
950
                //print_r($companyForFollower);
15457 efrain 951
 
16983 efrain 952
                $csv = "FIRST NAME|LAST NAME|EMAIL|STATUS\r\n";
953
 
4 efrain 954
 
15457 efrain 955
                $users_processed = 0;
1 www 956
                $users_assigned = 0;
957
                $user_ids = [];
958
                foreach($records as $record)
959
                {
960
                    $first_name = $record['first_name'];
961
                    $last_name = $record['last_name'];
962
                    $password = $record['password'];
963
                    $email = $record['email'];
964
 
965
 
15452 efrain 966
                    $company = $record['company'];
967
                    $function = $record['function'];
968
                    $group = $record['group'];
969
                    $institution = $record['institution'];
970
                    $program = $record['program'];
971
                    $partner = $record['partner'];
972
                    $sector = $record['sector'];
973
                    $studentType = $record['studentType'];
974
                    $country = $record['country'];
15453 efrain 975
                    $isAdult = strtolower(trim( $record['isAdult'])) == User::IS_ADULT_YES;
976
 
977
 
1 www 978
                    $user = $userMapper->fetchOneByEmail($email);
979
                    if(!$user) {
980
 
981
 
129 efrain 982
                        if($password) {
983
                            $password_hash = password_hash($password, PASSWORD_DEFAULT);
984
 
985
                            $user = new User();
986
 
15452 efrain 987
                            $user->network_id = $currentNetwork->id;
129 efrain 988
                            $user->blocked = User::BLOCKED_NO;
989
                            $user->email_verified = User::EMAIL_VERIFIED_YES;
990
                            $user->email = $email;
991
                            $user->first_name = $first_name;
992
                            $user->last_name = $last_name;
993
                            $user->password = $password_hash;
994
                            $user->login_attempt = 0;
995
                            $user->usertype_id = UserType::USER;
996
                            $user->status = User::STATUS_ACTIVE;
15453 efrain 997
                            $user->is_adult = $isAdult ? User::IS_ADULT_YES : User::IS_ADULT_NO;
129 efrain 998
 
999
                            $result = $userMapper->insert($user);
1000
                            if($result) {
1001
                                $userPassword = new UserPassword();
1002
                                $userPassword->user_id = $user->id;
1003
                                $userPassword->password = $password_hash;
1004
                                $userPasswordMapper->insert($userPassword);
16983 efrain 1005
 
1006
 
1007
                                $csv .= "$first_name|$last_name|$email|CREATE USER \r\n";
129 efrain 1008
                            } else {
16983 efrain 1009
                                $csv .= "$first_name|$last_name|$email|FAIL CREATE USER \r\n";
1010
 
129 efrain 1011
                                continue;
1012
                            }
15453 efrain 1013
 
129 efrain 1014
                        }
1015
                    } else {
15453 efrain 1016
                        $user->is_adult = $isAdult ? User::IS_ADULT_YES : User::IS_ADULT_NO;
129 efrain 1017
                        if($user->email_verified == User::EMAIL_VERIFIED_NO || $user->status != User::STATUS_ACTIVE) {
1018
                            $user->email_verified = User::EMAIL_VERIFIED_YES;
1019
                            $user->status != User::STATUS_ACTIVE;
1020
 
15453 efrain 1021
 
129 efrain 1022
                        }
15453 efrain 1023
                        if(!$userMapper->update($user)) {
16983 efrain 1024
                            $csv .= "$first_name|$last_name|$email|FAIL UPDATE USER \r\n";
15453 efrain 1025
                            continue;
1026
                        }
129 efrain 1027
 
1028
 
1 www 1029
                    }
1030
 
15453 efrain 1031
 
1032
                    $user_id_in_default_network = 0;
1033
                    if($user->is_adult == User::IS_ADULT_YES) {
1034
 
1035
                        if($currentNetwork->default == Network::DEFAULT_YES) {
1036
 
1037
                            $user_id_in_default_network = $user->id;
1038
 
1039
 
1040
 
1041
                        } else {
1042
 
1043
                            $userInDefaultNetwork = $userMapper->fetchOneByEmailAndNetworkId($user->email, $networkDefault->id);
1044
                            if($userInDefaultNetwork) {
1045
                                $user_id_in_default_network = $userInDefaultNetwork->id;
1046
 
1047
                                if($userInDefaultNetwork->email_verified == User::EMAIL_VERIFIED_NO || $userInDefaultNetwork->status != User::STATUS_ACTIVE) {
1048
                                    $userInDefaultNetwork->email_verified = User::EMAIL_VERIFIED_YES;
1049
                                    $userInDefaultNetwork->status != User::STATUS_ACTIVE;
1050
 
1051
                                    if(!$userMapper->update($userInDefaultNetwork)) {
16983 efrain 1052
                                        $csv .= "$first_name|$last_name|$email|FAIL UPDATE USER IN DEFAULT NETWORK \r\n";
15453 efrain 1053
                                        continue;
1054
                                    }
1055
                                }
1056
 
1057
 
1058
                            } else {
1059
                                $userInDefaultNetwork = new User();
1060
                                $userInDefaultNetwork->network_id = $networkDefault->id;
1061
                                $userInDefaultNetwork->blocked = User::BLOCKED_NO;
1062
                                $userInDefaultNetwork->email_verified = User::EMAIL_VERIFIED_YES;
1063
                                $userInDefaultNetwork->email = $email;
1064
                                $userInDefaultNetwork->first_name = $first_name;
1065
                                $userInDefaultNetwork->last_name = $last_name;
1066
                                $userInDefaultNetwork->password = $password_hash;
1067
                                $userInDefaultNetwork->login_attempt = 0;
1068
                                $userInDefaultNetwork->usertype_id = UserType::USER;
1069
                                $userInDefaultNetwork->status = User::STATUS_ACTIVE;
1070
                                $userInDefaultNetwork->is_adult = $isAdult == User::IS_ADULT_YES;
1071
                                $result = $userMapper->insert($userInDefaultNetwork);
1072
                                if($result) {
1073
                                    $user_id_in_default_network = $userInDefaultNetwork->id;
1074
 
1075
 
1076
                                    $userPassword = new UserPassword();
1077
                                    $userPassword->user_id = $userInDefaultNetwork->id;
1078
                                    $userPassword->password = $password_hash;
1079
                                    $userPasswordMapper->insert($userPassword);
16983 efrain 1080
 
1081
                                    $csv .= "$first_name|$last_name|$email|CREATE USER IN DEFAULT NETWORK \r\n";
1082
                                } else {
1083
                                    $csv .= "$first_name|$last_name|$email|FAIL CREATE USER IN DEFAULT NETWORK \r\n";
15453 efrain 1084
                                }
1085
 
1086
                            }
1087
 
1088
 
1089
                        }
1090
                    }
1091
 
1092
                    if($user_id_in_default_network) {
1093
 
1094
                        if($userDefaultForConnection) {
1095
 
1096
                            $connection = $connectionMapper->fetchOneByUserId1AndUserId2($userDefaultForConnection->id, $user_id_in_default_network);
1097
                            if($connection) {
1098
                                if($connection->status != Connection::STATUS_ACCEPTED) {
1099
                                    $connection->status = Connection::STATUS_ACCEPTED;
1100
                                    $connectionMapper->update($connection);
1101
 
1102
                                }
1103
 
1104
 
1105
                            } else {
1106
                                $connection = new Connection();
1107
                                $connection->request_to = $user_id_in_default_network;
1108
                                $connection->request_from = $userDefaultForConnection->id;
1109
                                $connection->status = Connection::STATUS_ACCEPTED;
1110
                                $connectionMapper->insert($connection);
1111
                            }
1112
                        }
1113
 
1114
                        if($companyForFollower) {
1115
                            $companyFollower = $companyFollowerMapper->fetchOneByCompanyIdAndUserId($companyForFollower->id, $user_id_in_default_network);
1116
                            if(!$companyFollower) {
1117
                                $companyFollower = new CompanyFollower();
1118
                                $companyFollower->company_id = $companyForFollower->id;
1119
                                $companyFollower->follower_id = $user_id_in_default_network;
1120
 
1121
                                $companyFollowerMapper->insert($companyFollower);
1122
 
1123
 
1124
                            }
1125
                        }
1126
 
1127
 
1128
                    }
1129
 
1130
 
1 www 1131
                    if(!in_array($user->id, $user_ids)) {
1132
                        array_push($user_ids, $user->id);
1133
                    }
1134
 
4 efrain 1135
                    /*
1136
                    echo '$filterCompany = ' . $filterCompany . PHP_EOL;
1137
                    echo '$filterFunctio = ' . $filterFunction . PHP_EOL;
1138
                    echo '$filterGroup = ' . $filterGroup . PHP_EOL;
1139
                    echo '$filterInstitution = ' . $filterInstitution . PHP_EOL;
1140
                    echo '$filterPartner = ' . $filterPartner . PHP_EOL;
1141
                    echo '$filterProgram = ' . $filterProgram . PHP_EOL;
1142
                    echo '$filterSector = ' . $filterSector . PHP_EOL;
1143
                    echo '$filterStudentType = ' . $filterStudentType . PHP_EOL;
1144
                  */
1145
 
1146
 
1147
                    $extendUser = $companyMicrolearningExtendUserMapper->fetchOneByCompanyIdAndUserId($currentCompany->id, $user->id);
1148
                    if(!$extendUser) {
1149
                        $extendUser = new CompanyMicrolearningExtendUser();
1150
                        $extendUser->company_id = $currentCompany->id;
1151
                        $extendUser->user_id = $user->id;
1152
                    }
1153
 
1154
 
15452 efrain 1155
                    if($company) {
1156
                        $record = $companyMicrolearningExtendUserCompanyMapper->fetchOneByCompanyIdAndName($currentCompany->id, $company);
4 efrain 1157
 
1158
                        if(!$record) {
1159
                            $record = new CompanyMicrolearningExtendUserCompany();
1160
                            $record->company_id = $currentCompany->id;
15452 efrain 1161
                            $record->name = $company;
1 www 1162
 
4 efrain 1163
                            $companyMicrolearningExtendUserCompanyMapper->insert($record);
1164
                        }
1165
 
1166
 
1167
 
1 www 1168
 
4 efrain 1169
                        if($record->id) {
1170
                            $extendUser->extend_company_id = $record->id;
1171
                        }
1172
                    }
1 www 1173
 
15452 efrain 1174
                    if($function) {
1175
                        $record = $companyMicrolearningExtendUserFunctionMapper->fetchOneByCompanyIdAndName($currentCompany->id, $function);
4 efrain 1176
                        if(!$record) {
1177
                            $record = new CompanyMicrolearningExtendUserFunction();
1178
                            $record->company_id = $currentCompany->id;
15452 efrain 1179
                            $record->name = $function;
1 www 1180
 
4 efrain 1181
                            $companyMicrolearningExtendUserFunctionMapper->insert($record);
1182
                        }
1 www 1183
 
4 efrain 1184
                        if($record->id) {
1185
                            $extendUser->extend_function_id = $record->id;
1186
                        }
1187
                    }
1 www 1188
 
15452 efrain 1189
                    if($group) {
1190
                        $record = $companyMicrolearningExtendUserGroupMapper->fetchOneByCompanyIdAndName($currentCompany->id, $group);
4 efrain 1191
                        if(!$record) {
1192
                            $record = new CompanyMicrolearningExtendUserGroup();
1193
                            $record->company_id = $currentCompany->id;
15452 efrain 1194
                            $record->name = $group;
1 www 1195
 
4 efrain 1196
                            $companyMicrolearningExtendUserGroupMapper->insert($record);
1197
                        }
1 www 1198
 
4 efrain 1199
                        if($record->id) {
1200
                            $extendUser->extend_group_id = $record->id;
1201
                        }
1202
                    }
1 www 1203
 
15452 efrain 1204
                    if($institution) {
1205
                        $record = $companyMicrolearningExtendUserInstitutionMapper->fetchOneByCompanyIdAndName($currentCompany->id, $institution);
4 efrain 1206
                        if(!$record) {
1207
                            $record = new CompanyMicrolearningExtendUserInstitution();
1208
                            $record->company_id = $currentCompany->id;
15452 efrain 1209
                            $record->name = $institution;
1 www 1210
 
4 efrain 1211
                            $companyMicrolearningExtendUserInstitutionMapper->insert($record);
1212
                        }
1 www 1213
 
4 efrain 1214
                        if($record->id) {
1215
                            $extendUser->extend_institution_id = $record->id;
1216
                        }
1217
                    }
1 www 1218
 
15452 efrain 1219
                    if($program) {
1220
                        $record = $companyMicrolearningExtendUserProgramMapper->fetchOneByCompanyIdAndName($currentCompany->id, $program);
4 efrain 1221
                        if(!$record) {
1222
                            $record = new CompanyMicrolearningExtendUserProgram();
1223
                            $record->company_id = $currentCompany->id;
15452 efrain 1224
                            $record->name = $program;
1 www 1225
 
4 efrain 1226
                            $companyMicrolearningExtendUserProgramMapper->insert($record);
1227
                        }
1 www 1228
 
4 efrain 1229
                        if($record->id) {
1230
                            $extendUser->extend_program_id = $record->id;
1231
                        }
1232
                    }
1 www 1233
 
15452 efrain 1234
                    if($partner) {
4 efrain 1235
 
1236
 
15452 efrain 1237
                        $record = $companyMicrolearningExtendUserPartnerMapper->fetchOneByCompanyIdAndName($currentCompany->id, $partner);
4 efrain 1238
                        if(!$record) {
1239
                            $record = new CompanyMicrolearningExtendUserPartner();
1240
                            $record->company_id = $currentCompany->id;
15452 efrain 1241
                            $record->name = $partner;
1 www 1242
 
4 efrain 1243
                            $companyMicrolearningExtendUserPartnerMapper->insert($record);
1244
                        }
1 www 1245
 
4 efrain 1246
                        if($record->id) {
1247
                            $extendUser->extend_partner_id = $record->id;
1248
                        }
1249
                    }
1 www 1250
 
15452 efrain 1251
                    if($sector) {
1252
                        $record = $companyMicrolearningExtendUserSectorMapper->fetchOneByCompanyIdAndName($currentCompany->id, $sector);
4 efrain 1253
                        if(!$record) {
1254
                            $record = new CompanyMicrolearningExtendUserSector();
1255
                            $record->company_id = $currentCompany->id;
15452 efrain 1256
                            $record->name = $sector;
1 www 1257
 
4 efrain 1258
                            $companyMicrolearningExtendUserSectorMapper->insert($record);
1259
                        }
1 www 1260
 
4 efrain 1261
                        if($record->id) {
1262
                            $extendUser->extend_sector_id = $record->id;
1263
                        }
1264
                    }
1 www 1265
 
15452 efrain 1266
                    if($studentType) {
1267
                        $record = $companyMicrolearningExtendUserStudentTypeMapper->fetchOneByCompanyIdAndName($currentCompany->id, $studentType);
4 efrain 1268
                        if(!$record) {
1269
                            $record = new CompanyMicrolearningExtendUserStudentType();
1270
                            $record->company_id = $currentCompany->id;
15452 efrain 1271
                            $record->name = $studentType;
1 www 1272
 
4 efrain 1273
                            $companyMicrolearningExtendUserStudentTypeMapper->insert($record);
1274
                        }
1275
                        if($record->id) {
1276
                            $extendUser->extend_student_type_id = $record->id;
1277
                        }
1278
                    }
1279
 
15452 efrain 1280
                    if($country) {
1281
                        $record = $companyMicrolearningExtendUserCountryMapper->fetchOneByCompanyIdAndName($currentCompany->id, $country);
1282
                        if(!$record) {
1283
                            $record = new CompanyMicrolearningExtendUserCountry();
1284
                            $record->company_id = $currentCompany->id;
1285
                            $record->name = $country;
1286
 
1287
                            $companyMicrolearningExtendUserCountryMapper->insert($record);
1288
                        }
1289
                        if($record->id) {
1290
                            $extendUser->extend_country_id = $record->id;
1291
                        }
1292
                    }
4 efrain 1293
 
1294
 
15452 efrain 1295
 
1296
 
1 www 1297
 
4 efrain 1298
                    if($extendUser->id) {
1299
                       $result =   $companyMicrolearningExtendUserMapper->update($extendUser);
1300
                    } else {
1301
                       $result = $companyMicrolearningExtendUserMapper->insert($extendUser);
1302
                    }
1303
 
1304
 
1305
 
1 www 1306
                }
1307
 
4 efrain 1308
 
15457 efrain 1309
                $users_processed = 0;
1310
                $users_previous = 0;
1 www 1311
                foreach($user_ids as $user_id)
1312
                {
16983 efrain 1313
                    $user = $userMapper->fetchOne($user_id);
1314
                    $first_name = $user->first_name;
1315
                    $last_name = $user->last_name;
1316
                    $email = $user->email;
15457 efrain 1317
 
16983 efrain 1318
 
15457 efrain 1319
                    $users_processed++;
1 www 1320
                    $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user_id, $capsule->id);
15457 efrain 1321
                    if($capsuleUser) {
1322
                        $users_previous++;
16983 efrain 1323
                        $csv .= "$first_name|$last_name|$email|PREVIOUS FOUND \r\n";
15457 efrain 1324
                    } else {
1 www 1325
                        $capsuleUser = new CompanyMicrolearningCapsuleUser();
1326
                        $capsuleUser->company_id = $capsule->company_id;
1327
                        $capsuleUser->topic_id = $capsule->topic_id;
1328
                        $capsuleUser->capsule_id = $capsule->id;
1329
                        $capsuleUser->user_id = $user_id;
1330
                        $capsuleUser->access = CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED;
1331
 
1332
                        if($capsuleUserMapper->insert($capsuleUser)) {
16983 efrain 1333
                            $csv .= "$first_name|$last_name|$email|CAPSULE USER ASSIGNED\r\n";
1 www 1334
                            $users_assigned++;
1335
 
1336
 
1337
                            $capsuleUser = $capsuleUserMapper->fetchOne($capsuleUser->id);
1338
                            if($capsuleUser) {
1339
                                $companyMicrolearningUserMapper = CompanyMicrolearningUserMapper::getInstance($this->adapter);
1340
                                $companyMicrolearningUser = $companyMicrolearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
1341
                                if($companyMicrolearningUser) {
1342
                                    $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
1343
 
1344
                                    $companyMicrolearningUserMapper->update($companyMicrolearningUser);
1345
 
1346
                                } else {
1347
                                    $companyMicrolearningUser = new CompanyMicrolearningUser();
1348
                                    $companyMicrolearningUser->company_id = $capsuleUser->company_id;
1349
                                    $companyMicrolearningUser->user_id = $capsuleUser->user_id;
1350
                                    $companyMicrolearningUser->added_on = $capsuleUser->added_on;
1351
                                    $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
1352
 
1353
                                    $companyMicrolearningUserMapper->insert($companyMicrolearningUser);
1354
                                }
1355
                            }
16983 efrain 1356
                        } else {
1357
                            $csv .= "$first_name|$last_name|$email|CAPSULE USER PREVIOUS \r\n";
1 www 1358
                        }
1359
 
1360
                    }
1361
 
1362
 
1363
 
1364
                }
1365
 
15457 efrain 1366
                $users_in_the_capsule = $capsuleUserMapper->fetchCountByCompanyIdAndTopicIdAndCapsuleId($capsule->company_id, $capsule->topic_id, $capsule->id);
1367
 
1 www 1368
                return new JsonModel([
1369
                    'success' => true,
1370
                    'data' => [
15457 efrain 1371
                        'users_assigned' => $users_assigned,
1372
                        'users_processed' => $users_processed,
1373
                        'users_in_the_capsule' => $users_in_the_capsule,
16983 efrain 1374
                        'users_previous' => $users_previous,
1375
                        'csv_base64_content' => base64_encode($csv),
1376
                        'csv_filename' => 'capsule-users-' .date('Y-m-d-h-i-s').  '.csv'
1 www 1377
                    ]
1378
                ]);
1379
 
1380
 
1381
 
1382
 
1383
            } else {
1384
                return new JsonModel([
1385
                    'success' => false,
1386
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
1387
                ]);
1388
            }
1389
 
1390
 
1391
 
1392
 
1393
        }
1394
 
1395
        return new JsonModel([
1396
            'success' => false,
1397
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1398
        ]);
1399
    }
1400
 
1401
    public function notificationAction()
1402
    {
1403
        $request = $this->getRequest();
1404
 
1405
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1406
        $currentUser    = $currentUserPlugin->getUser();
1407
        $currentCompany = $currentUserPlugin->getCompany();
1408
 
1409
        $request    = $this->getRequest();
1410
        $topic_uuid     = $this->params()->fromRoute('topic_uuid');
1411
        $capsule_uuid   = $this->params()->fromRoute('capsule_uuid');
1412
 
1413
 
1414
        $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
1415
        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
1416
        if(!$topic) {
1417
            return new JsonModel([
1418
                'success'   => false,
1419
                'data'   => 'ERROR_TOPIC_NOT_FOUND'
1420
            ]);
1421
        }
1422
 
1423
 
1424
 
1425
        if($topic->company_id != $currentCompany->id) {
1426
            return new JsonModel([
1427
                'success'   => false,
1428
                'data'   => 'ERROR_UNAUTHORIZED'
1429
            ]);
1430
        }
1431
 
1432
        $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
1433
        $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
1434
        if(!$capsule) {
1435
            return new JsonModel([
1436
                'success'   => false,
1437
                'data'   => 'ERROR_CAPSULE_NOT_FOUND'
1438
            ]);
1439
        }
1440
 
1441
 
1442
        if($capsule->topic_id != $topic->id) {
1443
            return new JsonModel([
1444
                'success'   => false,
1445
                'data'   => 'ERROR_UNAUTHORIZED'
1446
            ]);
1447
        }
1448
 
1449
 
1450
        if($request->isPost()) {
1451
            $dataPost = $request->getPost()->toArray();
15390 efrain 1452
            $form = new PushMicrolearningNotificationForm($this->adapter, $currentCompany->id);
1 www 1453
 
1454
            $form->setData($dataPost);
1455
 
1456
            if($form->isValid()) {
1457
                $customer_uuids = $this->params()->fromPost('customer_uuids');
1458
                if(!$customer_uuids) {
1459
                    return new JsonModel([
1460
                        'success' => false,
1461
                        'data' => 'ERROR_NOT_SELECTED_CUSTOMERS'
1462
                    ]);
1463
 
1464
                }
1465
 
16766 efrain 1466
                $push_template_uuid = Functions::sanitizeFilterString($form->get('push_template_id')->getValue());
1 www 1467
                $pushMapper = PushMapper::getInstance($this->adapter);
1468
                $pushTemplateMapper = PushTemplateMapper::getInstance($this->adapter);
1469
                $pushTemplate = $pushTemplateMapper->fetchOneByUuid($push_template_uuid);
1470
 
1471
                if(!$pushTemplate) {
1472
                    return new JsonModel([
1473
                        'success' => false,
1474
                        'data' => 'ERROR_PUSH_TEMPLATE_NOT_FOUND'
1475
                    ]);
1476
                }
1477
 
1478
 
1479
 
1480
                $applicationMapper = ApplicationMapper::getInstance($this->adapter);
1481
                $application = $applicationMapper->fetchOne(Application::TWOGETSKILLS);
1482
 
1483
                $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
1484
 
1485
                $push_to_send = 0;
1486
 
1487
 
1488
 
1489
                $userMapper = UserMapper::getInstance($this->adapter);
1490
                $deviceHistoryMapper = DeviceHistoryMapper::getInstance($this->adapter);
1491
                foreach($customer_uuids as $customer_uuid)
1492
                {
1493
 
1494
 
1495
                    $user = $userMapper->fetchOneByUuid($customer_uuid);
1496
                    if(!$user) {
1497
                        continue;
1498
                    }
1499
 
1500
                    $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user->id, $capsule->id);
1501
                    if(!$capsuleUser) {
1502
                        continue;
1503
                    }
1504
 
1505
 
13755 efrain 1506
                    //$token = $deviceHistoryMapper->fetchLastDeviceTokenByApplicationIdAndUserId(Application::TWOGETSKILLS, $user->id);
1507
                    $device = $deviceHistoryMapper->fetchLastDeviceByApplicationIdAndUserId(Application::TWOGETSKILLS, $user->id);
1 www 1508
 
13755 efrain 1509
 
1510
 
1511
                    if($device && $device->token) {
1512
 
1513
                        $key = $application->key;
1514
                        if($device->variant_id) {
1515
 
1516
                            $applicationVariantMapper = ApplicationVariantMapper::getInstance($this->adapter);
1517
                            $applicationVariant = $applicationVariantMapper->fetchOneByApplicationIdAndVariantId($device->application_id, $device->variant_id);
1518
                            if($applicationVariant) {
1519
                                $key = $applicationVariant->key;
1520
                            } else {
1521
                                $applicationVariant = $applicationVariantMapper->fetchOneByApplicationIdAndDefault($device->application_id);
1522
                                if($applicationVariant) {
1523
                                    $key = $applicationVariant->key;
1524
                                }
1525
                            }
1526
 
1527
                        }
1528
 
1 www 1529
                        $push = new Push();
1530
                        $push->status = Push::STATUS_PENDING;
1531
                        $push->data = json_encode([
1532
                            'server' => [
13755 efrain 1533
                                'key' => $key,
1 www 1534
                            ],
1535
                            'push' => [
1536
                                'registration_ids'   => [
13755 efrain 1537
                                    $device->token,
1 www 1538
                                ],
1539
                                'notification' => [
1540
                                    'body' =>  $pushTemplate->body,
1541
                                    'title' => $pushTemplate->title,
1542
                                    'vibrate' => 1,
1543
                                    'sound' =>  1
1544
                                ],
1671 efrain 1545
                                'data' => [
10435 efrain 1546
                                    'command' => 'content-refresh',
1547
                                    'new_capsules' => '0',
1671 efrain 1548
                                ]
1 www 1549
                            ]
1550
                        ]);
1551
 
1552
                        if($pushMapper->insert($push)) {
1553
                            $push_to_send = $push_to_send + 1;
1554
                        }
1555
 
1556
                    }
1557
                }
1558
 
1559
                if(0 == $push_to_send) {
1560
                    return new JsonModel([
1561
                        'success' => false,
1562
                        'data' => 'ERROR_NO_USER_DEVICES_WERE_FOUND_TO_SEND_PUSH'
1563
                    ]);
1564
                }
1565
 
1566
 
1567
 
1568
 
1569
 
1570
                return new JsonModel([
1571
                    'success' => true,
1572
                    'data' => [
1573
                        'push_to_send' => $push_to_send,
1574
                    ]
1575
                ]);
1576
 
1577
 
1578
 
1579
 
1580
 
1581
            } else {
1582
 
1583
                $messages = [];
1584
                $form_messages = (array) $form->getMessages();
1585
                foreach($form_messages  as $fieldname => $field_messages)
1586
                {
1587
                    $messages[$fieldname] = array_values($field_messages);
1588
                }
1589
 
1590
                return new JsonModel([
1591
                    'success'   => false,
1592
                    'data'      => $messages
1593
                ]);
1594
            }
1595
        }
1596
 
1597
        return new JsonModel([
1598
            'success' => false,
1599
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1600
        ]);
1601
    }
1602
 
1603
 
1604
}