Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 280 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Mapper;
5
 
6
use LeadersLinked\Mapper\Common\MapperCommon;
7
use Laminas\Db\Adapter\AdapterInterface;
8
use LeadersLinked\Model\CompanyMicrolearningCapsuleUser;
9
use Laminas\Db\Sql\Expression;
10
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
11
 
12
 
13
 
14
class CompanyMicrolearningCapsuleUserMapper extends MapperCommon
15
{
16
    const _TABLE = 'tbl_company_microlearning_capsule_users';
17
 
18
    /**
19
     *
20
     * @var CompanyMicrolearningCapsuleUserMapper
21
     */
22
    private static $_instance;
23
 
24
    /**
25
     *
26
     * @param AdapterInterface $adapter
27
     */
28
    private function __construct($adapter)
29
    {
30
        parent::__construct($adapter);
31
    }
32
 
33
    /**
34
     *
35
     * @param AdapterInterface $adapter
36
     * @return CompanyMicrolearningCapsuleUserMapper
37
     */
38
    public static function getInstance($adapter)
39
    {
40
        if(self::$_instance == null) {
41
            self::$_instance = new CompanyMicrolearningCapsuleUserMapper($adapter);
42
        }
43
        return self::$_instance;
44
    }
45
 
46
    /**
47
     *
48
     * @param int $company_id
49
     * @param int $topic_id
50
     * @param int $capsule_id
51
     * return int
52
     */
53
    public function fetchCountUsersByCompanyIdAndTopicIdAndCapsuleId($company_id, $topic_id, $capsule_id)
54
    {
55
 
56
        $select = $this->sql->select();
57
        $select->columns(['total' => new Expression('COUNT(*)')]);
58
        $select->from(self::_TABLE);
59
        $select->where->equalTo('company_id', $company_id);
60
        $select->where->equalTo('topic_id', $topic_id);
61
        $select->where->equalTo('capsule_id', $capsule_id);
62
 
63
        $record = $this->executeFetchOneArray($select);
64
        return $record['total'];
65
    }
66
 
67
    /**
68
     *
69
     * @param int $company_id
70
     * @param int $topic_id
71
     * @param int $user_id
72
     * return int
73
     */
74
    public function fetchCountByCompanyIdAndTopicIdAndUserId($company_id, $topic_id, $user_id)
75
    {
76
 
77
        $select = $this->sql->select();
78
        $select->columns(['total' => new Expression('COUNT(*)')]);
79
        $select->from(self::_TABLE);
80
        $select->where->equalTo('company_id', $company_id);
81
        $select->where->equalTo('topic_id', $topic_id);
82
        $select->where->equalTo('user_id', $user_id);
83
 
84
        $record = $this->executeFetchOneArray($select);
85
        return $record['total'];
86
    }
87
 
88
    /**
89
     *
90
     * @param int $company_id
91
     * @param int $user_id
92
     * return int
93
     */
94
    public function fetchCountByCompanyIdAndUserId($company_id,  $user_id)
95
    {
96
 
97
        $select = $this->sql->select();
98
        $select->columns(['total' => new Expression('COUNT(*)')]);
99
        $select->from(self::_TABLE);
100
        $select->where->equalTo('company_id', $company_id);
101
        $select->where->equalTo('user_id', $user_id);
102
 
103
        $record = $this->executeFetchOneArray($select);
104
        return $record['total'];
105
    }
106
 
107
 
108
    /**
109
     *
110
     * @param int $company_id
111
     * @param int $topic_id
112
     * @param int $capsule_id
113
     * return int
114
     */
115
    public function fetchCountUsersActiveByCompanyIdAndTopicIdAndCapsuleId($company_id, $topic_id, $capsule_id)
116
    {
117
        $now = date('Y-m-d H:i:s');
118
 
119
        $select = $this->sql->select();
120
        $select->columns(['total' => new Expression('COUNT(*)')]);
121
        $select->from(self::_TABLE);
122
        $select->where->equalTo('company_id', $company_id);
123
        $select->where->equalTo('topic_id', $topic_id);
124
        $select->where->equalTo('capsule_id', $capsule_id);
125
        $select->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
126
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
127
        ->and->lessThanOrEqualTo('paid_from', $now)->and->greaterThanOrEqualTo('paid_to', $now )->unnest()->unnest();
128
 
129
        //echo $select->getSqlString($this->adapter->platform); exit;
130
 
131
        $record = $this->executeFetchOneArray($select);
132
        return $record['total'];
133
    }
4776 efrain 134
 
135
    /**
136
     *
137
     * @param int $company_id
138
     * @param int $topic_id
139
     * @param int $capsule_id
140
     * return int
141
     */
142
    public function fetchCountByCompanyIdAndTopicIdAndCapsuleId($company_id, $topic_id, $capsule_id)
143
    {
1 www 144
 
4776 efrain 145
 
146
        $select = $this->sql->select();
147
        $select->columns(['total' => new Expression('COUNT(*)')]);
148
        $select->from(self::_TABLE);
149
        $select->where->equalTo('company_id', $company_id);
150
        $select->where->equalTo('topic_id', $topic_id);
151
        $select->where->equalTo('capsule_id', $capsule_id);
152
 
153
 
154
        //echo $select->getSqlString($this->adapter->platform); exit;
155
 
156
        $record = $this->executeFetchOneArray($select);
157
        return $record['total'];
158
    }
159
 
1 www 160
 
161
    /**
162
     *
163
     * @param int $company_id
164
     * @param string $date;
165
     * return []
166
     */
167
    public function fetchAllDistinctUserIdActiveByCompanyIdAndDate($company_id, $date)
168
    {
169
 
170
 
171
        $select = $this->sql->select();
172
        $select->from(self::_TABLE);
173
        $select->columns(['user_id' => new Expression('DISTINCT(user_id)') ]);
174
        $select->where->equalTo('company_id', $company_id);
175
        $select->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
176
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
177
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
178
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
179
 
180
 
181
        $user_ids = [];
182
        $records = $this->executeFetchAllArray($select);
183
 
184
        foreach($records as $record)
185
        {
186
            array_push($user_ids, $record[ 'user_id' ]);
187
        }
188
 
189
 
190
        return $user_ids;
191
    }
192
 
193
 
194
    /**
195
     *
196
     * @param int $user_id
197
     * return CompanyMicrolearningCapsuleUser[]
198
     */
199
    public function fetchAllActiveByUserId($user_id)
200
    {
201
        $now = date('Y-m-d H:i:s');
202
 
203
        $prototype = new CompanyMicrolearningCapsuleUser();
204
        $select = $this->sql->select();
205
        $select->from(self::_TABLE);
206
        $select->where->equalTo('user_id', $user_id);
207
        $select->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
208
            ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
209
            ->and->lessThanOrEqualTo('paid_from', $now)->and->greaterThanOrEqualTo('paid_to', $now )->unnest()->unnest();
210
 
259 efrain 211
        //echo $select->getSqlString($this->adapter->platform);
1 www 212
 
213
        return $this->executeFetchAllObject($select, $prototype);
214
    }
215
 
216
 
217
    /**
218
     *
219
     * @param int $user_id
220
     * return CompanyMicrolearningCapsuleUser[]
221
     */
222
    public function fetchAllByUserId($user_id)
223
    {
224
 
225
        $prototype = new CompanyMicrolearningCapsuleUser();
226
        $select = $this->sql->select();
227
        $select->from(self::_TABLE);
228
        $select->where->equalTo('user_id', $user_id);
229
 
230
        //echo $select->getSqlString($this->adapter->platform); exit;
231
 
232
        return $this->executeFetchAllObject($select, $prototype);
233
    }
234
 
235
 
236
    /**
237
     *
280 efrain 238
     * @param int $capsule_id
1 www 239
     * @param string $date;
240
     * return CompanyMicrolearningCapsuleUser[]
241
     */
242
    public function fetchAllActiveByCapsuleIdAndDate($capsule_id, $date)
243
    {
244
 
245
        $prototype = new CompanyMicrolearningCapsuleUser();
246
        $select = $this->sql->select();
247
        $select->from(self::_TABLE);
248
        $select->where->equalTo('capsule_id', $capsule_id);
249
        $select->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
250
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
251
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
252
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
253
 
254
        //echo $select->getSqlString($this->adapter->platform); exit;
255
 
256
        return $this->executeFetchAllObject($select, $prototype);
257
    }
258
 
259
    /**
260
     *
280 efrain 261
     * @param int $capsule_id
262
     * @param int $user_id
263
     * @param string $date;
264
     * return CompanyMicrolearningCapsuleUser
265
     */
266
    public function fetchOneActiveByCapsuleIdAndDate($capsule_id, $user_id, $date)
267
    {
268
 
269
        $prototype = new CompanyMicrolearningCapsuleUser();
270
        $select = $this->sql->select();
271
        $select->from(self::_TABLE);
272
        $select->where->equalTo('capsule_id', $capsule_id);
273
        $select->where->equalTo('user_id', $user_id);
274
        $select->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
275
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
276
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
277
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
278
 
279
        //echo $select->getSqlString($this->adapter->platform); exit;
280
 
281
        return $this->executeFetchOneObject($select, $prototype);
282
    }
283
 
284
    /**
285
     *
1 www 286
     * @param int $company_id
287
     * return int[]
288
     */
289
    public function fetchAllUserIdsForCapsulesActiveByCompanyId($company_id)
290
    {
291
        $now = date('Y-m-d H:i:s');
292
 
293
 
294
        $select = $this->sql->select();
295
        $select->columns(['user_id' => new Expression('DISTINCT(user_id)')]);
296
        $select->from(self::_TABLE);
297
        $select->where->equalTo('company_id', $company_id);
298
        $select->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()
299
        ->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)
300
        ->and->lessThanOrEqualTo('paid_from', $now)->and->greaterThanOrEqualTo('paid_to', $now )->unnest()->unnest();
301
 
302
        //echo $select->getSqlString($this->adapter->platform); exit;
303
 
304
        $user_ids = [];
305
        $records = $this->executeFetchAllArray($select);
306
        foreach($records as $record)
307
        {
308
            array_push($user_ids, $record['user_id']);
309
        }
310
        return $user_ids;
311
    }
312
 
313
 
314
    /**
315
     *
316
     * @param int $id
317
     * return CompanyMicrolearningCapsuleUser
318
     */
319
    public function fetchOne($id)
320
    {
321
        $prototype = new CompanyMicrolearningCapsuleUser();
322
        $select = $this->sql->select();
323
        $select->from(self::_TABLE);
324
        $select->where->equalTo('id', $id);
325
 
326
        return $this->executeFetchOneObject($select, $prototype);
327
    }
328
 
329
 
330
    /**
331
     *
332
     * @param int $user_id
333
     * @param int $capsule_id
334
     * return CompanyMicrolearningCapsuleUser
335
     */
336
    public function fetchOneByUserIdAndCapsuleId($user_id, $capsule_id)
337
    {
338
        $prototype = new CompanyMicrolearningCapsuleUser();
339
        $select = $this->sql->select();
340
        $select->from(self::_TABLE);
341
        $select->where->equalTo('user_id', $user_id);
342
        $select->where->equalTo('capsule_id', $capsule_id);
343
 
344
        return $this->executeFetchOneObject($select, $prototype);
345
    }
346
 
347
 
348
 
349
 
350
    /**
351
     *
352
     * @param CompanyMicrolearningCapsuleUser $companyMicrolearningCapsuleUser
353
     * @return boolean
354
     */
355
    public function insert($companyMicrolearningCapsuleUser)
356
    {
357
        $hydrator = new ObjectPropertyHydrator();
358
        $values = $hydrator->extract($companyMicrolearningCapsuleUser);
359
        $values = $this->removeEmpty($values);
360
 
361
        $insert = $this->sql->insert(self::_TABLE);
362
        $insert->values($values);
363
 
364
        $response = $this->executeInsert($insert);
365
        if($response) {
366
            $companyMicrolearningCapsuleUser->id = $this->lastInsertId;
367
        }
368
 
369
        return $response;
370
    }
371
 
372
    /**
373
     *
374
     * @param CompanyMicrolearningCapsuleUser $companyMicrolearningCapsuleUser
375
     * @return boolean
376
     */
377
    public function update($companyMicrolearningCapsuleUser)
378
    {
379
        $hydrator = new ObjectPropertyHydrator();
380
        $values = $hydrator->extract($companyMicrolearningCapsuleUser);
381
        $values = $this->removeEmpty($values);
382
 
383
        $update = $this->sql->update(self::_TABLE);
384
        $update->set($values);
385
        $update->where->equalTo('id', $companyMicrolearningCapsuleUser->id);
386
 
387
        return $this->executeUpdate($update);
388
    }
389
 
390
}