Passed
Push — master ( cb24fc...339795 )
by Marcel
04:00 queued 12s
created

ReportMapper::updateOptions()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 9
c 1
b 0
f 0
nc 1
nop 4
dl 0
loc 11
rs 9.9666
1
<?php
2
/**
3
 * Analytics
4
 *
5
 * This file is licensed under the Affero General Public License version 3 or
6
 * later. See the LICENSE.md file.
7
 *
8
 * @author Marcel Scherello <[email protected]>
9
 * @copyright 2019-2022 Marcel Scherello
10
 */
11
12
namespace OCA\Analytics\Db;
13
14
use OCP\IDBConnection;
15
use OCP\IL10N;
16
use Psr\Log\LoggerInterface;
17
18
class ReportMapper
19
{
20
    private $userId;
21
    private $l10n;
22
    private $db;
23
    private $logger;
24
    const TABLE_NAME = 'analytics_report';
25
26
    public function __construct(
27
        $userId,
28
        IL10N $l10n,
29
        IDBConnection $db,
30
        LoggerInterface $logger
31
    )
32
    {
33
        $this->userId = $userId;
34
        $this->l10n = $l10n;
35
        $this->db = $db;
36
        $this->logger = $logger;
37
    }
38
39
    /**
40
     * get reports
41
     * @return array
42
     */
43
    public function index()
44
    {
45
        $sql = $this->db->getQueryBuilder();
46
        $sql->from(self::TABLE_NAME)
47
            ->select('id')
48
            ->addSelect('name')
49
            ->addSelect('type')
50
            ->addSelect('parent')
51
            ->addSelect('dataset')
52
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
53
            ->orderBy('parent', 'ASC')
54
            ->addOrderBy('name', 'ASC');
55
        $statement = $sql->execute();
56
        $result = $statement->fetchAll();
57
        $statement->closeCursor();
58
        return $result;
59
    }
60
61
    /**
62
     * get reports for user
63
     * @param $userId
64
     * @return array
65
     */
66
    public function indexByUser($userId)
67
    {
68
        $sql = $this->db->getQueryBuilder();
69
        $sql->from(self::TABLE_NAME)
70
            ->select('id')
71
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($userId)));
72
        $statement = $sql->execute();
73
        $result = $statement->fetchAll();
74
        $statement->closeCursor();
75
        return $result;
76
    }
77
78
    /**
79
     * create report
80
     * @param $name
81
     * @param $subheader
82
     * @param $parent
83
     * @param $type
84
     * @param $dataset
85
     * @param $link
86
     * @param $visualization
87
     * @param $chart
88
     * @param $dimension1
89
     * @param $dimension2
90
     * @param $value
91
     * @return int
92
     * @throws \OCP\DB\Exception
93
     */
94
    public function create($name, $subheader, $parent, $type, $dataset, $link, $visualization, $chart, $dimension1, $dimension2, $value)
95
    {
96
        $sql = $this->db->getQueryBuilder();
97
        $sql->insert(self::TABLE_NAME)
98
            ->values([
99
                'user_id' => $sql->createNamedParameter($this->userId),
100
                'dataset' => $sql->createNamedParameter($dataset),
101
                'name' => $sql->createNamedParameter($name),
102
                'subheader' => $sql->createNamedParameter($subheader),
103
                'link' => $sql->createNamedParameter($link),
104
                'type' => $sql->createNamedParameter($type),
105
                'parent' => $sql->createNamedParameter($parent),
106
                'dimension1' => $sql->createNamedParameter($dimension1),
107
                'dimension2' => $sql->createNamedParameter($dimension2),
108
                //'dimension3' => $sql->createNamedParameter($this->l10n->t('Value')),
109
                //'dimension4' => $sql->createNamedParameter($this->l10n->t('Value')),
110
                //'timestamp' => $sql->createNamedParameter($this->l10n->t('Date')),
111
                //'unit' => $sql->createNamedParameter($this->l10n->t('Value')),
112
                'value' => $sql->createNamedParameter($value),
113
                'chart' => $sql->createNamedParameter($chart),
114
                'visualization' => $sql->createNamedParameter($visualization),
115
            ]);
116
        $sql->execute();
117
        return (int)$sql->getLastInsertId();
118
    }
119
120
    /**
121
     * get single report
122
     * @param int $id
123
     * @return array
124
     */
125
    public function readOwn(int $id)
126
    {
127
        $sql = $this->db->getQueryBuilder();
128
        $sql->from(self::TABLE_NAME)
129
            ->select('*')
130
            ->where($sql->expr()->eq('id', $sql->createNamedParameter($id)))
131
            ->andWhere($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
132
            ->orderBy('parent', 'ASC')
133
            ->addOrderBy('name', 'ASC');
134
        $statement = $sql->execute();
135
        $result = $statement->fetch();
136
        $statement->closeCursor();
137
        return $result;
138
    }
139
140
    /**
141
     * update report
142
     * @param $id
143
     * @param $name
144
     * @param $subheader
145
     * @param $parent
146
     * @param $link
147
     * @param $visualization
148
     * @param $chart
149
     * @param $chartoptions
150
     * @param $dataoptions
151
     * @param $dimension1
152
     * @param $dimension2
153
     * @param $value
154
     * @param $filteroptions
155
     * @return bool
156
     */
157
    public function update($id, $name, $subheader, $parent, $link, $visualization, $chart, $chartoptions, $dataoptions, $dimension1, $dimension2, $value, $filteroptions = null)
158
    {
159
        $name = $this->truncate($name, 64);
160
        $sql = $this->db->getQueryBuilder();
161
        $sql->update(self::TABLE_NAME)
162
            ->set('name', $sql->createNamedParameter($name))
163
            ->set('subheader', $sql->createNamedParameter($subheader))
164
            ->set('link', $sql->createNamedParameter($link))
165
            ->set('visualization', $sql->createNamedParameter($visualization))
166
            ->set('chart', $sql->createNamedParameter($chart))
167
            ->set('chartoptions', $sql->createNamedParameter($chartoptions))
168
            ->set('dataoptions', $sql->createNamedParameter($dataoptions))
169
            ->set('parent', $sql->createNamedParameter($parent))
170
            ->set('dimension1', $sql->createNamedParameter($dimension1))
171
            ->set('dimension2', $sql->createNamedParameter($dimension2))
172
            ->set('value', $sql->createNamedParameter($value))
173
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
174
            ->andWhere($sql->expr()->eq('id', $sql->createNamedParameter($id)));
175
        if ($filteroptions !== null) $sql->set('filteroptions', $sql->createNamedParameter($filteroptions));
176
        $sql->execute();
177
        return true;
178
    }
179
180
    /**
181
     * update report options
182
     * @param $id
183
     * @param $chartoptions
184
     * @param $dataoptions
185
     * @param $filteroptions
186
     * @return bool
187
     */
188
    public function updateOptions($id, $chartoptions, $dataoptions, $filteroptions)
189
    {
190
        $sql = $this->db->getQueryBuilder();
191
        $sql->update(self::TABLE_NAME)
192
            ->set('chartoptions', $sql->createNamedParameter($chartoptions))
193
            ->set('dataoptions', $sql->createNamedParameter($dataoptions))
194
            ->set('filteroptions', $sql->createNamedParameter($filteroptions))
195
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
196
            ->andWhere($sql->expr()->eq('id', $sql->createNamedParameter($id)));
197
        $sql->execute();
198
        return true;
199
    }
200
201
    /**
202
     * update report refresh interval
203
     * @param $id
204
     * @param $chartoptions
205
     * @param $dataoptions
206
     * @param $filteroptions
207
     * @return bool
208
     */
209
    public function updateRefresh($id, $refresh)
210
    {
211
        $sql = $this->db->getQueryBuilder();
212
        $sql->update(self::TABLE_NAME)
213
            ->set('refresh', $sql->createNamedParameter($refresh))
214
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
215
            ->andWhere($sql->expr()->eq('id', $sql->createNamedParameter($id)));
216
        $sql->execute();
217
        return true;
218
    }
219
220
    /**
221
     * update report group assignment (from drag & drop)
222
     * @param $id
223
     * @param $groupId
224
     * @return bool
225
     * @throws \OCP\DB\Exception
226
     */
227
    public function updateGroup($id, $groupId)
228
    {
229
        $sql = $this->db->getQueryBuilder();
230
        $sql->update(self::TABLE_NAME)
231
            ->set('parent', $sql->createNamedParameter($groupId))
232
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
233
            ->andWhere($sql->expr()->eq('id', $sql->createNamedParameter($id)));
234
        $sql->execute();
235
        return true;
236
    }
237
238
    /**
239
     * read report options
240
     * @param $id
241
     * @return array
242
     */
243
    public function readOptions($id)
244
    {
245
        $sql = $this->db->getQueryBuilder();
246
        $sql->from(self::TABLE_NAME)
247
            ->select('name')
248
            ->addSelect('visualization')
249
            ->addSelect('chart')
250
            ->addSelect('user_id')
251
            ->where($sql->expr()->eq('id', $sql->createNamedParameter($id)));
252
        $statement = $sql->execute();
253
        $result = $statement->fetch();
254
        $statement->closeCursor();
255
        return $result;
256
    }
257
258
    /**
259
     * delete report
260
     * @param $id
261
     * @return bool
262
     */
263
    public function delete($id)
264
    {
265
        $sql = $this->db->getQueryBuilder();
266
        $sql->delete(self::TABLE_NAME)
267
            ->where($sql->expr()->eq('id', $sql->createNamedParameter($id)));
268
        $sql->execute();
269
        return true;
270
    }
271
272
    /**
273
     * search reports by searchstring
274
     * @param $searchString
275
     * @return array
276
     */
277
    public function search($searchString)
278
    {
279
        $sql = $this->db->getQueryBuilder();
280
        $sql->from(self::TABLE_NAME)
281
            ->select('id')
282
            ->addSelect('name')
283
            ->addSelect('type')
284
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
285
            ->andWhere($sql->expr()->iLike('name', $sql->createNamedParameter('%' . $this->db->escapeLikeParameter($searchString) . '%')))
286
            ->orderBy('name', 'ASC');
287
        $statement = $sql->execute();
288
        $result = $statement->fetchAll();
289
        $statement->closeCursor();
290
        return $result;
291
    }
292
293
    /**
294
     * get the report owner
295
     * @param $reportId
296
     * @return int
297
     */
298
    public function getOwner($reportId)
299
    {
300
        $sql = $this->db->getQueryBuilder();
301
        $sql->from(self::TABLE_NAME)
302
            ->select('user_id')
303
            ->where($sql->expr()->eq('id', $sql->createNamedParameter($reportId)));
304
        $result = (string)$sql->execute()->fetchOne();
305
        return $result;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $result returns the type string which is incompatible with the documented return type integer.
Loading history...
306
    }
307
308
    /**
309
     * reports for a dataset
310
     * @param $datasetId
311
     * @return array
312
     * @throws \OCP\DB\Exception
313
     */
314
    public function reportsForDataset($datasetId)
315
    {
316
        $sql = $this->db->getQueryBuilder();
317
        $sql->from(self::TABLE_NAME)
318
            ->select('id')
319
            ->addSelect('name')
320
            ->addSelect('user_id')
321
            ->where($sql->expr()->eq('dataset', $sql->createNamedParameter($datasetId)));
322
        $statement = $sql->execute();
323
        $result = $statement->fetchAll();
324
        $statement->closeCursor();
325
        return $result;
326
    }
327
328
    /**
329
     * truncates fiels do DB-field size
330
     *
331
     * @param $string
332
     * @param $length
333
     * @param $dots
334
     * @return string
335
     */
336
    private function truncate($string, $length, $dots = "...")
337
    {
338
        return (strlen($string) > $length) ? mb_strcut($string, 0, $length - strlen($dots)) . $dots : $string;
339
    }
340
}