* SPDX-License-Identifier: AGPL-3.0-or-later */ namespace KTXF\Mail\Object; /** * Abstract Message Part Base Class * * Provides common implementation for message parts (read-only) * * @since 2025.05.01 */ abstract class MessagePartBaseAbstract implements MessagePartInterface { /** * Internal data storage */ protected array $data = []; /** * Sub-parts storage * @var array */ protected array $parts = []; /** * Constructor * * @param array|null &$data Reference to data array */ public function __construct(array|null &$data = null) { if ($data === null) { $data = []; } $this->data = &$data; } /** * @inheritDoc */ public function getBlobId(): ?string { return $this->data['blobId'] ?? null; } /** * @inheritDoc */ public function getId(): ?string { return $this->data[MessagePartInterface::PROPERTY_PART_ID] ?? null; } /** * @inheritDoc */ public function getSize(): ?int { return $this->data[MessagePartInterface::PROPERTY_SIZE] ?? null; } /** * @inheritDoc */ public function getType(): ?string { return $this->data[MessagePartInterface::PROPERTY_TYPE] ?? null; } /** * @inheritDoc */ public function getDisposition(): ?string { return $this->data[MessagePartInterface::PROPERTY_DISPOSITION] ?? null; } /** * @inheritDoc */ public function getName(): ?string { return $this->data[MessagePartInterface::PROPERTY_NAME] ?? null; } /** * @inheritDoc */ public function getCharset(): ?string { return $this->data[MessagePartInterface::PROPERTY_CHARSET] ?? null; } /** * @inheritDoc */ public function getContentId(): ?string { return $this->data[MessagePartInterface::PROPERTY_CONTENT_ID] ?? null; } /** * @inheritDoc */ public function getLanguage(): ?string { return $this->data[MessagePartInterface::PROPERTY_LANGUAGE] ?? null; } /** * @inheritDoc */ public function getLocation(): ?string { return $this->data[MessagePartInterface::PROPERTY_LOCATION] ?? null; } /** * @inheritDoc */ public function getContent(): ?string { return $this->data[MessagePartInterface::PROPERTY_CONTENT] ?? null; } /** * @inheritDoc */ public function getParts(): array { return $this->parts; } /** * @inheritDoc */ public function jsonSerialize(): array { $result = $this->data; if (!empty($this->parts)) { $result[MessagePartInterface::PROPERTY_SUB_PARTS] = []; foreach ($this->parts as $part) { $result[MessagePartInterface::PROPERTY_SUB_PARTS][] = $part->jsonSerialize(); } } return $result; } }