Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16768 | Ir a la última revisión | | 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;
12
use LeadersLinked\Mapper\CompanyMicrolearningTopicMapper;
13
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleMapper;
14
use LeadersLinked\Form\TopicCapsuleForm;
15
use LeadersLinked\Form\PushMicrolearningNotificationForm;
16
use LeadersLinked\Mapper\QueryMapper;
17
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;
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;
23
use LeadersLinked\Model\CompanyMicrolearningCapsuleUser;
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;
35
use LeadersLinked\Mapper\CompanyMicrolearningUserMapper;
36
use LeadersLinked\Mapper\UserPasswordMapper;
37
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserMapper;
38
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserCompanyMapper;
39
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserFunctionMapper;
40
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserGroupMapper;
41
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserInstitutionMapper;
42
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserProgramMapper;
43
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserPartnerMapper;
44
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserSectorMapper;
45
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserStudentTypeMapper;
46
use LeadersLinked\Model\CompanyMicrolearningExtendUser;
47
use LeadersLinked\Model\CompanyMicrolearningExtendUserCompany;
48
use LeadersLinked\Model\CompanyMicrolearningExtendUserFunction;
49
use LeadersLinked\Model\CompanyMicrolearningExtendUserGroup;
50
use LeadersLinked\Model\CompanyMicrolearningExtendUserInstitution;
51
use LeadersLinked\Model\CompanyMicrolearningExtendUserProgram;
52
use LeadersLinked\Model\CompanyMicrolearningExtendUserPartner;
53
use LeadersLinked\Model\CompanyMicrolearningExtendUserSector;
54
use LeadersLinked\Model\CompanyMicrolearningExtendUserStudentType;
55
use LeadersLinked\Model\CompanyMicrolearningUser;
56
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleCommentMapper;
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
 
133
        $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
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
 
151
        $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
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
 
178
        $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
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
 
190
            if($capsuleUser->access != CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED) {
191
                return new JsonModel([
192
                    'success'   => false,
193
                    'data'   => 'ERROR_USER_ACCESS_CANNT_BE_REVOKE'
194
                ]);
195
            }
196
            $capsuleUser->access = CompanyMicrolearningCapsuleUser::ACCESS_REVOKE;
197
            if($capsuleUserMapper->update($capsuleUser)) {
198
 
199
                $capsuleUser = $capsuleUserMapper->fetchOne($capsuleUser->id);
200
                if($capsuleUser) {
201
                    $companyMicrolearningUserMapper = CompanyMicrolearningUserMapper::getInstance($this->adapter);
202
                    $companyMicrolearningUser = $companyMicrolearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
203
                    if($companyMicrolearningUser) {
204
                        $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
205
 
206
                        $companyMicrolearningUserMapper->update($companyMicrolearningUser);
207
 
208
                    } else {
209
                        $companyMicrolearningUser = new CompanyMicrolearningUser();
210
                        $companyMicrolearningUser->company_id = $capsuleUser->company_id;
211
                        $companyMicrolearningUser->user_id = $capsuleUser->user_id;
212
                        $companyMicrolearningUser->added_on = $capsuleUser->added_on;
213
                        $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
214
 
215
                        $companyMicrolearningUserMapper->insert($companyMicrolearningUser);
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
 
253
        $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
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
 
271
        $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
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
 
298
        $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
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
 
310
            if($capsuleUser->access != CompanyMicrolearningCapsuleUser::ACCESS_REVOKE) {
311
                return new JsonModel([
312
                    'success'   => false,
313
                    'data'   => 'ERROR_USER_ACCESS_CANNT_BE_UNLIMIT'
314
                ]);
315
            }
316
            $capsuleUser->access = CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED;
317
            if($capsuleUserMapper->update($capsuleUser)) {
318
 
319
                $capsuleUser = $capsuleUserMapper->fetchOne($capsuleUser->id);
320
                if($capsuleUser) {
321
                    $companyMicrolearningUserMapper = CompanyMicrolearningUserMapper::getInstance($this->adapter);
322
                    $companyMicrolearningUser = $companyMicrolearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
323
                    if($companyMicrolearningUser) {
324
                        $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
325
 
326
                        $companyMicrolearningUserMapper->update($companyMicrolearningUser);
327
 
328
                    } else {
329
                        $companyMicrolearningUser = new CompanyMicrolearningUser();
330
                        $companyMicrolearningUser->company_id = $capsuleUser->company_id;
331
                        $companyMicrolearningUser->user_id = $capsuleUser->user_id;
332
                        $companyMicrolearningUser->added_on = $capsuleUser->added_on;
333
                        $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
334
 
335
                        $companyMicrolearningUserMapper->insert($companyMicrolearningUser);
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
 
372
        $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
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
 
390
        $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
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);
414
                $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
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);
559
                $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
560
 
561
                $companyMicrolearningExtendUserMapper = CompanyMicrolearningExtendUserMapper::getInstance($this->adapter);
562
                $companyMicrolearningExtendUserCompanyMapper = CompanyMicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
563
                $companyMicrolearningExtendUserFunctionMapper = CompanyMicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
564
                $companyMicrolearningExtendUserGroupMapper = CompanyMicrolearningExtendUserGroupMapper::getInstance($this->adapter);
565
                $companyMicrolearningExtendUserInstitutionMapper = CompanyMicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
566
                $companyMicrolearningExtendUserProgramMapper = CompanyMicrolearningExtendUserProgramMapper::getInstance($this->adapter);
567
                $companyMicrolearningExtendUserPartnerMapper = CompanyMicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
568
                $companyMicrolearningExtendUserSectorMapper = CompanyMicrolearningExtendUserSectorMapper::getInstance($this->adapter);
569
                $companyMicrolearningExtendUserStudentTypeMapper = CompanyMicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
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
 
653
                    $extendUser = $companyMicrolearningExtendUserMapper->fetchOneByCompanyIdAndUserId($currentCompany->id, $user->id);
654
                    if(!$extendUser) {
655
                        $extendUser = new CompanyMicrolearningExtendUser();
656
                        $extendUser->company_id = $currentCompany->id;
657
                        $extendUser->user_id = $user->id;
658
                    }
659
 
660
 
661
                    if($filterCompany) {
662
                        $record = $companyMicrolearningExtendUserCompanyMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterCompany);
663
 
664
                        if(!$record) {
665
                            $record = new CompanyMicrolearningExtendUserCompany();
666
                            $record->company_id = $currentCompany->id;
667
                            $record->name = $filterCompany;
668
 
669
                            $companyMicrolearningExtendUserCompanyMapper->insert($record);
670
                        }
671
 
672
 
673
 
674
 
675
                        if($record->id) {
676
                            $extendUser->extend_company_id = $record->id;
677
                        }
678
                    }
679
 
680
                    if($filterFunction) {
681
                        $record = $companyMicrolearningExtendUserFunctionMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterFunction);
682
                        if(!$record) {
683
                            $record = new CompanyMicrolearningExtendUserFunction();
684
                            $record->company_id = $currentCompany->id;
685
                            $record->name = $filterFunction;
686
 
687
                            $companyMicrolearningExtendUserFunctionMapper->insert($record);
688
                        }
689
 
690
                        if($record->id) {
691
                            $extendUser->extend_function_id = $record->id;
692
                        }
693
                    }
694
 
695
                    if($filterGroup) {
696
                        $record = $companyMicrolearningExtendUserGroupMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterGroup);
697
                        if(!$record) {
698
                            $record = new CompanyMicrolearningExtendUserGroup();
699
                            $record->company_id = $currentCompany->id;
700
                            $record->name = $filterGroup;
701
 
702
                            $companyMicrolearningExtendUserGroupMapper->insert($record);
703
                        }
704
 
705
                        if($record->id) {
706
                            $extendUser->extend_group_id = $record->id;
707
                        }
708
                    }
709
 
710
                    if($filterInstitution) {
711
                        $record = $companyMicrolearningExtendUserInstitutionMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterInstitution);
712
                        if(!$record) {
713
                            $record = new CompanyMicrolearningExtendUserInstitution();
714
                            $record->company_id = $currentCompany->id;
715
                            $record->name = $filterInstitution;
716
 
717
                            $companyMicrolearningExtendUserInstitutionMapper->insert($record);
718
                        }
719
 
720
                        if($record->id) {
721
                            $extendUser->extend_institution_id = $record->id;
722
                        }
723
                    }
724
 
725
                    if($filterProgram) {
726
                        $record = $companyMicrolearningExtendUserProgramMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterProgram);
727
                        if(!$record) {
728
                            $record = new CompanyMicrolearningExtendUserProgram();
729
                            $record->company_id = $currentCompany->id;
730
                            $record->name = $filterProgram;
731
 
732
                            $companyMicrolearningExtendUserProgramMapper->insert($record);
733
                        }
734
 
735
                        if($record->id) {
736
                            $extendUser->extend_program_id = $record->id;
737
                        }
738
                    }
739
 
740
                    if($filterPartner) {
741
 
742
 
743
                        $record = $companyMicrolearningExtendUserPartnerMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterPartner);
744
                        if(!$record) {
745
                            $record = new CompanyMicrolearningExtendUserPartner();
746
                            $record->company_id = $currentCompany->id;
747
                            $record->name = $filterPartner;
748
 
749
                            $companyMicrolearningExtendUserPartnerMapper->insert($record);
750
                        }
751
 
752
                        if($record->id) {
753
                            $extendUser->extend_partner_id = $record->id;
754
                        }
755
                    }
756
 
757
                    if($filterSector) {
758
                        $record = $companyMicrolearningExtendUserSectorMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterSector);
759
                        if(!$record) {
760
                            $record = new CompanyMicrolearningExtendUserSector();
761
                            $record->company_id = $currentCompany->id;
762
                            $record->name = $filterSector;
763
 
764
                            $companyMicrolearningExtendUserSectorMapper->insert($record);
765
                        }
766
 
767
                        if($record->id) {
768
                            $extendUser->extend_sector_id = $record->id;
769
                        }
770
                    }
771
 
772
                    if($filterStudentType) {
773
                        $record = $companyMicrolearningExtendUserStudentTypeMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterStudentType);
774
                        if(!$record) {
775
                            $record = new CompanyMicrolearningExtendUserStudentType();
776
                            $record->company_id = $currentCompany->id;
777
                            $record->name = $filterStudentType;
778
 
779
                            $companyMicrolearningExtendUserStudentTypeMapper->insert($record);
780
                        }
781
                        if($record->id) {
782
                            $extendUser->extend_student_type_id = $record->id;
783
                        }
784
                    }
785
 
786
                    //print_r($extendUser); exit;
787
 
788
 
789
 
790
                    if($extendUser->id) {
791
                       $result =   $companyMicrolearningExtendUserMapper->update($extendUser);
792
                    } else {
793
                       $result = $companyMicrolearningExtendUserMapper->insert($extendUser);
794
                    }
795
 
796
 
797
 
798
                }
799
 
800
 
801
                foreach($user_ids as $user_id)
802
                {
803
                    $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user_id, $capsule->id);
804
                    if(!$capsuleUser) {
805
 
806
                        $capsuleUser = new CompanyMicrolearningCapsuleUser();
807
                        $capsuleUser->company_id = $capsule->company_id;
808
                        $capsuleUser->topic_id = $capsule->topic_id;
809
                        $capsuleUser->capsule_id = $capsule->id;
810
                        $capsuleUser->user_id = $user_id;
811
                        $capsuleUser->access = CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED;
812
 
813
                        if($capsuleUserMapper->insert($capsuleUser)) {
814
                            $users_assigned++;
815
 
816
 
817
                            $capsuleUser = $capsuleUserMapper->fetchOne($capsuleUser->id);
818
                            if($capsuleUser) {
819
                                $companyMicrolearningUserMapper = CompanyMicrolearningUserMapper::getInstance($this->adapter);
820
                                $companyMicrolearningUser = $companyMicrolearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
821
                                if($companyMicrolearningUser) {
822
                                    $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
823
 
824
                                    $companyMicrolearningUserMapper->update($companyMicrolearningUser);
825
 
826
                                } else {
827
                                    $companyMicrolearningUser = new CompanyMicrolearningUser();
828
                                    $companyMicrolearningUser->company_id = $capsuleUser->company_id;
829
                                    $companyMicrolearningUser->user_id = $capsuleUser->user_id;
830
                                    $companyMicrolearningUser->added_on = $capsuleUser->added_on;
831
                                    $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
832
 
833
                                    $companyMicrolearningUserMapper->insert($companyMicrolearningUser);
834
                                }
835
                            }
836
                        }
837
 
838
                    }
839
 
840
 
841
 
842
                }
843
 
844
                return new JsonModel([
845
                    'success' => true,
846
                    'data' => [
847
                        'users_assigned' => $users_assigned
848
                    ]
849
                ]);
850
 
851
 
852
 
853
 
854
            } else {
855
                return new JsonModel([
856
                    'success' => false,
857
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
858
                ]);
859
            }
860
 
861
 
862
 
863
 
864
        }
865
 
866
        return new JsonModel([
867
            'success' => false,
868
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
869
        ]);
870
    }
871
 
872
    public function notificationAction()
873
    {
874
        $request = $this->getRequest();
875
 
876
        $currentUserPlugin = $this->plugin('currentUserPlugin');
877
        $currentUser    = $currentUserPlugin->getUser();
878
        $currentCompany = $currentUserPlugin->getCompany();
879
 
880
        $request    = $this->getRequest();
881
        $topic_uuid     = $this->params()->fromRoute('topic_uuid');
882
        $capsule_uuid   = $this->params()->fromRoute('capsule_uuid');
883
 
884
 
885
        $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
886
        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
887
        if(!$topic) {
888
            return new JsonModel([
889
                'success'   => false,
890
                'data'   => 'ERROR_TOPIC_NOT_FOUND'
891
            ]);
892
        }
893
 
894
 
895
 
896
        if($topic->company_id != $currentCompany->id) {
897
            return new JsonModel([
898
                'success'   => false,
899
                'data'   => 'ERROR_UNAUTHORIZED'
900
            ]);
901
        }
902
 
903
        $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
904
        $capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
905
        if(!$capsule) {
906
            return new JsonModel([
907
                'success'   => false,
908
                'data'   => 'ERROR_CAPSULE_NOT_FOUND'
909
            ]);
910
        }
911
 
912
 
913
        if($capsule->topic_id != $topic->id) {
914
            return new JsonModel([
915
                'success'   => false,
916
                'data'   => 'ERROR_UNAUTHORIZED'
917
            ]);
918
        }
919
 
920
 
921
        if($request->isPost()) {
922
            $dataPost = $request->getPost()->toArray();
923
            $form = new PushMicrolearningNotificationForm($this->adapter);
924
 
925
            $form->setData($dataPost);
926
 
927
            if($form->isValid()) {
928
                $customer_uuids = $this->params()->fromPost('customer_uuids');
929
                if(!$customer_uuids) {
930
                    return new JsonModel([
931
                        'success' => false,
932
                        'data' => 'ERROR_NOT_SELECTED_CUSTOMERS'
933
                    ]);
934
 
935
                }
936
 
16766 efrain 937
                $push_template_uuid = Functions::sanitizeFilterString($form->get('push_template_id')->getValue());
1320 efrain 938
                $pushMapper = PushMapper::getInstance($this->adapter);
939
                $pushTemplateMapper = PushTemplateMapper::getInstance($this->adapter);
940
                $pushTemplate = $pushTemplateMapper->fetchOneByUuid($push_template_uuid);
941
 
942
                if(!$pushTemplate) {
943
                    return new JsonModel([
944
                        'success' => false,
945
                        'data' => 'ERROR_PUSH_TEMPLATE_NOT_FOUND'
946
                    ]);
947
                }
948
 
949
 
950
 
951
                $applicationMapper = ApplicationMapper::getInstance($this->adapter);
952
                $application = $applicationMapper->fetchOne(Application::TWOGETSKILLS);
953
 
954
                $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
955
 
956
                $push_to_send = 0;
957
 
958
 
959
 
960
                $userMapper = UserMapper::getInstance($this->adapter);
961
                $deviceHistoryMapper = DeviceHistoryMapper::getInstance($this->adapter);
962
                foreach($customer_uuids as $customer_uuid)
963
                {
964
 
965
 
966
                    $user = $userMapper->fetchOneByUuid($customer_uuid);
967
                    if(!$user) {
968
                        continue;
969
                    }
970
 
971
                    $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user->id, $capsule->id);
972
                    if(!$capsuleUser) {
973
                        continue;
974
                    }
975
 
976
 
977
                    $token = $deviceHistoryMapper->fetchLastDeviceTokenByApplicationIdAndUserId(Application::TWOGETSKILLS, $user->id);
978
 
979
                    if($token) {
980
                        $push = new Push();
981
                        $push->status = Push::STATUS_PENDING;
982
                        $push->data = json_encode([
983
                            'server' => [
984
                                'key' =>   $application->key,
985
                            ],
986
                            'push' => [
987
                                'registration_ids'   => [
988
                                    $token,
989
                                ],
990
                                'notification' => [
991
                                    'body' =>  $pushTemplate->body,
992
                                    'title' => $pushTemplate->title,
993
                                    'vibrate' => 1,
994
                                    'sound' =>  1
995
                                ],
996
                            ]
997
                        ]);
998
 
999
                        if($pushMapper->insert($push)) {
1000
                            $push_to_send = $push_to_send + 1;
1001
                        }
1002
 
1003
                    }
1004
                }
1005
 
1006
                if(0 == $push_to_send) {
1007
                    return new JsonModel([
1008
                        'success' => false,
1009
                        'data' => 'ERROR_NO_USER_DEVICES_WERE_FOUND_TO_SEND_PUSH'
1010
                    ]);
1011
                }
1012
 
1013
 
1014
 
1015
 
1016
 
1017
                return new JsonModel([
1018
                    'success' => true,
1019
                    'data' => [
1020
                        'push_to_send' => $push_to_send,
1021
                    ]
1022
                ]);
1023
 
1024
 
1025
 
1026
 
1027
 
1028
            } else {
1029
 
1030
                $messages = [];
1031
                $form_messages = (array) $form->getMessages();
1032
                foreach($form_messages  as $fieldname => $field_messages)
1033
                {
1034
                    $messages[$fieldname] = array_values($field_messages);
1035
                }
1036
 
1037
                return new JsonModel([
1038
                    'success'   => false,
1039
                    'data'      => $messages
1040
                ]);
1041
            }
1042
        }
1043
 
1044
        return new JsonModel([
1045
            'success' => false,
1046
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1047
        ]);
1048
    }
1049
 
1050
 
1051
}