Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 1323 | Ir a la última revisión | | 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
    /**
161
     *
162
     * @param Device $device
163
     * @return boolean
164
     */
165
    public function insert($device)
166
    {
167
        $hydrator = new ObjectPropertyHydrator();
168
        $values = $hydrator->extract($device);
169
        $values = $this->removeEmpty($values);
170
 
171
        $insert = $this->sql->insert(self::_TABLE);
172
        $insert->values($values);
173
 
174
        //echo $insert->getSqlString($this->adapter->platform); exit;
175
 
176
 
177
        return $this->executeInsert($insert);
178
 
179
    }
180
 
181
    /**
182
     *
183
     * @param Device $device
184
     * @return boolean
185
     */
186
    public function update($device)
187
    {
188
        $hydrator = new ObjectPropertyHydrator();
189
        $values = $hydrator->extract($device);
190
        $values = $this->removeEmpty($values);
191
 
192
        $update = $this->sql->update(self::_TABLE);
193
        $update->set($values);
194
        $update->where->equalTo('id', $device->id);
195
 
196
        return $this->executeUpdate($update);
197
    }
198
 
199
    /**
200
     *
201
     * @param Device $device
202
     * @return boolean
203
     */
204
    public function delete($device)
205
    {
206
        $delete = $this->sql->delete(self::_TABLE);
207
        $delete->where->equalTo('id', $device->id);
208
 
209
        return $this->executeDelete($delete);
210
 
211
    }
212
 
213
    /**
214
     *
215
     * @param Device $device
216
     * @return boolean
217
     */
218
    public function signout($device)
219
    {
220
        $values = [
221
            'user_id'   => 'null',
222
            'password'  => '',
223
        ];
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
     *
235
     * @return boolean
236
     */
237
    public function truncate()
238
    {
239
        $sql = 'DELETE FROM ' . self::_TABLE;
240
        if($this->executeSentenceWithParameters($sql)) {
241
            $sql = 'ALTER TABLE ' . self::_TABLE . ' AUTO_INCREMENT = 1 ';
242
            return $this->executeSentenceWithParameters($sql);
243
        }
244
        return false;
245
    }
246
 
247
 
248
 
249
 
250
}