Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4857 | Rev 5751 | 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
557
     * @return array
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
 
688
    /**
689
     *
690
     * @param User $user
691
     * @return boolean
692
     */
693
    public function unblock($user)
694
    {
695
        $values = [
696
            'login_attempt'         => 0,
697
            'blocked'               => User::BLOCKED_NO,
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
    /**
712
     *
713
     * @param User $user
714
     * @param string $one_time_password
715
     * @return boolean
716
     */
717
    public function updateOneTimePassword($user, $one_time_password)
718
    {
719
        $values = [
720
            'one_time_password' => $one_time_password,
721
            'updated_on'        => new Expression('NOW()')
722
        ];
723
 
724
        $update = $this->sql->update(self::_TABLE);
725
        $update->set($values);
726
        $update->where->equalTo('id', $user->id);
727
 
728
        return $this->executeUpdate($update);
729
    }
730
 
731
 
732
    /**
733
     *
734
     * @param User $user
735
     * @return boolean
736
     */
737
    public function update($user)
738
    {
739
        $hydrator = new ObjectPropertyHydrator();
740
        $values = $hydrator->extract($user);
1979 efrain 741
        //$values = $this->removeEmpty($values);
742
 
743
 
744
        unset($values['added_on']);
1 www 745
        $values['updated_on'] = new Expression('NOW()') ;
746
 
747
        $update = $this->sql->update(self::_TABLE);
748
        $update->set($values);
749
        $update->where->equalTo('id',$user->id);
750
 
1979 efrain 751
        //echo $update->getSqlString($this->adapter->platform); exit;
752
 
1 www 753
        return $this->executeUpdate($update);
754
    }
755
 
756
    /**
757
     *
758
     * @param User $user
759
     * @return boolean
760
     */
761
    public function updatePrivacy($user)
762
    {
763
        $values = [
764
            'show_in_search' => $user->show_in_search,
765
            'updated_on' => new Expression('NOW()')
766
        ];
767
 
768
        $update = $this->sql->update(self::_TABLE);
769
        $update->set($values);
770
        $update->where->equalTo('id',$user->id);
771
 
772
        return $this->executeUpdate($update);
773
    }
774
 
775
    /**
776
     *
777
     * @param User $user
778
     * @return boolean
779
     */
780
    public function updateBasic($user)
781
    {
782
        $values = [
783
            'first_name' => $user->first_name,
784
            'last_name' => $user->last_name,
785
            'phone' => $user->phone,
786
            'gender' => $user->gender,
4113 efrain 787
            'timezone' => $user->timezone,
4416 efrain 788
            'is_adult' => $user->is_adult,
1 www 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
     * @param User $user
803
     * @return boolean
804
     */
805
    public function updateImage($user)
806
    {
807
        $values = [
808
            'image' => $user->image,
809
            'updated_on' => new Expression('NOW()')
810
        ];
811
 
812
        $update = $this->sql->update(self::_TABLE);
813
        $update->set($values);
814
        $update->where->equalTo('id',$user->id);
815
 
816
        return $this->executeUpdate($update);
817
    }
818
 
819
    /**
820
     *
821
     * @param User $user
822
     * @return boolean
823
     */
824
    public function updateLocation($user)
825
    {
826
        $values = [
827
            'location_id' => $user->location_id,
828
            'updated_on' => new Expression('NOW()')
829
        ];
830
 
831
        $update = $this->sql->update(self::_TABLE);
832
        $update->set($values);
833
        $update->where->equalTo('id',$user->id);
834
 
835
        return $this->executeUpdate($update);
836
    }
837
 
838
    /**
839
     *
840
     * @param int $user_id
841
     * @return boolean
842
     */
843
    public function activateAccount($user_id)
844
    {
845
        $values = [
846
            'email_verified'    => User::EMAIL_VERIFIED_YES,
847
            'status'            => User::STATUS_ACTIVE,
848
            'activation_key'    => '',
849
            'updated_on' => new Expression('NOW()')
850
        ];
851
 
852
        $update = $this->sql->update(self::_TABLE);
853
        $update->set($values);
854
        $update->where->equalTo('id', $user_id);
855
 
856
        return $this->executeUpdate($update);
857
    }
858
 
859
    /**
860
     *
861
     * @param User $user
862
     * @return boolean
863
     */
864
    public function insert($user)
865
    {
866
 
867
        $hydrator = new ObjectPropertyHydrator();
868
        $values = $hydrator->extract($user);
869
        $values = $this->removeEmpty($values);
870
 
871
        $insert = $this->sql->insert(self::_TABLE);
872
        $insert->values($values);
873
 
874
        $response = $this->executeInsert($insert);
875
        if($response) {
876
            $user->id = $this->lastInsertId;
877
        }
878
 
879
        return $response;
880
    }
881
 
882
 
883
    /**
884
     *
885
     * @return boolean
886
     */
887
    public function truncate()
888
    {
889
        $sql = sprintf('TRUNCATE TABLE `%s` ', self::_TABLE);
890
        return $this->executeSentenceWithParameters($sql);
891
    }
892
 
893
    /**
894
     *
895
     * @param int $company_id
896
     * @param string $status
897
     * @param string $search
898
     * @param int $page
899
     * @param int $records_per_page
900
     * @param string $order_field
901
     * @param string $order_direction
902
     * @return Paginator
903
     */
904
    public function fetchAllDataTableByCompanyId($company_id, $status = '', $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
905
    {
906
        $select = $this->sql->select();
907
        $select->columns(['status', 'backend', 'creator']);
908
        $select->from(['tb1' => CompanyUserMapper::_TABLE]);
909
        $select->join(['tb2' => self::_TABLE] , 'tb1.user_id = tb2.id', [
910
            'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
911
            'blocked', 'login_attempt', 'email_verified'
912
 
913
        ]);
914
 
915
        $select->where->equalTo('tb1.company_id', $company_id);
916
        $select->where->equalTo('tb1.owner', CompanyUser::OWNER_NO);
917
 
918
        if($status) {
919
            $select->where->equalTo('tb1.status', $status);
920
 
921
        }
922
 
923
        if($search) {
924
            $select->where->nest()
925
            ->like('first_name', '%' . $search . '%')
926
            ->or->like('last_name', '%' . $search . '%')
927
            ->or->like('email', '%' . $search . '%')
928
            ->unnest();
929
 
930
        }
931
 
932
 
933
        $select->order($order_field . ' ' . $order_direction);
934
 
935
        $hydrator   = new ArraySerializableHydrator();
936
        $resultset  = new HydratingResultSet($hydrator);
937
 
938
        $adapter = new DbSelect($select, $this->sql, $resultset);
939
        $paginator = new Paginator($adapter);
940
        $paginator->setItemCountPerPage($records_per_page);
941
        $paginator->setCurrentPageNumber($page);
942
 
943
 
944
        return $paginator;
945
    }
946
 
947
 
948
    /**
949
     *
950
     * @param int $company_id
951
     * @param string $search
952
     * @param int $page
953
     * @param int $records_per_page
954
     * @param string $order_field
955
     * @param string $order_direction
956
     * @return Paginator
957
     */
958
    public function fetchAllDataTableStudensByCompanyId($company_id,  $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
959
    {
960
        $date = date('Y-m-d');
961
 
962
        $selectCapsuleUser = $this->getSql()->select();
963
        $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
964
        $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
965
        $selectCapsuleUser->where->equalTo('company_id', $company_id);
966
        $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
967
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
968
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
969
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
970
 
971
        //echo $select->getSqlString($this->adapter->platform); exit;
972
 
973
        $select = $this->sql->select();
974
        $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email','blocked']);
975
        $select->from(UserMapper::_TABLE);
976
        $select->where->in('id', $selectCapsuleUser);
977
 
978
 
979
        if($search) {
980
            $select->where->nest()
981
            ->like('first_name', '%' . $search . '%')
982
            ->or->like('last_name', '%' . $search . '%')
983
            ->or->like('email', '%' . $search . '%')
984
            ->unnest();
985
 
986
        }
987
 
988
 
989
        $select->order($order_field . ' ' . $order_direction);
990
 
991
        $hydrator   = new ArraySerializableHydrator();
992
        $resultset  = new HydratingResultSet($hydrator);
993
 
994
        $adapter = new DbSelect($select, $this->sql, $resultset);
995
        $paginator = new Paginator($adapter);
996
        $paginator->setItemCountPerPage($records_per_page);
997
        $paginator->setCurrentPageNumber($page);
998
 
999
 
1000
        return $paginator;
1001
    }
2381 nelberth 1002
 
1003
 
1 www 1004
    /**
1005
     *
2381 nelberth 1006
     * @param int $company_id
1 www 1007
     * @param string $search
2381 nelberth 1008
     * @param int $page
1009
     * @param int $records_per_page
1010
     * @param string $order_field
1011
     * @param string $order_direction
1012
     * @return Paginator
1013
     */
1014
    public function fetchAllStudensByCompanyId($company_id)
1015
    {
1016
 
1017
        $date = date('Y-m-d');
1018
 
1019
        $selectCapsuleUser = $this->getSql()->select();
1020
        $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
1021
        $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
1022
        $selectCapsuleUser->where->equalTo('company_id', $company_id);
1023
        $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
1024
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
1025
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
1026
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
1027
 
1028
        //echo $select->getSqlString($this->adapter->platform); exit;
1029
        $prototype = new User();
1030
        $select = $this->sql->select();
1031
        $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email','blocked']);
1032
        $select->from(UserMapper::_TABLE);
1033
        $select->where->in('id', $selectCapsuleUser);
1034
        return $this->executeFetchAllObject($select, $prototype);
1035
 
1036
    }
1037
 
1038
    /**
1039
     *
1040
     * @param string $search
1 www 1041
     * @return User[]
1042
     */
1043
    public function fetchAllSuggest($search)
1044
    {
1045
 
1046
        $select = $this->sql->select();
1047
        $select->from(self::_TABLE);
1048
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1049
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1050
 
1051
        if($search) {
1052
            $select->where->nest()
1053
            ->like('first_name', '%' . $search . '%')
1054
            ->or->like('last_name', '%' . $search . '%')
1055
            ->or->like('email', '%' . $search . '%')
1056
            ->unnest();
1057
 
1058
        }
1059
 
1060
        $select->order(['first_name', 'last_name']);
1061
 
1062
        // echo $select->getSqlString($this->adapter->platform); exit;
1063
 
1064
        $prototype = new User();
1065
 
1066
        return $this->executeFetchAllObject($select, $prototype);
1067
    }
1068
 
3639 efrain 1069
    /**
1070
     *
1071
     * @param int $network_id
1072
     * @param string $search
1073
     * @return User[]
1074
     */
1075
    public function fetchAllSuggestByNetworkIdAndSearch($network_id, $search)
1076
    {
1077
 
1078
        $select = $this->sql->select();
1079
        $select->from(self::_TABLE);
1080
        $select->where->equalTo('network_id', $network_id);
1081
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1082
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1083
 
1084
        if($search) {
1085
            $select->where->nest()
1086
            ->like('first_name', '%' . $search . '%')
1087
            ->or->like('last_name', '%' . $search . '%')
1088
            ->or->like('email', '%' . $search . '%')
1089
            ->unnest();
1090
 
1091
        }
1092
 
1093
        $select->order(['first_name', 'last_name']);
1094
 
1095
        // echo $select->getSqlString($this->adapter->platform); exit;
1096
 
1097
        $prototype = new User();
1098
 
1099
        return $this->executeFetchAllObject($select, $prototype);
1100
    }
1 www 1101
 
1102
    /**
1103
     *
1104
     * @param int $company_id
3639 efrain 1105
     * @param int $network_id
1 www 1106
     * @param string $search
1107
     * @return User[]
1108
     */
3639 efrain 1109
    public function fetchAllSuggestForInvitationByCompanyIdAndNetworkIdAndSearch($company_id, $network_id, $search)
1110
    {
1111
        $selectCompanyUsers = $this->sql->select(CompanyUserMapper::_TABLE);
1112
        $selectCompanyUsers->columns(['user_id']);
1113
        $selectCompanyUsers->where->equalTo('company_id', $company_id);
1114
        $selectCompanyUsers->where->in('status', [
1115
            CompanyUser::STATUS_ACCEPTED,
1116
            CompanyUser::STATUS_PENDING,
1117
            CompanyUser::STATUS_SENT,
1118
 
1119
        ]);
1120
 
1121
        //echo $selectCompanyUsers->getSqlString($this->adapter->platform); exit;
1122
 
1123
        $select = $this->sql->select();
1124
        $select->from(self::_TABLE);
1125
        $select->where->notIn('id', $selectCompanyUsers);
1126
        $select->where->equalTo('network_id', $network_id);
1127
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1128
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1129
 
1130
        if($search) {
1131
            $select->where->nest()
1132
            ->like('first_name', '%' . $search . '%')
1133
            ->or->like('last_name', '%' . $search . '%')
1134
            ->or->like('email', '%' . $search . '%')
1135
            ->unnest();
1136
 
1137
        }
1138
 
1139
        $select->order(['first_name', 'last_name']);
1140
 
1141
        // echo $select->getSqlString($this->adapter->platform); exit;
1142
 
1143
        $prototype = new User();
1144
 
1145
        return $this->executeFetchAllObject($select, $prototype);
1146
    }
1147
 
1148
    /**
1149
     *
1150
     * @param int $company_id
1151
     * @param string $search
1152
     * @return User[]
1153
     */
1 www 1154
    public function fetchAllSuggestForInvitationByCompanyId($company_id, $search)
1155
    {
1156
        $selectCompanyUsers = $this->sql->select(CompanyUserMapper::_TABLE);
1157
        $selectCompanyUsers->columns(['user_id']);
1158
        $selectCompanyUsers->where->equalTo('company_id', $company_id);
1159
        $selectCompanyUsers->where->in('status', [
1160
            CompanyUser::STATUS_ACCEPTED,
1161
            CompanyUser::STATUS_PENDING,
1162
            CompanyUser::STATUS_SENT,
1163
 
1164
        ]);
1165
 
1166
        //echo $selectCompanyUsers->getSqlString($this->adapter->platform); exit;
1167
 
1168
        $select = $this->sql->select();
1169
        $select->from(self::_TABLE);
1170
        $select->where->notIn('id', $selectCompanyUsers);
1171
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1172
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1173
 
1174
        if($search) {
1175
            $select->where->nest()
1176
            ->like('first_name', '%' . $search . '%')
1177
            ->or->like('last_name', '%' . $search . '%')
1178
            ->or->like('email', '%' . $search . '%')
1179
            ->unnest();
1180
 
1181
        }
1182
 
1183
        $select->order(['first_name', 'last_name']);
1184
 
1185
       // echo $select->getSqlString($this->adapter->platform); exit;
1186
 
1187
        $prototype = new User();
1188
 
1189
        return $this->executeFetchAllObject($select, $prototype);
1190
    }
1191
 
1192
    /**
1193
     *
1194
     * @param int $group_id
3639 efrain 1195
     * @param int $network_id
1 www 1196
     * @param string $search
1197
     * @return User[]
1198
     */
3639 efrain 1199
    public function fetchAllSuggestForInvitationByGroupIdAndNetworkIdAndSearch($group_id, $network_id, $search)
1200
    {
1201
        $selectGroupMembers = $this->sql->select(GroupMemberMapper::_TABLE);
1202
        $selectGroupMembers->columns(['user_id']);
1203
        $selectGroupMembers->where->equalTo('group_id', $group_id);
1204
        $selectGroupMembers->where->in('status', [
1205
            CompanyUser::STATUS_ACCEPTED,
1206
        ]);
1207
 
1208
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
1209
 
1210
        $select = $this->sql->select();
1211
        $select->from(self::_TABLE);
1212
        $select->where->equalTo('network_id', $network_id);
1213
        $select->where->notIn('id', $selectGroupMembers);
1214
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1215
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1216
 
1217
        if($search) {
1218
            $select->where->nest()
1219
            ->like('first_name', '%' . $search . '%')
1220
            ->or->like('last_name', '%' . $search . '%')
1221
            ->or->like('email', '%' . $search . '%')
1222
            ->unnest();
1223
 
1224
        }
1225
 
1226
        $select->order(['first_name', 'last_name']);
1227
 
1228
        // echo $select->getSqlString($this->adapter->platform); exit;
1229
 
1230
        $prototype = new User();
1231
 
1232
        return $this->executeFetchAllObject($select, $prototype);
1233
    }
1234
 
1235
    /**
1236
     *
1237
     * @param int $group_id
1238
     * @param string $search
1239
     * @return User[]
1240
     */
1 www 1241
    public function fetchAllSuggestForInvitationByGroupId($group_id, $search)
1242
    {
1243
        $selectGroupMembers = $this->sql->select(GroupMemberMapper::_TABLE);
1244
        $selectGroupMembers->columns(['user_id']);
1245
        $selectGroupMembers->where->equalTo('group_id', $group_id);
1246
        $selectGroupMembers->where->in('status', [
1247
         CompanyUser::STATUS_ACCEPTED,
1248
        ]);
1249
 
1250
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
1251
 
1252
        $select = $this->sql->select();
1253
        $select->from(self::_TABLE);
1254
        $select->where->notIn('id', $selectGroupMembers);
1255
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1256
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1257
 
1258
        if($search) {
1259
            $select->where->nest()
1260
            ->like('first_name', '%' . $search . '%')
1261
            ->or->like('last_name', '%' . $search . '%')
1262
            ->or->like('email', '%' . $search . '%')
1263
            ->unnest();
1264
 
1265
        }
1266
 
1267
        $select->order(['first_name', 'last_name']);
1268
 
1269
        // echo $select->getSqlString($this->adapter->platform); exit;
1270
 
1271
        $prototype = new User();
1272
 
1273
        return $this->executeFetchAllObject($select, $prototype);
1274
    }
1665 nelberth 1275
 
3639 efrain 1276
 
1277
 
2090 nelberth 1278
    public function fetchAllSuggestForInvitationByHptgId($group_id,$company_id, $search)
1665 nelberth 1279
    {
1280
        $selectGroupMembers = $this->sql->select(HighPerformanceTeamsGroupsMembersMapper::_TABLE);
1281
        $selectGroupMembers->columns(['user_id']);
1282
        $selectGroupMembers->where->equalTo('group_id', $group_id);
1283
        $selectGroupMembers->where->in('status', [
2082 nelberth 1284
            HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED,
1285
            HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN,
1286
            HighPerformanceTeamsGroupsMembers::STATUS_INVITED,
1665 nelberth 1287
        ]);
1288
 
1289
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
1290
 
1291
        $select = $this->sql->select();
2092 nelberth 1292
        $select->from(['u' => self::_TABLE]);
1293
        $select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.user_id = u.id', []);
2091 nelberth 1294
        $select->where->notIn('u.id', $selectGroupMembers);
2090 nelberth 1295
        $select->where->equalTo('u.status', User::STATUS_ACTIVE);
1296
        $select->where->equalTo('u.email_verified', User::EMAIL_VERIFIED_YES);
1297
        $select->where->equalTo('cu.company_id', $company_id);
1298
 
1665 nelberth 1299
 
1300
        if($search) {
1301
            $select->where->nest()
2090 nelberth 1302
            ->like('u.first_name', '%' . $search . '%')
1303
            ->or->like('u.last_name', '%' . $search . '%')
1304
            ->or->like('u.email', '%' . $search . '%')
1665 nelberth 1305
            ->unnest();
1306
 
1307
        }
1308
 
2090 nelberth 1309
        $select->order(['u.first_name', 'u.last_name']);
1665 nelberth 1310
 
1311
        // echo $select->getSqlString($this->adapter->platform); exit;
1312
 
1313
        $prototype = new User();
1314
 
1315
        return $this->executeFetchAllObject($select, $prototype);
1316
    }
4751 efrain 1317
 
1 www 1318
    /**
1319
     *
1320
     * @param string $search
1321
     * @param int $page
1322
     * @param int $records_per_page
1323
     * @param string $order_field
1324
     * @param string $order_direction
1325
     * @return Paginator
1326
     */
1327
    public function fetchAllDataTable($search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
1328
    {
1329
        $prototype = new User();
1330
        $select = $this->sql->select(self::_TABLE);
1331
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
1332
 
1333
 
1334
        if($search) {
1335
            $select->where->nest()
1336
            ->like('first_name', '%' . $search . '%')
1337
            ->or->like('last_name', '%' . $search . '%')
1338
            ->or->like('email', '%' . $search . '%')
1339
            ->unnest();
1340
 
1341
        }
1342
 
1343
 
1344
        $select->order($order_field . ' ' . $order_direction);
1345
 
1346
        $hydrator   = new ObjectPropertyHydrator();
1347
        $resultset  = new HydratingResultSet($hydrator, $prototype);
1348
 
1349
        $adapter = new DbSelect($select, $this->sql, $resultset);
1350
        $paginator = new Paginator($adapter);
1351
        $paginator->setItemCountPerPage($records_per_page);
1352
        $paginator->setCurrentPageNumber($page);
1353
 
1354
 
1355
        return $paginator;
1356
    }
1357
 
1358
    /**
4398 efrain 1359
     *
4751 efrain 1360
     * @param int $network_id
1361
     * @param string $search
1362
     * @param int $page
1363
     * @param int $records_per_page
1364
     * @param string $order_field
1365
     * @param string $order_direction
1366
     * @return Paginator
1367
     */
1368
    public function fetchAllDataTableByNetworkId($network_id, $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
1369
    {
1370
        $prototype = new User();
1371
        $select = $this->sql->select(self::_TABLE);
1372
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
4776 efrain 1373
        $select->where->equalTo('network_id', $network_id);
1374
        $select->where->equalTo('request_access', User::REQUEST_ACCESS_APPROVED);
4751 efrain 1375
 
1376
 
1377
        if($search) {
1378
            $select->where->nest()
1379
            ->like('first_name', '%' . $search . '%')
1380
            ->or->like('last_name', '%' . $search . '%')
1381
            ->or->like('email', '%' . $search . '%')
1382
            ->unnest();
1383
 
1384
        }
1385
 
1386
 
1387
        $select->order($order_field . ' ' . $order_direction);
1388
 
1389
        $hydrator   = new ObjectPropertyHydrator();
1390
        $resultset  = new HydratingResultSet($hydrator, $prototype);
1391
 
1392
        $adapter = new DbSelect($select, $this->sql, $resultset);
1393
        $paginator = new Paginator($adapter);
1394
        $paginator->setItemCountPerPage($records_per_page);
1395
        $paginator->setCurrentPageNumber($page);
1396
 
1397
 
1398
        return $paginator;
1399
    }
4776 efrain 1400
 
1401
 
1402
 
1403
 
1404
    /**
1405
     *
1406
     * @param int $network_id
1407
     * @param string $search
1408
     * @param int $page
1409
     * @param int $records_per_page
1410
     * @param string $order_field
1411
     * @param string $order_direction
1412
     * @return Paginator
1413
     */
1414
    public function fetchAllDataTableRequestAccessPendingByNetworkId($network_id, $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
1415
    {
1416
        $prototype = new User();
1417
        $select = $this->sql->select(self::_TABLE);
1418
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
1419
        $select->where->equalTo('network_id', $network_id);
1420
        $select->where->equalTo('request_access', User::REQUEST_ACCESS_PENDING);
1421
 
1422
        if($search) {
1423
            $select->where->nest()
1424
            ->like('first_name', '%' . $search . '%')
1425
            ->or->like('last_name', '%' . $search . '%')
1426
            ->or->like('email', '%' . $search . '%')
1427
            ->unnest();
1428
 
1429
        }
1430
 
1431
 
1432
        $select->order($order_field . ' ' . $order_direction);
1433
 
1434
        $hydrator   = new ObjectPropertyHydrator();
1435
        $resultset  = new HydratingResultSet($hydrator, $prototype);
1436
 
1437
        $adapter = new DbSelect($select, $this->sql, $resultset);
1438
        $paginator = new Paginator($adapter);
1439
        $paginator->setItemCountPerPage($records_per_page);
1440
        $paginator->setCurrentPageNumber($page);
1441
 
1442
 
1443
        return $paginator;
1444
    }
4751 efrain 1445
 
1446
 
1447
    /**
1448
     *
4398 efrain 1449
     * @param int $id
1450
     * @return boolean
1451
     */
1452
    public function markIsAdult($id)
1453
    {
1454
        $update = $this->sql->update(self::_TABLE);
1455
        $update->set([
1456
            'id_adult' => User::IS_ADULT_YES,
1457
        ]);
1458
        $update->where->equalTo('id', $id);
1459
 
1460
        return $this->executeUpdate($update);
1461
    }
1462
 
1463
    /**
1464
     *
1465
     * @param int $id
1466
     * @return boolean
1467
     */
1468
    public function markIsNotAdult($id)
1469
    {
1470
        $update = $this->sql->update(self::_TABLE);
1471
        $update->set([
1472
            'id_adult' => User::IS_ADULT_NO,
1473
        ]);
1474
        $update->where->equalTo('id', $id);
1475
 
1476
        return $this->executeUpdate($update);
1477
    }
1478
 
1479
    /**
1 www 1480
     *
1481
     * @param int $id
1482
     * @return boolean
1483
     */
1484
    public function updateChatOnlineStatus($id)
1485
    {
1486
        $update = $this->sql->update(self::_TABLE);
1487
        $update->set([
1488
            'online' => 1,
1489
        ]);
1490
        $update->where->equalTo('id', $id);
1491
 
1492
        return $this->executeUpdate($update);
1493
    }
1494
 
3086 efrain 1495
 
1 www 1496
 
1497
    /**
1498
     *
1499
     * @param int $id
1500
     * @return boolean
1501
     */
1502
    public function updateLastActivity($id)
1503
    {
1504
        $update = $this->sql->update(self::_TABLE);
1505
        $update->set([
1506
            'last_activity_on' => new Expression('NOW()'),
3086 efrain 1507
            'online' => 1,
1 www 1508
        ]);
1509
        $update->where->equalTo('id', $id);
1510
 
1511
        return $this->executeUpdate($update);
1512
    }
1513
 
1514
 
1515
    /**
1516
     *
1517
     * @param int $id
1518
     * @return boolean
1519
     */
1520
    public function updateLastHeartBeat($id)
1521
    {
1522
        $update = $this->sql->update(self::_TABLE);
1523
        $update->set([
1524
            'last_heart_beat_at' => new Expression('NOW()'),
242 efrain 1525
            'online' => 1,
1526
 
1 www 1527
        ]);
1528
        $update->where->equalTo('id', $id);
1529
 
1530
        return $this->executeUpdate($update);
1531
    }
242 efrain 1532
 
1533
    /**
1534
     *
1535
     * @param int $id
1536
     * @return boolean
1537
     */
1538
    public function emailVerifyAndActive($id)
1539
    {
1540
        $update = $this->sql->update(self::_TABLE);
1541
        $update->set([
1542
            'email_verified' => User::EMAIL_VERIFIED_YES,
1543
            'status' => User::STATUS_ACTIVE,
1544
        ]);
1545
        $update->where->equalTo('id', $id);
1 www 1546
 
242 efrain 1547
        return $this->executeUpdate($update);
1548
    }
1549
 
630 efrain 1550
 
1551
    /**
1552
     *
1553
     * @param int $company_id
1554
     * @return User[]
1555
     */
1556
    public function fetchAllVerifyAndActiveByCompanyId($company_id)
1557
    {
1558
        $select = $this->sql->select();
1559
        $select->columns(['status', 'company_id']);
1560
        $select->from(['tb1' => CompanyUserMapper::_TABLE]);
1561
        $select->join(['tb2' => self::_TABLE] , 'tb1.user_id = tb2.id');
1562
 
1563
 
1564
 
1565
        $select->where->equalTo('tb1.company_id', $company_id);
1566
        $select->where->equalTo('tb1.owner', CompanyUser::OWNER_NO);
1567
        $select->where->in('tb1.status', [CompanyUser::STATUS_ACCEPTED, CompanyUser::STATUS_ADMIN_WILL_ADD]);
1568
        $select->where->equalTo('tb2.email_verified', User::EMAIL_VERIFIED_YES);
1569
        $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
1570
 
1571
        $select->order('first_name', 'last_name', 'email');
1572
 
1573
        $prototype = User();
1574
 
1575
        return $this->executeFetchAllObject($select, $prototype);
1576
    }
1 www 1577
}