Changeset 57973 in spip-zone for _plugins_/formitable


Ignore:
Timestamp:
Feb 2, 2012, 7:47:22 PM (8 years ago)
Author:
jluc@…
Message:

Composition de champs : input1+input_10+textarea_1 peut être associé à un champ de la table utilisateur. Un tableau sera généré à partir des valeurs des saisies, dans l'ordre indiqué. Ce tableau est transmis à la fonction de traitement du champ de la table si elle existe, ou sérialisé sinon, avant d'être enregistré.
Tentatives de @afficher_si@ mais à l'aveuglette donc non testé...

Location:
_plugins_/formitable
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/formitable/inc/formitable.php

    r57904 r57973  
    11<?php
     2// Auteur : JLuc
     3//
     4// inc/formitable.php
     5// - fonctions de traitement des champs
     6// - petites fonctions utilitaires
    27
     8//==============================
     9// Fonctions de traitements des champs
    310
    4 // convertir le format des dates issu de formidable � un format SQL de type DATE
     11// convertir le format des dates issu de formidable à un format SQL de type DATE
     12// si la date est un tableau, c'est dans l'ordre jour mois an (31, 01, 2012)
    513function traitement_date_fr_vers_sql ($date) {
    6         sscanf ($date, "%2d/%2d/%4d%s",$jour,$mois,$an,$s);
    7         return "$an-$mois-$jour";
     14    spip_log ("traitement_date_fr_vers_sql de ".print_r($date,true),"formitable");
     15    if (is_array($date)) {
     16        return $date[2]."-".$date[1]."-".$date[0];
     17    }
     18    $jour=$mois=$an="";
     19    if (sscanf ($date, "%2d/%2d/%4d", $jour, $mois, $an))
     20            return "$an-$mois-$jour";
    821};
    922
    10 // Exemples :
    11 // - $valeur : valeur renvoy�e par la saisie
    12 // - $table : table SQL utilisateur destinatrice des donn�es
    13 // - $champ : champ de la table SQL
    14 // - $nom : id de l'input dans le formulaire g�n�r� par spip
    15 //
    1623// function traitement_champ_bateau_couleur ($valeur, $table, $champ, $nom)
    1724// function traitement_champ_date_debut ($valeur, $table, $champ, $nom)
    1825// function traitement_champ_evenement_date_debut ($valeur, $table, $champ, $nom)
    1926// function traitement_champ ($valeur, $table, $nom)
     27//
     28// - $valeur : valeur renvoyee par la saisie. string ou array.
     29// - $table : table SQL utilisateur destinatrice des données
     30// - $champ : champ de la table SQL
     31// - $nom : id de l'input dans le formulaire généré par spip
    2032
    21 function traitement_champ_naissance ($valeur, $table, $champ, $nom) {
    22         return traitement_date_fr_vers_sql($valeur);
    23 };
     33/* exemples d'usage :
     34    function traitement_champ_naissance ($valeur, $table, $champ, $nom) {
     35        return traitement_date_fr_vers_sql($valeur);
     36    };
    2437
    25 /* exemple d'usage :
     38    function traitement_champ_lestrois ($valeur, $table, $champ, $nom) {
     39        return traitement_date_fr_vers_sql($valeur);
     40    };
     41
     42// pour que toutes les saisies DATES soient stockées dans un format un champt de type DATE
    2643function traitement_champ ($valeur, $table, $champ, $nom) {
    27         // Toutes les saisies DATES sont stock�es dans un format un champt de type DATE
    2844        if (strpos($nom,'date')===0) {
    2945                $valeur = traitement_date_fr_vers_sql($valeur);
    30 //              echo "<br>Re�u date fr et convertit vers SQL = $valeur";
     46//              spip_log ("Reçu date fr et convertit vers SQL = $valeur","formitable");
    3147        };
    3248        return $valeur;
    3349}; */
    3450
    35 
     51//==============================
     52// Autres utilités
    3653/*
    3754 * Génère le nom du cookie qui sera utilisé par le plugin lors d'une réponse
  • _plugins_/formitable/plugin.xml

    r57955 r57973  
    44        <auteur>[JLuc->http://ouhpla.net]</auteur>
    55        <licence>GPL v3</licence>
    6         <version>0.3.0</version>
     6        <version>0.4.0</version>
    77        <version_base>0.2</version_base>
    88        <etat>dev</etat>
  • _plugins_/formitable/traiter/table.php

    r57958 r57973  
    2020if (!defined("_ECRIRE_INC_VERSION")) return;
    2121
     22error_reporting(E_ERROR | E_WARNING | E_PARSE);
    2223
    2324function traiter_table_dist($args, $retours){
     
    3738
    3839    spip_log ("========" ,'formitable');
    39     spip_log ("Traitement table pour formulaire $formulaire sur table ".$table_destinataire ,'formitable');
     40    spip_log ("Traitement table pour formulaire $id_formulaire sur table ".$table_destinataire ,'formitable');
     41    spip_log (print_r($_REQUEST, 1), "formitable");
     42
    4043        // La personne a-t-elle un compte ?
    4144        global $auteur_session;
    4245        $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
    4346
    44 
    4547    // les champs "utilisateus" à insérer
    46     $champs = array();
     48    $inserer = false;
    4749
    4850    // tous les champs à insérer, y compris les champs techniques
    4951    $insertions = array();
    5052
    51     foreach ($correspondance_champs_formulaire_table as $nom => $colname) {
    52         spip_log ("correspondance de $nom avec $colname valeur ="._request($nom), "formitable");
    53         if (($valeur = _request($nom)) !== null){
    54             $champs[]=$nom;
    55             if (function_exists($f = 'traitement_champ_'.$table_destinataire.'_'.$colname)
    56                 OR function_exists($f = 'traitement_champ_'.$colname)
     53    foreach ($correspondance_champs_formulaire_table as $nom_input => $champ_table) {
     54        $inserer_champ = false;
     55
     56        // cas : input du formulaire => champ de la table
     57        if (($valeur = _request($nom_input)) !== null) {
     58            $inserer_champ = $inserer = true;
     59            spip_log ("correspondance de $nom_input avec $champ_table valeur =".$valeur, "formitable");
     60        }
     61        // cas : composition d'input => champ de la table
     62        // les inputs sont séparés par un +; l'ordre est significatif
     63        elseif (strpos($nom_input,'+')) {
     64            spip_log ("champ composé détecté : $nom_input avec $champ_table", "formitable");
     65            $compo = explode('+',$nom_input);
     66            $valeur = array();
     67            $i=0;
     68            foreach ($compo as $elt_compo) {
     69                $valeur[$i++]=$valeur[$elt_compo]=_request($elt_compo);
     70                if ($valeur[$elt_compo] !== null)
     71                    $inserer_champ = $inserer = true;
     72                spip_log ("dans champ composé : $elt_compo => ". $valeur[$elt_compo],"formitable");
     73            }
     74        } else spip_log ("ERREUR WEBMASTER ? Impossible d'enregistrer $nom_input", "formitable");
     75
     76        if ($inserer_champ) {
     77            if (function_exists($f = 'traitement_champ_'.$table_destinataire.'_'.$champ_table)
     78                OR function_exists($f = 'traitement_champ_'.$champ_table)
    5779                OR function_exists($f = 'traitement_champ'))
    58                 $valeur = $f($valeur, $table_destinataire, $colname, $nom);
     80                $valeur = $f($valeur, $table_destinataire, $champ_table, $nom_input);
    5981
    60             $insertions[$colname] = (is_array($valeur) ? serialize($valeur) : $valeur);
     82            // ces tableaux peuvent venir d'un input tableau ou d'une composition d'input sans traitement dédié
     83            $insertions[$champ_table] = (is_array($valeur) ? serialize($valeur) : $valeur);
    6184        }
    6285    }
     
    7194    }
    7295
    73     $id_reponse_auteur_deja = 0;
    74     if ($options['champ_id_auteur'] and $options['champ_cle_primaire']) {
     96    if ($options['champ_id_auteur']) {
    7597        // La personne a-t-elle un compte ?
    7698        global $auteur_session;
    7799        $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
    78 
     100        spip_log ("auteur = ".$id_auteur, "formitable");
    79101        $insertions[$options['champ_id_auteur']] = $id_auteur;
    80 
    81         $id_reponse_auteur_deja = sql_getfetsel ($options['champ_cle_primaire'], $table_destinataire, $options['champ_id_auteur'].'='.$id_auteur);
    82 
    83102    }
    84103
    85     if ($id_reponse_auteur_deja and !$options['multiple']) {
     104    if (!$options['multiple']  and $options['champ_cle_primaire']
     105            and sql_getfetsel ( $options['champ_cle_primaire'],
     106                                $table_destinataire,
     107                                $options['champ_id_auteur'].'='.$id_auteur)) {
    86108        $retours['message_erreur'] .= "\n<br/>"._T('Vous avez déjà répondu. Votre nouvelle réponse ne peut être prise en compte.');
    87109        return $retours;
     
    90112
    91113    // S'il y a bien des choses à modifier
    92     if (count($champs) or true) {
     114    if ($inserer) {
    93115        // On insere les nouvelles valeurs
    94116        $id = sql_insertq ($table_destinataire, $insertions);
  • _plugins_/formitable/traiter/table.yaml

    r57958 r57973  
    3030      explication: 'Indiquez le nom du champ contenant les id_auteurs dand la table destinataire des enregistrements'
    3131      defaut: 'id_auteur'
    32   -
    33     saisie: 'input'
    34     options:
    35       nom: 'champ_statut'
    36       label: 'Champ statut'
    37       explication: 'Indiquez le nom du champ qui contient le statut de chaque enregistrement sil existe. Videz sinon.'
    38       defaut: 'statut'
     32      afficher_si: '@champ_cle_primaire@'
    3933  -
    4034    saisie: 'radio'
     
    4741      defaut: 'posteriori'
    4842  -
     43    saisie: 'input'
     44    options:
     45      nom: 'champ_statut'
     46      label: 'Champ statut'
     47      explication: 'Indiquez le nom du champ qui contient le statut de chaque enregistrement sil existe. Videz sinon.'
     48      defaut: 'statut'
     49      afficher_si: '@moderation@ == "priori"'
     50  -
    4951    saisie: 'oui_non'
    5052    options:
Note: See TracChangeset for help on using the changeset viewer.