85b5c243e77320eb1994e6a1e3914a9fee5c6109
[velocampus/web/www.git] / www / ecrire / action / editer_breve.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2011 *
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 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 // http://doc.spip.org/@action_editer_breve_dist
16 function action_editer_breve_dist($arg=null) {
17
18 if (is_null($arg)){
19 $securiser_action = charger_fonction('securiser_action', 'inc');
20 $arg = $securiser_action();
21 }
22
23 // Envoi depuis les boutons "publier/supprimer cette breve"
24 if (preg_match(',^(\d+)\Wstatut\W(\w+)$,', $arg, $r)) {
25 $id_breve = $r[1];
26 set_request('statut', $r[2]);
27 revisions_breves($id_breve);
28 }
29 // Envoi depuis le formulaire d'edition pour chgt de langue
30 else if (preg_match(',^(\d+)\W(\w+)$,', $arg, $r)) {
31 revisions_breves_langue($id_breve=$r[1], $r[2], _request('changer_lang'));
32 }
33 // Envoi depuis le formulaire d'edition d'une breve existante
34 else if ($id_breve = intval($arg)) {
35 revisions_breves($id_breve);
36 }
37 // Envoi depuis le formulaire de creation d'une breve
38 else if ($arg == 'oui') {
39 $id_breve = insert_breve(_request('id_parent'));
40 if ($id_breve) revisions_breves($id_breve);
41 }
42 // Erreur
43 else{
44 include_spip('inc/headers');
45 redirige_url_ecrire();
46 }
47
48 if (_request('redirect')) {
49 $redirect = parametre_url(urldecode(_request('redirect')),
50 'id_breve', $id_breve, '&');
51
52 include_spip('inc/headers');
53 redirige_par_entete($redirect);
54 }
55 else
56 return array($id_breve,'');
57 }
58
59 // http://doc.spip.org/@insert_breve
60 function insert_breve($id_rubrique) {
61
62 include_spip('inc/rubriques');
63
64 // Si id_rubrique vaut 0 ou n'est pas definie, creer la breve
65 // dans la premiere rubrique racine
66 if (!$id_rubrique = intval($id_rubrique)) {
67 $id_rubrique = sql_getfetsel("id_rubrique", "spip_rubriques", "id_parent=0",'', '0+titre,titre', "1");
68 }
69
70 // La langue a la creation : c'est la langue de la rubrique
71 $row = sql_fetsel("lang, id_secteur", "spip_rubriques", "id_rubrique=$id_rubrique");
72 $lang = $row['lang'];
73 $id_rubrique = $row['id_secteur']; // garantir la racine
74
75 $champs = array(
76 'id_rubrique' => $id_rubrique,
77 'statut' => 'prop',
78 'date_heure' => date('Y-m-d H:i:s'),
79 'lang' => $lang,
80 'langue_choisie' => 'non');
81
82 // Envoyer aux plugins
83 $champs = pipeline('pre_insertion',
84 array(
85 'args' => array(
86 'table' => 'spip_breves',
87 ),
88 'data' => $champs
89 )
90 );
91 $id_breve = sql_insertq("spip_breves", $champs);
92 pipeline('post_insertion',
93 array(
94 'args' => array(
95 'table' => 'spip_breves',
96 'id_objet' => $id_breve
97 ),
98 'data' => $champs
99 )
100 );
101 return $id_breve;
102 }
103
104
105 // Enregistre une revision de breve
106 // $c est un contenu (par defaut on prend le contenu via _request())
107 // http://doc.spip.org/@revisions_breves
108 function revisions_breves ($id_breve, $c=false) {
109
110 // champs normaux
111 if ($c === false) {
112 $c = array();
113 foreach (array(
114 'titre', 'texte', 'lien_titre', 'lien_url',
115 'id_parent', 'statut'
116 ) as $champ)
117 if (($a = _request($champ)) !== null)
118 $c[$champ] = $a;
119 }
120
121 // Si la breve est publiee, invalider les caches et demander sa reindexation
122 $t = sql_getfetsel("statut", "spip_breves", "id_breve=$id_breve");
123 if ($t == 'publie') {
124 $invalideur = "id='id_breve/$id_breve'";
125 $indexation = true;
126 }
127
128 include_spip('inc/modifier');
129 modifier_contenu('breve', $id_breve,
130 array(
131 'nonvide' => array('titre' => _T('info_sans_titre')),
132 'invalideur' => $invalideur,
133 'indexation' => $indexation
134 ),
135 $c);
136
137
138 // Changer le statut de la breve ?
139 $row = sql_fetsel("statut, id_rubrique,lang, langue_choisie", "spip_breves", "id_breve=$id_breve");
140
141 $id_rubrique = $row['id_rubrique'];
142 $statut_ancien = $statut = $row['statut'];
143 $langue_old = $row['lang'];
144 $langue_choisie_old = $row['langue_choisie'];
145
146 if (_request('statut', $c)
147 AND _request('statut', $c) != $statut
148 AND autoriser('publierdans', 'rubrique', $id_rubrique)) {
149 $statut = $champs['statut'] = _request('statut', $c);
150 }
151
152 // Changer de rubrique ?
153 // Verifier que la rubrique demandee est a la racine et differente
154 // de la rubrique actuelle
155 if ($id_parent = intval(_request('id_parent', $c))
156 AND $id_parent != $id_rubrique
157 AND (NULL !== ($lang=sql_getfetsel('lang', 'spip_rubriques', "id_parent=0 AND id_rubrique=$id_parent")))) {
158 $champs['id_rubrique'] = $id_parent;
159 // - changer sa langue (si heritee)
160 if ($langue_choisie_old != "oui") {
161 if ($lang != $langue_old)
162 $champs['lang'] = $lang;
163 }
164 // si la breve est publiee
165 // et que le demandeur n'est pas admin de la rubrique
166 // repasser la breve en statut 'prop'.
167 if ($statut == 'publie') {
168 if (!autoriser('publierdans','rubrique',$id_parent))
169 $champs['statut'] = $statut = 'prop';
170 }
171 }
172
173 if (!$champs) return;
174
175 sql_updateq('spip_breves', $champs, "id_breve=$id_breve");
176
177 //
178 // Post-modifications
179 //
180
181 // Invalider les caches
182 include_spip('inc/invalideur');
183 suivre_invalideur("id='id_breve/$id_breve'");
184
185 // Au besoin, changer le statut des rubriques concernees
186 include_spip('inc/rubriques');
187 calculer_rubriques_if($id_rubrique, $champs, $statut_ancien);
188
189 // Notifications
190 if ($notifications = charger_fonction('notifications', 'inc')) {
191 $notifications('instituerbreve', $id_breve,
192 array('statut' => $statut, 'statut_ancien' => $statut_ancien)
193 );
194 }
195
196 }
197
198 // http://doc.spip.org/@revisions_breves_langue
199 function revisions_breves_langue($id_breve, $id_rubrique, $changer_lang)
200 {
201 if ($changer_lang == "herit") {
202 $row = sql_fetsel("lang", "spip_rubriques", "id_rubrique=$id_rubrique");
203 $langue_parent = $row['lang'];
204 sql_updateq('spip_breves', array('lang'=>$langue_parent, 'langue_choisie'=>'non'), "id_breve=$id_breve");
205 } else {
206 sql_updateq('spip_breves', array('lang'=>$changer_lang, 'langue_choisie'=>'oui'), "id_breve=$id_breve");
207 include_spip('inc/rubriques');
208 $langues = calculer_langues_utilisees();
209 ecrire_meta('langues_utilisees', $langues);
210 }
211
212 }
213
214 ?>