Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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