Proyectos de Subversion LeadersLinked - Backend

Rev

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