Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 2092 | Rev 3086 | 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
    }
2381 nelberth 621
 
622
 
1 www 623
    /**
624
     *
2381 nelberth 625
     * @param int $company_id
1 www 626
     * @param string $search
2381 nelberth 627
     * @param int $page
628
     * @param int $records_per_page
629
     * @param string $order_field
630
     * @param string $order_direction
631
     * @return Paginator
632
     */
633
    public function fetchAllStudensByCompanyId($company_id)
634
    {
635
 
636
        $date = date('Y-m-d');
637
 
638
        $selectCapsuleUser = $this->getSql()->select();
639
        $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
640
        $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
641
        $selectCapsuleUser->where->equalTo('company_id', $company_id);
642
        $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
643
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
644
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
645
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
646
 
647
        //echo $select->getSqlString($this->adapter->platform); exit;
648
        $prototype = new User();
649
        $select = $this->sql->select();
650
        $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email','blocked']);
651
        $select->from(UserMapper::_TABLE);
652
        $select->where->in('id', $selectCapsuleUser);
653
        return $this->executeFetchAllObject($select, $prototype);
654
 
655
    }
656
 
657
    /**
658
     *
659
     * @param string $search
1 www 660
     * @return User[]
661
     */
662
    public function fetchAllSuggest($search)
663
    {
664
 
665
        $select = $this->sql->select();
666
        $select->from(self::_TABLE);
667
        $select->where->equalTo('status', User::STATUS_ACTIVE);
668
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
669
 
670
        if($search) {
671
            $select->where->nest()
672
            ->like('first_name', '%' . $search . '%')
673
            ->or->like('last_name', '%' . $search . '%')
674
            ->or->like('email', '%' . $search . '%')
675
            ->unnest();
676
 
677
        }
678
 
679
        $select->order(['first_name', 'last_name']);
680
 
681
        // echo $select->getSqlString($this->adapter->platform); exit;
682
 
683
        $prototype = new User();
684
 
685
        return $this->executeFetchAllObject($select, $prototype);
686
    }
687
 
688
 
689
    /**
690
     *
691
     * @param int $company_id
692
     * @param string $search
693
     * @return User[]
694
     */
695
    public function fetchAllSuggestForInvitationByCompanyId($company_id, $search)
696
    {
697
        $selectCompanyUsers = $this->sql->select(CompanyUserMapper::_TABLE);
698
        $selectCompanyUsers->columns(['user_id']);
699
        $selectCompanyUsers->where->equalTo('company_id', $company_id);
700
        $selectCompanyUsers->where->in('status', [
701
            CompanyUser::STATUS_ACCEPTED,
702
            CompanyUser::STATUS_PENDING,
703
            CompanyUser::STATUS_SENT,
704
 
705
        ]);
706
 
707
        //echo $selectCompanyUsers->getSqlString($this->adapter->platform); exit;
708
 
709
        $select = $this->sql->select();
710
        $select->from(self::_TABLE);
711
        $select->where->notIn('id', $selectCompanyUsers);
712
        $select->where->equalTo('status', User::STATUS_ACTIVE);
713
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
714
 
715
        if($search) {
716
            $select->where->nest()
717
            ->like('first_name', '%' . $search . '%')
718
            ->or->like('last_name', '%' . $search . '%')
719
            ->or->like('email', '%' . $search . '%')
720
            ->unnest();
721
 
722
        }
723
 
724
        $select->order(['first_name', 'last_name']);
725
 
726
       // echo $select->getSqlString($this->adapter->platform); exit;
727
 
728
        $prototype = new User();
729
 
730
        return $this->executeFetchAllObject($select, $prototype);
731
    }
732
 
733
    /**
734
     *
735
     * @param int $group_id
736
     * @param string $search
737
     * @return User[]
738
     */
739
    public function fetchAllSuggestForInvitationByGroupId($group_id, $search)
740
    {
741
        $selectGroupMembers = $this->sql->select(GroupMemberMapper::_TABLE);
742
        $selectGroupMembers->columns(['user_id']);
743
        $selectGroupMembers->where->equalTo('group_id', $group_id);
744
        $selectGroupMembers->where->in('status', [
745
         CompanyUser::STATUS_ACCEPTED,
746
        ]);
747
 
748
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
749
 
750
        $select = $this->sql->select();
751
        $select->from(self::_TABLE);
752
        $select->where->notIn('id', $selectGroupMembers);
753
        $select->where->equalTo('status', User::STATUS_ACTIVE);
754
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
755
 
756
        if($search) {
757
            $select->where->nest()
758
            ->like('first_name', '%' . $search . '%')
759
            ->or->like('last_name', '%' . $search . '%')
760
            ->or->like('email', '%' . $search . '%')
761
            ->unnest();
762
 
763
        }
764
 
765
        $select->order(['first_name', 'last_name']);
766
 
767
        // echo $select->getSqlString($this->adapter->platform); exit;
768
 
769
        $prototype = new User();
770
 
771
        return $this->executeFetchAllObject($select, $prototype);
772
    }
1665 nelberth 773
 
2090 nelberth 774
    public function fetchAllSuggestForInvitationByHptgId($group_id,$company_id, $search)
1665 nelberth 775
    {
776
        $selectGroupMembers = $this->sql->select(HighPerformanceTeamsGroupsMembersMapper::_TABLE);
777
        $selectGroupMembers->columns(['user_id']);
778
        $selectGroupMembers->where->equalTo('group_id', $group_id);
779
        $selectGroupMembers->where->in('status', [
2082 nelberth 780
            HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED,
781
            HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN,
782
            HighPerformanceTeamsGroupsMembers::STATUS_INVITED,
1665 nelberth 783
        ]);
784
 
785
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
786
 
787
        $select = $this->sql->select();
2092 nelberth 788
        $select->from(['u' => self::_TABLE]);
789
        $select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.user_id = u.id', []);
2091 nelberth 790
        $select->where->notIn('u.id', $selectGroupMembers);
2090 nelberth 791
        $select->where->equalTo('u.status', User::STATUS_ACTIVE);
792
        $select->where->equalTo('u.email_verified', User::EMAIL_VERIFIED_YES);
793
        $select->where->equalTo('cu.company_id', $company_id);
794
 
1665 nelberth 795
 
796
        if($search) {
797
            $select->where->nest()
2090 nelberth 798
            ->like('u.first_name', '%' . $search . '%')
799
            ->or->like('u.last_name', '%' . $search . '%')
800
            ->or->like('u.email', '%' . $search . '%')
1665 nelberth 801
            ->unnest();
802
 
803
        }
804
 
2090 nelberth 805
        $select->order(['u.first_name', 'u.last_name']);
1665 nelberth 806
 
807
        // echo $select->getSqlString($this->adapter->platform); exit;
808
 
809
        $prototype = new User();
810
 
811
        return $this->executeFetchAllObject($select, $prototype);
812
    }
1 www 813
    /**
814
     *
815
     * @param string $search
816
     * @param int $page
817
     * @param int $records_per_page
818
     * @param string $order_field
819
     * @param string $order_direction
820
     * @return Paginator
821
     */
822
    public function fetchAllDataTable($search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
823
    {
824
        $prototype = new User();
825
        $select = $this->sql->select(self::_TABLE);
826
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
827
 
828
 
829
        if($search) {
830
            $select->where->nest()
831
            ->like('first_name', '%' . $search . '%')
832
            ->or->like('last_name', '%' . $search . '%')
833
            ->or->like('email', '%' . $search . '%')
834
            ->unnest();
835
 
836
        }
837
 
838
 
839
        $select->order($order_field . ' ' . $order_direction);
840
 
841
        $hydrator   = new ObjectPropertyHydrator();
842
        $resultset  = new HydratingResultSet($hydrator, $prototype);
843
 
844
        $adapter = new DbSelect($select, $this->sql, $resultset);
845
        $paginator = new Paginator($adapter);
846
        $paginator->setItemCountPerPage($records_per_page);
847
        $paginator->setCurrentPageNumber($page);
848
 
849
 
850
        return $paginator;
851
    }
852
 
853
    /**
854
     *
855
     * @param int $id
856
     * @return boolean
857
     */
858
    public function updateChatOnlineStatus($id)
859
    {
860
        $update = $this->sql->update(self::_TABLE);
861
        $update->set([
862
            'online' => 1,
863
        ]);
864
        $update->where->equalTo('id', $id);
865
 
866
        return $this->executeUpdate($update);
867
    }
868
 
869
    /**
870
     *
871
     * @param int $id
872
     * @return boolean
873
     */
874
    public function updateChatOfflineStatus($id)
875
    {
876
        $update = $this->sql->update(self::_TABLE);
877
        $update->set([
878
            'online' => 0,
879
        ]);
880
        $update->where->equalTo('id', $id);
881
 
882
        return $this->executeUpdate($update);
883
    }
884
 
885
    /**
886
     *
887
     * @param int $id
888
     * @return boolean
889
     */
890
    public function updateLastActivity($id)
891
    {
892
        $update = $this->sql->update(self::_TABLE);
893
        $update->set([
894
            'last_activity_on' => new Expression('NOW()'),
895
        ]);
896
        $update->where->equalTo('id', $id);
897
 
898
        return $this->executeUpdate($update);
899
    }
900
 
901
 
902
    /**
903
     *
904
     * @param int $id
905
     * @return boolean
906
     */
907
    public function updateLastHeartBeat($id)
908
    {
909
        $update = $this->sql->update(self::_TABLE);
910
        $update->set([
911
            'last_heart_beat_at' => new Expression('NOW()'),
242 efrain 912
            'online' => 1,
913
 
1 www 914
        ]);
915
        $update->where->equalTo('id', $id);
916
 
917
        return $this->executeUpdate($update);
918
    }
242 efrain 919
 
920
    /**
921
     *
922
     * @param int $id
923
     * @return boolean
924
     */
925
    public function emailVerifyAndActive($id)
926
    {
927
        $update = $this->sql->update(self::_TABLE);
928
        $update->set([
929
            'email_verified' => User::EMAIL_VERIFIED_YES,
930
            'status' => User::STATUS_ACTIVE,
931
        ]);
932
        $update->where->equalTo('id', $id);
1 www 933
 
242 efrain 934
        return $this->executeUpdate($update);
935
    }
936
 
630 efrain 937
 
938
    /**
939
     *
940
     * @param int $company_id
941
     * @return User[]
942
     */
943
    public function fetchAllVerifyAndActiveByCompanyId($company_id)
944
    {
945
        $select = $this->sql->select();
946
        $select->columns(['status', 'company_id']);
947
        $select->from(['tb1' => CompanyUserMapper::_TABLE]);
948
        $select->join(['tb2' => self::_TABLE] , 'tb1.user_id = tb2.id');
949
 
950
 
951
 
952
        $select->where->equalTo('tb1.company_id', $company_id);
953
        $select->where->equalTo('tb1.owner', CompanyUser::OWNER_NO);
954
        $select->where->in('tb1.status', [CompanyUser::STATUS_ACCEPTED, CompanyUser::STATUS_ADMIN_WILL_ADD]);
955
        $select->where->equalTo('tb2.email_verified', User::EMAIL_VERIFIED_YES);
956
        $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
957
 
958
        $select->order('first_name', 'last_name', 'email');
959
 
960
        $prototype = User();
961
 
962
        return $this->executeFetchAllObject($select, $prototype);
963
    }
1 www 964
}