3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2019 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
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 \***************************************************************************/
14 * Gestion de l'action editer__site et de l'API d'édition d'un site
16 * @package SPIP\Sites\Edition
19 if (!defined("_ECRIRE_INC_VERSION")) {
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
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))
33 * @uses site_inserer()
34 * @uses site_modifier()
36 * @param null|int $arg
37 * Identifiant du site. En absence utilise l'argument
38 * de l'action sécurisée.
40 * Liste (identifiant du site, Texte d'erreur éventuel)
42 function action_editer_site_dist($arg = null) {
45 $securiser_action = charger_fonction('securiser_action', 'inc');
46 $arg = $securiser_action();
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')
54 include_spip('inc/distant');
55 $logo = _DIR_RACINE
. copie_locale($logo);
56 @rename
($logo, _DIR_IMG
. 'siteon' . $id_syndic . '.' . $format_logo);
64 $err = site_modifier($id_syndic);
66 return array($id_syndic, $err);
71 * Insérer un nouveau site en base
73 * @pipeline_appel pre_insertion
74 * @pipeline_appel post_insertion
76 * @param int $id_rubrique
77 * Identifiant de rubrique parente
78 * @param array|null $set
80 * Identifiant du site créé
82 function site_inserer($id_rubrique, $set = null) {
84 include_spip('inc/rubriques');
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");
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)
100 'id_rubrique' => $id_rubrique,
101 'id_secteur' => $id_secteur,
103 'date' => date('Y-m-d H:i:s')
107 $champs = array_merge($champs, $set);
110 // Envoyer aux plugins
111 $champs = pipeline('pre_insertion',
114 'table' => 'spip_syndic',
120 $id_syndic = sql_insertq("spip_syndic", $champs);
121 pipeline('post_insertion',
124 'table' => 'spip_syndic',
125 'id_objet' => $id_syndic
137 * Appelle toutes les fonctions de modification d'un site
139 * @uses objet_modifier_champs()
140 * @uses objet_instituer()
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())
149 * - Chaîne vide si aucune erreur,
150 * - Chaîne contenant un texte d'erreur sinon.
152 function site_modifier($id_syndic, $set = null) {
153 $resyndiquer = false;
155 include_spip('inc/rubriques');
156 include_spip('inc/modifier');
157 $c = collecter_requests(
171 array('statut', 'id_parent', 'date'),
172 // donnees eventuellement fournies
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]) {
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'";
193 if ($err = objet_modifier_champs('site', $id_syndic,
196 'nonvide' => array('nom_site' => _T('info_sans_titre')),
197 'invalideur' => $invalideur,
198 'indexation' => $indexation
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);
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);
221 // Fonctions Dépréciées
222 // --------------------
227 * @deprecated Utiliser site_inserer()
228 * @uses site_inserer()
230 * @param int $id_rubrique
233 function insert_syndic($id_rubrique) {
234 return site_inserer($id_rubrique);
240 * @deprecated Utiliser site_modifier()
241 * @uses site_modifier()
243 * @param int $id_syndic
244 * @param array|bool $set
247 function syndic_set($id_syndic, $set = false) {
248 return site_modifier($id_syndic, $set);
252 * Créer une révision d'un site
254 * @deprecated Utiliser site_modifier()
255 * @uses site_modifier()
257 * @param int $id_syndic
258 * @param array|bool $set
261 function revisions_sites($id_syndic, $set = false) {
262 return site_modifier($id_syndic, $set);
268 * @deprecated Utiliser objet_instituer()
269 * @uses objet_instituer()
271 * @param int $id_syndic
273 * @param bool $calcul_rub
276 function instituer_syndic($id_syndic, $c, $calcul_rub = true) {
277 include_spip('action/editer_objet');
279 return objet_instituer('site', $id_syndic, $c, $calcul_rub);