source: spip-zone/_core_/plugins/sites/action/editer_site.php @ 94396

Last change on this file since 94396 was 94396, checked in by denisb@…, 4 years ago

bonne année.

File size: 6.8 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2016                                                *
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__site et de l'API d'édition d'un site
15 *
16 * @package SPIP\Sites\Edition
17 */
18
19if (!defined("_ECRIRE_INC_VERSION")) {
20        return;
21}
22
23
24/**
25 * Action d'édition d'un site dans la base de données dont
26 * l'identifiant est donné en paramètre de cette fonction ou
27 * en argument de l'action sécurisée
28 *
29 * Si aucun identifiant n'est donné, on crée alors un nouvel article,
30 * à condition que la rubrique parente (id_rubrique) puisse être obtenue
31 * (avec _request(id_parent))
32 *
33 * @uses site_inserer()
34 * @uses site_modifier()
35 *
36 * @param null|int $arg
37 *     Identifiant du site. En absence utilise l'argument
38 *     de l'action sécurisée.
39 * @return array
40 *     Liste (identifiant du site, Texte d'erreur éventuel)
41 */
42function action_editer_site_dist($arg = null) {
43
44        if (is_null($arg)) {
45                $securiser_action = charger_fonction('securiser_action', 'inc');
46                $arg = $securiser_action();
47        }
48
49        if (!$id_syndic = intval($arg)) {
50                $id_syndic = site_inserer(_request('id_parent'));
51                if ($logo = _request('logo')
52                        and $format_logo = _request('format_logo')
53                ) {
54                        include_spip('inc/distant');
55                        $logo = _DIR_RACINE . copie_locale($logo);
56                        @rename($logo, _DIR_IMG . 'siteon' . $id_syndic . '.' . $format_logo);
57                }
58        }
59
60        if (!$id_syndic) {
61                return array(0, '');
62        }
63
64        $err = site_modifier($id_syndic);
65
66        return array($id_syndic, $err);
67}
68
69
70/**
71 * Insérer un nouveau site en base
72 *
73 * @pipeline_appel pre_insertion
74 * @pipeline_appel post_insertion
75 *
76 * @param int $id_rubrique
77 *     Identifiant de rubrique parente
78 * @param array|null $set
79 * @return int
80 *     Identifiant du site créé
81 */
82function site_inserer($id_rubrique, $set = null) {
83
84        include_spip('inc/rubriques');
85
86        // Si id_rubrique vaut 0 ou n'est pas definie, creer le site
87        // dans la premiere rubrique racine
88        if (!$id_rubrique = intval($id_rubrique)) {
89                $id_rubrique = sql_getfetsel("id_rubrique", "spip_rubriques", "id_parent=0", '', '0+titre,titre', "1");
90        }
91
92        // Le secteur a la creation : c'est le secteur de la rubrique
93        $id_secteur = sql_getfetsel("id_secteur", "spip_rubriques", "id_rubrique=" . intval($id_rubrique));
94        // eviter un null si la rubrique n'existe pas (rubrique -1 par exemple)
95        if (!$id_secteur) {
96                $id_secteur = 0;
97        }
98
99        $champs = array(
100                'id_rubrique' => $id_rubrique,
101                'id_secteur' => $id_secteur,
102                'statut' => 'prop',
103                'date' => date('Y-m-d H:i:s')
104        );
105
106        if ($set) {
107                $champs = array_merge($champs, $set);
108        }
109
110        // Envoyer aux plugins
111        $champs = pipeline('pre_insertion',
112                array(
113                        'args' => array(
114                                'table' => 'spip_syndic',
115                        ),
116                        'data' => $champs
117                )
118        );
119
120        $id_syndic = sql_insertq("spip_syndic", $champs);
121        pipeline('post_insertion',
122                array(
123                        'args' => array(
124                                'table' => 'spip_syndic',
125                                'id_objet' => $id_syndic
126                        ),
127                        'data' => $champs
128                )
129        );
130
131        return $id_syndic;
132}
133
134/**
135 * Modifier un site
136 *
137 * Appelle toutes les fonctions de modification d'un site
138 *
139 * @uses objet_modifier_champs()
140 * @uses objet_instituer()
141 *
142 * @param int $id_syndic
143 *     Identifiant du site à modifier
144 * @param array|null $set
145 *     Couples (colonne => valeur) de données à modifier.
146 *     En leur absence, on cherche les données dans les champs éditables
147 *     qui ont été postés (via collecter_requests())
148 * @return string
149 *     - Chaîne vide si aucune erreur,
150 *     - Chaîne contenant un texte d'erreur sinon.
151 */
152function site_modifier($id_syndic, $set = null) {
153        $resyndiquer = false;
154
155        include_spip('inc/rubriques');
156        include_spip('inc/modifier');
157        $c = collecter_requests(
158        // white list
159                array(
160                        'nom_site',
161                        'url_site',
162                        'descriptif',
163                        'url_syndic',
164                        'syndication',
165                        'moderation',
166                        'miroir',
167                        'oubli',
168                        'resume'
169                ),
170                // black list
171                array('statut', 'id_parent', 'date'),
172                // donnees eventuellement fournies
173                $set
174        );
175
176        // resyndiquer si un element de syndication modifie
177        if ($t = sql_fetsel('url_syndic,syndication,resume', 'spip_syndic', "id_syndic=" . intval($id_syndic))) {
178                foreach ($t as $k => $v) {
179                        if (isset($c[$k]) and $v != $c[$k]) {
180                                $resyndiquer = true;
181                        }
182                }
183        }
184
185        // Si le site est publie, invalider les caches et demander sa reindexation
186        $t = sql_getfetsel("statut", "spip_syndic", "id_syndic=" . intval($id_syndic));
187        $invalideur = $indexation = false;
188        if ($t == 'publie') {
189                $invalideur = "id='site/$id_syndic'";
190                $indexation = true;
191        }
192
193        if ($err = objet_modifier_champs('site', $id_syndic,
194                array(
195                        'data' => $set,
196                        'nonvide' => array('nom_site' => _T('info_sans_titre')),
197                        'invalideur' => $invalideur,
198                        'indexation' => $indexation
199                ),
200                $c)
201        ) {
202                return $err;
203        }
204
205
206        if ($resyndiquer and sql_getfetsel('syndication', 'spip_syndic', "id_syndic=" . intval($id_syndic)) !== 'non') {
207                $syndiquer_site = charger_fonction('syndiquer_site', 'action');
208                $syndiquer_site($id_syndic);
209        }
210
211
212        // Modification de statut, changement de rubrique ?
213        $c = collecter_requests(array('date', 'statut', 'id_parent'), array(), $set);
214        include_spip('action/editer_objet');
215        $err = objet_instituer('site', $id_syndic, $c);
216
217        return $err;
218}
219
220
221// Fonctions Dépréciées
222// --------------------
223
224/**
225 * Insérer un site
226 *
227 * @deprecated Utiliser site_inserer()
228 * @uses site_inserer()
229 *
230 * @param int $id_rubrique
231 * @return int
232 **/
233function insert_syndic($id_rubrique) {
234        return site_inserer($id_rubrique);
235}
236
237/**
238 * Modifier un site
239 *
240 * @deprecated Utiliser site_modifier()
241 * @uses site_modifier()
242 *
243 * @param int $id_syndic
244 * @param array|bool $set
245 * @return string
246 **/
247function syndic_set($id_syndic, $set = false) {
248        return site_modifier($id_syndic, $set);
249}
250
251/**
252 * Créer une révision d'un site
253 *
254 * @deprecated Utiliser site_modifier()
255 * @uses site_modifier()
256 *
257 * @param int $id_syndic
258 * @param array|bool $set
259 * @return string
260 **/
261function revisions_sites($id_syndic, $set = false) {
262        return site_modifier($id_syndic, $set);
263}
264
265/**
266 * Instituer un site
267 *
268 * @deprecated Utiliser objet_instituer()
269 * @uses objet_instituer()
270 *
271 * @param int $id_syndic
272 * @param array $c
273 * @param bool $calcul_rub
274 * @return string
275 **/
276function instituer_syndic($id_syndic, $c, $calcul_rub = true) {
277        include_spip('action/editer_objet');
278
279        return objet_instituer('site', $id_syndic, $c, $calcul_rub);
280}
Note: See TracBrowser for help on using the repository browser.