Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Mapper;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Db\Sql\Expression;
9
use Laminas\Log\LoggerInterface;
10
 
11
use LeadersLinked\Model\User;
12
use LeadersLinked\Mapper\Common\MapperCommon;
13
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
14
use Laminas\Hydrator\ArraySerializableHydrator;
15
use Laminas\Paginator\Paginator;
16
use Laminas\Paginator\Adapter\DbSelect;
17
use Laminas\Db\ResultSet\HydratingResultSet;
18
use LeadersLinked\Model\UserType;
19
use LeadersLinked\Model\CompanyUser;
20
use LeadersLinked\Model\CompanyMicrolearningCapsuleUser;
2083 nelberth 21
use LeadersLinked\Model\HighPerformanceTeamsGroupsMembers;
1 www 22
 
23
 
1665 nelberth 24
 
2083 nelberth 25
 
1 www 26
class UserMapper extends MapperCommon
27
{
28
    const _TABLE = 'tbl_users';
29
 
30
    /**
31
     *
32
     * @var UserMapper
33
     */
34
    private static $_instance;
35
 
36
    /**
37
     *
38
     * @param AdapterInterface $adapter
39
     */
40
    private function __construct($adapter)
41
    {
42
        parent::__construct($adapter);
43
    }
44
 
45
    /**
46
     *
47
     * @param AdapterInterface $adapter
48
     * @return UserMapper
49
     */
50
    public static function getInstance($adapter)
51
    {
52
        if(self::$_instance == null) {
53
            self::$_instance = new UserMapper($adapter);
54
        }
55
        return self::$_instance;
56
    }
57
 
58
    /**
59
     *
60
     * @param string $uuid
61
     * @return User
62
     */
63
    public function fetchOneByUuid($uuid)
64
    {
65
        $prototype = new User();
66
        $select = $this->sql->select(self::_TABLE);
67
        $select->where->equalTo('uuid', $uuid);
68
 
69
 
70
        return $this->executeFetchOneObject($select, $prototype);
71
    }
72
 
3639 efrain 73
 
1 www 74
    /**
3639 efrain 75
     *
4733 efrain 76
     * @return User
77
     */
78
    public function fetchOneDefaultForConnection()
79
    {
80
        $prototype = new User();
81
        $select = $this->sql->select(self::_TABLE);
82
        $select->where->equalTo('default_for_connection', User::DEFAULT_FOR_CONNECTION_YES);
83
 
84
 
85
        return $this->executeFetchOneObject($select, $prototype);
86
    }
87
 
88
 
89
 
90
    /**
91
     *
3639 efrain 92
     * @param string $uuid
93
     * @param int $network_id
94
     * @return User
95
     */
96
    public function fetchOneByUuidAndNetworkId($uuid, $network_id)
97
    {
98
        $prototype = new User();
99
        $select = $this->sql->select(self::_TABLE);
100
        $select->where->equalTo('uuid', $uuid);
101
        $select->where->equalTo('network_id', $network_id);
102
 
103
 
104
        return $this->executeFetchOneObject($select, $prototype);
105
    }
106
 
107
    /**
1 www 108
     *
109
     * @param int $id
110
     * @return User
111
     */
112
    public function fetchOne($id)
113
    {
114
        $prototype = new User();
115
        $select = $this->sql->select(self::_TABLE);
116
        $select->where->equalTo('id', $id);
117
 
118
        return $this->executeFetchOneObject($select, $prototype);
119
    }
120
 
1271 nelberth 121
    public function fetchOneRelation($id)
122
    {
123
        $prototype = new User();
124
        $select = $this->sql->select(self::_TABLE);
125
        $select->where->equalTo('id', $id);
126
 
127
        return $this->executeFetchOneObject($select, $prototype);
128
    }
129
 
130
 
1 www 131
    /**
132
     *
133
     * @param string $email
134
     * @return void|User
135
     */
136
    public function fetchOneByEmail($email)
137
    {
138
        $prototype = new User();
139
        $select = $this->sql->select(self::_TABLE);
140
        $select->where->equalTo('email', $email);
141
 
142
        //echo $select->getSqlString($this->adapter->platform); exit;
143
 
144
        return $this->executeFetchOneObject($select, $prototype);
145
    }
146
 
147
    /**
3639 efrain 148
     *
149
     * @param string $email
150
     * @param int $network_id
151
     * @return void|User
152
     */
153
    public function fetchOneByEmailAndNetworkId($email, $network_id)
154
    {
155
        $prototype = new User();
156
        $select = $this->sql->select(self::_TABLE);
157
        $select->where->equalTo('email', $email);
158
        $select->where->equalTo('network_id', $network_id);
159
 
160
        //echo $select->getSqlString($this->adapter->platform); exit;
161
 
162
        return $this->executeFetchOneObject($select, $prototype);
163
    }
164
 
165
    /**
1 www 166
     *
167
     * @param string $password_reset_key
168
     * @return void|User
169
     */
170
    public function fetchOneByPasswordResetKey($password_reset_key)
171
    {
172
        $prototype = new User();
173
        $select = $this->sql->select(self::_TABLE);
174
        $select->where->equalTo('password_reset_key', $password_reset_key);
175
 
176
        return $this->executeFetchOneObject($select, $prototype);
177
    }
178
 
3649 efrain 179
 
1 www 180
    /**
3649 efrain 181
     *
182
     * @param string $password_reset_key
183
     * @param int $network_id
184
     * @return void|User
185
     */
186
    public function fetchOneByPasswordResetKeyAndNetworkId($password_reset_key, $network_id)
187
    {
188
        $prototype = new User();
189
        $select = $this->sql->select(self::_TABLE);
190
        $select->where->equalTo('password_reset_key', $password_reset_key);
191
        $select->where->equalTo('network_id', $network_id);
192
 
193
        return $this->executeFetchOneObject($select, $prototype);
194
    }
195
 
196
    /**
1 www 197
     *
198
     * @param string $activation_key
199
     * @return void|User
200
     */
201
    public function fetchOneByActivationKey($activation_key)
202
    {
203
        $prototype = new User();
204
        $select = $this->sql->select(self::_TABLE);
205
        $select->where->equalTo('activation_key', $activation_key);
206
 
207
        return $this->executeFetchOneObject($select, $prototype);
208
    }
3639 efrain 209
 
3649 efrain 210
    /**
211
     *
212
     * @param string $activation_key
213
     * @param int $network_id
214
     * @return void|User
215
     */
3759 efrain 216
    public function fetchOneByActivationKeyAndNetworkId($activation_key, $network_id)
3649 efrain 217
    {
218
        $prototype = new User();
219
        $select = $this->sql->select(self::_TABLE);
220
        $select->where->equalTo('activation_key', $activation_key);
221
        $select->where->equalTo('network_id', $network_id);
222
 
3671 efrain 223
 
224
 
3649 efrain 225
        return $this->executeFetchOneObject($select, $prototype);
226
    }
3639 efrain 227
 
3649 efrain 228
 
3639 efrain 229
    /**
230
     *
231
     * @param int $network_id
232
     * @return int
233
     */
234
    public function fetchCountByNetworkId($network_id)
235
    {
236
 
237
        $select = $this->sql->select(self::_TABLE);
238
        $select->columns(['total' => new Expression('COUNT(*)')]);
239
        $select->where->equalTo('network_id', $network_id);
240
 
241
        $record = $this->executeFetchOneArray($select);
242
 
243
        return $record['total'];
244
    }
4842 efrain 245
 
246
    /**
247
     *
248
     * @param int $network_id
249
     * @return int
250
     */
251
    public function fetchCountActiveByDefaultNetworkId($network_id)
252
    {
253
 
254
        $select = $this->sql->select(self::_TABLE);
255
        $select->columns(['total' => new Expression('COUNT(*)')]);
256
        $select->where->equalTo('network_id', $network_id);
257
        $select->where->in('usertype_id', [UserType::USER, UserType::ADMIN]);
258
        $select->where->equalTo('status', User::STATUS_ACTIVE);
259
 
260
        $record = $this->executeFetchOneArray($select);
261
 
262
        return $record['total'];
263
    }
1 www 264
 
4842 efrain 265
    /**
266
     *
267
     * @param int $network_id
268
     * @return int
269
     */
270
    public function fetchCountActiveByOtherNetworkId($network_id)
271
    {
272
 
273
        $select = $this->sql->select(self::_TABLE);
274
        $select->columns(['total' => new Expression('COUNT(*)')]);
275
        $select->where->equalTo('network_id', $network_id);
276
        $select->where->in('usertype_id', [UserType::USER, UserType::ADMIN]);
277
        $select->where->equalTo('status', User::STATUS_ACTIVE);
278
        $select->where->equalTo('request_access', User::REQUEST_ACCESS_APPROVED);
279
 
280
 
281
        $record = $this->executeFetchOneArray($select);
282
 
283
        return $record['total'];
284
    }
1 www 285
 
4842 efrain 286
 
1 www 287
 
288
    /**
289
     *
290
     * @param string $keyword
291
     * @param int $current_user
292
     * @return User[]
293
     */
294
    public function fetchAllByKeyword($keyword, $current_user = 0)
295
    {
296
 
297
        $prototype = new User();
298
 
299
        $select = $this->sql->select(self::_TABLE);
300
 
301
        $select->where->equalTo('status', User::STATUS_ACTIVE);
302
        $select->where->notEqualTo('id', $current_user);
303
        $select->where->and->nest()
304
            ->like('first_name', '%' . $keyword . '%')
305
            ->or->like('last_name', '%' . $keyword . '%')
306
            ->or->like(new Expression("CONCAT(first_name,' ',last_name)"), '%'. $keyword . '%')
307
            ->unnest();
308
 
309
 
310
        return $this->executeFetchAllObject($select, $prototype);
311
    }
312
 
313
    /**
314
     *
315
     * @param int[] $ids
316
     * @param int $current_user
317
     * @param string $status
318
     * @return User[]
319
     */
320
    public function fetchAllByIds($ids, $current_user = 0, $status = User::STATUS_ACTIVE)
321
    {
322
 
323
        $prototype = new User();
324
        $select = $this->sql->select(self::_TABLE);
325
 
326
 
327
        $select->where->equalTo('status', User::STATUS_ACTIVE);
630 efrain 328
        $select->where->and->in('id',$ids);
1 www 329
 
330
        if($current_user) {
331
            $select->where->and->notEqualTo('id ', $current_user);
332
        }
630 efrain 333
        $select->order(['first_name ASC', 'last_name ASC', 'email ASC']);
1 www 334
 
335
        return $this->executeFetchAllObject($select, $prototype);
336
    }
337
 
338
 
339
    /**
340
     *
341
     * @return User[]
342
     */
343
    public function fetchAllByActives()
344
    {
345
 
346
        $prototype = new User();
347
        $select = $this->sql->select(self::_TABLE);
348
 
349
 
350
        $select->where->equalTo('status', User::STATUS_ACTIVE);
351
        $select->where->equalTo('email_verified',User::EMAIL_VERIFIED_YES);
352
 
646 efrain 353
        $select->order(['first_name DESC, last_name DESC, email_DESC']);
354
 
1 www 355
 
356
        return $this->executeFetchAllObject($select, $prototype);
357
    }
358
 
359
    /**
360
     *
646 efrain 361
     * @param int $company_id
362
     * @return array
363
     */
364
    public function fetchAllByCompanyId($company_id)
365
    {
366
 
367
        $prototype = new User();
368
        $select = $this->sql->select();
369
        $select->from(['tb1' => self::_TABLE]);
370
        $select->join(['tb2' => CompanyUserMapper::_TABLE], 'tb1.id = tb2.user_id', []);
371
 
372
 
373
        $select->where->equalTo('tb2.company_id', $company_id);
374
        $select->where->in('tb2.status', [CompanyUser::STATUS_ACCEPTED, CompanyUser::STATUS_ADMIN_WILL_ADD]);
375
 
376
        $select->where->equalTo('tb1.status', User::STATUS_ACTIVE);
377
        $select->where->equalTo('tb1.email_verified',User::EMAIL_VERIFIED_YES);
378
 
379
        $select->order(['first_name DESC, last_name DESC, email_DESC']);
380
 
4300 efrain 381
 
382
 
646 efrain 383
        return $this->executeFetchAllObject($select, $prototype);
384
    }
385
 
386
    /**
387
     *
1 www 388
     * @param int $user_id
3639 efrain 389
     * @return boolean
390
     */
391
    public function leaveImpersonate($user_id)
392
    {
393
        $values = [
394
            'impersonate_user_id' => new Expression('NULL')
395
        ];
396
 
397
        $update = $this->sql->update(self::_TABLE);
398
        $update->set($values);
399
        $update->where->equalTo('id', $user_id);
400
 
401
        return $this->executeUpdate($update);
402
    }
403
 
404
    /**
405
     *
406
     * @param int $user_id
407
     * @param int $impersonate_user_id
408
     * @return boolean
409
     */
410
    public function startImpersonate($user_id, $impersonate_user_id)
411
    {
412
        $values = [
413
            'impersonate_user_id' => $impersonate_user_id
414
        ];
415
 
416
        $update = $this->sql->update(self::_TABLE);
417
        $update->set($values);
418
        $update->where->equalTo('id', $user_id);
419
 
420
        return $this->executeUpdate($update);
421
    }
422
 
423
    /**
424
     *
425
     * @param int $user_id
1 www 426
     * @param string $password_reset_key
427
     * @return boolean
428
     */
429
    public function updatePasswordResetKey($user_id, $password_reset_key)
430
    {
431
        $values = [
432
            'password_reset_key' => $password_reset_key,
433
            'password_generated_on' => date('Y-m-d H:i:s'),
434
            'updated_on' => new Expression('NOW()')
435
        ];
436
 
437
        $update = $this->sql->update(self::_TABLE);
438
        $update->set($values);
439
        $update->where->equalTo('id', $user_id);
440
 
441
        return $this->executeUpdate($update);
442
    }
443
 
1979 efrain 444
 
445
    /**
446
     *
447
     * @param int $user_id
448
     * @param string $delete_account_key
449
     * @return boolean
450
     */
451
    public function updateDeleteAccountKey($user_id, $delete_account_key)
452
    {
453
        $values = [
454
            'delete_account_key' => $delete_account_key,
455
            'delete_account_generated_on' => date('Y-m-d H:i:s'),
456
            'updated_on' => new Expression('NOW()')
457
        ];
458
 
459
        $update = $this->sql->update(self::_TABLE);
460
        $update->set($values);
461
        $update->where->equalTo('id', $user_id);
462
 
463
        return $this->executeUpdate($update);
464
    }
465
 
1 www 466
 
467
 
468
    /**
469
     *
470
     * @param User $user
471
     * @param string $password_hash
472
     * @return boolean
473
     */
474
    public function updatePassword($user, $password_hash)
475
    {
476
        $values = [
477
            'password'              => $password_hash,
478
            'password_reset_key'    => '',
479
            'password_updated_on'   => date('Y-m-d H:i:s'),
480
            'login_attempt'         => 0,
481
            'blocked'               => User::BLOCKED_NO,
482
            'updated_on'            => new Expression('NOW()')
483
        ];
484
 
485
        $update = $this->sql->update(self::_TABLE);
486
        $update->set($values);
487
        $update->where->equalTo('id', $user->id);
488
 
489
        return $this->executeUpdate($update);
490
    }
491
 
492
 
493
    /**
494
     *
495
     * @param User $user
496
     * @return boolean
497
     */
498
    public function unblock($user)
499
    {
500
        $values = [
501
            'login_attempt'         => 0,
502
            'blocked'               => User::BLOCKED_NO,
503
            'updated_on'            => new Expression('NOW()')
504
        ];
505
 
506
        $update = $this->sql->update(self::_TABLE);
507
        $update->set($values);
508
        $update->where->equalTo('id', $user->id);
509
 
510
        return $this->executeUpdate($update);
511
    }
512
 
513
 
514
 
515
 
516
    /**
517
     *
518
     * @param User $user
519
     * @param string $one_time_password
520
     * @return boolean
521
     */
522
    public function updateOneTimePassword($user, $one_time_password)
523
    {
524
        $values = [
525
            'one_time_password' => $one_time_password,
526
            'updated_on'        => new Expression('NOW()')
527
        ];
528
 
529
        $update = $this->sql->update(self::_TABLE);
530
        $update->set($values);
531
        $update->where->equalTo('id', $user->id);
532
 
533
        return $this->executeUpdate($update);
534
    }
535
 
536
 
537
    /**
538
     *
539
     * @param User $user
540
     * @return boolean
541
     */
542
    public function update($user)
543
    {
544
        $hydrator = new ObjectPropertyHydrator();
545
        $values = $hydrator->extract($user);
1979 efrain 546
        //$values = $this->removeEmpty($values);
547
 
548
 
549
        unset($values['added_on']);
1 www 550
        $values['updated_on'] = new Expression('NOW()') ;
551
 
552
        $update = $this->sql->update(self::_TABLE);
553
        $update->set($values);
554
        $update->where->equalTo('id',$user->id);
555
 
1979 efrain 556
        //echo $update->getSqlString($this->adapter->platform); exit;
557
 
1 www 558
        return $this->executeUpdate($update);
559
    }
560
 
561
    /**
562
     *
563
     * @param User $user
564
     * @return boolean
565
     */
566
    public function updatePrivacy($user)
567
    {
568
        $values = [
569
            'show_in_search' => $user->show_in_search,
570
            'updated_on' => new Expression('NOW()')
571
        ];
572
 
573
        $update = $this->sql->update(self::_TABLE);
574
        $update->set($values);
575
        $update->where->equalTo('id',$user->id);
576
 
577
        return $this->executeUpdate($update);
578
    }
579
 
580
    /**
581
     *
582
     * @param User $user
583
     * @return boolean
584
     */
585
    public function updateBasic($user)
586
    {
587
        $values = [
588
            'first_name' => $user->first_name,
589
            'last_name' => $user->last_name,
590
            'phone' => $user->phone,
591
            'gender' => $user->gender,
4113 efrain 592
            'timezone' => $user->timezone,
4416 efrain 593
            'is_adult' => $user->is_adult,
1 www 594
            'updated_on' => new Expression('NOW()')
595
        ];
596
 
597
        $update = $this->sql->update(self::_TABLE);
598
        $update->set($values);
599
        $update->where->equalTo('id',$user->id);
600
 
601
        return $this->executeUpdate($update);
602
    }
603
 
604
 
605
    /**
606
     *
607
     * @param User $user
608
     * @return boolean
609
     */
610
    public function updateImage($user)
611
    {
612
        $values = [
613
            'image' => $user->image,
614
            'updated_on' => new Expression('NOW()')
615
        ];
616
 
617
        $update = $this->sql->update(self::_TABLE);
618
        $update->set($values);
619
        $update->where->equalTo('id',$user->id);
620
 
621
        return $this->executeUpdate($update);
622
    }
623
 
624
    /**
625
     *
626
     * @param User $user
627
     * @return boolean
628
     */
629
    public function updateLocation($user)
630
    {
631
        $values = [
632
            'location_id' => $user->location_id,
633
            'updated_on' => new Expression('NOW()')
634
        ];
635
 
636
        $update = $this->sql->update(self::_TABLE);
637
        $update->set($values);
638
        $update->where->equalTo('id',$user->id);
639
 
640
        return $this->executeUpdate($update);
641
    }
642
 
643
    /**
644
     *
645
     * @param int $user_id
646
     * @return boolean
647
     */
648
    public function activateAccount($user_id)
649
    {
650
        $values = [
651
            'email_verified'    => User::EMAIL_VERIFIED_YES,
652
            'status'            => User::STATUS_ACTIVE,
653
            'activation_key'    => '',
654
            'updated_on' => new Expression('NOW()')
655
        ];
656
 
657
        $update = $this->sql->update(self::_TABLE);
658
        $update->set($values);
659
        $update->where->equalTo('id', $user_id);
660
 
661
        return $this->executeUpdate($update);
662
    }
663
 
664
    /**
665
     *
666
     * @param User $user
667
     * @return boolean
668
     */
669
    public function insert($user)
670
    {
671
 
672
        $hydrator = new ObjectPropertyHydrator();
673
        $values = $hydrator->extract($user);
674
        $values = $this->removeEmpty($values);
675
 
676
        $insert = $this->sql->insert(self::_TABLE);
677
        $insert->values($values);
678
 
679
        $response = $this->executeInsert($insert);
680
        if($response) {
681
            $user->id = $this->lastInsertId;
682
        }
683
 
684
        return $response;
685
    }
686
 
687
 
688
    /**
689
     *
690
     * @return boolean
691
     */
692
    public function truncate()
693
    {
694
        $sql = sprintf('TRUNCATE TABLE `%s` ', self::_TABLE);
695
        return $this->executeSentenceWithParameters($sql);
696
    }
697
 
698
    /**
699
     *
700
     * @param int $company_id
701
     * @param string $status
702
     * @param string $search
703
     * @param int $page
704
     * @param int $records_per_page
705
     * @param string $order_field
706
     * @param string $order_direction
707
     * @return Paginator
708
     */
709
    public function fetchAllDataTableByCompanyId($company_id, $status = '', $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
710
    {
711
        $select = $this->sql->select();
712
        $select->columns(['status', 'backend', 'creator']);
713
        $select->from(['tb1' => CompanyUserMapper::_TABLE]);
714
        $select->join(['tb2' => self::_TABLE] , 'tb1.user_id = tb2.id', [
715
            'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
716
            'blocked', 'login_attempt', 'email_verified'
717
 
718
        ]);
719
 
720
        $select->where->equalTo('tb1.company_id', $company_id);
721
        $select->where->equalTo('tb1.owner', CompanyUser::OWNER_NO);
722
 
723
        if($status) {
724
            $select->where->equalTo('tb1.status', $status);
725
 
726
        }
727
 
728
        if($search) {
729
            $select->where->nest()
730
            ->like('first_name', '%' . $search . '%')
731
            ->or->like('last_name', '%' . $search . '%')
732
            ->or->like('email', '%' . $search . '%')
733
            ->unnest();
734
 
735
        }
736
 
737
 
738
        $select->order($order_field . ' ' . $order_direction);
739
 
740
        $hydrator   = new ArraySerializableHydrator();
741
        $resultset  = new HydratingResultSet($hydrator);
742
 
743
        $adapter = new DbSelect($select, $this->sql, $resultset);
744
        $paginator = new Paginator($adapter);
745
        $paginator->setItemCountPerPage($records_per_page);
746
        $paginator->setCurrentPageNumber($page);
747
 
748
 
749
        return $paginator;
750
    }
751
 
752
 
753
    /**
754
     *
755
     * @param int $company_id
756
     * @param string $search
757
     * @param int $page
758
     * @param int $records_per_page
759
     * @param string $order_field
760
     * @param string $order_direction
761
     * @return Paginator
762
     */
763
    public function fetchAllDataTableStudensByCompanyId($company_id,  $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
764
    {
765
        $date = date('Y-m-d');
766
 
767
        $selectCapsuleUser = $this->getSql()->select();
768
        $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
769
        $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
770
        $selectCapsuleUser->where->equalTo('company_id', $company_id);
771
        $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
772
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
773
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
774
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
775
 
776
        //echo $select->getSqlString($this->adapter->platform); exit;
777
 
778
        $select = $this->sql->select();
779
        $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email','blocked']);
780
        $select->from(UserMapper::_TABLE);
781
        $select->where->in('id', $selectCapsuleUser);
782
 
783
 
784
        if($search) {
785
            $select->where->nest()
786
            ->like('first_name', '%' . $search . '%')
787
            ->or->like('last_name', '%' . $search . '%')
788
            ->or->like('email', '%' . $search . '%')
789
            ->unnest();
790
 
791
        }
792
 
793
 
794
        $select->order($order_field . ' ' . $order_direction);
795
 
796
        $hydrator   = new ArraySerializableHydrator();
797
        $resultset  = new HydratingResultSet($hydrator);
798
 
799
        $adapter = new DbSelect($select, $this->sql, $resultset);
800
        $paginator = new Paginator($adapter);
801
        $paginator->setItemCountPerPage($records_per_page);
802
        $paginator->setCurrentPageNumber($page);
803
 
804
 
805
        return $paginator;
806
    }
2381 nelberth 807
 
808
 
1 www 809
    /**
810
     *
2381 nelberth 811
     * @param int $company_id
1 www 812
     * @param string $search
2381 nelberth 813
     * @param int $page
814
     * @param int $records_per_page
815
     * @param string $order_field
816
     * @param string $order_direction
817
     * @return Paginator
818
     */
819
    public function fetchAllStudensByCompanyId($company_id)
820
    {
821
 
822
        $date = date('Y-m-d');
823
 
824
        $selectCapsuleUser = $this->getSql()->select();
825
        $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
826
        $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
827
        $selectCapsuleUser->where->equalTo('company_id', $company_id);
828
        $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
829
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
830
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
831
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
832
 
833
        //echo $select->getSqlString($this->adapter->platform); exit;
834
        $prototype = new User();
835
        $select = $this->sql->select();
836
        $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email','blocked']);
837
        $select->from(UserMapper::_TABLE);
838
        $select->where->in('id', $selectCapsuleUser);
839
        return $this->executeFetchAllObject($select, $prototype);
840
 
841
    }
842
 
843
    /**
844
     *
845
     * @param string $search
1 www 846
     * @return User[]
847
     */
848
    public function fetchAllSuggest($search)
849
    {
850
 
851
        $select = $this->sql->select();
852
        $select->from(self::_TABLE);
853
        $select->where->equalTo('status', User::STATUS_ACTIVE);
854
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
855
 
856
        if($search) {
857
            $select->where->nest()
858
            ->like('first_name', '%' . $search . '%')
859
            ->or->like('last_name', '%' . $search . '%')
860
            ->or->like('email', '%' . $search . '%')
861
            ->unnest();
862
 
863
        }
864
 
865
        $select->order(['first_name', 'last_name']);
866
 
867
        // echo $select->getSqlString($this->adapter->platform); exit;
868
 
869
        $prototype = new User();
870
 
871
        return $this->executeFetchAllObject($select, $prototype);
872
    }
873
 
3639 efrain 874
    /**
875
     *
876
     * @param int $network_id
877
     * @param string $search
878
     * @return User[]
879
     */
880
    public function fetchAllSuggestByNetworkIdAndSearch($network_id, $search)
881
    {
882
 
883
        $select = $this->sql->select();
884
        $select->from(self::_TABLE);
885
        $select->where->equalTo('network_id', $network_id);
886
        $select->where->equalTo('status', User::STATUS_ACTIVE);
887
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
888
 
889
        if($search) {
890
            $select->where->nest()
891
            ->like('first_name', '%' . $search . '%')
892
            ->or->like('last_name', '%' . $search . '%')
893
            ->or->like('email', '%' . $search . '%')
894
            ->unnest();
895
 
896
        }
897
 
898
        $select->order(['first_name', 'last_name']);
899
 
900
        // echo $select->getSqlString($this->adapter->platform); exit;
901
 
902
        $prototype = new User();
903
 
904
        return $this->executeFetchAllObject($select, $prototype);
905
    }
1 www 906
 
907
    /**
908
     *
909
     * @param int $company_id
3639 efrain 910
     * @param int $network_id
1 www 911
     * @param string $search
912
     * @return User[]
913
     */
3639 efrain 914
    public function fetchAllSuggestForInvitationByCompanyIdAndNetworkIdAndSearch($company_id, $network_id, $search)
915
    {
916
        $selectCompanyUsers = $this->sql->select(CompanyUserMapper::_TABLE);
917
        $selectCompanyUsers->columns(['user_id']);
918
        $selectCompanyUsers->where->equalTo('company_id', $company_id);
919
        $selectCompanyUsers->where->in('status', [
920
            CompanyUser::STATUS_ACCEPTED,
921
            CompanyUser::STATUS_PENDING,
922
            CompanyUser::STATUS_SENT,
923
 
924
        ]);
925
 
926
        //echo $selectCompanyUsers->getSqlString($this->adapter->platform); exit;
927
 
928
        $select = $this->sql->select();
929
        $select->from(self::_TABLE);
930
        $select->where->notIn('id', $selectCompanyUsers);
931
        $select->where->equalTo('network_id', $network_id);
932
        $select->where->equalTo('status', User::STATUS_ACTIVE);
933
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
934
 
935
        if($search) {
936
            $select->where->nest()
937
            ->like('first_name', '%' . $search . '%')
938
            ->or->like('last_name', '%' . $search . '%')
939
            ->or->like('email', '%' . $search . '%')
940
            ->unnest();
941
 
942
        }
943
 
944
        $select->order(['first_name', 'last_name']);
945
 
946
        // echo $select->getSqlString($this->adapter->platform); exit;
947
 
948
        $prototype = new User();
949
 
950
        return $this->executeFetchAllObject($select, $prototype);
951
    }
952
 
953
    /**
954
     *
955
     * @param int $company_id
956
     * @param string $search
957
     * @return User[]
958
     */
1 www 959
    public function fetchAllSuggestForInvitationByCompanyId($company_id, $search)
960
    {
961
        $selectCompanyUsers = $this->sql->select(CompanyUserMapper::_TABLE);
962
        $selectCompanyUsers->columns(['user_id']);
963
        $selectCompanyUsers->where->equalTo('company_id', $company_id);
964
        $selectCompanyUsers->where->in('status', [
965
            CompanyUser::STATUS_ACCEPTED,
966
            CompanyUser::STATUS_PENDING,
967
            CompanyUser::STATUS_SENT,
968
 
969
        ]);
970
 
971
        //echo $selectCompanyUsers->getSqlString($this->adapter->platform); exit;
972
 
973
        $select = $this->sql->select();
974
        $select->from(self::_TABLE);
975
        $select->where->notIn('id', $selectCompanyUsers);
976
        $select->where->equalTo('status', User::STATUS_ACTIVE);
977
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
978
 
979
        if($search) {
980
            $select->where->nest()
981
            ->like('first_name', '%' . $search . '%')
982
            ->or->like('last_name', '%' . $search . '%')
983
            ->or->like('email', '%' . $search . '%')
984
            ->unnest();
985
 
986
        }
987
 
988
        $select->order(['first_name', 'last_name']);
989
 
990
       // echo $select->getSqlString($this->adapter->platform); exit;
991
 
992
        $prototype = new User();
993
 
994
        return $this->executeFetchAllObject($select, $prototype);
995
    }
996
 
997
    /**
998
     *
999
     * @param int $group_id
3639 efrain 1000
     * @param int $network_id
1 www 1001
     * @param string $search
1002
     * @return User[]
1003
     */
3639 efrain 1004
    public function fetchAllSuggestForInvitationByGroupIdAndNetworkIdAndSearch($group_id, $network_id, $search)
1005
    {
1006
        $selectGroupMembers = $this->sql->select(GroupMemberMapper::_TABLE);
1007
        $selectGroupMembers->columns(['user_id']);
1008
        $selectGroupMembers->where->equalTo('group_id', $group_id);
1009
        $selectGroupMembers->where->in('status', [
1010
            CompanyUser::STATUS_ACCEPTED,
1011
        ]);
1012
 
1013
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
1014
 
1015
        $select = $this->sql->select();
1016
        $select->from(self::_TABLE);
1017
        $select->where->equalTo('network_id', $network_id);
1018
        $select->where->notIn('id', $selectGroupMembers);
1019
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1020
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1021
 
1022
        if($search) {
1023
            $select->where->nest()
1024
            ->like('first_name', '%' . $search . '%')
1025
            ->or->like('last_name', '%' . $search . '%')
1026
            ->or->like('email', '%' . $search . '%')
1027
            ->unnest();
1028
 
1029
        }
1030
 
1031
        $select->order(['first_name', 'last_name']);
1032
 
1033
        // echo $select->getSqlString($this->adapter->platform); exit;
1034
 
1035
        $prototype = new User();
1036
 
1037
        return $this->executeFetchAllObject($select, $prototype);
1038
    }
1039
 
1040
    /**
1041
     *
1042
     * @param int $group_id
1043
     * @param string $search
1044
     * @return User[]
1045
     */
1 www 1046
    public function fetchAllSuggestForInvitationByGroupId($group_id, $search)
1047
    {
1048
        $selectGroupMembers = $this->sql->select(GroupMemberMapper::_TABLE);
1049
        $selectGroupMembers->columns(['user_id']);
1050
        $selectGroupMembers->where->equalTo('group_id', $group_id);
1051
        $selectGroupMembers->where->in('status', [
1052
         CompanyUser::STATUS_ACCEPTED,
1053
        ]);
1054
 
1055
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
1056
 
1057
        $select = $this->sql->select();
1058
        $select->from(self::_TABLE);
1059
        $select->where->notIn('id', $selectGroupMembers);
1060
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1061
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1062
 
1063
        if($search) {
1064
            $select->where->nest()
1065
            ->like('first_name', '%' . $search . '%')
1066
            ->or->like('last_name', '%' . $search . '%')
1067
            ->or->like('email', '%' . $search . '%')
1068
            ->unnest();
1069
 
1070
        }
1071
 
1072
        $select->order(['first_name', 'last_name']);
1073
 
1074
        // echo $select->getSqlString($this->adapter->platform); exit;
1075
 
1076
        $prototype = new User();
1077
 
1078
        return $this->executeFetchAllObject($select, $prototype);
1079
    }
1665 nelberth 1080
 
3639 efrain 1081
 
1082
 
2090 nelberth 1083
    public function fetchAllSuggestForInvitationByHptgId($group_id,$company_id, $search)
1665 nelberth 1084
    {
1085
        $selectGroupMembers = $this->sql->select(HighPerformanceTeamsGroupsMembersMapper::_TABLE);
1086
        $selectGroupMembers->columns(['user_id']);
1087
        $selectGroupMembers->where->equalTo('group_id', $group_id);
1088
        $selectGroupMembers->where->in('status', [
2082 nelberth 1089
            HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED,
1090
            HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN,
1091
            HighPerformanceTeamsGroupsMembers::STATUS_INVITED,
1665 nelberth 1092
        ]);
1093
 
1094
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
1095
 
1096
        $select = $this->sql->select();
2092 nelberth 1097
        $select->from(['u' => self::_TABLE]);
1098
        $select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.user_id = u.id', []);
2091 nelberth 1099
        $select->where->notIn('u.id', $selectGroupMembers);
2090 nelberth 1100
        $select->where->equalTo('u.status', User::STATUS_ACTIVE);
1101
        $select->where->equalTo('u.email_verified', User::EMAIL_VERIFIED_YES);
1102
        $select->where->equalTo('cu.company_id', $company_id);
1103
 
1665 nelberth 1104
 
1105
        if($search) {
1106
            $select->where->nest()
2090 nelberth 1107
            ->like('u.first_name', '%' . $search . '%')
1108
            ->or->like('u.last_name', '%' . $search . '%')
1109
            ->or->like('u.email', '%' . $search . '%')
1665 nelberth 1110
            ->unnest();
1111
 
1112
        }
1113
 
2090 nelberth 1114
        $select->order(['u.first_name', 'u.last_name']);
1665 nelberth 1115
 
1116
        // echo $select->getSqlString($this->adapter->platform); exit;
1117
 
1118
        $prototype = new User();
1119
 
1120
        return $this->executeFetchAllObject($select, $prototype);
1121
    }
4751 efrain 1122
 
1 www 1123
    /**
1124
     *
1125
     * @param string $search
1126
     * @param int $page
1127
     * @param int $records_per_page
1128
     * @param string $order_field
1129
     * @param string $order_direction
1130
     * @return Paginator
1131
     */
1132
    public function fetchAllDataTable($search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
1133
    {
1134
        $prototype = new User();
1135
        $select = $this->sql->select(self::_TABLE);
1136
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
1137
 
1138
 
1139
        if($search) {
1140
            $select->where->nest()
1141
            ->like('first_name', '%' . $search . '%')
1142
            ->or->like('last_name', '%' . $search . '%')
1143
            ->or->like('email', '%' . $search . '%')
1144
            ->unnest();
1145
 
1146
        }
1147
 
1148
 
1149
        $select->order($order_field . ' ' . $order_direction);
1150
 
1151
        $hydrator   = new ObjectPropertyHydrator();
1152
        $resultset  = new HydratingResultSet($hydrator, $prototype);
1153
 
1154
        $adapter = new DbSelect($select, $this->sql, $resultset);
1155
        $paginator = new Paginator($adapter);
1156
        $paginator->setItemCountPerPage($records_per_page);
1157
        $paginator->setCurrentPageNumber($page);
1158
 
1159
 
1160
        return $paginator;
1161
    }
1162
 
1163
    /**
4398 efrain 1164
     *
4751 efrain 1165
     * @param int $network_id
1166
     * @param string $search
1167
     * @param int $page
1168
     * @param int $records_per_page
1169
     * @param string $order_field
1170
     * @param string $order_direction
1171
     * @return Paginator
1172
     */
1173
    public function fetchAllDataTableByNetworkId($network_id, $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
1174
    {
1175
        $prototype = new User();
1176
        $select = $this->sql->select(self::_TABLE);
1177
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
4776 efrain 1178
        $select->where->equalTo('network_id', $network_id);
1179
        $select->where->equalTo('request_access', User::REQUEST_ACCESS_APPROVED);
4751 efrain 1180
 
1181
 
1182
        if($search) {
1183
            $select->where->nest()
1184
            ->like('first_name', '%' . $search . '%')
1185
            ->or->like('last_name', '%' . $search . '%')
1186
            ->or->like('email', '%' . $search . '%')
1187
            ->unnest();
1188
 
1189
        }
1190
 
1191
 
1192
        $select->order($order_field . ' ' . $order_direction);
1193
 
1194
        $hydrator   = new ObjectPropertyHydrator();
1195
        $resultset  = new HydratingResultSet($hydrator, $prototype);
1196
 
1197
        $adapter = new DbSelect($select, $this->sql, $resultset);
1198
        $paginator = new Paginator($adapter);
1199
        $paginator->setItemCountPerPage($records_per_page);
1200
        $paginator->setCurrentPageNumber($page);
1201
 
1202
 
1203
        return $paginator;
1204
    }
4776 efrain 1205
 
1206
 
1207
 
1208
 
1209
    /**
1210
     *
1211
     * @param int $network_id
1212
     * @param string $search
1213
     * @param int $page
1214
     * @param int $records_per_page
1215
     * @param string $order_field
1216
     * @param string $order_direction
1217
     * @return Paginator
1218
     */
1219
    public function fetchAllDataTableRequestAccessPendingByNetworkId($network_id, $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
1220
    {
1221
        $prototype = new User();
1222
        $select = $this->sql->select(self::_TABLE);
1223
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
1224
        $select->where->equalTo('network_id', $network_id);
1225
        $select->where->equalTo('request_access', User::REQUEST_ACCESS_PENDING);
1226
 
1227
        if($search) {
1228
            $select->where->nest()
1229
            ->like('first_name', '%' . $search . '%')
1230
            ->or->like('last_name', '%' . $search . '%')
1231
            ->or->like('email', '%' . $search . '%')
1232
            ->unnest();
1233
 
1234
        }
1235
 
1236
 
1237
        $select->order($order_field . ' ' . $order_direction);
1238
 
1239
        $hydrator   = new ObjectPropertyHydrator();
1240
        $resultset  = new HydratingResultSet($hydrator, $prototype);
1241
 
1242
        $adapter = new DbSelect($select, $this->sql, $resultset);
1243
        $paginator = new Paginator($adapter);
1244
        $paginator->setItemCountPerPage($records_per_page);
1245
        $paginator->setCurrentPageNumber($page);
1246
 
1247
 
1248
        return $paginator;
1249
    }
4751 efrain 1250
 
1251
 
1252
    /**
1253
     *
4398 efrain 1254
     * @param int $id
1255
     * @return boolean
1256
     */
1257
    public function markIsAdult($id)
1258
    {
1259
        $update = $this->sql->update(self::_TABLE);
1260
        $update->set([
1261
            'id_adult' => User::IS_ADULT_YES,
1262
        ]);
1263
        $update->where->equalTo('id', $id);
1264
 
1265
        return $this->executeUpdate($update);
1266
    }
1267
 
1268
    /**
1269
     *
1270
     * @param int $id
1271
     * @return boolean
1272
     */
1273
    public function markIsNotAdult($id)
1274
    {
1275
        $update = $this->sql->update(self::_TABLE);
1276
        $update->set([
1277
            'id_adult' => User::IS_ADULT_NO,
1278
        ]);
1279
        $update->where->equalTo('id', $id);
1280
 
1281
        return $this->executeUpdate($update);
1282
    }
1283
 
1284
    /**
1 www 1285
     *
1286
     * @param int $id
1287
     * @return boolean
1288
     */
1289
    public function updateChatOnlineStatus($id)
1290
    {
1291
        $update = $this->sql->update(self::_TABLE);
1292
        $update->set([
1293
            'online' => 1,
1294
        ]);
1295
        $update->where->equalTo('id', $id);
1296
 
1297
        return $this->executeUpdate($update);
1298
    }
1299
 
3086 efrain 1300
 
1 www 1301
 
1302
    /**
1303
     *
1304
     * @param int $id
1305
     * @return boolean
1306
     */
1307
    public function updateLastActivity($id)
1308
    {
1309
        $update = $this->sql->update(self::_TABLE);
1310
        $update->set([
1311
            'last_activity_on' => new Expression('NOW()'),
3086 efrain 1312
            'online' => 1,
1 www 1313
        ]);
1314
        $update->where->equalTo('id', $id);
1315
 
1316
        return $this->executeUpdate($update);
1317
    }
1318
 
1319
 
1320
    /**
1321
     *
1322
     * @param int $id
1323
     * @return boolean
1324
     */
1325
    public function updateLastHeartBeat($id)
1326
    {
1327
        $update = $this->sql->update(self::_TABLE);
1328
        $update->set([
1329
            'last_heart_beat_at' => new Expression('NOW()'),
242 efrain 1330
            'online' => 1,
1331
 
1 www 1332
        ]);
1333
        $update->where->equalTo('id', $id);
1334
 
1335
        return $this->executeUpdate($update);
1336
    }
242 efrain 1337
 
1338
    /**
1339
     *
1340
     * @param int $id
1341
     * @return boolean
1342
     */
1343
    public function emailVerifyAndActive($id)
1344
    {
1345
        $update = $this->sql->update(self::_TABLE);
1346
        $update->set([
1347
            'email_verified' => User::EMAIL_VERIFIED_YES,
1348
            'status' => User::STATUS_ACTIVE,
1349
        ]);
1350
        $update->where->equalTo('id', $id);
1 www 1351
 
242 efrain 1352
        return $this->executeUpdate($update);
1353
    }
1354
 
630 efrain 1355
 
1356
    /**
1357
     *
1358
     * @param int $company_id
1359
     * @return User[]
1360
     */
1361
    public function fetchAllVerifyAndActiveByCompanyId($company_id)
1362
    {
1363
        $select = $this->sql->select();
1364
        $select->columns(['status', 'company_id']);
1365
        $select->from(['tb1' => CompanyUserMapper::_TABLE]);
1366
        $select->join(['tb2' => self::_TABLE] , 'tb1.user_id = tb2.id');
1367
 
1368
 
1369
 
1370
        $select->where->equalTo('tb1.company_id', $company_id);
1371
        $select->where->equalTo('tb1.owner', CompanyUser::OWNER_NO);
1372
        $select->where->in('tb1.status', [CompanyUser::STATUS_ACCEPTED, CompanyUser::STATUS_ADMIN_WILL_ADD]);
1373
        $select->where->equalTo('tb2.email_verified', User::EMAIL_VERIFIED_YES);
1374
        $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
1375
 
1376
        $select->order('first_name', 'last_name', 'email');
1377
 
1378
        $prototype = User();
1379
 
1380
        return $this->executeFetchAllObject($select, $prototype);
1381
    }
1 www 1382
}