Changeset 50068 in spip-zone
- Timestamp:
- Jul 29, 2011, 1:15:07 PM (10 years ago)
- Location:
- _plugins_/forms/forms_et_tables_2_0
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/forms/forms_et_tables_2_0/action/forms_edit.php
r39009 r50068 11 11 * 12 12 */ 13 13 14 include_spip('inc/forms'); 14 15 include_spip('inc/forms_edit'); 15 16 include_spip('inc/forms_type_champs'); 17 16 18 if (!include_spip('inc/autoriser')) 17 19 include_spip('inc/autoriser_compat'); 20 18 21 // TODO : charger la bonne langue ! 22 19 23 function Forms_ordonne_champs($id_form){ 20 24 if (strlen($ordre = _request('ordre'))){ … … 122 126 $supp_champ = _request('supp_champ'); 123 127 $ordonne_champs = _request('ordonne_champs'); 128 129 $num_rubrique_export = _request('num_rubrique_export'); 130 $champ_titre_export = _request('champ_titre_export'); 131 132 // SI la variable est "" (cas quand on n'a pas encore de champs) ALORS on le remet à "null" 133 if( $champ_titre_export == "" ){ 134 $champ_titre_export = "null"; 135 } 136 124 137 125 138 // … … 128 141 129 142 $nouveau_champ = $champ_visible = $ajout_choix = NULL; 143 130 144 // creation 131 145 if ($id_form == 'new' && $titre) { … … 135 149 136 150 $id_form = sql_insertq('spip_forms',array('titre'=>_q($titre))); 137 } 151 152 //// Ajout d'une colonne 'num_rubrique_export' à la table 'spip_forms' pour permettre d'indiquer dans quelle rubrique 153 //// les réponses au formulaire(/table) doivent être exportées 154 // (Au cas où la nouvelle colonne n'a pas été créee par le script '\base\forms.php' (à l'installation du plugin??) ) 155 // (Bonne solution de l'ajouter ici??? --> Regarder plutôt vers la fonction 'forms_et_tables_upgrade()'??) 156 include_spip('base/create'); 157 maj_tables("spip_forms"); 158 159 // (Ajout de la colonne 'num_rubrique_export' si elle n'existe pas déjà, et avec par défaut la valeur 1 :) 160 //sql_alter("TABLE spip_forms ADD UNIQUE(num_rubrique_export) INT DEFAULT '1'"); 161 // (??Ligne du dessus redondant avec "maj_tables()" ??) 162 163 } 164 138 165 // maj 139 166 if (intval($id_form) && $titre) { 167 168 //// Vérifie que la valeur de 'num_rubrique_export' est bien un numéro de rubrique valide : 169 //// (??Vérification à mettre ici??) 170 171 // Récupération du nom de la rubrique choisie (ne retourne rien si elle n'existe pas) : 172 $nom_rubrique_export = sql_getfetsel( 'titre', 'spip_rubriques', sql_in('id_rubrique', $num_rubrique_export) ); 173 174 // SI la rubrique indiquée n'existe pas... 175 if( !$nom_rubrique_export ){ 176 //$txt_alerte = "/!\ Rubrique n°" . intval($num_rubrique_export) . " inexistante! /!\ "; 177 $num_rubrique_export = sql_getfetsel("id_rubrique", "spip_rubriques", "statut = 'publie'"); //... mettre à la première rubrique définie 178 } 179 180 140 181 $query = "UPDATE spip_forms SET ". 141 182 "titre="._q($titre).", ". … … 153 194 "documents="._q($documents?$documents:'non').", ". 154 195 "documents_mail="._q($documents_mail?$documents_mail:'non').", ". 155 "html_wrap="._q($html_wrap)." ". 156 "WHERE id_form="._q($id_form); 196 "html_wrap=" . _q($html_wrap) . ", " . 197 "num_rubrique_export=" . _q($num_rubrique_export) . ", " . 198 "champ_titre_export=" . _q($champ_titre_export) . 199 200 " WHERE id_form="._q($id_form); 201 157 202 $result = spip_query($query); 158 203 } 204 159 205 // lecture 160 206 $result = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form)); … … 180 226 if ($id_form) { 181 227 $champ_visible = NULL; 228 182 229 // Ajout d'un champ 183 230 if (($type = $ajout_champ) && Forms_type_champ_autorise($type)) { … … 188 235 $champ_visible = $nouveau_champ = $champ; 189 236 } 237 190 238 // Modif d'un champ 191 239 if ($champ = $modif_champ) { … … 225 273 } 226 274 } 275 227 276 // Suppression d'un champ 228 277 if ($champ = $supp_champ) { … … 230 279 spip_query("DELETE FROM spip_forms_champs WHERE id_form="._q($id_form)." AND champ="._q($champ)); 231 280 } 281 232 282 if ($id_form==intval($ordonne_champs)){ 233 283 Forms_ordonne_champs($id_form); 234 284 } 235 } 236 return array($id_form,$champ_visible,$nouveau_champ,$ajout_choix); 285 286 } 287 288 return array($id_form, $champ_visible, $nouveau_champ, $ajout_choix); 289 237 290 } 238 291 … … 245 298 //$redirect = parametre_url($redirect,'var_ajaxcharset',''); // si le redirect sert, pas d'ajax ! 246 299 if ($redirect==NULL) $redirect=""; 300 247 301 if (!include_spip("inc/securiser_action")) 248 302 include_spip("inc/actions"); 249 if (verifier_action_auteur("forms_edit-$arg",$hash,$id_auteur)==TRUE) { 303 304 if (verifier_action_auteur("forms_edit-$arg",$hash,$id_auteur)==TRUE) 305 { 250 306 $arg=explode("-",$arg); 251 307 $id_form = $arg[0]; 252 if ((intval($id_form) && autoriser('modifier','form',$id_form)) 253 || (($id_form=='new') && (autoriser('creer','form'))) ) { 254 list($id_form,$champ_visible,$nouveau_champ,$ajout_choix) = Forms_update($id_form); 308 309 if ( (intval($id_form) && autoriser('modifier','form',$id_form)) 310 || (($id_form=='new') && (autoriser('creer','form'))) ) 311 { 312 // (Fonction " Forms_update()" définie juste au dessus) 313 list($id_form, $champ_visible, $nouveau_champ, $ajout_choix) = Forms_update($id_form); 314 255 315 if ($redirect) $redirect = parametre_url($redirect,"id_form",$id_form); 256 316 if ($redirect && $champ_visible) $redirect = parametre_url($redirect,"champ_visible",$champ_visible); -
_plugins_/forms/forms_et_tables_2_0/action/forms_exporte_reponse_article.php
r35302 r50068 22 22 if (!include_spip("inc/securiser_action")) 23 23 include_spip("inc/actions"); 24 24 25 if (verifier_action_auteur("forms_exporte_reponse_article-$id_donnee",$hash,$id_auteur)==TRUE){ 25 26 // preparer l'article 26 27 $id_article = 0; 28 27 29 $res = spip_query("SELECT * FROM spip_forms_donnees AS r LEFT JOIN spip_forms AS f ON f.id_form = r.id_form WHERE r.id_donnee="._q($id_donnee)); 28 if ($row=spip_fetch_array($res)){ 30 if ( $row = spip_fetch_array($res) ) 31 { 29 32 $id_form = $row['id_form']; 30 $titre = _T("forms:reponse",array('id_reponse'=>$id_donnee)); 33 34 $id_champ = sql_getfetsel("champ_titre_export", "spip_forms", "id_form=".intval($id_form) ); 35 36 // SI champ non défini ALORS on prend le titre par défaut : "Réponse n°..." 37 if( $id_champ == "null" || $id_champ == "" ) { 38 $titre_article = _T("forms:reponse", array('id_reponse' => $id_donnee)); 39 } else { 40 // SI champ définit ALORS valeur du champ 41 $titre_article = sql_getfetsel( "valeur" , "spip_forms_donnees_champs" , 42 "id_donnee=".intval($id_donnee)." AND champ=".sql_quote($id_champ) ); 43 } 44 31 45 $soustitre = $row['titre']; 32 46 $date = $row['date']; 33 47 list($lib,$values,$urls) = Forms_extraire_reponse($id_donnee); 48 34 49 $texte = ""; 35 50 $res = spip_query("SELECT * FROM spip_forms_champs AS forms WHERE id_form="._q($id_form)." ORDER BY rang"); 51 52 36 53 while ($row = spip_fetch_array($res)){ 37 54 $titre = $row['titre']; … … 46 63 else { 47 64 $s = ''; 48 if (count($values[$champ])>1) $s = "\n-* "; 65 66 /* Changement du "\n*-" en un simple espace " " pour qu'il n'y ait pas de tirets en trop 67 ('$s' n'est alors plus vide, car contient un espace, et donc la condition "if(strlen($s))" est vérifiée */ 68 if (count($values[$champ])>1) $s = " "; 69 49 70 foreach ($values[$champ] as $id=>$valeur){ 50 71 $valeur = typo($valeur); … … 64 85 } 65 86 } 87 66 88 // creer un article 67 89 include_spip('base/abstract_sql'); … … 70 92 "(titre,soustitre,texte,date,statut)", 71 93 "("._q($titre).","._q($soustitre).","._q($texte).","._q($date).",'prepa')");*/ 72 $id_article = sql_insert("spip_articles", 73 "(titre,soustitre,texte,date,statut)", 74 "("._q($titre).","._q($soustitre).","._q($texte).","._q($date).",'prepa')"); 94 95 96 // Récupération du numéro de Rubrique ET de Secteur pour créer au bon endroit (et proprement) l'article 97 $num_rubrique = sql_getfetsel( "num_rubrique_export", "spip_forms", "id_form=".intval($id_form) ); 98 99 if( $num_rubrique ){ 100 $num_secteur = sql_getfetsel( "id_secteur" , "spip_rubriques" , "id_rubrique=".intval($num_rubrique) ); 101 } else { 102 $num_secteur = 0; 103 } 104 105 // (Renommage de la variable de titre de l'article en "$titre_article" (anciennement "$titre" qui correspondait aussi à la variable du titre des champs) ) 106 // + (La fonction "_q" est remplacée par la fonction "sql_quote" équivalente --> cf. http://www.spip-contrib.net/PortageV2-Migrer-un-plugin-vers-SPIP2 ) 107 // + (INFO : l'API "sql_*" gère toute seule les préfixe des tables --> cf. "http://www.spip-contrib.net/PortageV2-Migrer-un-plugin-vers-SPIP2" ) 108 $id_article = sql_insert( 109 "spip_articles" , 110 "(titre,soustitre,texte,date,statut,id_rubrique,id_secteur)" , 111 "(" . sql_quote($titre_article) . "," . sql_quote($soustitre) . "," . sql_quote($texte) . "," . sql_quote($date) . 112 ",'prepa'," . intval($num_rubrique) . "," . intval($num_secteur) . ")" 113 ); 114 115 75 116 if ($id_article!=0){ 76 117 spip_query("UPDATE spip_forms_donnees SET id_article_export=$id_article WHERE id_donnee="._q($id_donnee)); 77 118 } 78 119 } 120 79 121 if ($id_article!=0) 80 122 redirige_par_entete(generer_url_ecrire('articles_edit',"id_article=$id_article",true)); -
_plugins_/forms/forms_et_tables_2_0/action/forms_telecharger.php
r9709 r50068 16 16 function action_forms_telecharger(){ 17 17 global $auteur_session; 18 18 19 $arg = _request('arg'); 19 20 $hash = _request('hash'); … … 21 22 $redirect = _request('redirect'); 22 23 if ($redirect==NULL) $redirect=""; 24 23 25 if (!include_spip("inc/securiser_action")) 24 26 include_spip("inc/actions"); 27 25 28 if (verifier_action_auteur("forms_telecharger-$arg",$hash,$id_auteur)==TRUE) { 26 29 if (!include_spip('inc/autoriser')) 27 30 include_spip('inc/autoriser_compat'); 31 28 32 if (autoriser('supprimer','form',$id_form)){ 29 33 $id_form = intval($arg); 30 34 $delim = _request('delim'); 31 if ($delim == 'TAB') $delim = "\t";32 35 33 $out = Forms_formater_les_reponses($id_form, "csv", $delim, $fichiers, $filename); 36 // (Gestion du cas "Import_CSV") 37 if( $delim != "Import_CSV" ){ // SI autre cas : 38 39 $format = "csv"; 40 if ($delim == 'TAB') { $delim = "\t"; } 41 42 } else { // SI cas "Import_CSV" : 43 44 $format = "Import_CSV"; 45 $delim = ";"; 46 } 47 48 // function Forms_formater_les_reponses($id_form, $format, $separateur, &$fichiers, &$filename, $head=true, $traduit=true) 49 //( dans /inc/forms_export.php ) 50 $out = Forms_formater_les_reponses($id_form, $format, $delim, $fichiers, $filename); 34 51 35 // Excel ? 36 if ($delim == ','){ 52 // SI ',' ... (Excel ?) 53 if ($delim == ','){ 54 37 55 $extension = 'csv'; 38 56 $charset = $GLOBALS['meta']['charset']; 39 } 40 else { 41 $extension = 'xls'; 57 58 } else { 59 60 // Extension 'csv' si delim = ';' (et pas forcément 'xls' !) 61 if ( $delim == ';' ) { $extension = 'csv'; } 62 else { $extension = 'xls'; } 63 42 64 # Excel n'accepte pas l'utf-8 ni les entites html... on fait quoi? 43 65 include_spip('inc/charsets'); … … 46 68 } 47 69 48 if (!count($fichiers)) { 70 // SI PAS de fichiers joints... 71 if ( !count($fichiers) ) { 72 49 73 Header("Content-Type: text/comma-separated-values; charset=$charset"); 50 74 Header("Content-Disposition: attachment; filename=$filename.$extension"); … … 53 77 echo $out; 54 78 exit(); 55 }56 else {79 80 } else { 57 81 // 58 82 // S'il y a des fichiers joints, creer un ZIP … … 87 111 } 88 112 } 113 89 114 if ($redirect) 90 115 redirige_par_entete(str_replace("&","&",urldecode($redirect))); 116 91 117 } 92 118 -
_plugins_/forms/forms_et_tables_2_0/base/forms.php
r18702 r50068 36 36 "arborescent" => "ENUM('non', 'oui') DEFAULT 'non' NOT NULL", 37 37 'html_wrap' => "text", 38 "maj" => "TIMESTAMP"); 38 "maj" => "TIMESTAMP", 39 40 "num_rubrique_export" => "bigint(21) NOT NULL DEFAULT 1", 41 "champ_titre_export" => "varchar(100) DEFAULT 'null'" 42 43 ); 44 39 45 40 46 $spip_forms_key = array( -
_plugins_/forms/forms_et_tables_2_0/exec/forms_edit.php
r37388 r50068 50 50 } 51 51 52 52 53 function contenu_boite_resume($id_form, $row, &$apercu){ 53 54 $prefixei18n = forms_prefixi18n($row['type_form']); … … 72 73 $out .= "</div>\n"; 73 74 } 75 74 76 if ($champconfirm = $row['champconfirm']){ 75 77 $champconfirm_known = false; … … 126 128 } 127 129 130 128 131 function exec_forms_edit(){ 129 132 global $spip_lang_right; … … 322 325 } 323 326 327 324 328 $out = ""; 329 325 330 if ($id_form){ 331 // centre "Aperçu" (resume) ---------------------------------------------------- 326 332 $out .= "<div id='resume'>"; 327 333 $out .= contenu_boite_resume($id_form, $row, $apercu); … … 329 335 } 330 336 331 // centre proprietes ---------------------------------------------------------------337 // centre "Propriétés" -------------------------------------------------------------- 332 338 $out .= "<div id='proprietes'>"; 333 339 $out .= boite_proprietes($id_form, $row, $focus, $action_link, $redirect); … … 336 342 // edition des champs --------------------------------------------------------------- 337 343 $out .= "<div id='champs'>"; 338 $out .= Forms_zone_edition_champs($id_form, $champ_visible, $nouveau_champ, $redirect);344 $out .= Forms_zone_edition_champs($id_form, $champ_visible, $nouveau_champ, $redirect); 339 345 $out .= "</div>\n"; 340 346 … … 343 349 if ($GLOBALS['spip_version_code']>=1.9203) 344 350 echo fin_gauche(); 351 345 352 echo fin_page(); 353 346 354 } 347 355 -
_plugins_/forms/forms_et_tables_2_0/exec/forms_reponses.php
r48181 r50068 151 151 ORDER BY r.date DESC LIMIT "._q($debut).", "._q($tranche); 152 152 } 153 154 // Nouveau bouton pour exporter toutes les réponses en même temps 155 // (NON ENCORE FONCITONNEL!!) 156 /* 157 echo icone_inline( 158 _T("forms:exporter_toutes_reponses"), 159 generer_action_auteur('RIEN', self()), 160 "article-24.gif", 161 "creer.gif", 162 "right" 163 ); 164 */ 165 166 // Ajout d'une barre de séparation invisible : 167 echo "<hr style='clear:both; visibility:hidden; margin:0;'> "; 168 169 153 170 $result = spip_query($query); 171 154 172 while ($row = spip_fetch_array($result)) { 173 174 155 175 $id_form = $row['id_form']; 156 176 $id_donnee = $row['id_donnee']; … … 163 183 $titre_form = $row['titre']; 164 184 165 echo "<br />\n";185 //echo "<br />\n"; 166 186 echo debut_cadre_relief(_DIR_PLUGIN_FORMS."img_pack/donnees-24.png",true,'',''); 167 187 … … 171 191 if ($id_article_export!=0){ 172 192 $row=spip_fetch_array(spip_query("SELECT statut FROM spip_articles WHERE id_article="._q($id_article_export))); 193 194 // SI l'article n'a pas été exporté OU exporté mais mis à la poubelle... 173 195 if (!$row OR ($row['statut']=='poubelle')) 174 $id_article_export = 0; 175 } 196 $id_article_export = 0; //... on met son 'id' à 0 pour montrer qu'on peut l'exporter 197 198 } 199 176 200 if ($id_article_export==0){ 177 201 echo icone_inline(_T("forms:exporter_article"), generer_action_auteur('forms_exporte_reponse_article',"$id_donnee",self()),"article-24.gif", "creer.gif", "right"); 178 202 } 179 else 180 echo icone_inline(_T("forms:voir_article"), generer_url_ecrire('articles',"id_article=".$row['id_article_export']),"article-24.gif", "", "right"); 181 182 183 echo _T("forms:reponse_envoyee").affdate($date)."<br />\n"; 203 else { 204 /* Changement ici : "_q($id_article_export)" au lieu de "$row[...]" */ 205 echo icone_inline(_T("forms:voir_article"), generer_url_ecrire('articles',"id_article="._q($id_article_export)),"article-24.gif", "", "right"); 206 } 207 208 209 // "Réponse @id_reponse@" 210 echo _T("forms:reponse", array('id_reponse' => $id_donnee)) . "<br />\n"; 211 212 // "Réponse envoyée le @date@" 213 echo _T("forms:reponse_envoyee") . affdate($date) . " à " . affdate($date, 'H:i') . "<br />\n"; 214 215 // "à ..." (??Si plusieurs formulaires??) 184 216 if (!$form_unique) { 185 217 echo _T("forms:reponse_envoyee_a")." "; … … 188 220 } 189 221 222 // "par @auteur@" 190 223 if ($id_auteur) { 191 224 $s = "<a href='".generer_url_ecrire("auteur_infos","id_auteur=$id_auteur")."'>".typo($nom_auteur)."</a>"; … … 193 226 echo "<br />\n"; 194 227 } 228 229 // "Depuis la page @url@" 195 230 echo _T("forms:reponse_depuis")."<a href='"._DIR_RACINE."$url'>".$url."</a><br />\n"; 196 231 232 197 233 echo "<br />\n"; 198 199 list($lib,$values,$urls) = Forms_extraire_reponse($id_donnee); 200 234 235 236 list($lib, $values, $urls) = Forms_extraire_reponse($id_donnee); 237 238 // Affichage de l'ensemble des données de la réponses (liste des champs avec leur contenu) 201 239 foreach ($lib as $champ => $titre) { 202 240 $s = ''; 241 203 242 foreach ($values[$champ] as $id=>$valeur){ 204 243 $valeur = typo($valeur); … … 209 248 $s .= $valeur; 210 249 } 250 211 251 echo "<span class='verdana1' style='text-transform: uppercase; font-weight: bold; color: #404040;'>"; 212 252 echo typo($titre)." :</span>"; … … 215 255 } 216 256 257 217 258 echo "<div style='clear: both;'></div>"; 218 259 219 260 echo fin_cadre_relief(true); 220 261 } 221 222 262 223 263 224 264 if ($GLOBALS['spip_version_code']>=1.9203) 225 265 echo fin_gauche(); 266 226 267 echo fin_page(); 227 268 } -
_plugins_/forms/forms_et_tables_2_0/exec/forms_telecharger.php
r36636 r50068 33 33 34 34 // 35 // Telechargement d'un fichier particulier 35 // (Telechargement d'un fichier particulier) 36 // function exec_forms_telecharger() : 37 // Fonction servant à affiche une liste déroulante des différents formats disponibles au téléchargement 38 // (Le bouton 'Télécharger' éxécute l'action "action_forms_telecharger" du fichier "action/forms_telecharger.php" 39 // 36 40 // 37 41 function exec_forms_telecharger(){ … … 105 109 echo _T("forms:format_fichier"); 106 110 echo "<br />\n"; 111 107 112 // Extrait de la table en commencant par les dernieres maj 108 113 $action = generer_action_auteur("forms_telecharger","$id_form",urlencode($retour)); 109 114 $action = parametre_url($action,'var_mode','download'); // hack pour desactiver la compression gzip par buffer qui corromp le zip 115 110 116 echo "<form action='$action' method='POST'>"; 111 117 echo form_hidden($action); 118 119 // Liste des formats de CSV disponibles au téléchargement : 112 120 echo "<select name='delim'>\n"; 121 113 122 echo "<option value=','>"._T("forms:csv_classique")."</option>\n"; 114 123 echo "<option value=';'>"._T("forms:csv_excel")."</option>\n"; 115 124 echo "<option value='TAB'>"._T("forms:csv_tab")."</option>\n"; 125 // Ajout d'un nouveau format de téléchargement spécialement pour "CSV_Import" 126 echo "<option value='Import_CSV'>" . _T("forms:csv_import_csv") . "</option>\n"; 127 116 128 echo "</select>"; 129 117 130 echo "<br /><br />\n"; 118 131 echo "<input type='submit' name='ok' value='"._T("forms:telecharger")."' />\n"; -
_plugins_/forms/forms_et_tables_2_0/fonds/tables_tous.html
r38930 r50068 42 42 <td class="arial1"> 43 43 </td> 44 <td class="arial1">[<a href='(#GET{lien_affiche})' title='<:forms:afficher:>'><img src='#EVAL{_DIR_PLUGIN_FORMS}img_pack/donnees-24.png' width='24' height='24' alt='<:forms:afficher:>' /></a>]</td> 45 <td class="arial1">[(#GET{donnees}|=={0}|?{#ENV{prefix,'form'}|concat{':aucune_reponse'}}|_T)][(#GET{donnees}|=={1}|?{#ENV{prefix,'form'}|concat{':une_reponse'}}|_T)] 46 [(#GET{donnees}|>{1}|?{' '}) [(#EVAL{ _T("[(#ENV{prefix,'form'})]:nombre_reponses",array("nombre"=>[(#GET{donnees})])) })] ]</td> 44 45 <td class="arial1"> 46 [<a href='(#GET{lien_affiche})' title='<:forms:afficher:>'><img src='#EVAL{_DIR_PLUGIN_FORMS}img_pack/donnees-24.png' width='24' height='24' alt='<:forms:afficher:>' /></a>] 47 </td> 48 49 <td class="arial1"> 50 [(#GET{donnees}|=={0}|?{#ENV{prefix,'form'}|concat{':aucune_reponse'}}|_T)][(#GET{donnees}|=={1}|?{#ENV{prefix,'form'}|concat{':une_reponse'}}|_T)] 51 [(#GET{donnees}|>{1}|?{' '}) [(#EVAL{ _T("[(#ENV{prefix,'form'})]:nombre_reponses",array("nombre"=>[(#GET{donnees})])) })] ] 52 </td> 53 47 54 <td class="arial1">[<a href='(#GET{lien_edite})' title='<:forms:editer:>'><img src='#EVAL{_DIR_PLUGIN_FORMS}img_pack/editer-24.png' width='24' height='24' alt='<:forms:editer:>' /></a>]</td> 48 55 <td class="arial1"><a href='#GET{lien_duplique}' title='<:forms:dupliquer:>'><img src='#EVAL{_DIR_PLUGIN_FORMS}img_pack/dupliquer-24.png' width='24' height='24' alt='<:forms:dupliquer:>' /></a></td> -
_plugins_/forms/forms_et_tables_2_0/inc/forms_edit.php
r39353 r50068 11 11 * 12 12 */ 13 13 14 // compatibilite trans 1.9.1-1.9.2 14 15 // Cadre formulaires 15 16 // http://doc.spip.org/@debut_cadre_formulaire 17 16 18 function Forms_debut_cadre_formulaire($style='', $return=false){ 17 19 $x = "\n<div class='cadre-formulaire'" . … … 39 41 return $champ; 40 42 } 43 41 44 function Forms_insere_nouveau_champ($id_form,$type,$titre,$champ=""){ 42 45 if (!strlen($champ)) … … 56 59 return $champ; 57 60 } 61 58 62 function Forms_nouveau_choix($id_form,$champ){ 59 63 $n = 1; … … 67 71 return $choix; 68 72 } 73 69 74 function Forms_insere_nouveau_choix($id_form,$champ,$titre){ 70 75 $choix = Forms_nouveau_choix($id_form,$champ); … … 311 316 } 312 317 313 function Forms_zone_edition_champs($id_form, $champ_visible, $nouveau_champ, $redirect,$ajax=false){ 314 global $spip_lang_right,$couleur_claire,$spip_lang_left; 318 function Forms_zone_edition_champs($id_form, $champ_visible, $nouveau_champ, $redirect, $ajax=false){ 319 320 global $spip_lang_right, $couleur_claire, $spip_lang_left; 321 315 322 $res = spip_query("SELECT type_form FROM spip_forms WHERE id_form="._q($id_form)); 316 323 $row = spip_fetch_array($res); 324 317 325 $prefixei18n = forms_prefixi18n($row['type_form']); 318 326 $is_form = $prefixei18n=='form'; … … 320 328 $out = ""; 321 329 if (!$id_form) return $out; 330 322 331 $out .= "<div><br />"; 323 332 $out .= Forms_debut_cadre_formulaire('',true); 333 324 334 $out .= "<div class='verdana3'>"; 325 335 $out .= "<strong>"._T("$prefixei18n:champs_formulaire")."</strong><br />\n"; 326 336 $out .= _T("forms:info_champs_formulaire"); 327 337 $out .= "</div>\n"; 338 328 339 $out .= "<div id='forms_lang'></div>"; 329 340 $out .= "<div id='sortableChamps'>"; … … 334 345 } 335 346 336 $res = spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form).($ajax?" AND champ="._q($ajax):"")." ORDER BY rang"); 347 $res = spip_query("SELECT * FROM spip_forms_champs WHERE id_form=" . _q($id_form).($ajax?" AND champ="._q($ajax):"")." ORDER BY rang"); 348 337 349 while ($row = spip_fetch_array($res)) { 350 338 351 $champ = $row['champ']; 339 352 $visible = ($champ == $champ_visible)||($champ == $nouveau_champ); … … 397 410 if ($nouveau) $focus='antifocus'; 398 411 412 // Affichage de l'identifiant du champ (Permet à l'utilisateur définir facilement le champ servant de titre à l'article exporté) 413 $formulaire .= "( " . _T("forms:identifiant_champ") . " <strong>" . $champ . "</strong> )\n<br /><br />"; 414 415 399 416 if ($type=='separateur'){ 400 417 $formulaire .= "<label for='nom_$champ'>"._T("forms:champ_nom_bloc")."</label> :"; … … 420 437 421 438 } 439 422 440 $formulaire .= "<label for='wrap_$champ'>"._T("forms:html_wrapper")."</label> :"; 423 441 $formulaire .= " <textarea name='wrap_champ' id='wrap_$champ' class='verdana2' style='width:90%;height:3em;' rows='2' cols='40'>". … … 489 507 "<input type='hidden' name='redirect' value='$redirect' />" . // form_hidden ne desencode par redirect ... 490 508 "<input type='hidden' name='idtarget' value='champs' />"; // on target toute la boite, pas juste le div parent 509 491 510 $out .= "<strong>"._T("forms:ajouter_champ")."</strong><br />\n"; 492 511 $out .= _T("forms:ajouter_champ_type"); … … 525 544 //$out .= "<form method='post' action='$action_link' style='border: 0px; margin: 0px;'>"; 526 545 //$out .= form_hidden($action_link); 546 547 527 548 $out .= "<form class='ajaxAction' method='post' action='$action_link_noredir'" . 528 549 " style='border: 0px; margin: 0px;'>" . … … 656 677 $out .= " <textarea name='html_wrap' id='wrap' class='verdana2' style='width:90%;height:3em;' rows='2' cols='40'>". 657 678 entites_html($row['html_wrap'])."</textarea><br />\n"; 679 680 681 //// Ajout d'un champ dans les propriétés pour définir la rubrique dans laquelle les réponses devront être exportées 682 683 // SI la clé 'num_rubrique_export' n'existe pas OU est à 'null' 684 if( !is_null($row) && !array_key_exists('num_rubrique_export', $row) ){ 685 $row['num_rubrique_export'] = sql_getfetsel("id_rubrique", "spip_rubriques", "statut = 'publie'"); // Mettre à la première rubrique définie 686 } 687 688 $num_rubrique_export = entites_html($row['num_rubrique_export']); 689 690 /*** DEBUT du cadre "Export des réponses en articles" ***/ 691 $out .= debut_cadre_enfonce("",true); 692 $out .= "<strong><label>" . _T('forms:label_param_export') . "</label></strong>"; 693 $out .= "<br /><br />"; 694 695 $out .= "<label for='num_rubrique_export_form'>" . _T('forms:num_rubrique_export') . "</label> "; 696 $out .= "<br />"; 697 $out .= "<input type='text' name='num_rubrique_export' id='num_rubrique_export_form' class='formo $focus' ". 698 "value=\"" . $num_rubrique_export . "\" size='10' style='width:auto; margin:2px 0;' />\n"; 699 700 // Récupération du nom de la rubrique choisie (ne retourne rien si elle n'existe pas) : 701 $nom_rubrique_export = sql_getfetsel( 'titre', 'spip_rubriques', sql_in('id_rubrique', $num_rubrique_export) ); 702 703 // Test si la rubrique indiquée existe ou pas : 704 $existe_rubrique_export = $nom_rubrique_export ? 1 : 0; 705 if( $existe_rubrique_export == 1 ) { 706 $out .= "( " . _T( 'forms:nom_rubrique' , array('num'=>$num_rubrique_export, 'nom'=>$nom_rubrique_export) ) . " )"; 707 } else { 708 $out .= "<strong>( /!\ Rubrique n°" . intval($num_rubrique_export) . " inexistante! /!\ )</strong>" ; 709 } 710 711 $out .= "<br /><br />"; 712 $out .= "<hr />"; 713 $out .= "<br />"; 714 715 716 ///// Liste permettant de choisir le champ à utiliser pour définir le titre de l'article exporté : ///// 717 $out .= _T("forms:champ_titre_export") . "<br/>\n"; 718 719 // Liste déroulante de tous les champs 720 $out .= "<select name='champ_titre_export' class='fondo' style='margin:3px 0;'>\n"; 721 722 // Choix : "Titre par défaut" 723 $out .= "<option value='null'>" . _T("forms:titre_defaut_export") . "</option>\n"; 724 725 $res = spip_query( "SELECT * FROM spip_forms_champs " . 726 "WHERE ( id_form=" . _q($id_form) . " AND type!='multiple' AND type!='select' AND type!='separateur' ) " . 727 "ORDER BY rang" ); 728 729 while ($row = spip_fetch_array($res)) { 730 $id_champ = $row['champ']; 731 $nom_champ = couper($row['titre'], 50, "..."); // Coupe le nom(/titre) s'il est trop long... 732 733 $out .= "<option value='$id_champ' "; 734 // Sélectionné par défaut : celui définit 735 $champ_titre_export = sql_getfetsel("champ_titre_export", "spip_forms", "id_form=".intval($id_form) ); 736 if( $id_champ == $champ_titre_export ) { 737 $out .= "selected='selected'"; 738 } 739 $out .= " >$nom_champ ($id_champ)</option>\n"; 740 741 } 742 743 $out .= "</select>\n"; 744 745 746 $out .= "<br /><br />"; 747 748 $out .= fin_cadre_enfonce(true); 749 /*** FIN du cadre "Export des réponses en articles" ***/ 750 658 751 659 752 $out .= "<div style='text-align:right'>"; … … 662 755 $out .= "</form>"; 663 756 $out .= "</div>"; 757 664 758 $out .= Forms_fin_cadre_formulaire(true); 665 759 $out .= "</div>"; 760 666 761 return $out; 667 762 } 763 668 764 ?> -
_plugins_/forms/forms_et_tables_2_0/inc/forms_export.php
r13697 r50068 19 19 include_spip('inc/autoriser_compat'); 20 20 21 21 22 function csv_champ($champ) { 22 23 $champ = preg_replace(',[\s]+,', ' ', $champ); … … 25 26 } 26 27 27 function Forms_formater_ligne_csv($ligne,$delim=',') { 28 29 function Forms_formater_ligne_csv($ligne, $delim=',') { 30 28 31 $out = ""; 29 foreach($ligne as $val){ 32 33 foreach($ligne as $val) { 34 30 35 if (is_array($val)) 31 36 foreach($val as $v) $out .= csv_champ($v).$delim; … … 33 38 $out .= csv_champ($val).$delim; 34 39 } 35 $out = substr($out,0,strlen($out)-strlen($delim))."\r\n"; 40 41 $out = substr($out, 0, strlen($out)-strlen($delim)) . "\r\n"; 42 36 43 return $out; 37 44 } 38 45 39 function Forms_formater_ligne($ligne,$format,$separateur){ 40 if (function_exists($f = "Forms_formater_ligne_$format")) 41 return $f($ligne,$separateur); 46 47 function Forms_formater_ligne($ligne, $format, $separateur){ 48 49 // SI une fonction correspondant au format existe ... 50 if ( function_exists($f = "Forms_formater_ligne_$format") ) 51 return $f($ligne, $separateur); 42 52 else 43 return Forms_formater_ligne_csv($ligne,$separateur); 44 } 45 46 function Forms_formater_reponse($ligne, $valeurs, $structure,$format,$separateur) { 53 return Forms_formater_ligne_csv($ligne, $separateur); 54 55 } 56 57 58 function Forms_formater_reponse($ligne, $valeurs, $structure, $format, $separateur) { 59 47 60 // Prendre les differents champs dans l'ordre 48 61 foreach ($structure as $champ => $t) { 49 if (!isset($valeurs[$champ])) { 62 63 if ( !isset($valeurs[$champ]) ) { 50 64 $ligne[$champ] = ""; 51 } 52 else{ 65 66 } else { 67 53 68 $v = $valeurs[$champ]; 54 if ($t['type']=='multiple'){ 55 // pour un choix multiple on cree une colonne par reponse potentielle, plus une vide avant 69 70 // SI choix multiple ... 71 if ( $t['type']=='multiple' ){ 72 73 // pour un choix multiple on cree une colonne par reponse potentielle, plus une vide avant 74 // (??Pourquoi une colonne vide avant??) 56 75 $ligne[$champ][] = ""; 57 foreach($t['choix'] as $choix=>$titre) 58 if (isset($v[$choix]))76 foreach($t['choix'] as $choix=>$titre){ 77 if( isset($v[$choix]) ) 59 78 $ligne[$champ][$choix] = $v[$choix]; 60 79 else 61 80 $ligne[$champ][$choix] = ""; 62 } 63 else 64 $ligne[] = strval(join(', ', $v)); 65 } 66 } 67 return Forms_formater_ligne($ligne,$format,$separateur); 68 } 69 81 } 82 83 } else { // ...dans tous les autres cas : 84 $ligne[] = strval( join(', ', $v) ); 85 } 86 } 87 88 } 89 90 return Forms_formater_ligne($ligne, $format, $separateur); 91 92 } 93 94 95 // INFO : $separateur = $delim 96 // (?? Pourquoi '&$' dans "&$fichiers" et "&$filename" ??) 70 97 function Forms_formater_les_reponses($id_form, $format, $separateur, &$fichiers, &$filename, $head=true, $traduit=true){ 71 98 // … … 76 103 $nb_reponses = 0; 77 104 $row = spip_fetch_array(spip_query("SELECT COUNT(*) AS tot FROM spip_forms_donnees WHERE id_form="._q($id_form)." AND confirmation='valide' AND statut<>'poubelle'")); 78 if ($row) 79 80 if ( !$id_form || !autoriser('administrer','form',$id_form))105 if ($row) $nb_reponses = $row['tot']; 106 107 if ( !$id_form || !autoriser('administrer','form',$id_form) ) 81 108 acces_interdit(); 82 109 … … 96 123 // Une premiere ligne avec les noms de champs 97 124 $ligne1 = $ligne2 = array(); 98 $ligne1[] = $ligne2[] = 'id_donnee'; 99 $ligne1[] = 'date'; 100 $ligne2[] = _T("forms:date"); 101 $ligne1[] = 'url'; 102 $ligne2[] = _T("forms:page"); 125 126 // SI 'Import_CSV', on ne veut que la 2ème ligne (ligne des titres (libellés) des champs) 127 if( $format != "Import_CSV" ){ 128 $ligne1[] = 'id_donnee'; 129 } 130 $ligne2[] = 'id_donnee'; 131 132 133 // SI 'Import_CSV', on ne veut pas ces 2 colonnes! (ni 'date', ni 'url') 134 if( $format != "Import_CSV" ){ 135 $ligne1[] = 'date'; 136 $ligne2[] = _T("forms:date"); 137 138 $ligne1[] = 'url'; 139 $ligne2[] = _T("forms:page"); 140 } 141 103 142 foreach ($structure as $champ => $t) { 104 143 $ligne1[] = $champ; 105 $ligne2[] = textebrut(typo($t['titre'])); 144 $ligne2[] = textebrut( typo($t['titre']) ); 145 106 146 if ($t['type']=='multiple'){ 107 147 // pour un choix multiple on cree une colonne par reponse potentielle … … 112 152 } 113 153 } 114 } 115 $s .= Forms_formater_ligne($ligne1,$format,$separateur); 154 155 } 156 157 158 // SI 'Import_CSV', on ne veut que la 2ème ligne (ligne des titres (libellés) des champs) 159 if( $format != "Import_CSV" ){ 160 $s .= Forms_formater_ligne($ligne1, $format, $separateur); // (1ère ligne) 161 } 162 116 163 if ($traduit) 117 $s .= Forms_formater_ligne($ligne2,$format,$separateur); 118 } 119 120 // Ensuite les reponses 164 $s .= Forms_formater_ligne($ligne2, $format, $separateur); // (2ème ligne) 165 166 167 } // (FIN de "if($head)") 168 169 170 // Ensuite les reponses... 121 171 $fichiers = array(); 122 172 $id_donnee = 0; 123 $result = spip_query("SELECT r.id_donnee, r.date,r.url, c.champ, c.valeur ". 173 174 $result = spip_query("SELECT r.id_donnee, r.date, r.url, c.champ, c.valeur ". 124 175 "FROM spip_forms_donnees AS r LEFT JOIN spip_forms_donnees_champs AS c USING (id_donnee) ". 125 176 "WHERE id_form="._q($id_form)." AND confirmation='valide' AND statut<>'poubelle' AND c.id_donnee IS NOT NULL ". 126 177 "ORDER BY date, r.id_donnee"); 178 127 179 while ($row = spip_fetch_array($result)) { 180 128 181 if ($id_donnee != $row['id_donnee']) { 182 129 183 if ($id_donnee) 130 $s .= Forms_formater_reponse($ligne,$valeurs,$structure,$format,$separateur); 184 $s .= Forms_formater_reponse($ligne, $valeurs, $structure, $format, $separateur); 185 131 186 $id_donnee = $row['id_donnee']; 132 187 $date = $row['date']; 188 133 189 $ligne = array(); 134 190 $ligne[] = $id_donnee; 135 $ligne[] = jour($date).'/'.mois($date).'/'.annee($date); 136 $ligne[] = str_replace("&","&",$row['url']); 191 192 // SI 'Import_CSV', on ne veut pas ces 2 colonnes! (ni date, ni url) 193 if( $format != "Import_CSV" ){ 194 $ligne[] = jour($date).'/'.mois($date).'/'.annee($date); 195 $ligne[] = str_replace("&", "&", $row['url']); 196 } 197 137 198 $valeurs = array(); 138 199 } 200 139 201 $champ = $row['champ']; 202 203 // SI champ de type "fichier"... 140 204 if ($structure[$champ]['type'] == 'fichier') { 205 141 206 $fichiers[] = $row['valeur']; 142 207 $valeurs[$champ][] = 'fichiers/'.basename($row['valeur']); 143 } 144 else { 208 209 } else { 210 145 211 $v = $row['valeur']; 146 if (isset($structure[$champ]['choix'][$v])){ 212 213 if( isset($structure[$champ]['choix'][$v]) ){ 147 214 $vt = $v; 148 215 if ($traduit) $vt = $structure[$champ]['choix'][$v]; 149 216 $valeurs[$champ][$v] = $vt; 150 } 151 else{ 217 } else { 152 218 if ($traduit AND isset($structure[$champ][$v])) $v = $structure[$champ][$v]; 153 219 $valeurs[$champ][] = $v; 154 220 } 155 } 156 } 157 158 // Ne pas oublier la derniere reponse 221 222 } 223 } 224 225 // Ne pas oublier la derniere reponse! 159 226 if ($id_donnee) 160 $s .= Forms_formater_reponse($ligne,$valeurs,$structure,$format,$separateur); 227 $s .= Forms_formater_reponse($ligne, $valeurs, $structure, $format, $separateur); 228 161 229 return $s; 230 162 231 } 163 232 -
_plugins_/forms/forms_et_tables_2_0/inc/forms_type_champs.php
r46207 r50068 11 11 * 12 12 */ 13 14 13 15 14 … … 76 75 return $liste; 77 76 } 77 78 78 function Forms_type_champ_autorise($type) { 79 79 static $t; … … 83 83 return (strlen($type)&&isset($t[$type])); 84 84 } 85 85 86 function Forms_nom_type_champ($type='') { 86 87 static $noms; … … 125 126 $val = _request($champ, $c); 126 127 if ($type == 'fichier') $val = $_FILES[$champ]['tmp_name']; 128 127 129 // verifier la presence des champs obligatoires dont la saisie n'est pas desactivee 128 if (($val===NULL || (!is_array($val) && !strlen($val)) || (is_array($val) && (count($val)<2))) 129 && ($infos['obligatoire'] == 'oui') 130 && ($infos['saisie'] != 'non')) 130 if ( ($val===NULL || (!is_array($val) && !strlen($val)) || (is_array($val) && (count($val)<2))) 131 && ($infos['obligatoire'] == 'oui') 132 && ($infos['saisie'] != 'non') 133 ) 134 { 131 135 // Cas particulier de l'upload de fichier : on ne force pas à uploader à nouveau un fichier si celui-ci est existant 132 136 // Cas particulier des password : on ne force pas a donner un nouveau mot de passe si existe deja 133 137 if (( (in_array($type,array('fichier','password'))) && ($val==NULL) && (Forms_valeurs($id_donnee,$id_form,$champ)!=NULL) )); 134 else $erreur[$champ] = _T("forms:champ_necessaire"); 138 else $erreur[$champ] = _T("forms:champ_necessaire"); 139 } 135 140 } 136 141 … … 151 156 foreach($structure as $champ=>$infos){ 152 157 $type = $infos['type']; 158 153 159 if ($GLOBALS['spip_version_code']<1.92) 154 160 $val = _request($champ); 155 161 else 156 162 $val = _request($champ, $c); 157 if ( $val!=NULL && strlen($val) ) { 158 163 164 165 /* INFO : Les booléens en PHP : FALSE = "" = "0" = 0 = array() // TRUE = Toutes les autres valeurs! */ 166 /* ATTENTION : Depuis PHP 5.3 'strlen()' sur un 'array' ne marche plus!!! Avant, cela retournait toujours la valeur '5' (= strlen("Array")) */ 167 if ( $val!=NULL && ((!is_array($val) && strlen($val)>0) || (is_array($val))) ) 168 /* SI( != de NULL ET (SOIT ce n'est pas un tableau (caractères OU chiffres) donc ça doit être de longueur > 0, SOIT c'est un tableau)) */ 169 { 170 159 171 // Verifier la conformite des donnees entrees 160 172 switch ($type){ … … 223 235 $erreur[$champ] = _T("info_passe_trop_court"); 224 236 break; 225 } 237 }// FIN du switch 238 226 239 if (isset($GLOBALS['forms_types_champs_etendus'][$type])){ 227 240 $match = $GLOBALS['forms_types_champs_etendus'][$type]['match']; … … 229 242 $erreur[$champ] = _T("forms:champs_perso_invalide"); 230 243 } 231 $erreur = pipeline('forms_valide_conformite_champ',array( 232 'args'=>array( 233 'id_form'=>$id_form, 234 'id_donnee'=>$id_donnee, 235 'champ'=>$champ, 236 'type'=>$type, 237 'infos'=>$infos, 238 'val'=>$val 239 ), 240 'data'=>$erreur) 241 ); 242 } 243 } 244 245 $erreur = pipeline( 246 'forms_valide_conformite_champ' , 247 array( 248 'args'=>array( 249 'id_form'=>$id_form, 250 'id_donnee'=>$id_donnee, 251 'champ'=>$champ, 252 'type'=>$type, 253 'infos'=>$infos, 254 'val'=>$val 255 ), 256 'data'=>$erreur 257 ) 258 ); // FIN de 'pipeline()' 259 260 } // FIN du if 261 262 } // FIN du foreach 263 244 264 return $erreur; 245 265 } 246 266 247 248 267 ?> -
_plugins_/forms/forms_et_tables_2_0/lang/forms_fr.php
r35302 r50068 1 <?php1 <?php 2 2 // This is a SPIP language file -- Ceci est un fichier langue de SPIP 3 3 // Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/_stable_/forms/forms_et_tables_1_9_1/lang/ … … 9 9 'activer_barre_typo' => 'Activer la barre typographique', 10 10 'adresse_invalide' => 'Cette adresse n\'est pas valide.', 11 'afficher' => 'Afficher ',11 'afficher' => 'Afficher le tableau des réponses', 12 12 'aide_contextuelle' => 'Aide contextuelle', 13 13 'ajouter_champ' => 'Ajouter un champ', … … 22 22 'aucune_reponse' => 'aucune donnée', 23 23 'avis_message_confirmation' => 'Un message de confirmation est envoyé à @mail@', 24 24 25 25 26 // B … … 82 83 'csv_excel' => 'CSV pour Excel (;)', 83 84 'csv_tab' => 'CSV avec tabulations', 85 86 'csv_import_csv' => 'CSV spécial pour \'Import CSV\' (;)', 87 'champ_titre_export' => 'Champ utilisé pour définir le titre de l\'article exporté : "nom (identifiant)"', 88 84 89 85 90 // D … … 97 102 'echec_upload' => 'Le transfert du fichier a échoué.', 98 103 'edit_champ_obligatoire' => 'Ce champ est obligatoire', 99 'editer' => 'Editer ',104 'editer' => 'Editer le formulaire', 100 105 'email_independant' => 'Email independant de la reponse', 101 106 'exporter' => 'Exporter', 102 107 'exporter_article' => 'Exporter dans un article', 108 //'exporter_toutes_reponses' => 'NE FONCTIONNE PAS ENCORE !!', //'(Exporter TOUTES les réponses)' 109 103 110 104 111 // F … … 132 139 'info_supprimer_formulaire' => 'Voulez-vous vraiment supprimer ce formulaire ?', 133 140 'info_supprimer_formulaire_reponses' => 'Des données sont associées à ce formulaire. Voulez-vous vraiment le supprimer ?', 134 141 'identifiant_champ' => 'Identifiant du champ :', 142 135 143 // L 136 144 'lien_apercu' => 'Aperçu', … … 143 151 'lier_documents_mail' => 'Joindre les documents à l\'email', 144 152 'liste_choix' => 'Liste des choix proposés', 153 'label_param_export' => 'Export des réponses en articles : ', 145 154 146 155 // M … … 161 170 'nouveau_formulaire' => 'Nouveau formulaire', 162 171 'numerique_invalide' => 'Champ numérique invalide', 172 'num_rubrique_export' => 'Numéro de la rubrique dans laquelle les réponses doivent être exportées : ', 173 'nom_rubrique' => 'Rubrique n° @num@ : \'@nom@\'', 163 174 164 175 // P … … 172 183 'rang' => 'Rang', 173 184 'remplir_un_champ' => 'Veuillez remplir au moins un champ.', 174 'reponse' => 'Reponse @id_reponse@', 185 186 'reponse' => 'Réponse @id_reponse@', 187 175 188 'reponse_depuis' => 'Depuis la page ', 176 189 'reponse_enregistree' => 'Votre saisie a été enregistrée.', … … 209 222 'toutes_tables' => 'Tous les formulaires', 210 223 'type_form' => 'Type de formulaire', 224 225 'titre_defaut_export' => 'Titre par défaut : "Réponse n°..." ', 211 226 212 227 // U
Note: See TracChangeset
for help on using the changeset viewer.