123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- <?php
-
-
-
-
-
- class Swift_Mime_Headers_ParameterizedHeader
- extends Swift_Mime_Headers_UnstructuredHeader
- implements Swift_Mime_ParameterizedHeader
- {
-
-
-
- private $_paramEncoder;
-
-
-
- private $_params = array();
-
-
-
- private $_tokenRe;
-
-
-
- public function __construct($name, Swift_Mime_HeaderEncoder $encoder,
- Swift_Encoder $paramEncoder = null, Swift_Mime_Grammar $grammar)
- {
- parent::__construct($name, $encoder, $grammar);
- $this->_paramEncoder = $paramEncoder;
- $this->_tokenRe = '(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E]+)';
- }
-
-
-
- public function getFieldType()
- {
- return self::TYPE_PARAMETERIZED;
- }
-
-
-
- public function setCharset($charset)
- {
- parent::setCharset($charset);
- if (isset($this->_paramEncoder))
- {
- $this->_paramEncoder->charsetChanged($charset);
- }
- }
-
-
-
- public function setParameter($parameter, $value)
- {
- $this->setParameters(array_merge($this->getParameters(), array($parameter => $value)));
- }
-
-
-
- public function getParameter($parameter)
- {
- $params = $this->getParameters();
- return array_key_exists($parameter, $params)
- ? $params[$parameter]
- : null;
- }
-
-
-
- public function setParameters(array $parameters)
- {
- $this->clearCachedValueIf($this->_params != $parameters);
- $this->_params = $parameters;
- }
-
-
-
- public function getParameters()
- {
- return $this->_params;
- }
-
-
-
- public function getFieldBody() //TODO: Check caching here
- {
- $body = parent::getFieldBody();
- foreach ($this->_params as $name => $value)
- {
- if (!is_null($value))
- {
-
- $body .= '; ' . $this->_createParameter($name, $value);
- }
- }
- return $body;
- }
-
-
-
-
-
- protected function toTokens($string = null)
- {
- $tokens = parent::toTokens(parent::getFieldBody());
-
-
- foreach ($this->_params as $name => $value)
- {
- if (!is_null($value))
- {
-
- $tokens[count($tokens)-1] .= ';';
- $tokens = array_merge($tokens, $this->generateTokenLines(
- ' ' . $this->_createParameter($name, $value)
- ));
- }
- }
-
- return $tokens;
- }
-
-
-
-
-
- private function _createParameter($name, $value)
- {
- $origValue = $value;
-
- $encoded = false;
-
- $maxValueLength = $this->getMaxLineLength() - strlen($name . '=*N"";') - 1;
- $firstLineOffset = 0;
-
-
- if (!preg_match('/^' . $this->_tokenRe . '$/D', $value))
- {
-
-
- if (!preg_match('/^' . $this->getGrammar()->getDefinition('text') . '*$/D', $value))
- {
- $encoded = true;
-
- $maxValueLength = $this->getMaxLineLength() - strlen($name . '*N*="";') - 1;
- $firstLineOffset = strlen(
- $this->getCharset() . "'" . $this->getLanguage() . "'"
- );
- }
- }
-
-
- if ($encoded || strlen($value) > $maxValueLength)
- {
- if (isset($this->_paramEncoder))
- {
- $value = $this->_paramEncoder->encodeString(
- $origValue, $firstLineOffset, $maxValueLength
- );
- }
- else
- {
- $value = $this->getTokenAsEncodedWord($origValue);
- $encoded = false;
- }
- }
-
- $valueLines = isset($this->_paramEncoder) ? explode("\r\n", $value) : array($value);
-
-
- if (count($valueLines) > 1)
- {
- $paramLines = array();
- foreach ($valueLines as $i => $line)
- {
- $paramLines[] = $name . '*' . $i .
- $this->_getEndOfParameterValue($line, true, $i == 0);
- }
- return implode(";\r\n ", $paramLines);
- }
- else
- {
- return $name . $this->_getEndOfParameterValue(
- $valueLines[0], $encoded, true
- );
- }
- }
-
-
-
- private function _getEndOfParameterValue($value, $encoded = false, $firstLine = false)
- {
- if (!preg_match('/^' . $this->_tokenRe . '$/D', $value))
- {
- $value = '"' . $value . '"';
- }
- $prepend = '=';
- if ($encoded)
- {
- $prepend = '*=';
- if ($firstLine)
- {
- $prepend = '*=' . $this->getCharset() . "'" . $this->getLanguage() .
- "'";
- }
- }
- return $prepend . $value;
- }
-
- }
|