Пример #1
0
 /**
  * Retourne le rendu HTML du formulaire, en appliquant le template
  *
  * @access public
  * @param  $template string: emplacement du template
  * (par defaut, le template generique, construit dynamiquement)
  * @return string
  */
 public function render($template = '')
 {
     $smarty = $this->_smarty;
     $renderer = new HTML_QuickForm_Renderer_ArraySmarty($smarty);
     $form = $this->_form;
     $reset = "";
     // Contient le code HTML pour reset le form
     $Elements = $this->_elementsToDisplay;
     $ElementsToDisplay = array();
     $elts = $form->_elements;
     // Prend en compte les preferences pour l'user connecte, si besoin
     $this->checkPreferences();
     foreach ($Elements as $name => $type) {
         if (in_array($name, $this->hiddenCriteriaByUser)) {
             continue;
         }
         if ($type == 'checkbox') {
             $ElementsToDisplay[] = "<label for=\"" . strtolower($name) . "\">{\$form." . $name . ".label}</label>&nbsp;&nbsp;{\$form." . $name . ".html}";
         } elseif (!(false === strpos($type, 'date2date'))) {
             // si creneau de dates
             // si plusieurs creneaux de date, indice du creneau
             $Date2DateIndex = substr($type, strlen($type) - 1, 1);
             $DisplayDate = 'DisplayDate' . $Date2DateIndex;
             // Si le checkBox associe est masque, on ignore ce critere
             if (in_array('DateOrder' . $Date2DateIndex, $this->hiddenCriteriaByUser)) {
                 continue;
             }
             $keys = array_keys($Elements, $type);
             if (isset($keys[1])) {
                 $Endname = $keys[1];
                 unset($Elements[$Endname]);
                 // suppression de cet element
                 // s'il faut afficher les widgets de date
                 if (isset($_REQUEST['DateOrder' . $Date2DateIndex]) || isset($_SESSION['DateOrder' . $Date2DateIndex]) && (!isset($_REQUEST['formSubmitted']) && !$this->IsFirstArrival())) {
                     $DisplayDate = 'block';
                 } else {
                     $DisplayDate = 'none';
                 }
                 $smarty->assign('DisplayDate' . $Date2DateIndex, $DisplayDate);
                 $ElementsToDisplay[] = "<div id='Date" . $Date2DateIndex . "' style=\"display: {\$DisplayDate" . $Date2DateIndex . "}\">{\$form." . $name . ".label}&nbsp;{\$form." . $name . ".html}&nbsp;{\$form." . $Endname . ".label}&nbsp;{\$form." . $Endname . '.html}</div>';
             }
         } elseif ($type == 'blank') {
             $ElementsToDisplay[] = '&nbsp;';
             // Si nombre impair d'elements a afficher, on rajoute un <td>&nbsp;</td>
             if (count($ElementsToDisplay) % 2 != 0) {
                 $ElementsToDisplay[] = '&nbsp;';
             }
         } else {
             // On verifie s'il y a un label a afficher
             for ($i = 0; $i < count($elts); $i++) {
                 $attr = $elts[$i]->_attributes;
                 if (isset($attr['name']) && $attr['name'] == $name || isset($elts[$i]->_name) && $elts[$i]->_name == $name) {
                     $label = $elts[$i]->_label;
                     break;
                 }
             }
             if (!empty($label)) {
                 $ElementsToDisplay[] = "<label for=\"" . strtolower($name) . "\">{\$form." . $name . ".label}&nbsp;</label>:";
             }
             // Si c'est un type date, on encapsule dans un DIV
             $ElementsToDisplay[] = $type != 'date' ? "{\$form." . $name . ".html}" : "<div id=\"" . $name . "\">{\$form." . $name . ".html}</div>";
         }
         /*  Generation du js pour reinitialiser le form  */
         if ($type == 'text') {
             $reset .= '$(\'' . $this->_name . '\').' . $name . ".value='';";
         }
         if ($type == 'checkbox') {
             // Ici, on prend en compte le defaultValues pour reinitialiser
             // (serait généralisable aux autres types de champs)
             $values = $this->getDefaultValues();
             $resetValue = isset($values[$name]) && $values[$name] == 1 ? 'true' : 'false';
             $reset .= '$(\'' . $this->_name . '\').' . $name . '.checked=' . $resetValue . ';';
         }
         if ($type == 'selectM') {
             // select multiple
             $reset .= '$(\'' . $this->_name . '\').' . "elements['" . $name . "[]'].selectedIndex=0;";
         }
         if ($type == 'select') {
             $reset .= '$(\'' . $this->_name . '\').' . "elements['" . $name . "'].selectedIndex=0;";
         }
         if (0 < strpos($type, "2date")) {
             // si creneau de dates
             $reset .= "\$('Date" . $Date2DateIndex . "').style.display='{\$Display}';";
         }
     }
     $smarty->assign('reset', $reset);
     /*  Gestion des valeurs affichees par defaut ds le form  */
     $defaultValues = array();
     if (SearchTools::requestOrSessionExist('LastEntitySearched', $this->_name)) {
         // recupere les saisies faites precedemment et mises en session
         $defaultValues = SearchTools::dataInSessionToDisplay();
     }
     // affiche le form avec les valeurs par defaut
     $form->setDefaults(array_merge($this->getDefaultValues(), $defaultValues));
     $form->accept($renderer);
     // affecte au form le renderer personnalise
     $smarty->assign('form', $renderer->toArray());
     /*  Pour completer correctement le tableau HTML si besoin  */
     if (count($ElementsToDisplay) % 4 != 0) {
         $nbTD = 4 - count($ElementsToDisplay) % 4;
         $TD = "";
         for ($i = 0; $i < $nbTD; $i++) {
             $TD .= '<td>&nbsp;</td>';
         }
         $smarty->assign('ExtraTD', $TD);
     }
     $smarty->assign('FormElements', $ElementsToDisplay);
     $smarty->assign('FormName', $this->_name);
     $smarty->assign('ShowHideImageSource', SHOWHIDE_IMAGE);
     $smarty->assign('withResetButton', $this->withResetButton);
     $smarty->assign('CustomDisplayImage', AbstractGrid::CUSTOM_DISPLAY_IMAGE);
     $smarty->assign('CustomDisplayBarImage', AbstractGrid::CUSTOM_DISPLAY_BAR_IMAGE);
     $smarty->assign('customizationEnabled', $this->customizationEnabled);
     // Gestion du customize searchform: il est possible que precedemment dans
     // render(), on ait supprime 1 ou n criteres (enabled=false)
     if ($this->customizationEnabled) {
         $this->_customDisplay($smarty);
     }
     /*  Gestion des actions eventuelles  */
     if (count($this->_actionArray) > 0) {
         $actions = "";
         // va recevoir le contenu HTML a afficher
         $Auth = Auth::Singleton();
         foreach ($this->_actionArray as $index => $params) {
             // Test si Enable ou pas
             if ($params['Enable'] == false) {
                 continue;
             }
             /*  Test s'il y a des restrictions par profile  */
             if (!isset($params['Profiles']) || in_array($Auth->getProfile(), $params['Profiles'])) {
                 $actionName = isset($params['Name']) ? $params['Name'] : 'searchAction_' . $index;
                 $actionId = strtolower($actionName);
                 $actions .= '<input type="button" name="' . $actionName . '" ' . 'id="' . $actionId . '" class="button" value="' . $params['Caption'] . '" onclick="' . 'location.href=\'' . $params['URL'] . '\'"/>&nbsp;';
             }
         }
         $smarty->assign('actions', $actions);
     }
     /*  Gestion des variables smarty additionnelles: ds le template par defaut,
         placees en debut de form  */
     foreach ($this->_additionalSmartyValues as $name => $value) {
         $smarty->assign($name, $value);
     }
     $smarty->assign('AdditionalSmartyValues', $this->_additionalSmartyValues);
     /*  Si on affiche le grid, on n'affiche pas le form par defaut  */
     if (true === $this->displayGrid() || false === $this->getDisplayForm()) {
         $smarty->assign('DisplayForm', 'none');
     }
     $template = $template != '' ? $template : SEARCHFORM_TEMPLATE;
     $pageContent = $smarty->fetch($template);
     return $pageContent;
 }