adding zend project folders into old campcaster.

This commit is contained in:
naomiaro 2010-12-07 14:19:27 -05:00
parent 56abfaf28e
commit 7ef0c18b26
4045 changed files with 1054952 additions and 0 deletions

View file

@ -0,0 +1,254 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Form
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
/** Zend_Form_Decorator_Interface */
require_once 'Zend/Form/Decorator/Interface.php';
/**
* Zend_Form_Decorator_Abstract
*
* @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: Abstract.php 21147 2010-02-23 14:42:04Z yoshida@zend.co.jp $
*/
abstract class Zend_Form_Decorator_Abstract implements Zend_Form_Decorator_Interface
{
/**
* Placement constants
*/
const APPEND = 'APPEND';
const PREPEND = 'PREPEND';
/**
* Default placement: append
* @var string
*/
protected $_placement = 'APPEND';
/**
* @var Zend_Form_Element|Zend_Form
*/
protected $_element;
/**
* Decorator options
* @var array
*/
protected $_options = array();
/**
* Separator between new content and old
* @var string
*/
protected $_separator = PHP_EOL;
/**
* Constructor
*
* @param array|Zend_Config $options
* @return void
*/
public function __construct($options = null)
{
if (is_array($options)) {
$this->setOptions($options);
} elseif ($options instanceof Zend_Config) {
$this->setConfig($options);
}
}
/**
* Set options
*
* @param array $options
* @return Zend_Form_Decorator_Abstract
*/
public function setOptions(array $options)
{
$this->_options = $options;
return $this;
}
/**
* Set options from config object
*
* @param Zend_Config $config
* @return Zend_Form_Decorator_Abstract
*/
public function setConfig(Zend_Config $config)
{
return $this->setOptions($config->toArray());
}
/**
* Set option
*
* @param string $key
* @param mixed $value
* @return Zend_Form_Decorator_Abstract
*/
public function setOption($key, $value)
{
$this->_options[(string) $key] = $value;
return $this;
}
/**
* Get option
*
* @param string $key
* @return mixed
*/
public function getOption($key)
{
$key = (string) $key;
if (isset($this->_options[$key])) {
return $this->_options[$key];
}
return null;
}
/**
* Retrieve options
*
* @return array
*/
public function getOptions()
{
return $this->_options;
}
/**
* Remove single option
*
* @param mixed $key
* @return void
*/
public function removeOption($key)
{
if (null !== $this->getOption($key)) {
unset($this->_options[$key]);
return true;
}
return false;
}
/**
* Clear all options
*
* @return Zend_Form_Decorator_Abstract
*/
public function clearOptions()
{
$this->_options = array();
return $this;
}
/**
* Set current form element
*
* @param Zend_Form_Element|Zend_Form $element
* @return Zend_Form_Decorator_Abstract
* @throws Zend_Form_Decorator_Exception on invalid element type
*/
public function setElement($element)
{
if ((!$element instanceof Zend_Form_Element)
&& (!$element instanceof Zend_Form)
&& (!$element instanceof Zend_Form_DisplayGroup))
{
require_once 'Zend/Form/Decorator/Exception.php';
throw new Zend_Form_Decorator_Exception('Invalid element type passed to decorator');
}
$this->_element = $element;
return $this;
}
/**
* Retrieve current element
*
* @return Zend_Form_Element|Zend_Form
*/
public function getElement()
{
return $this->_element;
}
/**
* Determine if decorator should append or prepend content
*
* @return string
*/
public function getPlacement()
{
$placement = $this->_placement;
if (null !== ($placementOpt = $this->getOption('placement'))) {
$placementOpt = strtoupper($placementOpt);
switch ($placementOpt) {
case self::APPEND:
case self::PREPEND:
$placement = $this->_placement = $placementOpt;
break;
case false:
$placement = $this->_placement = null;
break;
default:
break;
}
$this->removeOption('placement');
}
return $placement;
}
/**
* Retrieve separator to use between old and new content
*
* @return string
*/
public function getSeparator()
{
$separator = $this->_separator;
if (null !== ($separatorOpt = $this->getOption('separator'))) {
$separator = $this->_separator = (string) $separatorOpt;
$this->removeOption('separator');
}
return $separator;
}
/**
* Decorate content and/or element
*
* @param string $content
* @return string
* @throws Zend_Form_Decorator_Exception when unimplemented
*/
public function render($content)
{
require_once 'Zend/Form/Decorator/Exception.php';
throw new Zend_Form_Decorator_Exception('render() not implemented');
}
}

View file

@ -0,0 +1,128 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Zend_Form_Decorator_Callback
*
* Execute an arbitrary callback to decorate an element. Callbacks should take
* three arguments, $content, $element, and $options:
*
* function mycallback($content, $element, array $options)
* {
* }
*
* and should return a string. ($options are whatever options were provided to
* the decorator.)
*
* To specify a callback, pass a valid callback as the 'callback' option.
*
* Callback results will be either appended, prepended, or replace the provided
* content. To replace the content, specify a placement of boolean false;
* defaults to append content.
*
* @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: Callback.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_Callback extends Zend_Form_Decorator_Abstract
{
/**
* Callback
* @var string|array
*/
protected $_callback;
/**
* Set callback
*
* @param callback $callback
* @return Zend_Form_Decorator_Callback
* @throws Zend_Form_Exception
*/
public function setCallback($callback)
{
if (!is_callable($callback)) {
require_once 'Zend/Form/Exception.php';
throw new Zend_Form_Exception('Invalid callback provided to callback decorator');
}
$this->_callback = $callback;
return $this;
}
/**
* Get registered callback
*
* If not previously registered, checks to see if it exists in registered
* options.
*
* @return null|string|array
*/
public function getCallback()
{
if (null === $this->_callback) {
if (null !== ($callback = $this->getOption('callback'))) {
$this->setCallback($callback);
$this->removeOption('callback');
}
}
return $this->_callback;
}
/**
* Render
*
* If no callback registered, returns callback. Otherwise, gets return
* value of callback and either appends, prepends, or replaces passed in
* content.
*
* @param string $content
* @return string
*/
public function render($content)
{
$callback = $this->getCallback();
if (null === $callback) {
return $content;
}
$placement = $this->getPlacement();
$separator = $this->getSeparator();
$response = call_user_func($callback, $content, $this->getElement(), $this->getOptions());
switch ($placement) {
case self::APPEND:
return $content . $separator . $response;
case self::PREPEND:
return $response . $separator . $content;
default:
// replace content
return $response;
}
}
}

View file

@ -0,0 +1,72 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** @see Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Captcha generic decorator
*
* Adds captcha adapter output
*
* @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: Captcha.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_Captcha extends Zend_Form_Decorator_Abstract
{
/**
* Render captcha
*
* @param string $content
* @return string
*/
public function render($content)
{
$element = $this->getElement();
if (!method_exists($element, 'getCaptcha')) {
return $content;
}
$view = $element->getView();
if (null === $view) {
return $content;
}
$placement = $this->getPlacement();
$separator = $this->getSeparator();
$captcha = $element->getCaptcha();
$markup = $captcha->render($view, $element);
switch ($placement) {
case 'PREPEND':
$content = $markup . $separator . $content;
break;
case 'APPEND':
default:
$content = $content . $separator . $markup;
}
return $content;
}
}

View file

@ -0,0 +1,78 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** @see Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Word-based captcha decorator
*
* Adds hidden field for ID and text input field for captcha text
*
* @category Zend
* @package Zend_Form
* @subpackage Element
* @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: Word.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_Captcha_Word extends Zend_Form_Decorator_Abstract
{
/**
* Render captcha
*
* @param string $content
* @return string
*/
public function render($content)
{
$element = $this->getElement();
$view = $element->getView();
if (null === $view) {
return $content;
}
$name = $element->getFullyQualifiedName();
$hiddenName = $name . '[id]';
$textName = $name . '[input]';
$label = $element->getDecorator("Label");
if($label) {
$label->setOption("id", $element->getId()."-input");
}
$placement = $this->getPlacement();
$separator = $this->getSeparator();
$hidden = $view->formHidden($hiddenName, $element->getValue(), $element->getAttribs());
$text = $view->formText($textName, '', $element->getAttribs());
switch ($placement) {
case 'PREPEND':
$content = $hidden . $separator . $text . $separator . $content;
break;
case 'APPEND':
default:
$content = $content . $separator . $hidden . $separator . $text;
}
return $content;
}
}

View file

@ -0,0 +1,199 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Zend_Form_Decorator_Description
*
* Accepts the options:
* - separator: separator to use between label and content (defaults to PHP_EOL)
* - placement: whether to append or prepend label to content (defaults to prepend)
* - tag: if set, used to wrap the label in an additional HTML tag
* - class: if set, override default class used with HTML tag
* - escape: whether or not to escape description (true by default)
*
* Any other options passed will be used as HTML attributes of the HTML tag used.
*
* @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: Description.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_Description extends Zend_Form_Decorator_Abstract
{
/**
* Whether or not to escape the description
* @var bool
*/
protected $_escape;
/**
* Default placement: append
* @var string
*/
protected $_placement = 'APPEND';
/**
* HTML tag with which to surround description
* @var string
*/
protected $_tag;
/**
* Set HTML tag with which to surround description
*
* @param string $tag
* @return Zend_Form_Decorator_Description
*/
public function setTag($tag)
{
$this->_tag = (string) $tag;
return $this;
}
/**
* Get HTML tag, if any, with which to surround description
*
* @return string
*/
public function getTag()
{
if (null === $this->_tag) {
$tag = $this->getOption('tag');
if (null !== $tag) {
$this->removeOption('tag');
} else {
$tag = 'p';
}
$this->setTag($tag);
return $tag;
}
return $this->_tag;
}
/**
* Get class with which to define description
*
* Defaults to 'hint'
*
* @return string
*/
public function getClass()
{
$class = $this->getOption('class');
if (null === $class) {
$class = 'hint';
$this->setOption('class', $class);
}
return $class;
}
/**
* Set whether or not to escape description
*
* @param bool $flag
* @return Zend_Form_Decorator_Description
*/
public function setEscape($flag)
{
$this->_escape = (bool) $flag;
return $this;
}
/**
* Get escape flag
*
* @return true
*/
public function getEscape()
{
if (null === $this->_escape) {
if (null !== ($escape = $this->getOption('escape'))) {
$this->setEscape($escape);
$this->removeOption('escape');
} else {
$this->setEscape(true);
}
}
return $this->_escape;
}
/**
* Render a description
*
* @param string $content
* @return string
*/
public function render($content)
{
$element = $this->getElement();
$view = $element->getView();
if (null === $view) {
return $content;
}
$description = $element->getDescription();
$description = trim($description);
if (!empty($description) && (null !== ($translator = $element->getTranslator()))) {
$description = $translator->translate($description);
}
if (empty($description)) {
return $content;
}
$separator = $this->getSeparator();
$placement = $this->getPlacement();
$tag = $this->getTag();
$class = $this->getClass();
$escape = $this->getEscape();
$options = $this->getOptions();
if ($escape) {
$description = $view->escape($description);
}
if (!empty($tag)) {
require_once 'Zend/Form/Decorator/HtmlTag.php';
$options['tag'] = $tag;
$decorator = new Zend_Form_Decorator_HtmlTag($options);
$description = $decorator->render($description);
}
switch ($placement) {
case self::PREPEND:
return $description . $separator . $content;
case self::APPEND:
default:
return $content . $separator . $description;
}
}
}

View file

@ -0,0 +1,63 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Zend_Form_Decorator_DtDdWrapper
*
* Creates an empty <dt> item, and wraps the content in a <dd>. Used as a
* default decorator for subforms and display groups.
*
* @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: DtDdWrapper.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_DtDdWrapper extends Zend_Form_Decorator_Abstract
{
/**
* Default placement: surround content
* @var string
*/
protected $_placement = null;
/**
* Render
*
* Renders as the following:
* <dt></dt>
* <dd>$content</dd>
*
* @param string $content
* @return string
*/
public function render($content)
{
$elementName = $this->getElement()->getName();
return '<dt id="' . $elementName . '-label">&nbsp;</dt>' .
'<dd id="' . $elementName . '-element">' . $content . '</dd>';
}
}

View file

@ -0,0 +1,69 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Zend_Form_Decorator_Errors
*
* Any options passed will be used as HTML attributes of the ul tag for the errors.
*
* @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: Errors.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_Errors extends Zend_Form_Decorator_Abstract
{
/**
* Render errors
*
* @param string $content
* @return string
*/
public function render($content)
{
$element = $this->getElement();
$view = $element->getView();
if (null === $view) {
return $content;
}
$errors = $element->getMessages();
if (empty($errors)) {
return $content;
}
$separator = $this->getSeparator();
$placement = $this->getPlacement();
$errors = $view->formErrors($errors, $this->getOptions());
switch ($placement) {
case self::APPEND:
return $content . $separator . $errors;
case self::PREPEND:
return $errors . $separator . $content;
}
}
}

View file

@ -0,0 +1,37 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Form
* @subpackage Decorator
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @version $Id: Exception.php 20096 2010-01-06 02:05:09Z bkarwin $
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
/** Zend_Form_Exception */
require_once 'Zend/Form/Exception.php';
/**
* Exception for Zend_Form component.
*
* @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
*/
class Zend_Form_Decorator_Exception extends Zend_Form_Exception
{
}

View file

@ -0,0 +1,155 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Zend_Form_Decorator_Fieldset
*
* Any options passed will be used as HTML attributes of the fieldset tag.
*
* @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: Fieldset.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_Fieldset extends Zend_Form_Decorator_Abstract
{
/**
* Attribs that should be removed prior to rendering
* @var array
*/
public $stripAttribs = array(
'action',
'enctype',
'helper',
'method',
'name',
);
/**
* Fieldset legend
* @var string
*/
protected $_legend;
/**
* Default placement: surround content
* @var string
*/
protected $_placement = null;
/**
* Get options
*
* Merges in element attributes as well.
*
* @return array
*/
public function getOptions()
{
$options = parent::getOptions();
if (null !== ($element = $this->getElement())) {
$attribs = $element->getAttribs();
$options = array_merge($options, $attribs);
$this->setOptions($options);
}
return $options;
}
/**
* Set legend
*
* @param string $value
* @return Zend_Form_Decorator_Fieldset
*/
public function setLegend($value)
{
$this->_legend = (string) $value;
return $this;
}
/**
* Get legend
*
* @return string
*/
public function getLegend()
{
$legend = $this->_legend;
if ((null === $legend) && (null !== ($element = $this->getElement()))) {
if (method_exists($element, 'getLegend')) {
$legend = $element->getLegend();
$this->setLegend($legend);
}
}
if ((null === $legend) && (null !== ($legend = $this->getOption('legend')))) {
$this->setLegend($legend);
$this->removeOption('legend');
}
return $legend;
}
/**
* Render a fieldset
*
* @param string $content
* @return string
*/
public function render($content)
{
$element = $this->getElement();
$view = $element->getView();
if (null === $view) {
return $content;
}
$legend = $this->getLegend();
$attribs = $this->getOptions();
$name = $element->getFullyQualifiedName();
$id = $element->getId();
if (!empty($id)) {
$attribs['id'] = 'fieldset-' . $id;
}
if (null !== $legend) {
if (null !== ($translator = $element->getTranslator())) {
$legend = $translator->translate($legend);
}
$attribs['legend'] = $legend;
}
foreach (array_keys($attribs) as $attrib) {
$testAttrib = strtolower($attrib);
if (in_array($testAttrib, $this->stripAttribs)) {
unset($attribs[$attrib]);
}
}
return $view->fieldset($name, $content, $attribs);
}
}

View file

@ -0,0 +1,142 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/** Zend_Form_Decorator_Marker_File_Interface */
require_once 'Zend/Form/Decorator/Marker/File/Interface.php';
/** Zend_File_Transfer_Adapter_Http */
require_once 'Zend/File/Transfer/Adapter/Http.php';
/**
* Zend_Form_Decorator_File
*
* Fixes the rendering for all subform and multi file elements
*
* @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: File.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_File
extends Zend_Form_Decorator_Abstract
implements Zend_Form_Decorator_Marker_File_Interface
{
/**
* Attributes that should not be passed to helper
* @var array
*/
protected $_attribBlacklist = array('helper', 'placement', 'separator', 'value');
/**
* Default placement: append
* @var string
*/
protected $_placement = 'APPEND';
/**
* Get attributes to pass to file helper
*
* @return array
*/
public function getAttribs()
{
$attribs = $this->getOptions();
if (null !== ($element = $this->getElement())) {
$attribs = array_merge($attribs, $element->getAttribs());
}
foreach ($this->_attribBlacklist as $key) {
if (array_key_exists($key, $attribs)) {
unset($attribs[$key]);
}
}
return $attribs;
}
/**
* Render a form file
*
* @param string $content
* @return string
*/
public function render($content)
{
$element = $this->getElement();
if (!$element instanceof Zend_Form_Element) {
return $content;
}
$view = $element->getView();
if (!$view instanceof Zend_View_Interface) {
return $content;
}
$name = $element->getName();
$attribs = $this->getAttribs();
if (!array_key_exists('id', $attribs)) {
$attribs['id'] = $name;
}
$separator = $this->getSeparator();
$placement = $this->getPlacement();
$markup = array();
$size = $element->getMaxFileSize();
if ($size > 0) {
$element->setMaxFileSize(0);
$markup[] = $view->formHidden('MAX_FILE_SIZE', $size);
}
if (Zend_File_Transfer_Adapter_Http::isApcAvailable()) {
$markup[] = $view->formHidden(ini_get('apc.rfc1867_name'), uniqid(), array('id' => 'progress_key'));
} else if (Zend_File_Transfer_Adapter_Http::isUploadProgressAvailable()) {
$markup[] = $view->formHidden('UPLOAD_IDENTIFIER', uniqid(), array('id' => 'progress_key'));
}
if ($element->isArray()) {
$name .= "[]";
$count = $element->getMultiFile();
for ($i = 0; $i < $count; ++$i) {
$htmlAttribs = $attribs;
$htmlAttribs['id'] .= '-' . $i;
$markup[] = $view->formFile($name, $htmlAttribs);
}
} else {
$markup[] = $view->formFile($name, $attribs);
}
$markup = implode($separator, $markup);
switch ($placement) {
case self::PREPEND:
return $markup . $separator . $content;
case self::APPEND:
default:
return $content . $separator . $markup;
}
}
}

View file

@ -0,0 +1,134 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Zend_Form_Decorator_Form
*
* Render a Zend_Form object.
*
* Accepts following options:
* - separator: Separator to use between elements
* - helper: which view helper to use when rendering form. Should accept three
* arguments, string content, a name, and an array of attributes.
*
* Any other options passed will be used as HTML attributes of the form tag.
*
* @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: Form.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_Form extends Zend_Form_Decorator_Abstract
{
/**
* Default view helper
* @var string
*/
protected $_helper = 'form';
/**
* Set view helper for rendering form
*
* @param string $helper
* @return Zend_Form_Decorator_Form
*/
public function setHelper($helper)
{
$this->_helper = (string) $helper;
return $this;
}
/**
* Get view helper for rendering form
*
* @return string
*/
public function getHelper()
{
if (null !== ($helper = $this->getOption('helper'))) {
$this->setHelper($helper);
$this->removeOption('helper');
}
return $this->_helper;
}
/**
* Retrieve decorator options
*
* Assures that form action and method are set, and sets appropriate
* encoding type if current method is POST.
*
* @return array
*/
public function getOptions()
{
if (null !== ($element = $this->getElement())) {
if ($element instanceof Zend_Form) {
$element->getAction();
$method = $element->getMethod();
if ($method == Zend_Form::METHOD_POST) {
$this->setOption('enctype', 'application/x-www-form-urlencoded');
}
foreach ($element->getAttribs() as $key => $value) {
$this->setOption($key, $value);
}
} elseif ($element instanceof Zend_Form_DisplayGroup) {
foreach ($element->getAttribs() as $key => $value) {
$this->setOption($key, $value);
}
}
}
if (isset($this->_options['method'])) {
$this->_options['method'] = strtolower($this->_options['method']);
}
return $this->_options;
}
/**
* Render a form
*
* Replaces $content entirely from currently set element.
*
* @param string $content
* @return string
*/
public function render($content)
{
$form = $this->getElement();
$view = $form->getView();
if (null === $view) {
return $content;
}
$helper = $this->getHelper();
$attribs = $this->getOptions();
$name = $form->getFullyQualifiedName();
$attribs['id'] = $form->getId();
return $view->$helper($name, $attribs, $content);
}
}

View file

@ -0,0 +1,126 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Zend_Form_Decorator_FormElements
*
* Render all form elements registered with current form
*
* Accepts following options:
* - separator: Separator to use between elements
*
* Any other options passed will be used as HTML attributes of the form tag.
*
* @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: FormElements.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_FormElements extends Zend_Form_Decorator_Abstract
{
/**
* Merges given two belongsTo (array notation) strings
*
* @param string $baseBelongsTo
* @param string $belongsTo
* @return string
*/
public function mergeBelongsTo($baseBelongsTo, $belongsTo)
{
$endOfArrayName = strpos($belongsTo, '[');
if ($endOfArrayName === false) {
return $baseBelongsTo . '[' . $belongsTo . ']';
}
$arrayName = substr($belongsTo, 0, $endOfArrayName);
return $baseBelongsTo . '[' . $arrayName . ']' . substr($belongsTo, $endOfArrayName);
}
/**
* Render form elements
*
* @param string $content
* @return string
*/
public function render($content)
{
$form = $this->getElement();
if ((!$form instanceof Zend_Form) && (!$form instanceof Zend_Form_DisplayGroup)) {
return $content;
}
$belongsTo = ($form instanceof Zend_Form) ? $form->getElementsBelongTo() : null;
$elementContent = '';
$separator = $this->getSeparator();
$translator = $form->getTranslator();
$items = array();
$view = $form->getView();
foreach ($form as $item) {
$item->setView($view)
->setTranslator($translator);
if ($item instanceof Zend_Form_Element) {
$item->setBelongsTo($belongsTo);
} elseif (!empty($belongsTo) && ($item instanceof Zend_Form)) {
if ($item->isArray()) {
$name = $this->mergeBelongsTo($belongsTo, $item->getElementsBelongTo());
$item->setElementsBelongTo($name, true);
} else {
$item->setElementsBelongTo($belongsTo, true);
}
} elseif (!empty($belongsTo) && ($item instanceof Zend_Form_DisplayGroup)) {
foreach ($item as $element) {
$element->setBelongsTo($belongsTo);
}
}
$items[] = $item->render();
if (($item instanceof Zend_Form_Element_File)
|| (($item instanceof Zend_Form)
&& (Zend_Form::ENCTYPE_MULTIPART == $item->getEnctype()))
|| (($item instanceof Zend_Form_DisplayGroup)
&& (Zend_Form::ENCTYPE_MULTIPART == $item->getAttrib('enctype')))
) {
if ($form instanceof Zend_Form) {
$form->setEnctype(Zend_Form::ENCTYPE_MULTIPART);
} elseif ($form instanceof Zend_Form_DisplayGroup) {
$form->setAttrib('enctype', Zend_Form::ENCTYPE_MULTIPART);
}
}
}
$elementContent = implode($separator, $items);
switch ($this->getPlacement()) {
case self::PREPEND:
return $elementContent . $separator . $content;
case self::APPEND:
default:
return $content . $separator . $elementContent;
}
}
}

View file

@ -0,0 +1,397 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Zend_Form_Decorator_FormErrors
*
* Displays all form errors in one view.
*
* Any options passed will be used as HTML attributes of the ul tag for the errors.
*
* @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: FormErrors.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_FormErrors extends Zend_Form_Decorator_Abstract
{
/**
* Default values for markup options
* @var array
*/
protected $_defaults = array(
'ignoreSubForms' => false,
'markupElementLabelEnd' => '</b>',
'markupElementLabelStart' => '<b>',
'markupListEnd' => '</ul>',
'markupListItemEnd' => '</li>',
'markupListItemStart' => '<li>',
'markupListStart' => '<ul class="form-errors">',
);
/**#@+
* Markup options
* @var string
*/
protected $_ignoreSubForms;
protected $_markupElementLabelEnd;
protected $_markupElementLabelStart;
protected $_markupListEnd;
protected $_markupListItemEnd;
protected $_markupListItemStart;
protected $_markupListStart;
/**#@-*/
/**
* Render errors
*
* @param string $content
* @return string
*/
public function render($content)
{
$form = $this->getElement();
if (!$form instanceof Zend_Form) {
return $content;
}
$view = $form->getView();
if (null === $view) {
return $content;
}
$this->initOptions();
$markup = $this->_recurseForm($form, $view);
if (empty($markup)) {
return $content;
}
$markup = $this->getMarkupListStart()
. $markup
. $this->getMarkupListEnd();
switch ($this->getPlacement()) {
case self::APPEND:
return $content . $this->getSeparator() . $markup;
case self::PREPEND:
return $markup . $this->getSeparator() . $content;
}
}
/**
* Initialize options
*
* @return void
*/
public function initOptions()
{
$this->getMarkupElementLabelEnd();
$this->getMarkupElementLabelStart();
$this->getMarkupListEnd();
$this->getMarkupListItemEnd();
$this->getMarkupListItemStart();
$this->getMarkupListStart();
$this->getPlacement();
$this->getSeparator();
$this->ignoreSubForms();
}
/**
* Retrieve markupElementLabelStart
*
* @return string
*/
public function getMarkupElementLabelStart()
{
if (null === $this->_markupElementLabelStart) {
if (null === ($markupElementLabelStart = $this->getOption('markupElementLabelStart'))) {
$this->setMarkupElementLabelStart($this->_defaults['markupElementLabelStart']);
} else {
$this->setMarkupElementLabelStart($markupElementLabelStart);
$this->removeOption('markupElementLabelStart');
}
}
return $this->_markupElementLabelStart;
}
/**
* Set markupElementLabelStart
*
* @param string $markupElementLabelStart
* @return Zend_Form_Decorator_FormErrors
*/
public function setMarkupElementLabelStart($markupElementLabelStart)
{
$this->_markupElementLabelStart = $markupElementLabelStart;
return $this;
}
/**
* Retrieve markupElementLabelEnd
*
* @return string
*/
public function getMarkupElementLabelEnd()
{
if (null === $this->_markupElementLabelEnd) {
if (null === ($markupElementLabelEnd = $this->getOption('markupElementLabelEnd'))) {
$this->setMarkupElementLabelEnd($this->_defaults['markupElementLabelEnd']);
} else {
$this->setMarkupElementLabelEnd($markupElementLabelEnd);
$this->removeOption('markupElementLabelEnd');
}
}
return $this->_markupElementLabelEnd;
}
/**
* Set markupElementLabelEnd
*
* @param string $markupElementLabelEnd
* @return Zend_Form_Decorator_FormErrors
*/
public function setMarkupElementLabelEnd($markupElementLabelEnd)
{
$this->_markupElementLabelEnd = $markupElementLabelEnd;
return $this;
}
/**
* Retrieve markupListStart
*
* @return string
*/
public function getMarkupListStart()
{
if (null === $this->_markupListStart) {
if (null === ($markupListStart = $this->getOption('markupListStart'))) {
$this->setMarkupListStart($this->_defaults['markupListStart']);
} else {
$this->setMarkupListStart($markupListStart);
$this->removeOption('markupListStart');
}
}
return $this->_markupListStart;
}
/**
* Set markupListStart
*
* @param string $markupListStart
* @return Zend_Form_Decorator_FormErrors
*/
public function setMarkupListStart($markupListStart)
{
$this->_markupListStart = $markupListStart;
return $this;
}
/**
* Retrieve markupListEnd
*
* @return string
*/
public function getMarkupListEnd()
{
if (null === $this->_markupListEnd) {
if (null === ($markupListEnd = $this->getOption('markupListEnd'))) {
$this->setMarkupListEnd($this->_defaults['markupListEnd']);
} else {
$this->setMarkupListEnd($markupListEnd);
$this->removeOption('markupListEnd');
}
}
return $this->_markupListEnd;
}
/**
* Set markupListEnd
*
* @param string $markupListEnd
* @return Zend_Form_Decorator_FormErrors
*/
public function setMarkupListEnd($markupListEnd)
{
$this->_markupListEnd = $markupListEnd;
return $this;
}
/**
* Retrieve markupListItemStart
*
* @return string
*/
public function getMarkupListItemStart()
{
if (null === $this->_markupListItemStart) {
if (null === ($markupListItemStart = $this->getOption('markupListItemStart'))) {
$this->setMarkupListItemStart($this->_defaults['markupListItemStart']);
} else {
$this->setMarkupListItemStart($markupListItemStart);
$this->removeOption('markupListItemStart');
}
}
return $this->_markupListItemStart;
}
/**
* Set markupListItemStart
*
* @param string $markupListItemStart
* @return Zend_Form_Decorator_FormErrors
*/
public function setMarkupListItemStart($markupListItemStart)
{
$this->_markupListItemStart = $markupListItemStart;
return $this;
}
/**
* Retrieve markupListItemEnd
*
* @return string
*/
public function getMarkupListItemEnd()
{
if (null === $this->_markupListItemEnd) {
if (null === ($markupListItemEnd = $this->getOption('markupListItemEnd'))) {
$this->setMarkupListItemEnd($this->_defaults['markupListItemEnd']);
} else {
$this->setMarkupListItemEnd($markupListItemEnd);
$this->removeOption('markupListItemEnd');
}
}
return $this->_markupListItemEnd;
}
/**
* Set markupListItemEnd
*
* @param string $markupListItemEnd
* @return Zend_Form_Decorator_FormErrors
*/
public function setMarkupListItemEnd($markupListItemEnd)
{
$this->_markupListItemEnd = $markupListItemEnd;
return $this;
}
/**
* Retrieve ignoreSubForms
*
* @return bool
*/
public function ignoreSubForms()
{
if (null === $this->_ignoreSubForms) {
if (null === ($ignoreSubForms = $this->getOption('ignoreSubForms'))) {
$this->setIgnoreSubForms($this->_defaults['ignoreSubForms']);
} else {
$this->setIgnoreSubForms($ignoreSubForms);
$this->removeOption('ignoreSubForms');
}
}
return $this->_ignoreSubForms;
}
/**
* Set ignoreSubForms
*
* @param bool $ignoreSubForms
* @return Zend_Form_Decorator_FormErrors
*/
public function setIgnoreSubForms($ignoreSubForms)
{
$this->_ignoreSubForms = (bool) $ignoreSubForms;
return $this;
}
/**
* Render element label
*
* @param Zend_Form_Element $element
* @param Zend_View_Interface $view
* @return string
*/
public function renderLabel(Zend_Form_Element $element, Zend_View_Interface $view)
{
$label = $element->getLabel();
if (empty($label)) {
$label = $element->getName();
}
return $this->getMarkupElementLabelStart()
. $view->escape($label)
. $this->getMarkupElementLabelEnd();
}
/**
* Recurse through a form object, rendering errors
*
* @param Zend_Form $form
* @param Zend_View_Interface $view
* @return string
*/
protected function _recurseForm(Zend_Form $form, Zend_View_Interface $view)
{
$content = '';
$errors = $form->getMessages();
if ($form instanceof Zend_Form_SubForm) {
$name = $form->getName();
if ((1 == count($errors)) && array_key_exists($name, $errors)) {
$errors = $errors[$name];
}
}
if (empty($errors)) {
return $content;
}
foreach ($errors as $name => $list) {
$element = $form->$name;
if ($element instanceof Zend_Form_Element) {
$element->setView($view);
$content .= $this->getMarkupListItemStart()
. $this->renderLabel($element, $view)
. $view->formErrors($list, $this->getOptions())
. $this->getMarkupListItemEnd();
} elseif (!$this->ignoreSubForms() && ($element instanceof Zend_Form)) {
$content .= $this->getMarkupListStart()
. $this->_recurseForm($element, $view)
. $this->getMarkupListEnd();
}
}
return $content;
}
}

View file

@ -0,0 +1,251 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/**
* @see Zend_Form_Decorator_Abstract
*/
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Zend_Form_Decorator_Element_HtmlTag
*
* Wraps content in an HTML block tag.
*
* Options accepted are:
* - tag: tag to use in decorator
* - noAttribs: do not render attributes in the opening tag
* - placement: 'append' or 'prepend'. If 'append', renders opening and
* closing tag after content; if prepend, renders opening and closing tag
* before content.
* - openOnly: render opening tag only
* - closeOnly: render closing tag only
*
* Any other options passed are processed as HTML attributes of the tag.
*
* @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: HtmlTag.php 20104 2010-01-06 21:26:01Z matthew $
*/
class Zend_Form_Decorator_HtmlTag extends Zend_Form_Decorator_Abstract
{
/**
* Character encoding to use when escaping attributes
* @var string
*/
protected $_encoding;
/**
* Placement; default to surround content
* @var string
*/
protected $_placement = null;
/**
* HTML tag to use
* @var string
*/
protected $_tag;
/**
* @var Zend_Filter
*/
protected $_tagFilter;
/**
* Convert options to tag attributes
*
* @return string
*/
protected function _htmlAttribs(array $attribs)
{
$xhtml = '';
$enc = $this->_getEncoding();
foreach ((array) $attribs as $key => $val) {
$key = htmlspecialchars($key, ENT_COMPAT, $enc);
if (is_array($val)) {
$val = implode(' ', $val);
}
$val = htmlspecialchars($val, ENT_COMPAT, $enc);
$xhtml .= " $key=\"$val\"";
}
return $xhtml;
}
/**
* Normalize tag
*
* Ensures tag is alphanumeric characters only, and all lowercase.
*
* @param string $tag
* @return string
*/
public function normalizeTag($tag)
{
if (!isset($this->_tagFilter)) {
require_once 'Zend/Filter.php';
require_once 'Zend/Filter/Alnum.php';
require_once 'Zend/Filter/StringToLower.php';
$this->_tagFilter = new Zend_Filter();
$this->_tagFilter->addFilter(new Zend_Filter_Alnum())
->addFilter(new Zend_Filter_StringToLower());
}
return $this->_tagFilter->filter($tag);
}
/**
* Set tag to use
*
* @param string $tag
* @return Zend_Form_Decorator_HtmlTag
*/
public function setTag($tag)
{
$this->_tag = $this->normalizeTag($tag);
return $this;
}
/**
* Get tag
*
* If no tag is registered, either via setTag() or as an option, uses 'div'.
*
* @return string
*/
public function getTag()
{
if (null === $this->_tag) {
if (null === ($tag = $this->getOption('tag'))) {
$this->setTag('div');
} else {
$this->setTag($tag);
$this->removeOption('tag');
}
}
return $this->_tag;
}
/**
* Get the formatted open tag
*
* @param string $tag
* @param array $attribs
* @return string
*/
protected function _getOpenTag($tag, array $attribs = null)
{
$html = '<' . $tag;
if (null !== $attribs) {
$html .= $this->_htmlAttribs($attribs);
}
$html .= '>';
return $html;
}
/**
* Get formatted closing tag
*
* @param string $tag
* @return string
*/
protected function _getCloseTag($tag)
{
return '</' . $tag . '>';
}
/**
* Render content wrapped in an HTML tag
*
* @param string $content
* @return string
*/
public function render($content)
{
$tag = $this->getTag();
$placement = $this->getPlacement();
$noAttribs = $this->getOption('noAttribs');
$openOnly = $this->getOption('openOnly');
$closeOnly = $this->getOption('closeOnly');
$this->removeOption('noAttribs');
$this->removeOption('openOnly');
$this->removeOption('closeOnly');
$attribs = null;
if (!$noAttribs) {
$attribs = $this->getOptions();
}
switch ($placement) {
case self::APPEND:
if ($closeOnly) {
return $content . $this->_getCloseTag($tag);
}
if ($openOnly) {
return $content . $this->_getOpenTag($tag, $attribs);
}
return $content
. $this->_getOpenTag($tag, $attribs)
. $this->_getCloseTag($tag);
case self::PREPEND:
if ($closeOnly) {
return $this->_getCloseTag($tag) . $content;
}
if ($openOnly) {
return $this->_getOpenTag($tag, $attribs) . $content;
}
return $this->_getOpenTag($tag, $attribs)
. $this->_getCloseTag($tag)
. $content;
default:
return (($openOnly || !$closeOnly) ? $this->_getOpenTag($tag, $attribs) : '')
. $content
. (($closeOnly || !$openOnly) ? $this->_getCloseTag($tag) : '');
}
}
/**
* Get encoding for use with htmlspecialchars()
*
* @return string
*/
protected function _getEncoding()
{
if (null !== $this->_encoding) {
return $this->_encoding;
}
if (null === ($element = $this->getElement())) {
$this->_encoding = 'UTF-8';
} elseif (null === ($view = $element->getView())) {
$this->_encoding = 'UTF-8';
} elseif (!$view instanceof Zend_View_Abstract
&& !method_exists($view, 'getEncoding')
) {
$this->_encoding = 'UTF-8';
} else {
$this->_encoding = $view->getEncoding();
}
return $this->_encoding;
}
}

View file

@ -0,0 +1,154 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Zend_Form_Decorator_Image
*
* Accepts the options:
* - separator: separator to use between image and content (defaults to PHP_EOL)
* - placement: whether to append or prepend label to content (defaults to append)
* - tag: if set, used to wrap the label in an additional HTML tag
*
* Any other options passed will be used as HTML attributes of the image tag.
*
* @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: Image.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_Image extends Zend_Form_Decorator_Abstract
{
/**
* Attributes that should not be passed to helper
* @var array
*/
protected $_attribBlacklist = array('helper', 'placement', 'separator', 'tag');
/**
* Default placement: append
* @var string
*/
protected $_placement = 'APPEND';
/**
* HTML tag with which to surround image
* @var string
*/
protected $_tag;
/**
* Set HTML tag with which to surround label
*
* @param string $tag
* @return Zend_Form_Decorator_Image
*/
public function setTag($tag)
{
$this->_tag = (string) $tag;
return $this;
}
/**
* Get HTML tag, if any, with which to surround label
*
* @return void
*/
public function getTag()
{
if (null === $this->_tag) {
$tag = $this->getOption('tag');
if (null !== $tag) {
$this->removeOption('tag');
$this->setTag($tag);
}
return $tag;
}
return $this->_tag;
}
/**
* Get attributes to pass to image helper
*
* @return array
*/
public function getAttribs()
{
$attribs = $this->getOptions();
if (null !== ($element = $this->getElement())) {
$attribs['alt'] = $element->getLabel();
$attribs = array_merge($attribs, $element->getAttribs());
}
foreach ($this->_attribBlacklist as $key) {
if (array_key_exists($key, $attribs)) {
unset($attribs[$key]);
}
}
return $attribs;
}
/**
* Render a form image
*
* @param string $content
* @return string
*/
public function render($content)
{
$element = $this->getElement();
$view = $element->getView();
if (null === $view) {
return $content;
}
$tag = $this->getTag();
$placement = $this->getPlacement();
$separator = $this->getSeparator();
$name = $element->getFullyQualifiedName();
$attribs = $this->getAttribs();
$attribs['id'] = $element->getId();
$image = $view->formImage($name, $element->getImageValue(), $attribs);
if (null !== $tag) {
require_once 'Zend/Form/Decorator/HtmlTag.php';
$decorator = new Zend_Form_Decorator_HtmlTag();
$decorator->setOptions(array('tag' => $tag));
$image = $decorator->render($image);
}
switch ($placement) {
case self::PREPEND:
return $image . $separator . $content;
case self::APPEND:
default:
return $content . $separator . $image;
}
}
}

View file

@ -0,0 +1,123 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Form
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
/**
* Zend_Form_Decorator_Interface
*
* @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: Interface.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
interface Zend_Form_Decorator_Interface
{
/**
* Constructor
*
* Accept options during initialization.
*
* @param array|Zend_Config $options
* @return void
*/
public function __construct($options = null);
/**
* Set an element to decorate
*
* While the name is "setElement", a form decorator could decorate either
* an element or a form object.
*
* @param mixed $element
* @return Zend_Form_Decorator_Interface
*/
public function setElement($element);
/**
* Retrieve current element
*
* @return mixed
*/
public function getElement();
/**
* Set decorator options from an array
*
* @param array $options
* @return Zend_Form_Decorator_Interface
*/
public function setOptions(array $options);
/**
* Set decorator options from a config object
*
* @param Zend_Config $config
* @return Zend_Form_Decorator_Interface
*/
public function setConfig(Zend_Config $config);
/**
* Set a single option
*
* @param string $key
* @param mixed $value
* @return Zend_Form_Decorator_Interface
*/
public function setOption($key, $value);
/**
* Retrieve a single option
*
* @param string $key
* @return mixed
*/
public function getOption($key);
/**
* Retrieve decorator options
*
* @return array
*/
public function getOptions();
/**
* Delete a single option
*
* @param string $key
* @return bool
*/
public function removeOption($key);
/**
* Clear all options
*
* @return Zend_Form_Decorator_Interface
*/
public function clearOptions();
/**
* Render the element
*
* @param string $content Content to decorate
* @return string
*/
public function render($content);
}

View file

@ -0,0 +1,332 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Zend_Form_Decorator_Label
*
* Accepts the options:
* - separator: separator to use between label and content (defaults to PHP_EOL)
* - placement: whether to append or prepend label to content (defaults to prepend)
* - tag: if set, used to wrap the label in an additional HTML tag
* - opt(ional)Prefix: a prefix to the label to use when the element is optional
* - opt(iona)lSuffix: a suffix to the label to use when the element is optional
* - req(uired)Prefix: a prefix to the label to use when the element is required
* - req(uired)Suffix: a suffix to the label to use when the element is required
*
* Any other options passed will be used as HTML attributes of the label tag.
*
* @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: Label.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_Label extends Zend_Form_Decorator_Abstract
{
/**
* Default placement: prepend
* @var string
*/
protected $_placement = 'PREPEND';
/**
* HTML tag with which to surround label
* @var string
*/
protected $_tag;
/**
* Set element ID
*
* @param string $id
* @return Zend_Form_Decorator_Label
*/
public function setId($id)
{
$this->setOption('id', $id);
return $this;
}
/**
* Retrieve element ID (used in 'for' attribute)
*
* If none set in decorator, looks first for element 'id' attribute, and
* defaults to element name.
*
* @return string
*/
public function getId()
{
$id = $this->getOption('id');
if (null === $id) {
if (null !== ($element = $this->getElement())) {
$id = $element->getId();
$this->setId($id);
}
}
return $id;
}
/**
* Set HTML tag with which to surround label
*
* @param string $tag
* @return Zend_Form_Decorator_Label
*/
public function setTag($tag)
{
if (empty($tag)) {
$this->_tag = null;
} else {
$this->_tag = (string) $tag;
}
$this->removeOption('tag');
return $this;
}
/**
* Get HTML tag, if any, with which to surround label
*
* @return void
*/
public function getTag()
{
if (null === $this->_tag) {
$tag = $this->getOption('tag');
if (null !== $tag) {
$this->removeOption('tag');
$this->setTag($tag);
}
return $tag;
}
return $this->_tag;
}
/**
* Get class with which to define label
*
* Appends either 'optional' or 'required' to class, depending on whether
* or not the element is required.
*
* @return string
*/
public function getClass()
{
$class = '';
$element = $this->getElement();
$decoratorClass = $this->getOption('class');
if (!empty($decoratorClass)) {
$class .= ' ' . $decoratorClass;
}
$type = $element->isRequired() ? 'required' : 'optional';
if (!strstr($class, $type)) {
$class .= ' ' . $type;
$class = trim($class);
}
return $class;
}
/**
* Load an optional/required suffix/prefix key
*
* @param string $key
* @return void
*/
protected function _loadOptReqKey($key)
{
if (!isset($this->$key)) {
$value = $this->getOption($key);
$this->$key = (string) $value;
if (null !== $value) {
$this->removeOption($key);
}
}
}
/**
* Overloading
*
* Currently overloads:
*
* - getOpt(ional)Prefix()
* - getOpt(ional)Suffix()
* - getReq(uired)Prefix()
* - getReq(uired)Suffix()
* - setOpt(ional)Prefix()
* - setOpt(ional)Suffix()
* - setReq(uired)Prefix()
* - setReq(uired)Suffix()
*
* @param string $method
* @param array $args
* @return mixed
* @throws Zend_Form_Exception for unsupported methods
*/
public function __call($method, $args)
{
$tail = substr($method, -6);
$head = substr($method, 0, 3);
if (in_array($head, array('get', 'set'))
&& (('Prefix' == $tail) || ('Suffix' == $tail))
) {
$position = substr($method, -6);
$type = strtolower(substr($method, 3, 3));
switch ($type) {
case 'req':
$key = 'required' . $position;
break;
case 'opt':
$key = 'optional' . $position;
break;
default:
require_once 'Zend/Form/Exception.php';
throw new Zend_Form_Exception(sprintf('Invalid method "%s" called in Label decorator, and detected as type %s', $method, $type));
}
switch ($head) {
case 'set':
if (0 === count($args)) {
require_once 'Zend/Form/Exception.php';
throw new Zend_Form_Exception(sprintf('Method "%s" requires at least one argument; none provided', $method));
}
$value = array_shift($args);
$this->$key = $value;
return $this;
case 'get':
default:
if (null === ($element = $this->getElement())) {
$this->_loadOptReqKey($key);
} elseif (isset($element->$key)) {
$this->$key = (string) $element->$key;
} else {
$this->_loadOptReqKey($key);
}
return $this->$key;
}
}
require_once 'Zend/Form/Exception.php';
throw new Zend_Form_Exception(sprintf('Invalid method "%s" called in Label decorator', $method));
}
/**
* Get label to render
*
* @return void
*/
public function getLabel()
{
if (null === ($element = $this->getElement())) {
return '';
}
$label = $element->getLabel();
$label = trim($label);
if (empty($label)) {
return '';
}
if (null !== ($translator = $element->getTranslator())) {
$label = $translator->translate($label);
}
$optPrefix = $this->getOptPrefix();
$optSuffix = $this->getOptSuffix();
$reqPrefix = $this->getReqPrefix();
$reqSuffix = $this->getReqSuffix();
$separator = $this->getSeparator();
if (!empty($label)) {
if ($element->isRequired()) {
$label = $reqPrefix . $label . $reqSuffix;
} else {
$label = $optPrefix . $label . $optSuffix;
}
}
return $label;
}
/**
* Render a label
*
* @param string $content
* @return string
*/
public function render($content)
{
$element = $this->getElement();
$view = $element->getView();
if (null === $view) {
return $content;
}
$label = $this->getLabel();
$separator = $this->getSeparator();
$placement = $this->getPlacement();
$tag = $this->getTag();
$id = $this->getId();
$class = $this->getClass();
$options = $this->getOptions();
if (empty($label) && empty($tag)) {
return $content;
}
if (!empty($label)) {
$options['class'] = $class;
$label = $view->formLabel($element->getFullyQualifiedName(), trim($label), $options);
} else {
$label = '&nbsp;';
}
if (null !== $tag) {
require_once 'Zend/Form/Decorator/HtmlTag.php';
$decorator = new Zend_Form_Decorator_HtmlTag();
$decorator->setOptions(array('tag' => $tag,
'id' => $this->getElement()->getName() . '-label'));
$label = $decorator->render($label);
}
switch ($placement) {
case self::APPEND:
return $content . $separator . $label;
case self::PREPEND:
return $label . $separator . $content;
}
}
}

View file

@ -0,0 +1,33 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Form
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
/**
* Zend_Form_Decorator_Marker_File_Interface
*
* @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: Interface.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
interface Zend_Form_Decorator_Marker_File_Interface
{
}

View file

@ -0,0 +1,90 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** Zend_Form_Decorator_FormElements */
require_once 'Zend/Form/Decorator/FormElements.php';
/**
* Zend_Form_Decorator_PrepareElements
*
* Render all form elements registered with current form
*
* Accepts following options:
* - separator: Separator to use between elements
*
* Any other options passed will be used as HTML attributes of the form tag.
*
* @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: PrepareElements.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_PrepareElements extends Zend_Form_Decorator_FormElements
{
/**
* Render form elements
*
* @param string $content
* @return string
*/
public function render($content)
{
$form = $this->getElement();
if ((!$form instanceof Zend_Form) && (!$form instanceof Zend_Form_DisplayGroup)) {
return $content;
}
$this->_recursivelyPrepareForm($form);
return $content;
}
protected function _recursivelyPrepareForm(Zend_Form $form)
{
$belongsTo = ($form instanceof Zend_Form) ? $form->getElementsBelongTo() : null;
$elementContent = '';
$separator = $this->getSeparator();
$translator = $form->getTranslator();
$view = $form->getView();
foreach ($form as $item) {
$item->setView($view)
->setTranslator($translator);
if ($item instanceof Zend_Form_Element) {
$item->setBelongsTo($belongsTo);
} elseif (!empty($belongsTo) && ($item instanceof Zend_Form)) {
if ($item->isArray()) {
$name = $this->mergeBelongsTo($belongsTo, $item->getElementsBelongTo());
$item->setElementsBelongTo($name, true);
} else {
$item->setElementsBelongTo($belongsTo, true);
}
$this->_recursivelyPrepareForm($item);
} elseif (!empty($belongsTo) && ($item instanceof Zend_Form_DisplayGroup)) {
foreach ($item as $element) {
$element->setBelongsTo($belongsTo);
}
}
}
}
}

View file

@ -0,0 +1,58 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Zend_Form_Decorator_Tooltip
*
* Will translate the title attribute, if available
*
* @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: Tooltip.php$
*/
class Zend_Form_Decorator_Tooltip extends Zend_Form_Decorator_Abstract
{
/**
* Translates the title attribute if it is available, if the translator is available
* and if the translator is not disable on the element being rendered.
*
* @param string $content
* @return string
*/
public function render($content)
{
if (null !== ($title = $this->getElement()->getAttrib('title'))) {
if (null !== ($translator = $this->getElement()->getTranslator())) {
$title = $translator->translate($title);
}
}
$this->getElement()->setAttrib('title', $title);
return $content;
}
}

View file

@ -0,0 +1,256 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Form
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Zend_Form_Decorator_ViewHelper
*
* Decorate an element by using a view helper to render it.
*
* Accepts the following options:
* - separator: string with which to separate passed in content and generated content
* - placement: whether to append or prepend the generated content to the passed in content
* - helper: the name of the view helper to use
*
* Assumes the view helper accepts three parameters, the name, value, and
* optional attributes; these will be provided by the element.
*
* @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: ViewHelper.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
class Zend_Form_Decorator_ViewHelper extends Zend_Form_Decorator_Abstract
{
/**
* Element types that represent buttons
* @var array
*/
protected $_buttonTypes = array(
'Zend_Form_Element_Button',
'Zend_Form_Element_Reset',
'Zend_Form_Element_Submit',
);
/**
* View helper to use when rendering
* @var string
*/
protected $_helper;
/**
* Set view helper to use when rendering
*
* @param string $helper
* @return Zend_Form_Decorator_Element_ViewHelper
*/
public function setHelper($helper)
{
$this->_helper = (string) $helper;
return $this;
}
/**
* Retrieve view helper for rendering element
*
* @return string
*/
public function getHelper()
{
if (null === $this->_helper) {
$options = $this->getOptions();
if (isset($options['helper'])) {
$this->setHelper($options['helper']);
$this->removeOption('helper');
} else {
$element = $this->getElement();
if (null !== $element) {
if (null !== ($helper = $element->getAttrib('helper'))) {
$this->setHelper($helper);
} else {
$type = $element->getType();
if ($pos = strrpos($type, '_')) {
$type = substr($type, $pos + 1);
}
$this->setHelper('form' . ucfirst($type));
}
}
}
}
return $this->_helper;
}
/**
* Get name
*
* If element is a Zend_Form_Element, will attempt to namespace it if the
* element belongs to an array.
*
* @return string
*/
public function getName()
{
if (null === ($element = $this->getElement())) {
return '';
}
$name = $element->getName();
if (!$element instanceof Zend_Form_Element) {
return $name;
}
if (null !== ($belongsTo = $element->getBelongsTo())) {
$name = $belongsTo . '['
. $name
. ']';
}
if ($element->isArray()) {
$name .= '[]';
}
return $name;
}
/**
* Retrieve element attributes
*
* Set id to element name and/or array item.
*
* @return array
*/
public function getElementAttribs()
{
if (null === ($element = $this->getElement())) {
return null;
}
$attribs = $element->getAttribs();
if (isset($attribs['helper'])) {
unset($attribs['helper']);
}
if (method_exists($element, 'getSeparator')) {
if (null !== ($listsep = $element->getSeparator())) {
$attribs['listsep'] = $listsep;
}
}
if (isset($attribs['id'])) {
return $attribs;
}
$id = $element->getName();
if ($element instanceof Zend_Form_Element) {
if (null !== ($belongsTo = $element->getBelongsTo())) {
$belongsTo = preg_replace('/\[([^\]]+)\]/', '-$1', $belongsTo);
$id = $belongsTo . '-' . $id;
}
}
$element->setAttrib('id', $id);
$attribs['id'] = $id;
return $attribs;
}
/**
* Get value
*
* If element type is one of the button types, returns the label.
*
* @param Zend_Form_Element $element
* @return string|null
*/
public function getValue($element)
{
if (!$element instanceof Zend_Form_Element) {
return null;
}
foreach ($this->_buttonTypes as $type) {
if ($element instanceof $type) {
if (stristr($type, 'button')) {
$element->content = $element->getLabel();
return null;
}
return $element->getLabel();
}
}
return $element->getValue();
}
/**
* Render an element using a view helper
*
* Determine view helper from 'viewHelper' option, or, if none set, from
* the element type. Then call as
* helper($element->getName(), $element->getValue(), $element->getAttribs())
*
* @param string $content
* @return string
* @throws Zend_Form_Decorator_Exception if element or view are not registered
*/
public function render($content)
{
$element = $this->getElement();
$view = $element->getView();
if (null === $view) {
require_once 'Zend/Form/Decorator/Exception.php';
throw new Zend_Form_Decorator_Exception('ViewHelper decorator cannot render without a registered view object');
}
if (method_exists($element, 'getMultiOptions')) {
$element->getMultiOptions();
}
$helper = $this->getHelper();
$separator = $this->getSeparator();
$value = $this->getValue($element);
$attribs = $this->getElementAttribs();
$name = $element->getFullyQualifiedName();
$id = $element->getId();
$attribs['id'] = $id;
$helperObject = $view->getHelper($helper);
if (method_exists($helperObject, 'setTranslator')) {
$helperObject->setTranslator($element->getTranslator());
}
$elementContent = $view->$helper($name, $value, $attribs, $element->options);
switch ($this->getPlacement()) {
case self::APPEND:
return $content . $separator . $elementContent;
case self::PREPEND:
return $elementContent . $separator . $content;
default:
return $elementContent;
}
}
}

View file

@ -0,0 +1,144 @@
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @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
*/
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
/**
* Zend_Form_Decorator_ViewScript
*
* Render a view script as a decorator
*
* Accepts the options:
* - separator: separator to use between view script content and provided content (defaults to PHP_EOL)
* - placement: whether to append or prepend view script content to provided content (defaults to prepend)
* - viewScript: view script to use
*
* The view script is rendered as a partial; the element being decorated is
* passed in as the 'element' variable:
* <code>
* // in view script:
* echo $this->element->getLabel();
* </code>
*
* Any options other than separator, placement, and viewScript 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 20096 2010-01-06 02:05:09Z bkarwin $
*/
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;
/**
* 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;
}
/**
* 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;
$renderedContent = $view->partial($viewScript, $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;
}
}
}