Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 3086 | Rev 3649 | 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
 
3639 efrain 73
 
1 www 74
    /**
3639 efrain 75
     *
76
     * @param string $uuid
77
     * @param int $network_id
78
     * @return User
79
     */
80
    public function fetchOneByUuidAndNetworkId($uuid, $network_id)
81
    {
82
        $prototype = new User();
83
        $select = $this->sql->select(self::_TABLE);
84
        $select->where->equalTo('uuid', $uuid);
85
        $select->where->equalTo('network_id', $network_id);
86
 
87
 
88
        return $this->executeFetchOneObject($select, $prototype);
89
    }
90
 
91
    /**
1 www 92
     *
93
     * @param int $id
94
     * @return User
95
     */
96
    public function fetchOne($id)
97
    {
98
        $prototype = new User();
99
        $select = $this->sql->select(self::_TABLE);
100
        $select->where->equalTo('id', $id);
101
 
102
        return $this->executeFetchOneObject($select, $prototype);
103
    }
104
 
1271 nelberth 105
    public function fetchOneRelation($id)
106
    {
107
        $prototype = new User();
108
        $select = $this->sql->select(self::_TABLE);
109
        $select->where->equalTo('id', $id);
110
 
111
        return $this->executeFetchOneObject($select, $prototype);
112
    }
113
 
114
 
1 www 115
    /**
116
     *
117
     * @param string $email
118
     * @return void|User
119
     */
120
    public function fetchOneByEmail($email)
121
    {
122
        $prototype = new User();
123
        $select = $this->sql->select(self::_TABLE);
124
        $select->where->equalTo('email', $email);
125
 
126
        //echo $select->getSqlString($this->adapter->platform); exit;
127
 
128
        return $this->executeFetchOneObject($select, $prototype);
129
    }
130
 
131
    /**
3639 efrain 132
     *
133
     * @param string $email
134
     * @param int $network_id
135
     * @return void|User
136
     */
137
    public function fetchOneByEmailAndNetworkId($email, $network_id)
138
    {
139
        $prototype = new User();
140
        $select = $this->sql->select(self::_TABLE);
141
        $select->where->equalTo('email', $email);
142
        $select->where->equalTo('network_id', $network_id);
143
 
144
        //echo $select->getSqlString($this->adapter->platform); exit;
145
 
146
        return $this->executeFetchOneObject($select, $prototype);
147
    }
148
 
149
    /**
1 www 150
     *
151
     * @param string $password_reset_key
152
     * @return void|User
153
     */
154
    public function fetchOneByPasswordResetKey($password_reset_key)
155
    {
156
        $prototype = new User();
157
        $select = $this->sql->select(self::_TABLE);
158
        $select->where->equalTo('password_reset_key', $password_reset_key);
159
 
160
        return $this->executeFetchOneObject($select, $prototype);
161
    }
162
 
163
    /**
164
     *
165
     * @param string $activation_key
166
     * @return void|User
167
     */
168
    public function fetchOneByActivationKey($activation_key)
169
    {
170
        $prototype = new User();
171
        $select = $this->sql->select(self::_TABLE);
172
        $select->where->equalTo('activation_key', $activation_key);
173
 
174
        return $this->executeFetchOneObject($select, $prototype);
175
    }
3639 efrain 176
 
177
 
178
    /**
179
     *
180
     * @param int $network_id
181
     * @return int
182
     */
183
    public function fetchCountByNetworkId($network_id)
184
    {
185
 
186
        $select = $this->sql->select(self::_TABLE);
187
        $select->columns(['total' => new Expression('COUNT(*)')]);
188
        $select->where->equalTo('network_id', $network_id);
189
 
190
        $record = $this->executeFetchOneArray($select);
191
 
192
        return $record['total'];
193
    }
1 www 194
 
195
 
196
 
197
    /**
198
     *
199
     * @param string $keyword
200
     * @param int $current_user
201
     * @return User[]
202
     */
203
    public function fetchAllByKeyword($keyword, $current_user = 0)
204
    {
205
 
206
        $prototype = new User();
207
 
208
        $select = $this->sql->select(self::_TABLE);
209
 
210
        $select->where->equalTo('status', User::STATUS_ACTIVE);
211
        $select->where->notEqualTo('id', $current_user);
212
        $select->where->and->nest()
213
            ->like('first_name', '%' . $keyword . '%')
214
            ->or->like('last_name', '%' . $keyword . '%')
215
            ->or->like(new Expression("CONCAT(first_name,' ',last_name)"), '%'. $keyword . '%')
216
            ->unnest();
217
 
218
 
219
        return $this->executeFetchAllObject($select, $prototype);
220
    }
221
 
222
    /**
223
     *
224
     * @param int[] $ids
225
     * @param int $current_user
226
     * @param string $status
227
     * @return User[]
228
     */
229
    public function fetchAllByIds($ids, $current_user = 0, $status = User::STATUS_ACTIVE)
230
    {
231
 
232
        $prototype = new User();
233
        $select = $this->sql->select(self::_TABLE);
234
 
235
 
236
        $select->where->equalTo('status', User::STATUS_ACTIVE);
630 efrain 237
        $select->where->and->in('id',$ids);
1 www 238
 
239
        if($current_user) {
240
            $select->where->and->notEqualTo('id ', $current_user);
241
        }
630 efrain 242
        $select->order(['first_name ASC', 'last_name ASC', 'email ASC']);
1 www 243
 
244
        return $this->executeFetchAllObject($select, $prototype);
245
    }
246
 
247
 
248
    /**
249
     *
250
     * @return User[]
251
     */
252
    public function fetchAllByActives()
253
    {
254
 
255
        $prototype = new User();
256
        $select = $this->sql->select(self::_TABLE);
257
 
258
 
259
        $select->where->equalTo('status', User::STATUS_ACTIVE);
260
        $select->where->equalTo('email_verified',User::EMAIL_VERIFIED_YES);
261
 
646 efrain 262
        $select->order(['first_name DESC, last_name DESC, email_DESC']);
263
 
1 www 264
 
265
        return $this->executeFetchAllObject($select, $prototype);
266
    }
267
 
268
    /**
269
     *
646 efrain 270
     * @param int $company_id
271
     * @return array
272
     */
273
    public function fetchAllByCompanyId($company_id)
274
    {
275
 
276
        $prototype = new User();
277
        $select = $this->sql->select();
278
        $select->from(['tb1' => self::_TABLE]);
279
        $select->join(['tb2' => CompanyUserMapper::_TABLE], 'tb1.id = tb2.user_id', []);
280
 
281
 
282
        $select->where->equalTo('tb2.company_id', $company_id);
283
        $select->where->in('tb2.status', [CompanyUser::STATUS_ACCEPTED, CompanyUser::STATUS_ADMIN_WILL_ADD]);
284
 
285
        $select->where->equalTo('tb1.status', User::STATUS_ACTIVE);
286
        $select->where->equalTo('tb1.email_verified',User::EMAIL_VERIFIED_YES);
287
 
288
        $select->order(['first_name DESC, last_name DESC, email_DESC']);
289
 
290
        return $this->executeFetchAllObject($select, $prototype);
291
    }
292
 
293
    /**
294
     *
1 www 295
     * @param int $user_id
3639 efrain 296
     * @return boolean
297
     */
298
    public function leaveImpersonate($user_id)
299
    {
300
        $values = [
301
            'impersonate_user_id' => new Expression('NULL')
302
        ];
303
 
304
        $update = $this->sql->update(self::_TABLE);
305
        $update->set($values);
306
        $update->where->equalTo('id', $user_id);
307
 
308
        return $this->executeUpdate($update);
309
    }
310
 
311
    /**
312
     *
313
     * @param int $user_id
314
     * @param int $impersonate_user_id
315
     * @return boolean
316
     */
317
    public function startImpersonate($user_id, $impersonate_user_id)
318
    {
319
        $values = [
320
            'impersonate_user_id' => $impersonate_user_id
321
        ];
322
 
323
        $update = $this->sql->update(self::_TABLE);
324
        $update->set($values);
325
        $update->where->equalTo('id', $user_id);
326
 
327
        return $this->executeUpdate($update);
328
    }
329
 
330
    /**
331
     *
332
     * @param int $user_id
1 www 333
     * @param string $password_reset_key
334
     * @return boolean
335
     */
336
    public function updatePasswordResetKey($user_id, $password_reset_key)
337
    {
338
        $values = [
339
            'password_reset_key' => $password_reset_key,
340
            'password_generated_on' => date('Y-m-d H:i:s'),
341
            'updated_on' => new Expression('NOW()')
342
        ];
343
 
344
        $update = $this->sql->update(self::_TABLE);
345
        $update->set($values);
346
        $update->where->equalTo('id', $user_id);
347
 
348
        return $this->executeUpdate($update);
349
    }
350
 
1979 efrain 351
 
352
    /**
353
     *
354
     * @param int $user_id
355
     * @param string $delete_account_key
356
     * @return boolean
357
     */
358
    public function updateDeleteAccountKey($user_id, $delete_account_key)
359
    {
360
        $values = [
361
            'delete_account_key' => $delete_account_key,
362
            'delete_account_generated_on' => date('Y-m-d H:i:s'),
363
            'updated_on' => new Expression('NOW()')
364
        ];
365
 
366
        $update = $this->sql->update(self::_TABLE);
367
        $update->set($values);
368
        $update->where->equalTo('id', $user_id);
369
 
370
        return $this->executeUpdate($update);
371
    }
372
 
1 www 373
 
374
 
375
    /**
376
     *
377
     * @param User $user
378
     * @param string $password_hash
379
     * @return boolean
380
     */
381
    public function updatePassword($user, $password_hash)
382
    {
383
        $values = [
384
            'password'              => $password_hash,
385
            'password_reset_key'    => '',
386
            'password_updated_on'   => date('Y-m-d H:i:s'),
387
            'login_attempt'         => 0,
388
            'blocked'               => User::BLOCKED_NO,
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
     *
402
     * @param User $user
403
     * @return boolean
404
     */
405
    public function unblock($user)
406
    {
407
        $values = [
408
            'login_attempt'         => 0,
409
            'blocked'               => User::BLOCKED_NO,
410
            'updated_on'            => new Expression('NOW()')
411
        ];
412
 
413
        $update = $this->sql->update(self::_TABLE);
414
        $update->set($values);
415
        $update->where->equalTo('id', $user->id);
416
 
417
        return $this->executeUpdate($update);
418
    }
419
 
420
 
421
 
422
 
423
    /**
424
     *
425
     * @param User $user
426
     * @param string $one_time_password
427
     * @return boolean
428
     */
429
    public function updateOneTimePassword($user, $one_time_password)
430
    {
431
        $values = [
432
            'one_time_password' => $one_time_password,
433
            'updated_on'        => new Expression('NOW()')
434
        ];
435
 
436
        $update = $this->sql->update(self::_TABLE);
437
        $update->set($values);
438
        $update->where->equalTo('id', $user->id);
439
 
440
        return $this->executeUpdate($update);
441
    }
442
 
443
 
444
    /**
445
     *
446
     * @param User $user
447
     * @return boolean
448
     */
449
    public function update($user)
450
    {
451
        $hydrator = new ObjectPropertyHydrator();
452
        $values = $hydrator->extract($user);
1979 efrain 453
        //$values = $this->removeEmpty($values);
454
 
455
 
456
        unset($values['added_on']);
1 www 457
        $values['updated_on'] = new Expression('NOW()') ;
458
 
459
        $update = $this->sql->update(self::_TABLE);
460
        $update->set($values);
461
        $update->where->equalTo('id',$user->id);
462
 
1979 efrain 463
        //echo $update->getSqlString($this->adapter->platform); exit;
464
 
1 www 465
        return $this->executeUpdate($update);
466
    }
467
 
468
    /**
469
     *
470
     * @param User $user
471
     * @return boolean
472
     */
473
    public function updatePrivacy($user)
474
    {
475
        $values = [
476
            'show_in_search' => $user->show_in_search,
477
            'updated_on' => new Expression('NOW()')
478
        ];
479
 
480
        $update = $this->sql->update(self::_TABLE);
481
        $update->set($values);
482
        $update->where->equalTo('id',$user->id);
483
 
484
        return $this->executeUpdate($update);
485
    }
486
 
487
    /**
488
     *
489
     * @param User $user
490
     * @return boolean
491
     */
492
    public function updateBasic($user)
493
    {
494
        $values = [
495
            'first_name' => $user->first_name,
496
            'last_name' => $user->last_name,
497
            'phone' => $user->phone,
498
            'gender' => $user->gender,
499
            'updated_on' => new Expression('NOW()')
500
        ];
501
 
502
        $update = $this->sql->update(self::_TABLE);
503
        $update->set($values);
504
        $update->where->equalTo('id',$user->id);
505
 
506
        return $this->executeUpdate($update);
507
    }
508
 
509
 
510
    /**
511
     *
512
     * @param User $user
513
     * @return boolean
514
     */
515
    public function updateImage($user)
516
    {
517
        $values = [
518
            'image' => $user->image,
519
            'updated_on' => new Expression('NOW()')
520
        ];
521
 
522
        $update = $this->sql->update(self::_TABLE);
523
        $update->set($values);
524
        $update->where->equalTo('id',$user->id);
525
 
526
        return $this->executeUpdate($update);
527
    }
528
 
529
    /**
530
     *
531
     * @param User $user
532
     * @return boolean
533
     */
534
    public function updateLocation($user)
535
    {
536
        $values = [
537
            'location_id' => $user->location_id,
538
            'updated_on' => new Expression('NOW()')
539
        ];
540
 
541
        $update = $this->sql->update(self::_TABLE);
542
        $update->set($values);
543
        $update->where->equalTo('id',$user->id);
544
 
545
        return $this->executeUpdate($update);
546
    }
547
 
548
    /**
549
     *
550
     * @param int $user_id
551
     * @return boolean
552
     */
553
    public function activateAccount($user_id)
554
    {
555
        $values = [
556
            'email_verified'    => User::EMAIL_VERIFIED_YES,
557
            'status'            => User::STATUS_ACTIVE,
558
            'activation_key'    => '',
559
            'updated_on' => new Expression('NOW()')
560
        ];
561
 
562
        $update = $this->sql->update(self::_TABLE);
563
        $update->set($values);
564
        $update->where->equalTo('id', $user_id);
565
 
566
        return $this->executeUpdate($update);
567
    }
568
 
569
    /**
570
     *
571
     * @param User $user
572
     * @return boolean
573
     */
574
    public function insert($user)
575
    {
576
 
577
        $hydrator = new ObjectPropertyHydrator();
578
        $values = $hydrator->extract($user);
579
        $values = $this->removeEmpty($values);
580
 
581
        $insert = $this->sql->insert(self::_TABLE);
582
        $insert->values($values);
583
 
584
        $response = $this->executeInsert($insert);
585
        if($response) {
586
            $user->id = $this->lastInsertId;
587
        }
588
 
589
        return $response;
590
    }
591
 
592
 
593
    /**
594
     *
595
     * @return boolean
596
     */
597
    public function truncate()
598
    {
599
        $sql = sprintf('TRUNCATE TABLE `%s` ', self::_TABLE);
600
        return $this->executeSentenceWithParameters($sql);
601
    }
602
 
603
    /**
604
     *
605
     * @param int $company_id
606
     * @param string $status
607
     * @param string $search
608
     * @param int $page
609
     * @param int $records_per_page
610
     * @param string $order_field
611
     * @param string $order_direction
612
     * @return Paginator
613
     */
614
    public function fetchAllDataTableByCompanyId($company_id, $status = '', $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
615
    {
616
        $select = $this->sql->select();
617
        $select->columns(['status', 'backend', 'creator']);
618
        $select->from(['tb1' => CompanyUserMapper::_TABLE]);
619
        $select->join(['tb2' => self::_TABLE] , 'tb1.user_id = tb2.id', [
620
            'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
621
            'blocked', 'login_attempt', 'email_verified'
622
 
623
        ]);
624
 
625
        $select->where->equalTo('tb1.company_id', $company_id);
626
        $select->where->equalTo('tb1.owner', CompanyUser::OWNER_NO);
627
 
628
        if($status) {
629
            $select->where->equalTo('tb1.status', $status);
630
 
631
        }
632
 
633
        if($search) {
634
            $select->where->nest()
635
            ->like('first_name', '%' . $search . '%')
636
            ->or->like('last_name', '%' . $search . '%')
637
            ->or->like('email', '%' . $search . '%')
638
            ->unnest();
639
 
640
        }
641
 
642
 
643
        $select->order($order_field . ' ' . $order_direction);
644
 
645
        $hydrator   = new ArraySerializableHydrator();
646
        $resultset  = new HydratingResultSet($hydrator);
647
 
648
        $adapter = new DbSelect($select, $this->sql, $resultset);
649
        $paginator = new Paginator($adapter);
650
        $paginator->setItemCountPerPage($records_per_page);
651
        $paginator->setCurrentPageNumber($page);
652
 
653
 
654
        return $paginator;
655
    }
656
 
657
 
658
    /**
659
     *
660
     * @param int $company_id
661
     * @param string $search
662
     * @param int $page
663
     * @param int $records_per_page
664
     * @param string $order_field
665
     * @param string $order_direction
666
     * @return Paginator
667
     */
668
    public function fetchAllDataTableStudensByCompanyId($company_id,  $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
669
    {
670
        $date = date('Y-m-d');
671
 
672
        $selectCapsuleUser = $this->getSql()->select();
673
        $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
674
        $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
675
        $selectCapsuleUser->where->equalTo('company_id', $company_id);
676
        $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
677
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
678
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
679
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
680
 
681
        //echo $select->getSqlString($this->adapter->platform); exit;
682
 
683
        $select = $this->sql->select();
684
        $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email','blocked']);
685
        $select->from(UserMapper::_TABLE);
686
        $select->where->in('id', $selectCapsuleUser);
687
 
688
 
689
        if($search) {
690
            $select->where->nest()
691
            ->like('first_name', '%' . $search . '%')
692
            ->or->like('last_name', '%' . $search . '%')
693
            ->or->like('email', '%' . $search . '%')
694
            ->unnest();
695
 
696
        }
697
 
698
 
699
        $select->order($order_field . ' ' . $order_direction);
700
 
701
        $hydrator   = new ArraySerializableHydrator();
702
        $resultset  = new HydratingResultSet($hydrator);
703
 
704
        $adapter = new DbSelect($select, $this->sql, $resultset);
705
        $paginator = new Paginator($adapter);
706
        $paginator->setItemCountPerPage($records_per_page);
707
        $paginator->setCurrentPageNumber($page);
708
 
709
 
710
        return $paginator;
711
    }
2381 nelberth 712
 
713
 
1 www 714
    /**
715
     *
2381 nelberth 716
     * @param int $company_id
1 www 717
     * @param string $search
2381 nelberth 718
     * @param int $page
719
     * @param int $records_per_page
720
     * @param string $order_field
721
     * @param string $order_direction
722
     * @return Paginator
723
     */
724
    public function fetchAllStudensByCompanyId($company_id)
725
    {
726
 
727
        $date = date('Y-m-d');
728
 
729
        $selectCapsuleUser = $this->getSql()->select();
730
        $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
731
        $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
732
        $selectCapsuleUser->where->equalTo('company_id', $company_id);
733
        $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
734
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
735
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
736
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
737
 
738
        //echo $select->getSqlString($this->adapter->platform); exit;
739
        $prototype = new User();
740
        $select = $this->sql->select();
741
        $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email','blocked']);
742
        $select->from(UserMapper::_TABLE);
743
        $select->where->in('id', $selectCapsuleUser);
744
        return $this->executeFetchAllObject($select, $prototype);
745
 
746
    }
747
 
748
    /**
749
     *
750
     * @param string $search
1 www 751
     * @return User[]
752
     */
753
    public function fetchAllSuggest($search)
754
    {
755
 
756
        $select = $this->sql->select();
757
        $select->from(self::_TABLE);
758
        $select->where->equalTo('status', User::STATUS_ACTIVE);
759
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
760
 
761
        if($search) {
762
            $select->where->nest()
763
            ->like('first_name', '%' . $search . '%')
764
            ->or->like('last_name', '%' . $search . '%')
765
            ->or->like('email', '%' . $search . '%')
766
            ->unnest();
767
 
768
        }
769
 
770
        $select->order(['first_name', 'last_name']);
771
 
772
        // echo $select->getSqlString($this->adapter->platform); exit;
773
 
774
        $prototype = new User();
775
 
776
        return $this->executeFetchAllObject($select, $prototype);
777
    }
778
 
3639 efrain 779
    /**
780
     *
781
     * @param int $network_id
782
     * @param string $search
783
     * @return User[]
784
     */
785
    public function fetchAllSuggestByNetworkIdAndSearch($network_id, $search)
786
    {
787
 
788
        $select = $this->sql->select();
789
        $select->from(self::_TABLE);
790
        $select->where->equalTo('network_id', $network_id);
791
        $select->where->equalTo('status', User::STATUS_ACTIVE);
792
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
793
 
794
        if($search) {
795
            $select->where->nest()
796
            ->like('first_name', '%' . $search . '%')
797
            ->or->like('last_name', '%' . $search . '%')
798
            ->or->like('email', '%' . $search . '%')
799
            ->unnest();
800
 
801
        }
802
 
803
        $select->order(['first_name', 'last_name']);
804
 
805
        // echo $select->getSqlString($this->adapter->platform); exit;
806
 
807
        $prototype = new User();
808
 
809
        return $this->executeFetchAllObject($select, $prototype);
810
    }
1 www 811
 
812
    /**
813
     *
814
     * @param int $company_id
3639 efrain 815
     * @param int $network_id
1 www 816
     * @param string $search
817
     * @return User[]
818
     */
3639 efrain 819
    public function fetchAllSuggestForInvitationByCompanyIdAndNetworkIdAndSearch($company_id, $network_id, $search)
820
    {
821
        $selectCompanyUsers = $this->sql->select(CompanyUserMapper::_TABLE);
822
        $selectCompanyUsers->columns(['user_id']);
823
        $selectCompanyUsers->where->equalTo('company_id', $company_id);
824
        $selectCompanyUsers->where->in('status', [
825
            CompanyUser::STATUS_ACCEPTED,
826
            CompanyUser::STATUS_PENDING,
827
            CompanyUser::STATUS_SENT,
828
 
829
        ]);
830
 
831
        //echo $selectCompanyUsers->getSqlString($this->adapter->platform); exit;
832
 
833
        $select = $this->sql->select();
834
        $select->from(self::_TABLE);
835
        $select->where->notIn('id', $selectCompanyUsers);
836
        $select->where->equalTo('network_id', $network_id);
837
        $select->where->equalTo('status', User::STATUS_ACTIVE);
838
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
839
 
840
        if($search) {
841
            $select->where->nest()
842
            ->like('first_name', '%' . $search . '%')
843
            ->or->like('last_name', '%' . $search . '%')
844
            ->or->like('email', '%' . $search . '%')
845
            ->unnest();
846
 
847
        }
848
 
849
        $select->order(['first_name', 'last_name']);
850
 
851
        // echo $select->getSqlString($this->adapter->platform); exit;
852
 
853
        $prototype = new User();
854
 
855
        return $this->executeFetchAllObject($select, $prototype);
856
    }
857
 
858
    /**
859
     *
860
     * @param int $company_id
861
     * @param string $search
862
     * @return User[]
863
     */
1 www 864
    public function fetchAllSuggestForInvitationByCompanyId($company_id, $search)
865
    {
866
        $selectCompanyUsers = $this->sql->select(CompanyUserMapper::_TABLE);
867
        $selectCompanyUsers->columns(['user_id']);
868
        $selectCompanyUsers->where->equalTo('company_id', $company_id);
869
        $selectCompanyUsers->where->in('status', [
870
            CompanyUser::STATUS_ACCEPTED,
871
            CompanyUser::STATUS_PENDING,
872
            CompanyUser::STATUS_SENT,
873
 
874
        ]);
875
 
876
        //echo $selectCompanyUsers->getSqlString($this->adapter->platform); exit;
877
 
878
        $select = $this->sql->select();
879
        $select->from(self::_TABLE);
880
        $select->where->notIn('id', $selectCompanyUsers);
881
        $select->where->equalTo('status', User::STATUS_ACTIVE);
882
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
883
 
884
        if($search) {
885
            $select->where->nest()
886
            ->like('first_name', '%' . $search . '%')
887
            ->or->like('last_name', '%' . $search . '%')
888
            ->or->like('email', '%' . $search . '%')
889
            ->unnest();
890
 
891
        }
892
 
893
        $select->order(['first_name', 'last_name']);
894
 
895
       // echo $select->getSqlString($this->adapter->platform); exit;
896
 
897
        $prototype = new User();
898
 
899
        return $this->executeFetchAllObject($select, $prototype);
900
    }
901
 
902
    /**
903
     *
904
     * @param int $group_id
3639 efrain 905
     * @param int $network_id
1 www 906
     * @param string $search
907
     * @return User[]
908
     */
3639 efrain 909
    public function fetchAllSuggestForInvitationByGroupIdAndNetworkIdAndSearch($group_id, $network_id, $search)
910
    {
911
        $selectGroupMembers = $this->sql->select(GroupMemberMapper::_TABLE);
912
        $selectGroupMembers->columns(['user_id']);
913
        $selectGroupMembers->where->equalTo('group_id', $group_id);
914
        $selectGroupMembers->where->in('status', [
915
            CompanyUser::STATUS_ACCEPTED,
916
        ]);
917
 
918
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
919
 
920
        $select = $this->sql->select();
921
        $select->from(self::_TABLE);
922
        $select->where->equalTo('network_id', $network_id);
923
        $select->where->notIn('id', $selectGroupMembers);
924
        $select->where->equalTo('status', User::STATUS_ACTIVE);
925
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
926
 
927
        if($search) {
928
            $select->where->nest()
929
            ->like('first_name', '%' . $search . '%')
930
            ->or->like('last_name', '%' . $search . '%')
931
            ->or->like('email', '%' . $search . '%')
932
            ->unnest();
933
 
934
        }
935
 
936
        $select->order(['first_name', 'last_name']);
937
 
938
        // echo $select->getSqlString($this->adapter->platform); exit;
939
 
940
        $prototype = new User();
941
 
942
        return $this->executeFetchAllObject($select, $prototype);
943
    }
944
 
945
    /**
946
     *
947
     * @param int $group_id
948
     * @param string $search
949
     * @return User[]
950
     */
1 www 951
    public function fetchAllSuggestForInvitationByGroupId($group_id, $search)
952
    {
953
        $selectGroupMembers = $this->sql->select(GroupMemberMapper::_TABLE);
954
        $selectGroupMembers->columns(['user_id']);
955
        $selectGroupMembers->where->equalTo('group_id', $group_id);
956
        $selectGroupMembers->where->in('status', [
957
         CompanyUser::STATUS_ACCEPTED,
958
        ]);
959
 
960
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
961
 
962
        $select = $this->sql->select();
963
        $select->from(self::_TABLE);
964
        $select->where->notIn('id', $selectGroupMembers);
965
        $select->where->equalTo('status', User::STATUS_ACTIVE);
966
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
967
 
968
        if($search) {
969
            $select->where->nest()
970
            ->like('first_name', '%' . $search . '%')
971
            ->or->like('last_name', '%' . $search . '%')
972
            ->or->like('email', '%' . $search . '%')
973
            ->unnest();
974
 
975
        }
976
 
977
        $select->order(['first_name', 'last_name']);
978
 
979
        // echo $select->getSqlString($this->adapter->platform); exit;
980
 
981
        $prototype = new User();
982
 
983
        return $this->executeFetchAllObject($select, $prototype);
984
    }
1665 nelberth 985
 
3639 efrain 986
 
987
 
2090 nelberth 988
    public function fetchAllSuggestForInvitationByHptgId($group_id,$company_id, $search)
1665 nelberth 989
    {
990
        $selectGroupMembers = $this->sql->select(HighPerformanceTeamsGroupsMembersMapper::_TABLE);
991
        $selectGroupMembers->columns(['user_id']);
992
        $selectGroupMembers->where->equalTo('group_id', $group_id);
993
        $selectGroupMembers->where->in('status', [
2082 nelberth 994
            HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED,
995
            HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN,
996
            HighPerformanceTeamsGroupsMembers::STATUS_INVITED,
1665 nelberth 997
        ]);
998
 
999
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
1000
 
1001
        $select = $this->sql->select();
2092 nelberth 1002
        $select->from(['u' => self::_TABLE]);
1003
        $select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.user_id = u.id', []);
2091 nelberth 1004
        $select->where->notIn('u.id', $selectGroupMembers);
2090 nelberth 1005
        $select->where->equalTo('u.status', User::STATUS_ACTIVE);
1006
        $select->where->equalTo('u.email_verified', User::EMAIL_VERIFIED_YES);
1007
        $select->where->equalTo('cu.company_id', $company_id);
1008
 
1665 nelberth 1009
 
1010
        if($search) {
1011
            $select->where->nest()
2090 nelberth 1012
            ->like('u.first_name', '%' . $search . '%')
1013
            ->or->like('u.last_name', '%' . $search . '%')
1014
            ->or->like('u.email', '%' . $search . '%')
1665 nelberth 1015
            ->unnest();
1016
 
1017
        }
1018
 
2090 nelberth 1019
        $select->order(['u.first_name', 'u.last_name']);
1665 nelberth 1020
 
1021
        // echo $select->getSqlString($this->adapter->platform); exit;
1022
 
1023
        $prototype = new User();
1024
 
1025
        return $this->executeFetchAllObject($select, $prototype);
1026
    }
1 www 1027
    /**
1028
     *
1029
     * @param string $search
1030
     * @param int $page
1031
     * @param int $records_per_page
1032
     * @param string $order_field
1033
     * @param string $order_direction
1034
     * @return Paginator
1035
     */
1036
    public function fetchAllDataTable($search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
1037
    {
1038
        $prototype = new User();
1039
        $select = $this->sql->select(self::_TABLE);
1040
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
1041
 
1042
 
1043
        if($search) {
1044
            $select->where->nest()
1045
            ->like('first_name', '%' . $search . '%')
1046
            ->or->like('last_name', '%' . $search . '%')
1047
            ->or->like('email', '%' . $search . '%')
1048
            ->unnest();
1049
 
1050
        }
1051
 
1052
 
1053
        $select->order($order_field . ' ' . $order_direction);
1054
 
1055
        $hydrator   = new ObjectPropertyHydrator();
1056
        $resultset  = new HydratingResultSet($hydrator, $prototype);
1057
 
1058
        $adapter = new DbSelect($select, $this->sql, $resultset);
1059
        $paginator = new Paginator($adapter);
1060
        $paginator->setItemCountPerPage($records_per_page);
1061
        $paginator->setCurrentPageNumber($page);
1062
 
1063
 
1064
        return $paginator;
1065
    }
1066
 
1067
    /**
1068
     *
1069
     * @param int $id
1070
     * @return boolean
1071
     */
1072
    public function updateChatOnlineStatus($id)
1073
    {
1074
        $update = $this->sql->update(self::_TABLE);
1075
        $update->set([
1076
            'online' => 1,
1077
        ]);
1078
        $update->where->equalTo('id', $id);
1079
 
1080
        return $this->executeUpdate($update);
1081
    }
1082
 
3086 efrain 1083
 
1 www 1084
 
1085
    /**
1086
     *
1087
     * @param int $id
1088
     * @return boolean
1089
     */
1090
    public function updateLastActivity($id)
1091
    {
1092
        $update = $this->sql->update(self::_TABLE);
1093
        $update->set([
1094
            'last_activity_on' => new Expression('NOW()'),
3086 efrain 1095
            'online' => 1,
1 www 1096
        ]);
1097
        $update->where->equalTo('id', $id);
1098
 
1099
        return $this->executeUpdate($update);
1100
    }
1101
 
1102
 
1103
    /**
1104
     *
1105
     * @param int $id
1106
     * @return boolean
1107
     */
1108
    public function updateLastHeartBeat($id)
1109
    {
1110
        $update = $this->sql->update(self::_TABLE);
1111
        $update->set([
1112
            'last_heart_beat_at' => new Expression('NOW()'),
242 efrain 1113
            'online' => 1,
1114
 
1 www 1115
        ]);
1116
        $update->where->equalTo('id', $id);
1117
 
1118
        return $this->executeUpdate($update);
1119
    }
242 efrain 1120
 
1121
    /**
1122
     *
1123
     * @param int $id
1124
     * @return boolean
1125
     */
1126
    public function emailVerifyAndActive($id)
1127
    {
1128
        $update = $this->sql->update(self::_TABLE);
1129
        $update->set([
1130
            'email_verified' => User::EMAIL_VERIFIED_YES,
1131
            'status' => User::STATUS_ACTIVE,
1132
        ]);
1133
        $update->where->equalTo('id', $id);
1 www 1134
 
242 efrain 1135
        return $this->executeUpdate($update);
1136
    }
1137
 
630 efrain 1138
 
1139
    /**
1140
     *
1141
     * @param int $company_id
1142
     * @return User[]
1143
     */
1144
    public function fetchAllVerifyAndActiveByCompanyId($company_id)
1145
    {
1146
        $select = $this->sql->select();
1147
        $select->columns(['status', 'company_id']);
1148
        $select->from(['tb1' => CompanyUserMapper::_TABLE]);
1149
        $select->join(['tb2' => self::_TABLE] , 'tb1.user_id = tb2.id');
1150
 
1151
 
1152
 
1153
        $select->where->equalTo('tb1.company_id', $company_id);
1154
        $select->where->equalTo('tb1.owner', CompanyUser::OWNER_NO);
1155
        $select->where->in('tb1.status', [CompanyUser::STATUS_ACCEPTED, CompanyUser::STATUS_ADMIN_WILL_ADD]);
1156
        $select->where->equalTo('tb2.email_verified', User::EMAIL_VERIFIED_YES);
1157
        $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
1158
 
1159
        $select->order('first_name', 'last_name', 'email');
1160
 
1161
        $prototype = User();
1162
 
1163
        return $this->executeFetchAllObject($select, $prototype);
1164
    }
1 www 1165
}