3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2020 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
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 \***************************************************************************/
14 * Gestion du formulaire d'édition d'un mot
16 * @package SPIP\Mots\Formulaires
18 if (!defined('_ECRIRE_INC_VERSION')) {
22 include_spip('inc/actions');
23 include_spip('inc/editer');
26 * Chargement du formulaire d'édition d'un mot
28 * @see formulaires_editer_objet_charger()
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,
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
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.
48 * Environnement du formulaire
50 function formulaires_editer_mot_charger_dist(
57 $config_fonc = 'mots_edit_config',
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'];
66 if (test_formulaire_inclus_par_modele()) {
67 if (intval($id_mot) and !autoriser('modifier', 'mot', intval($id_mot))) {
68 $valeurs['editable'] = '';
73 if ($associer_objet) {
74 if (intval($associer_objet)) {
75 // compat avec l'appel de la forme ajouter_id_article
77 $id_objet = intval($associer_objet);
79 list($objet, $id_objet) = explode('|', $associer_objet);
82 $valeurs['table'] = ($associer_objet ?
table_objet($objet) : '');
84 // Si nouveau et titre dans l'url : fixer le titre
86 and strlen($titre = _request('titre'))
88 $valeurs['titre'] = $titre;
96 * Identifier le formulaire en faisant abstraction des paramètres qui
97 * ne representent pas l'objet edité
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
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.
119 function formulaires_editer_mot_identifier_dist(
123 $associer_objet = '',
126 $config_fonc = 'mots_edit_config',
130 return serialize(array(intval($id_mot), $associer_objet));
134 * Choix par défaut des options de présentation
137 * Valeurs de la ligne SQL d'un mot, si connu
139 * Configuration pour le formulaire
141 function mots_edit_config($row) {
142 global $spip_ecran, $spip_lang;
144 $config = $GLOBALS['meta'];
145 $config['lignes'] = ($spip_ecran == 'large') ?
8 : 5;
146 $config['langue'] = $spip_lang;
147 $config['restreint'] = false;
153 * Vérification du formulaire d'édition d'un mot
155 * @see formulaires_editer_objet_verifier()
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
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.
175 * Tableau des erreurs
177 function formulaires_editer_mot_verifier_dist(
181 $associer_objet = '',
184 $config_fonc = 'mots_edit_config',
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
193 // on ne fait la verification que si c'est une creation de mot ou un retitrage
195 or supprimer_numero(_request('titre'))
196 !== supprimer_numero(sql_getfetsel('titre', 'spip_mots', 'id_mot=' . intval($id_mot)))
198 if (!count($erreurs) and !_request('confirm_titre_mot')) {
201 'titre REGEXP ' . sql_quote('^([0-9]+[.] )?' . preg_quote(supprimer_numero(_request('titre'))) . '$')
202 . ' AND id_mot<>' . intval($id_mot)
205 _T('mots:avis_doublon_mot_cle')
206 . " <input type='hidden' name='confirm_titre_mot' value='1' />";
215 * Traitements du formulaire d'édition d'un mot
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
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.
235 * Retour des traitements
237 function formulaires_editer_mot_traiter_dist(
241 $associer_objet = '',
244 $config_fonc = 'mots_edit_config',
249 set_request('redirect', '');
250 $action_editer = charger_fonction('editer_mot', 'action');
251 list($id_mot, $err) = $action_editer();
253 $res['message_erreur'] = $err;
255 $res['message_ok'] = '';
256 $res['id_mot'] = $id_mot;
258 if (strncmp($retour, 'javascript:', 11) == 0) {
259 $res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/' . substr($retour, 11) . '/*]]>*/</script>';
260 $res['editable'] = true;
262 $res['redirect'] = $retour;
263 if (strlen(parametre_url($retour, 'id_mot'))) {
264 $res['redirect'] = parametre_url($res['redirect'], 'id_mot', $id_mot);
269 if ($associer_objet) {
270 if (intval($associer_objet)) {
271 // compat avec l'appel de la forme ajouter_id_article
273 $id_objet = intval($associer_objet);
275 list($objet, $id_objet) = explode('|', $associer_objet);
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, '&');