Proyectos de Subversion LeadersLinked - Backend

Rev

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

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