Passed
Push — master ( 71a7b3...caa7e7 )
by Marcel
06:56
created

DatasetMapper   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 202
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 93
dl 0
loc 202
rs 10
c 2
b 0
f 0
wmc 11

9 Methods

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