squellete2
[aidenligne_francais_universite.git] / ecrire / action / editer_breve.php
CommitLineData
c495c100
P
1<?php
2
3/***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2007 *
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
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15include_spip('inc/auth');
16include_spip("inc/lang");
17
18// http://doc.spip.org/@action_editer_breve_dist
19function action_editer_breve_dist() {
20
21 $securiser_action = charger_fonction('securiser_action', 'inc');
22 $arg = $securiser_action();
23
24 // Envoi depuis les boutons "publier/supprimer cette breve"
25 if (preg_match(',^(\d+)\Wstatut\W(\w+)$,', $arg, $r)) {
26 $id_breve = $r[1];
27 set_request('statut', $r[2]);
28 revisions_breves($id_breve);
29 }
30 // Envoi depuis le formulaire d'edition pour chgt de langue
31 else if (preg_match(',^(\d+)\W(\w+)$,', $arg, $r)) {
32 revisions_breves_langue($id_breve=$r[1], $r[2], _request('changer_lang'));
33 }
34 // Envoi depuis le formulaire d'edition d'une breve existante
35 else if ($id_breve = intval($arg)) {
36 revisions_breves($id_breve);
37 }
38 // Envoi depuis le formulaire de creation d'une breve
39 else if ($arg == 'oui') {
40 $id_breve = insert_breve(_request('id_parent'));
41 revisions_breves($id_breve);
42 }
43 // Erreur
44 else{
45 redirige_par_entete('./');
46 }
47
48 // Rediriger le navigateur
49 $redirect = parametre_url(urldecode(_request('redirect')),
50 'id_breve', $id_breve, '&');
51
52 redirige_par_entete($redirect);
53}
54
55// http://doc.spip.org/@insert_breve
56function insert_breve($id_rubrique) {
57
58 include_spip('base/abstract_sql');
59 include_spip('inc/rubriques');
60
61 // Si id_rubrique vaut 0 ou n'est pas definie, creer la breve
62 // dans la premiere rubrique racine
63 if (!$id_rubrique = intval($id_rubrique)) {
64 $row = spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0 ORDER by 0+titre,titre LIMIT 1"));
65 $id_rubrique = $row['id_rubrique'];
66 }
67
68 // La langue a la creation : c'est la langue de la rubrique
69 $row = spip_fetch_array(spip_query("SELECT lang, id_secteur FROM spip_rubriques WHERE id_rubrique=$id_rubrique"));
70 $choisie = 'non';
71 $lang = $row['lang'];
72 $id_rubrique = $row['id_secteur']; // garantir la racine
73
74 $id_breve = spip_abstract_insert("spip_breves",
75 "(id_rubrique, statut, date_heure, lang, langue_choisie)",
76 "($id_rubrique, 'prop', NOW(), '$lang', '$choisie')");
77 return $id_breve;
78}
79
80
81// Enregistre une revision de breve
82// $c est un contenu (par defaut on prend le contenu via _request())
83// http://doc.spip.org/@revisions_breves
84function revisions_breves ($id_breve, $c=false) {
85 include_spip('inc/filtres');
86 include_spip('inc/rubriques');
87 include_spip('inc/autoriser');
88
89 // Ces champs seront pris nom pour nom (_POST[x] => spip_breves.x)
90 $champs_normaux = array('titre', 'texte', 'lien_titre', 'lien_url', 'url_propre');
91
92 // ne pas accepter de titre vide
93 if (_request('titre', $c) === '')
94 $c = set_request('titre', _T('ecrire:info_sans_titre'), $c);
95
96 $champs = array();
97 foreach ($champs_normaux as $champ) {
98 $val = _request($champ, $c);
99 if ($val !== NULL)
100 $champs[$champ] = corriger_caracteres($val);
101 }
102
103 // Changer le statut de la breve ?
104 $s = spip_query("SELECT statut, id_rubrique FROM spip_breves WHERE id_breve=$id_breve");
105 $row = spip_fetch_array($s);
106 $id_rubrique = $row['id_rubrique'];
107 $statut = $row['statut'];
108
109 if (_request('statut', $c)
110 AND _request('statut', $c) != $statut
111 AND autoriser('publierdans', 'rubrique', $id_rubrique)) {
112 $statut = $champs['statut'] = _request('statut', $c);
113 }
114
115 // Changer de rubrique ?
116 // Verifier que la rubrique demandee est a la racine et differente
117 // de la rubrique actuelle
118 if ($id_parent = intval(_request('id_parent', $c))
119 AND $id_parent != $id_rubrique
120 AND (spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0 AND id_rubrique=$id_parent")))) {
121 $champs['id_rubrique'] = $id_parent;
122
123 // si la breve est publiee
124 // et que le demandeur n'est pas admin de la rubrique
125 // repasser la breve en statut 'prop'.
126 if ($statut == 'publie') {
127 if (!autoriser('publierdans','rubrique',$id_parent))
128 $champs['statut'] = $statut = 'prop';
129 }
130 }
131
132 // recuperer les extras
133 if ($GLOBALS['champs_extra']) {
134 include_spip('inc/extra');
135 if ($extra = extra_update('breves', $id_breve, $c))
136 $champs['extra'] = $extra;
137 }
138
139 // Envoyer aux plugins
140 include_spip('inc/modifier'); # temporaire pour eviter un bug
141 $champs = pipeline('pre_edition',
142 array(
143 'args' => array(
144 'table' => 'spip_breves',
145 'id_objet' => $id_breve
146 ),
147 'data' => $champs
148 )
149 );
150
151 $update = array();
152 foreach ($champs as $champ => $val)
153 $update[] = $champ . '=' . _q($val);
154
155 if (!count($update)) return;
156
157 spip_query("UPDATE spip_breves SET ".join(', ',$update)." WHERE id_breve=$id_breve");
158
159 // marquer le fait que la breve est travaillee par toto a telle date
160 // une alerte sera donnee aux autres redacteurs sur exec=breves_voir
161 if ($GLOBALS['meta']['articles_modif'] != 'non') {
162 include_spip('inc/drapeau_edition');
163 signale_edition ($id_breve, $GLOBALS['auteur_session'], 'breve');
164 }
165
166 // Si on deplace la breve
167 // - propager les secteurs
168 // - changer sa langue (si heritee)
169 if (isset($champs['id_rubrique'])) {
170 propager_les_secteurs();
171
172 $row = spip_fetch_array(spip_query("SELECT lang, langue_choisie FROM spip_breves WHERE id_breve=$id_breve"));
173 $langue_old = $row['lang'];
174 $langue_choisie_old = $row['langue_choisie'];
175
176 if ($langue_choisie_old != "oui") {
177 $row = spip_fetch_array(spip_query("SELECT lang FROM spip_rubriques WHERE id_rubrique=$id_rubrique"));
178 $langue_new = $row['lang'];
179 if ($langue_new != $langue_old)
180 spip_query("UPDATE spip_breves SET lang = '$langue_new' WHERE id_breve = $id_breve");
181 }
182 }
183
184 //
185 // Post-modifications
186 //
187
188 // Invalider les caches
189 if ($statut == 'publie') {
190 include_spip('inc/invalideur');
191 suivre_invalideur("id='id_breve/$id_breve'");
192 }
193
194 // Demander une reindexation de la breve
195 if ($statut == 'publie') {
196 include_spip('inc/indexation');
197 marquer_indexer('spip_breves', $id_breve);
198 }
199
200 // Recalculer les rubriques (statuts et dates) si l'on deplace
201 // une breve publiee, ou si l'on publie/depublie une breve
202 if (isset($champs['statut'])
203 OR ($statut == 'publie' AND isset($champ['id_rubrique']))
204 ) {
205 calculer_rubriques();
206 }
207
208 // Notification ?
209 pipeline('post_edition',
210 array(
211 'args' => array(
212 'table' => 'spip_breves',
213 'id_objet' => $id_breve
214 ),
215 'data' => $champs
216 )
217 );
218}
219
220// http://doc.spip.org/@revisions_breves_langue
221function revisions_breves_langue($id_breve, $id_rubrique, $changer_lang)
222{
223 if ($changer_lang == "herit") {
224 $row = spip_fetch_array(spip_query("SELECT lang FROM spip_rubriques WHERE id_rubrique=$id_rubrique"));
225 $langue_parent = $row['lang'];
226 spip_query("UPDATE spip_breves SET lang=" . _q($langue_parent) . ", langue_choisie='non' WHERE id_breve=$id_breve");
227 calculer_langues_utilisees();
228 } else spip_query("UPDATE spip_breves SET lang=" . _q($changer_lang) . ", langue_choisie='oui' WHERE id_breve=$id_breve");
229}
230
231?>