. */ //@require 'Swift/Mime/SimpleMimeEntity.php'; //@require 'Swift/Mime/ContentEncoder.php'; //@require 'Swift/Mime/HeaderSet.php'; //@require 'Swift/FileStream.php'; //@require 'Swift/KeyCache.php'; /** * An attachment, in a multipart message. * @package Swift * @subpackage Mime * @author Chris Corbyn */ class Swift_Mime_Attachment extends Swift_Mime_SimpleMimeEntity { /** Recognized MIME types */ private $_mimeTypes = array(); /** * Create a new Attachment with $headers, $encoder and $cache. * @param Swift_Mime_HeaderSet $headers * @param Swift_Mime_ContentEncoder $encoder * @param Swift_KeyCache $cache * @param array $mimeTypes optional */ public function __construct(Swift_Mime_HeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, $mimeTypes = array()) { parent::__construct($headers, $encoder, $cache); $this->setDisposition('attachment'); $this->setContentType('application/octet-stream'); $this->_mimeTypes = $mimeTypes; } /** * Get the nesting level used for this attachment. * Always returns {@link LEVEL_MIXED}. * @return int */ public function getNestingLevel() { return self::LEVEL_MIXED; } /** * Get the Content-Disposition of this attachment. * By default attachments have a disposition of "attachment". * @return string */ public function getDisposition() { return $this->_getHeaderFieldModel('Content-Disposition'); } /** * Set the Content-Disposition of this attachment. * @param string $disposition */ public function setDisposition($disposition) { if (!$this->_setHeaderFieldModel('Content-Disposition', $disposition)) { $this->getHeaders()->addParameterizedHeader( 'Content-Disposition', $disposition ); } return $this; } /** * Get the filename of this attachment when downloaded. * @return string */ public function getFilename() { return $this->_getHeaderParameter('Content-Disposition', 'filename'); } /** * Set the filename of this attachment. * @param string $filename */ public function setFilename($filename) { $this->_setHeaderParameter('Content-Disposition', 'filename', $filename); $this->_setHeaderParameter('Content-Type', 'name', $filename); return $this; } /** * Get the file size of this attachment. * @return int */ public function getSize() { return $this->_getHeaderParameter('Content-Disposition', 'size'); } /** * Set the file size of this attachment. * @param int $size */ public function setSize($size) { $this->_setHeaderParameter('Content-Disposition', 'size', $size); return $this; } /** * Set the file that this attachment is for. * @param Swift_FileStream $file * @param string $contentType optional */ public function setFile(Swift_FileStream $file, $contentType = null) { $this->setFilename(basename($file->getPath())); $this->setBody($file, $contentType); if (!isset($contentType)) { $extension = strtolower(substr( $file->getPath(), strrpos($file->getPath(), '.') + 1 )); if (array_key_exists($extension, $this->_mimeTypes)) { $this->setContentType($this->_mimeTypes[$extension]); } } return $this; } }