Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

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