Zend Framework - Zend_Mail
Current view: /usr/local/lib/zend/trunk/incubator/library/Zend/Mail/Part.php
Date: Tue Feb 6 18:30:06 CET 2007 Executable lines: 76
Code covered: 81.58% Executed lines: 62
Legend: executed not executed dead code


       1                 : <?php                                                                                                             
       2                 : /**                                                                                                               
       3                 :  * Zend Framework                                                                                                 
       4                 :  *                                                                                                                
       5                 :  * LICENSE                                                                                                        
       6                 :  *                                                                                                                
       7                 :  * This source file is subject to version 1.0 of the Zend Framework                                               
       8                 :  * license, that is bundled with this package in the file LICENSE, and                                            
       9                 :  * is available through the world-wide-web at the following URL:                                                  
      10                 :  * http://www.zend.com/license/framework/1_0.txt. If you did not receive                                          
      11                 :  * a copy of the Zend Framework license and are unable to obtain it                                               
      12                 :  * through the world-wide-web, please send a note to license@zend.com                                             
      13                 :  * so we can mail you a copy immediately.                                                                         
      14                 :  *                                                                                                                
      15                 :  * @package    Zend_Mail                                                                                          
      16                 :  * @copyright  Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com)                           
      17                 :  * @license    http://www.zend.com/license/framework/1_0.txt Zend Framework License version 1.0                   
      18                 :  */                                                                                                               
      19                 :                                                                                                                   
      20                 :                                                                                                                   
      21                 : /**                                                                                                               
      22                 :  * Zend_Mime_Decode                                                                                               
      23                 :  */                                                                                                               
      24                 : require_once 'Zend/Mime/Decode.php';                                                                              
      25                 :                                                                                                                   
      26                 : /**                                                                                                               
      27                 :  * Zend_Mail_Exception                                                                                            
      28                 :  */                                                                                                               
      29                 : require_once 'Zend/Mail/Exception.php';                                                                           
      30                 :                                                                                                                   
      31                 : /**                                                                                                               
      32                 :  * @package    Zend_Mail                                                                                          
      33                 :  * @copyright  Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com)                           
      34                 :  * @license    http://www.zend.com/license/framework/1_0.txt Zend Framework License version 1.0                   
      35                 :  */                                                                                                               
      36                 : class Zend_Mail_Part                                                                                              
      37                 : {                                                                                                                 
      38                 :     /**                                                                                                           
      39                 :      * headers of part as array                                                                                   
      40                 :      */                                                                                                           
      41                 :     protected $_headers;                                                                                          
      42                 :                                                                                                                   
      43                 :     /**                                                                                                           
      44                 :      * raw part body                                                                                              
      45                 :      */                                                                                                           
      46                 :     protected $_content;                                                                                          
      47                 :                                                                                                                   
      48                 :     protected $_topLines;                                                                                         
      49                 :                                                                                                                   
      50                 :     protected $_parts;                                                                                            
      51                 :                                                                                                                   
      52                 :     /**                                                                                                           
      53                 :      * mail handler                                                                                               
      54                 :      */                                                                                                           
      55                 :     protected $_mail;                                                                                             
      56                 :                                                                                                                   
      57                 :     /**                                                                                                           
      58                 :      * message number for mail handler                                                                            
      59                 :      */                                                                                                           
      60                 :     protected $_messageNum;                                                                                       
      61                 :                                                                                                                   
      62                 :     /**                                                                                                           
      63                 :      * Public constructor                                                                                         
      64                 :      *                                                                                                            
      65                 :      * @param string $rawMessage  full message with or without headers                                            
      66                 :      */                                                                                                           
      67                 :     public function __construct(array $params)                                                                    
      68                 :     {                                                                                                             
      69              37 :         if(isset($params['handler'])) {                                                                           
      70              26 :             if(!$params['handler'] instanceof Zend_Mail_Storage_Abstract) {                                       
      71               1 :                 throw new Zend_Mail_Exception('handler is not a valid mail handler');                             
      72                 :             }                                                                                                     
      73              25 :             if(!isset($params['id'])) {                                                                           
      74               1 :                 throw new Zend_Mail_Exception('need a message id with a handler');                                
      75                 :             }                                                                                                     
      76                 :                                                                                                                   
      77              24 :             $this->_mail       = $params['handler'];                                                              
      78              24 :             $this->_messageNum = $params['id'];                                                                   
      79              24 :         }                                                                                                         
      80                 :                                                                                                                   
      81              35 :         if(isset($params['raw'])) {                                                                               
      82              11 :             Zend_Mime_Decode::splitMessage($params['raw'], $this->_headers, $this->_content);                     
      83              35 :         } else if(isset($params['headers'])) {                                                                    
      84              27 :             if(is_array($params['headers'])) {                                                                    
      85               3 :                 $this->_headers = $params['headers'];                                                             
      86               3 :             } else {                                                                                              
      87              24 :                 if(!empty($params['noToplines'])) {                                                               
      88               3 :                     Zend_Mime_Decode::splitMessage($params['headers'], $this->_headers, $null);                   
      89               3 :                 } else {                                                                                          
      90              21 :                     Zend_Mime_Decode::splitMessage($params['headers'], $this->_headers, $this->_topLines);        
      91                 :                 }                                                                                                 
      92                 :             }                                                                                                     
      93              27 :             if(isset($params['content'])) {                                                                       
      94               3 :                 $this->_content = $params['content'];                                                             
      95               3 :             }                                                                                                     
      96              27 :         }                                                                                                         
      97              35 :     }                                                                                                             
      98                 :                                                                                                                   
      99                 :     public function isMultipart()                                                                                 
     100                 :     {                                                                                                             
     101                 :         try {                                                                                                     
     102               1 :             return strpos($this->getHeader('content-type', 'string'), 'multipart/') === 0;                        
     103                 :         } catch(Zend_Mail_Exception $e) {                                                                         
     104                 :             return false;                                                                                         
     105                 :         }                                                                                                         
     106                 :     }                                                                                                             
     107                 :                                                                                                                   
     108                 :                                                                                                                   
     109                 :     /**                                                                                                           
     110                 :      * Body of message                                                                                            
     111                 :      *                                                                                                            
     112                 :      * @return string body                                                                                        
     113                 :      */                                                                                                           
     114                 :     public function getContent()                                                                                  
     115                 :     {                                                                                                             
     116               7 :         if($this->_content !== null) {                                                                            
     117               3 :             return $this->_content;                                                                               
     118                 :         }                                                                                                         
     119                 :                                                                                                                   
     120               4 :         if($this->_mail) {                                                                                        
     121               4 :             return $this->_mail->getRaw($this->_messageNum, 'content');                                           
     122                 :         } else {                                                                                                  
     123               0 :             throw new Zend_Mail_Exception('no content');                                                          
     124                 :         }                                                                                                         
     125                 :     }                                                                                                             
     126                 :                                                                                                                   
     127                 :     public function getPart($num)                                                                                 
     128                 :     {                                                                                                             
     129               3 :         if(isset($this->_parts[$num])) {                                                                          
     130               1 :             return $this->_parts[$num];                                                                           
     131                 :         }                                                                                                         
     132                 :                                                                                                                   
     133               3 :         if(!$this->_mail && $this->_content === null) {                                                           
     134               0 :             throw new Zend_Mail_Exception('part not found');                                                      
     135                 :         }                                                                                                         
     136                 :                                                                                                                   
     137               3 :         if($this->_mail && $this->_mail->hasFetchPart) {                                                          
     138                 :             // TODO: fetch part                                                                                   
     139                 :             // return                                                                                             
     140               0 :         }                                                                                                         
     141                 :                                                                                                                   
     142                 :         // caching content if we can't fetch parts                                                                
     143               3 :         if($this->_content === null) {                                                                            
     144               0 :             $this->_content = $this->_mail->getRaw($this->_messageNum, 'content');                                
     145               0 :         }                                                                                                         
     146                 :                                                                                                                   
     147                 :         // split content in parts                                                                                 
     148               3 :         $boundary = Zend_Mime_Decode::splitContentType($this->getHeader('content-type', 'string'), 'boundary');   
     149               3 :         if(!$boundary) {                                                                                          
     150               0 :             throw new Zend_Mail_Exception('no boundary found in content type to split message');                  
     151                 :         }                                                                                                         
     152               3 :         $parts = Zend_Mime_Decode::splitMessageStruct($this->_content, $boundary);                                
     153               3 :         $counter = 1;                                                                                             
     154               3 :         foreach($parts as $part) {                                                                                
     155               3 :             $this->_parts[$counter++] = new self(array('headers' => $part['header'], 'content' => $part['body']));
     156               3 :         }                                                                                                         
     157                 :                                                                                                                   
     158               3 :         if(!isset($this->_parts[$num])) {                                                                         
     159               1 :             throw new Zend_Mail_Exception('part not found');                                                      
     160                 :         }                                                                                                         
     161                 :                                                                                                                   
     162               2 :         return $this->_parts[$num];                                                                               
     163                 :     }                                                                                                             
     164                 :                                                                                                                   
     165                 :                                                                                                                   
     166                 :     /**                                                                                                           
     167                 :      * Get all headers                                                                                            
     168                 :      *                                                                                                            
     169                 :      * @return array headers                                                                                      
     170                 :      */                                                                                                           
     171                 :     public function getHeaders()                                                                                  
     172                 :     {                                                                                                             
     173               1 :         if($this->_headers === null) {                                                                            
     174               0 :             if(!$this->_mail) {                                                                                   
     175               0 :                 $this->_headers = array();                                                                        
     176               0 :             } else {                                                                                              
     177               0 :                 $part = $this->_mail->getRaw($this->_messageNum, 'header');                                       
     178               0 :                 Zend_Mime_Decode::splitMessage($part, $this->_headers, $null);                                    
     179                 :             }                                                                                                     
     180               0 :         }                                                                                                         
     181                 :                                                                                                                   
     182               1 :         return $this->_headers;                                                                                   
     183                 :     }                                                                                                             
     184                 :                                                                                                                   
     185                 :                                                                                                                   
     186                 :     public function getHeader($name, $format = null)                                                              
     187                 :     {                                                                                                             
     188              23 :         $name = strtolower($name);                                                                                
     189                 :                                                                                                                   
     190              23 :         if($this->_headers === null) {                                                                            
     191               0 :             $this->getHeaders();                                                                                  
     192               0 :         }                                                                                                         
     193                 :                                                                                                                   
     194              23 :         if (!isset($this->_headers[$name])) {                                                                     
     195               1 :             throw new Zend_Mail_Exception("no Header with Name $name found");                                     
     196                 :         }                                                                                                         
     197                 :                                                                                                                   
     198              22 :         $header = $this->_headers[$name];                                                                         
     199                 :                                                                                                                   
     200                 :         switch($format) {                                                                                         
     201              22 :             case 'string':                                                                                        
     202              20 :                 if(is_array($header)) {                                                                           
     203               1 :                     $header = implode(Zend_Mime::LINEEND, $header);                                               
     204               1 :                 }                                                                                                 
     205              20 :                 break;                                                                                            
     206               3 :             case 'array':                                                                                         
     207               1 :                 $header = (array)$header;                                                                         
     208               3 :             default:                                                                                              
     209                 :                 // do nothing                                                                                     
     210               3 :         }                                                                                                         
     211                 :                                                                                                                   
     212              22 :         return $header;                                                                                           
     213                 :     }                                                                                                             
     214                 :                                                                                                                   
     215                 :                                                                                                                   
     216                 :     /**                                                                                                           
     217                 :      * Getter for mail headers - name is matched in lowercase                                                     
     218                 :      *                                                                                                            
     219                 :      * @param  string $name         header name                                                                   
     220                 :      * @throws Zend_Mail_Exception                                                                                
     221                 :      * @return string|array         header line or array of headers if header exists more than once               
     222                 :      */                                                                                                           
     223                 :     public function __get($name)                                                                                  
     224                 :     {                                                                                                             
     225              16 :         return $this->getHeader($name, 'string');                                                                 
     226                 :     }                                                                                                             
     227                 : }                                                                                                                 
     228                 : 

Generated by: PHPUnit 3.0.0 and Xdebug 2.0.0RC2-dev.