Proyectos de Subversion LeadersLinked - Backend

Rev

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