source: spip-zone/_plugins_/etiquettes/trunk/balise/formulaire_etiquettes.php

Last change on this file was 107365, checked in by marcimat@…, 18 months ago

2 autres notices PHP en moins.

File size: 5.8 KB
Line 
1<?php
2/**
3 * Plugin  : Étiquettes
4 * Auteur  : RastaPopoulos
5 * Licence : GPL
6 *
7 * Documentation : https://contrib.spip.net/Plugin-Etiquettes
8 *
9 */
10
11if (!defined("_ECRIRE_INC_VERSION")) return;
12
13function balise_FORMULAIRE_ETIQUETTES($p){
14
15        return calculer_balise_dynamique(
16                $p,
17                'FORMULAIRE_ETIQUETTES',
18                array(
19                        'type_boucle',
20                        $p->boucles[$p->id_boucle]->primary
21                )
22        );
23
24}
25
26function balise_FORMULAIRE_ETIQUETTES_stat($args, $filtres){
27
28        include_spip('base/connect_sql');
29        global $tables_jointures;
30
31        // Liste des paramètres autorisés
32        $params_ok = array('groupe', 'name', 'aide', 'proposer_login', 'remplacer', 'objet', 'uniquement_champ', 'explication', 'nuage', 'label');
33
34        // On enlève de la liste des arguments ce qui a été récupéré
35        $type_objet = array_shift($args);
36        $id_objet = array_shift($args);
37
38        // On considère que tout le reste doit être de la forme : param=valeur
39        $variables = array();
40        foreach ($args as $couple){
41                if (($pos = strpos($couple, "="))!==FALSE and in_array(($param = substr($couple, 0, $pos)), $params_ok)){
42                        $valeur = substr($couple, $pos+1);
43                        $variables["$param"] = $valeur;
44                }
45        }
46        extract($variables);
47
48        // initialisation du mode généré : tout le formulaire ou que le champ
49        // si on met rien ou n'importe quoi, ça donne false
50        // donc le formulaire complet
51        $uniquement_champ = isset($uniquement_champ) ? (strtolower($uniquement_champ)=="true") : false;
52
53        // initialisation de la petite explication
54        if (!isset($explication)) {
55                $explication = _T('etiquettes:explication');
56        } elseif ($explication=='false') {
57                $explication = false;
58        }
59
60        // initialisation du squelette d'aide pour le nuage
61        if (!isset($nuage)) {
62                $squelette_nuage = 'etiquettes_aide_nuage';
63        } else {
64                $squelette_nuage = 'etiquettes_aide_nuage_' . $nuage;
65        }
66
67        $cle_objet = '';
68
69        // initialisation de l'objet à lier
70        if (isset($objet)){
71                // on peut mettre "aucun" si c'est uniquement le champ
72                if ($uniquement_champ and $objet=='aucun'){
73                        $type_objet = $id_objet = false;
74                }
75                // ici on a mis explicitement un objet
76                // si c'est mal formé on s'arrête
77                elseif (preg_match("/^(.*)-([0-9]+)$/", $objet, $captures)==0) {
78                        return erreur_squelette(
79                                _T('etiquettes:zbug_objet_mal_forme',
80                                        array(
81                                                'champ' => '#FORMULAIRE_ETIQUETTES',
82                                                'objet' => $objet
83                                        )
84                                ), '');
85                }
86                else {
87                        $type_objet = $captures[1];
88                        $id_objet = $captures[2];
89                }
90
91                // on précise si ça vaut le coup
92                if ($type_objet and $id_objet){
93
94                        $id_objet = intval($id_objet);
95                        $type_objet = strtolower($type_objet);
96                        $cle_objet = id_table_objet($type_objet);
97
98                        // il faut vérifier s'il existe bien cet objet
99                        $reponse = sql_fetsel(
100                                $cle_objet,
101                                table_objet_sql($type_objet),
102                                $cle_objet . '=' . $id_objet
103                        );
104                        if (!$reponse)
105                                return erreur_squelette(
106                                        _T('etiquettes:zbug_objet_existe_pas',
107                                                array(
108                                                        'champ' => '#FORMULAIRE_ETIQUETTES',
109                                                        'type' => $type_objet,
110                                                        'id' => $id_objet
111                                                )
112                                        ), '');
113
114                }
115        } else {
116                // sinon on prend du contexte
117                $cle_objet = id_table_objet($type_objet);
118
119                // mais on vérifie si la balise est effectivement dans un contexte
120                if (!$type_objet OR $id_objet<=0)
121                        return erreur_squelette(
122                                _T('zbug_champ_hors_boucle',
123                                        array(
124                                                'champ' => '#FORMULAIRE_ETIQUETTES',
125                                        )
126                                ) . _T('etiquettes:zbug_et_parametre_manquant'), '');
127        }
128
129        $trouver_table = charger_fonction('trouver_table', 'base');
130
131        // on ne peut pas continuer si le type choisi n'est pas relié à des mots-clés
132        if (
133                $type_objet
134                AND $desc = $trouver_table(table_objet_sql($type_objet))
135                AND !in_array('mots',$desc['tables_jointures'])
136        )
137                return erreur_squelette(
138                        _T('etiquettes:zbug_pas_de_table_mots',
139                                array(
140                                        'type' => $type_objet,
141                                )
142                        ), '');
143
144        // initialisation du groupe de mots-clés
145        if (!isset($groupe))
146                $groupe = 'tags';
147
148        // On récupère l'id du groupe de mots
149        $reponse = sql_fetsel(
150                'id_groupe',
151                'spip_groupes_mots',
152                'titre=' . sql_quote($groupe)
153        );
154
155        // Si c'est un bon numéro on le garde
156        if (intval($reponse['id_groupe'])>0)
157                $id_groupe = intval($reponse['id_groupe']);
158        // Sinon il faut créer le groupe
159        else
160                $id_groupe = sql_insertq(
161                        'spip_groupes_mots',
162                        array(
163                                'titre' => $groupe,
164                                'minirezo' => 'oui',
165                                'unseul' => 'non',
166                                'obligatoire' => 'non',
167                                'tables_liees' => 'articles'
168                        )
169                );
170
171        // initialisation du mode d'ajout des mots-clés
172        // si on met rien ou n'importe quoi ça donne true
173        // donc en mode "remplacer"
174        $remplacer = isset($remplacer) ? !(strtolower($remplacer)=="false") : true;
175
176        // initialisation de la proposition de login en cas de mauvaise autorisation
177        // si on met rien ou n'importe quoi, ça donne false
178        // donc renvoie du vide si pas autorisé
179        $proposer_login =  isset($proposer_login) ? (strtolower($proposer_login)=="true") : false;
180
181        // initialisation du type d'aide
182        $aide = isset($aide) ? strtolower($aide) : '';
183        if (!strlen($aide) OR !in_array($aide, array("nuage", "autocompletion", "liste", "aucun", "aucune", "rien"))){
184                $aide_nuage = true;
185                $aide_autocompletion = true;
186                $aide_liste = false;
187        }
188        else {
189                $aide_nuage = ($aide=="nuage");
190                $aide_autocompletion = ($aide=="autocompletion");
191                $aide_liste = ($aide=="liste");
192        }
193        // on teste ensuite si les plugins sont bien présents
194        $aide_nuage &= defined('_DIR_PLUGIN_NUAGE');
195        $aide_autocompletion &= defined('_DIR_PLUGIN_SELECTEURGENERIQUE');
196
197        // initialisation du nom du champ
198        // pour le formulaire complet c'est automatique
199        // sinon on peut le choisir (sinon c'est aussi automatique)
200        if (!$uniquement_champ or !isset($name)) $name = 'etiquettes_' . etiquettes_produire_id($groupe, $type_objet, $id_objet);
201
202        return array(
203                $groupe, $id_groupe, $name, $aide_nuage,
204                $aide_autocompletion, $aide_liste, $remplacer,
205                $type_objet, $cle_objet, $id_objet, $proposer_login,
206                $uniquement_champ, $explication, $squelette_nuage,
207                (isset($label) ? $label : '')
208        );
209
210}
Note: See TracBrowser for help on using the repository browser.