diff options
Diffstat (limited to 'External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php')
| -rwxr-xr-x | External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php | 316 | 
1 files changed, 316 insertions, 0 deletions
| diff --git a/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php b/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php new file mode 100755 index 0000000..77d3bba --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php @@ -0,0 +1,316 @@ +<?php + +/* + * This file is part of SwiftMailer. + * (c) 2004-2009 Chris Corbyn + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +//@require 'Swift/Mime/Headers/AbstractHeader.php'; +//@require 'Swift/Mime/HeaderEncoder.php'; + +/** + * A Mailbox Address MIME Header for something like From or Sender. + * @package Swift + * @subpackage Mime + * @author Chris Corbyn + */ +class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader +{ +   +  /** +   * The mailboxes used in this Header. +   * @var string[] +   * @access private +   */ +  private $_mailboxes = array(); +   +  /** +   * Creates a new MailboxHeader with $name. +   * @param string $name of Header +   * @param Swift_Mime_HeaderEncoder $encoder +   */ +  public function __construct($name, Swift_Mime_HeaderEncoder $encoder) +  { +    $this->setFieldName($name); +    $this->setEncoder($encoder); +    $this->initializeGrammar(); +  } +   +  /** +   * Get the type of Header that this instance represents. +   * @return int +   * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX +   * @see TYPE_DATE, TYPE_ID, TYPE_PATH +   */ +  public function getFieldType() +  { +    return self::TYPE_MAILBOX; +  } +   +  /** +   * Set the model for the field body. +   * This method takes a string, or an array of addresses. +   * @param mixed $model +   * @throws Swift_RfcComplianceException +   */ +  public function setFieldBodyModel($model) +  { +    $this->setNameAddresses($model); +  } +   +  /** +   * Get the model for the field body. +   * This method returns an associative array like {@link getNameAddresses()} +   * @return array +   * @throws Swift_RfcComplianceException +   */ +  public function getFieldBodyModel() +  { +    return $this->getNameAddresses(); +  } +   +  /** +   * Set a list of mailboxes to be shown in this Header. +   * The mailboxes can be a simple array of addresses, or an array of +   * key=>value pairs where (email => personalName). +   * Example: +   * <code> +   * <?php +   * //Sets two mailboxes in the Header, one with a personal name +   * $header->setNameAddresses(array( +   *  'chris@swiftmailer.org' => 'Chris Corbyn', +   *  'mark@swiftmailer.org' //No associated personal name +   *  )); +   * ?> +   * </code> +   * @param string|string[] $mailboxes +   * @throws Swift_RfcComplianceException +   * @see __construct() +   * @see setAddresses() +   * @see setValue() +   */ +  public function setNameAddresses($mailboxes) +  { +    $this->_mailboxes = $this->normalizeMailboxes((array) $mailboxes); +    $this->setCachedValue(null); //Clear any cached value +  } +   +  /** +   * Get the full mailbox list of this Header as an array of valid RFC 2822 strings. +   * Example: +   * <code> +   * <?php +   * $header = new Swift_Mime_Headers_MailboxHeader('From', +   *  array('chris@swiftmailer.org' => 'Chris Corbyn', +   *  'mark@swiftmailer.org' => 'Mark Corbyn') +   *  ); +   * print_r($header->getNameAddressStrings()); +   * // array ( +   * // 0 => Chris Corbyn <chris@swiftmailer.org>, +   * // 1 => Mark Corbyn <mark@swiftmailer.org> +   * // ) +   * ?> +   * </code> +   * @return string[] +   * @throws Swift_RfcComplianceException +   * @see getNameAddresses() +   * @see toString() +   */ +  public function getNameAddressStrings() +  { +    return $this->_createNameAddressStrings($this->getNameAddresses()); +  } +   +  /** +   * Get all mailboxes in this Header as key=>value pairs. +   * The key is the address and the value is the name (or null if none set). +   * Example: +   * <code> +   * <?php +   * $header = new Swift_Mime_Headers_MailboxHeader('From', +   *  array('chris@swiftmailer.org' => 'Chris Corbyn', +   *  'mark@swiftmailer.org' => 'Mark Corbyn') +   *  ); +   * print_r($header->getNameAddresses()); +   * // array ( +   * // chris@swiftmailer.org => Chris Corbyn, +   * // mark@swiftmailer.org => Mark Corbyn +   * // ) +   * ?> +   * </code> +   * @return string[] +   * @see getAddresses() +   * @see getNameAddressStrings() +   */ +  public function getNameAddresses() +  { +    return $this->_mailboxes; +  } +   +  /** +   * Makes this Header represent a list of plain email addresses with no names. +   * Example: +   * <code> +   * <?php +   * //Sets three email addresses as the Header data +   * $header->setAddresses( +   *  array('one@domain.tld', 'two@domain.tld', 'three@domain.tld') +   *  ); +   * ?> +   * </code> +   * @param string[] $addresses +   * @throws Swift_RfcComplianceException +   * @see setNameAddresses() +   * @see setValue() +   */ +  public function setAddresses($addresses) +  { +    return $this->setNameAddresses(array_values((array) $addresses)); +  } +   +  /** +   * Get all email addresses in this Header. +   * @return string[] +   * @see getNameAddresses() +   */ +  public function getAddresses() +  { +    return array_keys($this->_mailboxes); +  } +   +  /** +   * Remove one or more addresses from this Header. +   * @param string|string[] $addresses +   */ +  public function removeAddresses($addresses) +  { +    $this->setCachedValue(null); +    foreach ((array) $addresses as $address) +    { +      unset($this->_mailboxes[$address]); +    } +  } +   +  /** +   * Get the string value of the body in this Header. +   * This is not necessarily RFC 2822 compliant since folding white space will +   * not be added at this stage (see {@link toString()} for that). +   * @return string +   * @throws Swift_RfcComplianceException +   * @see toString() +   */ +  public function getFieldBody() +  { +    //Compute the string value of the header only if needed +    if (is_null($this->getCachedValue())) +    { +      $this->setCachedValue($this->createMailboxListString($this->_mailboxes)); +    } +    return $this->getCachedValue(); +  } +   +  // -- Points of extension +   +  /** +   * Normalizes a user-input list of mailboxes into consistent key=>value pairs. +   * @param string[] $mailboxes +   * @return string[] +   * @access protected +   */ +  protected function normalizeMailboxes(array $mailboxes) +  { +    $actualMailboxes = array(); +     +    foreach ($mailboxes as $key => $value) +    { +      if (is_string($key)) //key is email addr +      { +        $address = $key; +        $name = $value; +      } +      else +      { +        $address = $value; +        $name = null; +      } +      $this->_assertValidAddress($address); +      $actualMailboxes[$address] = $name; +    } +     +    return $actualMailboxes; +  } +   +  /** +   * Produces a compliant, formatted display-name based on the string given. +   * @param string $displayName as displayed +   * @param boolean $shorten the first line to make remove for header name +   * @return string +   * @access protected +   */ +  protected function createDisplayNameString($displayName, $shorten = false) +  { +    return $this->createPhrase($this, $displayName, +      $this->getCharset(), $this->getEncoder(), $shorten +      ); +  } +   +  /** +   * Creates a string form of all the mailboxes in the passed array. +   * @param string[] $mailboxes +   * @return string +   * @throws Swift_RfcComplianceException +   * @access protected +   */ +  protected function createMailboxListString(array $mailboxes) +  { +    return implode(', ', $this->_createNameAddressStrings($mailboxes)); +  } +   +  // -- Private methods +   +  /** +   * Return an array of strings conforming the the name-addr spec of RFC 2822. +   * @param string[] $mailboxes +   * @return string[] +   * @access private +   */ +  private function _createNameAddressStrings(array $mailboxes) +  { +    $strings = array(); +     +    foreach ($mailboxes as $email => $name) +    { +      $mailboxStr = $email; +      if (!is_null($name)) +      { +        $nameStr = $this->createDisplayNameString($name, empty($strings)); +        $mailboxStr = $nameStr . ' <' . $mailboxStr . '>'; +      } +      $strings[] = $mailboxStr; +    } +     +    return $strings; +  } +   +  /** +   * Throws an Exception if the address passed does not comply with RFC 2822. +   * @param string $address +   * @throws Exception If invalid. +   * @access protected +   */ +  private function _assertValidAddress($address) +  { +    if (!preg_match('/^' . $this->getGrammar('addr-spec') . '$/D', +      $address)) +    { +      throw new Swift_RfcComplianceException( +        'Address in mailbox given [' . $address . +        '] does not comply with RFC 2822, 3.6.2.' +        ); +    } +  } +   +} | 
