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

Last change on this file since 93092 was 93092, checked in by gilles.vincent@…, 5 years ago

Mise en forme plus homegene et plus lisible, pour les declarations des fonctions
Regles :

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