vendor/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.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 abstract base MIME Header.
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_ParameterizedHeader
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
  extends Swift_Mime_Headers_UnstructuredHeader
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
  implements Swift_Mime_ParameterizedHeader
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
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
   * The Encoder used to encode the parameters.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
   * @var Swift_Encoder
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 $_paramEncoder;
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
   * The parameters as an associative array.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
   * @var string[]
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
   * @access private
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
  private $_params = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
   * RFC 2231's definition of a token.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
   * @var string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
   * @access private
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
  private $_tokenRe;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
   * Creates a new ParameterizedHeader with $name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
   * @param string $name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
   * @param Swift_Mime_HeaderEncoder $encoder
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
   * @param Swift_Encoder $paramEncoder, optional
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
   * @param Swift_Mime_Grammar $grammar
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
   */ 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
  public function __construct($name, Swift_Mime_HeaderEncoder $encoder,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
    Swift_Encoder $paramEncoder = null, Swift_Mime_Grammar $grammar)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    parent::__construct($name, $encoder, $grammar);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
    $this->_paramEncoder = $paramEncoder;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    $this->_tokenRe = '(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E]+)';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
   * Get the type of Header that this instance represents.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
   * @return int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
   * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
   * @see TYPE_DATE, TYPE_ID, TYPE_PATH
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
  public function getFieldType()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    return self::TYPE_PARAMETERIZED;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
   * Set the character set used in this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
   * @param string $charset
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
  public function setCharset($charset)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
    parent::setCharset($charset);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
    if (isset($this->_paramEncoder))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
      $this->_paramEncoder->charsetChanged($charset);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    }
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
   * Set the value of $parameter.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
   * @param string $parameter
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
   * @param string $value
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 setParameter($parameter, $value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
    $this->setParameters(array_merge($this->getParameters(), array($parameter => $value)));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
   * Get the value of $parameter.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
  public function getParameter($parameter)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
    $params = $this->getParameters();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
    return array_key_exists($parameter, $params)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
      ? $params[$parameter]
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
      : null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
   * Set an associative array of parameter names mapped to values.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
   * @param string[]
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
  public function setParameters(array $parameters)
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->_params != $parameters);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
    $this->_params = $parameters;
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
   * Returns an associative array of parameter names mapped to values.
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 getParameters()
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->_params;
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 value of this header prepared for rendering.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
  public function getFieldBody() //TODO: Check caching here
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
    $body = parent::getFieldBody();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
    foreach ($this->_params as $name => $value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
      if (!is_null($value))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
        //Add the parameter
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
        $body .= '; ' . $this->_createParameter($name, $value);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
    return $body;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
  // -- Protected methods
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
   * Generate a list of all tokens in the final header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
   * This doesn't need to be overridden in theory, but it is for implementation
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
   * reasons to prevent potential breakage of attributes.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
   * @return string[]
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
   * @access protected
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
  protected function toTokens($string = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
    $tokens = parent::toTokens(parent::getFieldBody());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
    //Try creating any parameters
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
    foreach ($this->_params as $name => $value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
      if (!is_null($value))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
        //Add the semi-colon separator
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
        $tokens[count($tokens)-1] .= ';';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
        $tokens = array_merge($tokens, $this->generateTokenLines(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
          ' ' . $this->_createParameter($name, $value)
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
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
    return $tokens;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
  // -- Private methods
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
   * Render a RFC 2047 compliant header parameter from the $name and $value.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
   * @param string $name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
   * @param string $value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
   * @access private
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
  private function _createParameter($name, $value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
    $origValue = $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
    $encoded = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
    //Allow room for parameter name, indices, "=" and DQUOTEs
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
    $maxValueLength = $this->getMaxLineLength() - strlen($name . '=*N"";') - 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
    $firstLineOffset = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
    //If it's not already a valid parameter value...
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
    if (!preg_match('/^' . $this->_tokenRe . '$/D', $value))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
      //TODO: text, or something else??
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
      //... and it's not ascii
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
      if (!preg_match('/^' . $this->getGrammar()->getDefinition('text') . '*$/D', $value))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
        $encoded = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
        //Allow space for the indices, charset and language
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
        $maxValueLength = $this->getMaxLineLength() - strlen($name . '*N*="";') - 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
        $firstLineOffset = strlen(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
          $this->getCharset() . "'" . $this->getLanguage() . "'"
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
          );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
    //Encode if we need to
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
    if ($encoded || strlen($value) > $maxValueLength)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
      if (isset($this->_paramEncoder))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
        $value = $this->_paramEncoder->encodeString(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
          $origValue, $firstLineOffset, $maxValueLength
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
          );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
      else //We have to go against RFC 2183/2231 in some areas for interoperability
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
        $value = $this->getTokenAsEncodedWord($origValue);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
        $encoded = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
    $valueLines = isset($this->_paramEncoder) ? explode("\r\n", $value) : array($value);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
    //Need to add indices
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
    if (count($valueLines) > 1)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
      $paramLines = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
      foreach ($valueLines as $i => $line)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
        $paramLines[] = $name . '*' . $i .
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
          $this->_getEndOfParameterValue($line, $encoded, $i == 0);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
      return implode(";\r\n ", $paramLines);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
    else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
      return $name . $this->_getEndOfParameterValue(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
        $valueLines[0], $encoded, true
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
        );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
   * Returns the parameter value from the "=" and beyond.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
   * @param string $value to append
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
   * @param boolean $encoded
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
   * @param boolean $firstLine
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
   * @access private
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
  private function _getEndOfParameterValue($value, $encoded = false, $firstLine = false)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
    if (!preg_match('/^' . $this->_tokenRe . '$/D', $value))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
      $value = '"' . $value . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
    $prepend = '=';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
    if ($encoded)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
      $prepend = '*=';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
      if ($firstLine)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
        $prepend = '*=' . $this->getCharset() . "'" . $this->getLanguage() .
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
          "'";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
    return $prepend . $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
}