Completed
Pull Request — master (#625)
by Maxence
02:28
created

MembershipRequest::deleteFederatedUser()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
6
/**
7
 * Circles - Bring cloud-users closer together.
8
 *
9
 * This file is licensed under the Affero General Public License version 3 or
10
 * later. See the COPYING file.
11
 *
12
 * @author Maxence Lange <[email protected]>
13
 * @copyright 2021
14
 * @license GNU AGPL version 3 or any later version
15
 *
16
 * This program is free software: you can redistribute it and/or modify
17
 * it under the terms of the GNU Affero General Public License as
18
 * published by the Free Software Foundation, either version 3 of the
19
 * License, or (at your option) any later version.
20
 *
21
 * This program is distributed in the hope that it will be useful,
22
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24
 * GNU Affero General Public License for more details.
25
 *
26
 * You should have received a copy of the GNU Affero General Public License
27
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
28
 *
29
 */
30
31
32
namespace OCA\Circles\Db;
33
34
35
use OCA\Circles\Exceptions\MembershipNotFoundException;
36
use OCA\Circles\Model\FederatedUser;
37
use OCA\Circles\Model\Membership;
38
use OCP\DB\QueryBuilder\IQueryBuilder;
39
40
41
/**
42
 * Class MembershipRequest
43
 *
44
 * @package OCA\Circles\Db
45
 */
46
class MembershipRequest extends MembershipRequestBuilder {
47
48
49
	/**
50
	 * @param Membership $membership
51
	 */
52
	public function insert(Membership $membership) {
53
		$qb = $this->getMembershipInsertSql();
54
		$qb->setValue('circle_id', $qb->createNamedParameter($membership->getCircleId()));
55
		$qb->setValue('single_id', $qb->createNamedParameter($membership->getSingleId()));
56
		$qb->setValue('level', $qb->createNamedParameter($membership->getLevel()));
57
		$qb->setValue('inheritance_first', $qb->createNamedParameter($membership->getInheritanceFirst()));
58
		$qb->setValue('inheritance_last', $qb->createNamedParameter($membership->getInheritanceLast()));
59
		$qb->setValue(
60
			'inheritance_path',
61
			$qb->createNamedParameter(json_encode($membership->getInheritancePath(), JSON_UNESCAPED_SLASHES))
62
		);
63
		$qb->setValue('inheritance_depth', $qb->createNamedParameter($membership->getInheritanceDepth()));
64
65
		$qb->execute();
66
	}
67
68
69
	/**
70
	 * @param Membership $membership
71
	 */
72
	public function update(Membership $membership) {
73
		$qb = $this->getMembershipUpdateSql();
74
		$qb->set('level', $qb->createNamedParameter($membership->getLevel()));
75
		$qb->set('inheritance_last', $qb->createNamedParameter($membership->getInheritanceLast()));
76
		$qb->set('inheritance_first', $qb->createNamedParameter($membership->getInheritanceFirst()));
77
		$qb->set(
78
			'inheritance_path',
79
			$qb->createNamedParameter(json_encode($membership->getInheritancePath(), JSON_UNESCAPED_SLASHES))
80
		);
81
		$qb->set('inheritance_depth', $qb->createNamedParameter($membership->getInheritanceDepth()));
82
83
		$qb->limitToSingleId($membership->getSingleId());
84
		$qb->limitToCircleId($membership->getCircleId());
85
86
		$qb->execute();
87
	}
88
89
90
	/**
91
	 * @param string $circleId
92
	 * @param string $singleId
93
	 *
94
	 * @return Membership
95
	 * @throws MembershipNotFoundException
96
	 */
97
	public function getMembership(string $circleId, string $singleId): Membership {
98
		$qb = $this->getMembershipSelectSql();
99
		$qb->limitToCircleId($circleId);
100
		$qb->limitToSingleId($singleId);
101
102
		return $this->getItemFromRequest($qb);
103
	}
104
105
106
	/**
107
	 * @param string $singleId
108
	 *
109
	 * @return Membership[]
110
	 */
111
	public function getMemberships(string $singleId): array {
112
		$qb = $this->getMembershipSelectSql();
113
		$qb->limitToSingleId($singleId);
114
115
		return $this->getItemsFromRequest($qb);
116
	}
117
118
119
	/**
120
	 * @param string $singleId
121
	 * @param int $level
122
	 *
123
	 * @return Membership[]
124
	 */
125
	public function getInherited(string $singleId, int $level = 0): array {
126
		$qb = $this->getMembershipSelectSql();
127
		$qb->limitToCircleId($singleId);
128
129
		if ($level > 1) {
130
			$expr = $qb->expr();
131
			$qb->andWhere($expr->gte('level', $qb->createNamedParameter($level, IQueryBuilder::PARAM_INT)));
132
		}
133
134
		return $this->getItemsFromRequest($qb);
135
	}
136
137
138
	/**
139
	 * @param string $singleId
140
	 * @param bool $all
141
	 *
142
	 * @return void
143
	 */
144
	public function removeBySingleId(string $singleId, bool $all = false): void {
145
		$qb = $this->getMembershipDeleteSql();
146
147
		if (!$all) {
148
			$qb->limitToSingleId($singleId);
149
		}
150
151
		$qb->execute();
152
	}
153
154
155
	/**
156
	 * @param Membership $membership
157
	 */
158
	public function delete(Membership $membership): void {
159
		$qb = $this->getMembershipDeleteSql();
160
		$qb->limitToSingleId($membership->getSingleId());
161
		$qb->limitToCircleId($membership->getCircleId());
162
163
		$qb->execute();
164
	}
165
166
167
	/**
168
	 * @param FederatedUser $federatedUser
169
	 */
170
	public function deleteFederatedUser(FederatedUser $federatedUser): void {
171
		$qb = $this->getMembershipDeleteSql();
172
		$qb->limitToSingleId($federatedUser->getSingleId());
173
174
		$qb->execute();
175
	}
176
177
}
178
179