Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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