Skip to content
Snippets Groups Projects
Select Git revision
  • php84
  • master default protected
  • 6.x
  • release_6.2.0
  • modif_maintenance_phtml
  • 6.0.x
  • detached2
  • detached
  • php82
  • feature_SearchAndSelectFilter
  • 5.x
  • 4.x
  • 7.2.0
  • 6.2.0
  • 7.1.0
  • 7.0.0
  • 1.1.1
  • 6.1.7
  • 6.1.6
  • 6.1.5
  • 6.0.16
  • 6.0.15
  • 6.1.4
  • 6.0.14
  • 6.1.3
  • 6.0.13
  • 6.1.2
  • 6.0.12
  • 6.1.1
  • 6.1.0
  • 6.0.11
  • 6.0.10
32 results

FormRowDateInfSup.php

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    FormRowDateInfSup.php 3.58 KiB
    <?php
    namespace UnicaenApp\Form\View\Helper;
    
    use Laminas\Form\View\Helper\FormElement;
    use Laminas\Form\View\Helper\FormRow;
    use UnicaenApp\Form\Element\DateInfSup;
    use Laminas\Form\ElementInterface;
    
    /**
     * Aide de vue générant le code HTML **complet** de l'élément de formulaire composite "DateInfSup", c'est à dire :
     *   - le label global de l'élément composite ;
     *   - les champs de saisie des dates et leurs labels (délégué à l'aide de vue "FormDateInfSup") ;
     *   - les messages d'erreurs de validation.
     * 
     * Hérite de l'aide de vue "FormRow".
     *
     * @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
     * @see \UnicaenApp\Form\Element\DateInfSup
     * @see FormDateInfSup
     * @see FormRow
     */
    class FormRowDateInfSup extends FormRow
    {
        /**
         * @var bool
         */
        protected $renderJs = true;
    
        /**
         * Utility form helper that renders a label (if it exists), an element and errors
         *
         * @param ElementInterface $element
         * @param null|string $labelPosition
         * @return string
         */
        public function render(ElementInterface $element, $labelPosition = null): string
        {
            if (!$element instanceof DateInfSup) {
                throw new \Laminas\Form\Exception\InvalidArgumentException("Cette aide de vue ne prend en charge que les élément de type 'DateInfSup'.");
            }
            
            $escapeHtmlHelper    = $this->getEscapeHtmlHelper();
            $elementHelper       = $this->getElementHelper();
            $elementErrorsHelper = $this->getElementErrorsHelper();
    
            $label           = $element->getLabel();
            $inputErrorClass = $this->getInputErrorClass();
            $elementErrors   = $elementErrorsHelper->render($element);
    
            // Does this element have errors ?
            if (!empty($elementErrors) && !empty($inputErrorClass)) {
                $classAttributes = ($element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : '');
                $classAttributes = $classAttributes . $inputErrorClass;
    
                $element->setAttribute('class', $classAttributes);
            }
    
            $elementHelper->setRenderJs($this->getRenderJs());
            
            $elementString = $elementHelper->render($element);
    
            if (isset($label) && '' !== $label) {
                // Translate the label
                if (($translator = $this->getTranslator())) {
                    $label = $translator->translate($label, $this->getTranslatorTextDomain());
                }
    
                $label = $escapeHtmlHelper($label);
    
                // DateInfSup 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
                $markup = sprintf(
                    '<fieldset class="dateinfsup"><legend>%s</legend>%s</fieldset>',
                    $label,
                    $elementString);
    
                if ($this->renderErrors) {
                    $markup .= $elementErrors;
                }
            } else {
                if ($this->renderErrors) {
                    $markup = $elementString . $elementErrors;
                } else {
                    $markup = $elementString;
                }
            }
    
            return $markup;
        }
        
        /**
         * {@inheritdoc}
         */
        protected function getElementHelper(): FormElement
        {
            if (method_exists($this->view, 'plugin')) {
                $this->elementHelper = $this->view->plugin('formDateInfSup');
            }
    
            return parent::getElementHelper();
        }
    
        public function getRenderJs()
        {
            return $this->renderJs;
        }
    
        public function setRenderJs($renderJs = true)
        {
            $this->renderJs = $renderJs;
            return $this;
        }
    }