Beispiel #1
0
 public function render(ElementInterface $element)
 {
     $element->setAttribute('data-role', 'datepicker');
     if ($element->getOption('default-today')) {
         $element->setAttribute('data-default-today', 'true');
     }
     return parent::render($element);
 }
 /**
  * Prepares the element prior to rendering
  * @param \Zend\Form\ElementInterface $element
  * @param string $formType
  * @param array $displayOptions
  * @return void
  */
 protected function prepareElementBeforeRendering(ElementInterface $element, $formType, array $displayOptions)
 {
     if (array_key_exists('class', $displayOptions)) {
         $class = $element->getAttribute('class');
         $class = $this->genUtil->addWords($displayOptions['class'], $class);
         $escapeHtmlAttrHelper = $this->getEscapeHtmlAttrHelper();
         $class = $this->genUtil->escapeWords($class, $escapeHtmlAttrHelper);
         $element->setAttribute('class', $class);
     }
     if (array_key_exists('rows', $displayOptions)) {
         $element->setAttribute('rows', (int) $displayOptions['rows']);
     }
     $this->formUtil->addIdAttributeIfMissing($element);
 }
 public function render(ElementInterface $element)
 {
     if ($element->getOption('use-switch')) {
         $element->setAttribute('data-switch', '1');
     }
     return parent::render($element);
 }
Beispiel #4
0
 public function render(ElementInterface $element = null)
 {
     if ($element->getMessages()) {
         $element->setAttribute('class', 'error ' . $element->getAttribute('class'));
     }
     return parent::render($element);
 }
 /**
  * Render a form <select> element from the provided $element
  * @param  ElementInterface $element
  * @param null|string $formType
  * @param array $displayOptions
  * @return string
  */
 public function render(ElementInterface $element, $formType = null, array $displayOptions = array())
 {
     if (array_key_exists('class', $displayOptions)) {
         $class = $element->getAttribute('class');
         $class = $this->genUtil->addWords($displayOptions['class'], $class);
         $escapeHtmlAttrHelper = $this->getEscapeHtmlAttrHelper();
         $class = $this->genUtil->escapeWords($class, $escapeHtmlAttrHelper);
         $element->setAttribute('class', $class);
     }
     if (array_key_exists('size', $displayOptions)) {
         $element->setAttribute('size', (int) $displayOptions['size']);
     }
     $this->formUtil->addIdAttributeIfMissing($element);
     $html = parent::render($element);
     return $html;
 }
Beispiel #6
0
    /**
     * {@inheritDoc}
     */
    public function render(ElementInterface $element)
    {
        if (!$element instanceof LoginFieldElement) {
            return '';
        }
        $fields = $element->getFields();
        if (1 == count($fields)) {
            $element->setAttribute('placeholder', current($fields));
            return parent::render($element);
        }
        $template = $element->getOption('template') ?: '<div class="input-group">%s</div>';
        $pattern = <<<EOT
<input name="%s[0]" %s%s
<span class="input-group-addon">
    <select class="pull-right" name="%s[1]">
        %s
    </select>
</span>
EOT;
        $name = $element->getName();
        list($value, $field) = $element->getValue();
        $attributes = array_replace($element->getAttributes(), array('type' => 'text', 'value' => $value));
        if (!isset($attributes['class'])) {
            $attributes['class'] = 'form-control';
        }
        $attribString = $this->createAttributesString($attributes);
        $patternField = '<option value="%s"%s>%s</option>' . PHP_EOL;
        $fieldString = '';
        foreach ($fields as $key => $label) {
            $class = $field == $key ? ' selected' : '';
            $fieldString .= sprintf($patternField, $key, $class, $label);
        }
        $html = sprintf($template, sprintf($pattern, $name, $attribString, $this->getInlineClosingBracket(), $name, $fieldString));
        return $html;
    }
Beispiel #7
0
 /**
  * Render a form <input> element from the provided $element
  *
  * @param ElementInterface $element Zend Form Element
  *
  * @throws Exception\InvalidArgumentException
  * @throws Exception\DomainException
  * @return string
  */
 public function render(ElementInterface $element)
 {
     if (!$element instanceof CheckboxElement) {
         throw new Exception\InvalidArgumentException(sprintf('%s requires that the element is of type Zend\\Form\\Element\\Checkbox', __METHOD__));
     }
     $name = $element->getName();
     if (empty($name) && $name !== 0) {
         throw new Exception\DomainException(sprintf('%s requires that the element has an assigned name; none discovered', __METHOD__));
     }
     $attributes = $element->getAttributes();
     $attributes['name'] = $name;
     $attributes['type'] = $this->getInputType();
     $attributes['value'] = $element->getCheckedValue();
     $closingBracket = $this->getInlineClosingBracket();
     if ($element->isChecked()) {
         $attributes['checked'] = 'checked';
     }
     if ($element->getAttribute('class') != 'input-checkbox') {
         $rendered = sprintf('<input %s%s', $this->createAttributesString($attributes), $closingBracket);
     } else {
         if ($element->getAttribute('id') == '') {
             $element->setAttribute('id', 'checkbox-' . uniqid());
         }
         unset($attributes['class']);
         $rendered = sprintf('<span class="input-checkbox"><input %s%s<label for="%s"></label></span>', $this->createAttributesString($attributes), $closingBracket, $element->getAttribute('id'));
     }
     return $rendered;
 }
 public function render(ElementInterface $element)
 {
     $element->setAttribute('class', $element->getAttribute('class') . " btn");
     $input = parent::render($element);
     $options = $element->getOptions();
     if (!empty($options['as-group'])) {
         $col_left_width = 'sm-6';
         $col_right_width = 'sm-6';
         $button_column = 'left';
         if (!empty($options['col-left-width'])) {
             $col_left_width = $options['col-left-width'];
         }
         if (!empty($options['col-right-width'])) {
             $col_right_width = $options['col-right-width'];
         }
         if (!empty($options['button-column'])) {
             $button_column = $options['button-column'];
         }
         $colFormat = '<div class="col-%s">%s</div><div class="col-%s">%s</div>';
         $buttonFormat = '<div class="btn-group btn-group-justified"><div class="btn-group">%s</div></div>';
         $inputContainer = sprintf($buttonFormat, $input);
         $leftColumn = $inputContainer;
         $rightColumn = '';
         if ($button_column != 'left') {
             $leftColumn = '';
             $rightColumn = $inputContainer;
         }
         $input = sprintf($colFormat, $col_left_width, $leftColumn, $col_right_width, $rightColumn);
     }
     return $input;
 }
Beispiel #9
0
 /**
  * {@inheritDoc}
  */
 public function render(ElementInterface $element)
 {
     if ($element->hasAttribute('class')) {
         $class = $element->getAttribute('class');
         if (strpos($class, 'selectpicker') !== false && $this->getView()->jQuery()->twbs->bootstrapSelect) {
             if (!$element->hasAttribute('data-width')) {
                 $element->setAttribute('data-width', 'auto');
             }
             if (strpos($class, 'btn-') === false) {
                 $class .= ' btn-default';
             }
             $element->setAttribute('data-style', $class);
             $element->setAttribute('class', 'selectpicker');
         }
     }
     return parent::render($element);
 }
Beispiel #10
0
 public function render(ElementInterface $element)
 {
     if ($element->hasAttribute('data-placeholder')) {
         $placeholder = $element->getAttribute('data-placeholder');
         $placeholder = $this->getTranslator()->translate($placeholder, $this->getTranslatorTextDomain());
         $element->setAttribute('data-placeholder', $placeholder);
     }
     return parent::render($element);
 }
 /**
  * Render an element
  *
  * @param ElementInterface $oElement        	
  * @return string
  */
 public function render(ElementInterface $oElement)
 {
     // Add form-controll class
     $sElementType = $oElement->getAttribute('type');
     if (!in_array($sElementType, $this->options->getIgnoredViewHelpers()) && !$oElement instanceof Collection) {
         $sElementClass = $oElement->getAttribute('class');
         if ($sElementClass) {
             if (!preg_match('/(\\s|^)form-control(\\s|$)/', $sElementClass)) {
                 $oElement->setAttribute('class', trim($sElementClass . ' form-control'));
             }
         } else {
             $oElement->setAttribute('class', 'form-control');
         }
     }
     $sMarkup = parent::render($oElement);
     // Addon prepend
     $aAddOnPrepend = $oElement->getOption('add-on-prepend');
     if ($aAddOnPrepend) {
         $sMarkup = $this->renderAddOn($aAddOnPrepend) . $sMarkup;
     }
     // Addon append
     $aAddOnAppend = $oElement->getOption('add-on-append');
     if ($aAddOnAppend) {
         $sMarkup .= $this->renderAddOn($aAddOnAppend);
     }
     if ($aAddOnAppend || $aAddOnPrepend) {
         $sSpecialClass = '';
         // Input size
         $sElementClass = $oElement->getAttribute('class');
         if ($sElementClass) {
             if (preg_match('/(\\s|^)input-lg(\\s|$)/', $sElementClass)) {
                 $sSpecialClass .= ' input-group-lg';
             } elseif (preg_match('/(\\s|^)input-sm(\\s|$)/', $sElementClass)) {
                 $sSpecialClass .= ' input-group-sm';
             }
         }
         return sprintf(self::$inputGroupFormat, trim($sSpecialClass), $sMarkup);
     }
     return $sMarkup;
 }
 /**
  * Prepares the element prior to rendering
  * @param \Zend\Form\ElementInterface $element
  * @param string $formType
  * @param array $displayOptions
  * @return void
  */
 protected function prepareElementBeforeRendering(ElementInterface $element, $formType, array $displayOptions)
 {
     $class = $element->getAttribute('class');
     $class = $this->genUtil->addWords('btn', $class);
     if (array_key_exists('class', $displayOptions)) {
         $class = $this->genUtil->addWords($displayOptions['class'], $class);
     }
     if ($element->getOption('primary') && $element->getOption('primary') == true) {
         $class = $this->genUtil->addWords('btn-primary', $class);
     }
     $class = $this->genUtil->escapeWords($class, $this->getEscapeHtmlAttrHelper());
     $element->setAttribute('class', $class);
 }
 /**
  * Utility form helper that renders a label (if it exists), an element and errors
  *
  * @param  ElementInterface $element
  * @throws \Zend\Form\Exception\DomainException
  * @return string
  */
 public function render(ElementInterface $element, $labelPosition = null)
 {
     $escapeHtmlHelper = $this->getEscapeHtmlHelper();
     $elementHelper = $this->getElementHelper();
     $elementErrorsHelper = $this->getElementErrorsHelper();
     $label = $element->getLabel();
     $inputErrorClass = $this->getInputErrorClass();
     if (isset($label) && '' !== $label) {
         // Translate the label
         if (null !== ($translator = $this->getTranslator())) {
             $label = $translator->translate($label, $this->getTranslatorTextDomain());
         }
     }
     // Does this element have errors ?
     if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) {
         $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : '';
         $classAttributes = $classAttributes . $inputErrorClass;
         $element->setAttribute('class', $classAttributes);
     }
     if ($this->partial) {
         $vars = array('element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $this->labelPosition, 'renderErrors' => $this->renderErrors);
         return $this->view->render($this->partial, $vars);
     }
     $rowOpen = '<div class="form-group">';
     $rowClose = '</div>';
     $elementString = $elementHelper->render($element);
     if ($elementErrorsHelper->render($element)) {
         $rowOpen = '<div class="form-group has-error">';
         $elementErrors = $elementErrorsHelper->setMessageOpenFormat('<p class="text-danger">')->setMessageSeparatorString('<br />')->setMessageCloseString('</p>')->render($element);
         $elementString .= $elementErrors;
     }
     // hidden elements do not need a <label> -https://github.com/zendframework/zf2/issues/5607
     $type = $element->getAttribute('type');
     if (isset($label) && '' !== $label && $type !== 'hidden') {
         if (!$element instanceof LabelAwareInterface || !$element->getLabelOption('disable_html_escape')) {
             $label = $escapeHtmlHelper($label);
         }
         if ($label !== '' && !$element->hasAttribute('id') || $element instanceof LabelAwareInterface && $element->getLabelOption('always_wrap')) {
             $label = '<label class="col-sm-3 control-label">' . $label . '</label>';
         }
         $elementString = '<div class="col-sm-9">' . $elementString . '</div>';
         // Button element is a special case, because label is always rendered inside it
         if ($element instanceof Button || $element instanceof Checkbox || $element instanceof Radio) {
             $label = '<div class="col-sm-3"></div>';
         }
         $markup = $label . $elementString;
     } else {
         $markup = $elementString;
     }
     return $rowOpen . $markup . $rowClose;
 }
 /**
  * Prepares the element prior to rendering
  * @param \Zend\Form\ElementInterface $element
  * @param string $formType
  * @param array $displayOptions
  * @return void
  */
 protected function prepareElementBeforeRendering(ElementInterface $element, $formType, array $displayOptions)
 {
     $class = $element->getAttribute('class');
     if (array_key_exists('class', $displayOptions)) {
         $class = $this->genUtil->addWords($displayOptions['class'], $class);
     }
     if ($formType == FormUtil::FORM_TYPE_SEARCH) {
         $class = $this->genUtil->addWords('search-query', $class);
     }
     $escapeHtmlAttrHelper = $this->getEscapeHtmlAttrHelper();
     $class = $this->genUtil->escapeWords($class, $escapeHtmlAttrHelper);
     $element->setAttribute('class', $class);
     $this->formUtil->addIdAttributeIfMissing($element);
 }
 /**
  * Remove class
  *
  * @param ElementInterface $element
  * @param string $class
  * @return ElementInterface
  */
 public function removeClass(ElementInterface $element, $class)
 {
     $classes = explode(' ', $element->getAttribute('class'));
     $class = trim($class);
     if (in_array($class, $classes)) {
         foreach ($classes as $key => $name) {
             if ($name === $class) {
                 unset($classes[$key]);
             }
         }
         $element->setAttribute('class', implode(' ', $classes));
     }
     return $element;
 }
 /**
  * Render an element
  * @param \Zend\Form\ElementInterface $oElement
  * @return string
  */
 public function render(\Zend\Form\ElementInterface $oElement)
 {
     // Add form-controll class
     $sElementType = $oElement->getAttribute('type');
     if (!in_array($sElementType, array('file', 'checkbox', 'radio', 'submit', 'multi_checkbox', 'static', 'button', 'reset')) && !$oElement instanceof \Zend\Form\Element\Collection) {
         if ($sElementClass = $oElement->getAttribute('class')) {
             if (!preg_match('/(\\s|^)form-control(\\s|$)/', $sElementClass)) {
                 $oElement->setAttribute('class', trim($sElementClass . ' form-control'));
             }
         } else {
             $oElement->setAttribute('class', 'form-control');
         }
     }
     $sMarkup = parent::render($oElement);
     // Addon prepend
     if ($aAddOnPrepend = $oElement->getOption('add-on-prepend')) {
         $sMarkup = $this->renderAddOn($aAddOnPrepend) . $sMarkup;
     }
     // Addon append
     if ($aAddOnAppend = $oElement->getOption('add-on-append')) {
         $sMarkup .= $this->renderAddOn($aAddOnAppend);
     }
     if ($aAddOnAppend || $aAddOnPrepend) {
         $sSpecialClass = '';
         // Input size
         if ($sElementClass = $oElement->getAttribute('class')) {
             if (preg_match('/(\\s|^)input-lg(\\s|$)/', $sElementClass)) {
                 $sSpecialClass .= ' input-group-lg';
             } elseif (preg_match('/(\\s|^)input-sm(\\s|$)/', $sElementClass)) {
                 $sSpecialClass .= ' input-group-sm';
             }
         }
         return sprintf(self::$inputGroupFormat, trim($sSpecialClass), $sMarkup);
     }
     return $sMarkup;
 }
Beispiel #17
0
 /**
  * @param File $element
  * @return string
  */
 public function render(ElementInterface $element)
 {
     if ($element instanceof File && $element->getFileObject()) {
         $fileObject = $element->getFileObject();
         $fm = FileManager::getInstance();
         $element->setAttribute('class', 'hidden');
         $render = parent::render($element);
         $render .= '<div class="file-container"><div class="file-icon">';
         if ($element instanceof FileImage) {
             $render .= '<img src="' . $this->view->basePath($fm->getThumbImage($fileObject, 64, 64)) . '">';
         } else {
             $render .= '<img src="/img/mfcc-admin-module/file-icons/' . $fileObject->getFileExtension() . '.svg">';
         }
         $render .= '</div><div class="file-info"><strong>' . $fileObject->getName() . '</strong><br><span class="file-size">' . $fileObject->getFormattedSize() . '</span><button type="button" class="btn btn-xs btn-danger file-remove"><i class="fa fa-remove"></i> Remove</button></div></div>';
     } else {
         $render = parent::render($element);
     }
     return $render;
 }
Beispiel #18
0
    /**
     * Renders editor contents
     *
     * @param  ElementInterface $element
     * @return string
     */
    public function render(ElementInterface $element)
    {
        $options = array_merge($this->getOptions(), $element->getOptions());
        $attributes = array_merge($this->getAttributes(), $element->getAttributes());
        $view = $this->view;
        // Set up set and skin
        $set = isset($options['set']) ? $options['set'] : 'html';
        $skin = isset($options['skin']) ? $options['skin'] : 'simple';
        // Set up CSS
        $view->css(sprintf('%s/editor/markitup/skins/%s/style.css', Pi::url('script'), $skin));
        $view->css(sprintf('%s/editor/markitup/sets/%s/style.css', Pi::url('script'), $set));
        // Set up JavaScript
        $view->jQuery();
        $view->js(Pi::url('script') . '/editor/markitup/jquery.markitup.js');
        $view->js(sprintf('%s/editor/markitup/sets/%s/set.js', Pi::url('script'), $set));
        $parserpath = '';
        if (!empty($options['sets'][$set]['parser_path'])) {
            $parserpath = $options['sets'][$set]['parser_path'];
        } else {
            $path = sprintf('%s/editor/markitup/sets/%s/preview.php', Pi::path('script'), $set);
            if (file_exists($path)) {
                $parserpath = sprintf('~/sets/%s/preview.php', $set);
            }
        }
        $scriptJs = <<<EOT
\$(document).ready(function()    {
    mySettings.previewParserPath = '{$parserpath}';
    mySettings.previewParserVar = 'preview';
    \$('#%s').markItUp(mySettings);
});
EOT;
        if (isset($attributes['id'])) {
            $id = $attributes['id'];
        } else {
            $id = uniqid($element->getName());
        }
        $element->setAttribute('id', $id);
        $js = sprintf($scriptJs, $id);
        $view->HeadScript('script', $js);
    }
Beispiel #19
0
 /**
  * If the 'id' attribute of the element is not defined, it is set to equal the element's name value
  * //TODO - escape html attr?
  * @param ElementInterface $element
  */
 public function addIdAttributeIfMissing(ElementInterface $element)
 {
     if (!$element->getAttribute('id')) {
         $element->setAttribute('id', $element->getName());
     }
 }
Beispiel #20
0
 public function setZendFormElement(ElementInterface $element)
 {
     $element->setAttribute('data-ui-select2', $this->selectOptions);
     return parent::setZendFormElement($element);
 }
 /**
  * @see \Zend\Form\View\Helper\FormButton::render()
  * @param \Zend\Form\ElementInterface $oElement
  * @param string $sButtonContent
  * @throws \LogicException
  * @throws \Exception
  * @return string
  */
 public function render(\Zend\Form\ElementInterface $oElement, $sButtonContent = null)
 {
     if ($sClass = $oElement->getAttribute('class')) {
         if (!preg_match('/(\\s|^)btn(\\s|$)/', $sClass)) {
             $sClass .= ' btn';
         }
         if (!preg_match('/(\\s|^)btn-.*(\\s|$)/', $sClass)) {
             $sClass .= ' btn-default';
         } else {
             $bHasOption = false;
             foreach (self::$buttonOptions as $sButtonOption) {
                 if (preg_match('/(\\s|^)btn-' . $sButtonOption . '.*(\\s|$)/', $sClass)) {
                     $bHasOption = true;
                     break;
                 }
             }
             if (!$bHasOption) {
                 $sClass .= ' btn-default';
             }
         }
         $oElement->setAttribute('class', trim($sClass));
     } else {
         $oElement->setAttribute('class', 'btn btn-default');
     }
     //Retrieve glyphicon options
     $aGlyphiconOptions = $oElement->getOption('glyphicon');
     //Define button content
     if (null === $sButtonContent) {
         $sButtonContent = $oElement->getLabel();
         if (null === $sButtonContent && !$aGlyphiconOptions) {
             throw new \DomainException(sprintf('%s expects either button content as the second argument, ' . 'or that the element provided has a label value or a glyphicon option; neither found', __METHOD__));
         }
         if (null !== ($oTranslator = $this->getTranslator())) {
             $sButtonContent = $oTranslator->translate($sButtonContent, $this->getTranslatorTextDomain());
         }
     }
     if (!$oElement instanceof LabelAwareInterface || !$oElement->getLabelOption('disable_html_escape')) {
         $escapeHtmlHelper = $this->getEscapeHtmlHelper();
         $sButtonContent = $escapeHtmlHelper($sButtonContent);
     }
     //Glyphicon
     if ($aGlyphiconOptions) {
         if (is_scalar($aGlyphiconOptions)) {
             $aGlyphiconOptions = array('icon' => $aGlyphiconOptions, 'position' => self::GLYPHICON_PREPEND);
         } elseif (!is_array($aGlyphiconOptions)) {
             throw new \LogicException('"glyphicon" button option expects a scalar value or an array, "' . gettype($aGlyphiconOptions) . '" given');
         } elseif (!is_scalar($aGlyphiconOptions['icon'])) {
             throw new \LogicException('Glyphicon "icon" option expects a scalar value, "' . gettype($aGlyphiconOptions['icon']) . '" given');
         } elseif (empty($aGlyphiconOptions['position'])) {
             $aGlyphiconOptions['position'] = 'prepend';
         } elseif (!is_string($aGlyphiconOptions['position'])) {
             throw new \LogicException('Glyphicon "position" option expects a string, "' . gettype($aGlyphiconOptions['position']) . '" given');
         } elseif ($aGlyphiconOptions['position'] !== self::GLYPHICON_PREPEND && $aGlyphiconOptions['position'] !== self::GLYPHICON_APPEND) {
             throw new \LogicException('Glyphicon "position" option allows "' . self::GLYPHICON_PREPEND . '" or "' . self::GLYPHICON_APPEND . '", "' . $aGlyphiconOptions['position'] . '" given');
         }
         if ($sButtonContent) {
             if ($aGlyphiconOptions['position'] === self::GLYPHICON_PREPEND) {
                 $sButtonContent = $this->getView()->glyphicon($aGlyphiconOptions['icon'], isset($aGlyphiconOptions['attributes']) ? $aGlyphiconOptions['attributes'] : null) . ' ' . $sButtonContent;
             } else {
                 $sButtonContent .= ' ' . $this->getView()->glyphicon($aGlyphiconOptions['icon'], isset($aGlyphiconOptions['attributes']) ? $aGlyphiconOptions['attributes'] : null);
             }
         } else {
             $sButtonContent = $this->getView()->glyphicon($aGlyphiconOptions['icon'], isset($aGlyphiconOptions['attributes']) ? $aGlyphiconOptions['attributes'] : null);
         }
     }
     //Dropdown button
     if ($aDropdownOptions = $oElement->getOption('dropdown')) {
         if (!is_array($aDropdownOptions)) {
             throw new \LogicException('"dropdown" option expects an array, "' . gettype($aDropdownOptions) . '" given');
         }
         if (empty($aDropdownOptions['split'])) {
             //Class
             if (!preg_match('/(\\s|^)dropdown-toggle(\\s|$)/', $sClass = $oElement->getAttribute('class'))) {
                 $oElement->setAttribute('class', trim($sClass . ' dropdown-toggle'));
             }
             //data-toggle
             $oElement->setAttribute('data-toggle', 'dropdown');
             $sMarkup = $this->openTag($oElement) . sprintf(self::$dropdownToggleFormat, $sButtonContent) . $this->closeTag();
         } else {
             $sMarkup = $this->openTag($oElement) . $sButtonContent . $this->closeTag() . sprintf(self::$dropdownCaretFormat, $oElement->getAttribute('class'));
         }
         //No container
         if ($oElement->getOption('disable-twb')) {
             return $sMarkup . $this->getView()->dropdown()->renderListItems($aDropdownOptions);
         }
         //Render button + dropdown
         return sprintf(self::$dropdownContainerFormat, empty($aDropdownOptions['dropup']) ? '' : 'dropup', $sMarkup . $this->getView()->dropdown()->renderListItems($aDropdownOptions));
     }
     return $this->openTag($oElement) . $sButtonContent . $this->closeTag();
 }
Beispiel #22
0
 /**
  * Gets the id of an element. Makes one up if there is none yet.
  * @return string
  */
 protected function getElementId(ElementInterface $element)
 {
     $elementId = $element->getAttribute('id');
     if ($elementId) {
         return $elementId;
     }
     // Generate an id if the element has none yet.
     $newId = 'coll-' . substr(sha1(rand(0, 9999) . $element->getName()), 0, 7);
     $element->setAttribute('id', $newId);
     return $newId;
 }
Beispiel #23
0
 public function render(ElementInterface $element, $isHorizontal = false, $labelColumns = 2)
 {
     $escapeHtmlHelper = $this->getEscapeHtmlHelper();
     $labelHelper = $this->getLabelHelper();
     $elementHelper = $this->getElementHelper();
     $elementErrorsHelper = $this->getElementErrorsHelper();
     $label = $element->getLabel();
     $inputErrorClass = $this->getInputErrorClass();
     if (isset($label) && '' !== $label) {
         // Translate the label
         if (null !== ($translator = $this->getTranslator())) {
             $label = $translator->translate($label, $this->getTranslatorTextDomain());
         }
     }
     $type = $element->getAttribute('type');
     if ($type != 'checkbox' && $type != 'submit' && $type != 'button' && $type != 'radio' && $type != 'file' && $type != 'multi_checkbox') {
         $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : '';
         $classAttributes = $classAttributes . 'form-control';
         $element->setAttribute('class', $classAttributes);
     } elseif ($type == 'button' || $type == 'submit') {
         $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : '';
         $classAttributes = $classAttributes . 'btn';
         $element->setAttribute('class', $classAttributes);
     }
     // Does this element have errors ?
     if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) {
         $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : '';
         $classAttributes = $classAttributes . $inputErrorClass;
         $element->setAttribute('class', $classAttributes);
     }
     if ($this->partial) {
         $vars = ['element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $this->labelPosition, 'renderErrors' => $this->renderErrors];
         return $this->view->render($this->partial, $vars);
     }
     $elementErrors = '';
     if ($this->renderErrors) {
         $elementErrors = $elementErrorsHelper->render($element, ['class' => 'text-danger']);
     }
     $elementString = $elementHelper->render($element);
     $addonAppend = $element->getOption('addon-append');
     $addonPrepend = $element->getOption('addon-prepend');
     if ($addonAppend !== null || $addonPrepend !== null) {
         $addonString = '<div class="input-group">';
         $addonString .= $this->addAddon($addonPrepend);
         $addonString .= $elementString;
         $addonString .= $this->addAddon($addonAppend);
         $addonString .= '</div>';
         $elementString = $addonString;
     }
     $elementString .= $this->getHelpBlock($element);
     // hidden elements do not need a <label> -https://github.com/zendframework/zf2/issues/5607
     if (isset($label) && '' !== $label && $type !== 'hidden') {
         $labelAttributes = [];
         if ($element instanceof LabelAwareInterface) {
             $labelAttributes = $element->getLabelAttributes();
         }
         if (!$element instanceof LabelAwareInterface || !$element->getLabelOption('disable_html_escape')) {
             $label = $escapeHtmlHelper($label);
         }
         if (empty($labelAttributes)) {
             $labelAttributes = $this->labelAttributes;
         }
         if (!$element->getAttribute('id') && $element->getName()) {
             $element->setAttribute('id', $element->getName());
         }
         if ($element->getAttribute('id')) {
             $labelAttributes['for'] = $element->getAttribute('id');
         }
         if ($isHorizontal) {
             $labelAttributes['class'] = ' control-label col-sm-' . $labelColumns;
             if ($element instanceof LabelAwareInterface) {
                 $element->setLabelAttributes(['class' => 'control-label col-sm-' . $labelColumns]);
             }
         } else {
             $labelAttributes['class'] = ' control-label';
             if ($element instanceof LabelAwareInterface) {
                 $element->setLabelAttributes(['class' => 'control-label']);
             }
         }
         // Multicheckbox elements have to be handled differently as the HTML standard does not allow nested
         // labels. The semantic way is to group them inside a fieldset
         if (!$isHorizontal && ($type === 'multi_checkbox' || $type === 'radio' || $element instanceof MonthSelect)) {
             $markup = sprintf('<fieldset class="radio"><legend>%s</legend>%s</fieldset>', $label, $elementString);
         } elseif ($type == 'checkbox') {
             // Checkboxes need special treatment too
             if ($isHorizontal) {
                 $markup = '<div class="form-group"><div class="checkbox col-xs-' . (12 - $labelColumns) . ' col-xs-offset-' . $labelColumns . '"><label>' . $elementString . $label . '</label></div></div>';
             } else {
                 $markup = '<div class="checkbox"><label>' . $elementString . $label . '</label></div>';
             }
         } else {
             // Ensure element and label will be separated if element has an `id`-attribute.
             // If element has label option `always_wrap` it will be nested in any case.
             if ($element->hasAttribute('id') && ($element instanceof LabelAwareInterface && !$element->getLabelOption('always_wrap'))) {
                 $labelOpen = '';
                 $labelClose = '';
                 $label = $labelHelper($element);
             } else {
                 $labelOpen = $labelHelper->openTag($labelAttributes);
                 $labelClose = $labelHelper->closeTag();
             }
             if ($label !== '' && !$element->hasAttribute('id') || $element instanceof LabelAwareInterface && $element->getLabelOption('always_wrap')) {
                 $label = '<span>' . $label . '</span>';
             }
             $addDivClass = '';
             // Button element is a special case, because label is always rendered inside it
             if ($element instanceof Button) {
                 $labelOpen = $labelClose = $label = '';
                 $addDivClass = ' col-xs-offset-' . $labelColumns;
             }
             if ($type == 'radio') {
                 $addDivClass = ' radio';
             }
             switch ($this->labelPosition) {
                 case self::LABEL_PREPEND:
                     if ($isHorizontal) {
                         $markup = sprintf($this->horizontalRowWrapper, !empty($elementErrors) ? ' has-error' : '', $labelOpen . $label . $labelClose, 12 - $labelColumns, $addDivClass, $elementString . ($this->renderErrors ? $elementErrors : ''), '');
                     } else {
                         $markup = sprintf($this->rowWrapper, !empty($elementErrors) ? ' has-error' : '', $labelOpen . $label . $labelClose, $elementString);
                     }
                     break;
                 case self::LABEL_APPEND:
                 default:
                     if ($isHorizontal) {
                         $markup = sprintf($this->horizontalRowWrapper, !empty($elementErrors) ? ' has-error' : '', '', 12 - $labelColumns, $addDivClass, $elementString . ($this->renderErrors ? $elementErrors : ''), $labelOpen . $label . $labelClose);
                     } else {
                         $markup = sprintf($this->rowWrapper, !empty($elementErrors) ? ' has-error' : '', $elementString, $labelOpen . $label . $labelClose);
                     }
                     break;
             }
         }
         if (!$isHorizontal && $this->renderErrors) {
             $markup .= $elementErrors;
         }
     } else {
         if ($isHorizontal && $this->labelPosition == self::LABEL_PREPEND && $type !== 'hidden') {
             $markup = sprintf($this->horizontalRowWrapper, !empty($elementErrors) ? ' has-error' : '', '', 12 - $labelColumns, ' col-xs-offset-' . $labelColumns, $elementString . ($this->renderErrors ? $elementErrors : ''), '');
         } else {
             if ($this->renderErrors) {
                 $markup = $elementString . $elementErrors;
             } else {
                 $markup = $elementString;
             }
         }
     }
     return $markup;
 }
 /**
  * @see FormButton::render()
  * @param ElementInterface $oElement
  * @param string $sButtonContent
  * @throws LogicException
  * @throws Exception
  * @return string
  */
 public function render(ElementInterface $oElement, $sButtonContent = null)
 {
     if ($sClass = $oElement->getAttribute('class')) {
         if (!preg_match('/(\\s|^)btn(\\s|$)/', $sClass)) {
             $sClass .= ' btn';
         }
         if (!preg_match('/(\\s|^)btn-.*(\\s|$)/', $sClass)) {
             $sClass .= ' btn-default';
         } else {
             $bHasOption = false;
             foreach (self::$buttonOptions as $sButtonOption) {
                 if (preg_match('/(\\s|^)btn-' . $sButtonOption . '.*(\\s|$)/', $sClass)) {
                     $bHasOption = true;
                     break;
                 }
             }
             if (!$bHasOption) {
                 $sClass .= ' btn-default';
             }
         }
         $oElement->setAttribute('class', trim($sClass));
     } else {
         $oElement->setAttribute('class', 'btn btn-default');
     }
     // Retrieve icon options
     if (null !== ($aIconOptions = $oElement->getOption('glyphicon'))) {
         $sIconHelperMethod = 'glyphicon';
     } elseif (null !== ($aIconOptions = $oElement->getOption('fontAwesome'))) {
         $sIconHelperMethod = 'fontAwesome';
     } elseif (null !== ($aIconOptions = $oElement->getOption('flaticon'))) {
         $sIconHelperMethod = 'flaticon';
     }
     /*
      * Define button content
      */
     if (null === $sButtonContent) {
         $sButtonContent = $oElement->getLabel();
         if (!$sButtonContent) {
             $sButtonContent = $oElement->getValue();
         }
         if (null === $sButtonContent && !$aIconOptions) {
             throw new DomainException(sprintf('%s expects either button content as the second argument, ' . 'or that the element provided has a label value, a glyphicon option, or a fontAwesome option; none found', __METHOD__));
         }
         if (null !== ($oTranslator = $this->getTranslator())) {
             $sButtonContent = $oTranslator->translate($sButtonContent, $this->getTranslatorTextDomain());
         }
     }
     if (!$oElement instanceof LabelAwareInterface || !$oElement->getLabelOption('disable_html_escape')) {
         $oEscapeHtmlHelper = $this->getEscapeHtmlHelper();
         $sButtonContent = $oEscapeHtmlHelper($sButtonContent);
     }
     /*
      * Manage icon
      */
     if ($aIconOptions) {
         if (is_scalar($aIconOptions)) {
             $aIconOptions = array('icon' => $aIconOptions, 'position' => self::ICON_PREPEND);
         }
         if (!is_array($aIconOptions)) {
             throw new LogicException(sprintf('"glyphicon" and "fontAwesome" button option expects a scalar value or an array, "%s" given', is_object($aIconOptions) ? get_class($aIconOptions) : gettype($aIconOptions)));
         }
         $position = 'prepend';
         if (!empty($aIconOptions['position'])) {
             $position = $aIconOptions['position'];
         }
         if (!empty($aIconOptions['icon'])) {
             $icon = $aIconOptions['icon'];
         }
         if (!is_scalar($icon)) {
             throw new LogicException(sprintf('Glyphicon and fontAwesome "icon" option expects a scalar value, "%s" given', is_object($icon) ? get_class($icon) : gettype($icon)));
         } elseif (!is_string($position)) {
             throw new LogicException(sprintf('Glyphicon and fontAwesome "position" option expects a string, "%s" given', is_object($position) ? get_class($position) : gettype($position)));
         } elseif ($position !== self::ICON_PREPEND && $position !== self::ICON_APPEND) {
             throw new LogicException(sprintf('Glyphicon and fontAwesome "position" option allows "' . self::ICON_PREPEND . '" or "' . self::ICON_APPEND . '", "%s" given', is_object($position) ? get_class($position) : gettype($position)));
         }
         if ($sButtonContent) {
             if ($position === self::ICON_PREPEND) {
                 $sButtonContent = $this->getView()->{$sIconHelperMethod}($icon, isset($aIconOptions['attributes']) ? $aIconOptions['attributes'] : null) . ' ' . $sButtonContent;
             } else {
                 $sButtonContent .= ' ' . $this->getView()->{$sIconHelperMethod}($icon, isset($aIconOptions['attributes']) ? $aIconOptions['attributes'] : null);
             }
         } else {
             $sButtonContent = $this->getView()->{$sIconHelperMethod}($icon, isset($aIconOptions['attributes']) ? $aIconOptions['attributes'] : null);
         }
     }
     /*
      * Dropdown button
      */
     if ($aDropdownOptions = $oElement->getOption('dropdown')) {
         if (!is_array($aDropdownOptions)) {
             throw new LogicException(sprintf('"dropdown" option expects an array, "%s" given', is_object($aDropdownOptions) ? get_class($aDropdownOptions) : gettype($aDropdownOptions)));
         }
         if (empty($aDropdownOptions['split'])) {
             /*
              * Class
              */
             if (!preg_match('/(\\s|^)dropdown-toggle(\\s|$)/', $sClass = $oElement->getAttribute('class'))) {
                 $oElement->setAttribute('class', trim($sClass . ' dropdown-toggle'));
             }
             /*
              * data-toggle
              */
             $oElement->setAttribute('data-toggle', 'dropdown');
             $sMarkup = $this->openTag($oElement) . sprintf(self::$dropdownToggleFormat, $sButtonContent) . $this->closeTag();
         } else {
             /*
              * Add caret element
              */
             $sMarkup = $this->openTag($oElement) . $sButtonContent . $this->closeTag() . sprintf(self::$dropdownCaretFormat, $oElement->getAttribute('class'));
         }
         /*
          * No container
          */
         if ($oElement->getOption('disable-twb')) {
             return $sMarkup . $this->getView()->dropdown()->renderListItems($aDropdownOptions);
         }
         /*
          * Render button + dropdown
          */
         return sprintf(self::$dropdownContainerFormat, empty($aDropdownOptions['dropup']) ? '' : 'dropup', $sMarkup . $this->getView()->dropdown()->renderListItems($aDropdownOptions));
     }
     return $this->openTag($oElement) . $sButtonContent . $this->closeTag();
 }
 /**
  * Render.
  *
  * @param Select|ElementInterface $element
  * @param string                  $groupWrapper
  * @param string                  $controlWrapper
  *
  * @return string
  */
 public function render(ElementInterface $element, $groupWrapper = null, $controlWrapper = null)
 {
     $labelHelper = $this->getLabelHelper();
     $escapeHelper = $this->getEscapeHtmlHelper();
     $elementHelper = $this->getElementHelper();
     $elementErrorHelper = $this->getElementErrorHelper();
     $descriptionHelper = $this->getDescriptionHelper();
     $groupWrapper = $groupWrapper ?: $this->groupWrapper;
     $controlWrapper = $controlWrapper ?: $this->controlWrapper;
     /*
      * Disable by default the inArrayValidator
      */
     $element->setDisableInArrayValidator(true);
     $elementHelper->getView();
     $id = $element->getAttribute('id') ?: $element->getAttribute('name');
     $element->setAttribute('class', 'form-control');
     $controlLabel = '';
     $label = $element->getLabel();
     if (strlen($label) === 0) {
         $label = $element->getOption('label') ?: $element->getAttribute('label');
     }
     if ($label && !$element->getOption('skipLabel')) {
         $controlLabel .= $labelHelper->openTag(['class' => 'col-lg-3 ' . ($element->getOption('wrapCheckboxInLabel') ? 'checkbox' : 'control-label')] + ($element->hasAttribute('id') ? ['for' => $id] : []));
         if (null !== ($translator = $labelHelper->getTranslator())) {
             $label = $translator->translate($label, $labelHelper->getTranslatorTextDomain());
         }
         if ($element->getOption('wrapCheckboxInLabel')) {
             $controlLabel .= $elementHelper->render($element) . ' ';
         }
         if ($element->getOption('skipLabelEscape')) {
             $controlLabel .= $label;
         } else {
             $controlLabel .= $escapeHelper($label);
         }
         $controlLabel .= $labelHelper->closeTag();
     }
     if ($element->getOption('wrapCheckboxInLabel')) {
         $controls = $controlLabel;
         $controlLabel = '';
     } else {
         $controls = $elementHelper->render($element);
     }
     $controls = str_replace(['<select'], ['<select class="select-picker-contact" data-live-search="true"'], $controls);
     /***
      * Now apply the magic
      */
     if ($element->isMultiple()) {
         $controls = str_replace(['data-live-search="true"'], ['multiple data-live-search="true"'], $controls);
     }
     $html = $controlLabel . sprintf($controlWrapper, $id, $controls, $descriptionHelper->render($element), $elementErrorHelper->render($element));
     $addtClass = $element->getMessages() ? ' has-error' : '';
     return sprintf($groupWrapper, $addtClass, $id, $html);
 }
Beispiel #26
0
 public function render(ElementInterface $element)
 {
     $element->setAttribute('class', 'checkbox-toggle');
     return parent::render($element);
 }
Beispiel #27
0
 public function render(ElementInterface $element, $labelPosition = null)
 {
     $escapeHtmlHelper = $this->getEscapeHtmlHelper();
     $labelHelper = $this->getLabelHelper();
     $elementHelper = $this->getElementHelper();
     $elementErrorsHelper = $this->getElementErrorsHelper();
     $label = $element->getLabel();
     $inputErrorClass = $this->getInputErrorClass();
     if (isset($label) && '' !== $label) {
         // Translate the label
         if (null !== ($translator = $this->getTranslator())) {
             $label = $translator->translate($label, $this->getTranslatorTextDomain());
         }
     }
     // Does this element have errors ?
     if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) {
         $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : '';
         $classAttributes = $classAttributes . $inputErrorClass;
         $element->setAttribute('class', $classAttributes);
     }
     if ($this->partial) {
         $vars = array('element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $this->labelPosition, 'renderErrors' => $this->renderErrors);
         return $this->view->render($this->partial, $vars);
     }
     if ($this->renderErrors) {
         $elementErrors = $elementErrorsHelper->render($element);
     }
     $elementString = $elementHelper->render($element);
     if (isset($label) && '' !== $label) {
         $label = $escapeHtmlHelper($label);
         $labelAttributes = $element->getLabelAttributes();
         if (empty($labelAttributes)) {
             $labelAttributes = $this->labelAttributes;
         }
         // Multicheckbox elements have to be handled differently as the HTML standard does not allow nested
         // labels. The semantic way is to group them inside a fieldset
         $type = $element->getAttribute('type');
         if ($type === 'multi_checkbox' || $type === 'radio') {
             $markup = sprintf('<fieldset><legend>%s</legend>%s</fieldset>', $label, $elementString);
         } else {
             if ($element->hasAttribute('id')) {
                 $labelOpen = '';
                 $labelClose = '';
                 $label = $labelHelper($element);
             } else {
                 $labelOpen = $labelHelper->openTag($labelAttributes);
                 $labelClose = $labelHelper->closeTag();
             }
             if ($label !== '' && !$element->hasAttribute('id')) {
                 $label = '<span>' . $label . '</span>';
             }
             // Button element is a special case, because label is always rendered inside it
             if ($element instanceof Button) {
                 $labelOpen = $labelClose = $label = '';
             }
             switch ($this->labelPosition) {
                 case self::LABEL_PREPEND:
                     $markup = $labelOpen . $label . $elementString . $labelClose;
                     break;
                 case self::LABEL_APPEND:
                 default:
                     $markup = $labelOpen . $elementString . $label . $labelClose;
                     break;
             }
         }
         if ($this->renderErrors) {
             $markup .= $elementErrors;
         }
     } else {
         if (!empty($this->renderErrors)) {
             $markup = $elementString . $elementErrors;
         } else {
             $markup = $elementString;
         }
     }
     return $markup;
 }
Beispiel #28
0
 /**
  * Utility form helper that renders a label (if it exists), an element and errors
  *
  * @param  ElementInterface $element
  * @throws \Zend\Form\Exception\DomainException
  * @return string
  */
 public function render(ElementInterface $element)
 {
     // render function complains if I add the $options param, so we need to catch it like this
     $options = func_num_args() > 1 ? func_get_arg(1) : array();
     $escapeHtmlHelper = $this->getEscapeHtmlHelper();
     $labelHelper = $this->getLabelHelper();
     $elementHelper = $this->getElementHelper();
     $helpBlockHelper = $this->getHelpBlockHelper();
     $elementErrorsHelper = $this->getElementErrorsHelper();
     $label = $element->getLabel();
     $helpBlock = $element->getOption('helpblock');
     $inputErrorClass = $this->getInputErrorClass();
     // if I have a label, try and translate it
     if (isset($label) && '' !== $label) {
         // Translate the label
         if (null !== ($translator = $this->getTranslator())) {
             $label = $translator->translate($label, $this->getTranslatorTextDomain());
         }
     }
     // if element does not have and ID, create one out of it's name
     if (!$element->hasAttribute('id')) {
         $name = $element->getAttribute('name');
         if (empty($name)) {
             $name = 'input';
         }
         if (empty($this->counterName[$name])) {
             $this->counterName[$name] = 0;
         }
         $element->setAttribute('id', trim($name, "\t\n\r\v []<>{}") . '-' . $this->counterName[$name]);
         $this->counterName[$name]++;
     }
     // Does this element have errors ?
     if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) {
         $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : '';
         $classAttributes = $classAttributes . $inputErrorClass;
         $element->setAttribute('class', $classAttributes);
     }
     // if I have a partial for this element
     if ($this->partial) {
         $vars = array('element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $this->labelPosition, 'renderErrors' => $this->renderErrors);
         return $this->view->render($this->partial, $vars);
     }
     // render errors
     if ($this->renderErrors) {
         $elementErrors = $elementErrorsHelper->render($element);
     }
     // render element
     $elementString = $elementHelper->render($element);
     // label
     if (isset($label) && '' !== $label) {
         $label = $escapeHtmlHelper($label);
         $labelAttributes = $element->getLabelAttributes();
         if (empty($labelAttributes)) {
             $labelAttributes = $this->labelAttributes;
         }
         // Multicheckbox elements have to be handled differently as the HTML standard does not allow nested
         // labels. The semantic way is to group them inside a fieldset
         $type = $element->getAttribute('type');
         if ($type === 'checkbox' || $type == 'radio') {
             if (empty($labelAttributes)) {
                 $labelAttributes = array('class' => 'checkbox');
             }
             if ($labelAttributes instanceof LabelOptionsAwareInterface) {
                 $attributes = $labelAttributes->getLabelAttributes();
                 $attributes['class'] = 'checkbox' . (empty($attributes['class']) ? '' : ' ' . $attributes['class']);
                 $labelAttributes->setLabelAttributes($attributes);
             }
         }
         if ($type === 'multi_checkbox' || $type === 'radio') {
             $markup = sprintf('<label class="control-label">%s</label>%s', $label, str_replace('control-label ', '', $elementString));
         } else {
             if ($element->hasAttribute('id')) {
                 $labelOpen = '';
                 $labelClose = '';
                 if ($type === 'checkbox' || $type === 'radio') {
                     $element->setLabelAttributes($labelAttributes);
                 }
                 $label = $labelHelper($element, null, null, $options);
             } else {
                 $labelOpen = $labelHelper->openTag($labelAttributes, $options);
                 $labelClose = $labelHelper->closeTag();
             }
             //                var_dump(array($label, $labelOpen, $labelClose));
             // Button element is a special case, because label is always rendered inside it
             if ($element instanceof Button) {
                 $labelOpen = $labelClose = $label = '';
             }
             if (($type === 'checkbox' || $type === 'radio') && Form::getBootstrapType() !== Form::HORIZONTAL) {
                 $label = $labelOpen . $label . $labelClose;
                 $label = preg_replace('/(<label[^>]+>)/i', '$1%s ', $label);
                 $markup = sprintf($label, $elementString);
             } else {
                 switch ($this->labelPosition) {
                     case self::LABEL_PREPEND:
                         $markup = $labelOpen . $label . $elementString . $labelClose;
                         break;
                     case self::LABEL_APPEND:
                     default:
                         $markup = $labelOpen . $elementString . $label . $labelClose;
                         break;
                 }
             }
             //                var_dump($markup);
         }
     }
     if ($this->renderErrors) {
         $markup = (empty($markup) ? $elementString : $markup) . $elementErrors;
     }
     /*else {
           $markup = $elementString;
       }*/
     if (isset($helpBlock) && '' !== $helpBlock) {
         $markup .= $helpBlockHelper->openTag($element->getOption('helpblock_attributes'), $element->getOption('helpblock_mode')) . $helpBlock . $helpBlockHelper->closeTag();
     }
     // if type is horizontal or vertical, start wrapping
     if (Form::getBootstrapType() === Form::VERTICAL) {
         $markup = sprintf('<div class="control-group%s"><div class="controls">%s</div></div>', count($element->getMessages()) ? ' error' : '', $markup);
     } elseif (Form::getBootstrapType() === Form::HORIZONTAL) {
         $pos = strpos($markup, '</label');
         if ($pos !== FALSE && $pos > 0) {
             $pos += 8;
             $markup2 = substr($markup, 0, $pos) . '<div class="controls">' . substr($markup, $pos) . '</div>';
             $markup = sprintf('<div class="control-group%s">%s</div>', count($element->getMessages()) ? ' error' : '', $markup2);
         }
     }
     return $markup;
 }
Beispiel #29
0
 /**
  * Utility form helper that renders a label (if it exists), an element and errors
  *
  * @param  ElementInterface $element
  * @param  null|string      $labelPosition
  * @throws \Zend\Form\Exception\DomainException
  * @return string
  */
 public function render(ElementInterface $element, $labelPosition = null)
 {
     $escapeHtmlHelper = $this->getEscapeHtmlHelper();
     $labelHelper = $this->getLabelHelper();
     $elementHelper = $this->getElementHelper();
     $elementErrorsHelper = $this->getElementErrorsHelper();
     $label = $element->getLabel();
     $inputErrorClass = $this->getInputErrorClass();
     if (is_null($labelPosition)) {
         $labelPosition = $this->labelPosition;
     }
     if (isset($label) && '' !== $label) {
         // Translate the label
         if (null !== ($translator = $this->getTranslator())) {
             $label = $translator->translate($label, $this->getTranslatorTextDomain());
         }
     }
     // Does this element have errors ?
     if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) {
         $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : '';
         $classAttributes = $classAttributes . $inputErrorClass;
         $element->setAttribute('class', $classAttributes);
     }
     if ($this->partial) {
         $vars = ['element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $labelPosition, 'renderErrors' => $this->renderErrors];
         return $this->view->render($this->partial, $vars);
     }
     if ($this->renderErrors) {
         $elementErrors = $elementErrorsHelper->render($element);
     }
     $elementString = $elementHelper->render($element);
     // hidden elements do not need a <label> -https://github.com/zendframework/zf2/issues/5607
     $type = $element->getAttribute('type');
     if (isset($label) && '' !== $label && $type !== 'hidden') {
         $labelAttributes = [];
         if ($element instanceof LabelAwareInterface) {
             $labelAttributes = $element->getLabelAttributes();
         }
         if (!$element instanceof LabelAwareInterface || !$element->getLabelOption('disable_html_escape')) {
             $label = $escapeHtmlHelper($label);
         }
         if (empty($labelAttributes)) {
             $labelAttributes = $this->labelAttributes;
         }
         // Multicheckbox elements have to be handled differently as the HTML standard does not allow nested
         // labels. The semantic way is to group them inside a fieldset
         if ($type === 'multi_checkbox' || $type === 'radio' || $element instanceof MonthSelect || $element instanceof Captcha) {
             $markup = sprintf('<fieldset><legend>%s</legend>%s</fieldset>', $label, $elementString);
         } else {
             // Ensure element and label will be separated if element has an `id`-attribute.
             // If element has label option `always_wrap` it will be nested in any case.
             if ($element->hasAttribute('id') && ($element instanceof LabelAwareInterface && !$element->getLabelOption('always_wrap'))) {
                 $labelOpen = '';
                 $labelClose = '';
                 $label = $labelHelper->openTag($element) . $label . $labelHelper->closeTag();
             } else {
                 $labelOpen = $labelHelper->openTag($labelAttributes);
                 $labelClose = $labelHelper->closeTag();
             }
             if ($label !== '' && !$element->hasAttribute('id') || $element instanceof LabelAwareInterface && $element->getLabelOption('always_wrap')) {
                 $label = '<span>' . $label . '</span>';
             }
             // Button element is a special case, because label is always rendered inside it
             if ($element instanceof Button) {
                 $labelOpen = $labelClose = $label = '';
             }
             if ($element instanceof LabelAwareInterface && $element->getLabelOption('label_position')) {
                 $labelPosition = $element->getLabelOption('label_position');
             }
             switch ($labelPosition) {
                 case self::LABEL_PREPEND:
                     $markup = $labelOpen . $label . $elementString . $labelClose;
                     break;
                 case self::LABEL_APPEND:
                 default:
                     $markup = $labelOpen . $elementString . $label . $labelClose;
                     break;
             }
         }
         if ($this->renderErrors) {
             $markup .= $elementErrors;
         }
     } else {
         if ($this->renderErrors) {
             $markup = $elementString . $elementErrors;
         } else {
             $markup = $elementString;
         }
     }
     return $markup;
 }
Beispiel #30
0
 public function render(ElementInterface $element)
 {
     $escapeHtmlHelper = $this->getEscapeHtmlHelper();
     $labelHelper = $this->getLabelHelper();
     $elementHelper = $this->getElementHelper();
     $elementErrorsHelper = $this->getElementErrorsHelper();
     $label = $element->getLabel();
     $inputErrorClass = $this->getInputErrorClass();
     if (isset($label) && '' !== $label) {
         // Translate the label
         if (null !== ($translator = $this->getTranslator())) {
             $label = $translator->translate($label, $this->getTranslatorTextDomain());
         }
     }
     // Does this element have errors ?
     if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) {
         $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : '';
         $classAttributes = $classAttributes . $inputErrorClass;
         $element->setAttribute('class', $classAttributes);
     }
     if ($this->partial) {
         $vars = array('element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $this->labelPosition, 'renderErrors' => $this->renderErrors);
         return $this->view->render($this->partial, $vars);
     }
     if ($this->renderErrors) {
         $elementErrors = $elementErrorsHelper->render($element);
     }
     if ($element->getOption('current_user')) {
         $element->setValue(NULL);
     }
     $this->defineWidthElement(&$element);
     $elementString = $elementHelper->render($element);
     $labelAttributes = $element->getOption("labelAttributes");
     $labelRequired = "";
     if ($labelAttributes['required']) {
         $labelRequired = "<b class='required'>*</b>";
     }
     if (isset($label) && '' !== $label) {
         $label = $escapeHtmlHelper($label);
         $labelAttributes = $element->getLabelAttributes();
         if (empty($labelAttributes)) {
             $labelAttributes = $this->labelAttributes;
         }
         // Multicheckbox elements have to be handled differently as the HTML standard does not allow nested
         // labels. The semantic way is to group them inside a fieldset
         $type = $element->getAttribute('type');
         if ($element->hasAttribute('id')) {
             $labelOpen = '';
             $labelClose = '';
             $label = $labelHelper($element);
         } else {
             $labelOpen = $labelHelper->openTag($labelAttributes);
             $labelClose = $labelHelper->closeTag();
         }
         if ($label !== '' && !$element->hasAttribute('id')) {
             $label = '<span>' . $label . '&nbsp;' . $labelRequired . '</span>';
         }
         // Button element is a special case, because label is always rendered inside it
         if ($element instanceof Button) {
             $labelOpen = $labelClose = $label = '';
         }
         switch ($this->labelPosition) {
             case self::LABEL_PREPEND:
                 $markup = $labelOpen . $label . $elementString . $labelClose;
                 break;
             case self::LABEL_APPEND:
             default:
                 $markup = $labelOpen . $elementString . $label . $labelClose;
                 break;
         }
         if ($this->renderErrors) {
             $markup .= $elementErrors;
         }
     } else {
         if ($this->renderErrors) {
             $markup = $elementString . $elementErrors;
         } else {
             $markup = $elementString;
         }
     }
     return "<div id='{$element->getName()}'>" . $markup . "</div>";
 }