Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 3759 | Rev 4300 | 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,
4113 efrain 534
            'timezone' => $user->timezone,
1 www 535
            'updated_on' => new Expression('NOW()')
536
        ];
537
 
538
        $update = $this->sql->update(self::_TABLE);
539
        $update->set($values);
540
        $update->where->equalTo('id',$user->id);
541
 
542
        return $this->executeUpdate($update);
543
    }
544
 
545
 
546
    /**
547
     *
548
     * @param User $user
549
     * @return boolean
550
     */
551
    public function updateImage($user)
552
    {
553
        $values = [
554
            'image' => $user->image,
555
            'updated_on' => new Expression('NOW()')
556
        ];
557
 
558
        $update = $this->sql->update(self::_TABLE);
559
        $update->set($values);
560
        $update->where->equalTo('id',$user->id);
561
 
562
        return $this->executeUpdate($update);
563
    }
564
 
565
    /**
566
     *
567
     * @param User $user
568
     * @return boolean
569
     */
570
    public function updateLocation($user)
571
    {
572
        $values = [
573
            'location_id' => $user->location_id,
574
            'updated_on' => new Expression('NOW()')
575
        ];
576
 
577
        $update = $this->sql->update(self::_TABLE);
578
        $update->set($values);
579
        $update->where->equalTo('id',$user->id);
580
 
581
        return $this->executeUpdate($update);
582
    }
583
 
584
    /**
585
     *
586
     * @param int $user_id
587
     * @return boolean
588
     */
589
    public function activateAccount($user_id)
590
    {
591
        $values = [
592
            'email_verified'    => User::EMAIL_VERIFIED_YES,
593
            'status'            => User::STATUS_ACTIVE,
594
            'activation_key'    => '',
595
            'updated_on' => new Expression('NOW()')
596
        ];
597
 
598
        $update = $this->sql->update(self::_TABLE);
599
        $update->set($values);
600
        $update->where->equalTo('id', $user_id);
601
 
602
        return $this->executeUpdate($update);
603
    }
604
 
605
    /**
606
     *
607
     * @param User $user
608
     * @return boolean
609
     */
610
    public function insert($user)
611
    {
612
 
613
        $hydrator = new ObjectPropertyHydrator();
614
        $values = $hydrator->extract($user);
615
        $values = $this->removeEmpty($values);
616
 
617
        $insert = $this->sql->insert(self::_TABLE);
618
        $insert->values($values);
619
 
620
        $response = $this->executeInsert($insert);
621
        if($response) {
622
            $user->id = $this->lastInsertId;
623
        }
624
 
625
        return $response;
626
    }
627
 
628
 
629
    /**
630
     *
631
     * @return boolean
632
     */
633
    public function truncate()
634
    {
635
        $sql = sprintf('TRUNCATE TABLE `%s` ', self::_TABLE);
636
        return $this->executeSentenceWithParameters($sql);
637
    }
638
 
639
    /**
640
     *
641
     * @param int $company_id
642
     * @param string $status
643
     * @param string $search
644
     * @param int $page
645
     * @param int $records_per_page
646
     * @param string $order_field
647
     * @param string $order_direction
648
     * @return Paginator
649
     */
650
    public function fetchAllDataTableByCompanyId($company_id, $status = '', $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
651
    {
652
        $select = $this->sql->select();
653
        $select->columns(['status', 'backend', 'creator']);
654
        $select->from(['tb1' => CompanyUserMapper::_TABLE]);
655
        $select->join(['tb2' => self::_TABLE] , 'tb1.user_id = tb2.id', [
656
            'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
657
            'blocked', 'login_attempt', 'email_verified'
658
 
659
        ]);
660
 
661
        $select->where->equalTo('tb1.company_id', $company_id);
662
        $select->where->equalTo('tb1.owner', CompanyUser::OWNER_NO);
663
 
664
        if($status) {
665
            $select->where->equalTo('tb1.status', $status);
666
 
667
        }
668
 
669
        if($search) {
670
            $select->where->nest()
671
            ->like('first_name', '%' . $search . '%')
672
            ->or->like('last_name', '%' . $search . '%')
673
            ->or->like('email', '%' . $search . '%')
674
            ->unnest();
675
 
676
        }
677
 
678
 
679
        $select->order($order_field . ' ' . $order_direction);
680
 
681
        $hydrator   = new ArraySerializableHydrator();
682
        $resultset  = new HydratingResultSet($hydrator);
683
 
684
        $adapter = new DbSelect($select, $this->sql, $resultset);
685
        $paginator = new Paginator($adapter);
686
        $paginator->setItemCountPerPage($records_per_page);
687
        $paginator->setCurrentPageNumber($page);
688
 
689
 
690
        return $paginator;
691
    }
692
 
693
 
694
    /**
695
     *
696
     * @param int $company_id
697
     * @param string $search
698
     * @param int $page
699
     * @param int $records_per_page
700
     * @param string $order_field
701
     * @param string $order_direction
702
     * @return Paginator
703
     */
704
    public function fetchAllDataTableStudensByCompanyId($company_id,  $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
705
    {
706
        $date = date('Y-m-d');
707
 
708
        $selectCapsuleUser = $this->getSql()->select();
709
        $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
710
        $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
711
        $selectCapsuleUser->where->equalTo('company_id', $company_id);
712
        $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
713
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
714
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
715
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
716
 
717
        //echo $select->getSqlString($this->adapter->platform); exit;
718
 
719
        $select = $this->sql->select();
720
        $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email','blocked']);
721
        $select->from(UserMapper::_TABLE);
722
        $select->where->in('id', $selectCapsuleUser);
723
 
724
 
725
        if($search) {
726
            $select->where->nest()
727
            ->like('first_name', '%' . $search . '%')
728
            ->or->like('last_name', '%' . $search . '%')
729
            ->or->like('email', '%' . $search . '%')
730
            ->unnest();
731
 
732
        }
733
 
734
 
735
        $select->order($order_field . ' ' . $order_direction);
736
 
737
        $hydrator   = new ArraySerializableHydrator();
738
        $resultset  = new HydratingResultSet($hydrator);
739
 
740
        $adapter = new DbSelect($select, $this->sql, $resultset);
741
        $paginator = new Paginator($adapter);
742
        $paginator->setItemCountPerPage($records_per_page);
743
        $paginator->setCurrentPageNumber($page);
744
 
745
 
746
        return $paginator;
747
    }
2381 nelberth 748
 
749
 
1 www 750
    /**
751
     *
2381 nelberth 752
     * @param int $company_id
1 www 753
     * @param string $search
2381 nelberth 754
     * @param int $page
755
     * @param int $records_per_page
756
     * @param string $order_field
757
     * @param string $order_direction
758
     * @return Paginator
759
     */
760
    public function fetchAllStudensByCompanyId($company_id)
761
    {
762
 
763
        $date = date('Y-m-d');
764
 
765
        $selectCapsuleUser = $this->getSql()->select();
766
        $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
767
        $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
768
        $selectCapsuleUser->where->equalTo('company_id', $company_id);
769
        $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
770
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
771
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
772
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
773
 
774
        //echo $select->getSqlString($this->adapter->platform); exit;
775
        $prototype = new User();
776
        $select = $this->sql->select();
777
        $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email','blocked']);
778
        $select->from(UserMapper::_TABLE);
779
        $select->where->in('id', $selectCapsuleUser);
780
        return $this->executeFetchAllObject($select, $prototype);
781
 
782
    }
783
 
784
    /**
785
     *
786
     * @param string $search
1 www 787
     * @return User[]
788
     */
789
    public function fetchAllSuggest($search)
790
    {
791
 
792
        $select = $this->sql->select();
793
        $select->from(self::_TABLE);
794
        $select->where->equalTo('status', User::STATUS_ACTIVE);
795
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
796
 
797
        if($search) {
798
            $select->where->nest()
799
            ->like('first_name', '%' . $search . '%')
800
            ->or->like('last_name', '%' . $search . '%')
801
            ->or->like('email', '%' . $search . '%')
802
            ->unnest();
803
 
804
        }
805
 
806
        $select->order(['first_name', 'last_name']);
807
 
808
        // echo $select->getSqlString($this->adapter->platform); exit;
809
 
810
        $prototype = new User();
811
 
812
        return $this->executeFetchAllObject($select, $prototype);
813
    }
814
 
3639 efrain 815
    /**
816
     *
817
     * @param int $network_id
818
     * @param string $search
819
     * @return User[]
820
     */
821
    public function fetchAllSuggestByNetworkIdAndSearch($network_id, $search)
822
    {
823
 
824
        $select = $this->sql->select();
825
        $select->from(self::_TABLE);
826
        $select->where->equalTo('network_id', $network_id);
827
        $select->where->equalTo('status', User::STATUS_ACTIVE);
828
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
829
 
830
        if($search) {
831
            $select->where->nest()
832
            ->like('first_name', '%' . $search . '%')
833
            ->or->like('last_name', '%' . $search . '%')
834
            ->or->like('email', '%' . $search . '%')
835
            ->unnest();
836
 
837
        }
838
 
839
        $select->order(['first_name', 'last_name']);
840
 
841
        // echo $select->getSqlString($this->adapter->platform); exit;
842
 
843
        $prototype = new User();
844
 
845
        return $this->executeFetchAllObject($select, $prototype);
846
    }
1 www 847
 
848
    /**
849
     *
850
     * @param int $company_id
3639 efrain 851
     * @param int $network_id
1 www 852
     * @param string $search
853
     * @return User[]
854
     */
3639 efrain 855
    public function fetchAllSuggestForInvitationByCompanyIdAndNetworkIdAndSearch($company_id, $network_id, $search)
856
    {
857
        $selectCompanyUsers = $this->sql->select(CompanyUserMapper::_TABLE);
858
        $selectCompanyUsers->columns(['user_id']);
859
        $selectCompanyUsers->where->equalTo('company_id', $company_id);
860
        $selectCompanyUsers->where->in('status', [
861
            CompanyUser::STATUS_ACCEPTED,
862
            CompanyUser::STATUS_PENDING,
863
            CompanyUser::STATUS_SENT,
864
 
865
        ]);
866
 
867
        //echo $selectCompanyUsers->getSqlString($this->adapter->platform); exit;
868
 
869
        $select = $this->sql->select();
870
        $select->from(self::_TABLE);
871
        $select->where->notIn('id', $selectCompanyUsers);
872
        $select->where->equalTo('network_id', $network_id);
873
        $select->where->equalTo('status', User::STATUS_ACTIVE);
874
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
875
 
876
        if($search) {
877
            $select->where->nest()
878
            ->like('first_name', '%' . $search . '%')
879
            ->or->like('last_name', '%' . $search . '%')
880
            ->or->like('email', '%' . $search . '%')
881
            ->unnest();
882
 
883
        }
884
 
885
        $select->order(['first_name', 'last_name']);
886
 
887
        // echo $select->getSqlString($this->adapter->platform); exit;
888
 
889
        $prototype = new User();
890
 
891
        return $this->executeFetchAllObject($select, $prototype);
892
    }
893
 
894
    /**
895
     *
896
     * @param int $company_id
897
     * @param string $search
898
     * @return User[]
899
     */
1 www 900
    public function fetchAllSuggestForInvitationByCompanyId($company_id, $search)
901
    {
902
        $selectCompanyUsers = $this->sql->select(CompanyUserMapper::_TABLE);
903
        $selectCompanyUsers->columns(['user_id']);
904
        $selectCompanyUsers->where->equalTo('company_id', $company_id);
905
        $selectCompanyUsers->where->in('status', [
906
            CompanyUser::STATUS_ACCEPTED,
907
            CompanyUser::STATUS_PENDING,
908
            CompanyUser::STATUS_SENT,
909
 
910
        ]);
911
 
912
        //echo $selectCompanyUsers->getSqlString($this->adapter->platform); exit;
913
 
914
        $select = $this->sql->select();
915
        $select->from(self::_TABLE);
916
        $select->where->notIn('id', $selectCompanyUsers);
917
        $select->where->equalTo('status', User::STATUS_ACTIVE);
918
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
919
 
920
        if($search) {
921
            $select->where->nest()
922
            ->like('first_name', '%' . $search . '%')
923
            ->or->like('last_name', '%' . $search . '%')
924
            ->or->like('email', '%' . $search . '%')
925
            ->unnest();
926
 
927
        }
928
 
929
        $select->order(['first_name', 'last_name']);
930
 
931
       // echo $select->getSqlString($this->adapter->platform); exit;
932
 
933
        $prototype = new User();
934
 
935
        return $this->executeFetchAllObject($select, $prototype);
936
    }
937
 
938
    /**
939
     *
940
     * @param int $group_id
3639 efrain 941
     * @param int $network_id
1 www 942
     * @param string $search
943
     * @return User[]
944
     */
3639 efrain 945
    public function fetchAllSuggestForInvitationByGroupIdAndNetworkIdAndSearch($group_id, $network_id, $search)
946
    {
947
        $selectGroupMembers = $this->sql->select(GroupMemberMapper::_TABLE);
948
        $selectGroupMembers->columns(['user_id']);
949
        $selectGroupMembers->where->equalTo('group_id', $group_id);
950
        $selectGroupMembers->where->in('status', [
951
            CompanyUser::STATUS_ACCEPTED,
952
        ]);
953
 
954
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
955
 
956
        $select = $this->sql->select();
957
        $select->from(self::_TABLE);
958
        $select->where->equalTo('network_id', $network_id);
959
        $select->where->notIn('id', $selectGroupMembers);
960
        $select->where->equalTo('status', User::STATUS_ACTIVE);
961
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
962
 
963
        if($search) {
964
            $select->where->nest()
965
            ->like('first_name', '%' . $search . '%')
966
            ->or->like('last_name', '%' . $search . '%')
967
            ->or->like('email', '%' . $search . '%')
968
            ->unnest();
969
 
970
        }
971
 
972
        $select->order(['first_name', 'last_name']);
973
 
974
        // echo $select->getSqlString($this->adapter->platform); exit;
975
 
976
        $prototype = new User();
977
 
978
        return $this->executeFetchAllObject($select, $prototype);
979
    }
980
 
981
    /**
982
     *
983
     * @param int $group_id
984
     * @param string $search
985
     * @return User[]
986
     */
1 www 987
    public function fetchAllSuggestForInvitationByGroupId($group_id, $search)
988
    {
989
        $selectGroupMembers = $this->sql->select(GroupMemberMapper::_TABLE);
990
        $selectGroupMembers->columns(['user_id']);
991
        $selectGroupMembers->where->equalTo('group_id', $group_id);
992
        $selectGroupMembers->where->in('status', [
993
         CompanyUser::STATUS_ACCEPTED,
994
        ]);
995
 
996
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
997
 
998
        $select = $this->sql->select();
999
        $select->from(self::_TABLE);
1000
        $select->where->notIn('id', $selectGroupMembers);
1001
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1002
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1003
 
1004
        if($search) {
1005
            $select->where->nest()
1006
            ->like('first_name', '%' . $search . '%')
1007
            ->or->like('last_name', '%' . $search . '%')
1008
            ->or->like('email', '%' . $search . '%')
1009
            ->unnest();
1010
 
1011
        }
1012
 
1013
        $select->order(['first_name', 'last_name']);
1014
 
1015
        // echo $select->getSqlString($this->adapter->platform); exit;
1016
 
1017
        $prototype = new User();
1018
 
1019
        return $this->executeFetchAllObject($select, $prototype);
1020
    }
1665 nelberth 1021
 
3639 efrain 1022
 
1023
 
2090 nelberth 1024
    public function fetchAllSuggestForInvitationByHptgId($group_id,$company_id, $search)
1665 nelberth 1025
    {
1026
        $selectGroupMembers = $this->sql->select(HighPerformanceTeamsGroupsMembersMapper::_TABLE);
1027
        $selectGroupMembers->columns(['user_id']);
1028
        $selectGroupMembers->where->equalTo('group_id', $group_id);
1029
        $selectGroupMembers->where->in('status', [
2082 nelberth 1030
            HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED,
1031
            HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN,
1032
            HighPerformanceTeamsGroupsMembers::STATUS_INVITED,
1665 nelberth 1033
        ]);
1034
 
1035
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
1036
 
1037
        $select = $this->sql->select();
2092 nelberth 1038
        $select->from(['u' => self::_TABLE]);
1039
        $select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.user_id = u.id', []);
2091 nelberth 1040
        $select->where->notIn('u.id', $selectGroupMembers);
2090 nelberth 1041
        $select->where->equalTo('u.status', User::STATUS_ACTIVE);
1042
        $select->where->equalTo('u.email_verified', User::EMAIL_VERIFIED_YES);
1043
        $select->where->equalTo('cu.company_id', $company_id);
1044
 
1665 nelberth 1045
 
1046
        if($search) {
1047
            $select->where->nest()
2090 nelberth 1048
            ->like('u.first_name', '%' . $search . '%')
1049
            ->or->like('u.last_name', '%' . $search . '%')
1050
            ->or->like('u.email', '%' . $search . '%')
1665 nelberth 1051
            ->unnest();
1052
 
1053
        }
1054
 
2090 nelberth 1055
        $select->order(['u.first_name', 'u.last_name']);
1665 nelberth 1056
 
1057
        // echo $select->getSqlString($this->adapter->platform); exit;
1058
 
1059
        $prototype = new User();
1060
 
1061
        return $this->executeFetchAllObject($select, $prototype);
1062
    }
1 www 1063
    /**
1064
     *
1065
     * @param string $search
1066
     * @param int $page
1067
     * @param int $records_per_page
1068
     * @param string $order_field
1069
     * @param string $order_direction
1070
     * @return Paginator
1071
     */
1072
    public function fetchAllDataTable($search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
1073
    {
1074
        $prototype = new User();
1075
        $select = $this->sql->select(self::_TABLE);
1076
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
1077
 
1078
 
1079
        if($search) {
1080
            $select->where->nest()
1081
            ->like('first_name', '%' . $search . '%')
1082
            ->or->like('last_name', '%' . $search . '%')
1083
            ->or->like('email', '%' . $search . '%')
1084
            ->unnest();
1085
 
1086
        }
1087
 
1088
 
1089
        $select->order($order_field . ' ' . $order_direction);
1090
 
1091
        $hydrator   = new ObjectPropertyHydrator();
1092
        $resultset  = new HydratingResultSet($hydrator, $prototype);
1093
 
1094
        $adapter = new DbSelect($select, $this->sql, $resultset);
1095
        $paginator = new Paginator($adapter);
1096
        $paginator->setItemCountPerPage($records_per_page);
1097
        $paginator->setCurrentPageNumber($page);
1098
 
1099
 
1100
        return $paginator;
1101
    }
1102
 
1103
    /**
1104
     *
1105
     * @param int $id
1106
     * @return boolean
1107
     */
1108
    public function updateChatOnlineStatus($id)
1109
    {
1110
        $update = $this->sql->update(self::_TABLE);
1111
        $update->set([
1112
            'online' => 1,
1113
        ]);
1114
        $update->where->equalTo('id', $id);
1115
 
1116
        return $this->executeUpdate($update);
1117
    }
1118
 
3086 efrain 1119
 
1 www 1120
 
1121
    /**
1122
     *
1123
     * @param int $id
1124
     * @return boolean
1125
     */
1126
    public function updateLastActivity($id)
1127
    {
1128
        $update = $this->sql->update(self::_TABLE);
1129
        $update->set([
1130
            'last_activity_on' => new Expression('NOW()'),
3086 efrain 1131
            'online' => 1,
1 www 1132
        ]);
1133
        $update->where->equalTo('id', $id);
1134
 
1135
        return $this->executeUpdate($update);
1136
    }
1137
 
1138
 
1139
    /**
1140
     *
1141
     * @param int $id
1142
     * @return boolean
1143
     */
1144
    public function updateLastHeartBeat($id)
1145
    {
1146
        $update = $this->sql->update(self::_TABLE);
1147
        $update->set([
1148
            'last_heart_beat_at' => new Expression('NOW()'),
242 efrain 1149
            'online' => 1,
1150
 
1 www 1151
        ]);
1152
        $update->where->equalTo('id', $id);
1153
 
1154
        return $this->executeUpdate($update);
1155
    }
242 efrain 1156
 
1157
    /**
1158
     *
1159
     * @param int $id
1160
     * @return boolean
1161
     */
1162
    public function emailVerifyAndActive($id)
1163
    {
1164
        $update = $this->sql->update(self::_TABLE);
1165
        $update->set([
1166
            'email_verified' => User::EMAIL_VERIFIED_YES,
1167
            'status' => User::STATUS_ACTIVE,
1168
        ]);
1169
        $update->where->equalTo('id', $id);
1 www 1170
 
242 efrain 1171
        return $this->executeUpdate($update);
1172
    }
1173
 
630 efrain 1174
 
1175
    /**
1176
     *
1177
     * @param int $company_id
1178
     * @return User[]
1179
     */
1180
    public function fetchAllVerifyAndActiveByCompanyId($company_id)
1181
    {
1182
        $select = $this->sql->select();
1183
        $select->columns(['status', 'company_id']);
1184
        $select->from(['tb1' => CompanyUserMapper::_TABLE]);
1185
        $select->join(['tb2' => self::_TABLE] , 'tb1.user_id = tb2.id');
1186
 
1187
 
1188
 
1189
        $select->where->equalTo('tb1.company_id', $company_id);
1190
        $select->where->equalTo('tb1.owner', CompanyUser::OWNER_NO);
1191
        $select->where->in('tb1.status', [CompanyUser::STATUS_ACCEPTED, CompanyUser::STATUS_ADMIN_WILL_ADD]);
1192
        $select->where->equalTo('tb2.email_verified', User::EMAIL_VERIFIED_YES);
1193
        $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
1194
 
1195
        $select->order('first_name', 'last_name', 'email');
1196
 
1197
        $prototype = User();
1198
 
1199
        return $this->executeFetchAllObject($select, $prototype);
1200
    }
1 www 1201
}