Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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