[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / sites / action / editer_site.php
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
19 if (!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 */
42 function 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 */
82 function 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 */
152 function 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 **/
233 function 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 **/
247 function 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 **/
261 function 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 **/
276 function 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 }