diff -r 000000000000 -r 4eba9c11703f web/Zend/Form/Decorator/ViewScript.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/Zend/Form/Decorator/ViewScript.php Mon Dec 13 18:29:26 2010 +0100 @@ -0,0 +1,192 @@ + + * // in view script: + * echo $this->element->getLabel(); + * + * + * Any options other than separator, placement, viewScript, and viewModule are passed to + * the partial as local variables. + * + * @category Zend + * @package Zend_Form + * @subpackage Decorator + * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + * @version $Id: ViewScript.php 23299 2010-11-05 04:38:14Z matthew $ + */ +class Zend_Form_Decorator_ViewScript extends Zend_Form_Decorator_Abstract +{ + /** + * Default placement: append + * @var string + */ + protected $_placement = 'APPEND'; + + /** + * View script to render + * @var string + */ + protected $_viewScript; + + /** + * View script module + * @var string + */ + protected $_viewModule; + + /** + * Set view script + * + * @param string $script + * @return Zend_Form_Decorator_ViewScript + */ + public function setViewScript($script) + { + $this->_viewScript = (string) $script; + return $this; + } + + /** + * Get view script + * + * @return string|null + */ + public function getViewScript() + { + if (null === $this->_viewScript) { + if (null !== ($element = $this->getElement())) { + if (null !== ($viewScript = $element->getAttrib('viewScript'))) { + $this->setViewScript($viewScript); + return $viewScript; + } + } + + if (null !== ($viewScript = $this->getOption('viewScript'))) { + $this->setViewScript($viewScript) + ->removeOption('viewScript'); + } + } + + return $this->_viewScript; + } + + /** + * Set view script module + * + * @param string $module + * @return Zend_Form_Decorator_ViewScript + */ + public function setViewModule($viewModule) + { + $this->_viewModule = (string) $viewModule; + return $this; + } + + /** + * Get view script module + * + * @return string|null + */ + public function getViewModule() + { + if (null === $this->_viewModule) { + if (null !== ($element = $this->getElement())) { + if (null !== ($viewModule = $element->getAttrib('viewModule'))) { + $this->setViewModule($viewModule); + return $viewModule; + } + } + + if (null !== ($viewModule = $this->getOption('viewModule'))) { + $this->setViewModule($viewModule) + ->removeOption('viewModule'); + } + } + + return $this->_viewModule; + } + + /** + * Render a view script + * + * @param string $content + * @return string + */ + public function render($content) + { + $element = $this->getElement(); + $view = $element->getView(); + if (null === $view) { + return $content; + } + + $viewScript = $this->getViewScript(); + if (empty($viewScript)) { + require_once 'Zend/Form/Exception.php'; + throw new Zend_Form_Exception('No view script registered with ViewScript decorator'); + } + + $separator = $this->getSeparator(); + $placement = $this->getPlacement(); + + $vars = $this->getOptions(); + $vars['element'] = $element; + $vars['content'] = $content; + $vars['decorator'] = $this; + + $viewModule = $this->getViewModule(); + if (empty($viewModule)) { + $renderedContent = $view->partial($viewScript, $vars); + } else { + $renderedContent = $view->partial($viewScript, $viewModule, $vars); + } + + // Get placement again to see if it has changed + $placement = $this->getPlacement(); + + switch ($placement) { + case self::PREPEND: + return $renderedContent . $separator . $content; + case self::APPEND: + return $content . $separator . $renderedContent; + default: + return $renderedContent; + } + } +}