Proyectos de Subversion LeadersLinked - Services

Rev

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

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