source: spip-zone/_plugins_/formidable/trunk/base/formidable_tables.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: 7.0 KB
Line 
1<?php
2
3/**
4 * Déclarations relatives à la base de données
5 *
6 * @package SPIP\Formidable\Pipelines
7**/
8
9// Sécurité
10if (!defined('_ECRIRE_INC_VERSION')) return;
11
12/**
13 * Déclarer les interfaces des tables de formidable pour le compilateur
14 *
15 * @pipeline declarer_tables_interfaces
16 *
17 * @param array $interfaces
18 *     Déclarations d'interface pour le compilateur
19 * @return array
20 *     Déclarations d'interface pour le compilateur
21**/
22function formidable_declarer_tables_interfaces($interfaces) {
23        // 'spip_' dans l'index de $tables_principales
24        $interfaces['table_des_tables']['formulaires'] = 'formulaires';
25        $interfaces['table_des_tables']['formulaires_reponses'] = 'formulaires_reponses';
26        $interfaces['table_des_tables']['formulaires_reponses_champs'] = 'formulaires_reponses_champs';
27
28        $interfaces['tables_jointures']['spip_formulaires'][] = 'formulaires_liens';
29        $interfaces['tables_jointures']['spip_articles'][] = 'formulaires_liens';
30        $interfaces['tables_jointures']['spip_rubriques'][] = 'formulaires_liens';
31
32        $interfaces['table_des_traitements']['MESSAGE_RETOUR']['formulaires']= _TRAITEMENT_RACCOURCIS;
33        $interfaces['table_des_traitements']['URL_REDIRECT']['formulaires']= 'vider_url(%s)';
34
35
36        return $interfaces;
37}
38
39/**
40 * Déclarer les objets éditoriaux des formulaires
41 *
42 * @pipeline declarer_tables_objets_sql
43 * @param array $tables
44 *     Description des tables
45 * @return array
46 *     Description complétée des tables
47 */
48function formidable_declarer_tables_objets_sql($tables) {
49        $tables['spip_formulaires'] = array(
50                'type'=>'formulaire',
51                'titre' => "titre, '' AS lang",
52                'date' => 'date_creation',
53                'principale' => 'oui',
54                'texte_modifier' => 'formidable:editer_modifier_formulaire',
55                'info_aucun_objet'=> 'formidable:info_aucun_formulaire',
56                'info_1_objet' => 'formidable:info_1_formulaire',
57                'info_nb_objets' => 'formidable:info_nb_formulaires',
58
59                'champs_editables' => array('titre', 'identifiant', 'descriptif','message_retour', 'saisies', 'traitements', 'public','apres','url_redirect'),
60                'champs_versionnes' => array('titre', 'identifiant', 'descriptif','message_retour', 'saisies', 'traitements', 'public','apres','url_redirect'),
61                'field' => array(
62                        "id_formulaire" => "bigint(21) NOT NULL",
63                        "identifiant" => "varchar(200)",
64                        "titre" => "text NOT NULL default ''",
65                        "descriptif" => "text",
66                        "message_retour" => "text NOT NULL default ''",
67                        "saisies" => "longtext NOT NULL default ''",
68                        "traitements" => "text NOT NULL default ''",
69                        "public" => "enum('non', 'oui') DEFAULT 'non' NOT NULL",
70                        "apres" => "varchar(12) NOT NULL default ''",
71                        "url_redirect" => "varchar(255)",
72                        "statut" => "varchar(10) NOT NULL default ''",
73                        "date_creation" => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
74                        "maj" => "timestamp",
75                ),
76                'key' => array(
77                        "PRIMARY KEY" => "id_formulaire"
78                ),
79                'join'=> array(
80                        'id_formulaire' => 'id_formulaire'
81                ),
82                'statut'=> array(
83                        array(
84                                'champ' => 'statut',
85                                'publie' => 'publie',
86                                'previsu' => 'publie,prop',
87                                'exception' => array('statut', 'tout'),
88                        )
89                ),
90                'texte_changer_statut' => 'formidable:changer_statut',
91                'rechercher_champs' => array(
92                  'titre' => 5, 'descriptif' => 3
93                ),
94                'statut_titres' => array(
95                        'prop'=>'info_article_propose',
96                        'publie'=>'info_article_publie',
97                        'poubelle'=>'info_article_supprime'
98                ),
99                'statut_textes_instituer' => array(
100                        'prop' => 'texte_statut_propose_evaluation',
101                        'publie' => 'texte_statut_publie',
102                        'poubelle' => 'texte_statut_poubelle',
103                ),
104
105        );
106
107        $tables['spip_formulaires_reponses'] = array(
108                'type'=>'formulaires_reponse',
109                'titre' => "'' AS titre, '' AS lang",
110                'date' => 'date',
111                'principale' => 'oui',
112                'info_aucun_objet'=> 'formidable:info_aucune_reponse',
113                'info_1_objet' => 'formidable:info_1_reponse',
114                'info_nb_objets' => 'formidable:info_nb_reponses',
115
116                'field' => array(
117                        "id_formulaires_reponse" => "bigint(21) NOT NULL",
118                        "id_formulaire" => "bigint(21) NOT NULL default 0",
119                        "date" => "datetime NOT NULL default '0000-00-00 00:00:00'",
120                        "ip" => "varchar(255) NOT NULL default ''",
121                        "id_auteur" => "bigint(21) NOT NULL default 0",
122                        "cookie" => "varchar(255) NOT NULL default ''",
123                        "statut" => "varchar(10) NOT NULL default ''",
124                        "maj" => "timestamp"
125                ),
126                'key' => array(
127                        "PRIMARY KEY" => "id_formulaires_reponse",
128                        "KEY id_formulaire" => "id_formulaire",
129                        "KEY id_auteur" => "id_auteur",
130                        "KEY cookie" => "cookie"
131                ),
132                'join' => array(
133                        'id_formulaires_reponse' => 'id_formulaires_reponse',
134                        'id_formulaire' => 'id_formulaire',
135                        'id_auteur' => 'id_auteur'
136                ),
137                'statut'=> array(
138                        array(
139                                'champ' => 'statut',
140                                'publie' => 'publie',
141                                'previsu' => 'publie,prop',
142                                'exception' => array('statut', 'tout'),
143                        )
144                ),
145                'texte_changer_statut' => 'formulaires_reponse:changer_statut',
146                'rechercher_champs' => array('ip'=>1),
147                'rechercher_jointures' => array(
148                        'formulaires_reponses_champ' => array('valeur' => 4),
149                ),
150                'statut_titres' => array(
151                        'prop'=>'formidable:info_reponse_proposee',
152                        'publie'=>'formidable:info_reponse_publiee',
153                        'refuse'=>'formidable:info_reponse_supprimee'
154                ),
155                'statut_textes_instituer' => array(
156                        'prop' => 'formidable:texte_statut_propose_evaluation',
157                        'publie' => 'formidable:texte_statut_publie',
158                        'refuse' => 'formidable:texte_statut_poubelle',
159                ),
160        );
161        return $tables;
162}
163
164/**
165 * Déclarer les tables principales de formidable
166 *
167 * @pipeline declarer_tables_principales
168 * @param array $tables_principales
169 *     Description des tables
170 * @return array
171 *     Description complétée des tables
172**/
173function formidable_declarer_tables_principales($tables_principales){
174
175        // Table formulaires_reponses_champs
176        $formulaires_reponses_champs = array(
177                "id_formulaires_reponses_champ" => "bigint(21) NOT NULL",
178                "id_formulaires_reponse" => "bigint(21) NOT NULL default 0",
179                "nom" => "varchar(255) NOT NULL default ''",
180                "valeur" => "text NOT NULL DEFAULT ''",
181                "maj" => "timestamp"
182        );
183        $formulaires_reponses_champs_cles = array(
184                "PRIMARY KEY" => "id_formulaires_reponses_champ",
185                "KEY id_formulaires_reponse" => "id_formulaires_reponse",
186                "KEY nom" => "nom",
187        );
188        $tables_principales['spip_formulaires_reponses_champs'] = array(
189                'field' => &$formulaires_reponses_champs,
190                'key' => &$formulaires_reponses_champs_cles
191        );
192       
193        return $tables_principales;
194}
195
196/**
197 * Déclarer les tables auxiliaires de formidable
198 *
199 * @pipeline declarer_tables_auxiliaires
200 * @param array $tables_auxiliaires
201 *     Description des tables
202 * @return array
203 *     Description complétée des tables
204**/
205function formidable_declarer_tables_auxiliaires($tables_auxiliaires){
206        $formulaires_liens = array(
207                "id_formulaire" => "bigint(21) DEFAULT '0' NOT NULL",
208                "id_objet"      => "bigint(21) DEFAULT '0' NOT NULL",
209                "objet" => "VARCHAR (25) DEFAULT '' NOT NULL"
210        );
211
212        $formulaires_liens_cles = array(
213                "PRIMARY KEY" => "id_formulaire,id_objet,objet",
214                "KEY id_formulaire" => "id_formulaire"
215        );
216       
217        $tables_auxiliaires['spip_formulaires_liens'] = array(
218                'field' => &$formulaires_liens,
219                'key' => &$formulaires_liens_cles
220        );
221       
222        return $tables_auxiliaires;
223}
224
225
226
227?>
Note: See TracBrowser for help on using the repository browser.