Esempio n. 1
0
 public function printItem(&$mod, $item, $acces = 'RW', $domEtape, $optimize = '')
 {
     global $formxSession;
     global $compteurItem;
     //eko($item['id']);
     //Certains items ne peuvent être affichés
     if (in_array($item['type'], array('CLOSER'))) {
         return;
     }
     //print '<br />'.$domEtape->getAttribute('no_etape')._.$item['id'] ;
     $hideItem = false;
     //print "******************ACCESS $acces ********************";
     if ($acces == 'RW') {
         $compteurItem++;
         $this->debug("____________________ITEM {$compteurItem} _______________");
     }
     //eko($item[id]." = ".$item->Val[0]);
     $this->debug("Entrée dans printItem pour l'item " . $item['id']);
     $domItem = $this->getDomItemFromId($item['id'], $domEtape);
     //----------------------------------------
     //Gestion des conditions sur l'item et de leur implication sur l'affichage
     if ($item->Cond['type'] && !($acces == 'RO' && $optimize)) {
         //cas normal, ou pas d'optmize sur RO (rare)
         $this->debug("test de la condition activee pour l'item");
         //test condition
         if ($item['isfresh'] == 'y') {
             //TraiterPostPost vient de le calculer
             //if( $item[id] == 'is_psl' )  eko("c'est frais: ".$item['lasttestcond']);
             $resCond = $item['lasttestcond'] == 'y' ? true : false;
             $domItem->setAttribute('isfresh', '');
         } else {
             //sinon on le recalcule
             //eko("c'est pas frais");
             $resCond = $this->majCondAffichage($domItem);
             $domItem->setAttribute('isfresh', '');
         }
         $this->debug("Fin du calcul");
         if (!$resCond) {
             //condition renvoie faux
             //on quitte l'affichage de l'item, sauf dans le cas où l'item est lié avec du DHTML, au quel cas il doit s'afficher caché
             if (!$item['printHidden']) {
                 return;
             } else {
                 if (!$this->testCondDOM($domItem, 'prerequite')) {
                     return '';
                 }
                 $hideItem = true;
             }
         }
     } elseif ($item->Cond['type'] && $acces == 'RO' && $item['lasttestcond'] == 'n') {
         //optimize est activé , lecture seule, et en cache on a la valeur non
         return;
     }
     //--------------fin des conditions sur l'item
     $this->debug("calculs preliminaires");
     //si saut de l'item en mode non-impression
     if ($this->modeImpression && (string) $item['dontPrint']) {
         return;
     }
     //generation d'un id de champ de formulaire
     $id = $this->prefix . $item['id'];
     //ajout ou non de l'asterisque
     if ($this->XMLCore['showOblig'] && $this->isItemOblig($item['id']) && !$this->modeImpression) {
         $showOblig = '<span style="color:red"> * </span>';
     } else {
         $showOblig = "";
     }
     //si précisions supplémentaires nécéssaires
     if ((string) $item['multiple'] && (string) $item['type'] == 'LISTE') {
         //eko('lplp');
         $precisions = '<span style="color:#AACC00;"><I> choix multiple = [ctrl]</I></span>';
     } else {
         $precisions = "";
     }
     if ((string) $item['hyperinfo'] && !$this->modeImpression) {
         $precisions .= clFoRmXtOoLs::getHyperLink((string) $item['hyperinfo']);
     }
     //recuperation du libelle mis en forme
     //attention, le libellé peut être redéfini plus loin
     //pour l'instant, faire une recherche de texte item->Libelle pour les retrouver
     if ((string) $item->Libelle[0]) {
         //$mod -> MxText ( "etape.item.libelle.libelles","yahourt bleu");
         $mod->MxText("etape.item.libelle.libelles", clFoRmXtOoLs::getStyledBal($item->Libelle) . $showOblig . $precisions);
     }
     //affectation de l'id de la ligne
     $mod->MxText("etape.item.idligne", 'ligne_' . $item['id']);
     //cachageDeLaLigne
     if ($hideItem) {
         $mod->MxText("etape.item.optionsligne", "style='display:none;'");
     } else {
         $mod->MxText("etape.item.optionsligne", "");
     }
     //maintenant on va traiter suivant le type de la balise item (attribut)
     $type_item = $item['type'];
     //si l'etape est finie ou
     //si balise Readonly, alors texte en lecture seule
     //SAUF pour les items beneficiant d'un affichage spécial,
     //il faut les lister ici
     if ($acces == 'RO' && $type_item != 'TAB' && $type_item != 'SLIDER') {
         $type_item = 'RO';
     }
     //si pas le droit d'acces à ce champ
     if ($item['access'] && !$formxSession->getDroit(utf8_decode((string) $item['access']), 'r')) {
         $type_item = 'NORIGHT';
     }
     if ($item['readonly'] && in_array($item['readonly'], array('y', 'yes', 'o', 'oui', 'Y', 'O', 'OUI', 'YES')) && !in_array($item['readonly'], array('n', 'no', 'non', 'N', 'NON', 'NO'))) {
         $type_item = 'RO';
     }
     //si demande d'appel externe pour remplir le champ
     if ($item->From[0] && !($optimize && $acces == 'RO')) {
         if (isset($valXT)) {
             unset($valXT);
         }
         $valXT = (string) $this->getValueFrom($item->From[0]);
         if ($this->current_fusion) {
             $this->setFormVar($item['id'], utf8_decode($valXT), 'no_simplexml_update no_sql_update');
             $item->Val[0] = $valXT;
             //cas général
         } else {
             if (($valXT != '' && !(string) $item->Val[0] || $item['resync']) && !($optimize && $acces == 'RO')) {
                 $item->Val[0] = $valXT;
                 $this->setFormVar($item['id'], utf8_decode($valXT), 'no_simplexml_update no_sql_update');
             }
         }
     }
     //si demande de saut de l'item quand il est nul
     if ((string) $item['dontPrintwhenNull'] and $acces == 'RO' and !(string) $item->Val || in_array((string) $item->Val, $this->session->getNullValues())) {
         //eko(  (string) $item->Val);
         //eko(  "<xmp>".$item->asXML()."</xmp>");
         return;
     }
     //Si la variable est liée à une variable globale d'ids
     //migré dans traitePostPost , pour recette, décommenter si problème
     //if($item['link']  && ! ($optimize && $acces == 'RO')) $this->setVar($item['link'],(string) utf8_decode( $item->Val ));
     //Si valeur persitante demandée
     if ($item->ValPersist[0]) {
         $item->Val[0] = (string) $item->ValPersist;
     }
     if ($item->FromPersist[0]) {
         $item->Val[0] = $this->getValueFrom((string) $item->FromPersist);
     }
     //si rechargement demandé
     if ($item['onChangeReload'] == 'y') {
         $options = "onchange=\"document.formx_form.pavalider.value='y' ;document.formx_form.submit() ;\"";
         $optionsradio = "onclick=\"document.formx_form.pavalider.value='y' ;document.formx_form.submit() ;\"";
     }
     //si rechargement demandé avec possibilité de validation
     if ($item['onChangeSubmit'] == 'y') {
         $options = "onchange=\"document.formx_form.submit() ;\"";
         $optionsradio = "onclick=\"document.formx_form.submit() ;\"";
     }
     //------------ affichage DHTML de certains items ---------------
     //Construction du javascript exécuté à chaque changement de valeur de l'item
     $nbItemsDhtmlKinked = 0;
     $js = '';
     //1) on cache tous ceux qui sont cités
     foreach ($item->ShowItemsOnVal as $showItemOnVal) {
         if (!(string) $showItemOnVal->OnVal) {
             continue;
         }
         $liste = explode('|', $this->getValueFrom((string) $showItemOnVal->ListIdItems));
         foreach ($liste as $idLinkedItem) {
             $js .= "   formxjs_disappears('{$idLinkedItem}') ; ";
         }
     }
     //2) on fait apparaitre ceux qui ont une valeur autorisée
     foreach ($item->ShowItemsOnVal as $showItemOnVal) {
         if (!(string) $showItemOnVal->OnVal) {
             continue;
         }
         $nbItemsDhtmlKinked++;
         $val = $this->getValueFrom((string) $showItemOnVal->OnVal);
         $liste = explode('|', $this->getValueFrom((string) $showItemOnVal->ListIdItems));
         foreach ($liste as $idLinkedItem) {
             $js .= " if ( formxjs_getvalue('" . $item['id'] . "') == '" . addslashes($val) . "'  || formxjs_invalue('" . addslashes($val) . "','" . $item['id'] . "') ) { formxjs_appears('{$idLinkedItem}') ; }  ; ";
         }
     }
     if ($nbItemsDhtmlKinked > 0) {
         $options = "onchange=\"{$js}\" ";
         $optionsradio = "onclick=\"{$js}\" ";
     }
     //-------------------FIN DHTML conditionel items----------------------
     //on garde juste le bloc modelixe concerné
     $this->keepBloc(&$mod, "etape.item", $type_item);
     $this->tmp_parite = ($this->tmp_parite + 1) % 2;
     if ($this->tmp_parite == 1) {
         $mod->Mxattribut("etape.item.style_gche", "aa_gauche");
         $mod->Mxattribut("etape.item.style_dte", "aa_bb");
     } else {
         $mod->Mxattribut("etape.item.style_gche", "aa_gauche_pair");
         $mod->Mxattribut("etape.item.style_dte", "aa_bb_pair");
     }
     //si pas d'exlpication pour l'item, on vire le bloc explication
     if (isset($item->Explication)) {
         $mod->MxText("etape.item.explication.expl", $item->Explication[0]);
         $mod->MxText("etape.item.explication.lib", $item->Libelle[0] . $showOblig . $precisions);
         $mod->MxBloc("etape.item.libelle", "delete");
         if ($this->tmp_parite == 1) {
             $mod->Mxattribut("etape.item.explication.style_gche", "aa_gauche");
         } else {
             $mod->Mxattribut("etape.item.explication.style_gche", "aa_gauche_pair");
         }
     } elseif ((string) $item['histo']) {
         //recuperation de l'historisation des données précédentes
         $varsFusions = $this->getAllValuesFromFormx($this->idformx, (string) $item['id'], "", "moreinfos");
         $i = 0;
         $nb = $varsFusions['INDIC_SVC'][2];
         $info = "";
         for ($i = 0; $i < $nb - 1; $i++) {
             if (!(string) $varsFusions["infosmore_auteur"][$nb - $i - 1]) {
                 $auteur = "inconnu";
             } else {
                 $auteur = $varsFusions["infosmore_auteur"][$nb - $i - 1];
             }
             //$info.= "<br />".$varsFusions["infosmore_dt_creation"][$nb-$i-1].",&nbsp;".$auteur.":&nbsp;".utf8_encode($varsFusions[(string) $item['id']][$nb-$i-1]) ;
             $info .= "<br />" . utf8_encode($varsFusions["infosmore_dt_creation"][$nb - $i - 1]) . ",&nbsp;" . $auteur . ":&nbsp;" . utf8_encode($varsFusions[(string) $item['id']][$nb - $i - 1]);
         }
         $mod->MxText("etape.item.explication.lib", clFoRmXtOoLs::getStyledBal($item->Libelle) . $showOblig . $precisions);
         $mod->MxText("etape.item.explication.expl", $info);
         $mod->MxBloc("etape.item.libelle", "delete");
         if ($this->tmp_parite == 1) {
             $mod->Mxattribut("etape.item.explication.style_gche", "aa_gauche");
         } else {
             $mod->Mxattribut("etape.item.explication.style_gche", "aa_gauche_pair");
         }
     } else {
         $mod->MxBloc("etape.item.explication", "delete");
     }
     $this->debug("debut bloc affichage");
     $reg = array();
     //distiguons suivant le type d'item
     switch ($type_item) {
         //Si l'etape est finie et qu'on est en read only
         case 'NORIGHT':
             break;
         case 'RO':
             if ($item['type'] == 'HIDDEN') {
                 $this->tmp_parite = ($this->tmp_parite + 1) % 2;
                 break;
             }
             $nullvals = array('#', '');
             $txt = $item->Val[0];
             //si cal; et qu'une valeur d'affichage differe de valeur de stockage
             if ($item['type'] == 'CAL' && (string) $item->Val2) {
                 $txt = $item->Val2[0];
             }
             //si check, et valeur de libelle différente
             if ($item['type'] == 'CHECK' && (string) $item->FromListLibelles) {
                 $tablibsPossibles = explode('|', (string) $item->FromListLibelles);
                 $tabValsPossibles = explode('|', (string) $item->FromList);
                 $tabVals = explode('|', (string) $item->Val);
                 $tabLibs = array();
                 for ($i = 0; $i < count($tabVals); $i++) {
                     for ($j = 0; $j < count($tabValsPossibles); $j++) {
                         if ($tabVals[$i] == $tabValsPossibles[$j]) {
                             $tabLibs[] = $tablibsPossibles[$j];
                         }
                     }
                 }
                 $txt = implode(' , ', $tablibsPossibles);
             }
             if (in_array($txt, $nullvals)) {
                 $txt = '';
             }
             //application de styles
             if ((string) $item['class']) {
                 $txt = "<span class='" . $item['class'] . "'>{$txt}</span>";
             }
             if ((string) $item['style']) {
                 $txt = "<span style='" . $item['style'] . "'>{$txt}</span>";
             }
             if (preg_match('/^(.*)[\\t]{15}(.*)$/', $txt, $tabMatch)) {
                 $txt = $tabMatch[1];
             }
             $mod->MxText("etape.item.RO.minitxt", $txt);
             break;
         case 'RADIO':
             $mXtype = 'radio';
         case 'CHECK':
             if ($item['cols']) {
                 $nbcols = (int) $item['cols'];
             } else {
                 $nbcols = 1;
             }
             if (!isset($mXtype)) {
                 $mXtype = 'checkbox';
             }
             //Cas de liste figée
             if (isset($item->FromList)) {
                 $val = ereg("list:(.*)", $item->FromList[0], $reg);
                 $tabtmp = explode('|', $reg[1]);
             }
             //cas de liste XHAM
             if (isset($item->FromXHAMList)) {
                 //recuperation de la liste HHAM
                 $tabtmp = $this->listeGen->getListeItems(addslashes(utf8_decode($item->FromXHAMList[0])), "1", '', '', "");
                 //creation de la liste
                 unset($tabtmp[0]);
                 if (count($tabtmp) < 1) {
                     $this->listeGen->addListeWithItem(addslashes(utf8_decode($item->FromXHAMList[0])));
                     $tabtmp = $this->listeGen->getListeItems(addslashes(utf8_decode($item->FromXHAMList[0])), "1", '', '', "");
                 }
                 //on enlve une specificité XHAM
                 unset($tabtmp[0]);
                 $tabtmp2 = array_map('utf8_encode', $tabtmp);
                 unset($tabtmp);
                 foreach ($tabtmp2 as $cle => $valeur) {
                     $tabtmp[$valeur] = substr($valeur, 0, $this->lngchmp);
                 }
                 unset($tabtmp2);
             }
             if (isset($item->FromTerminalListeItem)) {
                 //recuperation de la liste HHAM
                 $tabtmp = objListe::getListeFromCol($this->getSubject()->getTerminal()->getIdTermConfiguration(), (string) $item->FromTerminalListeItem);
             }
             //si demande de libelles à la place des valeurs
             if (isset($tablibs)) {
                 unset($tablibs);
             }
             if (isset($item->FromListLibelles)) {
                 $tablibs = ereg("list:(.*)", $item->FromListLibelles[0], $reg);
                 $tablibs = explode('|', $reg[1]);
             }
             //on recupere les données XML
             $vals = explode('|', $item->Val[0]);
             //affichage
             $i = -1;
             if (!isset($optionsradio)) {
                 $optionsradio = '';
             }
             foreach ($tabtmp as $val) {
                 $i++;
                 if (in_array($val, $vals)) {
                     $value = 'CHECKED';
                 } else {
                     $value = '';
                 }
                 //$mod -> MxCheckerField("etape.item.$type_item.champ",$mXtype, $id.'[]', $val,$value,$optionsradio);
                 if ($item['reloadOnlyCheckValues'] && !in_array($val, explode('|', $item['reloadOnlyCheckValues']))) {
                     $currentOptionRadio = '';
                 } else {
                     $currentOptionRadio = $optionsradio;
                 }
                 $mod->MxCheckerField("etape.item.{$type_item}.ligne.col.champ", $mXtype, $id . '[]', $val, $value, $currentOptionRadio);
                 if (!isset($tablibs)) {
                     $tablibs = "";
                 }
                 if (!$tablibs) {
                     $mod->MxText("etape.item.{$type_item}.ligne.col.champ_aff", $val);
                 } else {
                     $mod->MxText("etape.item.{$type_item}.ligne.col.champ_aff", $tablibs[$i]);
                 }
                 //$mod -> MxText("etape.item.$type_item.ligne.col.champ_aff",$tablibs[$i]);
                 $mod->MxBloc("etape.item." . $type_item . ".ligne.col", 'loop');
                 if ($i % $nbcols == $nbcols - 1) {
                     $mod->MxBloc("etape.item." . $type_item . ".ligne", 'loop');
                 }
                 //$mod -> MxBloc("etape.item.".$type_item,'loop');
             }
             //si sortie de la boucle avant validation du bloc de la derniere ligne
             if ($i % $nbcols != $nbcols - 1) {
                 $mod->MxBloc("etape.item." . $type_item . ".ligne", 'loop');
             }
             unset($mXtype);
             unset($tabtmp);
             break;
         case 'LISTEN':
             //pour communiquer avec la fonction appellée
             $this->ListenVals = explode('|', $item->Val[0]);
             //recuperer le tableau des listes
             if (isset($item->FromFuncListN)) {
                 //recuperation de la liste HHAM
                 $tablist = $this->callFunc($item->FromFuncListN[0]);
             }
             //combien on a de
             $nb_listes = count($tablist);
             for ($i = 0; $i < $nb_listes; $i++) {
                 if (!is_array($tablist[$i])) {
                     $tablist[$i] = array();
                 }
                 $mod->MxSelect("etape.item.LISTEN.miniitem.select1", $id . "_LISTEN_{$i}", $this->ListenVals[$i], $tablist[$i], $this->invselect, '', "class=\"select_mono\"" . " onchange=\"document.formx_form.pavalider.value='y' ;document.formx_form.submit() ;\"");
                 //$mod->Mxattribut("actions.frem.code","document.FoRmXcase.FormX_ext_goto_.value = 'RM".$data[id_instance][$i]."';document.FoRmXcase.submit();");
                 $mod->MxBloc("etape.item.LISTEN.miniitem", "loop");
             }
             break;
         case 'LISTEDYN':
             //peu de difference avec LISTE, c'est pour ça qu'on ne le fait pas sortir
             //et qu'il va emprunter le case LISTE
             //generation du formfield d'ajout de champ
             $size = $this->lngchmp - 20;
             if (!isset($options)) {
                 $options = '';
             }
             $mod->MxAttribut('etape.item.LISTEDYN.img', FX_URLIMGRET);
             $mod->MxFormField("etape.item.LISTEDYN.newEntry", 'text', $id . "_new", '', "class=\"text2\" size=\"{$size}\" {$options}");
         case 'LISTE':
             $this->debug("entrée dans le cas type='LISTE'");
             $tabtmp = $this->getListes($item);
             $val = $item->Val[0];
             //si c'est un select multiple
             if (isset($multiple)) {
                 unset($multiple);
             }
             $invselect = $this->invselect;
             if (isset($item['multiple'])) {
                 //précisions sur le libelle
                 $invselect = '';
                 //traitement suivant valeur de l'attribut
                 if ($item['multiple'] == 'yes' || $item['multiple'] == 'y') {
                     $multiple = (int) $this->multiselectsize;
                 } elseif ($item['multiple'] == 'all') {
                     $multiple = sizeof($tabtmp);
                 } else {
                     $multiple = (int) $item['multiple'];
                 }
                 //on repasse en array pour que le form prenne bien la valeur par defaut
                 $val = explode('|', $item->Val[0]);
             }
             //instanciation du modelisque
             if (!isset($options)) {
                 $options = '';
             }
             if (!isset($multiple)) {
                 $multiple = '';
             }
             if (!is_array($tabtmp)) {
                 $tabtmp = array();
                 $this->addErreur("Attention ! le 4eme argument de MxSelect n' est pas un tableau!! assumé par tableau vide");
             }
             $mod->MxSelect("etape.item.{$type_item}.select1", $id, $val, $tabtmp, $invselect, $multiple, "class=\"select_mono\" {$options}");
             unset($tabtmp);
             unset($tablist);
             break;
         case 'TXT':
             $options = '';
             $query = '';
             $val = $item->Val[0];
             if ((string) $item->FromTGSScore) {
                 if (preg_match('/^(.*)[\\t]{15}(.*)$/', $val, $tabMatch)) {
                     $val = $tabMatch[1];
                     $query = $tabMatch[2];
                 }
                 $idScore = $this->getValueFrom($item->FromTGSScore);
                 $options = " id='{$id}' ";
                 $options .= " onClick=score_print('{$idScore}','{$id}','" . $this->getIdInstance() . "','{$query}') ";
             }
             $mod->MxFormField("etape.item.TXT.textsimple", 'text', $id, $val, "{$options}  class=\"text1\" size=\"" . ($this->lngchmp + 2) . "\"");
             break;
         case 'SLIDER':
             $mod->MxAttribut("etape.item.SLIDER.idsliderinput", $id);
             $mod->MxAttribut("etape.item.SLIDER.idslidername", $id);
             $mod->MxText('etape.item.SLIDER.slidervalue', $item->Val[0]);
             $mod->MxAttribut("etape.item.SLIDER.idslider", $id . '_container');
             $mod->MxText('etape.item.SLIDER.varsliderid', $id);
             $mod->MxText('etape.item.SLIDER.idslider2', $id . '_container');
             $mod->MxText('etape.item.SLIDER.idsliderinput2', $id);
             $mod->MxText('etape.item.SLIDER.minslider', $item['min']);
             $mod->MxText('etape.item.SLIDER.maxslider', $item['max']);
             $mod->MxText('etape.item.SLIDER.slider_labelg', $item->LibelleGauche[0]);
             $mod->MxText('etape.item.SLIDER.slider_labeld', $item->LibelleDroite[0]);
             if ($acces == 'RO') {
                 $mod->MxText('etape.item.SLIDER.isreadonly', 'true');
             } else {
                 $mod->MxText('etape.item.SLIDER.isreadonly', 'false');
             }
             break;
         case 'NONE':
             break;
         case 'TAB':
             if ($acces == 'RO') {
                 $option = 'readonly';
             }
             ereg("list:(.*)", $item->Rows[0], $reg);
             $rows = explode('|', $reg[1]);
             ereg("list:(.*)", $item->Cols[0], $reg);
             $cols = explode('|', $reg[1]);
             $tabval = explode('|', (string) $item->Val);
             $mod->MxBloc("etape.item.TAB.titre", "loop");
             $nb_cols = 0;
             foreach ($cols as $col) {
                 $nb_cols++;
                 $mod->MxText("etape.item.TAB.titre.libel", $col);
                 $mod->MxBloc("etape.item.TAB.titre", "loop");
             }
             $x = 0;
             $y = 0;
             $oki = '';
             foreach ($rows as $row) {
                 $mod->MxText("etape.item.TAB.ligne.lib", $row);
                 foreach ($cols as $col) {
                     $oki = '';
                     foreach ($item->Col as $colsp) {
                         if ($colsp['lib'] == (string) $col) {
                             if ($colsp['type'] == 'LISTE' && $option != 'readonly') {
                                 $oki = 1;
                                 /*
                                 						ereg("list:(.*)",(string) $colsp->FromList,$reg);
                                 						$tabtmp = explode('|',$reg[1]);
                                 						unset($tab2);
                                 						$tab2['']='';
                                 						foreach ( $tabtmp as $cle=>$val ) $tab2[$val]=$val;
                                 						unset($tabtmp);*/
                                 $tabtmp = $this->getListes($item->Col);
                                 //FIXME : traitement liste comme les autres : ici ca differe
                                 $tabtmp = array("" => "") + $tabtmp;
                                 $mod->MxSelect("etape.item.TAB.ligne.colonne.case_select.lacase", $id . "_{$x}" . "_{$y}", $tabval[$y * $nb_cols + $x], $tabtmp, '', '', "class=\"case\" {$option}");
                                 //$mod -> MxFormField("etape.item.TAB.ligne.colonne.case_simple.lacase",'text', $id."_$x"."_$y",$tabval[$y*$nb_cols+$x],"class=\"case\" $option");
                                 $mod->MxBloc("etape.item.TAB.ligne.colonne.case_simple", "delete");
                                 $mod->MxBloc("etape.item.TAB.ligne.colonne", "loop");
                                 $x++;
                             }
                         }
                     }
                     if ($oki) {
                         continue;
                     }
                     $mod->MxFormField("etape.item.TAB.ligne.colonne.case_simple.lacase", 'text', $id . "_{$x}" . "_{$y}", $tabval[$y * $nb_cols + $x], "class=\"case\" {$option}");
                     $mod->MxBloc("etape.item.TAB.ligne.colonne.case_select", "delete");
                     $mod->MxBloc("etape.item.TAB.ligne.colonne", "loop");
                     $x++;
                 }
                 $x = 0;
                 $y++;
                 $mod->MxBloc("etape.item.TAB.ligne", "loop");
             }
             break;
         case 'HIDDEN':
             //eko("OO");
             $this->tmp_parite = ($this->tmp_parite + 1) % 2;
             $this->setFormVar($item['id'], (string) $item->Val, 'no_simplexml_update');
             //return ;
             break;
         case 'LONGTXT':
             //si argument longueur de ligne
             if (isset($item['rows'])) {
                 $rows = $item['rows'];
             } else {
                 //Sinon valeur par defaut
                 $rows = $this->defrows;
             }
             $cols = $this->lngchmp - 1;
             $mod->MxFormField("etape.item.LONGTXT.textlong", "textarea", $id, $item->Val[0], "class=\"formx_longtext\" cols=\"{$cols}\"  rows=\"{$rows}\"");
             break;
         case 'FILE':
             switch ((string) $item->Val) {
                 case 'ok':
                     $mod->MxText("etape.item.FILE.indication", utf8_encode("<span style='color:green'>Fichier correctement transféré</span>"));
                     break;
                 case utf8_encode('¤ko'):
                     $mod->MxText("etape.item.FILE.indication", utf8_encode("<span style='color:red'>Problème lors de l'envoi du fichier</span>"));
                     break;
                 default:
                     $mod->MxText("etape.item.FILE.indication", utf8_encode("Choisissez un fichier à envoyer"));
             }
             $mod->MxAttribut("etape.item.FILE.name", $id);
             $mod->MxAttribut("etape.item.FILE.value", 1000 * $this->max_size_upload);
             break;
         case 'CAL':
             //val1 un contient la donnée brute, val2 la donnée d'affichage
             //c'est au niveau de affctPost qu'on passe de 2 à 1 par appel à la classe date
             $this->ya_un_cal = '1';
             //eko("val XML du cal :<xmp>".$item->asXML()."</xmp>");
             //format date ou datetime ?
             if ($item['format'] == 'datetime') {
                 $format = '%Y-%m-%d %H:%M:%S';
             } else {
                 if (ereg('[YmdHMS]+', $item['format'])) {
                     $format = clFoRmXtOoLs::formatDatePhp2FormatCalJs($item['format']);
                 } else {
                     $format = '%d-%m-%Y';
                 }
             }
             //1ere clause pour fonctionnement de la balise From
             if ($item->Val2[0] == '' && $item->Val[0] != '') {
                 $dv = $item->Val[0];
             } else {
                 $dv = $item->Val2[0];
             }
             //si on a demandé d'afficher la date courante par defaut et que la date n'a pas encore été instanciée:
             if ($item['default'] == 'today' && !$item->Val2[0]) {
                 $dv = date(strtr($format, array('%' => '', 'M' => 'i')));
             }
             $mod->MxFormField("etape.item.CAL.textCal", "text", $id, $dv, "class=\"text2\"  id=\"{$id}\" size=\"20\" readonly");
             $mod->MxAttribut('etape.item.CAL.img', FX_URLIMGCAL);
             $mod->MxText("etape.item.CAL.id", $id);
             //def d'une id pour l'appel du calendrier javascript
             $mod->MxAttribut("etape.item.CAL.idcal", $id . '_trigger');
             //le calendrier javascript necessite d'être defini juste apres le formulaire.
             $mod->MxText("JavaCAL.javcalid", $id);
             //$mod -> MxText ( "JavaCAL.javcalidtrigger",$id.'_trigger');
             //$mod -> MxText ( "JavaCAL.javcalform",$format);
             $mod->MxBloc("JavaCAL", "loop");
             break;
     }
     $this->debug("fin bloc affichage");
     //eko("item fini ".$item[id]);
     $mod->MxHidden("hidden_listen", "pavalider=n");
     $mod->MxBloc("etape.item", "loop");
 }