Proyectos de Subversion LeadersLinked - Services

Rev

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