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

DatasetMapper::updateDataset()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 21
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 1
eloc 19
nc 1
nop 13
dl 0
loc 21
rs 9.6333
c 2
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

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
}