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

forceGetAllRecentContactEdit()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 19
rs 9.6333
c 0
b 0
f 0
cc 2
nc 2
nop 0
1
<?php
2
/**
3
 * Circles - Bring cloud-users closer together.
4
 *
5
 * This file is licensed under the Affero General Public License version 3 or
6
 * later. See the COPYING file.
7
 *
8
 * @author Maxence Lange <[email protected]>
9
 * @copyright 2017
10
 * @license GNU AGPL version 3 or any later version
11
 *
12
 * This program is free software: you can redistribute it and/or modify
13
 * it under the terms of the GNU Affero General Public License as
14
 * published by the Free Software Foundation, either version 3 of the
15
 * License, or (at your option) any later version.
16
 *
17
 * This program is distributed in the hope that it will be useful,
18
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20
 * GNU Affero General Public License for more details.
21
 *
22
 * You should have received a copy of the GNU Affero General Public License
23
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
24
 *
25
 */
26
27
28
namespace OCA\Circles\Db;
29
30
31
use daita\MySmallPhpTools\Traits\TStringTools;
32
use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
33
use Exception;
34
use OCA\Circles\Exceptions\GSStatusException;
35
use OCA\Circles\Exceptions\MemberAlreadyExistsException;
36
use OCA\Circles\Exceptions\MemberDoesNotExistException;
37
use OCA\Circles\Model\DeprecatedMember;
38
use OCP\IGroup;
39
40
class DeprecatedMembersRequest extends DeprecatedMembersRequestBuilder {
41
42
43
	use TStringTools;
44
45
46
	/**
47
	 * Returns information about a member.
48
	 *
49
	 * WARNING: This function does not filters data regarding the current user/viewer.
50
	 *          In case of interaction with users, Please use MembersService->getMember() instead.
51
	 *
52
	 * @param string $circleUniqueId
53
	 * @param string $userId
54
	 * @param $type
55
	 *
56
	 * @param string $instance
57
	 *
58
	 * @return DeprecatedMember
59
	 * @throws MemberDoesNotExistException
60
	 */
61
	public function forceGetMember($circleUniqueId, $userId, $type, string $instance = '') {
62
		$qb = $this->getMembersSelectSql();
63
64
		if ($this->configService->isLocalInstance($instance)) {
65
			$instance = '';
66
		}
67
68
		$this->limitToUserId($qb, $userId);
69
		$this->limitToUserType($qb, $type);
70
		$this->limitToInstance($qb, $instance);
71
		$this->limitToCircleId($qb, $circleUniqueId);
72
73
		$cursor = $qb->execute();
74
		$data = $cursor->fetch();
75
		$cursor->closeCursor();
76
77
		if ($data === false) {
78
			throw new MemberDoesNotExistException($this->l10n->t('This member does not exist'));
0 ignored issues
show
Deprecated Code introduced by
The class OCA\Circles\Exceptions\MemberDoesNotExistException has been deprecated.

This class, trait or interface has been deprecated.

Loading history...
79
		}
80
81
		return $this->parseMembersSelectSql($data);
82
	}
83
84
85
	/**
86
	 * @param string $memberId
87
	 *
88
	 * @return DeprecatedMember
89
	 * @throws MemberDoesNotExistException
90
	 */
91
	public function forceGetMemberById(string $memberId): DeprecatedMember {
92
		$qb = $this->getMembersSelectSql();
93
94
		$this->limitToMemberId($qb, $memberId);
95
96
		$cursor = $qb->execute();
97
		$data = $cursor->fetch();
98
		$cursor->closeCursor();
99
100
		if ($data === false) {
101
			throw new MemberDoesNotExistException($this->l10n->t('This member does not exist'));
0 ignored issues
show
Deprecated Code introduced by
The class OCA\Circles\Exceptions\MemberDoesNotExistException has been deprecated.

This class, trait or interface has been deprecated.

Loading history...
102
		}
103
104
		return $this->parseMembersSelectSql($data);
105
	}
106
107
108
	/**
109
	 * Returns members list of a circle, based on their level.
110
	 *
111
	 * WARNING: This function does not filters data regarding the current user/viewer.
112
	 *          In case of interaction with users, Please use getMembers() instead.
113
	 *
114
	 * @param string $circleUniqueId
115
	 * @param int $level
116
	 * @param int $type
117
	 * @param bool $incGroup
118
	 *
119
	 * @return DeprecatedMember[]
120
	 */
121
	public function forceGetMembers(
122
		string $circleUniqueId, $level = DeprecatedMember::LEVEL_MEMBER, int $type = 0, $incGroup = false
123
	) {
124
		$qb = $this->getMembersSelectSql();
125
		$this->limitToMembersAndAlmost($qb);
126
		$this->limitToLevel($qb, $level);
127
128
		if ($type > 0) {
129
			$this->limitToUserType($qb, $type);
130
		}
131
132
		$this->limitToCircleId($qb, $circleUniqueId);
133
134
		$members = [];
135
		$cursor = $qb->execute();
136
		while ($data = $cursor->fetch()) {
137
			$members[] = $this->parseMembersSelectSql($data);
138
		}
139
		$cursor->closeCursor();
140
141
		try {
142
			if ($this->configService->isLinkedGroupsAllowed() && $incGroup === true) {
143
				$this->includeGroupMembers($members, $circleUniqueId, $level);
144
			}
145
		} catch (GSStatusException $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
146
		}
147
148
		return $members;
149
	}
150
151
152
	/**
153
	 * Returns all members.
154
	 *
155
	 * WARNING: This function does not filters data regarding the current user/viewer.
156
	 *          In case of interaction with users, Please use getMembers() instead.
157
	 *
158
	 *
159
	 * @return DeprecatedMember[]
160
	 */
161
	public function forceGetAllMembers() {
162
163
		$qb = $this->getMembersSelectSql();
164
165
		$members = [];
166
		$cursor = $qb->execute();
167
		while ($data = $cursor->fetch()) {
168
			$members[] = $this->parseMembersSelectSql($data);
169
		}
170
		$cursor->closeCursor();
171
172
		return $members;
173
	}
174
175
176
	/**
177
	 * Returns members generated from Contacts that are not 'checked' (as not sent existing shares).
178
	 *
179
	 *
180
	 * @return DeprecatedMember[]
181
	 */
182
	public function forceGetAllRecentContactEdit() {
183
		$qb = $this->getMembersSelectSql();
184
		$this->limitToUserType($qb, DeprecatedMember::TYPE_CONTACT);
185
186
		$expr = $qb->expr();
187
		$orX = $expr->orX();
188
		$orX->add($expr->isNull('contact_checked'));
189
		$orX->add($expr->neq('contact_checked', $qb->createNamedParameter('1')));
190
		$qb->andWhere($orX);
191
192
		$members = [];
193
		$cursor = $qb->execute();
194
		while ($data = $cursor->fetch()) {
195
			$members[] = $this->parseMembersSelectSql($data);
196
		}
197
		$cursor->closeCursor();
198
199
		return $members;
200
	}
201
202
203
	/**
204
	 * @param DeprecatedMember $member
205
	 * @param bool $check
206
	 */
207
	public function checkMember(DeprecatedMember $member, bool $check) {
208
		$qb = $this->getMembersUpdateSql(
209
			$member->getCircleId(), $member->getUserId(), $member->getInstance(), $member->getType()
210
		);
211
		$qb->set('contact_checked', $qb->createNamedParameter(($check) ? 1 : 0));
212
213
		$qb->execute();
214
	}
215
216
217
	/**
218
	 * @param string $circleUniqueId
219
	 * @param DeprecatedMember $viewer
220
	 * @param bool $force
221
	 *
222
	 * @return DeprecatedMember[]
223
	 */
224
	public function getMembers(string $circleUniqueId, ?DeprecatedMember $viewer, bool $force = false) {
225
		try {
226
			if ($force === false) {
227
				$viewer->hasToBeMember();
228
			}
229
230
			$members = $this->forceGetMembers($circleUniqueId, DeprecatedMember::LEVEL_NONE);
231
			if ($force === false) {
232
				if (!$viewer->isLevel(DeprecatedMember::LEVEL_MODERATOR)) {
233
					array_map(
234
						function(DeprecatedMember $m) {
235
							$m->setNote('');
236
						}, $members
237
					);
238
				}
239
			}
240
241
			return $members;
242
		} catch (Exception $e) {
243
			return [];
244
		}
245
	}
246
247
248
	/**
249
	 * forceGetGroup();
250
	 *
251
	 * returns group information as a member within a Circle.
252
	 *
253
	 * WARNING: This function does not filters data regarding the current user/viewer.
254
	 *          In case of interaction with users, Please use getGroup() instead.
255
	 *
256
	 * @param string $circleUniqueId
257
	 * @param string $groupId
258
	 * @param string $instance
259
	 *
260
	 * @return DeprecatedMember
261
	 * @throws MemberDoesNotExistException
262
	 */
263
	public function forceGetGroup(string $circleUniqueId, string $groupId, string $instance) {
264
		$qb = $this->getMembersSelectSql();
265
266
		$this->limitToUserId($qb, $groupId);
267
		$this->limitToUserType($qb, DeprecatedMember::TYPE_GROUP);
268
		$this->limitToInstance($qb, $instance);
269
		$this->limitToCircleId($qb, $circleUniqueId);
270
271
		$cursor = $qb->execute();
272
		$data = $cursor->fetch();
273
		$cursor->closeCursor();
274
		if ($data === false) {
275
			throw new MemberDoesNotExistException($this->l10n->t('This member does not exist'));
0 ignored issues
show
Deprecated Code introduced by
The class OCA\Circles\Exceptions\MemberDoesNotExistException has been deprecated.

This class, trait or interface has been deprecated.

Loading history...
276
		}
277
278
		return $this->parseMembersSelectSql($data);
279
	}
280
281
282
	/**
283
	 * includeGroupMembers();
284
	 *
285
	 * This function will get members of a circle throw NCGroups and fill the result an existing
286
	 * Members List. In case of duplicate, higher level will be kept.
287
	 *
288
	 * @param DeprecatedMember[] $members
289
	 * @param string $circleUniqueId
290
	 * @param int $level
291
	 */
292
	private function includeGroupMembers(array &$members, $circleUniqueId, $level) {
293
		$groupMembers = $this->forceGetGroupMembers($circleUniqueId, $level);
294
		$this->avoidDuplicateMembers($members, $groupMembers);
295
	}
296
297
298
	/**
299
	 * avoidDuplicateMembers();
300
	 *
301
	 * Use this function to add members to the list (1st argument), keeping the higher level in case
302
	 * of duplicate
303
	 *
304
	 * @param DeprecatedMember[] $members
305
	 * @param DeprecatedMember[] $groupMembers
306
	 */
307
	public function avoidDuplicateMembers(array &$members, array $groupMembers) {
308
		foreach ($groupMembers as $member) {
309
			$index = $this->indexOfMember($members, $member->getUserId());
310
			if ($index === -1) {
311
				array_push($members, $member);
312
			} else if ($members[$index]->getLevel() < $member->getLevel()) {
313
				$members[$index] = $member;
314
			}
315
		}
316
	}
317
318
319
	/**
320
	 * returns the index of a specific UserID in a Members List
321
	 *
322
	 * @param array $members
323
	 * @param $userId
324
	 *
325
	 * @return int
326
	 */
327
	private function indexOfMember(array $members, $userId) {
328
329
		foreach ($members as $k => $member) {
330
			if ($member->getUserId() === $userId) {
331
				return intval($k);
332
			}
333
		}
334
335
		return -1;
336
	}
337
338
339
	/**
340
	 * Check if a fresh member can be generated (by addMember/joinCircle)
341
	 *
342
	 * @param string $circleUniqueId
343
	 * @param string $name
344
	 * @param int $type
345
	 *
346
	 * @param string $instance
347
	 *
348
	 * @return DeprecatedMember
349
	 */
350
	public function getFreshNewMember($circleUniqueId, string $name, int $type, string $instance) {
351
352
		try {
353
			$member = $this->forceGetMember($circleUniqueId, $name, $type, $instance);
354
		} catch (MemberDoesNotExistException $e) {
355
			$member = new DeprecatedMember($name, $type, $circleUniqueId);
356
			$member->setInstance($instance);
357
//			$member->setMemberId($this->token(14));
358
		}
359
360
//		if ($member->alreadyExistOrJoining()) {
361
//			throw new MemberAlreadyExistsException(
362
//				$this->l10n->t('This user is already a member of the circle')
363
//			);
364
//		}
365
366
		return $member;
367
	}
368
369
370
	/**
371
	 * Returns members list of all Group Members of a Circle. The Level of the linked group will be
372
	 * assigned to each entry
373
	 *
374
	 * NOTE: Can contains duplicate.
375
	 *
376
	 * WARNING: This function does not filters data regarding the current user/viewer.
377
	 *          Do not use in case of direct interaction with users.
378
	 *
379
	 * @param string $circleUniqueId
380
	 * @param int $level
381
	 *
382
	 * @return DeprecatedMember[]
383
	 */
384
	public function forceGetGroupMembers($circleUniqueId, $level = DeprecatedMember::LEVEL_MEMBER) {
385
		$qb = $this->getMembersSelectSql();
386
387
		$this->limitToUserType($qb, DeprecatedMember::TYPE_GROUP);
388
		$this->limitToLevel($qb, $level);
389
		$this->limitToCircleId($qb, $circleUniqueId);
390
		$this->limitToNCGroupUser($qb);
391
392
		$members = [];
393
		$cursor = $qb->execute();
394
		while ($data = $cursor->fetch()) {
395
			$members[] = $this->parseGroupsSelectSql($data);
396
		}
397
		$cursor->closeCursor();
398
399
		return $members;
400
	}
401
402
403
	/**
404
	 * returns all users from a Group as a list of Members.
405
	 *
406
	 * @param DeprecatedMember $group
407
	 *
408
	 * @return DeprecatedMember[]
409
	 */
410
	public function getGroupMemberMembers(DeprecatedMember $group) {
411
		/** @var IGroup $grp */
412
		$grp = $this->groupManager->get($group->getUserId());
413
		if ($grp === null) {
414
			return [];
415
		}
416
417
		$members = [];
418
		$users = $grp->getUsers();
419
		foreach ($users as $user) {
420
			$member = clone $group;
421
			//Member::fromJSON($this->l10n, json_encode($group));
422
			$member->setType(DeprecatedMember::TYPE_USER);
423
			$member->setUserId($user->getUID());
424
			$members[] = $member;
425
		}
426
427
		return $members;
428
	}
429
430
431
	/**
432
	 * return the higher level group linked to a circle, that include the userId.
433
	 *
434
	 * WARNING: This function does not filters data regarding the current user/viewer.
435
	 *          In case of direct interaction with users, Please don't use this.
436
	 *
437
	 * @param string $circleUniqueId
438
	 * @param string $userId
439
	 *
440
	 * @return DeprecatedMember
441
	 */
442
	public function forceGetHigherLevelGroupFromUser($circleUniqueId, $userId) {
443
		$qb = $this->getMembersSelectSql();
444
445
		$this->limitToUserType($qb, DeprecatedMember::TYPE_GROUP);
446
		$this->limitToInstance($qb, '');
447
		$this->limitToCircleId($qb, $circleUniqueId);
448
		$this->limitToNCGroupUser($qb);
449
450
		$this->limitToNCGroupUser($qb, $userId);
451
452
		/** @var DeprecatedMember $group */
453
		$group = null;
454
455
		$cursor = $qb->execute();
456
		while ($data = $cursor->fetch()) {
457
			$entry = $this->parseGroupsSelectSql($data);
458
			if ($group === null || $entry->getLevel() > $group->getLevel()) {
459
				$group = $entry;
460
			}
461
		}
462
		$cursor->closeCursor();
463
464
		return $group;
465
	}
466
467
468
	/**
469
	 * Insert Member into database.
470
	 *
471
	 * @param DeprecatedMember $member
472
	 *
473
	 * @throws MemberAlreadyExistsException
474
	 */
475
	public function createMember(DeprecatedMember $member) {
476
477
		if ($member->getMemberId() === '') {
478
			$member->setMemberId($this->token(14));
479
		}
480
481
		$instance = $member->getInstance();
482
		if ($this->configService->isLocalInstance($instance)) {
483
			$instance = '';
484
		}
485
486
		try {
487
			$qb = $this->getMembersInsertSql();
488
			$qb->setValue('circle_id', $qb->createNamedParameter($member->getCircleId()))
489
			   ->setValue('user_id', $qb->createNamedParameter($member->getUserId()))
490
			   ->setValue('member_id', $qb->createNamedParameter($member->getMemberId()))
491
			   ->setValue('user_type', $qb->createNamedParameter($member->getType()))
492
			   ->setValue('cached_name', $qb->createNamedParameter($member->getCachedName()))
493
			   ->setValue('cached_update', $qb->createNamedParameter($this->timezoneService->getUTCDate()))
494
			   ->setValue('instance', $qb->createNamedParameter($instance))
495
			   ->setValue('level', $qb->createNamedParameter($member->getLevel()))
496
			   ->setValue('status', $qb->createNamedParameter($member->getStatus()))
497
			   ->setValue('contact_id', $qb->createNamedParameter($member->getContactId()))
498
			   ->setValue('note', $qb->createNamedParameter($member->getNote()));
499
500
			$qb->execute();
501
		} catch (UniqueConstraintViolationException $e) {
0 ignored issues
show
Bug introduced by
The class Doctrine\DBAL\Exception\...raintViolationException does not exist. Did you forget a USE statement, or did you not list all dependencies?

Scrutinizer analyzes your composer.json/composer.lock file if available to determine the classes, and functions that are defined by your dependencies.

It seems like the listed class was neither found in your dependencies, nor was it found in the analyzed files in your repository. If you are using some other form of dependency management, you might want to disable this analysis.

Loading history...
502
			throw new MemberAlreadyExistsException(
503
				$this->l10n->t('This user is already a member of the circle')
504
			);
505
		}
506
	}
507
508
509
	/**
510
	 * @param string $circleUniqueId
511
	 * @param DeprecatedMember $viewer
512
	 *
513
	 * @return DeprecatedMember[]
514
	 */
515
	public function getGroupsFromCircle($circleUniqueId, DeprecatedMember $viewer) {
516
		if ($viewer->getLevel() < DeprecatedMember::LEVEL_MEMBER) {
517
			return [];
518
		}
519
520
		$qb = $this->getMembersSelectSql();
521
522
		$this->limitToUserType($qb, DeprecatedMember::TYPE_GROUP);
523
		$this->limitToLevel($qb, DeprecatedMember::LEVEL_MEMBER);
524
		$this->limitToInstance($qb, '');
525
		$this->limitToCircleId($qb, $circleUniqueId);
526
527
		$cursor = $qb->execute();
528
		$groups = [];
529
		while ($data = $cursor->fetch()) {
530
			if ($viewer->getLevel() < DeprecatedMember::LEVEL_MODERATOR) {
531
				$data['note'] = '';
532
			}
533
			$groups[] = $this->parseGroupsSelectSql($data);
534
		}
535
		$cursor->closeCursor();
536
537
		return $groups;
538
	}
539
540
541
	/**
542
	 * update database entry for a specific Member.
543
	 *
544
	 * @param DeprecatedMember $member
545
	 */
546
	public function updateMemberLevel(DeprecatedMember $member) {
547
		$instance = $member->getInstance();
548
		if ($this->configService->isLocalInstance($instance)) {
549
			$instance = '';
550
		}
551
552
		$qb = $this->getMembersUpdateSql(
553
			$member->getCircleId(), $member->getUserId(), $instance, $member->getType()
554
		);
555
		$qb->set('level', $qb->createNamedParameter($member->getLevel()))
556
		   ->set('status', $qb->createNamedParameter($member->getStatus()));
557
558
		$qb->execute();
559
	}
560
561
562
	/**
563
	 * update database entry for a specific Member.
564
	 *
565
	 * @param DeprecatedMember $member
566
	 */
567
	public function updateMemberInfo(DeprecatedMember $member) {
568
		$instance = $member->getInstance();
569
		if ($this->configService->isLocalInstance($instance)) {
570
			$instance = '';
571
		}
572
573
		$qb = $this->getMembersUpdateSql(
574
			$member->getCircleId(), $member->getUserId(), $instance, $member->getType()
575
		);
576
		$qb->set('note', $qb->createNamedParameter($member->getNote()))
577
		   ->set('cached_name', $qb->createNamedParameter($member->getCachedName()))
578
		   ->set('cached_update', $qb->createNamedParameter($this->timezoneService->getUTCDate()));
579
580
		$qb->execute();
581
	}
582
583
584
	/**
585
	 * update database entry for a specific Member.
586
	 *
587
	 * @param DeprecatedMember $member
588
	 */
589
	public function updateContactMeta(DeprecatedMember $member) {
590
		$qb = $this->getMembersUpdateSql(
591
			$member->getCircleId(), $member->getUserId(), $member->getInstance(), $member->getType()
592
		);
593
		$qb->set('contact_meta', $qb->createNamedParameter(json_encode($member->getContactMeta())));
594
595
		$qb->execute();
596
	}
597
598
599
	/**
600
	 * removeAllFromCircle();
601
	 *
602
	 * Remove All members from a Circle. Used when deleting a Circle.
603
	 *
604
	 * @param string $uniqueCircleId
605
	 */
606
	public function removeAllFromCircle($uniqueCircleId) {
607
		$qb = $this->getMembersDeleteSql();
608
		$expr = $qb->expr();
609
610
		$qb->where($expr->eq('circle_id', $qb->createNamedParameter($uniqueCircleId)));
611
		$qb->execute();
612
	}
613
614
615
	/**
616
	 * removeAllMembershipsFromUser();
617
	 *
618
	 * remove All membership from a User. Used when removing a User from the Cloud.
619
	 *
620
	 * @param DeprecatedMember $member
621
	 */
622
	public function removeAllMembershipsFromUser(DeprecatedMember $member) {
623
		if ($member->getUserId() === '') {
624
			return;
625
		}
626
627
		$instance = $member->getInstance();
628
		if ($this->configService->isLocalInstance($instance)) {
629
			$instance = '';
630
		}
631
632
		$qb = $this->getMembersDeleteSql();
633
		$expr = $qb->expr();
634
635
		$qb->where(
636
			$expr->andX(
637
				$expr->eq('user_id', $qb->createNamedParameter($member->getUserId())),
638
				$expr->eq('instance', $qb->createNamedParameter($instance)),
639
				$expr->eq('user_type', $qb->createNamedParameter(DeprecatedMember::TYPE_USER))
640
			)
641
		);
642
643
		$qb->execute();
644
	}
645
646
647
	/**
648
	 * remove member, identified by its id, type and circleId
649
	 *
650
	 * @param DeprecatedMember $member
651
	 */
652
	public function removeMember(DeprecatedMember $member) {
653
		$instance = $member->getInstance();
654
		if ($this->configService->isLocalInstance($instance)) {
655
			$instance = '';
656
		}
657
658
		$qb = $this->getMembersDeleteSql();
659
		$this->limitToCircleId($qb, $member->getCircleId());
660
		$this->limitToUserId($qb, $member->getUserId());
661
		$this->limitToInstance($qb, $instance);
662
		$this->limitToUserType($qb, $member->getType());
663
		if ($member->getContactId() !== '') {
664
			$this->limitToContactId($qb, $member->getContactId());
665
		}
666
667
		$qb->execute();
668
	}
669
670
	/**
671
	 * update database entry for a specific Group.
672
	 *
673
	 * @param DeprecatedMember $member
674
	 *
675
	 * @return bool
676
	 */
677
	public function updateGroup(DeprecatedMember $member) {
678
		$qb = $this->getMembersUpdateSql(
679
			$member->getCircleId(), $member->getUserId(), $member->getInstance(), $member->getType()
680
		);
681
		$qb->set('level', $qb->createNamedParameter($member->getLevel()));
682
		$qb->execute();
683
684
		return true;
685
	}
686
687
688
	public function unlinkAllFromGroup($groupId) {
689
		$qb = $this->getMembersDeleteSql();
690
691
		$this->limitToUserId($qb, $groupId);
692
		$this->limitToUserType($qb, DeprecatedMember::TYPE_GROUP);
693
		$this->limitToInstance($qb, '');
694
695
		$qb->execute();
696
	}
697
698
699
	/**
700
	 * @param string $contactId
701
	 *
702
	 * @return DeprecatedMember[]
703
	 */
704
	public function getMembersByContactId(string $contactId = ''): array {
705
		$qb = $this->getMembersSelectSql();
706
		if ($contactId === '') {
707
			$expr = $qb->expr();
708
			$qb->andWhere($expr->neq('contact_id', $qb->createNamedParameter('')));
709
		} else {
710
			$this->limitToContactId($qb, $contactId);
711
		}
712
713
		$members = [];
714
		$cursor = $qb->execute();
715
		while ($data = $cursor->fetch()) {
716
			$member = $this->parseMembersSelectSql($data);
717
			$members[] = $member;
718
		}
719
		$cursor->closeCursor();
720
721
		return $members;
722
	}
723
724
725
	/**
726
	 * @param string $circleId
727
	 * @param string $contactId
728
	 *
729
	 * @return DeprecatedMember
730
	 * @throws MemberDoesNotExistException
731
	 */
732
	public function getContactMember(string $circleId, string $contactId): DeprecatedMember {
733
		$qb = $this->getMembersSelectSql();
734
		$this->limitToContactId($qb, $contactId);
735
		$this->limitToCircleId($qb, $circleId);
736
737
		$cursor = $qb->execute();
738
		$data = $cursor->fetch();
739
		$cursor->closeCursor();
740
741
		if ($data === false) {
742
			throw new MemberDoesNotExistException($this->l10n->t('This member does not exist'));
0 ignored issues
show
Deprecated Code introduced by
The class OCA\Circles\Exceptions\MemberDoesNotExistException has been deprecated.

This class, trait or interface has been deprecated.

Loading history...
743
		}
744
745
		return $this->parseMembersSelectSql($data);
746
	}
747
748
749
	/**
750
	 * @param string $contactId
751
	 *
752
	 * @return DeprecatedMember[]
753
	 */
754
	public function getLocalContactMembers(string $contactId): array {
755
		$qb = $this->getMembersSelectSql();
756
		$this->limitToContactId($qb, $contactId);
757
		$this->limitToUserType($qb, DeprecatedMember::TYPE_USER);
758
759
		$members = [];
760
		$cursor = $qb->execute();
761
		while ($data = $cursor->fetch()) {
762
			$members[] = $this->parseMembersSelectSql($data);
763
		}
764
		$cursor->closeCursor();
765
766
		return $members;
767
	}
768
769
770
	/**
771
	 * @param string $contactId
772
	 * @param int $type
773
	 */
774
	public function removeMembersByContactId(string $contactId, int $type = 0) {
775
		$this->miscService->log($contactId);
776
		if ($contactId === '') {
777
			return;
778
		}
779
780
		$qb = $this->getMembersDeleteSql();
781
		$this->limitToContactId($qb, $contactId);
782
		if ($type > 0) {
783
			$this->limitToUserType($qb, $type);
784
		}
785
786
		$qb->execute();
787
	}
788
789
790
}
791