Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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