Changeset 56739 in spip-zone for _plugins_/formitable


Ignore:
Timestamp:
Jan 7, 2012, 10:36:03 AM (8 years ago)
Author:
arnaud.berard@…
Message:

formitable 0.2.2 :

  • possibilité de rassembler plusieurs inputs vers une destination de la table utilisateur
  • synchro des id_formulaire_reponses (table utilisateur <-> formidable) pour le cas ou la table utilisateur n'as pas d'auto-incrément sur le champ id_formulaire_reponse
Location:
_plugins_/formitable
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/formitable/plugin.xml

    r55868 r56739  
    44        <auteur>[JLuc->http://ouhpla.net]</auteur>
    55        <licence>GPL v3</licence>
    6         <version>0.2.1</version>
     6        <version>0.2.2</version>
    77        <version_base>0.2</version_base>
    88        <etat>test</etat>
    9         <description>Enregistrement des donn&#233;es d'un formulaire formidable dans une table utilisateur, avec correspondance de chaque champ du formulaire vers un champ de la table utilisateur, et traitement optionnel des donn&#233;es.</description>
     9        <description>Enregistrement des donn&#233;es d'un formulaire formidable dans une table utilisateur, avec correspondance de chaque champ du formulaire vers un champ de la table utilisateur, et traitement optionnel des données.</description>
    1010        <lien>http://www.spip-contrib.net/FormiTable</lien>
    1111        <prefix>formitable</prefix>
  • _plugins_/formitable/traiter/table.php

    r49236 r56739  
    11<?php
    22// Auteur : JLuc
    3 //
     3// 
    44//
    55// - Paramétrage du traitement =
     
    77//              * correspondance des champs entre formulaire et table
    88//              sous la forme d'une suite de couples champform1|champtable
     9//              * SI plusieurs champs du formulaire ont la même destination dans la table (mm notation champ|dest et un par lignes)
     10//              les valeurs sont fusionnées et insérés avec mise en forme simple label : valeur dans le champ de destination
     11//             
    912// - Enregistrement des valeurs saisies dans la table utilisateur
    1013//
     
    1619// Sécurité
    1720if (!defined("_ECRIRE_INC_VERSION")) return;
     21
     22/**
     23 * Passe un tableau d'élements en html
     24 *
     25 *
     26 * @param mixed $tableau
     27 * @return string html simple
     28**/
     29function saisies_tableau2html($tableau) {
     30        if ($tableau and is_array($tableau)){
     31                $chaine = '';
     32       
     33                foreach($tableau as $cle=>$valeur){
     34                        $label = trim("$cle:<br/>");
     35                        $ligne = trim("<p>$valeur</p>");
     36                        $chaine .= $label.$ligne;
     37                }
     38                $chaine = trim($chaine);
     39       
     40                return $chaine;
     41        }
     42        // Si c'est déjà une chaine on la renvoie telle quelle
     43        elseif (is_string($tableau)){
     44                return $tableau;
     45        }
     46        else{
     47                return '';
     48        }
     49}
     50
    1851
    1952// convertir le format des dates issu de formidable à un format SQL de type DATE
     
    3467// function traitement_champ ($valeur, $table, $nom)
    3568
    36 function traitement_champ_naissance ($valeur, $table, $champ, $nom) {
    37         return traitement_date_fr_vers_sql($valeur);
    38 };
     69//function traitement_champ_naissance ($valeur, $table, $champ, $nom) {
     70//      return traitement_date_fr_vers_sql();
     71//};
    3972
    4073/* exemple d'usage :
     
    5689        $correspondance_champs_formulaire_table = $options['correspondance_champs_formulaire_table'];
    5790        $correspondance_champs_formulaire_table = saisies_chaine2tableau($correspondance_champs_formulaire_table);
     91       
     92        // Détection similaires
     93        if(array_count_values($correspondance_champs_formulaire_table)!=1) :
     94               
     95                $similaires = array_count_values($correspondance_champs_formulaire_table);
     96                       
     97                foreach($similaires as $val => $nb) {
     98                        //si le nombre de champ utilisant la mm destination est sup à 1
     99                        if($nb>1) $similaire = $val;                           
     100                }
     101        endif;
    58102
    59103        $formulaire = $args['formulaire'];
     
    61105        $saisies = unserialize($formulaire['saisies']);
    62106        $saisies = saisies_lister_par_nom($saisies);
    63 
     107       
    64108        // La personne a-t-elle un compte ?
    65109        global $auteur_session;
     
    99143                        )
    100144                );
    101 
     145                // ont récupère l'id_formulaires_reponse incrémenté dans la base de formidale
     146                // et ont post l'identique dans la table utilisateur
     147                $id_new = sql_getfetsel('id_formulaires_reponse', 'spip_formulaires_reponses', 'id_formulaires_reponse='. intval($id_formulaires_reponse));
     148                // ont ajoute a inserts
     149                $inserts['id_formulaires_reponse'] = $id_new;
    102150                // Si on a pas le droit de répondre plusieurs fois ou que les réponses seront modifiables, il faut poser un cookie
    103151                if (!$options['multiple'] or $options['modifiable']){
     
    116164                $champs = array();
    117165                $insertions = array();
     166                $concat = array();
     167               
    118168                foreach($saisies as $nom => $saisie){
    119169                        // On ne prend que les champs qui ont effectivement été envoyés par le formulaire
    120170                        if (($valeur = _request($nom)) !== null){
    121171                                $champs[] = $nom;
    122                                 if (isset ($correspondance_champs_formulaire_table[$nom]))
     172                                //ont test ceux qui ont été détectés comme ayant une destination similaire
     173                                if (isset($similaire)&&$correspondance_champs_formulaire_table[$nom]==$similaire) {
     174                                        $label = $saisies[$nom]['options']['label'];
     175                                        $concat[$label]=$valeur;
     176                                }
     177                                if (isset ($correspondance_champs_formulaire_table[$nom])){
    123178                                        $colname = $correspondance_champs_formulaire_table[$nom];
    124                                 else {
     179                                }else {
    125180                                        $retours['message_erreur'] .= "\n<br/>Erreur : le champ du formulaire ".$nom."n'a pas de correspondance déclarée dans la table utilisateur";
    126181                                        break;
    127182                                };
    128 
    129 //                              echo "nom=$nom saisie=$saisie col=$colname valeur=$valeur<br>";
    130183
    131184                                // traitements des valeurs avant enregistrement : fonction de la table destinataire et du champ destination
     
    138191                        }
    139192                }
     193               
     194                if(isset($concat)) {
     195                        $compil = saisies_tableau2html($concat);
     196                        $inserts[$similaire]=$compil;
     197                }
     198
    140199                if ($modif_reponse) // On modifie l'enregistrement trouvé
    141200                        $inserts['id_formulaires_reponse'] = $id_formulaires_reponse;
     201               
    142202
    143203                // S'il y a bien des choses à modifier
     
    146206//                              sql_updateq ($table_destinataire, $inserts);
    147207//                      else
     208                        // echo "<pre>".print_r($champ,1)."</pre>";
     209                       
    148210                        // On insère les nouvelles valeurs
    149211                        $id= sql_insertq ($table_destinataire, $inserts);
    150 
    151  //                     echo "sql_insertq ($table_destinataire, <pre>".print_r($inserts,1)."</pre>)";
     212                       
     213                        #TEST
     214                        //echo "sql_insertq ($table_destinataire, <pre>".print_r($inserts,1)."</pre>)";
     215                       
    152216                        if (!$id)       
    153217                                $retours['message_erreur'] .= "\n<br/>Erreur : l'insertion dans la table ($table_destinataire) ne se fait pas bien.".sql_error()."<pre class='reponse_formulaire_erreur'>".print_r($inserts,1)."</pre>";
     
    167231
    168232?>
    169 
Note: See TracChangeset for help on using the changeset viewer.