Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4842 | Rev 5050 | 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
    }
4842 efrain 245
 
246
    /**
247
     *
248
     * @param int $network_id
249
     * @return int
250
     */
251
    public function fetchCountActiveByDefaultNetworkId($network_id)
252
    {
253
 
254
        $select = $this->sql->select(self::_TABLE);
255
        $select->columns(['total' => new Expression('COUNT(*)')]);
256
        $select->where->equalTo('network_id', $network_id);
257
        $select->where->in('usertype_id', [UserType::USER, UserType::ADMIN]);
258
        $select->where->equalTo('status', User::STATUS_ACTIVE);
259
 
260
        $record = $this->executeFetchOneArray($select);
261
 
262
        return $record['total'];
263
    }
1 www 264
 
4842 efrain 265
    /**
266
     *
267
     * @param int $network_id
268
     * @return int
269
     */
270
    public function fetchCountActiveByOtherNetworkId($network_id)
271
    {
272
 
273
        $select = $this->sql->select(self::_TABLE);
274
        $select->columns(['total' => new Expression('COUNT(*)')]);
275
        $select->where->equalTo('network_id', $network_id);
276
        $select->where->in('usertype_id', [UserType::USER, UserType::ADMIN]);
277
        $select->where->equalTo('status', User::STATUS_ACTIVE);
278
        $select->where->equalTo('request_access', User::REQUEST_ACCESS_APPROVED);
279
 
280
 
281
        $record = $this->executeFetchOneArray($select);
282
 
283
        return $record['total'];
284
    }
1 www 285
 
4842 efrain 286
 
1 www 287
 
288
    /**
289
     *
290
     * @param string $keyword
291
     * @param int $current_user
292
     * @return User[]
293
     */
294
    public function fetchAllByKeyword($keyword, $current_user = 0)
295
    {
296
 
297
        $prototype = new User();
298
 
299
        $select = $this->sql->select(self::_TABLE);
300
 
301
        $select->where->equalTo('status', User::STATUS_ACTIVE);
302
        $select->where->notEqualTo('id', $current_user);
303
        $select->where->and->nest()
304
            ->like('first_name', '%' . $keyword . '%')
305
            ->or->like('last_name', '%' . $keyword . '%')
306
            ->or->like(new Expression("CONCAT(first_name,' ',last_name)"), '%'. $keyword . '%')
307
            ->unnest();
308
 
309
 
310
        return $this->executeFetchAllObject($select, $prototype);
311
    }
312
 
313
    /**
314
     *
315
     * @param int[] $ids
316
     * @param int $current_user
317
     * @param string $status
318
     * @return User[]
319
     */
320
    public function fetchAllByIds($ids, $current_user = 0, $status = User::STATUS_ACTIVE)
321
    {
322
 
323
        $prototype = new User();
324
        $select = $this->sql->select(self::_TABLE);
325
 
326
 
327
        $select->where->equalTo('status', User::STATUS_ACTIVE);
630 efrain 328
        $select->where->and->in('id',$ids);
1 www 329
 
330
        if($current_user) {
331
            $select->where->and->notEqualTo('id ', $current_user);
332
        }
630 efrain 333
        $select->order(['first_name ASC', 'last_name ASC', 'email ASC']);
1 www 334
 
335
        return $this->executeFetchAllObject($select, $prototype);
336
    }
337
 
4857 efrain 338
    /**
339
     *
340
     * @param int[] $ids
341
     * @param string $search
342
     * @param int $current_user
343
     * @param string $status
344
     * @return User[]
345
     */
346
    public function fetchAllByIdsAndSearch($ids, $search, $current_user = 0, $status = User::STATUS_ACTIVE)
347
    {
348
 
349
        $prototype = new User();
350
        $select = $this->sql->select(self::_TABLE);
351
 
352
 
353
        $select->where->equalTo('status', User::STATUS_ACTIVE);
354
        $select->where->and->in('id',$ids);
355
        $select->where->nest()
356
        ->like('first_name', '%'.$search. '%')
357
        ->or->like('last_name', '%'.$search. '%')
358
        ->or->like('email', '%'.$search. '%')->unnest();
359
 
360
        if($current_user) {
361
            $select->where->and->notEqualTo('id ', $current_user);
362
        }
363
        $select->order(['first_name ASC', 'last_name ASC', 'email ASC']);
364
 
365
        return $this->executeFetchAllObject($select, $prototype);
366
    }
1 www 367
 
4857 efrain 368
 
369
 
370
 
371
 
372
 
1 www 373
    /**
374
     *
375
     * @return User[]
376
     */
377
    public function fetchAllByActives()
378
    {
379
 
380
        $prototype = new User();
381
        $select = $this->sql->select(self::_TABLE);
382
 
383
 
384
        $select->where->equalTo('status', User::STATUS_ACTIVE);
385
        $select->where->equalTo('email_verified',User::EMAIL_VERIFIED_YES);
386
 
646 efrain 387
        $select->order(['first_name DESC, last_name DESC, email_DESC']);
388
 
1 www 389
 
390
        return $this->executeFetchAllObject($select, $prototype);
391
    }
392
 
393
    /**
4857 efrain 394
     *
395
     * @param int $network_id
396
     * @param int $current_user_id;
397
     * @return int[]
398
     */
399
    public function fetchAllIdsByDefaultNetworkId($network_id, $current_user_id = 0)
400
    {
401
 
402
 
403
        $select = $this->sql->select(self::_TABLE);
404
        $select->columns(['id']);
405
        $select->where->equalTo('network_id', $network_id);
406
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
407
        $select->where->equalTo('status', User::STATUS_ACTIVE);
408
 
409
        if($current_user_id) {
410
            $select->where->notEqualTo('id', $current_user_id);
411
        }
412
 
413
        $ids = [];
414
 
415
        $records = $this->executeFetchAllArray($select);
416
        foreach($records as $record)
417
        {
418
            array_push($ids, $record['id']);
419
        }
420
 
421
        return $ids;
422
    }
423
 
424
    /**
425
     *
426
     * @param int $network_id
427
     * @param string $search
428
     * @param int $current_user_id;
429
     * @return int[]
430
     */
431
    public function fetchAllIdsByDefaultNetworkIdAndSearch($network_id, $search, $current_user_id = 0)
432
    {
433
 
434
 
435
        $select = $this->sql->select(self::_TABLE);
436
        $select->columns(['id']);
437
        $select->where->equalTo('network_id', $network_id);
438
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
439
        $select->where->equalTo('status', User::STATUS_ACTIVE);
440
        $select->where->nest()
441
        ->like('first_name', '%'.$search. '%')
442
        ->or->like('last_name', '%'.$search. '%')
443
        ->or->like('email', '%'.$search. '%')->unnest();
444
 
445
        if($current_user_id) {
446
            $select->where->notEqualTo('id', $current_user_id);
447
        }
448
 
449
        $ids = [];
450
 
451
        $records = $this->executeFetchAllArray($select);
452
        foreach($records as $record)
453
        {
454
            array_push($ids, $record['id']);
455
        }
456
 
457
        return $ids;
458
    }
459
 
460
    /**
461
     *
462
     * @param int $network_id
463
     * @param int $current_user_id;
464
     * @return int[]
465
     */
466
    public function fetchAllIdsByNonDefaultNetworkId($network_id, $current_user_id = 0)
467
    {
468
 
469
 
470
        $select = $this->sql->select(self::_TABLE);
471
        $select->columns(['id']);
472
        $select->where->equalTo('network_id', $network_id);
473
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
474
        $select->where->equalTo('status', User::STATUS_ACTIVE);
475
        $select->where->equalTo('request_access', User::REQUEST_ACCESS_APPROVED);
476
 
477
        if($current_user_id) {
478
            $select->where->notEqualTo('id', $current_user_id);
479
        }
480
 
481
        $ids = [];
482
 
483
        $records = $this->executeFetchAllArray($select);
484
        foreach($records as $record)
485
        {
486
            array_push($ids, $record['id']);
487
        }
488
 
489
        return $ids;
490
    }
491
 
492
 
493
    /**
494
     *
495
     * @param int $network_id
496
     * @param string $search
497
     * @param int $current_user_id;
498
     * @return int[]
499
     */
500
    public function fetchAllIdsByNonDefaultNetworkIdAndSearch($network_id, $search, $current_user_id = 0)
501
    {
502
 
503
 
504
        $select = $this->sql->select(self::_TABLE);
505
        $select->columns(['id']);
506
        $select->where->equalTo('network_id', $network_id);
507
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
508
        $select->where->equalTo('status', User::STATUS_ACTIVE);
509
        $select->where->equalTo('request_access', User::REQUEST_ACCESS_APPROVED);
510
        $select->where->nest()
511
        ->like('first_name', '%'.$search. '%')
512
        ->or->like('last_name', '%'.$search. '%')
513
        ->or->like('email', '%'.$search. '%')->unnest();
514
 
515
        if($current_user_id) {
516
            $select->where->notEqualTo('id', $current_user_id);
517
        }
518
 
519
 
520
        $ids = [];
521
 
522
        $records = $this->executeFetchAllArray($select);
523
        foreach($records as $record)
524
        {
525
            array_push($ids, $record['id']);
526
        }
527
 
528
        return $ids;
529
    }
530
 
531
 
532
    /**
1 www 533
     *
646 efrain 534
     * @param int $company_id
535
     * @return array
536
     */
537
    public function fetchAllByCompanyId($company_id)
538
    {
539
 
540
        $prototype = new User();
541
        $select = $this->sql->select();
542
        $select->from(['tb1' => self::_TABLE]);
543
        $select->join(['tb2' => CompanyUserMapper::_TABLE], 'tb1.id = tb2.user_id', []);
544
 
545
 
546
        $select->where->equalTo('tb2.company_id', $company_id);
547
        $select->where->in('tb2.status', [CompanyUser::STATUS_ACCEPTED, CompanyUser::STATUS_ADMIN_WILL_ADD]);
548
 
549
        $select->where->equalTo('tb1.status', User::STATUS_ACTIVE);
550
        $select->where->equalTo('tb1.email_verified',User::EMAIL_VERIFIED_YES);
551
 
552
        $select->order(['first_name DESC, last_name DESC, email_DESC']);
553
 
4300 efrain 554
 
555
 
646 efrain 556
        return $this->executeFetchAllObject($select, $prototype);
557
    }
558
 
559
    /**
560
     *
1 www 561
     * @param int $user_id
3639 efrain 562
     * @return boolean
563
     */
564
    public function leaveImpersonate($user_id)
565
    {
566
        $values = [
567
            'impersonate_user_id' => new Expression('NULL')
568
        ];
569
 
570
        $update = $this->sql->update(self::_TABLE);
571
        $update->set($values);
572
        $update->where->equalTo('id', $user_id);
573
 
574
        return $this->executeUpdate($update);
575
    }
576
 
577
    /**
578
     *
579
     * @param int $user_id
580
     * @param int $impersonate_user_id
581
     * @return boolean
582
     */
583
    public function startImpersonate($user_id, $impersonate_user_id)
584
    {
585
        $values = [
586
            'impersonate_user_id' => $impersonate_user_id
587
        ];
588
 
589
        $update = $this->sql->update(self::_TABLE);
590
        $update->set($values);
591
        $update->where->equalTo('id', $user_id);
592
 
593
        return $this->executeUpdate($update);
594
    }
595
 
596
    /**
597
     *
598
     * @param int $user_id
1 www 599
     * @param string $password_reset_key
600
     * @return boolean
601
     */
602
    public function updatePasswordResetKey($user_id, $password_reset_key)
603
    {
604
        $values = [
605
            'password_reset_key' => $password_reset_key,
606
            'password_generated_on' => date('Y-m-d H:i:s'),
607
            'updated_on' => new Expression('NOW()')
608
        ];
609
 
610
        $update = $this->sql->update(self::_TABLE);
611
        $update->set($values);
612
        $update->where->equalTo('id', $user_id);
613
 
614
        return $this->executeUpdate($update);
615
    }
616
 
1979 efrain 617
 
618
    /**
619
     *
620
     * @param int $user_id
621
     * @param string $delete_account_key
622
     * @return boolean
623
     */
624
    public function updateDeleteAccountKey($user_id, $delete_account_key)
625
    {
626
        $values = [
627
            'delete_account_key' => $delete_account_key,
628
            'delete_account_generated_on' => date('Y-m-d H:i:s'),
629
            'updated_on' => new Expression('NOW()')
630
        ];
631
 
632
        $update = $this->sql->update(self::_TABLE);
633
        $update->set($values);
634
        $update->where->equalTo('id', $user_id);
635
 
636
        return $this->executeUpdate($update);
637
    }
638
 
1 www 639
 
640
 
641
    /**
642
     *
643
     * @param User $user
644
     * @param string $password_hash
645
     * @return boolean
646
     */
647
    public function updatePassword($user, $password_hash)
648
    {
649
        $values = [
650
            'password'              => $password_hash,
651
            'password_reset_key'    => '',
652
            'password_updated_on'   => date('Y-m-d H:i:s'),
653
            'login_attempt'         => 0,
654
            'blocked'               => User::BLOCKED_NO,
655
            'updated_on'            => new Expression('NOW()')
656
        ];
657
 
658
        $update = $this->sql->update(self::_TABLE);
659
        $update->set($values);
660
        $update->where->equalTo('id', $user->id);
661
 
662
        return $this->executeUpdate($update);
663
    }
664
 
665
 
666
    /**
667
     *
668
     * @param User $user
669
     * @return boolean
670
     */
671
    public function unblock($user)
672
    {
673
        $values = [
674
            'login_attempt'         => 0,
675
            'blocked'               => User::BLOCKED_NO,
676
            'updated_on'            => new Expression('NOW()')
677
        ];
678
 
679
        $update = $this->sql->update(self::_TABLE);
680
        $update->set($values);
681
        $update->where->equalTo('id', $user->id);
682
 
683
        return $this->executeUpdate($update);
684
    }
685
 
686
 
687
 
688
 
689
    /**
690
     *
691
     * @param User $user
692
     * @param string $one_time_password
693
     * @return boolean
694
     */
695
    public function updateOneTimePassword($user, $one_time_password)
696
    {
697
        $values = [
698
            'one_time_password' => $one_time_password,
699
            'updated_on'        => new Expression('NOW()')
700
        ];
701
 
702
        $update = $this->sql->update(self::_TABLE);
703
        $update->set($values);
704
        $update->where->equalTo('id', $user->id);
705
 
706
        return $this->executeUpdate($update);
707
    }
708
 
709
 
710
    /**
711
     *
712
     * @param User $user
713
     * @return boolean
714
     */
715
    public function update($user)
716
    {
717
        $hydrator = new ObjectPropertyHydrator();
718
        $values = $hydrator->extract($user);
1979 efrain 719
        //$values = $this->removeEmpty($values);
720
 
721
 
722
        unset($values['added_on']);
1 www 723
        $values['updated_on'] = new Expression('NOW()') ;
724
 
725
        $update = $this->sql->update(self::_TABLE);
726
        $update->set($values);
727
        $update->where->equalTo('id',$user->id);
728
 
1979 efrain 729
        //echo $update->getSqlString($this->adapter->platform); exit;
730
 
1 www 731
        return $this->executeUpdate($update);
732
    }
733
 
734
    /**
735
     *
736
     * @param User $user
737
     * @return boolean
738
     */
739
    public function updatePrivacy($user)
740
    {
741
        $values = [
742
            'show_in_search' => $user->show_in_search,
743
            'updated_on' => new Expression('NOW()')
744
        ];
745
 
746
        $update = $this->sql->update(self::_TABLE);
747
        $update->set($values);
748
        $update->where->equalTo('id',$user->id);
749
 
750
        return $this->executeUpdate($update);
751
    }
752
 
753
    /**
754
     *
755
     * @param User $user
756
     * @return boolean
757
     */
758
    public function updateBasic($user)
759
    {
760
        $values = [
761
            'first_name' => $user->first_name,
762
            'last_name' => $user->last_name,
763
            'phone' => $user->phone,
764
            'gender' => $user->gender,
4113 efrain 765
            'timezone' => $user->timezone,
4416 efrain 766
            'is_adult' => $user->is_adult,
1 www 767
            'updated_on' => new Expression('NOW()')
768
        ];
769
 
770
        $update = $this->sql->update(self::_TABLE);
771
        $update->set($values);
772
        $update->where->equalTo('id',$user->id);
773
 
774
        return $this->executeUpdate($update);
775
    }
776
 
777
 
778
    /**
779
     *
780
     * @param User $user
781
     * @return boolean
782
     */
783
    public function updateImage($user)
784
    {
785
        $values = [
786
            'image' => $user->image,
787
            'updated_on' => new Expression('NOW()')
788
        ];
789
 
790
        $update = $this->sql->update(self::_TABLE);
791
        $update->set($values);
792
        $update->where->equalTo('id',$user->id);
793
 
794
        return $this->executeUpdate($update);
795
    }
796
 
797
    /**
798
     *
799
     * @param User $user
800
     * @return boolean
801
     */
802
    public function updateLocation($user)
803
    {
804
        $values = [
805
            'location_id' => $user->location_id,
806
            'updated_on' => new Expression('NOW()')
807
        ];
808
 
809
        $update = $this->sql->update(self::_TABLE);
810
        $update->set($values);
811
        $update->where->equalTo('id',$user->id);
812
 
813
        return $this->executeUpdate($update);
814
    }
815
 
816
    /**
817
     *
818
     * @param int $user_id
819
     * @return boolean
820
     */
821
    public function activateAccount($user_id)
822
    {
823
        $values = [
824
            'email_verified'    => User::EMAIL_VERIFIED_YES,
825
            'status'            => User::STATUS_ACTIVE,
826
            'activation_key'    => '',
827
            'updated_on' => new Expression('NOW()')
828
        ];
829
 
830
        $update = $this->sql->update(self::_TABLE);
831
        $update->set($values);
832
        $update->where->equalTo('id', $user_id);
833
 
834
        return $this->executeUpdate($update);
835
    }
836
 
837
    /**
838
     *
839
     * @param User $user
840
     * @return boolean
841
     */
842
    public function insert($user)
843
    {
844
 
845
        $hydrator = new ObjectPropertyHydrator();
846
        $values = $hydrator->extract($user);
847
        $values = $this->removeEmpty($values);
848
 
849
        $insert = $this->sql->insert(self::_TABLE);
850
        $insert->values($values);
851
 
852
        $response = $this->executeInsert($insert);
853
        if($response) {
854
            $user->id = $this->lastInsertId;
855
        }
856
 
857
        return $response;
858
    }
859
 
860
 
861
    /**
862
     *
863
     * @return boolean
864
     */
865
    public function truncate()
866
    {
867
        $sql = sprintf('TRUNCATE TABLE `%s` ', self::_TABLE);
868
        return $this->executeSentenceWithParameters($sql);
869
    }
870
 
871
    /**
872
     *
873
     * @param int $company_id
874
     * @param string $status
875
     * @param string $search
876
     * @param int $page
877
     * @param int $records_per_page
878
     * @param string $order_field
879
     * @param string $order_direction
880
     * @return Paginator
881
     */
882
    public function fetchAllDataTableByCompanyId($company_id, $status = '', $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
883
    {
884
        $select = $this->sql->select();
885
        $select->columns(['status', 'backend', 'creator']);
886
        $select->from(['tb1' => CompanyUserMapper::_TABLE]);
887
        $select->join(['tb2' => self::_TABLE] , 'tb1.user_id = tb2.id', [
888
            'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
889
            'blocked', 'login_attempt', 'email_verified'
890
 
891
        ]);
892
 
893
        $select->where->equalTo('tb1.company_id', $company_id);
894
        $select->where->equalTo('tb1.owner', CompanyUser::OWNER_NO);
895
 
896
        if($status) {
897
            $select->where->equalTo('tb1.status', $status);
898
 
899
        }
900
 
901
        if($search) {
902
            $select->where->nest()
903
            ->like('first_name', '%' . $search . '%')
904
            ->or->like('last_name', '%' . $search . '%')
905
            ->or->like('email', '%' . $search . '%')
906
            ->unnest();
907
 
908
        }
909
 
910
 
911
        $select->order($order_field . ' ' . $order_direction);
912
 
913
        $hydrator   = new ArraySerializableHydrator();
914
        $resultset  = new HydratingResultSet($hydrator);
915
 
916
        $adapter = new DbSelect($select, $this->sql, $resultset);
917
        $paginator = new Paginator($adapter);
918
        $paginator->setItemCountPerPage($records_per_page);
919
        $paginator->setCurrentPageNumber($page);
920
 
921
 
922
        return $paginator;
923
    }
924
 
925
 
926
    /**
927
     *
928
     * @param int $company_id
929
     * @param string $search
930
     * @param int $page
931
     * @param int $records_per_page
932
     * @param string $order_field
933
     * @param string $order_direction
934
     * @return Paginator
935
     */
936
    public function fetchAllDataTableStudensByCompanyId($company_id,  $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
937
    {
938
        $date = date('Y-m-d');
939
 
940
        $selectCapsuleUser = $this->getSql()->select();
941
        $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
942
        $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
943
        $selectCapsuleUser->where->equalTo('company_id', $company_id);
944
        $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
945
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
946
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
947
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
948
 
949
        //echo $select->getSqlString($this->adapter->platform); exit;
950
 
951
        $select = $this->sql->select();
952
        $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email','blocked']);
953
        $select->from(UserMapper::_TABLE);
954
        $select->where->in('id', $selectCapsuleUser);
955
 
956
 
957
        if($search) {
958
            $select->where->nest()
959
            ->like('first_name', '%' . $search . '%')
960
            ->or->like('last_name', '%' . $search . '%')
961
            ->or->like('email', '%' . $search . '%')
962
            ->unnest();
963
 
964
        }
965
 
966
 
967
        $select->order($order_field . ' ' . $order_direction);
968
 
969
        $hydrator   = new ArraySerializableHydrator();
970
        $resultset  = new HydratingResultSet($hydrator);
971
 
972
        $adapter = new DbSelect($select, $this->sql, $resultset);
973
        $paginator = new Paginator($adapter);
974
        $paginator->setItemCountPerPage($records_per_page);
975
        $paginator->setCurrentPageNumber($page);
976
 
977
 
978
        return $paginator;
979
    }
2381 nelberth 980
 
981
 
1 www 982
    /**
983
     *
2381 nelberth 984
     * @param int $company_id
1 www 985
     * @param string $search
2381 nelberth 986
     * @param int $page
987
     * @param int $records_per_page
988
     * @param string $order_field
989
     * @param string $order_direction
990
     * @return Paginator
991
     */
992
    public function fetchAllStudensByCompanyId($company_id)
993
    {
994
 
995
        $date = date('Y-m-d');
996
 
997
        $selectCapsuleUser = $this->getSql()->select();
998
        $selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)')  ]);
999
        $selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);
1000
        $selectCapsuleUser->where->equalTo('company_id', $company_id);
1001
        $selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
1002
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
1003
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
1004
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
1005
 
1006
        //echo $select->getSqlString($this->adapter->platform); exit;
1007
        $prototype = new User();
1008
        $select = $this->sql->select();
1009
        $select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email','blocked']);
1010
        $select->from(UserMapper::_TABLE);
1011
        $select->where->in('id', $selectCapsuleUser);
1012
        return $this->executeFetchAllObject($select, $prototype);
1013
 
1014
    }
1015
 
1016
    /**
1017
     *
1018
     * @param string $search
1 www 1019
     * @return User[]
1020
     */
1021
    public function fetchAllSuggest($search)
1022
    {
1023
 
1024
        $select = $this->sql->select();
1025
        $select->from(self::_TABLE);
1026
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1027
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1028
 
1029
        if($search) {
1030
            $select->where->nest()
1031
            ->like('first_name', '%' . $search . '%')
1032
            ->or->like('last_name', '%' . $search . '%')
1033
            ->or->like('email', '%' . $search . '%')
1034
            ->unnest();
1035
 
1036
        }
1037
 
1038
        $select->order(['first_name', 'last_name']);
1039
 
1040
        // echo $select->getSqlString($this->adapter->platform); exit;
1041
 
1042
        $prototype = new User();
1043
 
1044
        return $this->executeFetchAllObject($select, $prototype);
1045
    }
1046
 
3639 efrain 1047
    /**
1048
     *
1049
     * @param int $network_id
1050
     * @param string $search
1051
     * @return User[]
1052
     */
1053
    public function fetchAllSuggestByNetworkIdAndSearch($network_id, $search)
1054
    {
1055
 
1056
        $select = $this->sql->select();
1057
        $select->from(self::_TABLE);
1058
        $select->where->equalTo('network_id', $network_id);
1059
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1060
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1061
 
1062
        if($search) {
1063
            $select->where->nest()
1064
            ->like('first_name', '%' . $search . '%')
1065
            ->or->like('last_name', '%' . $search . '%')
1066
            ->or->like('email', '%' . $search . '%')
1067
            ->unnest();
1068
 
1069
        }
1070
 
1071
        $select->order(['first_name', 'last_name']);
1072
 
1073
        // echo $select->getSqlString($this->adapter->platform); exit;
1074
 
1075
        $prototype = new User();
1076
 
1077
        return $this->executeFetchAllObject($select, $prototype);
1078
    }
1 www 1079
 
1080
    /**
1081
     *
1082
     * @param int $company_id
3639 efrain 1083
     * @param int $network_id
1 www 1084
     * @param string $search
1085
     * @return User[]
1086
     */
3639 efrain 1087
    public function fetchAllSuggestForInvitationByCompanyIdAndNetworkIdAndSearch($company_id, $network_id, $search)
1088
    {
1089
        $selectCompanyUsers = $this->sql->select(CompanyUserMapper::_TABLE);
1090
        $selectCompanyUsers->columns(['user_id']);
1091
        $selectCompanyUsers->where->equalTo('company_id', $company_id);
1092
        $selectCompanyUsers->where->in('status', [
1093
            CompanyUser::STATUS_ACCEPTED,
1094
            CompanyUser::STATUS_PENDING,
1095
            CompanyUser::STATUS_SENT,
1096
 
1097
        ]);
1098
 
1099
        //echo $selectCompanyUsers->getSqlString($this->adapter->platform); exit;
1100
 
1101
        $select = $this->sql->select();
1102
        $select->from(self::_TABLE);
1103
        $select->where->notIn('id', $selectCompanyUsers);
1104
        $select->where->equalTo('network_id', $network_id);
1105
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1106
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1107
 
1108
        if($search) {
1109
            $select->where->nest()
1110
            ->like('first_name', '%' . $search . '%')
1111
            ->or->like('last_name', '%' . $search . '%')
1112
            ->or->like('email', '%' . $search . '%')
1113
            ->unnest();
1114
 
1115
        }
1116
 
1117
        $select->order(['first_name', 'last_name']);
1118
 
1119
        // echo $select->getSqlString($this->adapter->platform); exit;
1120
 
1121
        $prototype = new User();
1122
 
1123
        return $this->executeFetchAllObject($select, $prototype);
1124
    }
1125
 
1126
    /**
1127
     *
1128
     * @param int $company_id
1129
     * @param string $search
1130
     * @return User[]
1131
     */
1 www 1132
    public function fetchAllSuggestForInvitationByCompanyId($company_id, $search)
1133
    {
1134
        $selectCompanyUsers = $this->sql->select(CompanyUserMapper::_TABLE);
1135
        $selectCompanyUsers->columns(['user_id']);
1136
        $selectCompanyUsers->where->equalTo('company_id', $company_id);
1137
        $selectCompanyUsers->where->in('status', [
1138
            CompanyUser::STATUS_ACCEPTED,
1139
            CompanyUser::STATUS_PENDING,
1140
            CompanyUser::STATUS_SENT,
1141
 
1142
        ]);
1143
 
1144
        //echo $selectCompanyUsers->getSqlString($this->adapter->platform); exit;
1145
 
1146
        $select = $this->sql->select();
1147
        $select->from(self::_TABLE);
1148
        $select->where->notIn('id', $selectCompanyUsers);
1149
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1150
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1151
 
1152
        if($search) {
1153
            $select->where->nest()
1154
            ->like('first_name', '%' . $search . '%')
1155
            ->or->like('last_name', '%' . $search . '%')
1156
            ->or->like('email', '%' . $search . '%')
1157
            ->unnest();
1158
 
1159
        }
1160
 
1161
        $select->order(['first_name', 'last_name']);
1162
 
1163
       // echo $select->getSqlString($this->adapter->platform); exit;
1164
 
1165
        $prototype = new User();
1166
 
1167
        return $this->executeFetchAllObject($select, $prototype);
1168
    }
1169
 
1170
    /**
1171
     *
1172
     * @param int $group_id
3639 efrain 1173
     * @param int $network_id
1 www 1174
     * @param string $search
1175
     * @return User[]
1176
     */
3639 efrain 1177
    public function fetchAllSuggestForInvitationByGroupIdAndNetworkIdAndSearch($group_id, $network_id, $search)
1178
    {
1179
        $selectGroupMembers = $this->sql->select(GroupMemberMapper::_TABLE);
1180
        $selectGroupMembers->columns(['user_id']);
1181
        $selectGroupMembers->where->equalTo('group_id', $group_id);
1182
        $selectGroupMembers->where->in('status', [
1183
            CompanyUser::STATUS_ACCEPTED,
1184
        ]);
1185
 
1186
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
1187
 
1188
        $select = $this->sql->select();
1189
        $select->from(self::_TABLE);
1190
        $select->where->equalTo('network_id', $network_id);
1191
        $select->where->notIn('id', $selectGroupMembers);
1192
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1193
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1194
 
1195
        if($search) {
1196
            $select->where->nest()
1197
            ->like('first_name', '%' . $search . '%')
1198
            ->or->like('last_name', '%' . $search . '%')
1199
            ->or->like('email', '%' . $search . '%')
1200
            ->unnest();
1201
 
1202
        }
1203
 
1204
        $select->order(['first_name', 'last_name']);
1205
 
1206
        // echo $select->getSqlString($this->adapter->platform); exit;
1207
 
1208
        $prototype = new User();
1209
 
1210
        return $this->executeFetchAllObject($select, $prototype);
1211
    }
1212
 
1213
    /**
1214
     *
1215
     * @param int $group_id
1216
     * @param string $search
1217
     * @return User[]
1218
     */
1 www 1219
    public function fetchAllSuggestForInvitationByGroupId($group_id, $search)
1220
    {
1221
        $selectGroupMembers = $this->sql->select(GroupMemberMapper::_TABLE);
1222
        $selectGroupMembers->columns(['user_id']);
1223
        $selectGroupMembers->where->equalTo('group_id', $group_id);
1224
        $selectGroupMembers->where->in('status', [
1225
         CompanyUser::STATUS_ACCEPTED,
1226
        ]);
1227
 
1228
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
1229
 
1230
        $select = $this->sql->select();
1231
        $select->from(self::_TABLE);
1232
        $select->where->notIn('id', $selectGroupMembers);
1233
        $select->where->equalTo('status', User::STATUS_ACTIVE);
1234
        $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
1235
 
1236
        if($search) {
1237
            $select->where->nest()
1238
            ->like('first_name', '%' . $search . '%')
1239
            ->or->like('last_name', '%' . $search . '%')
1240
            ->or->like('email', '%' . $search . '%')
1241
            ->unnest();
1242
 
1243
        }
1244
 
1245
        $select->order(['first_name', 'last_name']);
1246
 
1247
        // echo $select->getSqlString($this->adapter->platform); exit;
1248
 
1249
        $prototype = new User();
1250
 
1251
        return $this->executeFetchAllObject($select, $prototype);
1252
    }
1665 nelberth 1253
 
3639 efrain 1254
 
1255
 
2090 nelberth 1256
    public function fetchAllSuggestForInvitationByHptgId($group_id,$company_id, $search)
1665 nelberth 1257
    {
1258
        $selectGroupMembers = $this->sql->select(HighPerformanceTeamsGroupsMembersMapper::_TABLE);
1259
        $selectGroupMembers->columns(['user_id']);
1260
        $selectGroupMembers->where->equalTo('group_id', $group_id);
1261
        $selectGroupMembers->where->in('status', [
2082 nelberth 1262
            HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED,
1263
            HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN,
1264
            HighPerformanceTeamsGroupsMembers::STATUS_INVITED,
1665 nelberth 1265
        ]);
1266
 
1267
        //echo $selectGroupMembers->getSqlString($this->adapter->platform); exit;
1268
 
1269
        $select = $this->sql->select();
2092 nelberth 1270
        $select->from(['u' => self::_TABLE]);
1271
        $select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.user_id = u.id', []);
2091 nelberth 1272
        $select->where->notIn('u.id', $selectGroupMembers);
2090 nelberth 1273
        $select->where->equalTo('u.status', User::STATUS_ACTIVE);
1274
        $select->where->equalTo('u.email_verified', User::EMAIL_VERIFIED_YES);
1275
        $select->where->equalTo('cu.company_id', $company_id);
1276
 
1665 nelberth 1277
 
1278
        if($search) {
1279
            $select->where->nest()
2090 nelberth 1280
            ->like('u.first_name', '%' . $search . '%')
1281
            ->or->like('u.last_name', '%' . $search . '%')
1282
            ->or->like('u.email', '%' . $search . '%')
1665 nelberth 1283
            ->unnest();
1284
 
1285
        }
1286
 
2090 nelberth 1287
        $select->order(['u.first_name', 'u.last_name']);
1665 nelberth 1288
 
1289
        // echo $select->getSqlString($this->adapter->platform); exit;
1290
 
1291
        $prototype = new User();
1292
 
1293
        return $this->executeFetchAllObject($select, $prototype);
1294
    }
4751 efrain 1295
 
1 www 1296
    /**
1297
     *
1298
     * @param string $search
1299
     * @param int $page
1300
     * @param int $records_per_page
1301
     * @param string $order_field
1302
     * @param string $order_direction
1303
     * @return Paginator
1304
     */
1305
    public function fetchAllDataTable($search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
1306
    {
1307
        $prototype = new User();
1308
        $select = $this->sql->select(self::_TABLE);
1309
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
1310
 
1311
 
1312
        if($search) {
1313
            $select->where->nest()
1314
            ->like('first_name', '%' . $search . '%')
1315
            ->or->like('last_name', '%' . $search . '%')
1316
            ->or->like('email', '%' . $search . '%')
1317
            ->unnest();
1318
 
1319
        }
1320
 
1321
 
1322
        $select->order($order_field . ' ' . $order_direction);
1323
 
1324
        $hydrator   = new ObjectPropertyHydrator();
1325
        $resultset  = new HydratingResultSet($hydrator, $prototype);
1326
 
1327
        $adapter = new DbSelect($select, $this->sql, $resultset);
1328
        $paginator = new Paginator($adapter);
1329
        $paginator->setItemCountPerPage($records_per_page);
1330
        $paginator->setCurrentPageNumber($page);
1331
 
1332
 
1333
        return $paginator;
1334
    }
1335
 
1336
    /**
4398 efrain 1337
     *
4751 efrain 1338
     * @param int $network_id
1339
     * @param string $search
1340
     * @param int $page
1341
     * @param int $records_per_page
1342
     * @param string $order_field
1343
     * @param string $order_direction
1344
     * @return Paginator
1345
     */
1346
    public function fetchAllDataTableByNetworkId($network_id, $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
1347
    {
1348
        $prototype = new User();
1349
        $select = $this->sql->select(self::_TABLE);
1350
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
4776 efrain 1351
        $select->where->equalTo('network_id', $network_id);
1352
        $select->where->equalTo('request_access', User::REQUEST_ACCESS_APPROVED);
4751 efrain 1353
 
1354
 
1355
        if($search) {
1356
            $select->where->nest()
1357
            ->like('first_name', '%' . $search . '%')
1358
            ->or->like('last_name', '%' . $search . '%')
1359
            ->or->like('email', '%' . $search . '%')
1360
            ->unnest();
1361
 
1362
        }
1363
 
1364
 
1365
        $select->order($order_field . ' ' . $order_direction);
1366
 
1367
        $hydrator   = new ObjectPropertyHydrator();
1368
        $resultset  = new HydratingResultSet($hydrator, $prototype);
1369
 
1370
        $adapter = new DbSelect($select, $this->sql, $resultset);
1371
        $paginator = new Paginator($adapter);
1372
        $paginator->setItemCountPerPage($records_per_page);
1373
        $paginator->setCurrentPageNumber($page);
1374
 
1375
 
1376
        return $paginator;
1377
    }
4776 efrain 1378
 
1379
 
1380
 
1381
 
1382
    /**
1383
     *
1384
     * @param int $network_id
1385
     * @param string $search
1386
     * @param int $page
1387
     * @param int $records_per_page
1388
     * @param string $order_field
1389
     * @param string $order_direction
1390
     * @return Paginator
1391
     */
1392
    public function fetchAllDataTableRequestAccessPendingByNetworkId($network_id, $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
1393
    {
1394
        $prototype = new User();
1395
        $select = $this->sql->select(self::_TABLE);
1396
        $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
1397
        $select->where->equalTo('network_id', $network_id);
1398
        $select->where->equalTo('request_access', User::REQUEST_ACCESS_PENDING);
1399
 
1400
        if($search) {
1401
            $select->where->nest()
1402
            ->like('first_name', '%' . $search . '%')
1403
            ->or->like('last_name', '%' . $search . '%')
1404
            ->or->like('email', '%' . $search . '%')
1405
            ->unnest();
1406
 
1407
        }
1408
 
1409
 
1410
        $select->order($order_field . ' ' . $order_direction);
1411
 
1412
        $hydrator   = new ObjectPropertyHydrator();
1413
        $resultset  = new HydratingResultSet($hydrator, $prototype);
1414
 
1415
        $adapter = new DbSelect($select, $this->sql, $resultset);
1416
        $paginator = new Paginator($adapter);
1417
        $paginator->setItemCountPerPage($records_per_page);
1418
        $paginator->setCurrentPageNumber($page);
1419
 
1420
 
1421
        return $paginator;
1422
    }
4751 efrain 1423
 
1424
 
1425
    /**
1426
     *
4398 efrain 1427
     * @param int $id
1428
     * @return boolean
1429
     */
1430
    public function markIsAdult($id)
1431
    {
1432
        $update = $this->sql->update(self::_TABLE);
1433
        $update->set([
1434
            'id_adult' => User::IS_ADULT_YES,
1435
        ]);
1436
        $update->where->equalTo('id', $id);
1437
 
1438
        return $this->executeUpdate($update);
1439
    }
1440
 
1441
    /**
1442
     *
1443
     * @param int $id
1444
     * @return boolean
1445
     */
1446
    public function markIsNotAdult($id)
1447
    {
1448
        $update = $this->sql->update(self::_TABLE);
1449
        $update->set([
1450
            'id_adult' => User::IS_ADULT_NO,
1451
        ]);
1452
        $update->where->equalTo('id', $id);
1453
 
1454
        return $this->executeUpdate($update);
1455
    }
1456
 
1457
    /**
1 www 1458
     *
1459
     * @param int $id
1460
     * @return boolean
1461
     */
1462
    public function updateChatOnlineStatus($id)
1463
    {
1464
        $update = $this->sql->update(self::_TABLE);
1465
        $update->set([
1466
            'online' => 1,
1467
        ]);
1468
        $update->where->equalTo('id', $id);
1469
 
1470
        return $this->executeUpdate($update);
1471
    }
1472
 
3086 efrain 1473
 
1 www 1474
 
1475
    /**
1476
     *
1477
     * @param int $id
1478
     * @return boolean
1479
     */
1480
    public function updateLastActivity($id)
1481
    {
1482
        $update = $this->sql->update(self::_TABLE);
1483
        $update->set([
1484
            'last_activity_on' => new Expression('NOW()'),
3086 efrain 1485
            'online' => 1,
1 www 1486
        ]);
1487
        $update->where->equalTo('id', $id);
1488
 
1489
        return $this->executeUpdate($update);
1490
    }
1491
 
1492
 
1493
    /**
1494
     *
1495
     * @param int $id
1496
     * @return boolean
1497
     */
1498
    public function updateLastHeartBeat($id)
1499
    {
1500
        $update = $this->sql->update(self::_TABLE);
1501
        $update->set([
1502
            'last_heart_beat_at' => new Expression('NOW()'),
242 efrain 1503
            'online' => 1,
1504
 
1 www 1505
        ]);
1506
        $update->where->equalTo('id', $id);
1507
 
1508
        return $this->executeUpdate($update);
1509
    }
242 efrain 1510
 
1511
    /**
1512
     *
1513
     * @param int $id
1514
     * @return boolean
1515
     */
1516
    public function emailVerifyAndActive($id)
1517
    {
1518
        $update = $this->sql->update(self::_TABLE);
1519
        $update->set([
1520
            'email_verified' => User::EMAIL_VERIFIED_YES,
1521
            'status' => User::STATUS_ACTIVE,
1522
        ]);
1523
        $update->where->equalTo('id', $id);
1 www 1524
 
242 efrain 1525
        return $this->executeUpdate($update);
1526
    }
1527
 
630 efrain 1528
 
1529
    /**
1530
     *
1531
     * @param int $company_id
1532
     * @return User[]
1533
     */
1534
    public function fetchAllVerifyAndActiveByCompanyId($company_id)
1535
    {
1536
        $select = $this->sql->select();
1537
        $select->columns(['status', 'company_id']);
1538
        $select->from(['tb1' => CompanyUserMapper::_TABLE]);
1539
        $select->join(['tb2' => self::_TABLE] , 'tb1.user_id = tb2.id');
1540
 
1541
 
1542
 
1543
        $select->where->equalTo('tb1.company_id', $company_id);
1544
        $select->where->equalTo('tb1.owner', CompanyUser::OWNER_NO);
1545
        $select->where->in('tb1.status', [CompanyUser::STATUS_ACCEPTED, CompanyUser::STATUS_ADMIN_WILL_ADD]);
1546
        $select->where->equalTo('tb2.email_verified', User::EMAIL_VERIFIED_YES);
1547
        $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
1548
 
1549
        $select->order('first_name', 'last_name', 'email');
1550
 
1551
        $prototype = User();
1552
 
1553
        return $this->executeFetchAllObject($select, $prototype);
1554
    }
1 www 1555
}