Changeset 6570 in spip-zone


Ignore:
Timestamp:
Oct 24, 2006, 2:16:03 PM (13 years ago)
Author:
cedric@…
Message:

fin de la reecriture du code aux standards actuels, et debut de debugage

Location:
_plugins_/_stable_/forms/forms2
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/forms/forms2/action/forms_exporte_reponse_article.php

    r6542 r6570  
    3131                        list($lib,$values,$urls) =      Forms_extraire_reponse($id_reponse);
    3232                        $texte = "";
    33                         $res = spip_query("SELECT * FROM spip_forms_champs AS forms WHERE id_form="._q($id_form)." ORDER BY cle");
     33                        $res = spip_query("SELECT * FROM spip_forms_champs AS forms WHERE id_form="._q($id_form)." ORDER BY rang");
    3434                        while ($row = spip_fetch_array($res)){
    3535                                $titre = $row['titre'];
    3636                                $champ = $row['champ'];
    37                                 $cle = $row['cle'];
    3837                                $type = $row['type'];
    39                                 if (!isset($values[$cle])){
     38                                if (!isset($values[$champ])){
    4039                                        switch ($type){
    4140                                                case 'textestatique':   $texte .= "\n{{{$titre}}}\n\n"; break;
     
    4544                                else {
    4645                                        $s = '';
    47                                         if (count($values[$cle])>1) $s = "\n-* ";
    48                                         foreach ($values[$cle] as $id=>$valeur){
     46                                        if (count($values[$champ])>1) $s = "\n-* ";
     47                                        foreach ($values[$champ] as $id=>$valeur){
    4948                                                $valeur = typo($valeur);
    5049                                                if(strlen($s)) $s .= "\n-* ";
    51                                                 if ($lien = $urls[$cle][$id])
     50                                                if ($lien = $urls[$champ][$id])
    5251                                                        $s .= "[$valeur -> $lien]";
    5352                                                else
  • _plugins_/_stable_/forms/forms2/base/forms.php

    r6556 r6570  
    6464                "id_form"       => "bigint(21) NOT NULL",
    6565                "champ" => "varchar(100)",
    66                 "cle" => "bigint(21) NOT NULL",
     66                "rang" => "bigint(21) NOT NULL",
    6767                "titre" => "text",
    6868                "type" => "varchar(100)",
     
    7272$formschamp_key = array(
    7373        "PRIMARY KEY"   => "id_form, champ",
    74         "KEY" => "cle"
     74        "KEY" => "rang"
    7575);
    7676
     
    8383                "champ" => "varchar(100)",
    8484                "choix" => "varchar(100) NOT NULL DEFAULT ''",
    85                 "titre" => "text"
     85                "titre" => "text",
     86                "rang" => "bigint(21) NOT NULL"
    8687);
    8788$formschampchoix_key = array(
  • _plugins_/_stable_/forms/forms2/base/forms_upgrade.php

    r6565 r6570  
    2121               
    2222                $structure = unserialize($row['structure']);
     23                $rang = 1;
    2324                foreach($structure as $cle=>$val){
    2425                        $champ = $val['code'];
     
    3031                        $extra_info = isset($type_ext['taille']) ? $type_ext['taille']:$extra_info;
    3132                        $obligatoire = $val['obligatoire'];
    32                         spip_query("INSERT INTO spip_forms_champs (id_form,cle,champ,titre,type,obligatoire,extra_info)
    33                                 VALUES("._q($id_form).","._q($cle).","._q($champ).","._q($titre).","._q($type).","._q($obligatoire).","._q($extra_info).")");
     33                        spip_query("INSERT INTO spip_forms_champs (id_form,rang,champ,titre,type,obligatoire,extra_info)
     34                                VALUES("._q($id_form).","._q($rang++).","._q($champ).","._q($titre).","._q($type).","._q($obligatoire).","._q($extra_info).")");
    3435                        if ($type=='select' OR $type=='multiple'){
     36                                $rangchoix = 1;
    3537                                foreach($type_ext as $choix=>$titre){
    36                                         spip_query("INSERT INTO spip_forms_champs_choix (id_form,champ,choix,titre)
    37                                                 VALUES("._q($id_form).","._q($champ).","._q($choix).","._q($titre).")");
     38                                        spip_query("INSERT INTO spip_forms_champs_choix (id_form,champ,choix,titre,rang)
     39                                                VALUES("._q($id_form).","._q($champ).","._q($choix).","._q($titre).","._q($rangchoix++).")");
    3840                                }
    3941                        }
     
    4749
    4850        function Forms_upgrade(){
    49                 $version_base = 0.16;
     51                $version_base = 0.17;
    5052                $current_version = 0.0;
    5153                if (   (isset($GLOBALS['meta']['forms_base_version']) )
  • _plugins_/_stable_/forms/forms2/exec/forms_edit.php

    r6565 r6570  
    5757                        $js = "";
    5858
    59                         $res3 = spip_query("SELECT * FROM spip_forms_champs_choiw WHERE id_form="._q($id_form)." AND champ="._q($row2['champ']));
     59                        $res3 = spip_query("SELECT * FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($row2['champ']));
    6060                        while($row3 = spip_fetch_array($res3)){
    6161                                $s .= "<tr><td>".$row3['titre']."</td><td>";
     
    109109}
    110110
    111 function Forms_zone_edition_champs($id_form, $champ_visible, $nouveau_champ){
     111function Forms_bloc_edition_champ($row, $link) {
     112        global $couleur_claire;
     113
     114        $champ = $row['champ'];
     115        $type = $row['type'];
     116        $titre = $row['titre'];
     117        $obligatoire = $row['obligatoire'];
     118        $extra_info = $row['extra_info'];
     119       
     120        $out = "";
     121
     122        if ($type != 'separateur'){
     123                $checked = ($obligatoire == 'oui') ? " checked='checked'" : "";
     124                $out .= "&nbsp; &nbsp; <input type='checkbox' name='champ_obligatoire' value='oui' id='obli_$champ'$checked> ";
     125                $out .= "<label for='obli_$champ'>"._T("forms:edit_champ_obligatoire")."</label>";
     126                $out .= "<br />\n";
     127        }
     128
     129        if ($type == 'url') {
     130                $checked = ($extra_info == 'oui') ? " checked='checked'" : "";
     131                $out .= "&nbsp; &nbsp; <input type='checkbox' name='champ_verif' value='oui' id='verif_$champ'$checked> ";
     132                $out .= "<label for='verif_$champ'>"._T("forms:verif_web")."</label>";
     133                $out .= "<br />\n";
     134        }
     135        if ($type == 'select' || $type == 'multiple') {
     136                global $ajout_choix;
     137
     138                $out .= "<div style='margin: 5px; padding: 5px; border: 1px dashed $couleur_claire;'>";
     139                $out .= _T("forms:liste_choix")."&nbsp;:<br />\n";
     140                $res2 = spip_query("SELECT * FROM spip_forms_champs_choix WHERE champ="._q($champ));
     141                while ($row2 = spip_fetch_array($res2)){
     142                        $choix = $row2['choix'];
     143                        if ($ajout_choix == $choix) {
     144                                $out .= "<script type='text/javascript'><!-- \nvar antifocus_choix= false; // --></script>\n";
     145                                $js = " onfocus=\"if(!antifocus_choix){this.value='';antifocus_choix=true;}\"";
     146                        }
     147                        else $js = "";
     148                        $out .= "<input type='text' id='nom_$choix' name='$choix' value=\"".entites_html($row2['titre'])."\" ".
     149                                "class='fondl verdana2' size='20'$js>";
     150                        //
     151                        $out .= " <input style='display: none;' type='submit' name='modif_choix' value=\""._T('bouton_modifier')."\" class='fondo verdana2'>";
     152                        $supp_link = $link;
     153                        $supp_link = parametre_url($supp_link,'supp_choix', $choix);
     154                        $out .= " &nbsp; <span class='verdana1'>[<a href='".$supp_link."#champ_visible'>".
     155                                _T("forms:supprimer_choix")."</a>]</span>";
     156                        $out .= "<br />\n";
     157                }
     158                $out .= "<br /><input type='submit' name='ajout_choix' value=\""._T("forms:ajouter_choix")."\" class='fondo verdana2'>";
     159
     160                $out .= "</div>";
     161                if ($type=='select')
     162                        $out .= "<br /><input type='submit' name='switch_select_multi' value=\""._T("forms:changer_choix_multiple")."\" class='fondl verdana2'>";
     163                if ($type=='multiple')
     164                        $out .= "<br /><input type='submit' name='switch_select_multi' value=\""._T("forms:changer_choix_unique")."\" class='fondl verdana2'>";
     165                $out .= "<br />\n";
     166        }
     167        if ($type == 'mot') {
     168                $out .= "<label for='groupe_$champ'>"._T("forms:champ_nom_groupe")."</label> :";
     169                $out .= " &nbsp;<select name='groupe_champ' value='0' id='groupe_$champ' class='fondo verdana2'>\n";
     170                $res2 = spip_query("SELECT * FROM spip_groupes_mots ORDER BY titre");
     171                while ($row2 = spip_fetch_array($res2)) {
     172                        $id_groupe = $row2['id_groupe'];
     173                        $titre_groupe = supprimer_tags(typo($row2['titre']));
     174                        $selected = ($id_groupe == $row['extra_info']) ? " selected='selected'": "";
     175                        $out .= "<option value='$id_groupe'$selected>$titre_groupe</option>\n";
     176                }
     177                $out .= "</select>";
     178                $out .= "<br />\n";
     179        }
     180        if ($type == 'fichier') {
     181                $taille = intval($row['extra_info']);
     182                if (!$taille) $taille = '';
     183                $out .= "<label for='taille_$champ'>"._T("forms:taille_max")."</label> : ";
     184                $out .= "<input type='text' name='taille_champ' value='$taille' id='taille_$champ' class='fondo verdana2'>\n";
     185                $out .= "<br />\n";
     186        }
     187        return $out;
     188}
     189
     190function Forms_zone_edition_champs($id_form, $champ_visible, $nouveau_champ, $form_link){
    112191        $out = "";
    113192        if (!$id_form) return $out;
     
    120199        $out .= "<div id='forms_lang'></div>";
    121200
    122         if ($row = spip_fetch_array(spip_query("SELECT MAX(cle) AS clemax, MIN(cle) AS clemin FROM spip_forms_champs WHERE id_form="._q($id_form)))){
    123                 $index_min = $row['clemin'];
    124                 $index_max = $row['clemax'];
    125         }
    126 
    127         $res = spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form));
     201        if ($row = spip_fetch_array(spip_query("SELECT MAX(rang) AS rangmax, MIN(rang) AS rangmin FROM spip_forms_champs WHERE id_form="._q($id_form)))){
     202                $index_min = $row['rangmin'];
     203                $index_max = $row['rangmax'];
     204        }
     205
     206        $res = spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form)."ORDER BY rang");
    128207        while ($row = spip_fetch_array($res)) {
    129208                $champ = $row['champ'];
     
    131210                $nouveau = ($champ == $nouveau_champ);
    132211                $obligatoire = $row['obligatoire'];
    133                 $aff_min = $index > $index_min;
    134                 $aff_max = $index < $index_max;
     212                $rang = $row['rang'];
     213                $aff_min = $rang > $index_min;
     214                $aff_max = $rang < $index_max;
    135215                $type = $row['type'];
    136216
     
    147227                        $out .= "<div class='verdana1' style='float: right; font-weight: bold;'>";
    148228                        if ($aff_min) {
    149                                 $link = parametre_url($form_link,'monter', $index);
     229                                $link = parametre_url($form_link,'monter', $champ);
    150230                                $out .= "<a href='".$link."#champs'><img src='"._DIR_IMG_PACK."monter-16.png' style='border:0' alt='"._T("forms:champ_monter")."'></a>";
    151231                        }
     
    154234                        }
    155235                        if ($aff_max) {
    156                                 $link = parametre_url($form_link,'descendre', $index);
     236                                $link = parametre_url($form_link,'descendre', $champ);
    157237                                $out .= "<a href='".$link."#champs'><img src='"._DIR_IMG_PACK."descendre-16.png' style='border:0' alt='"._T("forms:champ_descendre")."'></a>";
    158238                        }
     
    161241
    162242                $out .= $visible ? bouton_block_visible("champ_$champ") : bouton_block_invisible("champ_$champ");
    163                 $out .= "<strong id='titre_nom_$champ'>".typo($row['nom'])."</strong>";
     243                $out .= "<strong id='titre_nom_$champ'>".typo($row['titre'])."</strong>";
    164244                $out .= "<br /></div>";
    165245                $out .= "(".Forms_nom_type_champ($row['type']).")\n";
     
    180260                }
    181261                else $js = "";
     262               
    182263                if ($type=='separateur'){
    183264                        $out .= "<label for='nom_$champ'>"._T("forms:champ_nom_bloc")."</label> :";
    184265                        $out .= " &nbsp;<input type='text' name='nom_champ' id='nom_$champ' value=\"".
    185                                 entites_html($row['nom'])."\" class='fondo verdana2' size='30'$js><br />\n";
     266                                entites_html($row['titre'])."\" class='fondo verdana2' size='30'$js><br />\n";
    186267                }
    187268                else if ($type=='textestatique'){
    188269                        $out .= "<label for='nom_$champ'>"._T("forms:champ_nom_texte")."</label> :<br/>";
    189270                        $out .= " &nbsp;<textarea name='nom_champ' id='nom_$champ'  class='verdana2' style='width:100%;height:5em;' $js>".
    190                                 entites_html($row['nom'])."</textarea><br />\n";
     271                                entites_html($row['titre'])."</textarea><br />\n";
    191272                }
    192273                else{
    193274                        $out .= "<label for='nom_$champ'>"._T("forms:champ_nom")."</label> :";
    194275                        $out .= " &nbsp;<input type='text' name='nom_champ' id='nom_$champ' value=\"".
    195                                 entites_html($row['nom'])."\" class='fondo verdana2' size='30'$js><br />\n";
     276                                entites_html($row['titre'])."\" class='fondo verdana2' size='30'$js><br />\n";
    196277                        $out .= Forms_bloc_edition_champ($row, $form_link);
    197278                }
     
    204285                $link = parametre_url($form_link,'supp_champ', $champ);
    205286                $out .= "<div style='float: left;'>";
    206                 icone_horizontale(_T("forms:supprimer_champ"), $link."#champs","../"._DIR_PLUGIN_FORMS. "/img_pack/form-24.png", "supprimer.gif");
     287                $out .= icone_horizontale(_T("forms:supprimer_champ"), $link."#champs","../"._DIR_PLUGIN_FORMS. "/img_pack/form-24.png", "supprimer.gif",false);
    207288                $out .= "</div>\n";
    208289
    209290                $out .= fin_block();
    210                 if (!in_array($t['type'],array('separateur','textestatique')))
     291                if (!in_array($type,array('separateur','textestatique')))
    211292                        $out .= fin_cadre_relief(true);
    212293                else
     
    236317}
    237318
    238 function Forms_bloc_edition_champ($row, $link) {
    239         global $couleur_claire;
    240 
    241         $champ = $row['champ'];
    242         $type = $row['type'];
    243         $titre = $row['titre'];
    244         $obligatoire = $row['obligatoire'];
    245         $extra_info = $row['extra_info'];
    246        
    247         $out = "";
    248 
    249         if ($type != 'separateur'){
    250                 $checked = ($obligatoire == 'oui') ? " checked='checked'" : "";
    251                 $out .= "&nbsp; &nbsp; <input type='checkbox' name='champ_obligatoire' value='oui' id='obli_$champ'$checked> ";
    252                 $out .= "<label for='obli_$champ'>"._T("forms:edit_champ_obligatoire")."</label>";
    253                 $out .= "<br />\n";
    254         }
    255 
    256         if ($type == 'url') {
    257                 $checked = ($extra_info == 'oui') ? " checked='checked'" : "";
    258                 $out .= "&nbsp; &nbsp; <input type='checkbox' name='champ_verif' value='oui' id='verif_$champ'$checked> ";
    259                 $out .= "<label for='verif_$champ'>"._T("forms:verif_web")."</label>";
    260                 $out .= "<br />\n";
    261         }
    262         if ($type == 'select' || $type == 'multiple') {
    263                 global $ajout_choix;
    264 
    265                 $out .= "<div style='margin: 5px; padding: 5px; border: 1px dashed $couleur_claire;'>";
    266                 $out .= _T("forms:liste_choix")."&nbsp;:<br />\n";
    267                 $res2 = spip_query("SELECT * FROM spip_forms_champs_choix WHERE champ="._q($champ));
    268                 while ($row2 = spip_fetch_array($res2)){
    269                         $choix = $row2['choix'];
    270                         if ($ajout_choix == $choix) {
    271                                 $out .= "<script type='text/javascript'><!-- \nvar antifocus_choix= false; // --></script>\n";
    272                                 $js = " onfocus=\"if(!antifocus_choix){this.value='';antifocus_choix=true;}\"";
    273                         }
    274                         else $js = "";
    275                         $out .= "<input type='text' id='nom_$choix' name='$choix' value=\"".entites_html($row2['titre'])."\" ".
    276                                 "class='fondl verdana2' size='20'$js>";
    277                         //
    278                         $out .= " <input style='display: none;' type='submit' name='modif_choix' value=\""._T('bouton_modifier')."\" class='fondo verdana2'>";
    279                         $supp_link = $link;
    280                         $supp_link = parametre_url($supp_link,'supp_choix', $choix);
    281                         $out .= " &nbsp; <span class='verdana1'>[<a href='".$supp_link."#champ_visible'>".
    282                                 _T("forms:supprimer_choix")."</a>]</span>";
    283                         $out .= "<br />\n";
    284                 }
    285                 $out .= "<br /><input type='submit' name='ajout_choix' value=\""._T("forms:ajouter_choix")."\" class='fondo verdana2'>";
    286 
    287                 $out .= "</div>";
    288                 if ($type=='select')
    289                         $out .= "<br /><input type='submit' name='switch_select_multi' value=\""._T("forms:changer_choix_multiple")."\" class='fondl verdana2'>";
    290                 if ($type=='multiple')
    291                         $out .= "<br /><input type='submit' name='switch_select_multi' value=\""._T("forms:changer_choix_unique")."\" class='fondl verdana2'>";
    292                 $out .= "<br />\n";
    293         }
    294         if ($type == 'mot') {
    295                 $out .= "<label for='groupe_$champ'>"._T("forms:champ_nom_groupe")."</label> :";
    296                 $out .= " &nbsp;<select name='groupe_champ' value='0' id='groupe_$champ' class='fondo verdana2'>\n";
    297                 $res2 = spip_query("SELECT * FROM spip_groupes_mots ORDER BY titre");
    298                 while ($row2 = spip_fetch_array($result)) {
    299                         $id_groupe = $row2['id_groupe'];
    300                         $titre_groupe = supprimer_tags(typo($row2['titre']));
    301                         $selected = ($id_groupe == $row['extra_info']) ? " selected='selected'": "";
    302                         $out .= "<option value='$id_groupe'$selected>$titre_groupe</option>\n";
    303                 }
    304                 $out .= "</select>";
    305                 $out .= "<br />\n";
    306         }
    307         if ($type == 'fichier') {
    308                 $taille = intval($row['extra_info']);
    309                 if (!$taille) $taille = '';
    310                 $out .= "<label for='taille_$champ'>"._T("forms:taille_max")."</label> : ";
    311                 $out .= "<input type='text' name='taille_champ' value='$taille' id='taille_$champ' class='fondo verdana2'>\n";
    312                 $out .= "<br />\n";
    313         }
    314         return $out;
    315 }
    316 
    317 function Forms_modif_edition_champ($id_form,$champ) {
    318         $res = spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form)." AND champ="._q($champ));
    319         $type = $row['type'];
    320         $extra_info = "";
    321         if ($type == 'url')
    322                 if ($champ_verif=_request('champ_verif')) $extra_info = $champ_verif;
    323         if ($type == 'mot') {
    324                 if ($id_groupe = intval(_request('groupe_champ')))
    325                         $extra_info = $id_groupe;
    326         }
    327         if ($type == 'fichier') {
    328                 $extra_info = intval(_request('taille_champ'));
    329         }
    330         spip_query("UPDATE spip_forms_champs SET extra_info="._q($extra_info)." WHERE id_form="._q($id_form)." AND champ="._q($champ));
    331         if ($type == 'select' || $type == 'multiple') {
    332                 if (_request('ajout_choix')) {
    333                         $n = 1;
    334                         $res2 = spip_query("SELECT choix FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ));
    335                         while ($row2 = spip_fetch_array($res2)){
    336                                 $lenumero = split('_', $row2['choix']);
    337                                 $lenumero = intval(end($lenumero));
    338                                 if ($lenumero>= $n) $n=$lenumero+1;
    339                         }
    340                         $choix = $champ.'_'.$n;
    341                         $titre = _T("forms:nouveau_choix");
    342                         include_spip('inc/charset');
    343                         $titre = unicode2charset(html2unicode($titre));
    344                         spip_abstract_insert("spip_forms_champs_choix","(id_form,champ,choix,titre)","("._q($id_form).","._q($champ).","._q($choix).","._q($titre).")");
    345                 }
    346                 $res2 = spip_query("SELECT choix FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ));
    347                 while ($row2 = spip_fetch_array($res2)){
    348                         if ($titre = _request($row2['choix']))
    349                                 spip_query("UPDATE spip_forms_champs_choix SET titre="._q($titre)." WHERE id_form="._q($id_form)." AND champ="._q($row2['champ']));
    350                 }
    351         }
    352 }
    353319function Forms_nouveau_champ($id_form,$type){
    354320        $res = spip_query("SELECT champ FROM spip_forms_champs WHERE id_form="._q($id_form)." AND type="._q($type));
     
    365331function Forms_insere_nouveau_champ($id_form,$type,$titre){
    366332        $champ = Forms_nouveau_champ($id_form,$type);
    367         $cle = 0;
    368         $res = spip_query("SELECT max(cle) AS clemax FROM spip_forms_champs WHERE id_form="._q($id_form));
     333        $rang = 0;
     334        $res = spip_query("SELECT max(rang) AS rangmax FROM spip_forms_champs WHERE id_form="._q($id_form));
    369335        if ($row = spip_fetch_array($res))
    370                 $cle = $row['cle'];
    371         $cle++;
     336                $rang = $row['rang'];
     337        $rang++;
    372338        spip_abstract_insert(
    373339                'spip_forms_champs',
    374                 '(id_form,champ,cle,titre,type,obligatoire,extra_info',
    375                 '('._q($id_form).','._q($champ).','._q($cle).','._q($titre).','.q($type).",'non','')");
     340                '(id_form,champ,rang,titre,type,obligatoire,extra_info',
     341                '('._q($id_form).','._q($champ).','._q($rang).','._q($titre).','.q($type).",'non','')");
    376342
    377343        return $champ;
    378344}
    379 
    380 function forms_update(){
     345function Forms_nouveau_choix($id_form,$champ){
     346        $n = 1;
     347        $res = spip_query("SELECT choix FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ));
     348        while ($row = spip_fetch_array($res)){
     349                $lenumero = split('_', $row['choix']);
     350                $lenumero = intval(end($lenumero));
     351                if ($lenumero>= $n) $n=$lenumero+1;
     352        }
     353        $choix = $champ.'_'.$n;
     354        return $choix;
     355}
     356function Forms_insere_nouveau_choix($id_form,$champ,$titre){
     357        $choix = Forms_nouveau_choix($id_form,$champ);
     358        $rang = 0;
     359        $res = spip_query("SELECT max(rang) AS rangmax FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ));
     360        if ($row = spip_fetch_array($res))
     361                $rang = $row['rang'];
     362        $rang++;
     363        spip_abstract_insert("spip_forms_champs_choix","(id_form,champ,choix,titre,rang)","("._q($id_form).","._q($champ).","._q($choix).","._q($titre).","._q($rang).")");
     364        return $choix;
     365}
     366
     367function Forms_update_edition_champ($id_form,$champ) {
     368        $res = spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form)." AND champ="._q($champ));
     369        if ($row = spip_fetch_array($res)){
     370                $type = $row['type'];
     371                $extra_info = "";
     372                if ($type == 'url')
     373                        if ($champ_verif=_request('champ_verif')) $extra_info = $champ_verif;
     374                if ($type == 'mot') {
     375                        if ($id_groupe = intval(_request('groupe_champ')))
     376                                $extra_info = $id_groupe;
     377                }
     378                if ($type == 'fichier') {
     379                        $extra_info = intval(_request('taille_champ'));
     380                }
     381                spip_query("UPDATE spip_forms_champs SET extra_info="._q($extra_info)." WHERE id_form="._q($id_form)." AND champ="._q($champ));
     382                if ($type == 'select' || $type == 'multiple') {
     383                        if (_request('ajout_choix')) {
     384                                $titre = _T("forms:nouveau_choix");
     385                                include_spip('inc/charset');
     386                                $titre = unicode2charset(html2unicode($titre));
     387                                $choix = Forms_insere_nouveau_choix($id_form,$champ,$titre);
     388                        }
     389                        $res2 = spip_query("SELECT choix FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ));
     390                        while ($row2 = spip_fetch_array($res2)){
     391                                if ($titre = _request($row2['choix']))
     392                                        spip_query("UPDATE spip_forms_champs_choix SET titre="._q($titre)." WHERE id_form="._q($id_form)." AND champ="._q($champ)." AND choix="._q($row2['choix']));
     393                        }
     394                }
     395        }
     396}
     397
     398function Forms_update(){
    381399        $id_form = intval(_request('id_form'));
    382400        $new = _request('new');
     
    458476                                }
    459477                                spip_query("UPDATE spip_forms_champs SET titre="._q($nom_champ).", obligatoire="._q($champ_obligatoire)." WHERE id_form="._q($id_form)." AND champ="._q($champ));
    460                                 Forms_modif_edition_champ($id_form, $champ);
     478                                Forms_update_edition_champ($id_form, $champ);
    461479                                $champ_visible = $champ;
    462480                        }
    463481                }
    464482                // Cas particulier : suppression d'un choix
    465                 if ($choix = $supp_choix)
    466                         spip_query("DELETE FROM spip_forms_champs_choix WHERE choix="._q($choix)." AND id_form="._q($id_form)." AND champ="._q($champ));
     483                if ($choix = $supp_choix){
     484                        if ($row = spip_fetch_array(spip_query("SELECT champ FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND choix="._q($choix)))) {
     485                                spip_query("DELETE FROM spip_forms_champs_choix WHERE choix="._q($choix)." AND id_form="._q($id_form)." AND champ="._q($row['champ']));
     486                                $champ_visible = $row['champ'];
     487                        }
     488                }
    467489                // Suppression d'un champ
    468490                if ($champ = $supp_champ) {
     
    472494
    473495                // Monter / descendre un champ
    474                 /*if (isset($monter) && $monter > 0) {
    475                         $monter = intval($monter);
    476                         $n = $monter;
    477                         while (--$n) if ($structure[$n]) break;                 
    478                         if ($t = $structure[$n]) {
    479                                 $structure[$n] = $structure[$monter];
    480                                 $structure[$monter] = $t;
    481                                 $champ_visible = $structure[$n]['code'];
    482                         }
    483                         $modif_structure = true;
    484                 }
    485                 if (isset($descendre)) {
    486                         $descendre = intval($descendre);
    487                         $max = max(array_keys($structure));
    488                         $n = $descendre;
    489                         while (++$n < $max) if ($structure[$n]) break;
    490                         if ($t = $structure[$n]) {
    491                                 $structure[$n] = $structure[$descendre];
    492                                 $structure[$descendre] = $t;
    493                                 $champ_visible = $structure[$n]['code'];
    494                         }
    495                         $modif_structure = true;
    496                 }*/
     496                if (($champ = $monter = _request('monter')) OR ($champ = $descendre = _request('descendre'))) {
     497                        if ($row = spip_fetch_array(spip_query("SELECT rang FROM spip_forms_champs WHERE id_form="._q($id_form)." AND champ="._q($champ)))) {
     498                                $rang1 = intval($row['rang']);
     499                                if ($monter) $order = "rang<$rang1 ORDER BY rang DESC";
     500                                else $order = "rang>$rang1 ORDER BY rang";
     501                                if (($row = spip_fetch_array(spip_query("SELECT rang FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND $order LIMIT 0,1")))){
     502                                        $rang2 = intval($row['rang']);
     503                                        spip_query("UPDATE spip_forms_champs SET rang=$rang1+$rang2-rang WHERE id_form="._q($id_form)." AND rang IN ($rang1,$rang2)");
     504                                }
     505                        }
     506                }
    497507        }
    498508        return array($id_form,$champ_visible,$nouveau_champ);
     
    590600                // Modifications au structure du formulaire
    591601                //
    592                 list($id_form,$champ_visible,$nouveau_champ) = forms_update();
     602                list($id_form,$champ_visible,$nouveau_champ) = Forms_update();
    593603                $query = "SELECT * FROM spip_forms WHERE id_form=$id_form";
    594604                $result = spip_query($query);
     
    792802                // Creer / modifier des champs
    793803                //
    794                 echo Forms_zone_edition_champs($id_form, $champ_visible, $nouveau_champ);
     804                echo Forms_zone_edition_champs($id_form, $champ_visible, $nouveau_champ,$form_link);
    795805               
    796806                echo "</div>\n";
  • _plugins_/_stable_/forms/forms2/exec/forms_reponses.php

    r6542 r6570  
    178178                list($lib,$values,$urls) =      Forms_extraire_reponse($id_reponse);
    179179
    180                 foreach ($lib as $cle => $titre) {
     180                foreach ($lib as $champ => $titre) {
    181181                        $s = '';
    182                         foreach ($values[$cle] as $id=>$valeur){
     182                        foreach ($values[$champ] as $id=>$valeur){
    183183                                $valeur = typo($valeur);
    184184                                if(strlen($s)) $s .= ", ";
    185                                 if ($lien = $urls[$cle][$id])
     185                                if ($lien = $urls[$champ][$id])
    186186                                        $s .= "<a href='$lien'>$valeur</a>";
    187187                                else
  • _plugins_/_stable_/forms/forms2/exec/forms_telecharger.php

    r6542 r6570  
    2323}
    2424
    25 function csv_ligne($ligne,$delim=',') {
    26         return join($delim, array_map('csv_champ', $ligne))."\r\n";
    27 }
    28 
    29 function formater_reponse($ligne, $structure, $valeurs,$delim=',') {
    30         static $groupes, $mots;
    31 
     25function Forms_formater_ligne_csv($ligne,$delim=',') {
     26        $out = "";
     27        foreach($ligne as $val){
     28                if (is_array($val))
     29                        foreach($val as $v) $out .= csv_champ($v).$delim;
     30                else
     31                        $out .= csv_champ($val).$delim;
     32        }
     33        $out = substr($out,0,strlen($out)-strlen($delim))."\r\n";
     34        return $out;
     35}
     36
     37function Forms_formater_ligne($ligne,$format,$separateur){
     38        if (function_exists($f = "Forms_formater_ligne_$format"))
     39                return $f($ligne,$separateur);
     40        else
     41                return Forms_formater_ligne_csv($ligne,$separateur);
     42}
     43
     44function Forms_formater_reponse($ligne, $valeurs, $structure,$format,$separateur) {
    3245        // Prendre les differents champs dans l'ordre
    33         foreach ($structure as $index => $t) {
    34                 if (!$v = $valeurs[$t['code']]) {
    35                         $ligne[] = "";
     46        foreach ($structure as $champ => $t) {
     47                if (!isset($valeurs[$champ])) {
     48                        $ligne[$champ] = "";
    3649                }
    3750                else{
     51                        $v = $valeurs[$champ];
    3852                        if ($t['type']=='multiple'){
    3953                                // pour un choix multiple on cree une colonne par reponse potentielle
    40                                 $type_ext = $t['type_ext'];
    41                                 foreach($type_ext as $choix)
     54                                foreach($t['choix'] as $choix=>$titre)
    4255                                        if (in_array($choix,$v))
    43                                                 $ligne[] = strval($choix);
     56                                                $ligne[$champ][$choix] = strval($titre);
    4457                                        else
    45                                                 $ligne[] = "";
     58                                                $ligne[$champ][$choix] = "";
    4659                        }
    4760                        else
     
    4962                }
    5063        }
    51         return csv_ligne($ligne,$delim);
    52 }
     64        return Forms_formater_ligne($ligne,$format,$separateur);
     65}
     66
     67function Forms_formater_les_reponses($id_form, $format, $separateur, $head=true, $traduit=true){
     68        //
     69        // Telechargement du tableau de reponses au format CSV ou autre
     70        // le support d'un autre format ne necessite que l'implementation de la fonction
     71        // Forms_formater_ligne_xxx avec xxx le nom du format
     72        //
     73        $nb_reponses = 0;
     74        $row = spip_fetch_array(spip_query("SELECT COUNT(*) AS tot FROM spip_reponses WHERE id_form="._q($id_form)." AND statut='valide'"));
     75        if ($row)       $nb_reponses = $row['tot'];
     76
     77        if (!$id_form || !Forms_form_administrable($id_form))
     78                acces_interdit();
     79
     80        $result = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
     81        if ($row = spip_fetch_array($result)) {
     82                $titre = $row['titre'];
     83                $descriptif = $row['descriptif'];
     84                $sondage = $row['sondage'];
     85        }
     86
     87        $charset = $GLOBALS['meta']['charset'];
     88        $filename = preg_replace(',[^-_\w]+,', '_', translitteration(textebrut(typo($titre))));
     89
     90        $s = '';
     91
     92        // Preparer la table de traduction code->valeur & mise en table de la structure pour eviter des requettes
     93        // a chaque ligne
     94        $structure = array();
     95        $trans = array();
     96        $res = spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form)." ORDER BY rang");
     97        while ($row = spip_fetch_array($res)){
     98                $type = $row['type'];
     99                $champ = $row['champ'];
     100                $structure[$champ]=array('type'=>$row['type'],'titre'=>$row['titre']);
     101                if (($type=='select') OR ($type='multiple')){
     102                        $res2 = spip_query("SELECT * FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ)." ORDER BY rang");
     103                        while ($row2 = spip_fetch_array($res2))
     104                                $structure[$champ]['choix'][$row2['choix']] = trim(textebrut(typo($row2['titre'])));
     105                }
     106                else if ($type == 'mot') {
     107                        $id_groupe = intval($row['extra_info']);
     108                        $res2 = spip_query("SELECT id_mot, titre FROM spip_mots WHERE id_groupe="._q($id_groupe));
     109                        while ($row2 = spip_fetch_array($res2)) {
     110                                $structure[$champ]['choix'][$row2['id_mot']] = trim(textebrut(typo($row2['titre'])));
     111                        }
     112                }
     113        }
     114
     115        if ($head) {
     116                // Une premiere ligne avec les noms de champs
     117                $ligne = array();
     118                $ligne[] = _T("forms:date");
     119                $ligne[] = _T("forms:page");
     120                foreach ($structure as $champ => $t) {
     121                        $ligne1[] = $champ;
     122                        $ligne2[] = textebrut(typo($t['titre']));
     123                        if ($t['type']=='multiple'){
     124                                // pour un choix multiple on cree une colonne par reponse potentielle
     125                                $choix = $t['choix'];
     126                                foreach($t['choix'] as $choix=> $v){
     127                                        $ligne1[] = $choix;
     128                                        $ligne2[] = textebrut(typo($v));
     129                                }
     130                        }
     131                }
     132                $s .= Forms_formater_ligne($ligne1,$format,$separateur);
     133                if ($traduit)
     134                        $s .= Forms_formater_ligne($ligne2,$format,$separateur);
     135        }
     136
     137        // Ensuite les reponses
     138        $fichier = array();
     139        $id_reponse = 0;
     140        $result = spip_query("SELECT r.id_reponse, r.date,r.url, c.champ, c.valeur ".
     141                "FROM spip_reponses AS r LEFT JOIN spip_reponses_champs AS c USING (id_reponse) ".
     142                "WHERE id_form="._q($id_form)." AND statut='valide' AND c.id_reponse IS NOT NULL ".
     143                "ORDER BY date, r.id_reponse");
     144        while ($row = spip_fetch_array($result)) {
     145                if ($id_reponse != $row['id_reponse']) {
     146                        if ($id_reponse)
     147                                $s .= Forms_formater_reponse($ligne,$valeurs,$structure,$format,$separateur);
     148                        $id_reponse = $row['id_reponse'];
     149                        $date = $row['date'];
     150                        $ligne = array();
     151                        $ligne[] = jour($date).'/'.mois($date).'/'.annee($date);
     152                        $ligne[] = str_replace("&amp;","&",$row['url']);
     153                        $valeurs = array();
     154                }
     155                $champ = $row['champ'];
     156                if ($structure[$champ]['type'] == 'fichier') {
     157                        $fichiers[] = $row['valeur'];
     158                        $valeurs[$champ][] = 'fichiers/'.basename($row['valeur']);
     159                }
     160                else {
     161                        $v = $row['valeur'];
     162                        if ($traduit AND isset($structure[$champ][$v])) $v = $structure[$champ][$v];
     163                        else if ($traduit AND isset($structure[$champ]['choix'][$v])) $v = $structure[$champ]['choix'][$v];
     164                        $valeurs[$champ][] = $v;
     165                }
     166        }
     167
     168        // Ne pas oublier la derniere reponse
     169        if ($id_reponse)
     170                $s .= Forms_formater_reponse($ligne,$valeurs,$structure,$format,$separateur);
     171        return $s;
     172}
     173
    53174
    54175function acces_interdit() {
     
    71192
    72193        if ($id_reponse = intval($id_reponse) AND $champ) {
    73                 $result = spip_query("SELECT id_form FROM spip_reponses WHERE id_reponse="._q($id_reponse));
    74                 if ($row = spip_fetch_array($result)) {
     194                $res = spip_query("SELECT id_form FROM spip_reponses WHERE id_reponse="._q($id_reponse));
     195                if ($row = spip_fetch_array($res))
    75196                        $id_form = $row['id_form'];
    76                 }
    77                 if (!$id_form || !Forms_form_administrable($id_form)) {
     197                if (!$id_form || !Forms_form_administrable($id_form))
    78198                        acces_interdit();
    79                 }
    80                 $query = "SELECT structure FROM spip_forms WHERE id_form=$id_form";
    81                 $result = spip_query($query);
    82                 if ($row = spip_fetch_array($result)) {
    83                         $structure = unserialize($row['structure']);
    84                 }
    85                 $ok = false;
    86                 foreach ($structure as $index => $t) {
    87                         if ($t['code'] == $champ) {
    88                                 $ok = ($t['type'] == 'fichier');
    89                                 break;
    90                         }
    91                 }
    92                 if (!$ok) {
     199                $res = spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form)." AND type='fichier' AND champ="._q($champ));
     200                if (!$row = spip_fetch_array($res))
    93201                        acces_interdit();
    94                 }
    95                 $result = spip_fetch_array(spip_query("SELECT valeur FROM spip_reponses_champs WHERE id_reponse=$id_reponse AND champ='$champ'"));
    96                 $fichier = $result['valeur'];
    97                 if (is_int(strpos($fichier, "..")) || !preg_match(',^IMG/,', $fichier)) {
     202                $row = spip_fetch_array(spip_query("SELECT valeur FROM spip_reponses_champs WHERE id_reponse="._q($id_reponse)." AND champ="._q($champ)));
     203                if (!$row)      acces_interdit();
     204               
     205                $fichier = $row['valeur'];
     206                if ((strpos($fichier, "..")!==FALSE) || !preg_match(',^IMG/,', $fichier))
    98207                        acces_interdit();
    99                 }
     208
    100209                $filename = basename($fichier);
    101210                $mimetype = "";
    102211                if (preg_match(',\.([^\.]+)$,', $fichier, $r)) {
    103212                        $ext = $r[1];
    104                         $query = "SELECT * FROM spip_types_documents WHERE extension='".addslashes($ext)."'";
    105                         $result = spip_query($query);
    106                         if ($row = spip_fetch_array($result)) {
     213                        $result = spip_query("SELECT * FROM spip_types_documents WHERE extension="._q($ext));
     214                        if ($row = spip_fetch_array($result))
    107215                                $mimetype = $row['mime_type'];
    108                         }
    109216                }
    110217                if (!$mimetype) $mimetype = "application/octet-stream";
    111218                $chemin = "../".$fichier;
    112                 if (!is_file($chemin)) {
     219                if (!is_file($chemin))
    113220                        acces_interdit();
    114                 }
    115221
    116222                Header("Content-Type: $mimetype");
     
    159265                fin_cadre_relief();
    160266       
    161        
    162267                //
    163268                // Icones retour
     
    171276                fin_page();
    172277                exit;
    173        
    174         }
    175        
    176         //
    177         // Telechargement du tableau de reponses au format CSV
    178         //
    179         $id_form = intval($id_form);
    180         if ($id_form) {
    181                 $query = "SELECT COUNT(*) FROM spip_reponses WHERE id_form=$id_form AND statut='valide'";
    182                 $result = spip_query($query);
    183                 list($nb_reponses) = spip_fetch_array($result,SPIP_NUM);
    184         }
    185         else $nb_reponses = 0;
    186 
    187         if (!$id_form || !Forms_form_administrable($id_form)) {
    188                 acces_interdit();
    189         }
    190 
    191         $query = "SELECT * FROM spip_forms WHERE id_form=$id_form";
    192         $result = spip_query($query);
    193         if ($row = spip_fetch_array($result)) {
    194                 $id_form = $row['id_form'];
    195                 $titre = $row['titre'];
    196                 $descriptif = $row['descriptif'];
    197                 $sondage = $row['sondage'];
    198                 $structure = unserialize($row['structure']);
    199         }
    200 
    201         $charset = $GLOBALS['meta']['charset'];
    202         $filename = preg_replace(',[^-_\w]+,', '_', translitteration(textebrut(typo($titre))));
    203 
    204         $s = '';
    205 
    206         // Preparer la table de traduction code->valeur
    207         $trans = array();
    208         $types = array();
    209         foreach ($structure as $index => $t) {
    210                 $code = $t['code'];
    211                 $type = $t['type'];
    212                 $types[$code] = $type;
    213                 $trans[$code] = array();
    214 
    215                 if ($type == 'select' || $type == 'multiple') {
    216                         $trans[$code] = $t['type_ext'];
    217                 }
    218                 else if ($type == 'mot') {
    219                         $id_groupe = intval($t['type_ext']['id_groupe']);
    220                         $query = "SELECT id_mot, titre FROM spip_mots WHERE id_groupe=$id_groupe";
    221                         $result = spip_query($query);
    222                         while ($row = spip_fetch_array($result)) {
    223                                 $id_mot = $row['id_mot'];
    224                                 $titre = $row['titre'];
    225                                 $trans[$code][$id_mot] = trim(textebrut(typo($titre)));
    226                         }
    227                 }
    228         }
    229 
    230         // Une premiere ligne avec les noms de champs
    231         $ligne = array();
    232         $ligne[] = _T("forms:date");
    233         $ligne[] = _T("forms:page");
    234         foreach ($structure as $index => $t) {
    235                 $ligne[] = textebrut(typo($t['nom']));
    236                 if ($t['type']=='multiple'){
    237                         // pour un choix multiple on cree une colonne par reponse potentielle
    238                         $type_ext = $t['type_ext'];
    239                         array_pop($type_ext);
    240                         foreach($type_ext as $choix)
    241                                 $ligne[] = "";
    242                 }
    243         }
    244         $s .= csv_ligne($ligne,$delim);
    245 
    246 
    247         // Ensuite les reponses
    248         $fichier = array();
    249         $id_reponse = 0;
    250         $query = "SELECT r.id_reponse, r.date,r.url, c.champ, c.valeur ".
    251                 "FROM spip_reponses AS r LEFT JOIN spip_reponses_champs AS c USING (id_reponse) ".
    252                 "WHERE id_form=$id_form AND statut='valide' AND c.id_reponse IS NOT NULL ".
    253                 "ORDER BY date, r.id_reponse";
    254         $result = spip_query($query);
    255         while ($row = spip_fetch_array($result)) {
    256                 if ($id_reponse != $row['id_reponse']) {
    257                         if ($id_reponse) {
    258                                 $s .= formater_reponse($ligne, $structure, $valeurs,$delim);
    259                         }
    260                         $id_reponse = $row['id_reponse'];
    261                         $ligne = array();
    262                         $valeurs = array();
    263                         $date = $row['date'];
    264                         $ligne[] = jour($date).'/'.mois($date).'/'.annee($date);
    265                         $ligne[] = str_replace("&amp;","&",$row['url']);
    266                 }
    267                 $champ = $row['champ'];
    268                 if ($types[$champ] == 'fichier') {
    269                         $fichiers[] = $row['valeur'];
    270                         //$valeurs[$champ][] = $GLOBALS['meta']['adresse_site']."/ecrire/forms_telecharger.php?id_reponse=$id_reponse&champ=$champ";
    271                         $valeurs[$champ][] = 'fichiers/'.basename($row['valeur']);
    272                 }
    273                 else if ($v = $trans[$champ][$row['valeur']])
    274                         $valeurs[$champ][] = $v;
    275                 else
    276                         $valeurs[$champ][] = $row['valeur'];
    277         }
    278 
    279         // Ne pas oublier la derniere reponse
    280         if ($id_reponse) {
    281                 $s .= formater_reponse($ligne, $structure, $valeurs,$delim);
    282         }
     278        }
     279
     280        $out = Forms_formater_les_reponses($id_form, "csv", $delim, $head=true, $traduit=true);
    283281
    284282        // Excel ?
     
    289287                # Excel n'accepte pas l'utf-8 ni les entites html... on fait quoi?
    290288                include_spip('inc/charsets');
    291                 $s = unicode2charset(charset2unicode($s), 'iso-8859-1');
     289                $out = unicode2charset(charset2unicode($s), 'iso-8859-1');
    292290                $charset = 'iso-8859-1';
    293291        }
     
    298296                //Header("Content-Type: text/plain; charset=$charset");
    299297                Header("Content-Length: ".strlen($s));
    300                 echo $s;
    301                 exit;
    302         }
    303 
    304         //
    305         // S'il y a des fichiers joints, creer un ZIP
    306         //
    307         include_spip("inc/pclzip");
    308         include_spip("inc/session");
    309 
    310         $zip = "data/form".$id_form."_".rand().".zip";
    311         $csv = "data/$filename.$extension";
    312 
    313         $f = fopen($csv, "wb");
    314         fwrite($f, $s);
    315         fclose($f);
    316 
    317         $chemin = "../";
    318         $fichiers = $chemin.join(",$chemin", $fichiers);
    319 
    320         $archive = new PclZip($zip);
    321         $archive->add($csv, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, $filename);
    322         $archive->add($fichiers, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, $filename.'/fichiers');
    323 
    324         Header("Content-Type: application/zip");
    325         Header("Content-Disposition: attachment; filename=$filename.zip");
    326         Header("Content-Length: ".filesize($zip));
    327         readfile($zip);
    328 
    329         @unlink($csv);
    330         @unlink($zip);
    331 
    332         exit;
     298                echo $out;
     299        }
     300        else {
     301                //
     302                // S'il y a des fichiers joints, creer un ZIP
     303                //
     304                include_spip("inc/pclzip");
     305                include_spip("inc/session");
     306       
     307                $zip = _DIR_TMP."form".$id_form."_".rand().".zip";
     308                $csv = _DIR_TMP."$filename.$extension";
     309       
     310                $f = fopen($csv, "wb");
     311                fwrite($f, $out);
     312                fclose($f);
     313       
     314                $chemin = _DIR_RACINE;
     315                $fichiers = $chemin.join(",$chemin", $fichiers);
     316       
     317                $archive = new PclZip($zip);
     318                $archive->add($csv, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, $filename);
     319                $archive->add($fichiers, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, $filename.'/fichiers');
     320       
     321                Header("Content-Type: application/zip");
     322                Header("Content-Disposition: attachment; filename=$filename.zip");
     323                Header("Content-Length: ".filesize($zip));
     324                readfile($zip);
     325       
     326                @unlink($csv);
     327                @unlink($zip);
     328        }
    333329}
    334330?>
  • _plugins_/_stable_/forms/forms2/formulaires/forms_champ_multiple.html

    r5418 r6570  
    11<BOUCLE_f(FORMS){id_form}>
    2 <BOUCLE_champs(FORMS_CHAMPS){id_form}{cle}>
     2<BOUCLE_champs(FORMS_CHAMPS){id_form}{champ}>
    33<B_choix>
    4         <BOUCLE_choix(FORMS_CHAMPS_CHOIX){id_form}{cle}{par num titre,titre}>
     4        <BOUCLE_choix(FORMS_CHAMPS_CHOIX){id_form}{champ}{par rang}>
    55        <span class='spip_form_choix_multiple'>
    66        &nbsp; <input type='checkbox' name='#CHAMP[]' id='#CHOIX' value='#CHOIX'
  • _plugins_/_stable_/forms/forms2/formulaires/forms_champ_select.html

    r5576 r6570  
    11<BOUCLE_f(FORMS){id_form}>
    2 <BOUCLE_champs(FORMS_CHAMPS){id_form}{cle}>
     2<BOUCLE_champs(FORMS_CHAMPS){id_form}{champ}>
    33<B_choix>
    44[(#TOTAL_BOUCLE|>{6}|?{' ',''})
     
    66        class='[(#OBLIGATOIRE|=={oui}|?{fondl,fondo})]'>
    77        <option value=''></option>]
    8         <BOUCLE_choix(FORMS_CHAMPS_CHOIX){id_form}{cle}{par titre}>
     8        <BOUCLE_choix(FORMS_CHAMPS_CHOIX){id_form}{champ}{par rang}>
    99[(#TOTAL_BOUCLE|>{6}|?{' ',''})
    1010        <option value='#CHOIX' [(#CHOIX|=={[(#ENV**{valeur}|forms_valeur{#CHAMP})]}|?{'selected="selected"',''})]>
  • _plugins_/_stable_/forms/forms2/formulaires/forms_structure.html

    r6546 r6570  
    11<BOUCLE_form(FORMS){id_form=#ENV{id_form}}>
    22#SET{need_fieldset,1}
    3 <BOUCLE_champs(FORMS_CHAMPS){id_form}>
     3<BOUCLE_champs(FORMS_CHAMPS){id_form}{par rang}>
    44[(#ENV{affiche_sondage}) #RESULTATS_SONDAGE]
    55[(#ENV{affiche_sondage}|?{'',' '})
     
    5151                                ]
    5252                                [(#TYPE|=={select}|?{' ',''})
    53                                         <INCLURE{fond=formulaires/forms_champ_select}{id_form}{cle}{valeur=#ENV**{valeurs}}>
     53                                        <INCLURE{fond=formulaires/forms_champ_select}{id_form}{champ}{valeur=#ENV**{valeurs}}>
    5454                                ]
    5555                                [(#TYPE|=={multiple}|?{' ',''})
    56                                         <INCLURE{fond=formulaires/forms_champ_multiple}{id_form}{cle}{valeur=#ENV**{valeurs}}>
     56                                        <INCLURE{fond=formulaires/forms_champ_multiple}{id_form}{champ}{valeur=#ENV**{valeurs}}>
    5757                                ]
    5858                                [(#TYPE|=={mot}|?{' ',''})
  • _plugins_/_stable_/forms/forms2/inc/forms.php

    r6565 r6570  
    105105        function Forms_extraire_reponse($id_reponse){
    106106                // Lire les valeurs entrees
    107                 $result = spip_query("SELECT * FROM spip_reponses_champs AS r JOIN spip_forms_champs AS ch ON ch.champ=r.champ WHERE r.id_reponse="._q($id_reponse)." ORDER BY ch.cle");
     107                $result = spip_query("SELECT * FROM spip_reponses_champs AS r JOIN spip_forms_champs AS ch ON ch.champ=r.champ WHERE r.id_reponse="._q($id_reponse)." ORDER BY ch.rang");
    108108                $valeurs = array();
    109109                $retour = urlencode(self());
     
    112112                $url = array();
    113113                while ($row = spip_fetch_array($result)) {
    114                         $cle = $row['cle'];
    115                         $libelles[$cle]=$row['titre'];
     114                        $rang = $row['rang'];
    116115                        $champ = $row['champ'];
     116                        $libelles[$champ]=$row['titre'];
    117117                        $type = $row['type'];
    118118                        if ($type == 'fichier') {
    119                                 $values[$cle][] = $row['valeur'];
    120                                 $url[$cle][] = generer_url_ecrire("forms_telecharger","id_reponse=$id_reponse&champ=$champ&retour=$retour");
     119                                $values[$champ][] = $row['valeur'];
     120                                $url[$champ][] = generer_url_ecrire("forms_telecharger","id_reponse=$id_reponse&champ=$champ&retour=$retour");
    121121                        }
    122122                        else if (in_array($type,array('select','multiple'))) {
    123123                                if ($row3=spip_fetch_array(spip_query("SELECT * FROM spip_forms_champs_choix WHERE champ=$champ AND choix="._q($row['valeur']))))
    124                                         $values[$cle][]=$row3['titre'];
     124                                        $values[$champ][]=$row3['titre'];
    125125                                else
    126                                         $values[$cle][]= $row['valeur'];
    127                                 $url[$cle][] = '';
     126                                        $values[$champ][]= $row['valeur'];
     127                                $url[$champ][] = '';
    128128                        }
    129129                        else if ($type == 'mot') {
     
    131131                                $id_mot = intval($row['valeur']);
    132132                                if ($row3 = spip_fetch_array(spip_query("SELECT id_mot, titre FROM spip_mots WHERE id_groupe=$id_groupe AND id_mot="._q($id_mot)))){
    133                                         $values[$cle][]=$row3['titre'];
    134                                         $url[$cle][]= generer_url_ecrire("mots_edit","id_mot=$id_mot");
     133                                        $values[$champ][]=$row3['titre'];
     134                                        $url[$champ][]= generer_url_ecrire("mots_edit","id_mot=$id_mot");
    135135                                }
    136136                                else {
    137                                         $values[$cle][]= $row['valeur'];
    138                                         $url[$cle][] = '';
     137                                        $values[$champ][]= $row['valeur'];
     138                                        $url[$champ][] = '';
    139139                                }
    140140                        }
    141141                        else {
    142                                 $values[$cle][] = $row['valeur'];
    143                                 $url[$cle][] = '';
     142                                $values[$champ][] = $row['valeur'];
     143                                $url[$champ][] = '';
    144144                        }
    145145                }
     
    288288                return ($s = $noms[$type]) ? $s : $type;
    289289        }
     290       
     291        function Forms_valide_reponse_post($id_form){
     292                $erreur = '';
     293                $res = spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form));
     294                while($row = spip_fetch_array($res)){
     295                        $champ = $row['champ'];
     296                        $type = $row['type'];
     297                        $val = _request($champ);
     298                        if (!$val || ($type == 'fichier' && !$_FILES[$champ]['tmp_name'])) {
     299                                if ($row['obligatoire'] == 'oui')
     300                                        $erreur[$champ] = _T("forms:champ_necessaire");
     301                                continue;
     302                        }
     303                        // Verifier la conformite des donnees entrees
     304                        if ($type == 'email') {
     305                                if (!strpos($val, '@') || !email_valide($val)) {
     306                                        $erreur[$champ] = _T("forms:adresse_invalide");
     307                                }
     308                        }
     309                        if ($type == 'url') {
     310                                if ($row['extra_info'] == 'oui') {
     311                                        include_spip("inc/sites");
     312                                        if (!recuperer_page($val)) {
     313                                                $erreur[$champ] = _T("forms:site_introuvable");
     314                                        }
     315                                }
     316                        }
     317                        if ($type == 'fichier') {
     318                                if (!$taille = $_FILES[$champ]['size']) {
     319                                        $erreur[$champ] = _T("forms:echec_upload");
     320                                }
     321                                else if ($row['extra_info'] && $taille > ($row['extra_info'] * 1024)) {
     322                                        $erreur[$champ] = _T("forms:fichier_trop_gros");
     323                                }
     324                                else if (!Forms_type_fichier_autorise($_FILES[$champ]['name'])) {
     325                                        $erreur[$champ] = _T("fichier_type_interdit");
     326                                }
     327                                if ($erreur[$champ]) {
     328                                        supprimer_fichier($_FILES[$champ]['tmp_name']);
     329                                }
     330                        }
     331                }
     332                return $erreur;
     333        }
     334        function Forms_insertions_reponse_post($id_form,$id_reponse,&$erreur,&$ok){
     335                $inserts = array();
     336                $res = spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form));
     337                while($row = spip_fetch_array($row)){
     338                        $champ = $row['champ'];
     339                        $type = $row['type'];
     340                        $val = _request($champ);
     341       
     342                        if ($type == 'fichier') {
     343                                if (($val = $_FILES[$champ]) AND ($val['tmp_name'])) {
     344                                        // Fichier telecharge : deplacer dans IMG, stocker le chemin dans la base
     345                                        $dir = sous_repertoire(_DIR_IMG, "protege");
     346                                        $dir = sous_repertoire($dir, "form".$id_form);
     347                                        $source = $val['tmp_name'];
     348                                        $dest = $dir.Forms_nommer_fichier_form($val['name'], $dir);
     349                                        if (!Forms_deplacer_fichier_form($source, $dest)) {
     350                                                $erreur[$champ] = _T("forms:probleme_technique_upload");
     351                                                $ok = false;
     352                                        }
     353                                        else {
     354                                                $inserts[] = "("._q($id_reponse).","._q($champ).","._q($dest).")";
     355                                        }
     356                                }
     357                        }
     358                        else if ($val) {
     359                                // Choix multiples : enregistrer chaque valeur separement
     360                                if (is_array($val))
     361                                        foreach ($val as $v)
     362                                                $inserts[] = "("._q($id_reponse).","._q($champ).","._q($v).")";
     363                                else
     364                                        $inserts[] = "("._q($id_reponse).","._q($champ).","._q($val).")";
     365                        }
     366                }
     367                return $inserts;
     368        }
     369
     370        function Forms_enregistrer_reponse_formulaire($id_form, &$erreur, &$reponse, $script_validation = 'valide_form', $script_args='') {
     371                $r = '';
     372       
     373                $query = "SELECT * FROM spip_forms WHERE id_form=$id_form";
     374                $result = spip_query($query);
     375                if (!$row = spip_fetch_array($result)) {
     376                        $erreur['@'] = _T("forms:probleme_technique");
     377                }
     378                // Extraction des donnees pour l'envoi des mails eventuels
     379                //   accuse de reception et forward webmaster
     380                $email = unserialize($row['email']);
     381                $champconfirm = $row['champconfirm'];
     382                $mailconfirm = '';
     383
     384                $erreur = Forms_valide_reponse_post($id_form);
     385       
     386                // Si tout est bon, enregistrer la reponse
     387                if (!$erreur) {
     388                        global $auteur_session;
     389                        $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
     390                        $ip = addslashes($GLOBALS['REMOTE_ADDR']);
     391                        $url = parametre_url(self(),'id_form','');
     392                        $ok = true;
     393                       
     394                        if ($row['sondage'] != 'non') {
     395                                $statut = 'attente';
     396                                $cookie = addslashes($GLOBALS['cookie_form']);
     397                                $nom_cookie = Forms_nom_cookie_form($id_form);
     398                        }
     399                        else {
     400                                $statut = 'valide';
     401                                $cookie = '';
     402                        }
     403                        // D'abord creer la reponse dans la base de donnees
     404                        if ($ok) {
     405                                spip_query("INSERT INTO spip_reponses (id_form, id_auteur, date, ip, url, statut, cookie) ".
     406                                        "VALUES ($id_form, '$id_auteur', NOW(), '$ip', "._q($url).", '$statut', '$cookie')");
     407                                $id_reponse = spip_insert_id();
     408                                if (!$id_reponse) {
     409                                        $erreur['@'] = _T("forms:probleme_technique");
     410                                        $ok = false;
     411                                }
     412                        }
     413                        // Puis enregistrer les differents champs
     414                        if ($ok) {
     415                                $inserts = Forms_insertions_reponse_post($id_form,$id_reponse,$erreur,$ok);
     416                                if (!count($inserts)) {
     417                                        // Reponse vide => annuler
     418                                        $erreur['@'] = _T("forms:remplir_un_champ");
     419                                        spip_query("DELETE FROM spip_reponses WHERE id_reponse="._q($id_reponse));
     420                                        $ok = false;
     421                                }
     422                        }
     423                        if ($ok) {
     424                                spip_query("INSERT INTO spip_reponses_champs (id_reponse, champ, valeur) ".
     425                                        "VALUES ".join(',', $inserts));
     426                                if ($row['sondage'] != 'non') {
     427                                        $hash = calculer_action_auteur("forms valide reponse sondage $id_reponse");
     428                                        $url = generer_url_public($script_validation,"verif_cookie=oui&id_reponse=$id_reponse&hash=$hash".($script_args?"&$script_args":""));
     429                                        $r = $url;
     430                                }
     431                                if ($champconfirm)
     432                                        if ($row=spip_fetch_array(spip_query("SELECT * FROM spip_reponses_champs WHERE id_reponse="._q($id_reponse)." AND champ="._q($champconfirm))))
     433                                                $mailconfirm = $row['valeur'];
     434                                if (($email) || ($mailconfirm)) {
     435                                        $hash = calculer_action_auteur("forms confirme reponse $id_reponse");
     436                                        $url = generer_url_public($script_validation,"mel_confirm=oui&id_reponse=$id_reponse&hash=$hash".($script_args?"&$script_args":""));
     437                                        $r = $url;
     438                                }
     439                        }
     440                }
     441       
     442                return $r;
     443        }
    290444
    291445        function Forms_generer_mail_reponse_formulaire($id_form, $id_reponse, $env){
     
    361515        }
    362516
    363         function Forms_enregistrer_reponse_formulaire($id_form, &$erreur, &$reponse, $script_validation = 'valide_form', $script_args='') {
    364                 $erreur = '';
    365                 $reponse = '';
    366                 $r = '';
    367        
    368                 $query = "SELECT * FROM spip_forms WHERE id_form=$id_form";
    369                 $result = spip_query($query);
    370                 if (!$row = spip_fetch_array($result)) {
    371                         $erreur['@'] = _T("forms:probleme_technique");
    372                 }
    373                 // Extraction des donnees pour l'envoi des mails eventuels
    374                 //   accuse de reception et forward webmaster
    375                 $email = unserialize($row['email']);
    376                 $champconfirm = $row['champconfirm'];
    377                 $mailconfirm = '';
    378        
    379                 $res2 = spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form));
    380                 while($row2 = spip_fetch_array($res2)){
    381                         $code = $row2['champ'];
    382                         $type = $row2['type'];
    383                         $val = _request($code);
    384                         if (!$val || ($type == 'fichier' && !$_FILES[$code]['tmp_name'])) {
    385                                 if ($row2['obligatoire'] == 'oui')
    386                                         $erreur[$code] = _T("forms:champ_necessaire");
    387                                 continue;
    388                         }
    389                         // Verifier la conformite des donnees entrees
    390                         if ($type == 'email') {
    391                                 if (!strpos($val, '@') || !email_valide($val)) {
    392                                         $erreur[$code] = _T("forms:adresse_invalide");
    393                                 }
    394                         }
    395                         if ($type == 'url') {
    396                                 if ($row2['extra_info'] == 'oui') {
    397                                         include_spip("inc/sites");
    398                                         if (!recuperer_page($val)) {
    399                                                 $erreur[$code] = _T("forms:site_introuvable");
    400                                         }
    401                                 }
    402                         }
    403                         if ($type == 'fichier') {
    404                                 if (!$taille = $_FILES[$code]['size']) {
    405                                         $erreur[$code] = _T("forms:echec_upload");
    406                                 }
    407                                 else if ($row2['extra_info'] && $taille > ($row2['extra_info'] * 1024)) {
    408                                         $erreur[$code] = _T("forms:fichier_trop_gros");
    409                                 }
    410                                 else if (!Forms_type_fichier_autorise($_FILES[$code]['name'])) {
    411                                         $erreur[$code] = _T("fichier_type_interdit");
    412                                 }
    413                                 if ($erreur[$code]) {
    414                                         supprimer_fichier($_FILES[$code]['tmp_name']);
    415                                 }
    416                         }
    417                 }
    418        
    419                 // Si tout est bon, enregistrer la reponse
    420                 if (!$erreur) {
    421                         global $auteur_session;
    422                         $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
    423                         $ip = addslashes($GLOBALS['REMOTE_ADDR']);
    424                         $url = parametre_url(self(),'id_form','');
    425                         $ok = true;
    426                        
    427                         if ($row['sondage'] != 'non') {
    428                                 $statut = 'attente';
    429                                 $cookie = addslashes($GLOBALS['cookie_form']);
    430                                 $nom_cookie = Forms_nom_cookie_form($id_form);
    431                         }
    432                         else {
    433                                 $statut = 'valide';
    434                                 $cookie = '';
    435                         }
    436                         // D'abord creer la reponse dans la base de donnees
    437                         if ($ok) {
    438                                 $query = "INSERT INTO spip_reponses (id_form, id_auteur, date, ip, url, statut, cookie) ".
    439                                         "VALUES ($id_form, '$id_auteur', NOW(), '$ip', "._q($url).", '$statut', '$cookie')";
    440                                 spip_query($query);
    441                                 $id_reponse = spip_insert_id();
    442                                 if (!$id_reponse) {
    443                                         $erreur['@'] = _T("forms:probleme_technique");
    444                                         $ok = false;
    445                                 }
    446                         }
    447                         // Puis enregistrer les differents champs
    448                         if ($ok) {
    449                                 $inserts = array();
    450                                 foreach ($structure as $index => $t) {
    451                                         $type = $t['type'];
    452                                         $code = $t['code'];
    453        
    454                                         if ($type == 'fichier') {
    455                                                 if (!$val = $_FILES[$code] OR !$val['tmp_name']) continue;
    456                                                 // Fichier telecharge : deplacer dans IMG, stocker le chemin dans la base
    457                                                 $dir = sous_repertoire(_DIR_IMG, "protege");
    458                                                 $dir = sous_repertoire($dir, "form".$id_form);
    459                                                 $source = $val['tmp_name'];
    460                                                 $dest = $dir.Forms_nommer_fichier_form($val['name'], $dir);
    461                                                 if (!Forms_deplacer_fichier_form($source, $dest)) {
    462                                                         $erreur[$code] = _T("forms:probleme_technique_upload");
    463                                                         $ok = false;
    464                                                 }
    465                                                 else {
    466                                                         $inserts[] = "($id_reponse, '$code', '".addslashes($dest)."')";
    467                                                 }
    468                                         }
    469                                         else {
    470                                                 if (!$val = $GLOBALS[$code]) continue;
    471                                                 // Choix multiples : enregistrer chaque valeur separement
    472                                                 else if (is_array($val)) {
    473                                                         foreach ($val as $v) {
    474                                                                 $inserts[] = "($id_reponse, '$code', '".addslashes($v)."')";
    475                                                         }
    476                                                 }
    477                                                 else {
    478                                                         $inserts[] = "($id_reponse, '$code', '".addslashes($val)."')";
    479                                                         if ($code == $champconfirm)
    480                                                                 $mailconfirm = $val;
    481                                                 }
    482                                         }
    483                                 }
    484        
    485                                 if (!count($inserts)) {
    486                                         // Reponse vide => annuler
    487                                         $erreur['@'] = _T("forms:remplir_un_champ");
    488                                         $query = "DELETE FROM spip_reponses WHERE id_reponse=$id_reponse";
    489                                         spip_query($query);
    490                                         $ok = false;
    491                                 }
    492                         }
    493                         if ($ok) {
    494                                 $query = "INSERT INTO spip_reponses_champs (id_reponse, champ, valeur) ".
    495                                         "VALUES ".join(',', $inserts);
    496                                 spip_query($query);
    497                                 if ($row['sondage'] != 'non') {
    498                                         $hash = calculer_action_auteur("forms valide reponse sondage $id_reponse");
    499                                         $url = generer_url_public($script_validation,"verif_cookie=oui&id_reponse=$id_reponse&hash=$hash".($script_args?"&$script_args":""));
    500                                         $r = $url;
    501                                 }
    502                                 else if (($email) || ($mailconfirm)) {
    503                                         $hash = calculer_action_auteur("forms confirme reponse $id_reponse");
    504                                         $url = generer_url_public($script_validation,"mel_confirm=oui&id_reponse=$id_reponse&hash=$hash".($script_args?"&$script_args":""));
    505                                         $r = $url;
    506        
    507                                         $reponse = $mailconfirm;
    508                                 }
    509                         }
    510                 }
    511        
    512                 return $r;
    513         }
    514 
    515517?>
Note: See TracChangeset for help on using the changeset viewer.