Ejemplo n.º 1
0
 /**
  * Return a closing label tag
  *
  * @return string
  */
 public function closeTag()
 {
     $result = '</label>';
     if ($this->element->hasAttribute('required') && $this->element->getAttribute('required')) {
         $result = sprintf('<span class="required-mark">*</span> %s', $result);
     }
     return $result;
 }
Ejemplo n.º 2
0
 /**
  * Override
  * 
  * Render the captcha
  *
  * @param  ElementInterface $element
  * @throws Exception\DomainException
  * @return string
  */
 public function render(ElementInterface $element)
 {
     //we could also set the separator here to break between the inputs and the image.
     //$this->setSeparator('')
     $captcha = $element->getCaptcha();
     if ($captcha === null || !$captcha instanceof CaptchaAdapter) {
         throw new DomainException(sprintf('%s requires that the element has a "captcha" attribute of type Recruitment\\Model\\CaptchaImage;
     none found', __METHOD__));
     }
     $captcha->generate();
     $imgAttributes = array('width' => $captcha->getWidth(), 'height' => $captcha->getHeight(), 'alt' => $captcha->getImgAlt(), 'src' => $captcha->getImgUrl() . $captcha->getId() . $captcha->getSuffix(), 'class' => 'thumbnail center-block');
     if ($element->hasAttribute('id')) {
         $imgAttributes['id'] = $element->getAttribute('id') . '-image';
     }
     $closingBracket = $this->getInlineClosingBracket();
     $img = sprintf('<img  %s%s ', $this->createAttributesString($imgAttributes), $closingBracket);
     $position = $this->getCaptchaPosition();
     $separator = $this->getSeparator();
     $captchaInput = $this->renderCaptchaInputs($element);
     $pattern = '%s' . '<div class="input-group">' . '%s%s' . '<span class="input-group-btn">' . '<button id="' . $element->getAttribute('id') . '-refresh' . '" class="btn btn-default" type="button">' . '<i class="ion-loop"></i>' . '</button>' . '</span>' . '</div>';
     if ($position == self::CAPTCHA_PREPEND) {
         return sprintf($pattern, $captchaInput, $separator, $img);
     }
     return sprintf($pattern, $img, $separator, $captchaInput);
 }
Ejemplo n.º 3
0
 public function __invoke(ElementInterface $element = null)
 {
     if ($element && !$element->hasAttribute('class')) {
         $this->addClasses($element, ['btn', 'btn-default']);
     }
     return parent::__invoke($element);
 }
Ejemplo n.º 4
0
 public function init(ElementInterface $element)
 {
     $this->formElement = $element;
     if ($element->hasAttribute('template')) {
         $this->template = $element->getAttribute('template');
     }
 }
Ejemplo n.º 5
0
 /**
  * {@inheritDoc}
  */
 public function render(ElementInterface $element)
 {
     $captcha = $element->getCaptcha();
     if ($captcha === null || !$captcha instanceof CaptchaAdapter) {
         throw new Exception\DomainException(sprintf('%s requires that the element has a "captcha" attribute' . ' of type Zend\\Captcha\\Image; none found', __METHOD__));
     }
     // Generates ID, but NOT word and image
     $captcha->generate();
     // Generates URL to access image, and image won't be generated until the URL is accessed
     $imgSrc = $captcha->getImgUrl() . '?id=' . $captcha->getId();
     $imgAttributes = array('width' => $captcha->getWidth(), 'height' => $captcha->getHeight(), 'src' => $imgSrc, 'onclick' => sprintf('this.src=\'%s&refresh=\'+Math.random()', $imgSrc), 'style' => 'cursor: pointer; vertical-align: middle;', 'alt' => __('CAPTCHA image'), 'title' => __('Click to refresh CAPTCHA'));
     if ($element->hasAttribute('id')) {
         $imgAttributes['id'] = $element->getAttribute('id') . '-image';
     } else {
         $imgAttributes['id'] = $captcha->getId() . '-image';
     }
     $closingBracket = $this->getInlineClosingBracket();
     $img = sprintf('<img %s%s', $this->createAttributesString($imgAttributes), $closingBracket);
     $position = $this->getCaptchaPosition();
     $separator = $this->getSeparator();
     $captchaInput = $this->renderCaptchaInputs($element);
     $pattern = '%s%s%s';
     if ($position == static::CAPTCHA_PREPEND) {
         return sprintf($pattern, $captchaInput, $separator, $img);
     }
     return sprintf($pattern, $img, $separator, $captchaInput);
 }
Ejemplo n.º 6
0
 public function __invoke(ElementInterface $element = null)
 {
     if ($element && !$element->hasAttribute('class')) {
         $this->addClass($element, 'form-control');
     }
     return parent::__invoke($element);
 }
Ejemplo n.º 7
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);
 }
 public function __invoke(ElementInterface $element = null, $labelContent = null, $position = null)
 {
     // Set $required to a default of true | existing elements required-value
     $required = $element->hasAttribute('required') ? true : false;
     if (true === $required) {
         $labelContent = sprintf('%s<span class="required-mark">*</span>', $labelContent);
     }
     return $this->openTag($element) . $labelContent . $this->closeTag();
 }
Ejemplo n.º 9
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);
 }
 public function __invoke(ElementInterface $element = null, $labelContent = null, $position = null)
 {
     $labelContent = $element->getLabel();
     // Implement all default lines of Zend\Form\View\Helper\FormLabel
     // Set $required to a default of true | existing elements required-value
     $required = $element->hasAttribute('required') ? $element->getAttribute('required') : true;
     if (true === $required && ($labelContent != '' || $labelContent != null || $labelContent != false)) {
         $labelContent = sprintf('<div class="col-lg-10"><span class="im-required">(*)</span> %s</div>', $labelContent);
     } elseif (false === $required && ($labelContent != '' || $labelContent != null || $labelContent != false)) {
         $labelContent = $labelContent;
     }
     return $labelContent;
 }
 /**
  * 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;
 }
Ejemplo n.º 12
0
 /**
  * {@inheritDoc}
  */
 public function render($content, array $attribs = [], ElementInterface $element = null)
 {
     if ($element) {
         $srOnly = $this->getSrOnly();
         if (null === $srOnly) {
             if ($element instanceof LabelAwareInterface) {
                 if (!$element->getLabel()) {
                     return '';
                 }
                 $srOnly = $element->getLabelOption('sr_only');
             }
             if (null === $srOnly && $element->hasAttribute('placeholder')) {
                 $srOnly = true;
             }
         }
         if ($srOnly) {
             $attribs = array_merge_recursive($attribs, ['class' => 'sr-only']);
         }
     }
     return parent::render($content, $attribs, $element);
 }
Ejemplo n.º 13
0
 /**
  * Render the captcha
  *
  * @param  ElementInterface          $element
  * @throws Exception\DomainException
  * @return string
  */
 public function render(ElementInterface $element)
 {
     $captcha = $element->getCaptcha();
     if ($captcha === null || !$captcha instanceof CaptchaAdapter) {
         throw new Exception\DomainException(sprintf('%s requires that the element has a "captcha" attribute of type Zend\\Captcha\\Image; none found', __METHOD__));
     }
     $captcha->generate();
     $imgAttributes = array('width' => $captcha->getWidth(), 'height' => $captcha->getHeight(), 'alt' => $captcha->getImgAlt(), 'src' => $captcha->getImgUrl() . $captcha->getId() . $captcha->getSuffix());
     if ($element->hasAttribute('id')) {
         $imgAttributes['id'] = $element->getAttribute('id') . '-image';
     }
     $closingBracket = $this->getInlineClosingBracket();
     $img = sprintf('<img %s%s', $this->createAttributesString($imgAttributes), $closingBracket);
     $position = $this->getCaptchaPosition();
     $separator = $this->getSeparator();
     $captchaInput = $this->renderCaptchaInputs($element);
     $pattern = '%s%s%s';
     if ($position == self::CAPTCHA_PREPEND) {
         return sprintf($pattern, $captchaInput, $separator, $img);
     }
     return sprintf($pattern, $img, $separator, $captchaInput);
 }
Ejemplo n.º 14
0
 public function render(ElementInterface $element, $labelPosition = null)
 {
     $label = $element->getLabel();
     if (isset($label) && '' !== $label) {
         if (null !== ($translator = $this->getTranslator())) {
             $label = $translator->translate($label, $this->getTranslatorTextDomain());
         }
     }
     if (is_null($labelPosition)) {
         $labelPosition = $this->labelPosition;
     }
     //        $inputErrorClass = $this->getInputErrorClass();
     //        if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) {
     //            $element = $this->addClass($element, $inputErrorClass);
     //        }
     if ($this->partial) {
         $vars = ['element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $labelPosition, 'renderErrors' => $this->renderErrors];
         return $this->view->render($this->partial, $vars);
     }
     $labelHelper = $this->getLabelHelper();
     $elementHelper = $this->getElementHelper();
     $elementErrorsHelper = $this->getElementErrorsHelper();
     if ($element->getOption('form-horizontal')) {
         $labelCols = (int) $element->getOption('label-cols') ?: 3;
         $inputCols = (int) $element->getOption('input-cols') ?: 12 - $labelCols;
     }
     if (isset($label) && '' !== $label && $element->getAttribute('type') !== 'hidden') {
         $attributes = ['class' => 'control-label'];
         if (isset($labelCols)) {
             $attributes['class'] .= sprintf(' col-sm-%d', $labelCols);
         }
         if ($element->hasAttribute('id')) {
             $attributes['for'] = $element->getAttribute('id');
         }
         $labelString = $labelHelper->openTag($attributes) . $label . $labelHelper->closeTag();
     } else {
         $labelString = '';
     }
     $elementString = $elementHelper->render($element);
     if ($this->renderErrors) {
         $errorsString = $elementErrorsHelper->render($element);
     } else {
         $errorsString = '';
     }
     $arguments = ['class' => 'form-group'];
     if (count($element->getMessages()) > 0) {
         $arguments['class'] .= ' ' . $this->inputErrorClass;
     }
     $html = $this->openTag($arguments);
     if ($labelPosition === self::LABEL_PREPEND) {
         $html .= $labelString;
     }
     if (isset($inputCols)) {
         $attributes = ['class' => sprintf('col-sm-%d', $inputCols)];
         if ($labelString === '') {
             $attributes['class'] .= sprintf(' col-sm-offset-%d', $labelCols);
         }
         $html .= sprintf('<div %s>', $this->createAttributesString($attributes));
     }
     $prependMarkup = $element->getOption('prepend-markup') ?: '';
     $appendMarkup = $element->getOption('append-markup') ?: '';
     $html .= $prependMarkup;
     $html .= $elementString;
     $html .= $appendMarkup;
     $html .= $errorsString;
     if (isset($inputCols)) {
         $html .= '</div>';
     }
     if ($labelPosition === self::LABEL_APPEND) {
         $html .= $labelString;
     }
     $html .= '</div>';
     return $html;
 }
Ejemplo n.º 15
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;
 }
Ejemplo n.º 16
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, $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') {
         $labelAttributes = array();
         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 {
             if ($label !== '' && !$element->hasAttribute('id') || $element instanceof LabelAwareInterface && $element->getLabelOption('always_wrap')) {
                 $label = '<label>' . $label . '</label>';
             }
             // Button element is a special case, because label is always rendered inside it
             if ($element instanceof Button || $element instanceof Checkbox || $element instanceof Radio) {
                 $label = '';
             }
             $markup = $label . $elementString;
         }
     } else {
         $markup = $elementString;
     }
     return $rowOpen . $markup . $rowClose;
 }
Ejemplo n.º 17
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;
 }
Ejemplo n.º 18
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;
 }
Ejemplo n.º 19
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;
 }
Ejemplo n.º 20
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>";
 }
Ejemplo n.º 21
0
 /**
  * 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);
 }
Ejemplo n.º 22
0
 public function openTag(ElementInterface $element)
 {
     $disabled = $element->hasAttribute('disabled') ? ' disabled' : '';
     $inline = $element->hasAttribute('inline') ? ' checkbox-inline' : '';
     return sprintf('<div class="checkbox%s%s"><label>', $disabled, $inline);
 }