Proyectos de Subversion LeadersLinked - Backend

Rev

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