[SPIP] v3.2.12 -> v3.2.12 - Reinstallation avec le spip_loader
[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-2020 *
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 (test_formulaire_inclus_par_modele()) {
67 if (intval($id_mot) and !autoriser('modifier', 'mot', intval($id_mot))) {
68 $valeurs['editable'] = '';
69 }
70 }
71
72
73 if ($associer_objet) {
74 if (intval($associer_objet)) {
75 // compat avec l'appel de la forme ajouter_id_article
76 $objet = 'article';
77 $id_objet = intval($associer_objet);
78 } else {
79 list($objet, $id_objet) = explode('|', $associer_objet);
80 }
81 }
82 $valeurs['table'] = ($associer_objet ? table_objet($objet) : '');
83
84 // Si nouveau et titre dans l'url : fixer le titre
85 if ($id_mot == 'oui'
86 and strlen($titre = _request('titre'))
87 ) {
88 $valeurs['titre'] = $titre;
89 }
90
91 return $valeurs;
92 }
93
94
95 /**
96 * Identifier le formulaire en faisant abstraction des paramètres qui
97 * ne representent pas l'objet edité
98 *
99 * @param int|string $id_mot
100 * Identifiant du mot. 'new' pour un nouveau mot.
101 * @param int $id_groupe
102 * Identifiant du groupe parent (si connu)
103 * @param string $retour
104 * URL de redirection après le traitement
105 * @param string $associer_objet
106 * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet,
107 * tel que 'article|3'
108 * @param string $dummy1 ?
109 * @param string $dummy2 ?
110 * @param string $config_fonc
111 * Nom de la fonction ajoutant des configurations particulières au formulaire
112 * @param array $row
113 * Valeurs de la ligne SQL du mot, si connu
114 * @param string $hidden
115 * Contenu HTML ajouté en même temps que les champs cachés du formulaire.
116 * @return string
117 * Hash du formulaire
118 **/
119 function formulaires_editer_mot_identifier_dist(
120 $id_mot = 'new',
121 $id_groupe = 0,
122 $retour = '',
123 $associer_objet = '',
124 $dummy1 = '',
125 $dummy2 = '',
126 $config_fonc = 'mots_edit_config',
127 $row = array(),
128 $hidden = ''
129 ) {
130 return serialize(array(intval($id_mot), $associer_objet));
131 }
132
133 /**
134 * Choix par défaut des options de présentation
135 *
136 * @param array $row
137 * Valeurs de la ligne SQL d'un mot, si connu
138 * return array
139 * Configuration pour le formulaire
140 */
141 function mots_edit_config($row) {
142 global $spip_ecran, $spip_lang;
143
144 $config = $GLOBALS['meta'];
145 $config['lignes'] = ($spip_ecran == 'large') ? 8 : 5;
146 $config['langue'] = $spip_lang;
147 $config['restreint'] = false;
148
149 return $config;
150 }
151
152 /**
153 * Vérification du formulaire d'édition d'un mot
154 *
155 * @see formulaires_editer_objet_verifier()
156 *
157 * @param int|string $id_mot
158 * Identifiant du mot. 'new' pour un nouveau mot.
159 * @param int $id_groupe
160 * Identifiant du groupe parent (si connu)
161 * @param string $retour
162 * URL de redirection après le traitement
163 * @param string $associer_objet
164 * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet,
165 * tel que 'article|3'
166 * @param string $dummy1 ?
167 * @param string $dummy2 ?
168 * @param string $config_fonc
169 * Nom de la fonction ajoutant des configurations particulières au formulaire
170 * @param array $row
171 * Valeurs de la ligne SQL du mot, si connu
172 * @param string $hidden
173 * Contenu HTML ajouté en même temps que les champs cachés du formulaire.
174 * @return array
175 * Tableau des erreurs
176 **/
177 function formulaires_editer_mot_verifier_dist(
178 $id_mot = 'new',
179 $id_groupe = 0,
180 $retour = '',
181 $associer_objet = '',
182 $dummy1 = '',
183 $dummy2 = '',
184 $config_fonc = 'mots_edit_config',
185 $row = array(),
186 $hidden = ''
187 ) {
188
189 $erreurs = formulaires_editer_objet_verifier('mot', $id_mot, array('titre'));
190 // verifier qu'un mot du meme groupe n'existe pas avec le meme titre
191 // la comparaison accepte un numero absent ou different
192 // sinon avertir
193 // on ne fait la verification que si c'est une creation de mot ou un retitrage
194 if (!intval($id_mot)
195 or supprimer_numero(_request('titre'))
196 !== supprimer_numero(sql_getfetsel('titre', 'spip_mots', 'id_mot=' . intval($id_mot)))
197 ) {
198 if (!count($erreurs) and !_request('confirm_titre_mot')) {
199 if (sql_countsel(
200 'spip_mots',
201 'titre REGEXP ' . sql_quote('^([0-9]+[.] )?' . preg_quote(supprimer_numero(_request('titre'))) . '$')
202 . ' AND id_mot<>' . intval($id_mot)
203 )) {
204 $erreurs['titre'] =
205 _T('mots:avis_doublon_mot_cle')
206 . " <input type='hidden' name='confirm_titre_mot' value='1' />";
207 }
208 }
209 }
210
211 return $erreurs;
212 }
213
214 /**
215 * Traitements du formulaire d'édition d'un mot
216 *
217 * @param int|string $id_mot
218 * Identifiant du mot. 'new' pour un nouveau mot.
219 * @param int $id_groupe
220 * Identifiant du groupe parent (si connu)
221 * @param string $retour
222 * URL de redirection après le traitement
223 * @param string $associer_objet
224 * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet,
225 * tel que 'article|3'
226 * @param string $dummy1 ?
227 * @param string $dummy2 ?
228 * @param string $config_fonc
229 * Nom de la fonction ajoutant des configurations particulières au formulaire
230 * @param array $row
231 * Valeurs de la ligne SQL du mot, si connu
232 * @param string $hidden
233 * Contenu HTML ajouté en même temps que les champs cachés du formulaire.
234 * @return array
235 * Retour des traitements
236 **/
237 function formulaires_editer_mot_traiter_dist(
238 $id_mot = 'new',
239 $id_groupe = 0,
240 $retour = '',
241 $associer_objet = '',
242 $dummy1 = '',
243 $dummy2 = '',
244 $config_fonc = 'mots_edit_config',
245 $row = array(),
246 $hidden = ''
247 ) {
248 $res = array();
249 set_request('redirect', '');
250 $action_editer = charger_fonction('editer_mot', 'action');
251 list($id_mot, $err) = $action_editer();
252 if ($err) {
253 $res['message_erreur'] = $err;
254 } else {
255 $res['message_ok'] = '';
256 $res['id_mot'] = $id_mot;
257 if ($retour) {
258 if (strncmp($retour, 'javascript:', 11) == 0) {
259 $res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/' . substr($retour, 11) . '/*]]>*/</script>';
260 $res['editable'] = true;
261 } else {
262 $res['redirect'] = $retour;
263 if (strlen(parametre_url($retour, 'id_mot'))) {
264 $res['redirect'] = parametre_url($res['redirect'], 'id_mot', $id_mot);
265 }
266 }
267 }
268
269 if ($associer_objet) {
270 if (intval($associer_objet)) {
271 // compat avec l'appel de la forme ajouter_id_article
272 $objet = 'article';
273 $id_objet = intval($associer_objet);
274 } else {
275 list($objet, $id_objet) = explode('|', $associer_objet);
276 }
277 if ($objet and $id_objet and autoriser('modifier', $objet, $id_objet)) {
278 include_spip('action/editer_mot');
279 mot_associer($id_mot, array($objet => $id_objet));
280 if (isset($res['redirect'])) {
281 $res['redirect'] = parametre_url($res['redirect'], 'id_lien_ajoute', $id_mot, '&');
282 }
283 }
284 }
285 }
286
287 return $res;
288 }