mirror of
https://github.com/itflow-org/itflow
synced 2026-09-18 12:45:13 +00:00
61 lines
1.9 KiB
PHP
61 lines
1.9 KiB
PHP
<?php
|
|
/**
|
|
* This file is part of the ZBateson\MailMimeParser project.
|
|
*
|
|
* @license http://opensource.org/licenses/bsd-license.php BSD
|
|
*/
|
|
|
|
namespace ZBateson\MailMimeParser\Header;
|
|
|
|
use Psr\Log\LoggerInterface;
|
|
use ZBateson\MailMimeParser\Header\Consumer\IConsumerService;
|
|
use ZBateson\MailMimeParser\Header\Part\MimeToken;
|
|
use ZBateson\MailMimeParser\Header\Part\MimeTokenPartFactory;
|
|
|
|
/**
|
|
* Allows a header to be mime-encoded and be decoded with a consumer after
|
|
* decoding.
|
|
*
|
|
* @author Zaahid Bateson
|
|
*/
|
|
abstract class MimeEncodedHeader extends AbstractHeader
|
|
{
|
|
/**
|
|
* @var IHeaderPart[] the mime encoded parsed parts contained in this
|
|
* header
|
|
*/
|
|
protected array $mimeEncodedParsedParts = [];
|
|
|
|
public function __construct(
|
|
LoggerInterface $logger,
|
|
protected readonly MimeTokenPartFactory $mimeTokenPartFactory,
|
|
IConsumerService $consumerService,
|
|
string $name,
|
|
string $value
|
|
) {
|
|
parent::__construct($logger, $consumerService, $name, $value);
|
|
}
|
|
|
|
/**
|
|
* Mime-decodes any mime-encoded parts prior to invoking
|
|
* parent::parseHeaderValue.
|
|
*/
|
|
protected function parseHeaderValue(IConsumerService $consumer, string $value) : void
|
|
{
|
|
// handled differently from MimeLiteralPart's decoding which ignores
|
|
// whitespace between parts, etc...
|
|
$matchp = '~(' . MimeToken::MIME_PART_PATTERN . ')~';
|
|
$aMimeParts = \preg_split($matchp, $value, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
|
|
$this->mimeEncodedParsedParts = \array_map($this->mimeTokenPartFactory->newInstance(...), $aMimeParts);
|
|
parent::parseHeaderValue(
|
|
$consumer,
|
|
\implode('', \array_map(fn ($part) => $part->getValue(), $this->mimeEncodedParsedParts))
|
|
);
|
|
}
|
|
|
|
protected function getErrorBagChildren() : array
|
|
{
|
|
return \array_values(\array_merge($this->getAllParts(), $this->mimeEncodedParsedParts));
|
|
}
|
|
}
|