MailMimeParser 3.0

AddressGroupConsumerService extends AddressBaseConsumerService
in package

Parses a single group of addresses (as a named-group part of an address header).

Finds addresses using its AddressConsumerService sub-consumer separated by commas, and ends processing once a semi-colon is found.

Prior to returning to its calling client, AddressGroupConsumerService constructs a single Part\AddressGroupPart object filling it with all located addresses, and returns it.

The AddressGroupConsumerService extends AddressBaseConsumerService to define start/end tokens, token separators, and construct a Part\AddressGroupPart to return.

Tags
author

Zaahid Bateson

Table of Contents

$logger  : LoggerInterface
$partFactory  : HeaderPartFactory
$subConsumers  : array<string|int, mixed>
$tokenSplitPattern  : string|null
__construct()  : mixed
__invoke()  : array<string|int, IHeaderPart>
Invokes parsing of a header's value into header parts.
getTokenSeparators()  : array<string|int, string>
Overridden to return patterns matching the beginning and end markers of a group address: colon and semi-colon (":" and ";") characters.
setAddressConsumerService()  : void
Needs to be called in AddressConsumerService's constructor to avoid a circular dependency.
advanceToNextToken()  : static
Determines if the iterator should be advanced to the next token after reading tokens or finding a start token.
getAllConsumers()  : array<string|int, AbstractConsumerService>
Returns this consumer and all unique sub consumers.
getAllTokenSeparators()  : array<string|int, string>
Returns a list of regular expression markers for this consumer and all sub-consumers by calling getTokenSeparators().
getConsumerTokenParts()  : array<string|int, IHeaderPart>
Iterates through this consumer's sub-consumers checking if the current token triggers a sub-consumer's start token and passes control onto that sub-consumer's parseTokenIntoParts().
getPartForToken()  : IHeaderPart|null
Constructs and returns an IHeaderPart for the passed string token.
getTokenParts()  : array<string|int, IHeaderPart>
Returns an array of IHeaderPart for the current token on the iterator.
getTokenSplitPattern()  : string
Returns a regex pattern used to split the input header string.
isEndToken()  : false
Returns true if the passed token is a semi-colon.
isStartToken()  : false
Returns true if the passed token is a colon.
parseTokensIntoParts()  : array<string|int, IHeaderPart>
Overridden to always call processParts even for an empty set of addresses, since a group could be empty.
processParts()  : array<string|int, AddressGroupPart>|array<string|int, mixed>
Performs post-processing on parsed parts.
splitRawValue()  : array<string|int, string>
Returns an array of split tokens from the input string.
parseRawValue()  : array<string|int, IHeaderPart>
Parses the raw header value into header parts.

Properties

$subConsumers

protected array<string|int, mixed> $subConsumers = []

array of sub-consumers used by this consumer if any, or an empty array if none exist.

$tokenSplitPattern

private string|null $tokenSplitPattern = null

the generated token split pattern on first run, so it doesn't need to be regenerated every time.

Methods

__invoke()

Invokes parsing of a header's value into header parts.

public __invoke(string $value) : array<string|int, IHeaderPart>
Parameters
$value : string

the raw header value

Return values
array<string|int, IHeaderPart>

the array of parsed parts

getTokenSeparators()

Overridden to return patterns matching the beginning and end markers of a group address: colon and semi-colon (":" and ";") characters.

public getTokenSeparators() : array<string|int, string>
Return values
array<string|int, string>

the patterns

advanceToNextToken()

Determines if the iterator should be advanced to the next token after reading tokens or finding a start token.

protected advanceToNextToken(Iterator $tokens, bool $isStartToken) : static

The default implementation will advance for a start token, but not advance on the end token of the current consumer, allowing the end token to be passed up to a higher-level consumer.

Parameters
$tokens : Iterator

The token iterator.

$isStartToken : bool

true for the start token.

Return values
static

getAllConsumers()

Returns this consumer and all unique sub consumers.

protected getAllConsumers() : array<string|int, AbstractConsumerService>

Loops into the sub-consumers (and their sub-consumers, etc...) finding all unique consumers, and returns them in an array.

Return values
array<string|int, AbstractConsumerService>

Array of unique consumers.

getAllTokenSeparators()

Returns a list of regular expression markers for this consumer and all sub-consumers by calling getTokenSeparators().

protected getAllTokenSeparators() : array<string|int, string>
Return values
array<string|int, string>

Array of regular expression markers.

getConsumerTokenParts()

Iterates through this consumer's sub-consumers checking if the current token triggers a sub-consumer's start token and passes control onto that sub-consumer's parseTokenIntoParts().

protected getConsumerTokenParts(Iterator<string|int, string> $tokens) : array<string|int, IHeaderPart>

If no sub-consumer is responsible for the current token, calls AbstractConsumerService::getPartForToken() and returns it in an array.

Parameters
$tokens : Iterator<string|int, string>
Return values
array<string|int, IHeaderPart>

getPartForToken()

Constructs and returns an IHeaderPart for the passed string token.

protected getPartForToken(string $token, bool $isLiteral) : IHeaderPart|null

If the token should be ignored, the function must return null.

The default created part uses the instance's partFactory->newInstance method.

Parameters
$token : string

the token

$isLiteral : bool

set to true if the token represents a literal - e.g. an escaped token

Return values
IHeaderPart|null

The constructed header part or null if the token should be ignored.

getTokenParts()

Returns an array of IHeaderPart for the current token on the iterator.

protected getTokenParts(Iterator<string|int, string> $tokens) : array<string|int, IHeaderPart>

If the current token is a start token from a sub-consumer, the sub- consumer's AbstractConsumerService::parseTokensIntoParts() method is called.

Parameters
$tokens : Iterator<string|int, string>

The token iterator.

Return values
array<string|int, IHeaderPart>

isEndToken()

Returns true if the passed token is a semi-colon.

protected isEndToken(string $token) : false
Parameters
$token : string

The current token

Return values
false

isStartToken()

Returns true if the passed token is a colon.

protected isStartToken(string $token) : false
Parameters
$token : string

The current token

Return values
false

parseTokensIntoParts()

Overridden to always call processParts even for an empty set of addresses, since a group could be empty.

protected parseTokensIntoParts(Iterator $tokens) : array<string|int, IHeaderPart>
Parameters
$tokens : Iterator
Return values
array<string|int, IHeaderPart>

splitRawValue()

Returns an array of split tokens from the input string.

protected splitRawValue(string $rawValue) : array<string|int, string>

The method calls preg_split using AbstractConsumerService::getTokenSplitPattern(). The split array will not contain any empty parts and will contain the markers.

Parameters
$rawValue : string

the raw string

Return values
array<string|int, string>

the array of tokens

parseRawValue()

Parses the raw header value into header parts.

private parseRawValue(string $value) : array<string|int, IHeaderPart>

Calls splitTokens to split the value into token part strings, then calls parseParts to parse the returned array.

Parameters
$value : string
Return values
array<string|int, IHeaderPart>

the array of parsed parts

Search results