* SPDX-License-Identifier: AGPL-3.0-or-later */ namespace KTXM\ProviderLocalPeople\Providers\Personal; use KTXF\People\Collection\CollectionContent; use KTXF\People\Collection\CollectionPropertiesMutableAbstract; /** * Collection Properties Implementation */ class CollectionProperties extends CollectionPropertiesMutableAbstract { /** * Converts store document values into collection properties. */ public function fromStore(array $data): static { $this->data[self::JSON_PROPERTY_CONTENT] = [ CollectionContent::Individual->value, CollectionContent::Organization->value, CollectionContent::Group->value ]; if (isset($data['label'])) { $this->data[self::JSON_PROPERTY_LABEL] = (string) $data['label']; } if (array_key_exists('description', $data)) { $this->data[self::JSON_PROPERTY_DESCRIPTION] = $data['description']; } if (array_key_exists('priority', $data)) { $this->data[self::JSON_PROPERTY_PRIORITY] = $data['priority'] !== null ? (int) $data['priority'] : null; } if (array_key_exists('visibility', $data)) { $this->data[self::JSON_PROPERTY_VISIBILITY] = $data['visibility'] !== null ? (bool) $data['visibility'] : null; } if (array_key_exists('color', $data)) { $this->data[self::JSON_PROPERTY_COLOR] = $data['color']; } if (isset($data['content'])) { $this->data[self::JSON_PROPERTY_CONTENT] = (string) $data['content']; } return $this; } /** * Converts collection properties into store document values. */ public function toStore(): array { $content = $this->content(); return array_filter([ 'label' => $this->getLabel(), 'description' => $this->getDescription(), 'priority' => $this->getPriority(), 'visibility' => $this->getVisibility(), 'color' => $this->getColor(), 'content' => $content instanceof CollectionContent ? $content->value : null, ], static fn($value) => $value !== null); } }