diff options
Diffstat (limited to 'applications/core/lib/Zend/Mime/Part.php')
| -rw-r--r-- | applications/core/lib/Zend/Mime/Part.php | 216 | 
1 files changed, 216 insertions, 0 deletions
| diff --git a/applications/core/lib/Zend/Mime/Part.php b/applications/core/lib/Zend/Mime/Part.php new file mode 100644 index 0000000..010f35b --- /dev/null +++ b/applications/core/lib/Zend/Mime/Part.php @@ -0,0 +1,216 @@ +<?php +/** + * Zend Framework + * + * LICENSE + * + * This source file is subject to the new BSD license that is bundled + * with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://framework.zend.com/license/new-bsd + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to [email protected] so we can send you a copy immediately. + * + * @category   Zend + * @package    Zend_Mime + * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) + * @license    http://framework.zend.com/license/new-bsd     New BSD License + */ + +/** + * Zend_Mime + */ +require_once 'Zend/Mime.php'; + +/** + * Class representing a MIME part. + * + * @category   Zend + * @package    Zend_Mime + * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) + * @license    http://framework.zend.com/license/new-bsd     New BSD License + */ +class Zend_Mime_Part { + +    public $type = Zend_Mime::TYPE_OCTETSTREAM; +    public $encoding = Zend_Mime::ENCODING_8BIT; +    public $id; +    public $disposition; +    public $filename; +    public $description; +    public $charset; +    public $boundary; +    public $location; +    public $language; +    protected $_content; +    protected $_isStream = false; + + +    /** +     * create a new Mime Part. +     * The (unencoded) content of the Part as passed +     * as a string or stream +     * +     * @param mixed $content  String or Stream containing the content +     */ +    public function __construct($content) +    { +        $this->_content = $content; +        if (is_resource($content)) { +            $this->_isStream = true; +        } +    } + +    /** +     * @todo setters/getters +     * @todo error checking for setting $type +     * @todo error checking for setting $encoding +     */ + +    /** +     * check if this part can be read as a stream. +     * if true, getEncodedStream can be called, otherwise +     * only getContent can be used to fetch the encoded +     * content of the part +     * +     * @return bool +     */ +    public function isStream() +    { +      return $this->_isStream; +    } + +    /** +     * if this was created with a stream, return a filtered stream for +     * reading the content. very useful for large file attachments. +     * +     * @return stream +     * @throws Zend_Mime_Exception if not a stream or unable to append filter +     */ +    public function getEncodedStream() +    { +        if (!$this->_isStream) { +            require_once 'Zend/Mime/Exception.php'; +            throw new Zend_Mime_Exception('Attempt to get a stream from a string part'); +        } + +        //stream_filter_remove(); // ??? is that right? +        switch ($this->encoding) { +            case Zend_Mime::ENCODING_QUOTEDPRINTABLE: +                $filter = stream_filter_append( +                    $this->_content, +                    'convert.quoted-printable-encode', +                    STREAM_FILTER_READ, +                    array( +                        'line-length'      => 76, +                        'line-break-chars' => Zend_Mime::LINEEND +                    ) +                ); +                if (!is_resource($filter)) { +                    require_once 'Zend/Mime/Exception.php'; +                    throw new Zend_Mime_Exception('Failed to append quoted-printable filter'); +                } +                break; +            case Zend_Mime::ENCODING_BASE64: +                $filter = stream_filter_append( +                    $this->_content, +                    'convert.base64-encode', +                    STREAM_FILTER_READ, +                    array( +                        'line-length'      => 76, +                        'line-break-chars' => Zend_Mime::LINEEND +                    ) +                ); +                if (!is_resource($filter)) { +                    require_once 'Zend/Mime/Exception.php'; +                    throw new Zend_Mime_Exception('Failed to append base64 filter'); +                } +                break; +            default: +        } +        return $this->_content; +    } + +    /** +     * Get the Content of the current Mime Part in the given encoding. +     * +     * @return String +     */ +    public function getContent($EOL = Zend_Mime::LINEEND) +    { +        if ($this->_isStream) { +            return stream_get_contents($this->getEncodedStream()); +        } else { +            return Zend_Mime::encode($this->_content, $this->encoding, $EOL); +        } +    } + +    /** +     * Create and return the array of headers for this MIME part +     * +     * @access public +     * @return array +     */ +    public function getHeadersArray($EOL = Zend_Mime::LINEEND) +    { +        $headers = array(); + +        $contentType = $this->type; +        if ($this->charset) { +            $contentType .= '; charset=' . $this->charset; +        } + +        if ($this->boundary) { +            $contentType .= ';' . $EOL +                          . " boundary=\"" . $this->boundary . '"'; +        } + +        $headers[] = array('Content-Type', $contentType); + +        if ($this->encoding) { +            $headers[] = array('Content-Transfer-Encoding', $this->encoding); +        } + +        if ($this->id) { +            $headers[]  = array('Content-ID', '<' . $this->id . '>'); +        } + +        if ($this->disposition) { +            $disposition = $this->disposition; +            if ($this->filename) { +                $disposition .= '; filename="' . $this->filename . '"'; +            } +            $headers[] = array('Content-Disposition', $disposition); +        } + +        if ($this->description) { +            $headers[] = array('Content-Description', $this->description); +        } + +        if ($this->location) { +            $headers[] = array('Content-Location', $this->location); +        } + +        if ($this->language){ +            $headers[] = array('Content-Language', $this->language); +        } + +        return $headers; +    } + +    /** +     * Return the headers for this part as a string +     * +     * @return String +     */ +    public function getHeaders($EOL = Zend_Mime::LINEEND) +    { +        $res = ''; +        foreach ($this->getHeadersArray($EOL) as $header) { +            $res .= $header[0] . ': ' . $header[1] . $EOL; +        } + +        return $res; +    } +} | 
