* SPDX-License-Identifier: AGPL-3.0-or-later */ namespace KTXM\ProviderImap\Providers; use KTXF\Mail\Object\MessagePartMutableAbstract; use KTXM\ProviderImap\Client\MessagePart as ImapMessagePart; /** * Mail Message Part Implementation */ class MessagePart extends MessagePartMutableAbstract { /** * @param array $data */ private function hydrateArray(array $data): static { $this->data = $data; if (isset($this->data['subParts']) && is_array($this->data['subParts'])) { foreach ($this->data['subParts'] as $entry) { if (is_array($entry)) { $this->parts[] = (new self())->hydrateArray($entry); } } unset($this->data['subParts']); } return $this; } /** * Convert gricob BodyStructure part to message part object * * @param Part $part gricob BodyStructure Part (SinglePart or MultiPart) * @param string $partId numeric part identifier (e.g. "1", "1.1", "2") */ public function fromImap(ImapMessagePart $part, string $partId = '1'): static { $data = $part->toArray(); $data['partId'] = $partId; $data['blobId'] = $data['blobId'] ?? $partId; return $this->hydrateArray($data); } }