Proyectos de Subversion LeadersLinked - Services

Rev

Rev 587 | Ir a la última revisión | | 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;
14
 
15
 
16
class MicrolearningSlideMapper extends MapperCommon
17
{
18
    const _TABLE = 'tbl_microlearning_slides';
19
 
20
    /**
21
     *
22
     * @var MicrolearningSlideMapper
23
     */
24
    private static $_instance;
25
 
26
    /**
27
     *
28
     * @param AdapterInterface $adapter
29
     */
30
    private function __construct($adapter)
31
    {
32
        parent::__construct($adapter);
33
    }
34
 
35
    /**
36
     *
37
     * @param AdapterInterface $adapter
38
     * @return MicrolearningSlideMapper
39
     */
40
    public static function getInstance($adapter)
41
    {
42
        if(self::$_instance == null) {
43
            self::$_instance = new MicrolearningSlideMapper($adapter);
44
        }
45
        return self::$_instance;
46
    }
47
 
48
    /**
49
     *
50
     * @param int $company_id
51
     * @param int $topic_id
52
     * @param int $capsule_id
53
     * @return int
54
     */
55
    public function fetchTotalCountByCompanyIdAndTopicIdAndCapsuleId($company_id, $topic_id, $capsule_id)
56
    {
57
        $select = $this->sql->select();
58
        $select->columns(['total' => new Expression('COUNT(*)')]);
59
        $select->from(self::_TABLE);
60
        $select->where->equalTo('company_id', $company_id);
61
        $select->where->equalTo('topic_id', $topic_id);
62
        $select->where->equalTo('capsule_id', $capsule_id);
63
 
64
        $record = $this->executeFetchOneArray($select);
65
        return $record['total'];
66
    }
67
 
68
    /**
69
     *
70
     * @param int $company_id
71
     * @param int $topic_id
72
     * @return int
73
     */
74
    public function fetchTotalCountByCompanyIdAndTopicId($company_id, $topic_id)
75
    {
76
        $select = $this->sql->select();
77
        $select->columns(['total' => new Expression('COUNT(*)')]);
78
        $select->from(self::_TABLE);
79
        $select->where->equalTo('company_id', $company_id);
80
        $select->where->equalTo('topic_id', $topic_id);
81
 
82
 
83
       // echo $select->getSqlString($this->adapter->platform) . PHP_EOL;
84
 
85
        $record = $this->executeFetchOneArray($select);
86
        return $record['total'];
87
    }
88
 
89
 
90
    /**
91
     *
92
     * @param int $company_id
93
     * @param int $quiz_id
94
     * @return int
95
     */
96
    public function fetchTotalCountByCompanyIdQuizId($company_id, $quiz_id)
97
    {
98
        $select = $this->sql->select();
99
        $select->columns(['total' => new Expression('COUNT(*)')]);
100
        $select->from(self::_TABLE);
101
        $select->where->equalTo('company_id', $company_id);
102
        $select->where->equalTo('quiz_id', $quiz_id);
103
 
104
        $record = $this->executeFetchOneArray($select);
105
        return $record['total'];
106
    }
107
 
108
 
109
    /**
110
     *
111
     * @param int $id
112
     * @return MicrolearningSlide
113
     */
114
    public function fetchOne($id)
115
    {
116
        $prototype = new MicrolearningSlide();
117
 
118
        $select = $this->sql->select(self::_TABLE);
119
        $select->where->equalTo('id', $id);
120
 
121
        return $this->executeFetchOneObject($select, $prototype);
122
    }
123
 
124
    /**
125
     *
126
     * @param int $uuid
127
     * @return MicrolearningSlide
128
     */
129
    public function fetchOneByUuid($uuid)
130
    {
131
        $prototype = new MicrolearningSlide;
132
        $select = $this->sql->select(self::_TABLE);
133
        $select->where->equalTo('uuid', $uuid);
134
 
135
        return $this->executeFetchOneObject($select, $prototype);
136
    }
137
 
138
    /**
139
     *
140
     * @param int $company_id
141
     * @param int $topic_id
142
     * @param int $capsule_id
143
     * @return MicrolearningSlide[]
144
     */
145
    public function fetchAllByCompanyIdAndTopicIdAndCapsuleId($company_id, $topic_id, $capsule_id)
146
    {
147
        $prototype = new MicrolearningSlide();
148
 
149
        $select = $this->sql->select(self::_TABLE);
150
        $select->where->equalTo('company_id', $company_id);
151
        $select->where->equalTo('topic_id', $topic_id);
152
        $select->where->equalTo('capsule_id', $capsule_id);
153
        $select->order(['order', 'name']);
154
 
155
        return $this->executeFetchAllObject($select, $prototype);
156
    }
157
 
158
 
159
    /**
160
     *
161
     * @param int $company_id
162
     * @param int $topic_id
163
     * @param int $capsule_id
164
     * @return MicrolearningSlide
165
     */
166
    public function fetchFirstByCompanyIdAndTopicIdAndCapsuleId($company_id, $topic_id, $capsule_id)
167
    {
168
        $prototype = new MicrolearningSlide();
169
 
170
        $select = $this->sql->select(self::_TABLE);
171
        $select->where->equalTo('company_id', $company_id);
172
        $select->where->equalTo('topic_id', $topic_id);
173
        $select->where->equalTo('capsule_id', $capsule_id);
174
        $select->order(['order']);
175
 
176
 
177
        return $this->executeFetchOneObject($select, $prototype);
178
    }
179
 
180
    /**
181
     *
182
     * @param int $companyId
183
     * @param int $capsuleId
184
     * @param string $search
185
     * @param int $page
186
     * @param int $records_per_page
187
     * @param string $order_field
188
     * @param string $order_direction
189
     * @return Paginator
190
     *
191
     */
192
    public function fetchAllDataTableByCompanyIdAndCapsuleId($companyId, $capsuleId,  $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
193
    {
194
        $prototype = new MicrolearningSlide();
195
        $select = $this->sql->select(self::_TABLE);
196
        $select->where->equalTo('company_id', $companyId);
197
        $select->where->equalTo('capsule_id', $capsuleId);
198
 
199
        if($search) {
200
            $select->where->like('name', '%' . $search . '%');
201
        }
202
        $select->order($order_field . ' ' . $order_direction);
203
 
204
        //echo $select->getSqlString($this->adapter->platform); exit;
205
 
206
        $hydrator   = new ObjectPropertyHydrator();
207
        $resultset  = new HydratingResultSet($hydrator, $prototype);
208
 
209
        $adapter = new DbSelect($select, $this->sql, $resultset);
210
        $paginator = new Paginator($adapter);
211
        $paginator->setItemCountPerPage($records_per_page);
212
        $paginator->setCurrentPageNumber($page);
213
 
214
 
215
        return $paginator;
216
    }
217
 
218
 
219
    /**
220
     *
221
     * @param MicrolearningSlide $slide
222
     * @return boolean
223
     */
224
    public function insert($slide)
225
    {
226
        $hydrator = new ObjectPropertyHydrator();
227
        $values = $hydrator->extract($slide);
228
        $values = $this->removeEmpty($values);
229
 
230
        $insert = $this->sql->insert(self::_TABLE);
231
        $insert->values($values);
232
 
233
        $result = $this->executeInsert($insert);
234
        if($result) {
235
            $slide->id = $this->lastInsertId;
236
        }
237
        return $result;
238
    }
239
 
240
    /**
241
     *
242
     * @param MicrolearningSlide $slide
243
     * @return boolean
244
     */
245
    public function update($slide)
246
    {
247
 
248
        $hydrator = new ObjectPropertyHydrator();
249
        $values = $hydrator->extract($slide);
250
        $values = $this->removeEmpty($values);
251
 
252
        $update = $this->sql->update(self::_TABLE);
253
        $update->set($values);
254
        $update->where->equalTo('id', $slide->id);
255
 
256
 
257
        return $this->executeUpdate($update);
258
    }
259
 
260
    /**
261
     *
262
     * @param MicrolearningSlide $slide
263
     * @return boolean
264
     */
265
    public function delete($slide)
266
    {
267
        $delete = $this->sql->delete(self::_TABLE);
268
        $delete->where->equalTo('id', $slide->id);
269
 
270
        return $this->executeDelete($delete);
271
    }
272
 
273
 
274
 
275
}