Proyectos de Subversion LeadersLinked - Services

Rev

Rev 587 | Ir a la última revisión | | 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
    /**
155
     * Get total count of slides by company ID
156
     * @param int $company_id
157
     * @return int
158
     */
159
    public function fetchTotalCountByCompanyId($company_id)
160
    {
161
        $select = $this->sql->select();
162
        $select->columns(['total' => new Expression('COUNT(*)')]);
163
        $select->from(self::_TABLE);
164
        $select->where->equalTo('company_id', $company_id);
165
        $record = $this->executeFetchOneArray($select);
166
        return (int)$record['total'];
167
    }
168
 
169
    /**
170
     * Get total count of slides by company ID and capsule ID
171
     * @param int $company_id
172
     * @param int $capsule_id
173
     * @return int
174
     */
175
    public function fetchTotalCountByCompanyIdAndCapsuleId($company_id, $capsule_id)
176
    {
177
        $select = $this->sql->select();
178
        $select->columns(['total' => new Expression('COUNT(*)')]);
179
        $select->from(self::_TABLE);
180
        $select->where->equalTo('company_id', $company_id);
181
        $select->where->equalTo('capsule_id', $capsule_id);
182
        $record = $this->executeFetchOneArray($select);
183
        return (int)$record['total'];
184
    }
185
 
186
    /**
187
     * Get total count of slides by company ID and quiz ID
188
     * @param int $company_id
189
     * @param int $quiz_id
190
     * @return int
191
     */
192
    public function fetchTotalCountByCompanyIdAndQuizId($company_id, $quiz_id)
193
    {
194
        $select = $this->sql->select();
195
        $select->columns(['total' => new Expression('COUNT(*)')]);
196
        $select->from(self::_TABLE);
197
        $select->where->equalTo('company_id', $company_id);
198
        $select->where->equalTo('quiz_id', $quiz_id);
199
        $record = $this->executeFetchOneArray($select);
200
        return (int)$record['total'];
201
    }
202
 
203
    /**
204
     * Insert a new slide
283 www 205
     * @param MicrolearningSlide $slide
587 stevensc 206
     * @return bool
283 www 207
     */
208
    public function insert($slide)
209
    {
210
        $hydrator = new ObjectPropertyHydrator();
211
        $values = $hydrator->extract($slide);
212
        $values = $this->removeEmpty($values);
587 stevensc 213
 
283 www 214
        $insert = $this->sql->insert(self::_TABLE);
215
        $insert->values($values);
216
 
217
        $result = $this->executeInsert($insert);
218
        if($result) {
219
            $slide->id = $this->lastInsertId;
220
        }
221
        return $result;
222
    }
587 stevensc 223
 
283 www 224
    /**
587 stevensc 225
     * Update an existing slide
283 www 226
     * @param MicrolearningSlide $slide
587 stevensc 227
     * @return bool
283 www 228
     */
229
    public function update($slide)
230
    {
231
        $hydrator = new ObjectPropertyHydrator();
232
        $values = $hydrator->extract($slide);
233
        $values = $this->removeEmpty($values);
234
 
235
        $update = $this->sql->update(self::_TABLE);
236
        $update->set($values);
237
        $update->where->equalTo('id', $slide->id);
238
 
239
        return $this->executeUpdate($update);
240
    }
587 stevensc 241
 
283 www 242
    /**
587 stevensc 243
     * Delete a slide
283 www 244
     * @param MicrolearningSlide $slide
587 stevensc 245
     * @return bool
283 www 246
     */
247
    public function delete($slide)
248
    {
249
        $delete = $this->sql->delete(self::_TABLE);
250
        $delete->where->equalTo('id', $slide->id);
251
        return $this->executeDelete($delete);
252
    }
253
 
587 stevensc 254
    /**
255
     * Fetch slides for datatable with pagination
256
     * @param int $companyId
257
     * @param int $capsuleId
258
     * @param string $search
259
     * @param int $page
260
     * @param int $records_per_page
261
     * @param string $order_field
262
     * @param string $order_direction
263
     * @return Paginator
264
     */
265
    public function fetchAllDataTableByCompanyIdAndCapsuleId($companyId, $capsuleId, $search, $page = 1, $records_per_page = 10, $order_field = 'name', $order_direction = 'ASC')
266
    {
267
        $prototype = new MicrolearningSlide();
268
        $select = $this->sql->select(self::_TABLE);
269
        $select->where->equalTo('company_id', $companyId);
270
        $select->where->equalTo('capsule_id', $capsuleId);
271
 
272
        if($search) {
273
            $select->where->like('name', '%' . $search . '%');
274
        }
275
 
276
        $select->order($order_field . ' ' . $order_direction);
277
 
278
        $hydrator = new ObjectPropertyHydrator();
279
        $resultset = new HydratingResultSet($hydrator, $prototype);
280
 
281
        $adapter = new DbSelect($select, $this->sql, $resultset);
282
        $paginator = new Paginator($adapter);
283
        $paginator->setItemCountPerPage($records_per_page);
284
        $paginator->setCurrentPageNumber($page);
285
 
286
        return $paginator;
287
    }
590 stevensc 288
 
289
    /**
290
     * Get total count of slides by company ID and topic ID
291
     * @param int $companyId
292
     * @param int $topicId
293
     * @return int
294
     */
295
    public function fetchTotalCountByCompanyIdAndTopicId($companyId, $topicId)
296
    {
297
        $select = $this->sql->select();
298
        $select->columns(['total' => new Expression('COUNT(*)')]);
299
        $select->from(self::_TABLE);
300
        $select->where->equalTo('company_id', $companyId);
301
        $select->where->equalTo('topic_id', $topicId);
302
        $record = $this->executeFetchOneArray($select);
303
        return (int)$record['total'];
304
    }
283 www 305
}