Completed
Pull Request — master (#551)
by Maxence
02:15
created

MemberRequest::update()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

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