Changeset 6616 in spip-zone


Ignore:
Timestamp:
Oct 25, 2006, 2:47:53 PM (13 years ago)
Author:
cedric@…
Message:

suite de la structuration du code, debugage, import/export de formulaires au format xml, possibilite de creer ses types de champs personalises avec etc/forms_types_champs.xml (localisation des codes postaux, numero de telephone ...)
Mieux encore a venir ...

Location:
_plugins_/_stable_/forms/forms2
Files:
8 added
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/forms/forms2/base/forms_upgrade.php

    r6599 r6616  
    2828                        $obligatoire = $val['obligatoire'];
    2929                        $type_ext = $val['type_ext'];
    30                         $extra_info = isset($type_ext['id_groupe']) ? $type_ext['id_groupe']:0;
     30                        $extra_info = isset($type_ext['id_groupe']) ? $type_ext['id_groupe']:'';
    3131                        $extra_info = isset($type_ext['taille']) ? $type_ext['taille']:$extra_info;
    3232                        $obligatoire = $val['obligatoire'];
  • _plugins_/_stable_/forms/forms2/exec/forms_edit.php

    r6599 r6616  
    1313
    1414include_spip('inc/forms');
     15include_spip('inc/forms_edit');
     16include_spip('inc/forms_type_champs'); // gestion des types de champs
    1517
    1618function debut_block_route($id,$visible){
     
    257259                $out .= "<strong id='titre_nom_$champ'>".typo($row['titre'])."</strong>";
    258260                $out .= "<br /></div>";
    259                 $out .= "(".Forms_nom_type_champ($row['type']).")\n";
     261                $out .= "(".typo(Forms_nom_type_champ($row['type'])).")\n";
    260262                $out .= $visible ? debut_block_visible("champ_$champ") : debut_block_invisible("champ_$champ");
    261263
     
    329331        $out .= "<select name='ajout_champ' value='' class='fondo'>\n";
    330332        foreach ($types as $type) {
    331                 $out .= "<option value='$type'>".Forms_nom_type_champ($type)."</option>\n";
     333                $out .= "<option value='$type'>".typo(Forms_nom_type_champ($type))."</option>\n";
    332334        }
    333335        $out .= "</select>\n";
     
    338340}
    339341
    340 function Forms_nouveau_champ($id_form,$type){
    341         $res = spip_query("SELECT champ FROM spip_forms_champs WHERE id_form="._q($id_form)." AND type="._q($type));
    342         $n = 1;
    343         $champ = $type.'_'.strval($n);
    344         while ($row = spip_fetch_array($res)){
    345                 $lenumero = split('_', $row['champ'] );
    346                 $lenumero = intval(end($lenumero));
    347                 if ($lenumero>= $n) $n=$lenumero+1;
    348         }
    349         $champ = $type.'_'.strval($n);
    350         return $champ;
    351 }
    352 function Forms_insere_nouveau_champ($id_form,$type,$titre){
    353         $champ = Forms_nouveau_champ($id_form,$type);
    354         $rang = 0;
    355         $res = spip_query("SELECT max(rang) AS rangmax FROM spip_forms_champs WHERE id_form="._q($id_form));
    356         if ($row = spip_fetch_array($res))
    357                 $rang = $row['rang'];
    358         $rang++;
    359         spip_abstract_insert(
    360                 'spip_forms_champs',
    361                 '(id_form,champ,rang,titre,type,obligatoire,extra_info',
    362                 '('._q($id_form).','._q($champ).','._q($rang).','._q($titre).','.q($type).",'non','')");
    363 
    364         return $champ;
    365 }
    366 function Forms_nouveau_choix($id_form,$champ){
    367         $n = 1;
    368         $res = spip_query("SELECT choix FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ));
    369         while ($row = spip_fetch_array($res)){
    370                 $lenumero = split('_', $row['choix']);
    371                 $lenumero = intval(end($lenumero));
    372                 if ($lenumero>= $n) $n=$lenumero+1;
    373         }
    374         $choix = $champ.'_'.$n;
    375         return $choix;
    376 }
    377 function Forms_insere_nouveau_choix($id_form,$champ,$titre){
    378         $choix = Forms_nouveau_choix($id_form,$champ);
    379         $rang = 0;
    380         $res = spip_query("SELECT max(rang) AS rangmax FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ));
    381         if ($row = spip_fetch_array($res))
    382                 $rang = $row['rang'];
    383         $rang++;
    384         spip_abstract_insert("spip_forms_champs_choix","(id_form,champ,choix,titre,rang)","("._q($id_form).","._q($champ).","._q($choix).","._q($titre).","._q($rang).")");
    385         return $choix;
    386 }
    387342
    388343function Forms_update_edition_champ($id_form,$champ) {
     
    420375        $retour = _request('retour');
    421376        $new = _request('new');
    422         $id_form = intval(_request('id_form'));
     377        $id_form = intval(_request('supp_form')?_request('supp_form'):_request('id_form'));
    423378        $titre = _request('titre');
    424379        $descriptif = _request('descriptif');
     
    586541       
    587542        Forms_install();
     543        if ($supp_form)
     544                $id_form = $supp_form;
    588545
    589546        if ($retour)
     
    674631
    675632        if ($supp_form && $supp_rejet==NULL)
    676                 echo Forms_formulaire_confirm_suppression($id_form,$nb_reponses,$form_link,$retour);
     633                echo Forms_formulaire_confirme_suppression($id_form,$nb_reponses,$form_link,$retour);
    677634
    678635        //
  • _plugins_/_stable_/forms/forms2/exec/forms_tous.html

    r6599 r6616  
    1010<table width='100%' cellpadding='5' cellspacing='0' border='0'>
    1111[<tr style='background-color: #dddddd;'>
    12 <td class="arial1" style='border-bottom: 1px solid #444444;' colspan="10">
     12<td class="arial1" style='border-bottom: 1px solid #444444;' colspan="11">
    1313<div class='pagination'>(#PAGINATION)</div>
    1414</td>
     
    1919#SET{lien_affiche,(#URL_ECRIRE{forms_reponses,id_form=#ID_FORM}|parametre_url{retour,#URL_ECRIRE{forms_tous}})}
    2020#SET{lien_duplique,#SELF|parametre_url{duplique_form,#ID_FORM}}
     21#SET{lien_exporte,#URL_ECRIRE{forms_exporter,id_form=#ID_FORM}}
    2122#SET{lien_vider,'#'}
    2223#SET{lien_supprimer,(#URL_ECRIRE{forms_edit,supp_form=#ID_FORM}|parametre_url{retour,#URL_ECRIRE{forms_tous}})}
     
    3132<td class="arial1">&nbsp;
    3233</td>
    33 <td class="arial1">[(#EVAL{ _T("forms:nombre_reponses",array("nombre"=>[(#GET{reponses})])) })]
    34 </td>
    3534<td class="arial1"><a href='#GET{lien_affiche}' title='<:forms:afficher:>'><img src='#EVAL{_DIR_PLUGIN_FORMS}img_pack/b_browse.png' width='16' height='16' alt='<:forms:afficher:>' /></a></td>
     35<td class="arial1">[(#EVAL{ _T("forms:nombre_reponses",array("nombre"=>[(#GET{reponses})])) })]</td>
    3636<td class="arial1"><a href='#GET{lien_edite}' title='<:forms:editer:>'><img src='#EVAL{_DIR_PLUGIN_FORMS}img_pack/b_props.png' width='16' height='16' alt='<:forms:editer:>' /></a></td>
    3737<td class="arial1"><a href='#GET{lien_duplique}' title='<:forms:dupliquer:>'><img src='#EVAL{_DIR_PLUGIN_FORMS}img_pack/b_insrow.png' width='16' height='16' alt='<:forms:dupliquer:>' /></a></td>
     38<td class="arial1"><a href='#GET{lien_exporte}' title='<:forms:exporter:>'><img src='#EVAL{_DIR_PLUGIN_FORMS}img_pack/b_export.png' width='16' height='16' alt='<:forms:exporter:>' /></a></td>
     39<td>&nbsp;</td>
    3840<td class="arial1"><a href='#GET{lien_vider}' title='<:forms:vider:>'><img src='#EVAL{_DIR_PLUGIN_FORMS}img_pack/b_empty.png' width='16' height='16' alt='<:forms:vider:>' /></a></td>
    3941<td class="arial1"><a href='#GET{lien_supprimer}' title='<:forms:supprimer:>'><img src='#EVAL{_DIR_PLUGIN_FORMS}img_pack/b_drop.png' width='16' height='16' alt='<:forms:supprimer:>' /></a></td>
    40 <td>&nbsp;
    41 </td>
    4242</tr>
    4343</BOUCLE_forms>
  • _plugins_/_stable_/forms/forms2/exec/forms_tous.php

    r6540 r6616  
    1515
    1616function exec_forms_tous(){
    17         //global $clean_link;
     17        global $spip_lang_right;
    1818  include_spip("inc/presentation");
    1919        include_spip('public/assembler');
     
    2626        debut_boite_info();
    2727        echo _T("forms:boite_info");
     28        echo "<p>";
     29        $link = generer_action_auteur('forms_importe',"form",generer_url_ecrire('forms_tous'));
     30        echo "<form action='$link' method='POST' enctype='multipart/form-data'>";
     31        echo form_hidden($link);
     32        echo "<strong><label for='file_name'>"._T("forms:importer_form")."</label></strong> ";
     33        echo "<br />";
     34        echo "<input type='file' name='fichier_xml' id='file_name' class='formo'>";
     35        echo "<div style='text-align:$spip_lang_right'>";
     36        echo "<input type='submit' name='Valider' value='"._T('bouton_valider')."' class='fondo'>";
     37        echo "</div>";
     38        echo "</form></p>\n";
     39       
    2840        fin_boite_info();
    2941       
  • _plugins_/_stable_/forms/forms2/formulaires/forms_structure.html

    r6570 r6616  
    1010                        [(#TYPE|=={textestatique}|?{#TITRE,''})]
    1111                        [(#TYPE|=={textestatique}|?{'',' '})
     12                                #SET{afficher,1}
    1213                                <span class='spip_form_label'>
    1314                                        [(#TYPE|match{^(select|multiple|mot)}|?{'',' '})<label for="#CHAMP">#TITRE</label>]
     
    1718                                        [(#TITRE|strlen|?{':'})]
    1819                                </span>
    19                                 [(#TYPE|=={email}|?{' ',''})
     20                                [(#TYPE|=={email}|?{' ',''}) #SET{afficher,0}
    2021                                        <span class='spip_form_label_details'><:forms:champ_email_details:></span>
    2122                                        <input type='text' name='#CHAMP' id='#CHAMP' value="[(#ENV**{valeurs}|forms_valeur{#CHAMP,''}|entites_html)]"
     
    2425                                                onblur="this.className='[(#OBLIGATOIRE|=={oui}|?{forml,formo})]'" size='40' />
    2526                                ]
    26                                 [(#TYPE|=={url}|?{' ',''})
     27                                [(#TYPE|=={url}|?{' ',''}) #SET{afficher,0}
    2728                                        <span class='spip_form_label_details'><:forms:champ_url_details:></span>
    2829                                        <input type='text' name='#CHAMP' id='#CHAMP' value="[(#ENV**{valeurs}|forms_valeur{#CHAMP,''}|entites_html)]"
     
    3132                                                onblur="this.className='[(#OBLIGATOIRE|=={oui}|?{forml,formo})]'" size='40' />
    3233                                ]
    33                                 [(#TYPE|=={ligne}|?{' ',''})
    34                                         <input type='text' name='#CHAMP' id='#CHAMP' value="[(#ENV**{valeurs}|forms_valeur{#CHAMP,''}|entites_html)]"
    35                                                 class='[(#OBLIGATOIRE|=={oui}|?{forml,formo})][(#ENV**{erreur}|forms_valeur{#CHAMP}|?{' ',''}) champ_obli_oubli]'
    36                                                 onfocus="this.className='[(#OBLIGATOIRE|=={oui}|?{forml,formo})]-focus'"
    37                                                 onblur="this.className='[(#OBLIGATOIRE|=={oui}|?{forml,formo})]'" size='40' />
    38                                 ]
    39                                 [(#TYPE|=={texte}|?{' ',''})
     34                                [(#TYPE|=={texte}|?{' ',''}) #SET{afficher,0}
    4035                                        <textarea name='#CHAMP' id='#CHAMP'
    4136                                                class='[(#OBLIGATOIRE|=={oui}|?{forml,formo})][(#ENV**{erreur}|forms_valeur{#CHAMP}|?{' ',''}) champ_obli_oubli]'
     
    4439                                                >[(#ENV**{valeurs}|forms_valeur{#CHAMP,''}|entites_html)]</textarea>
    4540                                ]
    46                                 [(#TYPE|=={fichier}|?{' ',''})
     41                                [(#TYPE|=={fichier}|?{' ',''}) #SET{afficher,0}
    4742                                        <input type='file' name='#CHAMP' id='#CHAMP'
    4843                                                class='[(#OBLIGATOIRE|=={oui}|?{forml,formo})][(#ENV**{erreur}|forms_valeur{#CHAMP}|?{' ',''}) champ_obli_oubli]'
     
    5045                                                onblur="this.className='[(#OBLIGATOIRE|=={oui}|?{forml,formo})]'" size='40' />
    5146                                ]
    52                                 [(#TYPE|=={select}|?{' ',''})
     47                                [(#TYPE|=={select}|?{' ',''}) #SET{afficher,0}
    5348                                        <INCLURE{fond=formulaires/forms_champ_select}{id_form}{champ}{valeur=#ENV**{valeurs}}>
    5449                                ]
    55                                 [(#TYPE|=={multiple}|?{' ',''})
     50                                [(#TYPE|=={multiple}|?{' ',''}) #SET{afficher,0}
    5651                                        <INCLURE{fond=formulaires/forms_champ_multiple}{id_form}{champ}{valeur=#ENV**{valeurs}}>
    5752                                ]
    58                                 [(#TYPE|=={mot}|?{' ',''})
     53                                [(#TYPE|=={mot}|?{' ',''}) #SET{afficher,0}
    5954                                        <INCLURE{fond=formulaires/forms_select_mot}{id_groupe=#EXTRA_INFO}{champ}{valeur=#ENV**{valeurs}}>
     55                                ]
     56                                [(#REM) tous les autres types sont affiches ici]
     57                                [(#GET{afficher}|?{' ',''})
     58                                        <input type='text' name='#CHAMP' id='#CHAMP' value="[(#ENV**{valeurs}|forms_valeur{#CHAMP,''}|entites_html)]"
     59                                                class='[(#OBLIGATOIRE|=={oui}|?{forml,formo})][(#ENV**{erreur}|forms_valeur{#CHAMP}|?{' ',''}) champ_obli_oubli]'
     60                                                onfocus="this.className='[(#OBLIGATOIRE|=={oui}|?{forml,formo})]-focus'"
     61                                                onblur="this.className='[(#OBLIGATOIRE|=={oui}|?{forml,formo})]'" size='40' />
    6062                                ]
    6163                                [<span class='erreur'>(#ENV**{erreur}|forms_valeur{#CHAMP})</span>]
  • _plugins_/_stable_/forms/forms2/inc/forms.php

    r6599 r6616  
    202202                        }
    203203                }
    204         }       
     204        }
     205       
     206        function Forms_importe_form($id_form_target,$source){
     207                include_spip('inc/plugin');
     208                include_spip('base/forms');
     209                include_spip('base/abstract_sql');
     210                include_spip('inc/forms_edit');
     211                $contenu = "";
     212                lire_fichier($source,$contenu);
     213                $formtree=parse_plugin_xml($contenu);
     214                if (isset($formtree['forms']))
     215                        foreach($formtree['forms'] as $forms){
     216                                foreach($forms['form'] as $form){
     217                                        // si c'est une creation, creer le formulaire avec les infos d'entete
     218                                        if (!($id_form=intval($id_form_target))){
     219                                                $names = array();
     220                                                $values = array();
     221                                                foreach (array_keys($GLOBALS['tables_principales']['spip_forms']['field']) as $key)
     222                                                        if (!in_array($key,array('id_form','maj')) AND isset($form[$key])){
     223                                                                $names[] = $key;
     224                                                                $values[] = _q(trim(applatit_arbre($form[$key])));
     225                                                        }
     226                                                spip_abstract_insert('spip_forms',"(".implode(",",$names).")","(".implode(",",$values).")");
     227                                                $id_form = spip_insert_id();
     228                                        }
     229                                        if ($id_form AND isset($form['fields'])){
     230                                                foreach($form['fields'] as $fields)
     231                                                                foreach($fields['field'] as $field){
     232                                                                        $champ = trim(applatit_arbre($field['champ']));
     233                                                                        $type = trim(applatit_arbre($field['type']));
     234                                                                        $titre = trim(applatit_arbre($field['titre']));
     235                                                                        $champ = Forms_insere_nouveau_champ($id_form,$type,$titre,($id_form==$id_form_target)?$champ:"");
     236                                                                        $set = "";
     237                                                                        foreach (array_keys($GLOBALS['tables_principales']['spip_forms_champs']['field']) as $key)
     238                                                                                if (!in_array($key,array('id_form','champ','rang','titre','type')) AND isset($field[$key])){
     239                                                                                        $set .= "$key="._q(trim(applatit_arbre($form[$key]))).", ";
     240                                                                                }
     241                                                                        if (strlen($set)){
     242                                                                                $set = substr($set,0,strlen($set)-2);
     243                                                                                spip_query("UPDATE spip_forms_champs SET $set WHERE id_form="._q($id_form)." AND champ="._q($champ));
     244                                                                        }
     245                                                                }
     246                                        }
     247                                }
     248                        }
     249               
     250        }
    205251        //
    206252        // Afficher un pave formulaires dans la colonne de gauche
     
    263309        }
    264310
    265         function Forms_liste_types_champs(){
    266                 return array('ligne', 'texte', 'email', 'url', 'select', 'multiple', 'fichier', 'mot','separateur','textestatique');
    267         }
    268         function Forms_type_champ_autorise($type) {
    269                 static $t;
    270                 if (!$t) {
    271                         $t = array_flip(Forms_liste_types_champs());
    272                 }
    273                 return isset($t[$type]);
    274         }
    275         function Forms_nom_type_champ($type) {
    276                 static $noms;
    277                 if (!$noms) {
    278                         $noms = array(
    279                                 'ligne' => _T("forms:champ_type_ligne"),
    280                                 'texte' => _T("forms:champ_type_texte"),
    281                                 'url' => _T("forms:champ_type_url"),
    282                                 'email' => _T("forms:champ_type_email"),
    283                                 'select' => _T("forms:champ_type_select"),
    284                                 'multiple' => _T("forms:champ_type_multiple"),
    285                                 'fichier' => _T("forms:champ_type_fichier"),
    286                                 'mot' => _T("forms:champ_type_mot"),
    287                                 'separateur' => _T("forms:champ_type_separateur"),
    288                                 'textestatique' => _T("forms:champ_type_textestatique")
    289                         );
    290                 }
    291                 return ($s = $noms[$type]) ? $s : $type;
    292         }
    293        
    294         function Forms_valide_reponse_post($id_form){
    295                 $erreur = '';
    296                 $res = spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form));
    297                 while($row = spip_fetch_array($res)){
    298                         $champ = $row['champ'];
    299                         $type = $row['type'];
    300                         $val = _request($champ);
    301                         if (!$val || ($type == 'fichier' && !$_FILES[$champ]['tmp_name'])) {
    302                                 if ($row['obligatoire'] == 'oui')
    303                                         $erreur[$champ] = _T("forms:champ_necessaire");
    304                                 continue;
    305                         }
    306                         // Verifier la conformite des donnees entrees
    307                         if ($type == 'email') {
    308                                 if (!strpos($val, '@') || !email_valide($val)) {
    309                                         $erreur[$champ] = _T("forms:adresse_invalide");
    310                                 }
    311                         }
    312                         if ($type == 'url') {
    313                                 if ($row['extra_info'] == 'oui') {
    314                                         include_spip("inc/sites");
    315                                         if (!recuperer_page($val)) {
    316                                                 $erreur[$champ] = _T("forms:site_introuvable");
    317                                         }
    318                                 }
    319                         }
    320                         if ($type == 'fichier') {
    321                                 if (!$taille = $_FILES[$champ]['size']) {
    322                                         $erreur[$champ] = _T("forms:echec_upload");
    323                                 }
    324                                 else if ($row['extra_info'] && $taille > ($row['extra_info'] * 1024)) {
    325                                         $erreur[$champ] = _T("forms:fichier_trop_gros");
    326                                 }
    327                                 else if (!Forms_type_fichier_autorise($_FILES[$champ]['name'])) {
    328                                         $erreur[$champ] = _T("fichier_type_interdit");
    329                                 }
    330                                 if ($erreur[$champ]) {
    331                                         supprimer_fichier($_FILES[$champ]['tmp_name']);
    332                                 }
    333                         }
    334                 }
    335                 return $erreur;
    336         }
    337311        function Forms_insertions_reponse_post($id_form,$id_donnee,&$erreur,&$ok){
    338312                $inserts = array();
     
    386360                $mailconfirm = '';
    387361
    388                 $erreur = Forms_valide_reponse_post($id_form);
     362                include_spip("inc/forms_type_champs");
     363                $erreur = Forms_valide_champs_reponse_post($id_form);
    389364       
    390365                // Si tout est bon, enregistrer la reponse
Note: See TracChangeset for help on using the changeset viewer.