Proyectos de Subversion LeadersLinked - Backend

Rev

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