Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 1271 | Rev 1979 | 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;
21
 
22
 
1665 nelberth 23
 
1 www 24
class UserMapper extends MapperCommon
25
{
26
    const _TABLE = 'tbl_users';
27
 
28
    /**
29
     *
30
     * @var UserMapper
31
     */
32
    private static $_instance;
33
 
34
    /**
35
     *
36
     * @param AdapterInterface $adapter
37
     */
38
    private function __construct($adapter)
39
    {
40
        parent::__construct($adapter);
41
    }
42
 
43
    /**
44
     *
45
     * @param AdapterInterface $adapter
46
     * @return UserMapper
47
     */
48
    public static function getInstance($adapter)
49
    {
50
        if(self::$_instance == null) {
51
            self::$_instance = new UserMapper($adapter);
52
        }
53
        return self::$_instance;
54
    }
55
 
56
    /**
57
     *
58
     * @param string $uuid
59
     * @return User
60
     */
61
    public function fetchOneByUuid($uuid)
62
    {
63
        $prototype = new User();
64
        $select = $this->sql->select(self::_TABLE);
65
        $select->where->equalTo('uuid', $uuid);
66
 
67
 
68
        return $this->executeFetchOneObject($select, $prototype);
69
    }
70
 
71
    /**
72
     *
73
     * @param int $id
74
     * @return User
75
     */
76
    public function fetchOne($id)
77
    {
78
        $prototype = new User();
79
        $select = $this->sql->select(self::_TABLE);
80
        $select->where->equalTo('id', $id);
81
 
82
        return $this->executeFetchOneObject($select, $prototype);
83
    }
84
 
1271 nelberth 85
    public function fetchOneRelation($id)
86
    {
87
        $prototype = new User();
88
        $select = $this->sql->select(self::_TABLE);
89
        $select->where->equalTo('id', $id);
90
 
91
        return $this->executeFetchOneObject($select, $prototype);
92
    }
93
 
94
 
1 www 95
    /**
96
     *
97
     * @param string $email
98
     * @return void|User
99
     */
100
    public function fetchOneByEmail($email)
101
    {
102
        $prototype = new User();
103
        $select = $this->sql->select(self::_TABLE);
104
        $select->where->equalTo('email', $email);
105
 
106
        //echo $select->getSqlString($this->adapter->platform); exit;
107
 
108
        return $this->executeFetchOneObject($select, $prototype);
109
    }
110
 
111
    /**
112
     *
113
     * @param string $password_reset_key
114
     * @return void|User
115
     */
116
    public function fetchOneByPasswordResetKey($password_reset_key)
117
    {
118
        $prototype = new User();
119
        $select = $this->sql->select(self::_TABLE);
120
        $select->where->equalTo('password_reset_key', $password_reset_key);
121
 
122
        return $this->executeFetchOneObject($select, $prototype);
123
    }
124
 
125
    /**
126
     *
127
     * @param string $activation_key
128
     * @return void|User
129
     */
130
    public function fetchOneByActivationKey($activation_key)
131
    {
132
        $prototype = new User();
133
        $select = $this->sql->select(self::_TABLE);
134
        $select->where->equalTo('activation_key', $activation_key);
135
 
136
        return $this->executeFetchOneObject($select, $prototype);
137
    }
138
 
139
 
140
 
141
    /**
142
     *
143
     * @param string $keyword
144
     * @param int $current_user
145
     * @return User[]
146
     */
147
    public function fetchAllByKeyword($keyword, $current_user = 0)
148
    {
149
 
150
        $prototype = new User();
151
 
152
        $select = $this->sql->select(self::_TABLE);
153
 
154
        $select->where->equalTo('status', User::STATUS_ACTIVE);
155
        $select->where->notEqualTo('id', $current_user);
156
        $select->where->and->nest()
157
            ->like('first_name', '%' . $keyword . '%')
158
            ->or->like('last_name', '%' . $keyword . '%')
159
            ->or->like(new Expression("CONCAT(first_name,' ',last_name)"), '%'. $keyword . '%')
160
            ->unnest();
161
 
162
 
163
        return $this->executeFetchAllObject($select, $prototype);
164
    }
165
 
166
    /**
167
     *
168
     * @param int[] $ids
169
     * @param int $current_user
170
     * @param string $status
171
     * @return User[]
172
     */
173
    public function fetchAllByIds($ids, $current_user = 0, $status = User::STATUS_ACTIVE)
174
    {
175
 
176
        $prototype = new User();
177
        $select = $this->sql->select(self::_TABLE);
178
 
179
 
180
        $select->where->equalTo('status', User::STATUS_ACTIVE);
630 efrain 181
        $select->where->and->in('id',$ids);
1 www 182
 
183
        if($current_user) {
184
            $select->where->and->notEqualTo('id ', $current_user);
185
        }
630 efrain 186
        $select->order(['first_name ASC', 'last_name ASC', 'email ASC']);
1 www 187
 
188
        return $this->executeFetchAllObject($select, $prototype);
189
    }
190
 
191
 
192
    /**
193
     *
194
     * @return User[]
195
     */
196
    public function fetchAllByActives()
197
    {
198
 
199
        $prototype = new User();
200
        $select = $this->sql->select(self::_TABLE);
201
 
202
 
203
        $select->where->equalTo('status', User::STATUS_ACTIVE);
204
        $select->where->equalTo('email_verified',User::EMAIL_VERIFIED_YES);
205
 
646 efrain 206
        $select->order(['first_name DESC, last_name DESC, email_DESC']);
207
 
1 www 208
 
209
        return $this->executeFetchAllObject($select, $prototype);
210
    }
211
 
212
    /**
213
     *
646 efrain 214
     * @param int $company_id
215
     * @return array
216
     */
217
    public function fetchAllByCompanyId($company_id)
218
    {
219
 
220
        $prototype = new User();
221
        $select = $this->sql->select();
222
        $select->from(['tb1' => self::_TABLE]);
223
        $select->join(['tb2' => CompanyUserMapper::_TABLE], 'tb1.id = tb2.user_id', []);
224
 
225
 
226
        $select->where->equalTo('tb2.company_id', $company_id);
227
        $select->where->in('tb2.status', [CompanyUser::STATUS_ACCEPTED, CompanyUser::STATUS_ADMIN_WILL_ADD]);
228
 
229
        $select->where->equalTo('tb1.status', User::STATUS_ACTIVE);
230
        $select->where->equalTo('tb1.email_verified',User::EMAIL_VERIFIED_YES);
231
 
232
        $select->order(['first_name DESC, last_name DESC, email_DESC']);
233
 
234
        return $this->executeFetchAllObject($select, $prototype);
235
    }
236
 
237
    /**
238
     *
1 www 239
     * @param int $user_id
240
     * @param string $password_reset_key
241
     * @return boolean
242
     */
243
    public function updatePasswordResetKey($user_id, $password_reset_key)
244
    {
245
        $values = [
246
            'password_reset_key' => $password_reset_key,
247
            'password_generated_on' => date('Y-m-d H:i:s'),
248
            'updated_on' => new Expression('NOW()')
249
        ];
250
 
251
        $update = $this->sql->update(self::_TABLE);
252
        $update->set($values);
253
        $update->where->equalTo('id', $user_id);
254
 
255
        return $this->executeUpdate($update);
256
    }
257
 
258
 
259
 
260
    /**
261
     *
262
     * @param User $user
263
     * @param string $password_hash
264
     * @return boolean
265
     */
266
    public function updatePassword($user, $password_hash)
267
    {
268
        $values = [
269
            'password'              => $password_hash,
270
            'password_reset_key'    => '',
271
            'password_updated_on'   => date('Y-m-d H:i:s'),
272
            'login_attempt'         => 0,
273
            'blocked'               => User::BLOCKED_NO,
274
            'updated_on'            => new Expression('NOW()')
275
        ];
276
 
277
        $update = $this->sql->update(self::_TABLE);
278
        $update->set($values);
279
        $update->where->equalTo('id', $user->id);
280
 
281
        return $this->executeUpdate($update);
282
    }
283
 
284
 
285
    /**
286
     *
287
     * @param User $user
288
     * @return boolean
289
     */
290
    public function unblock($user)
291
    {
292
        $values = [
293
            'login_attempt'         => 0,
294
            'blocked'               => User::BLOCKED_NO,
295
            'updated_on'            => new Expression('NOW()')
296
        ];
297
 
298
        $update = $this->sql->update(self::_TABLE);
299
        $update->set($values);
300
        $update->where->equalTo('id', $user->id);
301
 
302
        return $this->executeUpdate($update);
303
    }
304
 
305
 
306
 
307
 
308
    /**
309
     *
310
     * @param User $user
311
     * @param string $one_time_password
312
     * @return boolean
313
     */
314
    public function updateOneTimePassword($user, $one_time_password)
315
    {
316
        $values = [
317
            'one_time_password' => $one_time_password,
318
            'updated_on'        => new Expression('NOW()')
319
        ];
320
 
321
        $update = $this->sql->update(self::_TABLE);
322
        $update->set($values);
323
        $update->where->equalTo('id', $user->id);
324
 
325
        return $this->executeUpdate($update);
326
    }
327
 
328
 
329
    /**
330
     *
331
     * @param User $user
332
     * @return boolean
333
     */
334
    public function update($user)
335
    {
336
        $hydrator = new ObjectPropertyHydrator();
337
        $values = $hydrator->extract($user);
338
        $value = $this->removeEmpty($values);
339
 
340
        $values['updated_on'] = new Expression('NOW()') ;
341
 
342
        $update = $this->sql->update(self::_TABLE);
343
        $update->set($values);
344
        $update->where->equalTo('id',$user->id);
345
 
346
        return $this->executeUpdate($update);
347
    }
348
 
349
    /**
350
     *
351
     * @param User $user
352
     * @return boolean
353
     */
354
    public function updatePrivacy($user)
355
    {
356
        $values = [
357
            'show_in_search' => $user->show_in_search,
358
            'updated_on' => new Expression('NOW()')
359
        ];
360
 
361
        $update = $this->sql->update(self::_TABLE);
362
        $update->set($values);
363
        $update->where->equalTo('id',$user->id);
364
 
365
        return $this->executeUpdate($update);
366
    }
367
 
368
    /**
369
     *
370
     * @param User $user
371
     * @return boolean
372
     */
373
    public function updateBasic($user)
374
    {
375
        $values = [
376
            'first_name' => $user->first_name,
377
            'last_name' => $user->last_name,
378
            'phone' => $user->phone,
379
            'gender' => $user->gender,
380
            'updated_on' => new Expression('NOW()')
381
        ];
382
 
383
        $update = $this->sql->update(self::_TABLE);
384
        $update->set($values);
385
        $update->where->equalTo('id',$user->id);
386
 
387
        return $this->executeUpdate($update);
388
    }
389
 
390
 
391
    /**
392
     *
393
     * @param User $user
394
     * @return boolean
395
     */
396
    public function updateImage($user)
397
    {
398
        $values = [
399
            'image' => $user->image,
400
            'updated_on' => new Expression('NOW()')
401
        ];
402
 
403
        $update = $this->sql->update(self::_TABLE);
404
        $update->set($values);
405
        $update->where->equalTo('id',$user->id);
406
 
407
        return $this->executeUpdate($update);
408
    }
409
 
410
    /**
411
     *
412
     * @param User $user
413
     * @return boolean
414
     */
415
    public function updateLocation($user)
416
    {
417
        $values = [
418
            'location_id' => $user->location_id,
419
            'updated_on' => new Expression('NOW()')
420
        ];
421
 
422
        $update = $this->sql->update(self::_TABLE);
423
        $update->set($values);
424
        $update->where->equalTo('id',$user->id);
425
 
426
        return $this->executeUpdate($update);
427
    }
428
 
429
    /**
430
     *
431
     * @param int $user_id
432
     * @return boolean
433
     */
434
    public function activateAccount($user_id)
435
    {
436
        $values = [
437
            'email_verified'    => User::EMAIL_VERIFIED_YES,
438
            'status'            => User::STATUS_ACTIVE,
439
            'activation_key'    => '',
440
            'updated_on' => new Expression('NOW()')
441
        ];
442
 
443
        $update = $this->sql->update(self::_TABLE);
444
        $update->set($values);
445
        $update->where->equalTo('id', $user_id);
446
 
447
        return $this->executeUpdate($update);
448
    }
449
 
450
    /**
451
     *
452
     * @param User $user
453
     * @return boolean
454
     */
455
    public function insert($user)
456
    {
457
 
458
        $hydrator = new ObjectPropertyHydrator();
459
        $values = $hydrator->extract($user);
460
        $values = $this->removeEmpty($values);
461
 
462
        $insert = $this->sql->insert(self::_TABLE);
463
        $insert->values($values);
464
 
465
        $response = $this->executeInsert($insert);
466
        if($response) {
467
            $user->id = $this->lastInsertId;
468
        }
469
 
470
        return $response;
471
    }
472
 
473
 
474
    /**
475
     *
476
     * @return boolean
477
     */
478
    public function truncate()
479
    {
480
        $sql = sprintf('TRUNCATE TABLE `%s` ', self::_TABLE);
481
        return $this->executeSentenceWithParameters($sql);
482
    }
483
 
484
    /**
485
     *
486
     * @param int $company_id
487
     * @param string $status
488
     * @param string $search
489
     * @param int $page
490
     * @param int $records_per_page
491
     * @param string $order_field
492
     * @param string $order_direction
493
     * @return Paginator
494
     */
495
    public function fetchAllDataTableByCompanyId($company_id, $status = '', $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
496
    {
497
        $select = $this->sql->select();
498
        $select->columns(['status', 'backend', 'creator']);
499
        $select->from(['tb1' => CompanyUserMapper::_TABLE]);
500
        $select->join(['tb2' => self::_TABLE] , 'tb1.user_id = tb2.id', [
501
            'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
502
            'blocked', 'login_attempt', 'email_verified'
503
 
504
        ]);
505
 
506
        $select->where->equalTo('tb1.company_id', $company_id);
507
        $select->where->equalTo('tb1.owner', CompanyUser::OWNER_NO);
508
 
509
        if($status) {
510
            $select->where->equalTo('tb1.status', $status);
511
 
512
        }
513
 
514
        if($search) {
515
            $select->where->nest()
516
            ->like('first_name', '%' . $search . '%')
517
            ->or->like('last_name', '%' . $search . '%')
518
            ->or->like('email', '%' . $search . '%')
519
            ->unnest();
520
 
521
        }
522
 
523
 
524
        $select->order($order_field . ' ' . $order_direction);
525
 
526
        $hydrator   = new ArraySerializableHydrator();
527
        $resultset  = new HydratingResultSet($hydrator);
528
 
529
        $adapter = new DbSelect($select, $this->sql, $resultset);
530
        $paginator = new Paginator($adapter);
531
        $paginator->setItemCountPerPage($records_per_page);
532
        $paginator->setCurrentPageNumber($page);
533
 
534
 
535
        return $paginator;
536
    }
537
 
538
 
539
    /**
540
     *
541
     * @param int $company_id
542
     * @param string $search
543
     * @param int $page
544
     * @param int $records_per_page
545
     * @param string $order_field
546
     * @param string $order_direction
547
     * @return Paginator
548
     */
549
    public function fetchAllDataTableStudensByCompanyId($company_id,  $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
550
    {
551
        $date = date('Y-m-d');
552
 
553
        $selectCapsuleUser = $this->getSql()->select();
554
        $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
555
        $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
556
        $selectCapsuleUser->where->equalTo('company_id', $company_id);
557
        $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
558
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
559
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
560
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
561
 
562
        //echo $select->getSqlString($this->adapter->platform); exit;
563
 
564
        $select = $this->sql->select();
565
        $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email','blocked']);
566
        $select->from(UserMapper::_TABLE);
567
        $select->where->in('id', $selectCapsuleUser);
568
 
569
 
570
        if($search) {
571
            $select->where->nest()
572
            ->like('first_name', '%' . $search . '%')
573
            ->or->like('last_name', '%' . $search . '%')
574
            ->or->like('email', '%' . $search . '%')
575
            ->unnest();
576
 
577
        }
578
 
579
 
580
        $select->order($order_field . ' ' . $order_direction);
581
 
582
        $hydrator   = new ArraySerializableHydrator();
583
        $resultset  = new HydratingResultSet($hydrator);
584
 
585
        $adapter = new DbSelect($select, $this->sql, $resultset);
586
        $paginator = new Paginator($adapter);
587
        $paginator->setItemCountPerPage($records_per_page);
588
        $paginator->setCurrentPageNumber($page);
589
 
590
 
591
        return $paginator;
592
    }
593
 
594
    /**
595
     *
596
     * @param string $search
597
     * @return User[]
598
     */
599
    public function fetchAllSuggest($search)
600
    {
601
 
602
        $select = $this->sql->select();
603
        $select->from(self::_TABLE);
604
        $select->where->equalTo('status', User::STATUS_ACTIVE);
605
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
606
 
607
        if($search) {
608
            $select->where->nest()
609
            ->like('first_name', '%' . $search . '%')
610
            ->or->like('last_name', '%' . $search . '%')
611
            ->or->like('email', '%' . $search . '%')
612
            ->unnest();
613
 
614
        }
615
 
616
        $select->order(['first_name', 'last_name']);
617
 
618
        // echo $select->getSqlString($this->adapter->platform); exit;
619
 
620
        $prototype = new User();
621
 
622
        return $this->executeFetchAllObject($select, $prototype);
623
    }
624
 
625
 
626
    /**
627
     *
628
     * @param int $company_id
629
     * @param string $search
630
     * @return User[]
631
     */
632
    public function fetchAllSuggestForInvitationByCompanyId($company_id, $search)
633
    {
634
        $selectCompanyUsers = $this->sql->select(CompanyUserMapper::_TABLE);
635
        $selectCompanyUsers->columns(['user_id']);
636
        $selectCompanyUsers->where->equalTo('company_id', $company_id);
637
        $selectCompanyUsers->where->in('status', [
638
            CompanyUser::STATUS_ACCEPTED,
639
            CompanyUser::STATUS_PENDING,
640
            CompanyUser::STATUS_SENT,
641
 
642
        ]);
643
 
644
        //echo $selectCompanyUsers->getSqlString($this->adapter->platform); exit;
645
 
646
        $select = $this->sql->select();
647
        $select->from(self::_TABLE);
648
        $select->where->notIn('id', $selectCompanyUsers);
649
        $select->where->equalTo('status', User::STATUS_ACTIVE);
650
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
651
 
652
        if($search) {
653
            $select->where->nest()
654
            ->like('first_name', '%' . $search . '%')
655
            ->or->like('last_name', '%' . $search . '%')
656
            ->or->like('email', '%' . $search . '%')
657
            ->unnest();
658
 
659
        }
660
 
661
        $select->order(['first_name', 'last_name']);
662
 
663
       // echo $select->getSqlString($this->adapter->platform); exit;
664
 
665
        $prototype = new User();
666
 
667
        return $this->executeFetchAllObject($select, $prototype);
668
    }
669
 
670
    /**
671
     *
672
     * @param int $group_id
673
     * @param string $search
674
     * @return User[]
675
     */
676
    public function fetchAllSuggestForInvitationByGroupId($group_id, $search)
677
    {
678
        $selectGroupMembers = $this->sql->select(GroupMemberMapper::_TABLE);
679
        $selectGroupMembers->columns(['user_id']);
680
        $selectGroupMembers->where->equalTo('group_id', $group_id);
681
        $selectGroupMembers->where->in('status', [
682
         CompanyUser::STATUS_ACCEPTED,
683
        ]);
684
 
685
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
686
 
687
        $select = $this->sql->select();
688
        $select->from(self::_TABLE);
689
        $select->where->notIn('id', $selectGroupMembers);
690
        $select->where->equalTo('status', User::STATUS_ACTIVE);
691
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
692
 
693
        if($search) {
694
            $select->where->nest()
695
            ->like('first_name', '%' . $search . '%')
696
            ->or->like('last_name', '%' . $search . '%')
697
            ->or->like('email', '%' . $search . '%')
698
            ->unnest();
699
 
700
        }
701
 
702
        $select->order(['first_name', 'last_name']);
703
 
704
        // echo $select->getSqlString($this->adapter->platform); exit;
705
 
706
        $prototype = new User();
707
 
708
        return $this->executeFetchAllObject($select, $prototype);
709
    }
1665 nelberth 710
 
711
    public function fetchAllSuggestForInvitationByHptgId($group_id, $search)
712
    {
713
        $selectGroupMembers = $this->sql->select(HighPerformanceTeamsGroupsMembersMapper::_TABLE);
714
        $selectGroupMembers->columns(['user_id']);
715
        $selectGroupMembers->where->equalTo('group_id', $group_id);
716
        $selectGroupMembers->where->in('status', [
717
         CompanyUser::STATUS_ACCEPTED,
718
        ]);
719
 
720
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
721
 
722
        $select = $this->sql->select();
723
        $select->from(self::_TABLE);
724
        $select->where->notIn('id', $selectGroupMembers);
725
        $select->where->equalTo('status', User::STATUS_ACTIVE);
726
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
727
 
728
        if($search) {
729
            $select->where->nest()
730
            ->like('first_name', '%' . $search . '%')
731
            ->or->like('last_name', '%' . $search . '%')
732
            ->or->like('email', '%' . $search . '%')
733
            ->unnest();
734
 
735
        }
736
 
737
        $select->order(['first_name', 'last_name']);
738
 
739
        // echo $select->getSqlString($this->adapter->platform); exit;
740
 
741
        $prototype = new User();
742
 
743
        return $this->executeFetchAllObject($select, $prototype);
744
    }
1 www 745
    /**
746
     *
747
     * @param string $search
748
     * @param int $page
749
     * @param int $records_per_page
750
     * @param string $order_field
751
     * @param string $order_direction
752
     * @return Paginator
753
     */
754
    public function fetchAllDataTable($search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
755
    {
756
        $prototype = new User();
757
        $select = $this->sql->select(self::_TABLE);
758
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
759
 
760
 
761
        if($search) {
762
            $select->where->nest()
763
            ->like('first_name', '%' . $search . '%')
764
            ->or->like('last_name', '%' . $search . '%')
765
            ->or->like('email', '%' . $search . '%')
766
            ->unnest();
767
 
768
        }
769
 
770
 
771
        $select->order($order_field . ' ' . $order_direction);
772
 
773
        $hydrator   = new ObjectPropertyHydrator();
774
        $resultset  = new HydratingResultSet($hydrator, $prototype);
775
 
776
        $adapter = new DbSelect($select, $this->sql, $resultset);
777
        $paginator = new Paginator($adapter);
778
        $paginator->setItemCountPerPage($records_per_page);
779
        $paginator->setCurrentPageNumber($page);
780
 
781
 
782
        return $paginator;
783
    }
784
 
785
    /**
786
     *
787
     * @param int $id
788
     * @return boolean
789
     */
790
    public function updateChatOnlineStatus($id)
791
    {
792
        $update = $this->sql->update(self::_TABLE);
793
        $update->set([
794
            'online' => 1,
795
        ]);
796
        $update->where->equalTo('id', $id);
797
 
798
        return $this->executeUpdate($update);
799
    }
800
 
801
    /**
802
     *
803
     * @param int $id
804
     * @return boolean
805
     */
806
    public function updateChatOfflineStatus($id)
807
    {
808
        $update = $this->sql->update(self::_TABLE);
809
        $update->set([
810
            'online' => 0,
811
        ]);
812
        $update->where->equalTo('id', $id);
813
 
814
        return $this->executeUpdate($update);
815
    }
816
 
817
    /**
818
     *
819
     * @param int $id
820
     * @return boolean
821
     */
822
    public function updateLastActivity($id)
823
    {
824
        $update = $this->sql->update(self::_TABLE);
825
        $update->set([
826
            'last_activity_on' => new Expression('NOW()'),
827
        ]);
828
        $update->where->equalTo('id', $id);
829
 
830
        return $this->executeUpdate($update);
831
    }
832
 
833
 
834
    /**
835
     *
836
     * @param int $id
837
     * @return boolean
838
     */
839
    public function updateLastHeartBeat($id)
840
    {
841
        $update = $this->sql->update(self::_TABLE);
842
        $update->set([
843
            'last_heart_beat_at' => new Expression('NOW()'),
242 efrain 844
            'online' => 1,
845
 
1 www 846
        ]);
847
        $update->where->equalTo('id', $id);
848
 
849
        return $this->executeUpdate($update);
850
    }
242 efrain 851
 
852
    /**
853
     *
854
     * @param int $id
855
     * @return boolean
856
     */
857
    public function emailVerifyAndActive($id)
858
    {
859
        $update = $this->sql->update(self::_TABLE);
860
        $update->set([
861
            'email_verified' => User::EMAIL_VERIFIED_YES,
862
            'status' => User::STATUS_ACTIVE,
863
        ]);
864
        $update->where->equalTo('id', $id);
1 www 865
 
242 efrain 866
        return $this->executeUpdate($update);
867
    }
868
 
630 efrain 869
 
870
    /**
871
     *
872
     * @param int $company_id
873
     * @return User[]
874
     */
875
    public function fetchAllVerifyAndActiveByCompanyId($company_id)
876
    {
877
        $select = $this->sql->select();
878
        $select->columns(['status', 'company_id']);
879
        $select->from(['tb1' => CompanyUserMapper::_TABLE]);
880
        $select->join(['tb2' => self::_TABLE] , 'tb1.user_id = tb2.id');
881
 
882
 
883
 
884
        $select->where->equalTo('tb1.company_id', $company_id);
885
        $select->where->equalTo('tb1.owner', CompanyUser::OWNER_NO);
886
        $select->where->in('tb1.status', [CompanyUser::STATUS_ACCEPTED, CompanyUser::STATUS_ADMIN_WILL_ADD]);
887
        $select->where->equalTo('tb2.email_verified', User::EMAIL_VERIFIED_YES);
888
        $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
889
 
890
        $select->order('first_name', 'last_name', 'email');
891
 
892
        $prototype = User();
893
 
894
        return $this->executeFetchAllObject($select, $prototype);
895
    }
1 www 896
}