Proyectos de Subversion LeadersLinked - Backend

Rev

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