Proyectos de Subversion LeadersLinked - Backend

Rev

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