diff options
Diffstat (limited to '')
-rw-r--r-- | library/vendor/Zend/Form/Decorator/Callback.php | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/library/vendor/Zend/Form/Decorator/Callback.php b/library/vendor/Zend/Form/Decorator/Callback.php new file mode 100644 index 0000000..fb759fd --- /dev/null +++ b/library/vendor/Zend/Form/Decorator/Callback.php @@ -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-2015 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + */ + +/** Zend_Form_Decorator_Abstract */ + +/** + * 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-2015 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + * @version $Id$ + */ +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)) { + 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; + } + } +} |