source: spip-zone/_plugins_/formidable/trunk/public/formidable_criteres.php @ 80736

Last change on this file since 80736 was 80736, checked in by cedric@…, 6 years ago

Corriger une erreur de structure SQL : la clé primaire sur id_formulaires_reponse,nom de la table spip_formulaires_reponses_champs empechait l'enregistrement de plusieurs réponses pour un même champ. Corrolaire : seul le premier choix des choix multiples (cases à cocher) étaient donc enregistrés.

On ajoute une clé primaire simple sur la table, ce qui a l'avantage de faire fonctionner la recherche de manière plus robuste, et on migre en renommant la table, la recreant, et transferant les donnees de l'ancienne vers la nouvelle.
Migration et installation validée en MySQL, à valider en SQLite (mais devrait être OK)

File size: 2.1 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5        // {tri_donnee champ}
6/**
7 * Depuis la boucle FORMULAIRES_REPONSES, trier les résulats en fonction d'un champ
8 * de la table FORMULAIRES_REPONSES_CHAMPS
9 * {tri_selon_donnee}
10 *
11 * @global array $exceptions_des_tables
12 * @param string $idb
13 * @param array $boucles
14 * @param <type> $crit
15 *
16 * Auteurs :
17 * Antoine Pitrou
18 * Cedric Morin
19 * Renato
20 * @ 2005,2006 - Distribue sous licence GNU/GPL
21 */
22
23function critere_tri_selon_donnee_dist($idb, &$boucles, $crit) { // Garder cette fontion pour compatibilité
24        critere_tri_selon_reponse_dist($idb, $boucles, $crit) ;
25}
26function critere_tri_selon_reponse_dist($idb, &$boucles, $crit) {
27
28        $boucle = &$boucles[$idb];
29        $t = $boucle->id_table;
30       
31        if ($t=='formulaires_reponses'){
32                $not = $crit->not;
33                $_quoi = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
34                $k = count($boucle->join)+1;
35                $boucle->join[$k]= array($t,'id_formulaires_reponse');
36                $boucle->from["L$k"]= 'spip_formulaires_reponses_champs';
37                $op = array("'='", "'L$k.nom'", "sql_quote(".$_quoi.")");
38                $boucle->where[]= array("'?'","!in_array($_quoi,array('date','id_formulaires_reponse'))",$op,"''");
39                $boucle->order[]= "(in_array($_quoi,array('date','id_formulaires_reponse'))?'$t.'.$_quoi:(strncmp($_quoi,'date_',5)==0?'STR_TO_DATE(L$k.valeur,\'%d/%m/%Y\')':'L$k.valeur'))".($not?".' DESC'":"");
40        }
41}
42
43// {recherche_donnee} ou {recherche_donnee susan}
44// Intégralement pompé et adapté de Forms&Tables
45function critere_recherche_reponse_dist($idb, &$boucles, $crit) {
46        global $table_des_tables;
47        $boucle = &$boucles[$idb];
48        $t = $boucle->id_table;
49        if ($t=='formulaires_reponses'){
50                if (isset($crit->param[0]))
51                        $_quoi = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
52                else
53                        $_quoi = '@$Pile[0]["recherche"]';
54
55                $k = count($boucle->join)+1;
56                $boucle->join[$k]= array($t,'id_formulaires_reponse');
57                $boucle->from["L$k"]= 'spip_formulaires_reponses_champs';
58                $op = array("'LIKE'","'L$k.valeur'","sql_quote(strpos($_quoi,'%')===false?'%'.".$_quoi.".'%':$_quoi)");
59                $boucle->where[]= array("'?'",$_quoi,$op,"''");
60        }
61}
62
63
64?>
Note: See TracBrowser for help on using the repository browser.