Proyectos de Subversion LeadersLinked - Services

Rev

Rev 283 | Rev 590 | 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
 
85
    /**
86
     * Fetch slides by company ID and capsule ID
87
     * @param int $company_id
283 www 88
     * @param int $capsule_id
89
     * @return MicrolearningSlide[]
90
     */
587 stevensc 91
    public function fetchAllByCompanyIdAndCapsuleId($company_id, $capsule_id)
283 www 92
    {
93
        $prototype = new MicrolearningSlide();
94
        $select = $this->sql->select(self::_TABLE);
95
        $select->where->equalTo('company_id', $company_id);
96
        $select->where->equalTo('capsule_id', $capsule_id);
97
        $select->order(['order', 'name']);
98
        return $this->executeFetchAllObject($select, $prototype);
99
    }
587 stevensc 100
 
283 www 101
    /**
587 stevensc 102
     * Fetch first slide by company ID and capsule ID
283 www 103
     * @param int $company_id
104
     * @param int $capsule_id
587 stevensc 105
     * @return MicrolearningSlide|null
283 www 106
     */
587 stevensc 107
    public function fetchFirstByCompanyIdAndCapsuleId($company_id, $capsule_id)
283 www 108
    {
109
        $prototype = new MicrolearningSlide();
110
        $select = $this->sql->select(self::_TABLE);
111
        $select->where->equalTo('company_id', $company_id);
112
        $select->where->equalTo('capsule_id', $capsule_id);
113
        $select->order(['order']);
114
        return $this->executeFetchOneObject($select, $prototype);
115
    }
587 stevensc 116
 
283 www 117
    /**
587 stevensc 118
     * Fetch slides by type
119
     * @param string $type
120
     * @return MicrolearningSlide[]
283 www 121
     */
587 stevensc 122
    public function fetchAllByType($type)
283 www 123
    {
124
        $prototype = new MicrolearningSlide();
125
        $select = $this->sql->select(self::_TABLE);
587 stevensc 126
        $select->where->equalTo('type', $type);
127
        $select->order(['order', 'name']);
128
        return $this->executeFetchAllObject($select, $prototype);
283 www 129
    }
587 stevensc 130
 
283 www 131
    /**
587 stevensc 132
     * Fetch slides by quiz ID
133
     * @param int $quiz_id
134
     * @return MicrolearningSlide[]
135
     */
136
    public function fetchAllByQuizId($quiz_id)
137
    {
138
        $prototype = new MicrolearningSlide();
139
        $select = $this->sql->select(self::_TABLE);
140
        $select->where->equalTo('quiz_id', $quiz_id);
141
        $select->order(['order', 'name']);
142
        return $this->executeFetchAllObject($select, $prototype);
143
    }
144
 
145
    /**
146
     * Get total count of slides by company ID
147
     * @param int $company_id
148
     * @return int
149
     */
150
    public function fetchTotalCountByCompanyId($company_id)
151
    {
152
        $select = $this->sql->select();
153
        $select->columns(['total' => new Expression('COUNT(*)')]);
154
        $select->from(self::_TABLE);
155
        $select->where->equalTo('company_id', $company_id);
156
        $record = $this->executeFetchOneArray($select);
157
        return (int)$record['total'];
158
    }
159
 
160
    /**
161
     * Get total count of slides by company ID and capsule ID
162
     * @param int $company_id
163
     * @param int $capsule_id
164
     * @return int
165
     */
166
    public function fetchTotalCountByCompanyIdAndCapsuleId($company_id, $capsule_id)
167
    {
168
        $select = $this->sql->select();
169
        $select->columns(['total' => new Expression('COUNT(*)')]);
170
        $select->from(self::_TABLE);
171
        $select->where->equalTo('company_id', $company_id);
172
        $select->where->equalTo('capsule_id', $capsule_id);
173
        $record = $this->executeFetchOneArray($select);
174
        return (int)$record['total'];
175
    }
176
 
177
    /**
178
     * Get total count of slides by company ID and quiz ID
179
     * @param int $company_id
180
     * @param int $quiz_id
181
     * @return int
182
     */
183
    public function fetchTotalCountByCompanyIdAndQuizId($company_id, $quiz_id)
184
    {
185
        $select = $this->sql->select();
186
        $select->columns(['total' => new Expression('COUNT(*)')]);
187
        $select->from(self::_TABLE);
188
        $select->where->equalTo('company_id', $company_id);
189
        $select->where->equalTo('quiz_id', $quiz_id);
190
        $record = $this->executeFetchOneArray($select);
191
        return (int)$record['total'];
192
    }
193
 
194
    /**
195
     * Insert a new slide
283 www 196
     * @param MicrolearningSlide $slide
587 stevensc 197
     * @return bool
283 www 198
     */
199
    public function insert($slide)
200
    {
201
        $hydrator = new ObjectPropertyHydrator();
202
        $values = $hydrator->extract($slide);
203
        $values = $this->removeEmpty($values);
587 stevensc 204
 
283 www 205
        $insert = $this->sql->insert(self::_TABLE);
206
        $insert->values($values);
207
 
208
        $result = $this->executeInsert($insert);
209
        if($result) {
210
            $slide->id = $this->lastInsertId;
211
        }
212
        return $result;
213
    }
587 stevensc 214
 
283 www 215
    /**
587 stevensc 216
     * Update an existing slide
283 www 217
     * @param MicrolearningSlide $slide
587 stevensc 218
     * @return bool
283 www 219
     */
220
    public function update($slide)
221
    {
222
        $hydrator = new ObjectPropertyHydrator();
223
        $values = $hydrator->extract($slide);
224
        $values = $this->removeEmpty($values);
225
 
226
        $update = $this->sql->update(self::_TABLE);
227
        $update->set($values);
228
        $update->where->equalTo('id', $slide->id);
229
 
230
        return $this->executeUpdate($update);
231
    }
587 stevensc 232
 
283 www 233
    /**
587 stevensc 234
     * Delete a slide
283 www 235
     * @param MicrolearningSlide $slide
587 stevensc 236
     * @return bool
283 www 237
     */
238
    public function delete($slide)
239
    {
240
        $delete = $this->sql->delete(self::_TABLE);
241
        $delete->where->equalTo('id', $slide->id);
242
        return $this->executeDelete($delete);
243
    }
244
 
587 stevensc 245
    /**
246
     * Fetch slides for datatable with pagination
247
     * @param int $companyId
248
     * @param int $capsuleId
249
     * @param string $search
250
     * @param int $page
251
     * @param int $records_per_page
252
     * @param string $order_field
253
     * @param string $order_direction
254
     * @return Paginator
255
     */
256
    public function fetchAllDataTableByCompanyIdAndCapsuleId($companyId, $capsuleId, $search, $page = 1, $records_per_page = 10, $order_field = 'name', $order_direction = 'ASC')
257
    {
258
        $prototype = new MicrolearningSlide();
259
        $select = $this->sql->select(self::_TABLE);
260
        $select->where->equalTo('company_id', $companyId);
261
        $select->where->equalTo('capsule_id', $capsuleId);
262
 
263
        if($search) {
264
            $select->where->like('name', '%' . $search . '%');
265
        }
266
 
267
        $select->order($order_field . ' ' . $order_direction);
268
 
269
        $hydrator = new ObjectPropertyHydrator();
270
        $resultset = new HydratingResultSet($hydrator, $prototype);
271
 
272
        $adapter = new DbSelect($select, $this->sql, $resultset);
273
        $paginator = new Paginator($adapter);
274
        $paginator->setItemCountPerPage($records_per_page);
275
        $paginator->setCurrentPageNumber($page);
276
 
277
        return $paginator;
278
    }
283 www 279
}