Proyectos de Subversion LeadersLinked - Backend

Rev

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