Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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