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

Last change on this file since 93607 was 93607, checked in by cedric@…, 5 years ago

Indentation et regles de codage selon http://www.spip.net/fr_article3497.html#regles_codage

File size: 8.2 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2015                                                *
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=$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('pre_insertion',
98                array(
99                        'args' => array(
100                                'table' => 'spip_breves',
101                        ),
102                        'data' => $champs
103                )
104        );
105        $id_breve = sql_insertq("spip_breves", $champs);
106        pipeline('post_insertion',
107                array(
108                        'args' => array(
109                                'table' => 'spip_breves',
110                                'id_objet' => $id_breve
111                        ),
112                        'data' => $champs
113                )
114        );
115
116        return $id_breve;
117}
118
119
120/**
121 * Modifier une brève en base
122 *
123 * @param int $id_breve
124 *     Identifiant de la brève à modifier
125 * @param array|null $set
126 *     Couples (colonne => valeur) de données à modifier.
127 *     En leur absence, on cherche les données dans les champs éditables
128 *     qui ont été postés (via _request())
129 * @return string|null
130 *     Chaîne vide si aucune erreur,
131 *     Null si aucun champ à modifier,
132 *     Chaîne contenant un texte d'erreur sinon.
133 */
134function breve_modifier($id_breve, $set = null) {
135
136        include_spip('inc/modifier');
137        $c = collecter_requests(
138        // white list
139                array('titre', 'texte', 'lien_titre', 'lien_url'),
140                // black list
141                array('id_parent', 'statut'),
142                // donnees eventuellement fournies
143                $set
144        );
145
146        $invalideur = '';
147        $indexation = false;
148
149        // Si la breve est publiee, invalider les caches et demander sa reindexation
150        $t = sql_getfetsel("statut", "spip_breves", "id_breve=$id_breve");
151        if ($t == 'publie') {
152                $invalideur = "id='breve/$id_breve'";
153                $indexation = true;
154        }
155
156        if ($err = objet_modifier_champs('breve', $id_breve,
157                array(
158                        'data' => $set,
159                        'nonvide' => array('titre' => _T('breves:titre_nouvelle_breve') . " " . _T('info_numero_abbreviation') . $id_breve),
160                        'invalideur' => $invalideur,
161                        'indexation' => $indexation
162                ),
163                $c)
164        ) {
165                return $err;
166        }
167
168        $c = collecter_requests(array('id_parent', 'statut'), array(), $set);
169        $err = breve_instituer($id_breve, $c);
170
171        return $err;
172}
173
174
175/**
176 * Instituer une brève : modifier son statut ou son parent
177 *
178 * @pipeline_appel pre_insertion
179 * @pipeline_appel post_insertion
180 *
181 * @param int $id_breve
182 *     Identifiant de la brève
183 * @param array $c
184 *     Couples (colonne => valeur) des données à instituer
185 * @return string|null
186 *     Null si aucun champ à modifier, chaîne vide sinon.
187 */
188function breve_instituer($id_breve, $c) {
189        $champs = array();
190
191        // Changer le statut de la breve ?
192        $row = sql_fetsel("statut, id_rubrique,lang, langue_choisie", "spip_breves", "id_breve=" . intval($id_breve));
193        $id_rubrique = $row['id_rubrique'];
194
195        $statut_ancien = $statut = $row['statut'];
196        $langue_old = $row['lang'];
197        $langue_choisie_old = $row['langue_choisie'];
198
199        if (isset($c['statut'])
200                AND $c['statut']
201                AND $c['statut'] != $statut
202                AND autoriser('publierdans', 'rubrique', $id_rubrique)
203        ) {
204                $statut = $champs['statut'] = $c['statut'];
205        }
206
207        // Changer de rubrique ?
208        // Verifier que la rubrique demandee est a la racine et differente
209        // de la rubrique actuelle
210        if ($id_parent = intval($c['id_parent'])
211                AND $id_parent != $id_rubrique
212                AND (null !== ($lang = sql_getfetsel('lang', 'spip_rubriques',
213                                "id_parent=0 AND id_rubrique=" . intval($id_parent))))
214        ) {
215                $champs['id_rubrique'] = $id_parent;
216                // - changer sa langue (si heritee)
217                if ($langue_choisie_old != "oui") {
218                        if ($lang != $langue_old) {
219                                $champs['lang'] = $lang;
220                        }
221                }
222                // si la breve est publiee
223                // et que le demandeur n'est pas admin de la rubrique
224                // repasser la breve en statut 'prop'.
225                if ($statut == 'publie') {
226                        if (!autoriser('publierdans', 'rubrique', $id_parent)) {
227                                $champs['statut'] = $statut = 'prop';
228                        }
229                }
230        }
231
232        // Envoyer aux plugins
233        $champs = pipeline('pre_edition',
234                array(
235                        'args' => array(
236                                'table' => 'spip_breves',
237                                'id_objet' => $id_breve,
238                                'action' => 'instituer',
239                                'statut_ancien' => $statut_ancien,
240                        ),
241                        'data' => $champs
242                )
243        );
244
245        if (!$champs) {
246                return;
247        }
248
249        sql_updateq('spip_breves', $champs, "id_breve=" . intval($id_breve));
250
251        //
252        // Post-modifications
253        //
254
255        // Invalider les caches
256        include_spip('inc/invalideur');
257        suivre_invalideur("id='breve/$id_breve'");
258
259        // Au besoin, changer le statut des rubriques concernees
260        include_spip('inc/rubriques');
261        calculer_rubriques_if($id_rubrique, $champs, $statut_ancien);
262
263        // Pipeline
264        pipeline('post_edition',
265                array(
266                        'args' => array(
267                                'table' => 'spip_breves',
268                                'id_objet' => $id_breve,
269                                'action' => 'instituer',
270                                'statut_ancien' => $statut_ancien,
271                        ),
272                        'data' => $champs
273                )
274        );
275
276
277        // Notifications
278        if ($notifications = charger_fonction('notifications', 'inc')) {
279                $notifications('instituerbreve', $id_breve,
280                        array('statut' => $statut, 'statut_ancien' => $statut_ancien)
281                );
282        }
283
284        return ''; // pas d'erreur
285}
286
287
288// Fonctions Dépréciées
289// --------------------
290
291/**
292 * Insertion d'une brève dans une rubrique
293 *
294 * @deprecated Utiliser breve_inserer()
295 * @see breve_inserer()
296 *
297 * @param int $id_rubrique
298 *     Identifiant de la rubrique
299 * @return int
300 *     Identifiant de la nouvelle brève.
301 */
302function insert_breve($id_rubrique) {
303        return breve_inserer($id_rubrique);
304}
305
306/**
307 * Créer une révision de brève
308 *
309 * @deprecated Utiliser breve_modifier()
310 * @see breve_modifier()
311 *
312 * @param int $id_breve
313 *     Identifiant de la brève à modifier
314 * @param array|null $set
315 *     Couples (colonne => valeur) de données à modifier.
316 *     En leur absence, on cherche les données dans les champs éditables
317 *     qui ont été postés (via _request())
318 * @return string|null
319 *     Chaîne vide si aucune erreur,
320 *     Null si aucun champ à modifier,
321 *     Chaîne contenant un texte d'erreur sinon.
322 */
323function revisions_breves($id_breve, $set = false) {
324        return breve_modifier($id_breve, $set);
325}
326
327?>
Note: See TracBrowser for help on using the repository browser.