source: spip-zone/_core_/plugins/breves/action/editer_breve.php

Last change on this file was 113294, checked in by spip.franck@…, 11 months ago

Il parait que le futur c'est maintenant :-D

File size: 8.3 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2019                                                *
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 de l'action editer_breve
15 *
16 * @package SPIP\Breves\Actions
17 */
18if (!defined('_ECRIRE_INC_VERSION')) {
19        return;
20}
21
22/**
23 * Action d'édition d'une brève dans la base de données dont
24 * l'identifiant est donné en paramètre de cette fonction ou
25 * en argument de l'action sécurisée
26 *
27 * Si aucun identifiant n'est donné, on crée alors une nouvelle brève.
28 *
29 * @param null|int $arg
30 *     Identifiant de la brève. En absence utilise l'argument
31 *     de l'action sécurisée.
32 * @return array
33 *     Liste : identifiant de la brève, texte d'erreur éventuel
34 **/
35function action_editer_breve_dist($arg = null) {
36
37        if (is_null($arg)) {
38                $securiser_action = charger_fonction('securiser_action', 'inc');
39                $arg = $securiser_action();
40        }
41
42        // Envoi depuis le formulaire d'edition d'une breve
43        if (!$id_breve = intval($arg)) {
44                $id_breve = breve_inserer(_request('id_parent'));
45        }
46
47        if (!$id_breve) {
48                return array(0, '');
49        } // erreur
50
51        $err = breve_modifier($id_breve);
52
53        return array($id_breve, $err);
54}
55
56
57/**
58 * Insertion d'une brève dans une rubrique
59 *
60 * @pipeline_appel pre_insertion
61 * @pipeline_appel post_insertion
62 *
63 * @param int $id_rubrique
64 *     Identifiant de la rubrique
65 * @param array|null $set
66 * @return int
67 *     Identifiant de la nouvelle brève.
68 */
69function breve_inserer($id_rubrique, $set = null) {
70
71        include_spip('inc/rubriques');
72
73        // Si id_rubrique vaut 0 ou n'est pas definie, creer la breve
74        // dans la premiere rubrique racine
75        if (!$id_rubrique = intval($id_rubrique)) {
76                $id_rubrique = sql_getfetsel('id_rubrique', 'spip_rubriques', 'id_parent=0', '', '0+titre,titre', '1');
77        }
78
79        // La langue a la creation : c'est la langue de la rubrique
80        $row = sql_fetsel('lang, id_secteur', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique));
81        $lang = $row['lang'];
82        $id_rubrique = $row['id_secteur']; // garantir la racine
83
84        $champs = array(
85                'id_rubrique' => $id_rubrique,
86                'statut' => 'prop',
87                'date_heure' => date('Y-m-d H:i:s'),
88                'lang' => $lang,
89                'langue_choisie' => 'non'
90        );
91
92        if ($set) {
93                $champs = array_merge($champs, $set);
94        }
95
96        // Envoyer aux plugins
97        $champs = pipeline(
98                'pre_insertion',
99                array(
100                        'args' => array(
101                                'table' => 'spip_breves',
102                        ),
103                        'data' => $champs
104                )
105        );
106        $id_breve = sql_insertq('spip_breves', $champs);
107        pipeline(
108                'post_insertion',
109                array(
110                        'args' => array(
111                                'table' => 'spip_breves',
112                                'id_objet' => $id_breve
113                        ),
114                        'data' => $champs
115                )
116        );
117
118        return $id_breve;
119}
120
121
122/**
123 * Modifier une brève en base
124 *
125 * @param int $id_breve
126 *     Identifiant de la brève à modifier
127 * @param array|null $set
128 *     Couples (colonne => valeur) de données à modifier.
129 *     En leur absence, on cherche les données dans les champs éditables
130 *     qui ont été postés (via _request())
131 * @return string|null
132 *     Chaîne vide si aucune erreur,
133 *     Null si aucun champ à modifier,
134 *     Chaîne contenant un texte d'erreur sinon.
135 */
136function breve_modifier($id_breve, $set = null) {
137
138        include_spip('inc/modifier');
139        $c = collecter_requests(
140                // white list
141                array('titre', 'texte', 'lien_titre', 'lien_url'),
142                // black list
143                array('id_parent', 'statut'),
144                // donnees eventuellement fournies
145                $set
146        );
147
148        $invalideur = '';
149        $indexation = false;
150
151        // Si la breve est publiee, invalider les caches et demander sa reindexation
152        $t = sql_getfetsel('statut', 'spip_breves', 'id_breve='.intval($id_breve));
153        if ($t == 'publie') {
154                $invalideur = "id='breve/$id_breve'";
155                $indexation = true;
156        }
157
158        if ($err = objet_modifier_champs(
159                'breve',
160                $id_breve,
161                array(
162                        'data' => $set,
163                        'nonvide' => array('titre' => _T('breves:titre_nouvelle_breve') . ' ' . _T('info_numero_abbreviation') . $id_breve),
164                        'invalideur' => $invalideur,
165                        'indexation' => $indexation
166                ),
167                $c
168        )) {
169                return $err;
170        }
171
172        $c = collecter_requests(array('id_parent', 'statut'), array(), $set);
173        $err = breve_instituer($id_breve, $c);
174
175        return $err;
176}
177
178
179/**
180 * Instituer une brève : modifier son statut ou son parent
181 *
182 * @pipeline_appel pre_insertion
183 * @pipeline_appel post_insertion
184 *
185 * @param int $id_breve
186 *     Identifiant de la brève
187 * @param array $c
188 *     Couples (colonne => valeur) des données à instituer
189 * @return string|null
190 *     Null si aucun champ à modifier, chaîne vide sinon.
191 */
192function breve_instituer($id_breve, $c) {
193        $champs = array();
194
195        // Changer le statut de la breve ?
196        $row = sql_fetsel('statut, id_rubrique,lang, langue_choisie', 'spip_breves', 'id_breve=' . intval($id_breve));
197        $id_rubrique = $row['id_rubrique'];
198
199        $statut_ancien = $statut = $row['statut'];
200        $langue_old = $row['lang'];
201        $langue_choisie_old = $row['langue_choisie'];
202
203        if (isset($c['statut'])
204                and $c['statut']
205                and $c['statut'] != $statut
206                and autoriser('publierdans', 'rubrique', $id_rubrique)
207        ) {
208                $statut = $champs['statut'] = $c['statut'];
209        }
210
211        // Changer de rubrique ?
212        // Verifier que la rubrique demandee est a la racine et differente
213        // de la rubrique actuelle
214        if (
215                isset($c['id_parent'])
216                and $id_parent = intval($c['id_parent'])
217                and $id_parent != $id_rubrique
218                and (null !== ($lang = sql_getfetsel(
219                        'lang',
220                        'spip_rubriques',
221                        'id_parent=0 AND id_rubrique=' . intval($id_parent)
222                )))
223        ) {
224                $champs['id_rubrique'] = $id_parent;
225                // - changer sa langue (si heritee)
226                if ($langue_choisie_old != 'oui') {
227                        if ($lang != $langue_old) {
228                                $champs['lang'] = $lang;
229                        }
230                }
231                // si la breve est publiee
232                // et que le demandeur n'est pas admin de la rubrique
233                // repasser la breve en statut 'prop'.
234                if ($statut == 'publie') {
235                        if (!autoriser('publierdans', 'rubrique', $id_parent)) {
236                                $champs['statut'] = $statut = 'prop';
237                        }
238                }
239        }
240
241        // Envoyer aux plugins
242        $champs = pipeline(
243                'pre_edition',
244                array(
245                        'args' => array(
246                                'table' => 'spip_breves',
247                                'id_objet' => $id_breve,
248                                'action' => 'instituer',
249                                'statut_ancien' => $statut_ancien,
250                        ),
251                        'data' => $champs
252                )
253        );
254
255        if (!$champs) {
256                return;
257        }
258
259        sql_updateq('spip_breves', $champs, 'id_breve=' . intval($id_breve));
260
261        //
262        // Post-modifications
263        //
264
265        // Invalider les caches
266        include_spip('inc/invalideur');
267        suivre_invalideur("id='breve/$id_breve'");
268
269        // Au besoin, changer le statut des rubriques concernees
270        include_spip('inc/rubriques');
271        calculer_rubriques_if($id_rubrique, $champs, $statut_ancien);
272
273        // Pipeline
274        pipeline(
275                'post_edition',
276                array(
277                        'args' => array(
278                                'table' => 'spip_breves',
279                                'id_objet' => $id_breve,
280                                'action' => 'instituer',
281                                'statut_ancien' => $statut_ancien,
282                        ),
283                        'data' => $champs
284                )
285        );
286
287
288        // Notifications
289        if ($notifications = charger_fonction('notifications', 'inc')) {
290                $notifications('instituerbreve', $id_breve,
291                        array('statut' => $statut, 'statut_ancien' => $statut_ancien)
292                );
293        }
294
295        return ''; // pas d'erreur
296}
297
298
299// Fonctions Dépréciées
300// --------------------
301
302/**
303 * Insertion d'une brève dans une rubrique
304 *
305 * @deprecated Utiliser breve_inserer()
306 * @see breve_inserer()
307 *
308 * @param int $id_rubrique
309 *     Identifiant de la rubrique
310 * @return int
311 *     Identifiant de la nouvelle brève.
312 */
313function insert_breve($id_rubrique) {
314        return breve_inserer($id_rubrique);
315}
316
317/**
318 * Créer une révision de brève
319 *
320 * @deprecated Utiliser breve_modifier()
321 * @see breve_modifier()
322 *
323 * @param int $id_breve
324 *     Identifiant de la brève à modifier
325 * @param array|null $set
326 *     Couples (colonne => valeur) de données à modifier.
327 *     En leur absence, on cherche les données dans les champs éditables
328 *     qui ont été postés (via _request())
329 * @return string|null
330 *     Chaîne vide si aucune erreur,
331 *     Null si aucun champ à modifier,
332 *     Chaîne contenant un texte d'erreur sinon.
333 */
334function revisions_breves($id_breve, $set = false) {
335        return breve_modifier($id_breve, $set);
336}
Note: See TracBrowser for help on using the repository browser.