vendor/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php
author cavaliet
Mon, 07 Jul 2014 17:23:47 +0200
changeset 122 d672f7dd74dc
parent 0 7f95f8617b0b
permissions -rwxr-xr-x
Added tag V00.17 for changeset ada5f3d8b5b4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
/*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * This file is part of SwiftMailer.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * (c) 2004-2009 Chris Corbyn
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * For the full copyright and license information, please view the LICENSE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * file that was distributed with this source code.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
/**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * An ID MIME Header for something like Message-ID or Content-ID.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 * @package Swift
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * @subpackage Mime
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * @author Chris Corbyn
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
class Swift_Mime_Headers_IdentificationHeader
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
  extends Swift_Mime_Headers_AbstractHeader
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
   * The IDs used in the value of this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
   * This may hold multiple IDs or just a single ID.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
   * @var string[]
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
   * @access private
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
  private $_ids = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
   * Creates a new IdentificationHeader with the given $name and $id.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
   * @param string $name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
   * @param Swift_Mime_Grammar $grammar
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
  public function __construct($name, Swift_Mime_Grammar $grammar)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    $this->setFieldName($name);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    parent::__construct($grammar);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
   * Get the type of Header that this instance represents.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
   * @return int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
   * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
   * @see TYPE_DATE, TYPE_ID, TYPE_PATH
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
  public function getFieldType()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    return self::TYPE_ID;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
   * Set the model for the field body.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
   * This method takes a string ID, or an array of IDs
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
   * @param mixed $model
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
   * @throws Swift_RfcComplianceException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
  public function setFieldBodyModel($model)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
    $this->setId($model);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
   * Get the model for the field body.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
   * This method returns an array of IDs
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
   * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
  public function getFieldBodyModel()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    return $this->getIds();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
   * Set the ID used in the value of this header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
   * @param string $id
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
   * @throws Swift_RfcComplianceException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
  public function setId($id)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    $this->setIds(array($id));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
   * Get the ID used in the value of this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
   * If multiple IDs are set only the first is returned.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
  public function getId()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
    if (count($this->_ids) > 0)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
      return $this->_ids[0];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
   * Set a collection of IDs to use in the value of this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
   * @param string[] $ids
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
   * @throws Swift_RfcComplianceException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
  public function setIds(array $ids)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
    $actualIds = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
    foreach ($ids as $k => $id)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
      $this->_assertValidId($id);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
      $actualIds[] = $id;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
    $this->clearCachedValueIf($this->_ids != $actualIds);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
    $this->_ids = $actualIds;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
   * Get the list of IDs used in this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
   * @return string[]
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
  public function getIds()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
    return $this->_ids;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
   * Get the string value of the body in this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
   * This is not necessarily RFC 2822 compliant since folding white space will
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
   * not be added at this stage (see {@link toString()} for that).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
   * @see toString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
   * @throws Swift_RfcComplianceException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
  public function getFieldBody()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
    if (!$this->getCachedValue())
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
      $angleAddrs = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
      foreach ($this->_ids as $id)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
        $angleAddrs[] = '<' . $id . '>';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
      $this->setCachedValue(implode(' ', $angleAddrs));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
    return $this->getCachedValue();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
   * Throws an Exception if the id passed does not comply with RFC 2822.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
   * @param string $id
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
   * @throws Swift_RfcComplianceException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
  private function _assertValidId($id)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
    if (!preg_match(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
      '/^' . $this->getGrammar()->getDefinition('id-left') . '@' .
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
      $this->getGrammar()->getDefinition('id-right') . '$/D',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
      $id
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
      ))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
      throw new Swift_RfcComplianceException(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
        'Invalid ID given <' . $id . '>'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
        );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
}