Completed
Pull Request — master (#551)
by Maxence
03:11
created

MemberRequest::getMembersBySingleId()   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\InvalidIdException;
36
use OCA\Circles\Exceptions\MemberNotFoundException;
37
use OCA\Circles\IFederatedUser;
38
use OCA\Circles\Model\Circle;
39
use OCA\Circles\Model\Federated\RemoteInstance;
40
use OCA\Circles\Model\FederatedUser;
41
use OCA\Circles\Model\Member;
42
43
44
/**
45
 * Class MemberRequest
46
 *
47
 * @package OCA\Circles\Db
48
 */
49
class MemberRequest extends MemberRequestBuilder {
50
51
52
	/**
53
	 * @param Member $member
54
	 *
55
	 * @throws InvalidIdException
56
	 */
57
	public function save(Member $member): void {
58
		// TODO: check singleId is not empty
59
//		$this->confirmValidIds([$member->getCircleId(), $member->getSingleId(), $member->getId()]);
60
		$this->confirmValidIds([$member->getCircleId(), $member->getId()]);
61
62
		$qb = $this->getMemberInsertSql();
63
		$qb->setValue('circle_id', $qb->createNamedParameter($member->getCircleId()))
64
		   ->setValue('single_id', $qb->createNamedParameter($member->getSingleId()))
65
		   ->setValue('member_id', $qb->createNamedParameter($member->getId()))
66
		   ->setValue('user_id', $qb->createNamedParameter($member->getUserId()))
67
		   ->setValue('user_type', $qb->createNamedParameter($member->getUserType()))
68
		   ->setValue('cached_name', $qb->createNamedParameter($member->getCachedName()))
69
		   ->setValue('cached_update', $qb->createNamedParameter($this->timezoneService->getUTCDate()))
70
		   ->setValue('instance', $qb->createNamedParameter($qb->getInstance($member)))
71
		   ->setValue('level', $qb->createNamedParameter($member->getLevel()))
72
		   ->setValue('status', $qb->createNamedParameter($member->getStatus()))
73
		   ->setValue('contact_id', $qb->createNamedParameter($member->getContactId()))
74
		   ->setValue('note', $qb->createNamedParameter($member->getNote()));
75
76
		$qb->execute();
77
	}
78
79
80
	/**
81
	 * @param Member $member
82
	 *
83
	 * @throws InvalidIdException
84
	 */
85
	public function update(Member $member): void {
86
		// TODO: check singleId is not empty
87
//		$this->confirmValidIds([$member->getCircleId(), $member->getSingleId(), $member->getId()]);
88
		$this->confirmValidIds([$member->getCircleId(), $member->getId()]);
89
90
		$qb = $this->getMemberUpdateSql();
91
		$qb->set('member_id', $qb->createNamedParameter($member->getId()))
92
		   ->set('cached_name', $qb->createNamedParameter($member->getCachedName()))
93
		   ->set('cached_update', $qb->createNamedParameter($this->timezoneService->getUTCDate()))
94
		   ->set('level', $qb->createNamedParameter($member->getLevel()))
95
		   ->set('status', $qb->createNamedParameter($member->getStatus()))
96
		   ->set('contact_id', $qb->createNamedParameter($member->getContactId()))
97
		   ->set('note', $qb->createNamedParameter($member->getNote()));
98
99
		$qb->limitToCircleId($member->getCircleId());
100
		$qb->limitToUserId($member->getUserId());
101
		$qb->limitToUserType($member->getUserType());
102
		$qb->limitToInstance($qb->getInstance($member));
103
//		$qb->limitToSingleId($federatedUser->getSingleId());
104
105
		$qb->execute();
106
	}
107
108
109
	/**
110
	 * @param Member $member
111
	 *
112
	 * @throws InvalidIdException
113
	 */
114
	public function insertOrUpdate(Member $member): void {
115
		try {
116
			$this->searchMember($member);
117
			$this->update($member);
118
		} catch (MemberNotFoundException $e) {
119
			$this->save($member);
120
		}
121
	}
122
123
124
	/**
125
	 * @param Member $member
126
	 */
127
	public function delete(Member $member) {
128
		$qb = $this->getMemberDeleteSql();
129
		$qb->limitToCircleId($member->getCircleId());
130
		$qb->limitToUserId($member->getUserId());
131
		$qb->limitToUserType($member->getUserType());
132
		$qb->limitToInstance($qb->getInstance($member));
133
//		$qb->limitToSingleId($federatedUser->getSingleId());
134
135
		$qb->execute();
136
	}
137
138
139
	/**
140
	 * @param Member $member
141
	 */
142
	public function updateLevel(Member $member): void {
143
		$qb = $this->getMemberUpdateSql();
144
		$qb->set('level', $qb->createNamedParameter($member->getLevel()));
145
146
		$qb->limitToMemberId($member->getId());
147
		$qb->limitToCircleId($member->getCircleId());
148
		$qb->limitToUserId($member->getUserId());
149
		$qb->limitToUserType($member->getUserType());
150
		$qb->limitToInstance($qb->getInstance($member));
151
		//		$qb->limitToSingleId($member->getSingleId());
152
153
		$qb->execute();
154
	}
155
156
157
	/**
158
	 * @param string $circleId
159
	 * @param IFederatedUser|null $initiator
160
	 * @param RemoteInstance|null $remoteInstance
161
	 *
162
	 * @return Circle[]
163
	 */
164
	public function getMembers(
165
		string $circleId,
166
		?IFederatedUser $initiator = null,
167
		?RemoteInstance $remoteInstance = null
168
	): array {
169
		$qb = $this->getMemberSelectSql();
170
		$qb->limitToCircleId($circleId);
171
		$qb->leftJoinCircle($initiator);
172
173
		if (!is_null($remoteInstance)) {
174
			$qb->limitToRemoteInstance($remoteInstance->getInstance(), true);
175
		}
176
177
		return $this->getItemsFromRequest($qb);
178
	}
179
180
181
	/**
182
	 * @param string $memberId
183
	 * @param FederatedUser|null $initiator
184
	 *
185
	 * @return Member
186
	 * @throws MemberNotFoundException
187
	 */
188
	public function getMember(string $memberId, ?FederatedUser $initiator = null): Member {
189
		$qb = $this->getMemberSelectSql();
190
		$qb->limitToMemberId($memberId);
191
192
		if (!is_null($initiator)) {
193
			$qb->leftJoinCircle($initiator);
194
		}
195
196
197
		return $this->getItemFromRequest($qb);
198
	}
199
200
201
	/**
202
	 * @param string $singleId
203
	 *
204
	 * @return Member[]
205
	 */
206
	public function getMembersBySingleId(string $singleId): array {
207
		$qb = $this->getMemberSelectSql();
208
		$qb->limitToSingleId($singleId);
209
210
		return $this->getItemsFromRequest($qb);
211
	}
212
213
214
	/**
215
	 * @param Member $member
216
	 * @param FederatedUser|null $initiator
217
	 *
218
	 * @return Member
219
	 * @throws MemberNotFoundException
220
	 */
221
	public function searchMember(Member $member, ?FederatedUser $initiator = null): Member {
222
		$qb = $this->getMemberSelectSql();
223
		$qb->limitToCircleId($member->getCircleId());
224
		$qb->limitToUserId($member->getUserId());
225
		$qb->limitToUserType($member->getUserType());
226
		$qb->limitToInstance($qb->getInstance($member));
227
//		$qb->limitToSingleId($federatedUser->getSingleId());
228
229
		if (!is_null($initiator)) {
230
			$qb->leftJoinCircle($initiator);
231
		}
232
233
		return $this->getItemFromRequest($qb);
234
	}
235
236
}
237
238