Passed
Push — master ( 3334e1...093f01 )
by Marcel
02:14
created

DataloadMapper::getAllDataloadMetadata()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Data 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 2019 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 DataloadMapper
19
{
20
    private $userId;
21
    private $l10n;
22
    private $db;
23
    private $logger;
24
25
    public function __construct(
26
        $userId,
27
        IL10N $l10n,
28
        IDbConnection $db,
29
        ILogger $logger
30
    )
31
    {
32
        $this->userId = $userId;
33
        $this->l10n = $l10n;
34
        $this->db = $db;
35
        $this->logger = $logger;
36
    }
37
38
    /**
39
     * create a new dataload
40
     *
41
     * @NoAdminRequired
42
     * @param int $datasetId
43
     * @param int $datasourceId
44
     * @return integer
45
     */
46
    public function create(int $datasetId, int $datasourceId)
47
    {
48
        $SQL = 'INSERT INTO `*PREFIX*analytics_dataload` (`user_id`,`name`,`dataset`,`datasource`,`option`) VALUES(?,?,?,?,?)';
49
        $stmt = $this->db->prepare($SQL);
50
        $stmt->execute(array($this->userId, 'New', $datasetId, $datasourceId, '{}'));
51
        return $this->db->lastInsertId('*PREFIX*analytics_dataload');
52
    }
53
54
    /**
55
     * get all dataloads for a dataset
56
     *
57
     * @NoAdminRequired
58
     * @param int $datasetId
59
     * @return array
60
     */
61
    public function read(int $datasetId)
62
    {
63
        $SQL = 'SELECT * FROM `*PREFIX*analytics_dataload` WHERE `user_id` = ? AND `dataset` = ?';
64
        $stmt = $this->db->prepare($SQL);
65
        $stmt->execute(array($this->userId, $datasetId));
66
        return $stmt->fetchAll();
67
    }
68
69
    /**
70
     * get all dataload & schedule metadata
71
     *
72
     * @NoAdminRequired
73
     * @return array
74
     */
75
    public function getAllDataloadMetadata()
76
    {
77
        $SQL = 'SELECT `dataset`, COUNT(id) AS `dataloads`, COUNT(schedule) AS `schedules` FROM `*PREFIX*analytics_dataload` WHERE `user_id` = ? GROUP BY dataset';
78
        $stmt = $this->db->prepare($SQL);
79
        $stmt->execute(array($this->userId));
80
        return $stmt->fetchAll();
81
    }
82
83
    /**
84
     * get all dataload & schedule metadata
85
     *
86
     * @NoAdminRequired
87
     * @param $schedule
88
     * @return array
89
     */
90
    public function getDataloadBySchedule($schedule)
91
    {
92
        $SQL = 'SELECT `id` FROM `*PREFIX*analytics_dataload` WHERE `schedule` = ?';
93
        $stmt = $this->db->prepare($SQL);
94
        $stmt->execute(array($schedule));
95
        return $stmt->fetchAll();
96
    }
97
98
    /**
99
     * update dataload
100
     *
101
     * @NoAdminRequired
102
     * @param int $dataloadId
103
     * @param $name
104
     * @param $option
105
     * @param $schedule
106
     * @return bool
107
     */
108
    public function update(int $dataloadId, $name, $option, $schedule)
109
    {
110
        $SQL = 'UPDATE `*PREFIX*analytics_dataload` SET `name`= ?, `option`= ?, `schedule` = ? WHERE `user_id` = ? AND `id` = ?';
111
        $stmt = $this->db->prepare($SQL);
112
        $name = $this->truncate($name, 64);
113
        $stmt->execute(array($name, $option, $schedule, $this->userId, $dataloadId));
114
        return true;
115
    }
116
117
    /**
118
     * delete a dataload
119
     *
120
     * @NoAdminRequired
121
     * @param int $dataloadId
122
     * @return bool
123
     */
124
    public function delete(int $dataloadId)
125
    {
126
        $SQL = 'DELETE FROM `*PREFIX*analytics_dataload` WHERE `id` = ? AND `user_id` = ?';
127
        $stmt = $this->db->prepare($SQL);
128
        $stmt->execute([$dataloadId, $this->userId]);
129
        return true;
130
    }
131
132
    /**
133
     * delete a dataload
134
     *
135
     * @NoAdminRequired
136
     * @param int $dataloadId
137
     * @return bool
138
     */
139
    public function deleteDataloadByDataset(int $datasetId)
140
    {
141
        $SQL = 'DELETE FROM `*PREFIX*analytics_dataload` WHERE `dataset` = ? AND `user_id` = ?';
142
        $stmt = $this->db->prepare($SQL);
143
        $stmt->execute([$datasetId, $this->userId]);
144
        return true;
145
    }
146
147
    /**
148
     * get Dataload by id
149
     * @param int $dataloadId
150
     * @return array
151
     */
152
    public function getDataloadById(int $dataloadId)
153
    {
154
        $SQL = 'SELECT * FROM `*PREFIX*analytics_dataload` WHERE `id` = ?';
155
        $stmt = $this->db->prepare($SQL);
156
        $stmt->execute(array($dataloadId));
157
        return $stmt->fetch();
158
    }
159
160
    /**
161
     * truncates fiels do DB-field size
162
     *
163
     * @param $string
164
     * @param $length
165
     * @param $dots
166
     * @return string
167
     */
168
    private function truncate($string, $length, $dots = "...")
169
    {
170
        return (strlen($string) > $length) ? mb_strcut($string, 0, $length - strlen($dots)) . $dots : $string;
171
    }
172
}