Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 2503 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Mapper;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Db\ResultSet\HydratingResultSet;
9
use Laminas\Db\Sql\Expression;
10
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
11
use Laminas\Log\LoggerInterface;
12
use Laminas\Paginator\Paginator;
13
use Laminas\Paginator\Adapter\DbSelect;
14
 
15
use LeadersLinked\Model\Device;
16
use LeadersLinked\Mapper\Common\MapperCommon;
17
use Laminas\Hydrator\ArraySerializableHydrator;
18
 
19
 
20
 
21
class DeviceMapper extends MapperCommon
22
{
23
    const _TABLE = 'tbl_devices';
24
 
25
 
26
    /**
27
     *
28
     * @var DeviceMapper
29
     */
30
    private static $_instance;
31
 
32
    /**
33
     *
34
     * @param AdapterInterface $adapter
35
     */
36
    private function __construct($adapter)
37
    {
38
        parent::__construct($adapter);
39
    }
40
 
41
    /**
42
     *
43
     * @param AdapterInterface $adapter
44
     * @return DeviceMapper
45
     */
46
    public static function getInstance($adapter)
47
    {
48
        if(self::$_instance == null) {
49
            self::$_instance = new DeviceMapper($adapter);
50
        }
51
        return self::$_instance;
52
    }
53
 
54
 
55
    /**
56
     *
57
     * @param string $id
58
     * @return Device
59
     */
60
    public function fetchOne($id)
61
    {
62
        $select = $this->sql->select(self::_TABLE);
63
        $select->where->equalTo('id', $id);
64
        $select->limit(1);
65
 
66
        $prototype = new Device();
67
        return $this->executeFetchOneObject($select, $prototype);
68
    }
69
 
70
    /**
71
     *
72
     * @param string $search
73
     * @param int $page
74
     * @param int $records_per_page
75
     * @param string $order_field
76
     * @param string $order_direction
77
     * @return Paginator
78
     */
79
    public function fetchAllDataTable($search, $page = 1, $records_per_page = 10, $order_field= 'user', $order_direction = 'ASC')
80
    {
81
        $prototype = new Device();
82
        $select = $this->sql->select();
83
        $select->from(['d' => self::_TABLE]);
84
        $select->columns(['device_id' => 'id', 'device', 'model','product', 'osversion', 'token', 'updated_on']);
85
 
86
        if($search) {
87
            //$select->where->like('user', '%' . $search . '%')->or->like('email', '%' . $search . '%');
88
        }
89
        $select->order($order_field . ' ' . $order_direction);
90
 
91
      // echo $select->getSqlString($this->adapter->platform); exit;
92
 
93
        $hydrator   = new ObjectPropertyHydrator();
94
        $resultset  = new HydratingResultSet($hydrator, $prototype);
95
 
96
        $adapter = new DbSelect($select, $this->sql, $resultset);
97
        $paginator = new Paginator($adapter);
98
        $paginator->setItemCountPerPage($records_per_page);
99
        $paginator->setCurrentPageNumber($page);
100
 
101
 
102
        return $paginator;
103
    }
104
 
105
 
106
    /**
107
     *
108
     * @param int $company_id
109
     * @param string $search
110
     * @param int $page
111
     * @param int $records_per_page
112
     * @param string $order_field
113
     * @param string $order_direction
114
     * @return Paginator
115
     */
116
    public function fetchAllDataTableMicrolearningByCompanyId($company_id, $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
117
    {
118
 
119
        $select = $this->sql->select();
120
        $select->columns(['manufacturer', 'brand', 'version', 'model', 'added_on', 'updated_on']);
121
        $select->from(['d' => DeviceMapper::_TABLE]);
122
        $select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.user_id = d.user_id', []);
123
        $select->join(['u' => UserMapper::_TABLE], 'u.id = cu.user_id', ['first_name', 'last_name', 'email']);
124
        $select->where->equalTo('company_id', $company_id);
125
 
126
        if($search) {
127
            $select->where->like('u.first_name', '%' . $search . '%')->or->like('u.last_name', '%' . $search . '%')->or->like('u.email', '%' . $search . '%');
128
        }
129
 
130
        $select->order($order_field . ' ' . $order_direction);
131
 
132
        //echo $select->getSqlString($this->adapter->platform); exit;
133
 
134
        $hydrator   = new ArraySerializableHydrator();
135
        $resultset  = new HydratingResultSet($hydrator);
136
 
137
        $adapter = new DbSelect($select, $this->sql, $resultset);
138
        $paginator = new Paginator($adapter);
139
        $paginator->setItemCountPerPage($records_per_page);
140
        $paginator->setCurrentPageNumber($page);
141
 
142
 
143
        return $paginator;
144
    }
145
 
146
    /**
147
     *
148
     * @param int $user_id
149
     * @return Device[]
150
     */
151
    public function fetchAllByUserId($user_id)
152
    {
153
        $prototype = new Device();
154
        $select = $this->sql->select(self::_TABLE);
155
        $select->where->equalTo('user_id', $user_id);
156
 
157
        return $this->executeFetchAllObject($select, $prototype);
158
    }
159
 
160
    /**
2503 efrain 161
     *
162
     * @param Device $device
163
     * @return boolean
164
     */
165
    public function releaseUserFormDevice($device)
166
    {
167
 
168
 
169
        $update = $this->sql->update(self::_TABLE);
170
        $update->set([
2581 efrain 171
            'user_id' => new Expression('null'),
2503 efrain 172
        ]);
173
        $update->where->equalTo('id', $device->id);
174
 
175
        return $this->executeUpdate($update);
176
    }
177
 
178
    /**
1 www 179
     *
2503 efrain 180
     * @param int $user_id
181
     * @return Device[]
182
     */
183
    public function fetchAllByUserIdAndApplicationId($user_id, $application_id)
184
    {
185
        $prototype = new Device();
186
        $select = $this->sql->select(self::_TABLE);
187
        $select->where->equalTo('user_id', $user_id);
188
        $select->where->equalTo('application_id', $application_id);
189
 
190
        return $this->executeFetchAllObject($select, $prototype);
191
    }
192
 
193
    /**
194
     *
1 www 195
     * @param Device $device
196
     * @return boolean
197
     */
198
    public function insert($device)
199
    {
200
        $hydrator = new ObjectPropertyHydrator();
201
        $values = $hydrator->extract($device);
202
        $values = $this->removeEmpty($values);
203
 
204
        $insert = $this->sql->insert(self::_TABLE);
205
        $insert->values($values);
206
 
207
        //echo $insert->getSqlString($this->adapter->platform); exit;
208
 
209
 
210
        return $this->executeInsert($insert);
211
 
212
    }
213
 
214
    /**
215
     *
216
     * @param Device $device
217
     * @return boolean
218
     */
219
    public function update($device)
220
    {
221
        $hydrator = new ObjectPropertyHydrator();
222
        $values = $hydrator->extract($device);
223
        $values = $this->removeEmpty($values);
224
 
225
        $update = $this->sql->update(self::_TABLE);
226
        $update->set($values);
227
        $update->where->equalTo('id', $device->id);
228
 
229
        return $this->executeUpdate($update);
230
    }
231
 
232
    /**
233
     *
234
     * @param Device $device
235
     * @return boolean
236
     */
237
    public function delete($device)
238
    {
239
        $delete = $this->sql->delete(self::_TABLE);
240
        $delete->where->equalTo('id', $device->id);
241
 
242
        return $this->executeDelete($delete);
243
 
244
    }
245
 
246
    /**
247
     *
248
     * @param Device $device
249
     * @return boolean
250
     */
251
    public function signout($device)
252
    {
253
        $values = [
1323 efrain 254
            'user_id'   => null,
1 www 255
            'password'  => '',
256
        ];
257
 
258
        $update = $this->sql->update(self::_TABLE);
259
        $update->set($values);
260
        $update->where->equalTo('id', $device->id);
261
 
262
        return $this->executeUpdate($update);
263
    }
264
 
265
 
266
    /**
267
     *
268
     * @return boolean
269
     */
270
    public function truncate()
271
    {
272
        $sql = 'DELETE FROM ' . self::_TABLE;
273
        if($this->executeSentenceWithParameters($sql)) {
274
            $sql = 'ALTER TABLE ' . self::_TABLE . ' AUTO_INCREMENT = 1 ';
275
            return $this->executeSentenceWithParameters($sql);
276
        }
277
        return false;
278
    }
279
 
280
 
281
 
282
 
283
}