web/lib/Zend/Mail/Part.php
changeset 807 877f952ae2bd
parent 207 621fa6caec0c
child 1230 68c69c656a2c
--- a/web/lib/Zend/Mail/Part.php	Thu Mar 21 17:31:31 2013 +0100
+++ b/web/lib/Zend/Mail/Part.php	Thu Mar 21 19:50:53 2013 +0100
@@ -14,9 +14,9 @@
  *
  * @category   Zend
  * @package    Zend_Mail
- * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  * @license    http://framework.zend.com/license/new-bsd     New BSD License
- * @version    $Id: Part.php 20096 2010-01-06 02:05:09Z bkarwin $
+ * @version    $Id: Part.php 24759 2012-05-05 02:58:55Z adamlundrigan $
  */
 
 
@@ -34,7 +34,7 @@
 /**
  * @category   Zend
  * @package    Zend_Mail
- * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  * @license    http://framework.zend.com/license/new-bsd     New BSD License
  */
 class Zend_Mail_Part implements RecursiveIterator, Zend_Mail_Part_Interface
@@ -86,6 +86,12 @@
      * @var int
      */
     protected $_messageNum = 0;
+    
+    /**
+     * Class to use when creating message parts
+     * @var string 
+     */
+    protected $_partClass;
 
     /**
      * Public constructor
@@ -122,6 +128,10 @@
             $this->_mail       = $params['handler'];
             $this->_messageNum = $params['id'];
         }
+        
+        if (isset($params['partclass'])) {
+            $this->setPartClass($params['partclass']);
+        }
 
         if (isset($params['raw'])) {
             Zend_Mime_Decode::splitMessage($params['raw'], $this->_headers, $this->_content);
@@ -140,6 +150,44 @@
             }
         }
     }
+    
+    /**
+     * Set name pf class used to encapsulate message parts
+     * @param string $class
+     * @return Zend_Mail_Part
+     */
+    public function setPartClass($class)
+    {
+        if ( !class_exists($class) ) {
+            /**
+             * @see Zend_Mail_Exception
+             */
+            require_once 'Zend/Mail/Exception.php';
+            throw new Zend_Mail_Exception("Class '{$class}' does not exist");
+        }
+        if ( !is_subclass_of($class, 'Zend_Mail_Part_Interface') ) {
+            /**
+             * @see Zend_Mail_Exception
+             */
+            require_once 'Zend/Mail/Exception.php';
+            throw new Zend_Mail_Exception("Class '{$class}' must implement Zend_Mail_Part_Interface");
+        }
+        
+        $this->_partClass = $class;
+        return $this;
+    }
+    
+    /**
+     * Retrieve the class name used to encapsulate message parts
+     * @return string 
+     */
+    public function getPartClass()
+    {
+        if ( !$this->_partClass ) {
+            $this->_partClass = __CLASS__;
+        }
+        return $this->_partClass;
+    }
 
     /**
      * Check if part is a multipart message
@@ -223,9 +271,10 @@
         if ($parts === null) {
             return;
         }
+        $partClass = $this->getPartClass();
         $counter = 1;
         foreach ($parts as $part) {
-            $this->_parts[$counter++] = new self(array('headers' => $part['header'], 'content' => $part['body']));
+            $this->_parts[$counter++] = new $partClass(array('headers' => $part['header'], 'content' => $part['body']));
         }
     }