Proyectos de Subversion LeadersLinked - Services

Rev

| Ultima modificación | Ver Log |

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