vendor/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php
author ymh <ymh.work@gmail.com>
Sat, 24 Sep 2011 15:40:41 +0200
changeset 0 7f95f8617b0b
permissions -rwxr-xr-x
first commit
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
 * A MIME entity, in a multipart message.
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_SimpleMimeEntity implements Swift_Mime_MimeEntity
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
  /** A collection of Headers for this mime entity */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
  private $_headers;
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 body as a string, or a stream */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
  private $_body;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
  /** The encoder that encodes the body into a streamable format */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
  private $_encoder;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
  /** The grammar to use for id validation */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
  private $_grammar;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
  /** A mime bounary, if any is used */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
  private $_boundary;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
  /** Mime types to be used based on the nesting level */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
  private $_compositeRanges = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    'multipart/mixed' => array(self::LEVEL_TOP, self::LEVEL_MIXED),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
    'multipart/alternative' => array(self::LEVEL_MIXED, self::LEVEL_ALTERNATIVE),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
    'multipart/related' => array(self::LEVEL_ALTERNATIVE, self::LEVEL_RELATED)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
    );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
  /** A set of filter rules to define what level an entity should be nested at */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
  private $_compoundLevelFilters = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
  /** The nesting level of this entity */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
  private $_nestingLevel = self::LEVEL_ALTERNATIVE;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
  /** A KeyCache instance used during encoding and streaming */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
  private $_cache;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
  /** Direct descendants of this entity */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
  private $_immediateChildren = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
  /** All descendants of this entity */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
  private $_children = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
  /** The maximum line length of the body of this entity */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
  private $_maxLineLength = 78;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
  /** The order in which alternative mime types should appear */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
  private $_alternativePartOrder = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    'text/plain' => 1,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    'text/html' => 2,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    'multipart/related' => 3
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
  /** The CID of this entity */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
  private $_id;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
  /** The key used for accessing the cache */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
  private $_cacheKey;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
  protected $_userContentType;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
   * Create a new SimpleMimeEntity with $headers, $encoder and $cache.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
   * @param Swift_Mime_HeaderSet $headers
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
   * @param Swift_Mime_ContentEncoder $encoder
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
   * @param Swift_KeyCache $cache
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
   * @param Swift_Mime_Grammar $grammar
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
  public function __construct(Swift_Mime_HeaderSet $headers,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
    Swift_Mime_Grammar $grammar)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
    $this->_cacheKey = uniqid();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
    $this->_cache = $cache;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
    $this->_headers = $headers;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
    $this->_grammar = $grammar;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    $this->setEncoder($encoder);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
    $this->_headers->defineOrdering(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
      array('Content-Type', 'Content-Transfer-Encoding')
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
    // This array specifies that, when the entire MIME document contains
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
    // $compoundLevel, then for each child within $level, if its Content-Type
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
    // is $contentType then it should be treated as if it's level is
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
    // $neededLevel instead.  I tried to write that unambiguously! :-\
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
    // Data Structure:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
    // array (
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
    //   $compoundLevel => array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
    //     $level => array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
    //       $contentType => $neededLevel
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
    //     )
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
    //   )
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
    // )
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    $this->_compoundLevelFilters = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
      (self::LEVEL_ALTERNATIVE + self::LEVEL_RELATED) => array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
        self::LEVEL_ALTERNATIVE => array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
          'text/plain' => self::LEVEL_ALTERNATIVE,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
          'text/html' => self::LEVEL_RELATED
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
      );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
    $this->_id = $this->getRandomId();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
   * Generate a new Content-ID or Message-ID for this MIME entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
  public function generateId()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
    $this->setId($this->getRandomId());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
    return $this->_id;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
   * Get the {@link Swift_Mime_HeaderSet} for this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
   * @return Swift_Mime_HeaderSet
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
  public function getHeaders()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
    return $this->_headers;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
   * Get the nesting level of this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
   * @return int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
   * @see LEVEL_TOP, LEVEL_MIXED, LEVEL_RELATED, LEVEL_ALTERNATIVE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
  public function getNestingLevel()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
    return $this->_nestingLevel;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
   * Get the Content-type of this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
  public function getContentType()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
    return $this->_getHeaderFieldModel('Content-Type');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
   * Set the Content-type of this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
   * @param string $type
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
  public function setContentType($type)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
    $this->_setContentTypeInHeaders($type);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
    // Keep track of the value so that if the content-type changes automatically
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
    // due to added child entities, it can be restored if they are later removed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
    $this->_userContentType = $type;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
    return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
   * Get the CID of this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
   * The CID will only be present in headers if a Content-ID header is present.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
  public function getId()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
    return $this->_headers->has($this->_getIdField())
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
      ? current((array) $this->_getHeaderFieldModel($this->_getIdField()))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
      : $this->_id;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
   * Set the CID of this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
   * @param string $id
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
  public function setId($id)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
    if (!$this->_setHeaderFieldModel($this->_getIdField(), $id))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
      $this->_headers->addIdHeader($this->_getIdField(), $id);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
    $this->_id = $id;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
    return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
   * Get the description of this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
   * This value comes from the Content-Description header if set.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
  public function getDescription()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
    return $this->_getHeaderFieldModel('Content-Description');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
   * Set the description of this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
   * This method sets a value in the Content-ID header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
   * @param string $description
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
  public function setDescription($description)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
    if (!$this->_setHeaderFieldModel('Content-Description', $description))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
      $this->_headers->addTextHeader('Content-Description', $description);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
    return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
   * Get the maximum line length of the body of this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
   * @return int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
  public function getMaxLineLength()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
    return $this->_maxLineLength;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
   * Set the maximum line length of lines in this body.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
   * Though not enforced by the library, lines should not exceed 1000 chars.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
   * @param int $length
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
  public function setMaxLineLength($length)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
    $this->_maxLineLength = $length;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
    return $this;
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
   * Get all children added to this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
   * @return array of Swift_Mime_Entity
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
  public function getChildren()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
    return $this->_children;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
   * Set all children of this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
   * @param array $children Swiift_Mime_Entity instances
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
   * @param int $compoundLevel For internal use only
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
  public function setChildren(array $children, $compoundLevel = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
    //TODO: Try to refactor this logic
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
    $compoundLevel = isset($compoundLevel)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
      ? $compoundLevel
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
      : $this->_getCompoundLevel($children)
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
    $immediateChildren = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
    $grandchildren = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
    $newContentType = $this->_userContentType;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
    foreach ($children as $child)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
      $level = $this->_getNeededChildLevel($child, $compoundLevel);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
      if (empty($immediateChildren)) //first iteration
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
        $immediateChildren = array($child);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
      else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
        $nextLevel = $this->_getNeededChildLevel($immediateChildren[0], $compoundLevel);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
        if ($nextLevel == $level)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
        {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
          $immediateChildren[] = $child;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
        elseif ($level < $nextLevel)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
        {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
          //Re-assign immediateChildren to grandchilden
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
          $grandchildren = array_merge($grandchildren, $immediateChildren);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
          //Set new children
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
          $immediateChildren = array($child);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
        else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
        {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
          $grandchildren[] = $child;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
    if (!empty($immediateChildren))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
      $lowestLevel = $this->_getNeededChildLevel($immediateChildren[0], $compoundLevel);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
      
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
      //Determine which composite media type is needed to accomodate the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
      // immediate children
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
      foreach ($this->_compositeRanges as $mediaType => $range)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
        if ($lowestLevel > $range[0]
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
          && $lowestLevel <= $range[1])
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
        {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
          $newContentType = $mediaType;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
          break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
      
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
      //Put any grandchildren in a subpart
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
      if (!empty($grandchildren))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
        $subentity = $this->_createChild();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
        $subentity->_setNestingLevel($lowestLevel);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
        $subentity->setChildren($grandchildren, $compoundLevel);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
        array_unshift($immediateChildren, $subentity);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
    $this->_immediateChildren = $immediateChildren;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
    $this->_children = $children;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
    $this->_setContentTypeInHeaders($newContentType);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
    $this->_fixHeaders();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
    $this->_sortChildren();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
    return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
   * Get the body of this entity as a string.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
  public function getBody()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
    return ($this->_body instanceof Swift_OutputByteStream)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
      ? $this->_readStream($this->_body)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
      : $this->_body;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
   * Set the body of this entity, either as a string, or as an instance of
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
   * {@link Swift_OutputByteStream}.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
   * @param mixed $body
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
   * @param string $contentType optional
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
  public function setBody($body, $contentType = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
    if ($body !== $this->_body)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
      $this->_clearCache();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
    $this->_body = $body;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
    if (isset($contentType))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
      $this->setContentType($contentType);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
    return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
   * Get the encoder used for the body of this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
   * @return Swift_Mime_ContentEncoder
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
  public function getEncoder()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
    return $this->_encoder;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
   * Set the encoder used for the body of this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
   * @param Swift_Mime_ContentEncoder $encoder
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
  public function setEncoder(Swift_Mime_ContentEncoder $encoder)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
    if ($encoder !== $this->_encoder)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
      $this->_clearCache();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
    $this->_encoder = $encoder;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
    $this->_setEncoding($encoder->getName());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
    $this->_notifyEncoderChanged($encoder);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
    return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
   * Get the boundary used to separate children in this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
  public function getBoundary()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
    if (!isset($this->_boundary))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
      $this->_boundary = '_=_swift_v4_' . time() . uniqid() . '_=_';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
    return $this->_boundary;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
   * Set the boundary used to separate children in this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
   * @param string $boundary
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
   * @throws Swift_RfcComplianceException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
  public function setBoundary($boundary)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
    $this->_assertValidBoundary($boundary);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
    $this->_boundary = $boundary;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
    return $this;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
   * Receive notification that the charset of this entity, or a parent entity
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
   * has changed.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
   * @param string $charset
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
  public function charsetChanged($charset)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
    $this->_notifyCharsetChanged($charset);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
   * Receive notification that the encoder of this entity or a parent entity
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
   * has changed.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
   * @param Swift_Mime_ContentEncoder $encoder
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
  public function encoderChanged(Swift_Mime_ContentEncoder $encoder)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
    $this->_notifyEncoderChanged($encoder);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
   * Get this entire entity as a string.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
  public function toString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
    $string = $this->_headers->toString();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
    if (isset($this->_body) && empty($this->_immediateChildren))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
      if ($this->_cache->hasKey($this->_cacheKey, 'body'))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
        $body = $this->_cache->getString($this->_cacheKey, 'body');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
      else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
        $body = "\r\n" . $this->_encoder->encodeString($this->getBody(), 0,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
          $this->getMaxLineLength()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
          );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
        $this->_cache->setString($this->_cacheKey, 'body', $body,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
          Swift_KeyCache::MODE_WRITE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
          );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
      $string .= $body;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
    if (!empty($this->_immediateChildren))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
      foreach ($this->_immediateChildren as $child)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
        $string .= "\r\n\r\n--" . $this->getBoundary() . "\r\n";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
        $string .= $child->toString();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
      $string .= "\r\n\r\n--" . $this->getBoundary() . "--\r\n";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
    return $string;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
   * Returns a string representation of this object.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
   * @see toString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
  public function __toString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
    return $this->toString();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
   * Write this entire entity to a {@link Swift_InputByteStream}.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
   * @param Swift_InputByteStream
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
  public function toByteStream(Swift_InputByteStream $is)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
    $is->write($this->_headers->toString());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
    $is->commit();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
    if (empty($this->_immediateChildren))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
      if (isset($this->_body))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
        if ($this->_cache->hasKey($this->_cacheKey, 'body'))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
        {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
          $this->_cache->exportToByteStream($this->_cacheKey, 'body', $is);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
        else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
        {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
          $cacheIs = $this->_cache->getInputByteStream($this->_cacheKey, 'body');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
          if ($cacheIs)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
          {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
            $is->bind($cacheIs);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
          }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
          
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
          $is->write("\r\n");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
          
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
          if ($this->_body instanceof Swift_OutputByteStream)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
          {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
            $this->_body->setReadPointer(0);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
            
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
            $this->_encoder->encodeByteStream($this->_body, $is, 0,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
              $this->getMaxLineLength()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
              );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
          }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
          else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
          {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
            $is->write($this->_encoder->encodeString(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
              $this->getBody(), 0, $this->getMaxLineLength()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
              ));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
          }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
          
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
          if ($cacheIs)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
          {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
            $is->unbind($cacheIs);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
          }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
    if (!empty($this->_immediateChildren))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
      foreach ($this->_immediateChildren as $child)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
        $is->write("\r\n\r\n--" . $this->getBoundary() . "\r\n");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
        $child->toByteStream($is);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
      $is->write("\r\n\r\n--" . $this->getBoundary() . "--\r\n");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
  // -- Protected methods
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
   * Get the name of the header that provides the ID of this entity */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
  protected function _getIdField()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
    return 'Content-ID';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
   * Get the model data (usually an array or a string) for $field.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
  protected function _getHeaderFieldModel($field)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
    if ($this->_headers->has($field))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
      return $this->_headers->get($field)->getFieldBodyModel();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
   * Set the model data for $field.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
  protected function _setHeaderFieldModel($field, $model)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
    if ($this->_headers->has($field))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
      $this->_headers->get($field)->setFieldBodyModel($model);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
      return true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
    else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
      return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
   * Get the parameter value of $parameter on $field header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
  protected function _getHeaderParameter($field, $parameter)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
    if ($this->_headers->has($field))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
      return $this->_headers->get($field)->getParameter($parameter);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
   * Set the parameter value of $parameter on $field header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
  protected function _setHeaderParameter($field, $parameter, $value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
    if ($this->_headers->has($field))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
      $this->_headers->get($field)->setParameter($parameter, $value);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
      return true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
    else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
      return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
   * Re-evaluate what content type and encoding should be used on this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
  protected function _fixHeaders()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
    if (count($this->_immediateChildren))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
      $this->_setHeaderParameter('Content-Type', 'boundary',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
        $this->getBoundary()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
        );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
      $this->_headers->remove('Content-Transfer-Encoding');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
    else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
      $this->_setHeaderParameter('Content-Type', 'boundary', null);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
      $this->_setEncoding($this->_encoder->getName());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
   * Get the KeyCache used in this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
  protected function _getCache()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
    return $this->_cache;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
   * Get the grammar used for validation.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
   * @return Swift_Mime_Grammar
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
  protected function _getGrammar()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
    return $this->_grammar;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
   * Empty the KeyCache for this entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
  protected function _clearCache()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
    $this->_cache->clearKey($this->_cacheKey, 'body');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
   * Returns a random Content-ID or Message-ID.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
  protected function getRandomId()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
    $idLeft = time() . '.' . uniqid();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
    $idRight = !empty($_SERVER['SERVER_NAME'])
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
      ? $_SERVER['SERVER_NAME']
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
      : 'swift.generated';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
    $id = $idLeft . '@' . $idRight;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
    try
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
      $this->_assertValidId($id);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
    catch (Swift_RfcComplianceException $e)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
      $id = $idLeft . '@swift.generated';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
    return $id;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
  // -- Private methods
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
  private function _readStream(Swift_OutputByteStream $os)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
    $string = '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
    while (false !== $bytes = $os->read(8192))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
      $string .= $bytes;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
    return $string;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
  private function _setEncoding($encoding)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
    if (!$this->_setHeaderFieldModel('Content-Transfer-Encoding', $encoding))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
      $this->_headers->addTextHeader('Content-Transfer-Encoding', $encoding);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
  private function _assertValidBoundary($boundary)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
    if (!preg_match(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
      '/^[a-z0-9\'\(\)\+_\-,\.\/:=\?\ ]{0,69}[a-z0-9\'\(\)\+_\-,\.\/:=\?]$/Di',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
      $boundary))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
      throw new Swift_RfcComplianceException('Mime boundary set is not RFC 2046 compliant.');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
  private function _setContentTypeInHeaders($type)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
    if (!$this->_setHeaderFieldModel('Content-Type', $type))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
      $this->_headers->addParameterizedHeader('Content-Type', $type);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
  private function _setNestingLevel($level)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
    $this->_nestingLevel = $level;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
  private function _getCompoundLevel($children)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
    $level = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
    foreach ($children as $child)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
      $level |= $child->getNestingLevel();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
    return $level;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
  private function _getNeededChildLevel($child, $compoundLevel)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
    $filter = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
    foreach ($this->_compoundLevelFilters as $bitmask => $rules)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
      if (($compoundLevel & $bitmask) === $bitmask)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
        $filter = $rules + $filter;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
    $realLevel = $child->getNestingLevel();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
    $lowercaseType = strtolower($child->getContentType());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
    if (isset($filter[$realLevel])
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
      && isset($filter[$realLevel][$lowercaseType]))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
      return $filter[$realLevel][$lowercaseType];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
    else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
      return $realLevel;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
  private function _createChild()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
    return new self($this->_headers->newInstance(),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
      $this->_encoder, $this->_cache, $this->_grammar);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
  private function _notifyEncoderChanged(Swift_Mime_ContentEncoder $encoder)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
    foreach ($this->_immediateChildren as $child)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
      $child->encoderChanged($encoder);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
  private function _notifyCharsetChanged($charset)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
    $this->_encoder->charsetChanged($charset);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
    $this->_headers->charsetChanged($charset);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
    foreach ($this->_immediateChildren as $child)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
      $child->charsetChanged($charset);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
  private function _sortChildren()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
    $shouldSort = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
    foreach ($this->_immediateChildren as $child)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
      //NOTE: This include alternative parts moved into a related part
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
      if ($child->getNestingLevel() == self::LEVEL_ALTERNATIVE)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
        $shouldSort = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
        break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
    //Sort in order of preference, if there is one
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
    if ($shouldSort)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
      usort($this->_immediateChildren, array($this, '_childSortAlgorithm'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
  private function _childSortAlgorithm($a, $b)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
    $typePrefs = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
    $types = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
      strtolower($a->getContentType()),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
      strtolower($b->getContentType())
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
      );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
    foreach ($types as $type)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
      $typePrefs[] = (array_key_exists($type, $this->_alternativePartOrder))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
        ? $this->_alternativePartOrder[$type]
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
        : (max($this->_alternativePartOrder) + 1);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
    return ($typePrefs[0] >= $typePrefs[1]) ? 1 : -1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
  // -- Destructor
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
   * Empties it's own contents from the cache.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
  public function __destruct()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
    $this->_cache->clearAll($this->_cacheKey);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
   * Throws an Exception if the id passed does not comply with RFC 2822.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
   * @param string $id
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
   * @throws Swift_RfcComplianceException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
  private function _assertValidId($id)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
    if (!preg_match(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
      '/^' . $this->_grammar->getDefinition('id-left') . '@' .
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
      $this->_grammar->getDefinition('id-right') . '$/D',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
      $id
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
      ))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
      throw new Swift_RfcComplianceException(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
        'Invalid ID given <' . $id . '>'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
        );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
}