aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Accounts/AccountPropertyCollection.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/Accounts/AccountPropertyCollection.php')
-rw-r--r--lib/private/Accounts/AccountPropertyCollection.php90
1 files changed, 90 insertions, 0 deletions
diff --git a/lib/private/Accounts/AccountPropertyCollection.php b/lib/private/Accounts/AccountPropertyCollection.php
new file mode 100644
index 00000000000..75eea76e686
--- /dev/null
+++ b/lib/private/Accounts/AccountPropertyCollection.php
@@ -0,0 +1,90 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OC\Accounts;
+
+use InvalidArgumentException;
+use OCP\Accounts\IAccountManager;
+use OCP\Accounts\IAccountProperty;
+use OCP\Accounts\IAccountPropertyCollection;
+
+class AccountPropertyCollection implements IAccountPropertyCollection {
+ /** @var IAccountProperty[] */
+ protected array $properties = [];
+
+ public function __construct(
+ protected string $collectionName,
+ ) {
+ }
+
+ public function setProperties(array $properties): IAccountPropertyCollection {
+ /** @var IAccountProperty $property */
+ $this->properties = [];
+ foreach ($properties as $property) {
+ $this->addProperty($property);
+ }
+ return $this;
+ }
+
+ public function getProperties(): array {
+ return $this->properties;
+ }
+
+ public function addProperty(IAccountProperty $property): IAccountPropertyCollection {
+ if ($property->getName() !== $this->collectionName) {
+ throw new InvalidArgumentException('Provided property does not match collection name');
+ }
+ $this->properties[] = $property;
+ return $this;
+ }
+
+ public function addPropertyWithDefaults(string $value): IAccountPropertyCollection {
+ $property = new AccountProperty(
+ $this->collectionName,
+ $value,
+ IAccountManager::SCOPE_LOCAL,
+ IAccountManager::NOT_VERIFIED,
+ ''
+ );
+ $this->addProperty($property);
+ return $this;
+ }
+
+ public function removeProperty(IAccountProperty $property): IAccountPropertyCollection {
+ $ref = array_search($property, $this->properties, true);
+ if ($ref !== false) {
+ unset($this->properties[$ref]);
+ }
+ return $this;
+ }
+
+ public function getPropertyByValue(string $value): ?IAccountProperty {
+ foreach ($this->properties as $i => $property) {
+ if ($property->getValue() === $value) {
+ return $property;
+ }
+ }
+ return null;
+ }
+
+ public function removePropertyByValue(string $value): IAccountPropertyCollection {
+ foreach ($this->properties as $i => $property) {
+ if ($property->getValue() === $value) {
+ unset($this->properties[$i]);
+ }
+ }
+ return $this;
+ }
+
+ public function jsonSerialize(): array {
+ return [$this->collectionName => $this->properties];
+ }
+
+ public function getName(): string {
+ return $this->collectionName;
+ }
+}