Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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