Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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