Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 17152 | Rev 17154 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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