<?php
/**
 * Zend Framework
 *
 * @category   ZendUtil
 * @package    ZendUtil_Mail
 * @license    BSD
 * @version    1.0
 * @author     Piotr Pelczar http://athlan.pl me@athlan.pl
 */

class ZendUtil_Mail extends Zend_Mail
{
  
/**#@+
   * @access protected
   */
  
  /**
   * Script file name to execute.
   * @var string
   */
  
protected
    
$_viewScript '';
  
  
/**
   * Subdirectory of email view scripts relative to main views directory.
   * @var string
   */
  
protected
    
$_viewPathDirectory 'email';
  
  
/**
   * Layout script file name to execute. If set to false, no layout will be executed.
   * @var string
   */
  
protected
    
$_viewLayoutScript 'html';
  
  
/**
   * Subdirectory of email layout scripts relative to main layouts directory.
   * @var string
   */
  
protected
    
$_viewLayoutPathDirectory 'email';
  
  
/**#@-*/
  
  /**
   * @see Zend_Mail::send()
   */
  
public function send($transport null)
  {
    
$this->_prepareBody();
    
    
parent::send($transport);
  }
  
  
/**
   * Set the file name/path of email content.
   *
   * @param  string $script file name/path of view script
   * @return Zend_Mail Provides fluent interface
   */
  
public function setBodyView($script)
  {
    
$this->_viewScript $script;
    return 
$this;
  }
  
  
/**
   * Return the file name/path of email conetnt.
   *
   * @return string
   */
  
public function getBodyView()
  {
    return 
$this->_viewScript;
  }
  
  
/**
   * Set the path of email views directory.
   *
   * @param  string $path
   * @return Zend_Mail Provides fluent interface
   */
  
public function setViewPathDirectory($path)
  {
    
$this->_viewPathDirectory $path;
    return 
$this;
  }
  
  
/**
   * Return the path of email views directory.
   *
   * @return string
   */
  
public function getViewPathDirectory()
  {
    return 
$this->_viewPathDirectory;
  }
  
  
/**
   * Set the path of email layouts directory.
   *
   * @param  string $path
   * @return Zend_Mail Provides fluent interface
   */
  
public function setViewLayoutPathDirectory($path)
  {
    
$this->_viewLayoutPathDirectory $path;
    return 
$this;
  }
  
  
/**
   * Return the path of email layouts directory.
   *
   * @return string
   */
  
public function getViewLayoutPathDirectory()
  {
    return 
$this->_viewLayoutPathDirectory;
  }
  
  
/**
   * Set the view layout scipt to render. Set false to disable layouts.
   *
   * @param  string|bool $script
   * @return Zend_Mail Provides fluent interface
   */
  
public function setViewLayoutScript($script)
  {
    
$this->_viewLayoutScript $script;
    return 
$this;
  }
  
  
/**
   * Return the view layout scipt to render, false for disabled layouts.
   *
   * @return string|bool
   */
  
public function getViewLayoutScript()
  {
    return 
$this->_viewLayoutScript;
  }
  
  
/**
   * Prepares the layouts, views and set them into mail body.
   */
  
public function _prepareBody()
  {
    if(!
$this->_viewScript)
      return;
    
    
$layotPath Zend_Layout::getMvcInstance()->getViewScriptPath();
    
$layotPath .= $this->_viewLayoutPathDirectory;
    
    
$layout = new Zend_Layout($layotPath);
    
$view $layout->getView();
    
    
$viewPath $this->_viewPathDirectory;
    
$viewPath .= DIRECTORY_SEPARATOR $this->_viewScript;
    
    
$content $view->render($viewPath);
    
    if(
$this->_viewLayoutScript)
    {
      
$layout->content $content;
      
$content $layout->render($this->_viewLayoutScript);
    }
    
    
$this->setBodyHtml($content);
  }
}