diff options
Diffstat (limited to '')
-rw-r--r-- | library/vendor/Zend/Form/Decorator/Label.php | 461 |
1 files changed, 461 insertions, 0 deletions
diff --git a/library/vendor/Zend/Form/Decorator/Label.php b/library/vendor/Zend/Form/Decorator/Label.php new file mode 100644 index 0000000..c70c61e --- /dev/null +++ b/library/vendor/Zend/Form/Decorator/Label.php @@ -0,0 +1,461 @@ +<?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_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 + * - tagClass: if tag option is set, used to add a class to the label wrapper + * - opt(ional)Prefix: a prefix to the label to use when the element is optional + * - opt(ional)Suffix: 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-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_Label extends Zend_Form_Decorator_Abstract +{ + /** + * Placement constants + */ + const IMPLICIT = 'IMPLICIT'; + const IMPLICIT_PREPEND = 'IMPLICIT_PREPEND'; + const IMPLICIT_APPEND = 'IMPLICIT_APPEND'; + + /** + * Default placement: prepend + * @var string + */ + protected $_placement = 'PREPEND'; + + /** + * HTML tag with which to surround label + * @var string + */ + protected $_tag; + + /** + * Class for the HTML tag with which to surround label + * @var string + */ + protected $_tagClass; + + /** + * 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 string + */ + 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; + } + + /** + * Set the class to apply to the HTML tag with which to surround label + * + * @param string $tagClass + * @return Zend_Form_Decorator_Label + */ + public function setTagClass($tagClass) + { + if (empty($tagClass)) { + $this->_tagClass = null; + } else { + $this->_tagClass = (string) $tagClass; + } + + $this->removeOption('tagClass'); + + return $this; + } + + /** + * Get the class to apply to the HTML tag, if any, with which to surround label + * + * @return void + */ + public function getTagClass() + { + if (null === $this->_tagClass) { + $tagClass = $this->getOption('tagClass'); + if (null !== $tagClass) { + $this->removeOption('tagClass'); + $this->setTagClass($tagClass); + } + } + + return $this->_tagClass; + } + + /** + * 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: + 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)) { + 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; + } + } + + throw new Zend_Form_Exception(sprintf('Invalid method "%s" called in Label decorator', $method)); + } + + /** + * Get label to render + * + * @return string + */ + public function getLabel() + { + if (null === ($element = $this->getElement())) { + return ''; + } + + $label = $element->getLabel(); + $label = trim($label ?? ''); + + if (empty($label)) { + return ''; + } + + $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; + } + + /** + * Determine if label should append, prepend or implicit 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: + case self::IMPLICIT: + case self::IMPLICIT_PREPEND: + case self::IMPLICIT_APPEND: + $placement = $this->_placement = $placementOpt; + break; + case false: + $placement = $this->_placement = null; + break; + default: + break; + } + $this->removeOption('placement'); + } + + return $placement; + } + + /** + * 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(); + $tagClass = $this->getTagClass(); + $id = $this->getId(); + $class = $this->getClass(); + $options = $this->getOptions(); + + + if (empty($label) && empty($tag)) { + return $content; + } + + if (!empty($label)) { + $options['class'] = $class; + $label = trim($label); + + switch ($placement) { + case self::IMPLICIT: + // Break was intentionally omitted + + case self::IMPLICIT_PREPEND: + $options['escape'] = false; + $options['disableFor'] = true; + + $label = $view->formLabel( + $element->getFullyQualifiedName(), + $label . $separator . $content, + $options + ); + break; + + case self::IMPLICIT_APPEND: + $options['escape'] = false; + $options['disableFor'] = true; + + $label = $view->formLabel( + $element->getFullyQualifiedName(), + $content . $separator . $label, + $options + ); + break; + + case self::APPEND: + // Break was intentionally omitted + + case self::PREPEND: + // Break was intentionally omitted + + default: + $label = $view->formLabel( + $element->getFullyQualifiedName(), + $label, + $options + ); + break; + } + } else { + $label = ' '; + } + + if (null !== $tag) { + $decorator = new Zend_Form_Decorator_HtmlTag(); + if (null !== $this->_tagClass) { + $decorator->setOptions(array('tag' => $tag, + 'id' => $id . '-label', + 'class' => $tagClass)); + } else { + $decorator->setOptions(array('tag' => $tag, + 'id' => $id . '-label')); + } + + $label = $decorator->render($label); + } + + switch ($placement) { + case self::APPEND: + return $content . $separator . $label; + + case self::PREPEND: + return $label . $separator . $content; + + case self::IMPLICIT: + // Break was intentionally omitted + + case self::IMPLICIT_PREPEND: + // Break was intentionally omitted + + case self::IMPLICIT_APPEND: + return $label; + } + } +} |