Passed
Push — devel-3.0 ( ca620b...2581df )
by Rubén
03:02
created

TrackRepository::delete()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 1
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * sysPass
4
 *
5
 * @author    nuxsmin
6
 * @link      https://syspass.org
7
 * @copyright 2012-2018, Rubén Domínguez nuxsmin@$syspass.org
8
 *
9
 * This file is part of sysPass.
10
 *
11
 * sysPass is free software: you can redistribute it and/or modify
12
 * it under the terms of the GNU General Public License as published by
13
 * the Free Software Foundation, either version 3 of the License, or
14
 * (at your option) any later version.
15
 *
16
 * sysPass is distributed in the hope that it will be useful,
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
 * GNU General Public License for more details.
20
 *
21
 * You should have received a copy of the GNU General Public License
22
 *  along with sysPass.  If not, see <http://www.gnu.org/licenses/>.
23
 */
24
25
namespace SP\Repositories\Track;
26
27
use SP\Core\Exceptions\ConstraintException;
28
use SP\Core\Exceptions\QueryException;
29
use SP\DataModel\ItemSearchData;
30
use SP\DataModel\TrackData;
31
use SP\Repositories\Repository;
32
use SP\Services\Track\TrackService;
33
use SP\Storage\Database\QueryData;
34
use SP\Storage\Database\QueryResult;
35
36
/**
37
 * Class TrackRepository
38
 *
39
 * @package SP\Repositories\Track
40
 */
41
final class TrackRepository extends Repository
42
{
43
    /**
44
     * @param TrackRequest $trackRequest
45
     *
46
     * @return int
47
     * @throws \SP\Core\Exceptions\ConstraintException
48
     * @throws \SP\Core\Exceptions\QueryException
49
     */
50
    public function add(TrackRequest $trackRequest)
51
    {
52
        $query = /** @lang SQL */
53
            'INSERT INTO Track SET 
54
            userId = ?, 
55
            `source` = ?, 
56
            `time` = UNIX_TIMESTAMP(),
57
            ipv4 = ?,
58
            ipv6 = ?';
59
60
        $queryData = new QueryData();
61
        $queryData->setQuery($query);
62
        $queryData->setParams([
63
            $trackRequest->userId,
64
            $trackRequest->source,
65
            $trackRequest->getIpv4(),
66
            $trackRequest->getIpv6()
67
        ]);
68
        $queryData->setOnErrorMessage(__u('Error al crear track'));
69
70
        return $this->db->doQuery($queryData)->getLastId();
71
    }
72
73
    /**
74
     * @param $id int
75
     *
76
     * @return int
77
     * @throws \SP\Core\Exceptions\QueryException
78
     * @throws \SP\Core\Exceptions\ConstraintException
79
     */
80
    public function delete($id)
81
    {
82
        $queryData = new QueryData();
83
        $queryData->setQuery('DELETE FROM Track WHERE id = ? LIMIT 1');
84
        $queryData->addParam($id);
85
        $queryData->setOnErrorMessage(__u('Error al eliminar track'));
86
87
        return $this->db->doQuery($queryData)->getAffectedNumRows();
88
    }
89
90
    /**
91
     * @param $id int
92
     *
93
     * @return int
94
     * @throws \SP\Core\Exceptions\QueryException
95
     * @throws \SP\Core\Exceptions\ConstraintException
96
     */
97
    public function unlock($id)
98
    {
99
        $queryData = new QueryData();
100
        $queryData->setQuery('UPDATE Track SET timeUnlock = UNIX_TIMESTAMP() WHERE id = ?');
101
        $queryData->addParam($id);
102
        $queryData->setOnErrorMessage(__u('Error al actualizar track'));
103
104
        return $this->db->doQuery($queryData)->getAffectedNumRows();
105
    }
106
107
    /**
108
     * Clears tracks
109
     *
110
     * @return bool con el resultado
111
     * @throws QueryException
112
     * @throws ConstraintException
113
     */
114
    public function clear()
115
    {
116
        $queryData = new QueryData();
117
        $queryData->setQuery('TRUNCATE TABLE Track');
118
        $queryData->setOnErrorMessage(__u('Error al vaciar tracks'));
119
120
        return $this->db->doQuery($queryData)->getAffectedNumRows() > 0;
121
    }
122
123
    /**
124
     * @param $id int
125
     *
126
     * @return \SP\Storage\Database\QueryResult
127
     * @throws \SP\Core\Exceptions\ConstraintException
128
     * @throws \SP\Core\Exceptions\QueryException
129
     */
130
    public function getById($id)
131
    {
132
        $query = /** @lang SQL */
133
            'SELECT id, 
134
            userId, 
135
            `source`, 
136
            `time`,
137
            ipv4,
138
            ipv6 
139
            FROM Track 
140
            WHERE id = ? LIMIT 1';
141
142
        $queryData = new QueryData();
143
        $queryData->setMapClassName(TrackData::class);
144
        $queryData->setQuery($query);
145
        $queryData->addParam($id);
146
        $queryData->setOnErrorMessage(__u('Error al obtener track'));
147
148
        return $this->db->doSelect($queryData);
149
    }
150
151
    /**
152
     * @return \SP\Storage\Database\QueryResult
153
     * @throws \SP\Core\Exceptions\ConstraintException
154
     * @throws \SP\Core\Exceptions\QueryException
155
     */
156
    public function getAll()
157
    {
158
        $query = /** @lang SQL */
159
            'SELECT id, 
160
            userId, 
161
            `source`, 
162
            `time`,
163
            ipv4,
164
            ipv6 FROM Track';
165
166
        $queryData = new QueryData();
167
        $queryData->setMapClassName(TrackData::class);
168
        $queryData->setQuery($query);
169
        $queryData->setOnErrorMessage(__u('Error al obtener tracks'));
170
171
        return $this->db->doSelect($queryData);
172
    }
173
174
    /**
175
     * Devuelve los tracks de un cliente desde un tiempo y origen determinados
176
     *
177
     * @param TrackRequest $trackRequest
178
     *
179
     * @return \SP\Storage\Database\QueryResult
180
     * @throws \SP\Core\Exceptions\ConstraintException
181
     * @throws \SP\Core\Exceptions\QueryException
182
     */
183
    public function getTracksForClientFromTime(TrackRequest $trackRequest)
184
    {
185
        $query = /** @lang SQL */
186
            'SELECT id, userId 
187
            FROM Track 
188
            WHERE `time` >= ? 
189
            AND (ipv4 = ? OR ipv6 = ?) 
190
            AND `source` = ?
191
            AND timeUnlock IS NULL';
192
193
        $queryData = new QueryData();
194
        $queryData->setMapClassName(TrackData::class);
195
        $queryData->setQuery($query);
196
        $queryData->setParams([
197
            (int)$trackRequest->time,
198
            $trackRequest->getIpv4(),
199
            $trackRequest->getIpv6(),
200
            $trackRequest->source
201
        ]);
202
        $queryData->setOnErrorMessage(__u('Error al obtener tracks'));
203
204
        return $this->db->doSelect($queryData);
205
    }
206
207
    /**
208
     * Searches for items by a given filter
209
     *
210
     * @param ItemSearchData $itemSearchData
211
     *
212
     * @return QueryResult
213
     * @throws ConstraintException
214
     * @throws QueryException
215
     */
216
    public function search(ItemSearchData $itemSearchData)
217
    {
218
        $queryData = new QueryData();
219
        $queryData->setSelect('
220
        id, 
221
        userId, 
222
        source, 
223
        time, 
224
        timeUnlock, 
225
        FROM_UNIXTIME(time) as dateTime, 
226
        FROM_UNIXTIME(timeUnlock) as dateTimeUnlock, 
227
        ipv4, 
228
        ipv6, 
229
        IF(`time` >= ? AND `timeUnlock` IS NULL, 1, 0) AS tracked
230
        ');
231
        $queryData->addParam(time() - TrackService::TIME_TRACKING);
232
233
        $queryData->setFrom('Track');
234
        $queryData->setOrder('time DESC');
235
236
        if (!empty($itemSearchData->getSeachString())) {
237
            $queryData->setWhere('source LIKE ?');
238
239
            $search = '%' . $itemSearchData->getSeachString() . '%';
240
            $queryData->addParam($search);
241
        }
242
243
        $queryData->setLimit('?,?');
244
        $queryData->addParam($itemSearchData->getLimitStart());
245
        $queryData->addParam($itemSearchData->getLimitCount());
246
247
        return $this->db->doSelect($queryData, true);
248
    }
249
}