Proyectos de Subversion LeadersLinked - Services

Rev

Rev 590 | | Comparar con el anterior | 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\MicrolearningSlide;
9
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
10
use Laminas\Db\Sql\Expression;
11
use Laminas\Paginator\Paginator;
12
use Laminas\Db\ResultSet\HydratingResultSet;
13
use Laminas\Paginator\Adapter\DbSelect;
587 stevensc 14
use Laminas\Db\Sql\Select;
283 www 15
 
16
class MicrolearningSlideMapper extends MapperCommon
17
{
18
    const _TABLE = 'tbl_microlearning_slides';
19
 
20
    /**
21
     * @var MicrolearningSlideMapper
22
     */
23
    private static $_instance;
24
 
25
    /**
26
     * @param AdapterInterface $adapter
27
     */
28
    private function __construct($adapter)
29
    {
30
        parent::__construct($adapter);
31
    }
32
 
33
    /**
34
     * @param AdapterInterface $adapter
35
     * @return MicrolearningSlideMapper
36
     */
37
    public static function getInstance($adapter)
38
    {
39
        if(self::$_instance == null) {
40
            self::$_instance = new MicrolearningSlideMapper($adapter);
41
        }
42
        return self::$_instance;
43
    }
44
 
45
    /**
587 stevensc 46
     * Fetch a slide by its ID
283 www 47
     * @param int $id
587 stevensc 48
     * @return MicrolearningSlide|null
283 www 49
     */
50
    public function fetchOne($id)
51
    {
52
        $prototype = new MicrolearningSlide();
53
        $select = $this->sql->select(self::_TABLE);
54
        $select->where->equalTo('id', $id);
55
        return $this->executeFetchOneObject($select, $prototype);
56
    }
587 stevensc 57
 
283 www 58
    /**
587 stevensc 59
     * Fetch a slide by its UUID
60
     * @param string $uuid
61
     * @return MicrolearningSlide|null
283 www 62
     */
63
    public function fetchOneByUuid($uuid)
64
    {
587 stevensc 65
        $prototype = new MicrolearningSlide();
283 www 66
        $select = $this->sql->select(self::_TABLE);
67
        $select->where->equalTo('uuid', $uuid);
68
        return $this->executeFetchOneObject($select, $prototype);
69
    }
587 stevensc 70
 
283 www 71
    /**
587 stevensc 72
     * Fetch slides by company ID
283 www 73
     * @param int $company_id
587 stevensc 74
     * @return MicrolearningSlide[]
75
     */
76
    public function fetchAllByCompanyId($company_id)
77
    {
78
        $prototype = new MicrolearningSlide();
79
        $select = $this->sql->select(self::_TABLE);
80
        $select->where->equalTo('company_id', $company_id);
81
        $select->order(['order', 'name']);
82
        return $this->executeFetchAllObject($select, $prototype);
83
    }
84
 
590 stevensc 85
    public function fetchAllByCapsuleId($capsule_id)
86
    {
87
        $prototype = new MicrolearningSlide();
88
        $select = $this->sql->select(self::_TABLE);
89
        $select->where->equalTo('capsule_id', $capsule_id);
90
        $select->order(['order', 'name']);
91
        return $this->executeFetchAllObject($select, $prototype);
92
    }
93
 
587 stevensc 94
    /**
95
     * Fetch slides by company ID and capsule ID
96
     * @param int $company_id
283 www 97
     * @param int $capsule_id
98
     * @return MicrolearningSlide[]
99
     */
587 stevensc 100
    public function fetchAllByCompanyIdAndCapsuleId($company_id, $capsule_id)
283 www 101
    {
102
        $prototype = new MicrolearningSlide();
103
        $select = $this->sql->select(self::_TABLE);
104
        $select->where->equalTo('company_id', $company_id);
105
        $select->where->equalTo('capsule_id', $capsule_id);
106
        $select->order(['order', 'name']);
107
        return $this->executeFetchAllObject($select, $prototype);
108
    }
587 stevensc 109
 
283 www 110
    /**
587 stevensc 111
     * Fetch first slide by company ID and capsule ID
283 www 112
     * @param int $company_id
113
     * @param int $capsule_id
587 stevensc 114
     * @return MicrolearningSlide|null
283 www 115
     */
587 stevensc 116
    public function fetchFirstByCompanyIdAndCapsuleId($company_id, $capsule_id)
283 www 117
    {
118
        $prototype = new MicrolearningSlide();
119
        $select = $this->sql->select(self::_TABLE);
120
        $select->where->equalTo('company_id', $company_id);
121
        $select->where->equalTo('capsule_id', $capsule_id);
122
        $select->order(['order']);
123
        return $this->executeFetchOneObject($select, $prototype);
124
    }
587 stevensc 125
 
283 www 126
    /**
587 stevensc 127
     * Fetch slides by type
128
     * @param string $type
129
     * @return MicrolearningSlide[]
283 www 130
     */
587 stevensc 131
    public function fetchAllByType($type)
283 www 132
    {
133
        $prototype = new MicrolearningSlide();
134
        $select = $this->sql->select(self::_TABLE);
587 stevensc 135
        $select->where->equalTo('type', $type);
136
        $select->order(['order', 'name']);
137
        return $this->executeFetchAllObject($select, $prototype);
283 www 138
    }
587 stevensc 139
 
283 www 140
    /**
587 stevensc 141
     * Fetch slides by quiz ID
142
     * @param int $quiz_id
143
     * @return MicrolearningSlide[]
144
     */
145
    public function fetchAllByQuizId($quiz_id)
146
    {
147
        $prototype = new MicrolearningSlide();
148
        $select = $this->sql->select(self::_TABLE);
149
        $select->where->equalTo('quiz_id', $quiz_id);
150
        $select->order(['order', 'name']);
151
        return $this->executeFetchAllObject($select, $prototype);
152
    }
153
 
154
    /**
658 stevensc 155
     * Get total count of slides by capsule ID
156
     * @param int $capsule_id
157
     * @return int
158
     */
159
    public function fetchTotalCountByCapsuleId($capsule_id)
160
    {
161
        $select = $this->sql->select();
162
        $select->columns(['total' => new Expression('COUNT(*)')]);
163
        $select->from(self::_TABLE);
164
        $select->where->equalTo('capsule_id', $capsule_id);
165
        $record = $this->executeFetchOneArray($select);
166
        return (int)$record['total'];
167
    }
168
 
169
    /**
587 stevensc 170
     * Get total count of slides by company ID
171
     * @param int $company_id
172
     * @return int
173
     */
174
    public function fetchTotalCountByCompanyId($company_id)
175
    {
176
        $select = $this->sql->select();
177
        $select->columns(['total' => new Expression('COUNT(*)')]);
178
        $select->from(self::_TABLE);
179
        $select->where->equalTo('company_id', $company_id);
180
        $record = $this->executeFetchOneArray($select);
181
        return (int)$record['total'];
182
    }
183
 
184
    /**
185
     * Get total count of slides by company ID and capsule ID
186
     * @param int $company_id
187
     * @param int $capsule_id
188
     * @return int
189
     */
190
    public function fetchTotalCountByCompanyIdAndCapsuleId($company_id, $capsule_id)
191
    {
192
        $select = $this->sql->select();
193
        $select->columns(['total' => new Expression('COUNT(*)')]);
194
        $select->from(self::_TABLE);
195
        $select->where->equalTo('company_id', $company_id);
196
        $select->where->equalTo('capsule_id', $capsule_id);
197
        $record = $this->executeFetchOneArray($select);
198
        return (int)$record['total'];
199
    }
200
 
201
    /**
202
     * Get total count of slides by company ID and quiz ID
203
     * @param int $company_id
204
     * @param int $quiz_id
205
     * @return int
206
     */
207
    public function fetchTotalCountByCompanyIdAndQuizId($company_id, $quiz_id)
208
    {
209
        $select = $this->sql->select();
210
        $select->columns(['total' => new Expression('COUNT(*)')]);
211
        $select->from(self::_TABLE);
212
        $select->where->equalTo('company_id', $company_id);
213
        $select->where->equalTo('quiz_id', $quiz_id);
214
        $record = $this->executeFetchOneArray($select);
215
        return (int)$record['total'];
216
    }
217
 
218
    /**
219
     * Insert a new slide
283 www 220
     * @param MicrolearningSlide $slide
587 stevensc 221
     * @return bool
283 www 222
     */
223
    public function insert($slide)
224
    {
225
        $hydrator = new ObjectPropertyHydrator();
226
        $values = $hydrator->extract($slide);
227
        $values = $this->removeEmpty($values);
587 stevensc 228
 
283 www 229
        $insert = $this->sql->insert(self::_TABLE);
230
        $insert->values($values);
231
 
232
        $result = $this->executeInsert($insert);
233
        if($result) {
234
            $slide->id = $this->lastInsertId;
235
        }
236
        return $result;
237
    }
587 stevensc 238
 
283 www 239
    /**
587 stevensc 240
     * Update an existing slide
283 www 241
     * @param MicrolearningSlide $slide
587 stevensc 242
     * @return bool
283 www 243
     */
244
    public function update($slide)
245
    {
246
        $hydrator = new ObjectPropertyHydrator();
247
        $values = $hydrator->extract($slide);
248
        $values = $this->removeEmpty($values);
249
 
250
        $update = $this->sql->update(self::_TABLE);
251
        $update->set($values);
252
        $update->where->equalTo('id', $slide->id);
253
 
254
        return $this->executeUpdate($update);
255
    }
587 stevensc 256
 
283 www 257
    /**
587 stevensc 258
     * Delete a slide
283 www 259
     * @param MicrolearningSlide $slide
587 stevensc 260
     * @return bool
283 www 261
     */
262
    public function delete($slide)
263
    {
264
        $delete = $this->sql->delete(self::_TABLE);
265
        $delete->where->equalTo('id', $slide->id);
266
        return $this->executeDelete($delete);
267
    }
268
 
587 stevensc 269
    /**
270
     * Fetch slides for datatable with pagination
271
     * @param int $companyId
272
     * @param int $capsuleId
273
     * @param string $search
274
     * @param int $page
275
     * @param int $records_per_page
276
     * @param string $order_field
277
     * @param string $order_direction
278
     * @return Paginator
279
     */
280
    public function fetchAllDataTableByCompanyIdAndCapsuleId($companyId, $capsuleId, $search, $page = 1, $records_per_page = 10, $order_field = 'name', $order_direction = 'ASC')
281
    {
282
        $prototype = new MicrolearningSlide();
283
        $select = $this->sql->select(self::_TABLE);
284
        $select->where->equalTo('company_id', $companyId);
285
        $select->where->equalTo('capsule_id', $capsuleId);
286
 
287
        if($search) {
288
            $select->where->like('name', '%' . $search . '%');
289
        }
290
 
291
        $select->order($order_field . ' ' . $order_direction);
292
 
293
        $hydrator = new ObjectPropertyHydrator();
294
        $resultset = new HydratingResultSet($hydrator, $prototype);
295
 
296
        $adapter = new DbSelect($select, $this->sql, $resultset);
297
        $paginator = new Paginator($adapter);
298
        $paginator->setItemCountPerPage($records_per_page);
299
        $paginator->setCurrentPageNumber($page);
300
 
301
        return $paginator;
302
    }
590 stevensc 303
 
304
    /**
305
     * Get total count of slides by company ID and topic ID
306
     * @param int $companyId
307
     * @param int $topicId
308
     * @return int
309
     */
310
    public function fetchTotalCountByCompanyIdAndTopicId($companyId, $topicId)
311
    {
312
        $select = $this->sql->select();
313
        $select->columns(['total' => new Expression('COUNT(*)')]);
314
        $select->from(self::_TABLE);
315
        $select->where->equalTo('company_id', $companyId);
316
        $select->where->equalTo('topic_id', $topicId);
317
        $record = $this->executeFetchOneArray($select);
318
        return (int)$record['total'];
319
    }
283 www 320
}