Passed
Push — master ( 139802...c3d610 )
by Marcel
06:07
created

ShareMapper::getDatasetsByGroup()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 12
nc 1
nop 1
dl 0
loc 14
rs 9.8666
c 0
b 0
f 0
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 ShareMapper
19
{
20
    private $userId;
21
    private $l10n;
22
    private $db;
23
    private $logger;
24
    const TABLE_NAME = 'analytics_share';
25
    const TABLE_NAME_DATASET = 'analytics_dataset';
26
27
    public function __construct(
28
        $userId,
29
        IL10N $l10n,
30
        IDbConnection $db,
31
        ILogger $logger
32
    )
33
    {
34
        $this->userId = $userId;
35
        $this->l10n = $l10n;
36
        $this->db = $db;
37
        $this->logger = $logger;
38
        self::TABLE_NAME;
39
        self::TABLE_NAME_DATASET;
40
    }
41
42
    /**
43
     * get all shared datasets by token
44
     * uses for public pages
45
     * @param $token
46
     * @return array
47
     */
48
    public function getDatasetByToken($token)
49
    {
50
        $sql = $this->db->getQueryBuilder();
51
        $sql->from(self::TABLE_NAME_DATASET, 'DS')
52
            ->leftJoin('DS', self::TABLE_NAME, 'SH', $sql->expr()->eq('DS.id', 'SH.dataset'))
53
            ->select('DS.*')
54
            ->selectAlias('SH.password', 'password')
55
            ->where($sql->expr()->eq('SH.token', $sql->createNamedParameter($token)));
56
        $statement = $sql->execute();
57
        $result = $statement->fetch();
58
        $statement->closeCursor();
59
        return $result;
60
    }
61
62
    /**
63
     * get all shared datasets by group
64
     * @param $group
65
     * @return array
66
     */
67
    public function getDatasetsByGroup($group)
68
    {
69
        $sql = $this->db->getQueryBuilder();
70
        $sql->from(self::TABLE_NAME_DATASET, 'DS')
71
            ->leftJoin('DS', self::TABLE_NAME, 'SH', $sql->expr()->eq('DS.id', 'SH.dataset'))
72
            ->select('DS.id', 'DS.name')
73
            ->selectAlias($sql->createNamedParameter(99), 'type')
74
            ->selectAlias($sql->createNamedParameter(0), 'parrent')
75
            ->where($sql->expr()->eq('SH.uid_owner', $sql->createNamedParameter($group)))
76
            ->andWhere($sql->expr()->eq('SH.type', $sql->createNamedParameter(1)));
77
        $statement = $sql->execute();
78
        $result = $statement->fetchAll();
79
        $statement->closeCursor();
80
        return $result;
81
    }
82
83
    /**
84
     * get all shared datasets by group
85
     * @param $group
86
     * @param $id
87
     * @return array
88
     */
89
    public function getDatasetByGroupId($group, $id)
90
    {
91
        $sql = $this->db->getQueryBuilder();
92
        $sql->from(self::TABLE_NAME_DATASET, 'DS')
93
            ->leftJoin('DS', self::TABLE_NAME, 'SH', $sql->expr()->eq('DS.id', 'SH.dataset'))
94
            ->select('DS.*')
95
            //->selectAlias($sql->createNamedParameter(99), 'type')
96
            ->selectAlias($sql->createNamedParameter(0), 'parrent')
97
            ->where($sql->expr()->eq('SH.uid_owner', $sql->createNamedParameter($group)))
98
            ->andWhere($sql->expr()->eq('SH.type', $sql->createNamedParameter(1)))
99
            ->andWhere($sql->expr()->eq('SH.dataset', $sql->createNamedParameter($id)));
100
        $statement = $sql->execute();
101
        $result = $statement->fetch();
102
        $statement->closeCursor();
103
        return $result;
104
    }
105
106
    /**
107
     * get shared datasets for current user
108
     * @return array
109
     */
110
    public function getSharedDatasets()
111
    {
112
        $sql = $this->db->getQueryBuilder();
113
        $sql->from(self::TABLE_NAME_DATASET, 'DS')
114
            ->leftJoin('DS', self::TABLE_NAME, 'SH', $sql->expr()->eq('DS.id', 'SH.dataset'))
115
            ->select('DS.id', 'DS.name')
116
            ->selectAlias($sql->createNamedParameter(99), 'type')
117
            ->selectAlias($sql->createNamedParameter(0), 'parrent')
118
            ->where($sql->expr()->eq('SH.uid_owner', $sql->createNamedParameter($this->userId)));
119
        $statement = $sql->execute();
120
        $result = $statement->fetchAll();
121
        $statement->closeCursor();
122
        return $result;
123
    }
124
125
    /**
126
     * get single shared dataset for current user
127
     * @param $id
128
     * @return array
129
     */
130
    public function getSharedDataset($id)
131
    {
132
        $sql = $this->db->getQueryBuilder();
133
        $sql->from(self::TABLE_NAME_DATASET, 'DS')
134
            ->leftJoin('DS', self::TABLE_NAME, 'SH', $sql->expr()->eq('DS.id', 'SH.dataset'))
135
            ->select('DS.*')
136
            ->where($sql->expr()->eq('SH.uid_owner', $sql->createNamedParameter($this->userId)))
137
            ->andWhere($sql->expr()->eq('DS.id', $sql->createNamedParameter($id)));
138
        $statement = $sql->execute();
139
        $result = $statement->fetch();
140
        $statement->closeCursor();
141
        return $result;
142
    }
143
144
    /**
145
     * Create a new share
146
     * @param $datasetId
147
     * @param $type
148
     * @param $uid_owner
149
     * @param $token
150
     * @return bool
151
     */
152
    public function createShare($datasetId, $type, $uid_owner, $token)
153
    {
154
        $sql = $this->db->getQueryBuilder();
155
        $sql->from(self::TABLE_NAME)
156
            ->Select('id')
157
            ->where($sql->expr()->eq('dataset', $sql->createNamedParameter($datasetId)))
158
            ->andWhere($sql->expr()->eq('type', $sql->createNamedParameter($type)))
159
            ->andWhere($sql->expr()->eq('uid_owner', $sql->createNamedParameter($uid_owner)))
160
            ->andWhere($sql->expr()->eq('uid_initiator', $sql->createNamedParameter($this->userId)));
161
        $statement = $sql->execute();
162
        $result = $statement->fetchAll();
163
        $statement->closeCursor();
164
165
        if ($result && ($type !== 3)) {
166
            // don´t create double shares
167
            return false;
168
        } else {
169
            $sql = $this->db->getQueryBuilder();
170
            $sql->insert(self::TABLE_NAME)
171
                ->values([
172
                    'dataset' => $sql->createNamedParameter($datasetId),
173
                    'type' => $sql->createNamedParameter($type),
174
                    'uid_owner' => $sql->createNamedParameter($uid_owner),
175
                    'uid_initiator' => $sql->createNamedParameter($this->userId),
176
                    'token' => $sql->createNamedParameter($token),
177
                ]);
178
            $sql->execute();
179
        }
180
        return true;
181
    }
182
183
    /**
184
     * Get all shares of a dataset
185
     * @param $datasetId
186
     * @return array
187
     */
188
    public function getShares($datasetId)
189
    {
190
        $sql = $this->db->getQueryBuilder();
191
        $sql->from(self::TABLE_NAME)
192
            ->select('id', 'type', 'uid_owner', 'token')
193
            ->selectAlias('password', 'pass')
194
            ->where($sql->expr()->eq('uid_initiator', $sql->createNamedParameter($this->userId)))
195
            ->andWhere($sql->expr()->eq('dataset', $sql->createNamedParameter($datasetId)));
196
        $statement = $sql->execute();
197
        $result = $statement->fetchAll();
198
        $statement->closeCursor();
199
        return $result;
200
    }
201
202
    /**
203
     * Get the all receivers of shares of a dataset
204
     * Used to derive who has to receive activites when a dataset changes
205
     * @param $datasetId
206
     * @return array
207
     */
208
    public function getSharedReceiver($datasetId)
209
    {
210
        $sql = $this->db->getQueryBuilder();
211
        $sql->from(self::TABLE_NAME)
212
            ->select('uid_owner')
213
            ->where($sql->expr()->eq('uid_initiator', $sql->createNamedParameter($this->userId)))
214
            ->andWhere($sql->expr()->eq('dataset', $sql->createNamedParameter($datasetId)))
215
            ->andWhere($sql->expr()->eq('type', $sql->createNamedParameter(0)));
216
        $statement = $sql->execute();
217
        $result = $statement->fetchAll();
218
        $statement->closeCursor();
219
        return $result;
220
    }
221
222
    /**
223
     * Update the password of a share
224
     * @param $shareId
225
     * @param $password
226
     * @return bool
227
     */
228
    public function updateShare($shareId, $password)
229
    {
230
        $sql = $this->db->getQueryBuilder();
231
        $sql->update(self::TABLE_NAME)
232
            ->set('password', $sql->createNamedParameter($password))
233
            ->where($sql->expr()->eq('uid_initiator', $sql->createNamedParameter($this->userId)))
234
            ->andWhere($sql->expr()->eq('id', $sql->createNamedParameter($shareId)));
235
        $sql->execute();
236
        return true;
237
    }
238
239
    /**
240
     * Delete a share
241
     * @param $shareId
242
     * @return bool
243
     */
244
    public function deleteShare($shareId)
245
    {
246
        $sql = $this->db->getQueryBuilder();
247
        $sql->delete(self::TABLE_NAME)
248
            ->where($sql->expr()->eq('uid_initiator', $sql->createNamedParameter($this->userId)))
249
            ->andWhere($sql->expr()->eq('id', $sql->createNamedParameter($shareId)));
250
        $sql->execute();
251
        return true;
252
    }
253
254
    /**
255
     * Delete all shares of a dataset
256
     * Used during dataset deletion
257
     * @param $datasetId
258
     * @return bool
259
     */
260
    public function deleteShareByDataset($datasetId)
261
    {
262
        $sql = $this->db->getQueryBuilder();
263
        $sql->delete(self::TABLE_NAME)
264
            ->where($sql->expr()->eq('uid_initiator', $sql->createNamedParameter($this->userId)))
265
            ->andWhere($sql->expr()->eq('dataset', $sql->createNamedParameter($datasetId)));
266
        $sql->execute();
267
        return true;
268
    }
269
}