* SPDX-License-Identifier: AGPL-3.0-or-later */ namespace KTXM\ProviderJmapc\Providers\Mail; use KTXF\Mail\Object\MessagePartMutableAbstract; class MessagePart extends MessagePartMutableAbstract { /** * convert jmap parameters collection to message object * * @since 1.0.0 * * @param array $parameters jmap parameters collection * @param bool $amend flag merged or replaced parameters */ public function fromJmap(array $parameters, bool $amend = false): self { if ($amend) { // merge parameters with existing ones $this->data = array_merge($this->data, $parameters); } else { // replace parameters store $this->data = $parameters; } // determine if parameters contains subparts // if subParts exist convert them to a MessagePart object // and remove subParts parameter if (is_array($this->data['subParts'])) { foreach ($this->data['subParts'] as $key => $entry) { if (is_object($entry)) { $entry = get_object_vars($entry); } $this->parts[$key] = (new MessagePart($parameters))->fromJmap($entry); } unset($this->data['subParts']); } return $this; } /** * convert message object to jmap parameters array * * @since 1.0.0 * * @return array collection of all message parameters */ public function toJmap(): array { // copy parameter value $parameters = $this->data; // determine if this MessagePart has any sub MessageParts // if sub MessageParts exist retrieve sub MessagePart parameters // and add them to the subParts parameters, otherwise set the subParts parameter to nothing if (count($this->parts) > 0) { $parameters['subParts'] = []; foreach ($this->parts as $entry) { if ($entry instanceof MessagePart) { $parameters['subParts'][] = $entry->toJmap(); } } } else { $parameters['subParts'] = null; } return $parameters; } }