Passed
Push — master ( 3660fa...998d5d )
by Marcel
03:22
created

DatasetMapper   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 219
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 106
c 2
b 0
f 0
dl 0
loc 219
rs 10
wmc 12

10 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 12 1
A createDataset() 0 19 1
A updateDatasetOptions() 0 11 1
A updateDataset() 0 21 1
A deleteDataset() 0 8 1
A getDatasets() 0 15 1
A truncate() 0 3 2
A search() 0 14 1
A getDatasetOptions() 0 13 1
A read() 0 15 2
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 2020 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
     * create dataset
42
     * @return int
43
     */
44
    public function createDataset()
45
    {
46
        $sql = $this->db->getQueryBuilder();
47
        $sql->insert(self::TABLE_NAME)
48
            ->values([
49
                'user_id' => $sql->createNamedParameter($this->userId),
50
                'name' => $sql->createNamedParameter($this->l10n->t('New')),
51
                'type' => $sql->createNamedParameter(2),
52
                'parent' => $sql->createNamedParameter(0),
53
                'dimension1' => $sql->createNamedParameter($this->l10n->t('Object')),
54
                'dimension2' => $sql->createNamedParameter($this->l10n->t('Date')),
55
                //'dimension3' => $sql->createNamedParameter($this->l10n->t('Value')),
56
                //'dimension4' => $sql->createNamedParameter($this->l10n->t('Value')),
57
                //'timestamp' => $sql->createNamedParameter($this->l10n->t('Date')),
58
                //'unit' => $sql->createNamedParameter($this->l10n->t('Value')),
59
                'value' => $sql->createNamedParameter($this->l10n->t('Value')),
60
            ]);
61
        $sql->execute();
62
        return (int)$this->db->lastInsertId(self::TABLE_NAME);
63
    }
64
65
    /**
66
     * update dataset
67
     * @param $id
68
     * @param $name
69
     * @param $subheader
70
     * @param $parent
71
     * @param $type
72
     * @param $link
73
     * @param $visualization
74
     * @param $chart
75
     * @param $chartoptions
76
     * @param $dataoptions
77
     * @param $dimension1
78
     * @param $dimension2
79
     * @param $value
80
     * @return bool
81
     */
82
    public function updateDataset($id, $name, $subheader, $parent, $type, $link, $visualization, $chart, $chartoptions, $dataoptions, $dimension1, $dimension2, $value)
83
    {
84
        $name = $this->truncate($name, 64);
85
        $sql = $this->db->getQueryBuilder();
86
        $sql->update(self::TABLE_NAME)
87
            ->set('name', $sql->createNamedParameter($name))
88
            ->set('subheader', $sql->createNamedParameter($subheader))
89
            ->set('type', $sql->createNamedParameter($type))
90
            ->set('link', $sql->createNamedParameter($link))
91
            ->set('visualization', $sql->createNamedParameter($visualization))
92
            ->set('chart', $sql->createNamedParameter($chart))
93
            ->set('chartoptions', $sql->createNamedParameter($chartoptions))
94
            ->set('dataoptions', $sql->createNamedParameter($dataoptions))
95
            ->set('parent', $sql->createNamedParameter($parent))
96
            ->set('dimension1', $sql->createNamedParameter($dimension1))
97
            ->set('dimension2', $sql->createNamedParameter($dimension2))
98
            ->set('value', $sql->createNamedParameter($value))
99
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
100
            ->andWhere($sql->expr()->eq('id', $sql->createNamedParameter($id)));
101
        $sql->execute();
102
        return true;
103
    }
104
105
    /**
106
     * update dataset
107
     * @param $id
108
     * @param $chartoptions
109
     * @param $dataoptions
110
     * @param $filteroptions
111
     * @return bool
112
     */
113
    public function updateDatasetOptions($id, $chartoptions, $dataoptions, $filteroptions)
114
    {
115
        $sql = $this->db->getQueryBuilder();
116
        $sql->update(self::TABLE_NAME)
117
            ->set('chartoptions', $sql->createNamedParameter($chartoptions))
118
            ->set('dataoptions', $sql->createNamedParameter($dataoptions))
119
            ->set('filteroptions', $sql->createNamedParameter($filteroptions))
120
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
121
            ->andWhere($sql->expr()->eq('id', $sql->createNamedParameter($id)));
122
        $sql->execute();
123
        return true;
124
    }
125
126
    /**
127
     * delete dataset
128
     * @param $id
129
     * @return bool
130
     */
131
    public function deleteDataset($id)
132
    {
133
        $sql = $this->db->getQueryBuilder();
134
        $sql->delete(self::TABLE_NAME)
135
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
136
            ->andWhere($sql->expr()->eq('id', $sql->createNamedParameter($id)));
137
        $sql->execute();
138
        return true;
139
    }
140
141
    /**
142
     * get datasets
143
     * @return array
144
     */
145
    public function getDatasets()
146
    {
147
        $sql = $this->db->getQueryBuilder();
148
        $sql->from(self::TABLE_NAME)
149
            ->select('id')
150
            ->addSelect('name')
151
            ->addSelect('type')
152
            ->addSelect('parent')
153
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
154
            ->orderBy('parent', 'ASC')
155
            ->addOrderBy('name', 'ASC');
156
        $statement = $sql->execute();
157
        $result = $statement->fetchAll();
158
        $statement->closeCursor();
159
        return $result;
160
    }
161
162
    /**
163
     * search datasets by searchstring
164
     * @param $searchString
165
     * @return array
166
     */
167
    public function search($searchString)
168
    {
169
        $sql = $this->db->getQueryBuilder();
170
        $sql->from(self::TABLE_NAME)
171
            ->select('id')
172
            ->addSelect('name')
173
            ->addSelect('type')
174
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
175
            ->andWhere($sql->expr()->iLike('name', $sql->createNamedParameter('%' . $this->db->escapeLikeParameter($searchString) . '%')))
176
            ->orderBy('name', 'ASC');
177
        $statement = $sql->execute();
178
        $result = $statement->fetchAll();
179
        $statement->closeCursor();
180
        return $result;
181
    }
182
183
    /**
184
     * get datasets
185
     * @param int $id
186
     * @param string|null $user_id
187
     * @return array
188
     */
189
    public function read(int $id, string $user_id = null)
190
    {
191
        if ($user_id) $this->userId = $user_id;
192
193
        $sql = $this->db->getQueryBuilder();
194
        $sql->from(self::TABLE_NAME)
195
            ->select('*')
196
            ->where($sql->expr()->eq('id', $sql->createNamedParameter($id)))
197
            ->andWhere($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
198
            ->orderBy('parent', 'ASC')
199
            ->addOrderBy('name', 'ASC');
200
        $statement = $sql->execute();
201
        $result = $statement->fetch();
202
        $statement->closeCursor();
203
        return $result;
204
    }
205
206
    /**
207
     * get datasets
208
     * @param $id
209
     * @return array
210
     */
211
    public function getDatasetOptions($id)
212
    {
213
        $sql = $this->db->getQueryBuilder();
214
        $sql->from(self::TABLE_NAME)
215
            ->select('name')
216
            ->addSelect('visualization')
217
            ->addSelect('chart')
218
            ->addSelect('user_id')
219
            ->where($sql->expr()->eq('id', $sql->createNamedParameter($id)));
220
        $statement = $sql->execute();
221
        $result = $statement->fetch();
222
        $statement->closeCursor();
223
        return $result;
224
    }
225
226
    /**
227
     * truncates fiels do DB-field size
228
     *
229
     * @param $string
230
     * @param $length
231
     * @param $dots
232
     * @return string
233
     */
234
    private function truncate($string, $length, $dots = "...")
235
    {
236
        return (strlen($string) > $length) ? mb_strcut($string, 0, $length - strlen($dots)) . $dots : $string;
237
    }
238
}