Passed
Push — master ( 71a7b3...caa7e7 )
by Marcel
06:56
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
            ]);
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
}