Passed
Push — master ( edd22d...b6b87b )
by Marcel
03:18
created

DatasetMapper::delete()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 6
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 8
rs 10
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 2021 Marcel Scherello
10
 */
11
12
namespace OCA\Analytics\Db;
13
14
use OCP\IDBConnection;
15
use OCP\IL10N;
16
use OCP\ILogger;
17
18
class DatasetMapper
19
{
20
    private $userId;
21
    private $l10n;
22
    private $db;
23
    private $logger;
24
    const TABLE_NAME = 'analytics_dataset';
25
26
    public function __construct(
27
        $userId,
28
        IL10N $l10n,
29
        IDBConnection $db,
30
        ILogger $logger
31
    )
32
    {
33
        $this->userId = $userId;
34
        $this->l10n = $l10n;
35
        $this->db = $db;
36
        $this->logger = $logger;
37
        self::TABLE_NAME;
38
    }
39
40
    /**
41
     * get datasets
42
     * @return array
43
     */
44
    public function index()
45
    {
46
        $sql = $this->db->getQueryBuilder();
47
        $sql->from(self::TABLE_NAME)
48
            ->select('id')
49
            ->addSelect('name')
50
            ->addSelect('type')
51
            ->addSelect('parent')
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
     * create dataset
63
     * @return int
64
     */
65
    public function create()
66
    {
67
        $sql = $this->db->getQueryBuilder();
68
        $sql->insert(self::TABLE_NAME)
69
            ->values([
70
                'user_id' => $sql->createNamedParameter($this->userId),
71
                'name' => $sql->createNamedParameter($this->l10n->t('New')),
72
                'type' => $sql->createNamedParameter(2),
73
                'parent' => $sql->createNamedParameter(0),
74
                'dimension1' => $sql->createNamedParameter($this->l10n->t('Object')),
75
                'dimension2' => $sql->createNamedParameter($this->l10n->t('Date')),
76
                //'dimension3' => $sql->createNamedParameter($this->l10n->t('Value')),
77
                //'dimension4' => $sql->createNamedParameter($this->l10n->t('Value')),
78
                //'timestamp' => $sql->createNamedParameter($this->l10n->t('Date')),
79
                //'unit' => $sql->createNamedParameter($this->l10n->t('Value')),
80
                'value' => $sql->createNamedParameter($this->l10n->t('Value')),
81
            ]);
82
        $sql->execute();
83
        return (int)$this->db->lastInsertId(self::TABLE_NAME);
84
    }
85
86
    /**
87
     * get single dataset
88
     * @param int $id
89
     * @param string|null $user_id
90
     * @return array
91
     */
92
    public function read(int $id, string $user_id = null)
93
    {
94
        if ($user_id) $this->userId = $user_id;
95
96
        $sql = $this->db->getQueryBuilder();
97
        $sql->from(self::TABLE_NAME)
98
            ->select('*')
99
            ->where($sql->expr()->eq('id', $sql->createNamedParameter($id)))
100
            ->andWhere($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
101
            ->orderBy('parent', 'ASC')
102
            ->addOrderBy('name', 'ASC');
103
        $statement = $sql->execute();
104
        $result = $statement->fetch();
105
        $statement->closeCursor();
106
        return $result;
107
    }
108
109
    /**
110
     * update dataset
111
     * @param $id
112
     * @param $name
113
     * @param $subheader
114
     * @param $parent
115
     * @param $type
116
     * @param $link
117
     * @param $visualization
118
     * @param $chart
119
     * @param $chartoptions
120
     * @param $dataoptions
121
     * @param $dimension1
122
     * @param $dimension2
123
     * @param $value
124
     * @param $filteroptions
125
     * @return bool
126
     */
127
    public function update($id, $name, $subheader, $parent, $type, $link, $visualization, $chart, $chartoptions, $dataoptions, $dimension1, $dimension2, $value, $filteroptions = null)
128
    {
129
        $name = $this->truncate($name, 64);
130
        $sql = $this->db->getQueryBuilder();
131
        $sql->update(self::TABLE_NAME)
132
            ->set('name', $sql->createNamedParameter($name))
133
            ->set('subheader', $sql->createNamedParameter($subheader))
134
            ->set('type', $sql->createNamedParameter($type))
135
            ->set('link', $sql->createNamedParameter($link))
136
            ->set('visualization', $sql->createNamedParameter($visualization))
137
            ->set('chart', $sql->createNamedParameter($chart))
138
            ->set('chartoptions', $sql->createNamedParameter($chartoptions))
139
            ->set('dataoptions', $sql->createNamedParameter($dataoptions))
140
            ->set('parent', $sql->createNamedParameter($parent))
141
            ->set('dimension1', $sql->createNamedParameter($dimension1))
142
            ->set('dimension2', $sql->createNamedParameter($dimension2))
143
            ->set('value', $sql->createNamedParameter($value))
144
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
145
            ->andWhere($sql->expr()->eq('id', $sql->createNamedParameter($id)));
146
        if ($filteroptions !== null) $sql->set('filteroptions', $sql->createNamedParameter($filteroptions));
147
        $sql->execute();
148
        return true;
149
    }
150
151
    /**
152
     * update dataset options
153
     * @param $id
154
     * @param $chartoptions
155
     * @param $dataoptions
156
     * @param $filteroptions
157
     * @return bool
158
     */
159
    public function updateOptions($id, $chartoptions, $dataoptions, $filteroptions)
160
    {
161
        $sql = $this->db->getQueryBuilder();
162
        $sql->update(self::TABLE_NAME)
163
            ->set('chartoptions', $sql->createNamedParameter($chartoptions))
164
            ->set('dataoptions', $sql->createNamedParameter($dataoptions))
165
            ->set('filteroptions', $sql->createNamedParameter($filteroptions))
166
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
167
            ->andWhere($sql->expr()->eq('id', $sql->createNamedParameter($id)));
168
        $sql->execute();
169
        return true;
170
    }
171
172
    /**
173
     * read dataset options
174
     * @param $id
175
     * @return array
176
     */
177
    public function readOptions($id)
178
    {
179
        $sql = $this->db->getQueryBuilder();
180
        $sql->from(self::TABLE_NAME)
181
            ->select('name')
182
            ->addSelect('visualization')
183
            ->addSelect('chart')
184
            ->addSelect('user_id')
185
            ->where($sql->expr()->eq('id', $sql->createNamedParameter($id)));
186
        $statement = $sql->execute();
187
        $result = $statement->fetch();
188
        $statement->closeCursor();
189
        return $result;
190
    }
191
192
    /**
193
     * delete dataset
194
     * @param $id
195
     * @return bool
196
     */
197
    public function delete($id)
198
    {
199
        $sql = $this->db->getQueryBuilder();
200
        $sql->delete(self::TABLE_NAME)
201
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
202
            ->andWhere($sql->expr()->eq('id', $sql->createNamedParameter($id)));
203
        $sql->execute();
204
        return true;
205
    }
206
207
    /**
208
     * search datasets by searchstring
209
     * @param $searchString
210
     * @return array
211
     */
212
    public function search($searchString)
213
    {
214
        $sql = $this->db->getQueryBuilder();
215
        $sql->from(self::TABLE_NAME)
216
            ->select('id')
217
            ->addSelect('name')
218
            ->addSelect('type')
219
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
220
            ->andWhere($sql->expr()->iLike('name', $sql->createNamedParameter('%' . $this->db->escapeLikeParameter($searchString) . '%')))
221
            ->orderBy('name', 'ASC');
222
        $statement = $sql->execute();
223
        $result = $statement->fetchAll();
224
        $statement->closeCursor();
225
        return $result;
226
    }
227
228
    /**
229
     * truncates fiels do DB-field size
230
     *
231
     * @param $string
232
     * @param $length
233
     * @param $dots
234
     * @return string
235
     */
236
    private function truncate($string, $length, $dots = "...")
237
    {
238
        return (strlen($string) > $length) ? mb_strcut($string, 0, $length - strlen($dots)) . $dots : $string;
239
    }
240
}