refactor: message object properties
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
@@ -10,6 +10,7 @@ declare(strict_types=1);
|
||||
namespace KTXF\Mail\Object;
|
||||
|
||||
use DateTimeImmutable;
|
||||
use DateTimeInterface;
|
||||
|
||||
/**
|
||||
* Abstract Message Properties Mutable Class
|
||||
@@ -21,6 +22,90 @@ use DateTimeImmutable;
|
||||
abstract class MessagePropertiesMutableAbstract extends MessagePropertiesBaseAbstract implements MessagePropertiesMutableInterface {
|
||||
|
||||
protected string $type = 'mail.message';
|
||||
|
||||
/**
|
||||
* @param array<int,AddressInterface> $values
|
||||
*
|
||||
* @return array<int,array<string,string|null>>
|
||||
*/
|
||||
protected function normalizeAddresses(array $values): array {
|
||||
return array_map(
|
||||
static fn(AddressInterface $value): array => $value->toArray(),
|
||||
$values,
|
||||
);
|
||||
}
|
||||
|
||||
protected function normalizeDate(?DateTimeImmutable $value): ?string {
|
||||
return $value?->format(DATE_ATOM);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<int,MessagePartInterface> $values
|
||||
*
|
||||
* @return array<int,array<string,mixed>>
|
||||
*/
|
||||
protected function normalizeParts(array $values): array {
|
||||
return array_map(
|
||||
static fn(MessagePartInterface $value): array => $value->jsonSerialize(),
|
||||
$values,
|
||||
);
|
||||
}
|
||||
|
||||
protected function buildBodyPartFromContent(?string $textPlain, ?string $textHtml): ?MessagePart {
|
||||
$hasTextPlain = is_string($textPlain) && $textPlain !== '';
|
||||
$hasTextHtml = is_string($textHtml) && $textHtml !== '';
|
||||
|
||||
if (!$hasTextPlain && !$hasTextHtml) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($hasTextPlain && $hasTextHtml) {
|
||||
return MessagePart::fromArray([
|
||||
'partId' => 'body',
|
||||
'type' => 'multipart/alternative',
|
||||
'subParts' => [
|
||||
[
|
||||
'partId' => 'body.text',
|
||||
'type' => 'text/plain',
|
||||
'charset' => 'utf-8',
|
||||
'content' => $textPlain,
|
||||
'disposition' => 'inline',
|
||||
],
|
||||
[
|
||||
'partId' => 'body.html',
|
||||
'type' => 'text/html',
|
||||
'charset' => 'utf-8',
|
||||
'content' => $textHtml,
|
||||
'disposition' => 'inline',
|
||||
],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
return MessagePart::fromArray([
|
||||
'partId' => 'body',
|
||||
'type' => $hasTextHtml ? 'text/html' : 'text/plain',
|
||||
'charset' => 'utf-8',
|
||||
'content' => $hasTextHtml ? $textHtml : $textPlain,
|
||||
'disposition' => 'inline',
|
||||
]);
|
||||
}
|
||||
|
||||
protected function updateBodyContent(string $type, ?string $value): static {
|
||||
$currentPlain = $this->getBodyTextPlain();
|
||||
$currentHtml = $this->getBodyTextHtml();
|
||||
|
||||
if ($type === 'text/plain') {
|
||||
$currentPlain = $value;
|
||||
} else {
|
||||
$currentHtml = $value;
|
||||
}
|
||||
|
||||
$this->data[static::PROPERTY_BODY] = $this->buildBodyPartFromContent($currentPlain, $currentHtml)?->jsonSerialize();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
@@ -91,16 +176,16 @@ abstract class MessagePropertiesMutableAbstract extends MessagePropertiesBaseAbs
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setReceived(?DateTimeImmutable $value): static {
|
||||
$this->data[static::PROPERTY_RECEIVED] = $value;
|
||||
public function setReceived(?DateTimeInterface $value): static {
|
||||
$this->data[static::PROPERTY_RECEIVED] = $this->normalizeDate($value);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setSent(DateTimeImmutable $value): static {
|
||||
$this->data[static::PROPERTY_SENT] = $value;
|
||||
public function setSent(?DateTimeInterface $value): static {
|
||||
$this->data[static::PROPERTY_SENT] = $this->normalizeDate($value);
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -108,7 +193,7 @@ abstract class MessagePropertiesMutableAbstract extends MessagePropertiesBaseAbs
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setSender(?AddressInterface $value): static {
|
||||
$this->data[static::PROPERTY_SENDER] = $value;
|
||||
$this->data[static::PROPERTY_SENDER] = $value?->toArray();
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -116,7 +201,7 @@ abstract class MessagePropertiesMutableAbstract extends MessagePropertiesBaseAbs
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setFrom(AddressInterface $value): static {
|
||||
$this->data[static::PROPERTY_FROM] = $value;
|
||||
$this->data[static::PROPERTY_FROM] = $value->toArray();
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -124,7 +209,7 @@ abstract class MessagePropertiesMutableAbstract extends MessagePropertiesBaseAbs
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setReplyTo(AddressInterface ...$value): static {
|
||||
$this->data[static::PROPERTY_REPLY_TO] = $value;
|
||||
$this->data[static::PROPERTY_REPLY_TO] = $this->normalizeAddresses($value);
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -132,7 +217,7 @@ abstract class MessagePropertiesMutableAbstract extends MessagePropertiesBaseAbs
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setTo(AddressInterface ...$value): static {
|
||||
$this->data[static::PROPERTY_TO] = $value;
|
||||
$this->data[static::PROPERTY_TO] = $this->normalizeAddresses($value);
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -140,7 +225,7 @@ abstract class MessagePropertiesMutableAbstract extends MessagePropertiesBaseAbs
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setCc(AddressInterface ...$value): static {
|
||||
$this->data[static::PROPERTY_CC] = $value;
|
||||
$this->data[static::PROPERTY_CC] = $this->normalizeAddresses($value);
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -148,7 +233,7 @@ abstract class MessagePropertiesMutableAbstract extends MessagePropertiesBaseAbs
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setBcc(AddressInterface ...$value): static {
|
||||
$this->data[static::PROPERTY_BCC] = $value;
|
||||
$this->data[static::PROPERTY_BCC] = $this->normalizeAddresses($value);
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -164,7 +249,7 @@ abstract class MessagePropertiesMutableAbstract extends MessagePropertiesBaseAbs
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setBody(?MessagePartInterface $value): static {
|
||||
$this->data[static::PROPERTY_BODY] = $value;
|
||||
$this->data[static::PROPERTY_BODY] = $value?->jsonSerialize();
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -172,31 +257,29 @@ abstract class MessagePropertiesMutableAbstract extends MessagePropertiesBaseAbs
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setBodyTextPlain(?string $value): static {
|
||||
$this->data[static::PROPERTY_BODY_TEXT_PLAIN] = $value;
|
||||
return $this;
|
||||
return $this->updateBodyContent('text/plain', $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setBodyTextHtml(?string $value): static {
|
||||
$this->data[static::PROPERTY_BODY_TEXT_HTML] = $value;
|
||||
return $this->updateBodyContent('text/html', $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setAttachments(\KTXF\Mail\Object\MessagePartInterface ...$value): static {
|
||||
$this->data[static::PROPERTY_ATTACHMENTS] = $this->normalizeParts($value);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setAttachments(AttachmentInterface ...$value): static {
|
||||
$this->data[static::PROPERTY_ATTACHMENTS] = $value;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function addAttachment(AttachmentInterface $value): static {
|
||||
$this->data[static::PROPERTY_ATTACHMENTS][] = $value;
|
||||
public function addAttachment(\KTXF\Mail\Object\MessagePartInterface $value): static {
|
||||
$this->data[static::PROPERTY_ATTACHMENTS][] = $value->jsonSerialize();
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user