Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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