8ca8c4996b426a79b919fe2ca0a6549bf9a0d2ea
[lhc/web/www.git] / www / plugins-dist / mots / formulaires / editer_mot.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 /**
14 * Gestion du formulaire d'édition d'un mot
15 *
16 * @package SPIP\Mots\Formulaires
17 **/
18 if (!defined('_ECRIRE_INC_VERSION')) {
19 return;
20 }
21
22 include_spip('inc/actions');
23 include_spip('inc/editer');
24
25 /**
26 * Chargement du formulaire d'édition d'un mot
27 *
28 * @see formulaires_editer_objet_charger()
29 *
30 * @param int|string $id_mot
31 * Identifiant du mot. 'new' pour un nouveau mot.
32 * @param int $id_groupe
33 * Identifiant du groupe parent (si connu)
34 * @param string $retour
35 * URL de redirection après le traitement
36 * @param string $associer_objet
37 * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet,
38 * tel que 'article|3'
39 * @param string $dummy1 ?
40 * @param string $dummy2 ?
41 * @param string $config_fonc
42 * Nom de la fonction ajoutant des configurations particulières au formulaire
43 * @param array $row
44 * Valeurs de la ligne SQL du mot, si connu
45 * @param string $hidden
46 * Contenu HTML ajouté en même temps que les champs cachés du formulaire.
47 * @return array
48 * Environnement du formulaire
49 **/
50 function formulaires_editer_mot_charger_dist(
51 $id_mot = 'new',
52 $id_groupe = 0,
53 $retour = '',
54 $associer_objet = '',
55 $dummy1 = '',
56 $dummy2 = '',
57 $config_fonc = 'mots_edit_config',
58 $row = array(),
59 $hidden = ''
60 ) {
61 $valeurs = formulaires_editer_objet_charger('mot', $id_mot, $id_groupe, '', $retour, $config_fonc, $row, $hidden);
62 if ($valeurs['id_parent'] && !$valeurs['id_groupe']) {
63 $valeurs['id_groupe'] = $valeurs['id_parent'];
64 }
65
66 if ($associer_objet) {
67 if (intval($associer_objet)) {
68 // compat avec l'appel de la forme ajouter_id_article
69 $objet = 'article';
70 $id_objet = intval($associer_objet);
71 } else {
72 list($objet, $id_objet) = explode('|', $associer_objet);
73 }
74 }
75 $valeurs['table'] = ($associer_objet ? table_objet($objet) : '');
76
77 // Si nouveau et titre dans l'url : fixer le titre
78 if ($id_mot == 'oui'
79 and strlen($titre = _request('titre'))
80 ) {
81 $valeurs['titre'] = $titre;
82 }
83
84 return $valeurs;
85 }
86
87
88 /**
89 * Identifier le formulaire en faisant abstraction des paramètres qui
90 * ne representent pas l'objet edité
91 *
92 * @param int|string $id_mot
93 * Identifiant du mot. 'new' pour un nouveau mot.
94 * @param int $id_groupe
95 * Identifiant du groupe parent (si connu)
96 * @param string $retour
97 * URL de redirection après le traitement
98 * @param string $associer_objet
99 * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet,
100 * tel que 'article|3'
101 * @param string $dummy1 ?
102 * @param string $dummy2 ?
103 * @param string $config_fonc
104 * Nom de la fonction ajoutant des configurations particulières au formulaire
105 * @param array $row
106 * Valeurs de la ligne SQL du mot, si connu
107 * @param string $hidden
108 * Contenu HTML ajouté en même temps que les champs cachés du formulaire.
109 * @return string
110 * Hash du formulaire
111 **/
112 function formulaires_editer_mot_identifier_dist(
113 $id_mot = 'new',
114 $id_groupe = 0,
115 $retour = '',
116 $associer_objet = '',
117 $dummy1 = '',
118 $dummy2 = '',
119 $config_fonc = 'mots_edit_config',
120 $row = array(),
121 $hidden = ''
122 ) {
123 return serialize(array(intval($id_mot), $associer_objet));
124 }
125
126 /**
127 * Choix par défaut des options de présentation
128 *
129 * @param array $row
130 * Valeurs de la ligne SQL d'un mot, si connu
131 * return array
132 * Configuration pour le formulaire
133 */
134 function mots_edit_config($row) {
135 global $spip_ecran, $spip_lang;
136
137 $config = $GLOBALS['meta'];
138 $config['lignes'] = ($spip_ecran == 'large') ? 8 : 5;
139 $config['langue'] = $spip_lang;
140 $config['restreint'] = false;
141
142 return $config;
143 }
144
145 /**
146 * Vérification du formulaire d'édition d'un mot
147 *
148 * @see formulaires_editer_objet_verifier()
149 *
150 * @param int|string $id_mot
151 * Identifiant du mot. 'new' pour un nouveau mot.
152 * @param int $id_groupe
153 * Identifiant du groupe parent (si connu)
154 * @param string $retour
155 * URL de redirection après le traitement
156 * @param string $associer_objet
157 * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet,
158 * tel que 'article|3'
159 * @param string $dummy1 ?
160 * @param string $dummy2 ?
161 * @param string $config_fonc
162 * Nom de la fonction ajoutant des configurations particulières au formulaire
163 * @param array $row
164 * Valeurs de la ligne SQL du mot, si connu
165 * @param string $hidden
166 * Contenu HTML ajouté en même temps que les champs cachés du formulaire.
167 * @return array
168 * Tableau des erreurs
169 **/
170 function formulaires_editer_mot_verifier_dist(
171 $id_mot = 'new',
172 $id_groupe = 0,
173 $retour = '',
174 $associer_objet = '',
175 $dummy1 = '',
176 $dummy2 = '',
177 $config_fonc = 'mots_edit_config',
178 $row = array(),
179 $hidden = ''
180 ) {
181
182 $erreurs = formulaires_editer_objet_verifier('mot', $id_mot, array('titre'));
183 // verifier qu'un mot du meme groupe n'existe pas avec le meme titre
184 // la comparaison accepte un numero absent ou different
185 // sinon avertir
186 // on ne fait la verification que si c'est une creation de mot ou un retitrage
187 if (!intval($id_mot)
188 or supprimer_numero(_request('titre'))
189 !== supprimer_numero(sql_getfetsel('titre', 'spip_mots', 'id_mot=' . intval($id_mot)))
190 ) {
191 if (!count($erreurs) and !_request('confirm_titre_mot')) {
192 if (sql_countsel(
193 'spip_mots',
194 'titre REGEXP ' . sql_quote('^([0-9]+[.] )?' . preg_quote(supprimer_numero(_request('titre'))) . '$')
195 . ' AND id_mot<>' . intval($id_mot)
196 )) {
197 $erreurs['titre'] =
198 _T('mots:avis_doublon_mot_cle')
199 . " <input type='hidden' name='confirm_titre_mot' value='1' />";
200 }
201 }
202 }
203
204 return $erreurs;
205 }
206
207 /**
208 * Traitements du formulaire d'édition d'un mot
209 *
210 * @param int|string $id_mot
211 * Identifiant du mot. 'new' pour un nouveau mot.
212 * @param int $id_groupe
213 * Identifiant du groupe parent (si connu)
214 * @param string $retour
215 * URL de redirection après le traitement
216 * @param string $associer_objet
217 * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet,
218 * tel que 'article|3'
219 * @param string $dummy1 ?
220 * @param string $dummy2 ?
221 * @param string $config_fonc
222 * Nom de la fonction ajoutant des configurations particulières au formulaire
223 * @param array $row
224 * Valeurs de la ligne SQL du mot, si connu
225 * @param string $hidden
226 * Contenu HTML ajouté en même temps que les champs cachés du formulaire.
227 * @return array
228 * Retour des traitements
229 **/
230 function formulaires_editer_mot_traiter_dist(
231 $id_mot = 'new',
232 $id_groupe = 0,
233 $retour = '',
234 $associer_objet = '',
235 $dummy1 = '',
236 $dummy2 = '',
237 $config_fonc = 'mots_edit_config',
238 $row = array(),
239 $hidden = ''
240 ) {
241 $res = array();
242 set_request('redirect', '');
243 $action_editer = charger_fonction('editer_mot', 'action');
244 list($id_mot, $err) = $action_editer();
245 if ($err) {
246 $res['message_erreur'] = $err;
247 } else {
248 $res['message_ok'] = '';
249 $res['id_mot'] = $id_mot;
250 if ($retour) {
251 if (strncmp($retour, 'javascript:', 11) == 0) {
252 $res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/' . substr($retour, 11) . '/*]]>*/</script>';
253 $res['editable'] = true;
254 } else {
255 $res['redirect'] = $retour;
256 if (strlen(parametre_url($retour, 'id_mot'))) {
257 $res['redirect'] = parametre_url($res['redirect'], 'id_mot', $id_mot);
258 }
259 }
260 }
261
262 if ($associer_objet) {
263 if (intval($associer_objet)) {
264 // compat avec l'appel de la forme ajouter_id_article
265 $objet = 'article';
266 $id_objet = intval($associer_objet);
267 } else {
268 list($objet, $id_objet) = explode('|', $associer_objet);
269 }
270 if ($objet and $id_objet and autoriser('modifier', $objet, $id_objet)) {
271 include_spip('action/editer_mot');
272 mot_associer($id_mot, array($objet => $id_objet));
273 if (isset($res['redirect'])) {
274 $res['redirect'] = parametre_url($res['redirect'], 'id_lien_ajoute', $id_mot, '&');
275 }
276 }
277 }
278 }
279
280 return $res;
281 }