Changeset 49235 in spip-zone for _plugins_/formitable/traiter/table.php


Ignore:
Timestamp:
Jul 2, 2011, 3:07:15 PM (10 years ago)
Author:
jluc@…
Message:

Mise au point du portage sous forme de plugin.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/formitable/traiter/table.php

    r49171 r49235  
    11<?php
    2 // Débroussailleur : JLuc
     2// Auteur : JLuc
    33//
    4 // OK :
     4//
    55// - Paramétrage du traitement =
    66//              * spécification de la table destinataire pour le formulaire
    77//              * correspondance des champs entre formulaire et table
    88//              sous la forme d'une suite de couples champform1|champtable
    9 // - Enregistrement dans la table
     9// - Enregistrement des valeurs saisies dans la table utilisateur
    1010//
    11 // Approximatif ou foireux :
    12 // - Toute la mécanique de gestion des "modification de réponses existantes"
    13 //      est dupliquée depuis le traitement "enregistrement"
    14 //      Notamment, il utilise les valeurs de cette configuration qui doit donc être activée
    15 //      Il faudrait soit retirer tout ça et faire au plus simple
    16 //      soit mutualiser le code ET la config ET l'interface de config !
    17 // - La fonction traiter_table_update_dist n'a pas encore été touchée,
    18 //      elle doit être adaptée pour ce nouveau traitement
    19 //
     11// Notes techniques :
     12// La gestion des "modification de réponses existantes" est une dupplication 
     13// de cette partie du traitement 'enregistrement'.
     14// Ce serait bien de mutualiser le code et la config en sortant cette partie des traitements.
    2015
    2116// Sécurité
    2217if (!defined("_ECRIRE_INC_VERSION")) return;
    2318
    24 function traitement_date_fr_vers_sql($date) {
     19// convertir le format des dates issu de formidable à un format SQL de type DATE
     20function traitement_date_fr_vers_sql ($date) {
    2521        sscanf ($date, "%2d/%2d/%4d%s",$jour,$mois,$an,$s);
    2622        return "$an-$mois-$jour";
    2723};
    2824
    29 // exemples :
    30 // function traitement_champ_bateau_couleur ($valeur, $table, $nom)
    31 // function traitement_champ_date_debut ($valeur, $table, $nom)
    32 // function traitement_champ_evenement_date_debut ($valeur, $table, $nom)
     25// Exemples :
     26// - $valeur : valeur renvoyée par la saisie
     27// - $table : table SQL utilisateur destinatrice des données
     28// - $champ : champ de la table SQL
     29// - $nom : id de l'input dans le formulaire généré par spip
     30//
     31// function traitement_champ_bateau_couleur ($valeur, $table, $champ, $nom)
     32// function traitement_champ_date_debut ($valeur, $table, $champ, $nom)
     33// function traitement_champ_evenement_date_debut ($valeur, $table, $champ, $nom)
    3334// function traitement_champ ($valeur, $table, $nom)
    3435
     36function traitement_champ_naissance ($valeur, $table, $champ, $nom) {
     37        return traitement_date_fr_vers_sql($valeur);
     38};
     39
    3540/* exemple d'usage :
    36 function traitement_champ ($valeur, $table, $nom) {
    37         // ICI appels des fonctions de conversions
     41function traitement_champ ($valeur, $table, $champ, $nom) {
     42        // Toutes les saisies DATES sont stockées dans un format un champt de type DATE
    3843        if (strpos($nom,'date')===0) {
    3944                $valeur = traitement_date_fr_vers_sql($valeur);
    4045                echo "<br>Reçu date fr et convertit vers SQL = $valeur";
    4146        };
    42 };
    43 */
     47        return $valeur;
     48}; */
    4449
    4550function traiter_table_dist($args, $retours){
    46        
    4751        include_spip('inc/formidable');
    4852        include_spip('base/abstract_sql');
    4953        $options = $args['options'];
    50        
     54
    5155        $table_destinataire = $options['table_destinataire'];
    52        
    5356        $correspondance_champs_formulaire_table = $options['correspondance_champs_formulaire_table'];
     57        $correspondance_champs_formulaire_table = saisies_chaine2tableau($correspondance_champs_formulaire_table);
    5458
    55         $correspondance_champs_formulaire_table = saisies_chaine2tableau($correspondance_champs_formulaire_table);
    56        
    5759        $formulaire = $args['formulaire'];
    5860        $id_formulaire = intval($formulaire['id_formulaire']);
     
    6365        global $auteur_session;
    6466        $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
    65        
     67
    6668        // On cherche le cookie et sinon on le crée
    6769        $nom_cookie = formidable_generer_nom_cookie($id_formulaire);
     
    7779                $id_formulaires_reponse
    7880                        = intval(_request('deja_enregistre_'.$id_formulaire));
    79        
     81
    8082        // Si la moderation est a posteriori ou que la personne est un boss, on publie direct
    8183        if ($options['moderation'] == 'posteriori' or autoriser('instituer', 'formulaires_reponse', $id_formulaires_reponse, null, array('id_formulaire'=>$id_formulaire, 'nouveau_statut'=>'publie')))
     
    8385        else
    8486                $statut = 'prop';
    85        
     87
    8688        // Si ce n'est pas une modif d'une réponse existante, on crée d'abord la réponse
    8789        if (!$id_formulaires_reponse){
     
    9799                        )
    98100                );
     101
    99102                // Si on a pas le droit de répondre plusieurs fois ou que les réponses seront modifiables, il faut poser un cookie
    100103                if (!$options['multiple'] or $options['modifiable']){
     
    104107                }
    105108        }
    106        
     109
    107110        // Si l'id n'a pas été créé correctement alors erreur
    108111        if (!($id_formulaires_reponse > 0)){
     
    123126                                        break;
    124127                                };
    125                                
     128
     129                                echo "nom=$nom saisie=$saisie col=$colname valeur=$valeur<br>";
     130
    126131                                // traitements des valeurs avant enregistrement : fonction de la table destinataire et du champ destination
    127                                 if (function_exists($f = 'traitement_champ_'.$table_destinataire.'_'.$nom)
    128                                         OR function_exists($f = 'traitement_champ_'.$nom)
     132                                if (function_exists($f = 'traitement_champ_'.$table_destinataire.'_'.$colname)
     133                                        OR function_exists($f = 'traitement_champ_'.$colname)
    129134                                        OR function_exists($f = 'traitement_champ'))
    130                                         $valeur = $f($valeur, $table_destinataire, $nom);
    131                                        
    132                                 $inserts[$colname] = (is_array($valeur) ? serialize($valeur) : $valeur);
     135                                        $valeur = $f($valeur, $table_destinataire, $colname, $nom);
     136
     137                        $inserts[$colname] = (is_array($valeur) ? serialize($valeur) : $valeur);
    133138                        }
    134139                }
    135 
    136140                if ($modif_reponse) // On modifie l'enregistrement trouvé
    137141                        $inserts['id_formulaires_reponse'] = $id_formulaires_reponse;
    138        
     142
    139143                // S'il y a bien des choses à modifier
    140144                if ($champs) {
     
    144148                        // On insère les nouvelles valeurs
    145149                        $id= sql_insertq ($table_destinataire, $inserts);
     150
     151                        echo "sql_insertq ($table_destinataire, <pre>".print_r($inserts,1)."</pre>)";
    146152                        if (!$id)       
    147                                 $retours['message_erreur'] .= "\n<br/>Erreur : l'insertion dans la table utilisateur ne se fait pas bien.".sql_error();
     153                                $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>";
    148154                };
    149155        }
     
    153159
    154160function traiter_table_update_dist($id_formulaire, $traitement, $saisies_anciennes, $saisies_nouvelles){
    155         // Si des champs ont été supprimés du formulaire,
     161        // Si des champs ont été supprimés, il faut supprimer les réponses à ces champs
    156162        // il faut supprimer les colonnes de la table
    157163        // mais cela se régle en dehors de formidable
     
    161167
    162168?>
     169
Note: See TracChangeset for help on using the changeset viewer.