Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16769 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1320 efrain 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
16768 efrain 7
 
1320 efrain 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;
1320 efrain 14
use LeadersLinked\Form\TopicCapsuleForm;
15
use LeadersLinked\Form\PushMicrolearningNotificationForm;
16
use LeadersLinked\Mapper\QueryMapper;
17002 efrain 17
use LeadersLinked\Mapper\MicrolearningCapsuleUserMapper;
1320 efrain 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;
1320 efrain 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;
1320 efrain 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;
56
use LeadersLinked\Mapper\MicrolearningCapsuleCommentMapper;
16766 efrain 57
use LeadersLinked\Library\Functions;
16768 efrain 58
use LeadersLinked\Cache\CacheInterface;
59
use LeadersLinked\Cache\CacheImpl;
1320 efrain 60
 
61
 
62
class MicrolearningAccessForStudentsController extends AbstractActionController
63
{
64
    /**
65
     *
16769 efrain 66
     * @var \Laminas\Db\Adapter\AdapterInterface
1320 efrain 67
     */
68
    private $adapter;
69
 
70
    /**
71
     *
16769 efrain 72
     * @var \LeadersLinked\Cache\CacheInterface
1320 efrain 73
     */
16769 efrain 74
    private $cache;
75
 
76
 
77
    /**
78
     *
79
     * @var \Laminas\Log\LoggerInterface
80
     */
1320 efrain 81
    private $logger;
82
 
83
    /**
84
     *
85
     * @var array
86
     */
87
    private $config;
88
 
16769 efrain 89
 
1320 efrain 90
    /**
16769 efrain 91
     *
92
     * @var \Laminas\Mvc\I18n\Translator
16768 efrain 93
     */
16769 efrain 94
    private $translator;
16768 efrain 95
 
16769 efrain 96
 
16768 efrain 97
    /**
1320 efrain 98
     *
16769 efrain 99
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
100
     * @param \LeadersLinked\Cache\CacheInterface $cache
101
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
1320 efrain 102
     * @param array $config
16769 efrain 103
     * @param \Laminas\Mvc\I18n\Translator $translator
1320 efrain 104
     */
16769 efrain 105
    public function __construct($adapter, $cache, $logger, $config, $translator)
1320 efrain 106
    {
16769 efrain 107
        $this->adapter      = $adapter;
108
        $this->cache        = $cache;
109
        $this->logger       = $logger;
110
        $this->config       = $config;
111
        $this->translator   = $translator;
1320 efrain 112
    }
113
 
114
 
115
 
116
 
117
 
118
 
119
    public function revokeAction()
120
    {
121
        $request = $this->getRequest();
122
 
123
        $currentUserPlugin = $this->plugin('currentUserPlugin');
124
        $currentUser    = $currentUserPlugin->getUser();
125
        $currentCompany = $currentUserPlugin->getCompany();
126
 
127
        $request    = $this->getRequest();
128
        $topic_uuid     = $this->params()->fromRoute('topic_uuid');
129
        $capsule_uuid   = $this->params()->fromRoute('capsule_uuid');
130
        $user_uuid   = $this->params()->fromRoute('user_uuid');
131
 
132
 
17002 efrain 133
        $topicMapper = MicrolearningTopicMapper::getInstance($this->adapter);
1320 efrain 134
        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
135
        if(!$topic) {
136
            return new JsonModel([
137
                'success'   => false,
138
                'data'   => 'ERROR_TOPIC_NOT_FOUND'
139
            ]);
140
        }
141
 
142
 
143
 
144
        if($topic->company_id != $currentCompany->id) {
145
            return new JsonModel([
146
                'success'   => false,
147
                'data'   => 'ERROR_UNAUTHORIZED'
148
            ]);
149
        }
150
 
17002 efrain 151
        $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
1320 efrain 152
        $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
153
        if(!$capsule) {
154
            return new JsonModel([
155
                'success'   => false,
156
                'data'   => 'ERROR_CAPSULE_NOT_FOUND'
157
            ]);
158
        }
159
 
160
 
161
        if($capsule->topic_id != $topic->id) {
162
            return new JsonModel([
163
                'success'   => false,
164
                'data'   => 'ERROR_UNAUTHORIZED'
165
            ]);
166
        }
167
 
168
        $userMapper = UserMapper::getInstance($this->adapter);
169
        $user = $userMapper->fetchOneByUuid($user_uuid);
170
 
171
        if(!$user) {
172
            return new JsonModel([
173
                'success'   => false,
174
                'data'   => 'ERROR_USER_NOT_FOUND'
175
            ]);
176
        }
177
 
17002 efrain 178
        $capsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
1320 efrain 179
        $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user->id, $capsule->id);
180
        if(!$capsuleUser) {
181
            return new JsonModel([
182
                'success'   => false,
183
                'data'   => 'ERROR_UNAUTHORIZED'
184
            ]);
185
        }
186
 
187
        if($request->isPost()) {
188
 
189
 
17002 efrain 190
            if($capsuleUser->access != MicrolearningCapsuleUser::ACCESS_UNLIMITED) {
1320 efrain 191
                return new JsonModel([
192
                    'success'   => false,
193
                    'data'   => 'ERROR_USER_ACCESS_CANNT_BE_REVOKE'
194
                ]);
195
            }
17002 efrain 196
            $capsuleUser->access = MicrolearningCapsuleUser::ACCESS_REVOKE;
1320 efrain 197
            if($capsuleUserMapper->update($capsuleUser)) {
198
 
199
                $capsuleUser = $capsuleUserMapper->fetchOne($capsuleUser->id);
200
                if($capsuleUser) {
17002 efrain 201
                    $microlearningUserMapper = MicrolearningUserMapper::getInstance($this->adapter);
202
                    $microlearningUser = $microlearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
203
                    if($microlearningUser) {
204
                        $microlearningUser->updated_on = $capsuleUser->updated_on;
1320 efrain 205
 
17002 efrain 206
                        $microlearningUserMapper->update($microlearningUser);
1320 efrain 207
 
208
                    } else {
17002 efrain 209
                        $microlearningUser = new MicrolearningUser();
210
                        $microlearningUser->company_id = $capsuleUser->company_id;
211
                        $microlearningUser->user_id = $capsuleUser->user_id;
212
                        $microlearningUser->added_on = $capsuleUser->added_on;
213
                        $microlearningUser->updated_on = $capsuleUser->updated_on;
1320 efrain 214
 
17002 efrain 215
                        $microlearningUserMapper->insert($microlearningUser);
1320 efrain 216
                    }
217
                }
218
 
219
                return new JsonModel([
220
                    'success' => true,
221
                    'data' => 'LABEL_USER_ACCESS_HAS_BEEN_REVOKE'
222
                ]);
223
 
224
            } else {
225
 
226
                return new JsonModel([
227
                    'success'   => false,
228
                    'data'      => $capsuleUserMapper->getError()
229
                ]);
230
            }
231
        }
232
 
233
        return new JsonModel([
234
            'success' => false,
235
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
236
        ]);
237
    }
238
 
239
    public function unlimitAction()
240
    {
241
        $request = $this->getRequest();
242
 
243
        $currentUserPlugin = $this->plugin('currentUserPlugin');
244
        $currentUser    = $currentUserPlugin->getUser();
245
        $currentCompany = $currentUserPlugin->getCompany();
246
 
247
        $request    = $this->getRequest();
248
        $topic_uuid     = $this->params()->fromRoute('topic_uuid');
249
        $capsule_uuid   = $this->params()->fromRoute('capsule_uuid');
250
        $user_uuid   = $this->params()->fromRoute('user_uuid');
251
 
252
 
17002 efrain 253
        $topicMapper = MicrolearningTopicMapper::getInstance($this->adapter);
1320 efrain 254
        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
255
        if(!$topic) {
256
            return new JsonModel([
257
                'success'   => false,
258
                'data'   => 'ERROR_TOPIC_NOT_FOUND'
259
            ]);
260
        }
261
 
262
 
263
 
264
        if($topic->company_id != $currentCompany->id) {
265
            return new JsonModel([
266
                'success'   => false,
267
                'data'   => 'ERROR_UNAUTHORIZED'
268
            ]);
269
        }
270
 
17002 efrain 271
        $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
1320 efrain 272
        $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
273
        if(!$capsule) {
274
            return new JsonModel([
275
                'success'   => false,
276
                'data'   => 'ERROR_CAPSULE_NOT_FOUND'
277
            ]);
278
        }
279
 
280
 
281
        if($capsule->topic_id != $topic->id) {
282
            return new JsonModel([
283
                'success'   => false,
284
                'data'   => 'ERROR_UNAUTHORIZED'
285
            ]);
286
        }
287
 
288
        $userMapper = UserMapper::getInstance($this->adapter);
289
        $user = $userMapper->fetchOneByUuid($user_uuid);
290
 
291
        if(!$user) {
292
            return new JsonModel([
293
                'success'   => false,
294
                'data'   => 'ERROR_USER_NOT_FOUND'
295
            ]);
296
        }
297
 
17002 efrain 298
        $capsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
1320 efrain 299
        $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user->id, $capsule->id);
300
        if(!$capsuleUser) {
301
            return new JsonModel([
302
                'success'   => false,
303
                'data'   => 'ERROR_UNAUTHORIZED'
304
            ]);
305
        }
306
 
307
        if($request->isPost()) {
308
 
309
 
17002 efrain 310
            if($capsuleUser->access != MicrolearningCapsuleUser::ACCESS_REVOKE) {
1320 efrain 311
                return new JsonModel([
312
                    'success'   => false,
313
                    'data'   => 'ERROR_USER_ACCESS_CANNT_BE_UNLIMIT'
314
                ]);
315
            }
17002 efrain 316
            $capsuleUser->access = MicrolearningCapsuleUser::ACCESS_UNLIMITED;
1320 efrain 317
            if($capsuleUserMapper->update($capsuleUser)) {
318
 
319
                $capsuleUser = $capsuleUserMapper->fetchOne($capsuleUser->id);
320
                if($capsuleUser) {
17002 efrain 321
                    $microlearningUserMapper = MicrolearningUserMapper::getInstance($this->adapter);
322
                    $microlearningUser = $microlearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
323
                    if($microlearningUser) {
324
                        $microlearningUser->updated_on = $capsuleUser->updated_on;
1320 efrain 325
 
17002 efrain 326
                        $microlearningUserMapper->update($microlearningUser);
1320 efrain 327
 
328
                    } else {
17002 efrain 329
                        $microlearningUser = new MicrolearningUser();
330
                        $microlearningUser->company_id = $capsuleUser->company_id;
331
                        $microlearningUser->user_id = $capsuleUser->user_id;
332
                        $microlearningUser->added_on = $capsuleUser->added_on;
333
                        $microlearningUser->updated_on = $capsuleUser->updated_on;
1320 efrain 334
 
17002 efrain 335
                        $microlearningUserMapper->insert($microlearningUser);
1320 efrain 336
                    }
337
                }
338
 
339
                return new JsonModel([
340
                    'success' => true,
341
                    'data' => 'LABEL_USER_ACCESS_HAS_BEEN_UNLIMITED'
342
                ]);
343
 
344
            } else {
345
 
346
                return new JsonModel([
347
                    'success'   => false,
348
                    'data'      => $capsuleUserMapper->getError()
349
                ]);
350
            }
351
        }
352
 
353
        return new JsonModel([
354
            'success' => false,
355
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
356
        ]);
357
    }
358
 
359
    public function uploadAction()
360
    {
361
        $request = $this->getRequest();
362
 
363
        $currentUserPlugin = $this->plugin('currentUserPlugin');
364
        $currentUser    = $currentUserPlugin->getUser();
365
        $currentCompany = $currentUserPlugin->getCompany();
366
 
367
        $request    = $this->getRequest();
368
        $topic_uuid     = $this->params()->fromRoute('topic_uuid');
369
        $capsule_uuid   = $this->params()->fromRoute('capsule_uuid');
370
 
371
 
17002 efrain 372
        $topicMapper = MicrolearningTopicMapper::getInstance($this->adapter);
1320 efrain 373
        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
374
        if(!$topic) {
375
            return new JsonModel([
376
                'success'   => false,
377
                'data'   => 'ERROR_TOPIC_NOT_FOUND'
378
            ]);
379
        }
380
 
381
 
382
 
383
        if($topic->company_id != $currentCompany->id) {
384
            return new JsonModel([
385
                'success'   => false,
386
                'data'   => 'ERROR_UNAUTHORIZED'
387
            ]);
388
        }
389
 
17002 efrain 390
        $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
1320 efrain 391
        $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
392
        if(!$capsule) {
393
            return new JsonModel([
394
                'success'   => false,
395
                'data'   => 'ERROR_CAPSULE_NOT_FOUND'
396
            ]);
397
        }
398
 
399
 
400
        if($capsule->topic_id != $topic->id) {
401
            return new JsonModel([
402
                'success'   => false,
403
                'data'   => 'ERROR_UNAUTHORIZED'
404
            ]);
405
        }
406
 
407
 
408
 
409
        if($request->isPost()) {
410
 
16766 efrain 411
            $step = Functions::sanitizeFilterString($this->params()->fromPost('step'));
1320 efrain 412
            if($step == 'validation') {
413
                $userMapper = UserMapper::getInstance($this->adapter);
17002 efrain 414
                $capsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
1320 efrain 415
 
416
                $form = new  CapsuleCustomerUploadForm();
417
                $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
418
 
419
                $form->setData($dataPost);
420
 
421
                if($form->isValid()) {
422
 
423
                    $file = $_FILES['file'];
424
                    $tmp_filename = $file['tmp_name'];
425
                    $final_filename =  'data/' . $file['name'];
426
 
427
                    if(!move_uploaded_file($tmp_filename, $final_filename)) {
428
                        return new JsonModel([
429
                            'success' => false,
430
                            'data' => 'ERROR_UPLOAD_FILE'
431
                        ]);
432
                    }
433
 
434
 
435
                    $users = [];
436
 
437
 
438
                    $spreadsheet = IOFactory::load($final_filename);
439
                    $records = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
440
 
441
                    $emails = [];
442
 
443
                    foreach($records as $record)
444
                    {
445
                        //A = Nombre 	B = Apellidos	C = Email 	D = contraseña
446
 
447
 
448
                        $email = trim(filter_var($record['C'], FILTER_SANITIZE_EMAIL));
16766 efrain 449
                        $first_name = Functions::sanitizeFilterString($record['A']);
450
                        $last_name = Functions::sanitizeFilterString($record['B']);
451
                        $password = Functions::sanitizeFilterString($record['D']);
1320 efrain 452
 
16766 efrain 453
                        $filterCompany =  isset($record['E']) ? Functions::sanitizeFilterString($record['E']) : '';
454
                        $filterFunction = isset($record['F']) ? Functions::sanitizeFilterString($record['F']) : '';
455
                        $filterGroup = isset($record['G']) ? Functions::sanitizeFilterString($record['G']) : '';
456
                        $filterInstitution = isset($record['H']) ? Functions::sanitizeFilterString($record['H']) : '';
457
                        $filterProgram = isset($record['I']) ? Functions::sanitizeFilterString($record['I']) : '';
458
                        $filterPartner = isset($record['J']) ? Functions::sanitizeFilterString($record['J']) : '';
459
                        $filterSector = isset($record['K']) ? Functions::sanitizeFilterString($record['K']) : '';
460
                        $filterStudentType = isset($record['L']) ? Functions::sanitizeFilterString($record['L']) : '';
1320 efrain 461
 
462
 
463
                        //||  empty($password)
464
                        if(empty($first_name) || empty($last_name) || !filter_var($email, FILTER_VALIDATE_EMAIL) ) {
465
                            continue;
466
                        }
467
 
468
                        if(!in_array($email, $emails)) {
469
 
470
                            $user = $userMapper->fetchOneByEmail($email);
471
                            if($user) {
472
                                $assigned_capsules =  $capsuleUserMapper->fetchCountByCompanyIdAndTopicIdAndUserId($topic->company_id, $topic->id, $user->id);
473
                            } else {
474
                                $assigned_capsules = 0;
475
                            }
476
 
477
                            array_push($emails, $email);
478
                            array_push($users, [
479
                                'first_name' => $first_name,
480
                                'last_name' => $last_name,
481
                                'password'  => $password,
482
                                'email' => $email,
483
                                'assigned_capsules' => $assigned_capsules,
484
                                'filterCompany' => $filterCompany,
485
                                'filterFunction' => $filterFunction,
486
                                'filterGroup' => $filterGroup,
487
                                'filterInstitution' => $filterInstitution,
488
                                'filterProgram' => $filterProgram,
489
                                'filterPartner' => $filterPartner,
490
                                'filterSector' => $filterSector,
491
                                'filterStudentType' => $filterStudentType
492
                            ]);
493
                        }
494
 
495
 
496
 
497
 
498
 
499
                    }
500
 
501
                    $key = md5($currentUser->id . '-' . $topic->uuid . '-' . $capsule->uuid);
502
                    $this->cache->setItem($key, serialize($users));
503
 
504
                    return new JsonModel([
505
                        'success' => true,
506
                        'data' => [
507
                            'key' => $key,
508
                            'topic' => $topic->name,
509
                            'capsule' => $capsule->name,
510
                            'items' => $users,
511
                        ]
512
                    ]);
513
 
514
 
515
 
516
                } else {
517
                    $messages = [];
518
                    $form_messages = (array) $form->getMessages();
519
                    foreach($form_messages  as $fieldname => $field_messages)
520
                    {
521
 
522
                        $messages[$fieldname] = array_values($field_messages);
523
                    }
524
 
525
                    return new JsonModel([
526
                        'success'   => false,
527
                        'data'   => $messages
528
                    ]);
529
                }
530
            } else if($step == 'process') {
531
 
16766 efrain 532
                $key = Functions::sanitizeFilterString($this->params()->fromPost('key'));
1320 efrain 533
                if(!$key) {
534
                    return new JsonModel([
535
                        'success' => false,
536
                        'data' => 'ERROR_CACHE_KEY_EMPTY'
537
                    ]);
538
                }
539
 
540
                $value = $this->cache->getItem($key);
541
                if(!$value) {
542
 
543
                    return new JsonModel([
544
                        'success' => false,
545
                        'data' => 'ERROR_CACHE_NOT_FOUND'
546
                    ]);
547
                }
548
 
549
                $records = unserialize($value);
550
                if(!$records) {
551
                    return new JsonModel([
552
                        'success' => false,
553
                        'data' => 'ERROR_CACHE_INVALID'
554
                    ]);
555
                }
556
 
557
                $userMapper = UserMapper::getInstance($this->adapter);
558
                $userPasswordMapper = UserPasswordMapper::getInstance($this->adapter);
17002 efrain 559
                $capsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
1320 efrain 560
 
17002 efrain 561
                $microlearningExtendUserMapper = MicrolearningExtendUserMapper::getInstance($this->adapter);
562
                $microlearningExtendUserCompanyMapper = MicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
563
                $microlearningExtendUserFunctionMapper = MicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
564
                $microlearningExtendUserGroupMapper = MicrolearningExtendUserGroupMapper::getInstance($this->adapter);
565
                $microlearningExtendUserInstitutionMapper = MicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
566
                $microlearningExtendUserProgramMapper = MicrolearningExtendUserProgramMapper::getInstance($this->adapter);
567
                $microlearningExtendUserPartnerMapper = MicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
568
                $microlearningExtendUserSectorMapper = MicrolearningExtendUserSectorMapper::getInstance($this->adapter);
569
                $microlearningExtendUserStudentTypeMapper = MicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
1320 efrain 570
 
571
 
572
 
573
 
574
                $users_assigned = 0;
575
                $user_ids = [];
576
                foreach($records as $record)
577
                {
578
                    $first_name = $record['first_name'];
579
                    $last_name = $record['last_name'];
580
                    $password = $record['password'];
581
                    $email = $record['email'];
582
 
583
 
584
                    $filterCompany = $record['filterCompany'];
585
                    $filterFunction = $record['filterFunction'];
586
                    $filterGroup = $record['filterGroup'];
587
                    $filterInstitution = $record['filterInstitution'];
588
                    $filterProgram = $record['filterProgram'];
589
                    $filterPartner = $record['filterPartner'];
590
                    $filterSector = $record['filterSector'];
591
                    $filterStudentType = $record['filterStudentType'];
592
 
593
 
594
                    $user = $userMapper->fetchOneByEmail($email);
595
                    if(!$user) {
596
 
597
 
598
                        if($password) {
599
                            $password_hash = password_hash($password, PASSWORD_DEFAULT);
600
 
601
                            $user = new User();
602
 
603
                            $user->blocked = User::BLOCKED_NO;
604
                            $user->email_verified = User::EMAIL_VERIFIED_YES;
605
                            $user->email = $email;
606
                            $user->first_name = $first_name;
607
                            $user->last_name = $last_name;
608
                            $user->password = $password_hash;
609
                            $user->login_attempt = 0;
610
                            $user->usertype_id = UserType::USER;
611
                            $user->status = User::STATUS_ACTIVE;
612
 
613
                            $result = $userMapper->insert($user);
614
                            if($result) {
615
                                $userPassword = new UserPassword();
616
                                $userPassword->user_id = $user->id;
617
                                $userPassword->password = $password_hash;
618
                                $userPasswordMapper->insert($userPassword);
619
                            } else {
620
                                continue;
621
                            }
622
                        }
623
                    } else {
624
 
625
                        if($user->email_verified == User::EMAIL_VERIFIED_NO || $user->status != User::STATUS_ACTIVE) {
626
                            $user->email_verified = User::EMAIL_VERIFIED_YES;
627
                            $user->status != User::STATUS_ACTIVE;
628
 
629
                            if(!$userMapper->update($user)) {
630
                                continue;
631
                            }
632
                        }
633
 
634
 
635
                    }
636
 
637
                    if(!in_array($user->id, $user_ids)) {
638
                        array_push($user_ids, $user->id);
639
                    }
640
 
641
                    /*
642
                    echo '$filterCompany = ' . $filterCompany . PHP_EOL;
643
                    echo '$filterFunctio = ' . $filterFunction . PHP_EOL;
644
                    echo '$filterGroup = ' . $filterGroup . PHP_EOL;
645
                    echo '$filterInstitution = ' . $filterInstitution . PHP_EOL;
646
                    echo '$filterPartner = ' . $filterPartner . PHP_EOL;
647
                    echo '$filterProgram = ' . $filterProgram . PHP_EOL;
648
                    echo '$filterSector = ' . $filterSector . PHP_EOL;
649
                    echo '$filterStudentType = ' . $filterStudentType . PHP_EOL;
650
                  */
651
 
652
 
17002 efrain 653
                    $extendUser = $microlearningExtendUserMapper->fetchOneByCompanyIdAndUserId($currentCompany->id, $user->id);
1320 efrain 654
                    if(!$extendUser) {
17002 efrain 655
                        $extendUser = new MicrolearningExtendUser();
1320 efrain 656
                        $extendUser->company_id = $currentCompany->id;
657
                        $extendUser->user_id = $user->id;
658
                    }
659
 
660
 
661
                    if($filterCompany) {
17002 efrain 662
                        $record = $microlearningExtendUserCompanyMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterCompany);
1320 efrain 663
 
664
                        if(!$record) {
17002 efrain 665
                            $record = new MicrolearningExtendUserCompany();
1320 efrain 666
                            $record->company_id = $currentCompany->id;
667
                            $record->name = $filterCompany;
668
 
17002 efrain 669
                            $microlearningExtendUserCompanyMapper->insert($record);
1320 efrain 670
                        }
671
 
672
 
673
 
674
 
675
                        if($record->id) {
676
                            $extendUser->extend_company_id = $record->id;
677
                        }
678
                    }
679
 
680
                    if($filterFunction) {
17002 efrain 681
                        $record = $microlearningExtendUserFunctionMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterFunction);
1320 efrain 682
                        if(!$record) {
17002 efrain 683
                            $record = new MicrolearningExtendUserFunction();
1320 efrain 684
                            $record->company_id = $currentCompany->id;
685
                            $record->name = $filterFunction;
686
 
17002 efrain 687
                            $microlearningExtendUserFunctionMapper->insert($record);
1320 efrain 688
                        }
689
 
690
                        if($record->id) {
691
                            $extendUser->extend_function_id = $record->id;
692
                        }
693
                    }
694
 
695
                    if($filterGroup) {
17002 efrain 696
                        $record = $microlearningExtendUserGroupMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterGroup);
1320 efrain 697
                        if(!$record) {
17002 efrain 698
                            $record = new MicrolearningExtendUserGroup();
1320 efrain 699
                            $record->company_id = $currentCompany->id;
700
                            $record->name = $filterGroup;
701
 
17002 efrain 702
                            $microlearningExtendUserGroupMapper->insert($record);
1320 efrain 703
                        }
704
 
705
                        if($record->id) {
706
                            $extendUser->extend_group_id = $record->id;
707
                        }
708
                    }
709
 
710
                    if($filterInstitution) {
17002 efrain 711
                        $record = $microlearningExtendUserInstitutionMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterInstitution);
1320 efrain 712
                        if(!$record) {
17002 efrain 713
                            $record = new MicrolearningExtendUserInstitution();
1320 efrain 714
                            $record->company_id = $currentCompany->id;
715
                            $record->name = $filterInstitution;
716
 
17002 efrain 717
                            $microlearningExtendUserInstitutionMapper->insert($record);
1320 efrain 718
                        }
719
 
720
                        if($record->id) {
721
                            $extendUser->extend_institution_id = $record->id;
722
                        }
723
                    }
724
 
725
                    if($filterProgram) {
17002 efrain 726
                        $record = $microlearningExtendUserProgramMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterProgram);
1320 efrain 727
                        if(!$record) {
17002 efrain 728
                            $record = new MicrolearningExtendUserProgram();
1320 efrain 729
                            $record->company_id = $currentCompany->id;
730
                            $record->name = $filterProgram;
731
 
17002 efrain 732
                            $microlearningExtendUserProgramMapper->insert($record);
1320 efrain 733
                        }
734
 
735
                        if($record->id) {
736
                            $extendUser->extend_program_id = $record->id;
737
                        }
738
                    }
739
 
740
                    if($filterPartner) {
741
 
742
 
17002 efrain 743
                        $record = $microlearningExtendUserPartnerMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterPartner);
1320 efrain 744
                        if(!$record) {
17002 efrain 745
                            $record = new MicrolearningExtendUserPartner();
1320 efrain 746
                            $record->company_id = $currentCompany->id;
747
                            $record->name = $filterPartner;
748
 
17002 efrain 749
                            $microlearningExtendUserPartnerMapper->insert($record);
1320 efrain 750
                        }
751
 
752
                        if($record->id) {
753
                            $extendUser->extend_partner_id = $record->id;
754
                        }
755
                    }
756
 
757
                    if($filterSector) {
17002 efrain 758
                        $record = $microlearningExtendUserSectorMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterSector);
1320 efrain 759
                        if(!$record) {
17002 efrain 760
                            $record = new MicrolearningExtendUserSector();
1320 efrain 761
                            $record->company_id = $currentCompany->id;
762
                            $record->name = $filterSector;
763
 
17002 efrain 764
                            $microlearningExtendUserSectorMapper->insert($record);
1320 efrain 765
                        }
766
 
767
                        if($record->id) {
768
                            $extendUser->extend_sector_id = $record->id;
769
                        }
770
                    }
771
 
772
                    if($filterStudentType) {
17002 efrain 773
                        $record = $microlearningExtendUserStudentTypeMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterStudentType);
1320 efrain 774
                        if(!$record) {
17002 efrain 775
                            $record = new MicrolearningExtendUserStudentType();
1320 efrain 776
                            $record->company_id = $currentCompany->id;
777
                            $record->name = $filterStudentType;
778
 
17002 efrain 779
                            $microlearningExtendUserStudentTypeMapper->insert($record);
1320 efrain 780
                        }
781
                        if($record->id) {
782
                            $extendUser->extend_student_type_id = $record->id;
783
                        }
784
                    }
785
 
786
 
787
                    if($extendUser->id) {
17002 efrain 788
                       $result =   $microlearningExtendUserMapper->update($extendUser);
1320 efrain 789
                    } else {
17002 efrain 790
                       $result = $microlearningExtendUserMapper->insert($extendUser);
1320 efrain 791
                    }
792
 
793
 
794
 
795
                }
796
 
797
 
798
                foreach($user_ids as $user_id)
799
                {
800
                    $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user_id, $capsule->id);
801
                    if(!$capsuleUser) {
802
 
17002 efrain 803
                        $capsuleUser = new MicrolearningCapsuleUser();
1320 efrain 804
                        $capsuleUser->company_id = $capsule->company_id;
805
                        $capsuleUser->topic_id = $capsule->topic_id;
806
                        $capsuleUser->capsule_id = $capsule->id;
807
                        $capsuleUser->user_id = $user_id;
17002 efrain 808
                        $capsuleUser->access = MicrolearningCapsuleUser::ACCESS_UNLIMITED;
1320 efrain 809
 
810
                        if($capsuleUserMapper->insert($capsuleUser)) {
811
                            $users_assigned++;
812
 
813
 
814
                            $capsuleUser = $capsuleUserMapper->fetchOne($capsuleUser->id);
815
                            if($capsuleUser) {
17002 efrain 816
                                $microlearningUserMapper = MicrolearningUserMapper::getInstance($this->adapter);
817
                                $microlearningUser = $microlearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
818
                                if($microlearningUser) {
819
                                    $microlearningUser->updated_on = $capsuleUser->updated_on;
1320 efrain 820
 
17002 efrain 821
                                    $microlearningUserMapper->update($microlearningUser);
1320 efrain 822
 
823
                                } else {
17002 efrain 824
                                    $microlearningUser = new MicrolearningUser();
825
                                    $microlearningUser->company_id = $capsuleUser->company_id;
826
                                    $microlearningUser->user_id = $capsuleUser->user_id;
827
                                    $microlearningUser->added_on = $capsuleUser->added_on;
828
                                    $microlearningUser->updated_on = $capsuleUser->updated_on;
1320 efrain 829
 
17002 efrain 830
                                    $microlearningUserMapper->insert($microlearningUser);
1320 efrain 831
                                }
832
                            }
833
                        }
834
 
835
                    }
836
 
837
 
838
 
839
                }
840
 
841
                return new JsonModel([
842
                    'success' => true,
843
                    'data' => [
844
                        'users_assigned' => $users_assigned
845
                    ]
846
                ]);
847
 
848
 
849
 
850
 
851
            } else {
852
                return new JsonModel([
853
                    'success' => false,
854
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
855
                ]);
856
            }
857
 
858
 
859
 
860
 
861
        }
862
 
863
        return new JsonModel([
864
            'success' => false,
865
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
866
        ]);
867
    }
868
 
869
    public function notificationAction()
870
    {
871
        $request = $this->getRequest();
872
 
873
        $currentUserPlugin = $this->plugin('currentUserPlugin');
874
        $currentUser    = $currentUserPlugin->getUser();
875
        $currentCompany = $currentUserPlugin->getCompany();
876
 
877
        $request    = $this->getRequest();
878
        $topic_uuid     = $this->params()->fromRoute('topic_uuid');
879
        $capsule_uuid   = $this->params()->fromRoute('capsule_uuid');
880
 
881
 
17002 efrain 882
        $topicMapper = MicrolearningTopicMapper::getInstance($this->adapter);
1320 efrain 883
        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
884
        if(!$topic) {
885
            return new JsonModel([
886
                'success'   => false,
887
                'data'   => 'ERROR_TOPIC_NOT_FOUND'
888
            ]);
889
        }
890
 
891
 
892
 
893
        if($topic->company_id != $currentCompany->id) {
894
            return new JsonModel([
895
                'success'   => false,
896
                'data'   => 'ERROR_UNAUTHORIZED'
897
            ]);
898
        }
899
 
17002 efrain 900
        $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
1320 efrain 901
        $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
902
        if(!$capsule) {
903
            return new JsonModel([
904
                'success'   => false,
905
                'data'   => 'ERROR_CAPSULE_NOT_FOUND'
906
            ]);
907
        }
908
 
909
 
910
        if($capsule->topic_id != $topic->id) {
911
            return new JsonModel([
912
                'success'   => false,
913
                'data'   => 'ERROR_UNAUTHORIZED'
914
            ]);
915
        }
916
 
917
 
918
        if($request->isPost()) {
919
            $dataPost = $request->getPost()->toArray();
920
            $form = new PushMicrolearningNotificationForm($this->adapter);
921
 
922
            $form->setData($dataPost);
923
 
924
            if($form->isValid()) {
925
                $customer_uuids = $this->params()->fromPost('customer_uuids');
926
                if(!$customer_uuids) {
927
                    return new JsonModel([
928
                        'success' => false,
929
                        'data' => 'ERROR_NOT_SELECTED_CUSTOMERS'
930
                    ]);
931
 
932
                }
933
 
16766 efrain 934
                $push_template_uuid = Functions::sanitizeFilterString($form->get('push_template_id')->getValue());
1320 efrain 935
                $pushMapper = PushMapper::getInstance($this->adapter);
936
                $pushTemplateMapper = PushTemplateMapper::getInstance($this->adapter);
937
                $pushTemplate = $pushTemplateMapper->fetchOneByUuid($push_template_uuid);
938
 
939
                if(!$pushTemplate) {
940
                    return new JsonModel([
941
                        'success' => false,
942
                        'data' => 'ERROR_PUSH_TEMPLATE_NOT_FOUND'
943
                    ]);
944
                }
945
 
946
 
947
 
948
                $applicationMapper = ApplicationMapper::getInstance($this->adapter);
949
                $application = $applicationMapper->fetchOne(Application::TWOGETSKILLS);
950
 
17002 efrain 951
                $capsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
1320 efrain 952
 
953
                $push_to_send = 0;
954
 
955
 
956
 
957
                $userMapper = UserMapper::getInstance($this->adapter);
958
                $deviceHistoryMapper = DeviceHistoryMapper::getInstance($this->adapter);
959
                foreach($customer_uuids as $customer_uuid)
960
                {
961
 
962
 
963
                    $user = $userMapper->fetchOneByUuid($customer_uuid);
964
                    if(!$user) {
965
                        continue;
966
                    }
967
 
968
                    $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user->id, $capsule->id);
969
                    if(!$capsuleUser) {
970
                        continue;
971
                    }
972
 
973
 
974
                    $token = $deviceHistoryMapper->fetchLastDeviceTokenByApplicationIdAndUserId(Application::TWOGETSKILLS, $user->id);
975
 
976
                    if($token) {
977
                        $push = new Push();
978
                        $push->status = Push::STATUS_PENDING;
979
                        $push->data = json_encode([
980
                            'server' => [
981
                                'key' =>   $application->key,
982
                            ],
983
                            'push' => [
984
                                'registration_ids'   => [
985
                                    $token,
986
                                ],
987
                                'notification' => [
988
                                    'body' =>  $pushTemplate->body,
989
                                    'title' => $pushTemplate->title,
990
                                    'vibrate' => 1,
991
                                    'sound' =>  1
992
                                ],
993
                            ]
994
                        ]);
995
 
996
                        if($pushMapper->insert($push)) {
997
                            $push_to_send = $push_to_send + 1;
998
                        }
999
 
1000
                    }
1001
                }
1002
 
1003
                if(0 == $push_to_send) {
1004
                    return new JsonModel([
1005
                        'success' => false,
1006
                        'data' => 'ERROR_NO_USER_DEVICES_WERE_FOUND_TO_SEND_PUSH'
1007
                    ]);
1008
                }
1009
 
1010
 
1011
 
1012
 
1013
 
1014
                return new JsonModel([
1015
                    'success' => true,
1016
                    'data' => [
1017
                        'push_to_send' => $push_to_send,
1018
                    ]
1019
                ]);
1020
 
1021
 
1022
 
1023
 
1024
 
1025
            } else {
1026
 
1027
                $messages = [];
1028
                $form_messages = (array) $form->getMessages();
1029
                foreach($form_messages  as $fieldname => $field_messages)
1030
                {
1031
                    $messages[$fieldname] = array_values($field_messages);
1032
                }
1033
 
1034
                return new JsonModel([
1035
                    'success'   => false,
1036
                    'data'      => $messages
1037
                ]);
1038
            }
1039
        }
1040
 
1041
        return new JsonModel([
1042
            'success' => false,
1043
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1044
        ]);
1045
    }
1046
 
1047
 
1048
}