torrentpier-lts/library/Zend/Mail/Header/AbstractAddressList.php

159 lines
4.0 KiB
PHP
Raw Normal View History

<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
2023-04-01 09:03:34 +03:00
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Zend\Mail\Header;
use Zend\Mail\AddressList;
use Zend\Mail\Headers;
/**
* Base class for headers composing address lists (to, from, cc, bcc, reply-to)
*/
abstract class AbstractAddressList implements HeaderInterface
{
/**
* @var AddressList
*/
protected $addressList;
/**
* @var string Normalized field name
*/
protected $fieldName;
/**
* Header encoding
*
* @var string
*/
protected $encoding = 'ASCII';
/**
* @var string lower case field name
*/
protected static $type;
public static function fromString($headerLine)
{
2023-04-01 09:03:34 +03:00
list($fieldName, $fieldValue) = GenericHeader::splitHeaderLine($headerLine);
$decodedValue = HeaderWrap::mimeDecodeValue($fieldValue);
$wasEncoded = ($decodedValue !== $fieldValue);
$fieldValue = $decodedValue;
if (strtolower($fieldName) !== static::$type) {
throw new Exception\InvalidArgumentException(sprintf(
'Invalid header line for "%s" string',
__CLASS__
));
}
$header = new static();
2023-04-01 09:03:34 +03:00
if ($wasEncoded) {
$header->setEncoding('UTF-8');
}
// split value on ","
$fieldValue = str_replace(Headers::FOLDING, ' ', $fieldValue);
2023-04-01 09:03:34 +03:00
$values = str_getcsv($fieldValue, ',');
array_walk(
$values,
function (&$value) {
$value = trim($value);
}
);
$addressList = $header->getAddressList();
foreach ($values as $address) {
2023-04-01 09:03:34 +03:00
$addressList->addFromString($address);
}
return $header;
}
public function getFieldName()
{
return $this->fieldName;
}
public function getFieldValue($format = HeaderInterface::FORMAT_RAW)
{
$emails = array();
$encoding = $this->getEncoding();
2023-04-01 09:03:34 +03:00
foreach ($this->getAddressList() as $address) {
$email = $address->getEmail();
$name = $address->getName();
2023-04-01 09:03:34 +03:00
if (empty($name)) {
$emails[] = $email;
2023-04-01 09:03:34 +03:00
continue;
}
if (false !== strstr($name, ',')) {
$name = sprintf('"%s"', $name);
}
if ($format === HeaderInterface::FORMAT_ENCODED
&& 'ASCII' !== $encoding
) {
$name = HeaderWrap::mimeEncodeValue($name, $encoding);
}
$emails[] = sprintf('%s <%s>', $name, $email);
}
// Ensure the values are valid before sending them.
if ($format !== HeaderInterface::FORMAT_RAW) {
foreach ($emails as $email) {
HeaderValue::assertValid($email);
}
}
return implode(',' . Headers::FOLDING, $emails);
}
public function setEncoding($encoding)
{
$this->encoding = $encoding;
return $this;
}
public function getEncoding()
{
return $this->encoding;
}
/**
* Set address list for this header
*
* @param AddressList $addressList
*/
public function setAddressList(AddressList $addressList)
{
$this->addressList = $addressList;
}
/**
* Get address list managed by this header
*
* @return AddressList
*/
public function getAddressList()
{
if (null === $this->addressList) {
$this->setAddressList(new AddressList());
}
return $this->addressList;
}
public function toString()
{
$name = $this->getFieldName();
$value = $this->getFieldValue(HeaderInterface::FORMAT_ENCODED);
return (empty($value)) ? '' : sprintf('%s: %s', $name, $value);
}
}