Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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