3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2011 *
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 \***************************************************************************/
13 if (!defined('_ECRIRE_INC_VERSION')) return;
15 include_spip('inc/rubriques');
17 // http://doc.spip.org/@action_editer_rubrique_dist
18 function action_editer_rubrique_dist($arg=null) {
21 $securiser_action = charger_fonction('securiser_action', 'inc');
22 $arg = $securiser_action();
25 if (!$id_rubrique = intval($arg)) {
27 include_spip('inc/headers');
28 redirige_url_ecrire();
30 $id_rubrique = insert_rubrique(_request('id_parent'));
33 revisions_rubriques($id_rubrique);
35 if (_request('redirect')) {
36 $redirect = parametre_url(
37 urldecode(_request('redirect')),
38 'id_rubrique', $id_rubrique, '&');
40 include_spip('inc/headers');
41 redirige_par_entete($redirect);
44 return array($id_rubrique,'');
48 // http://doc.spip.org/@insert_rubrique
49 function insert_rubrique($id_parent) {
51 'titre' => _T('item_nouvelle_rubrique'),
52 'id_parent' => intval($id_parent),
55 // Envoyer aux plugins
56 $champs = pipeline('pre_insertion',
59 'table' => 'spip_rubriques',
65 $id_rubrique = sql_insertq("spip_rubriques", $champs);
66 pipeline('post_insertion',
69 'table' => 'spip_rubriques',
70 'id_objet' => $id_rubrique
75 propager_les_secteurs();
76 calculer_langues_rubriques();
80 // Enregistrer certaines modifications d'une rubrique
81 // $c est un tableau qu'on peut proposer en lieu et place de _request()
82 // http://doc.spip.org/@revisions_rubriques
83 function revisions_rubriques($id_rubrique, $c=false) {
84 include_spip('inc/autoriser');
85 include_spip('inc/filtres');
91 'titre', 'texte', 'descriptif', 'extra',
92 'id_parent', 'confirme_deplace'
94 if (($a = _request($champ)) !== null)
98 include_spip('inc/modifier');
99 modifier_contenu('rubrique', $id_rubrique,
101 'nonvide' => array('titre' => _T('info_sans_titre'))
105 // Deplacer la rubrique
106 if (isset($c['id_parent'])) {
107 $c['confirme_deplace'] = _request('confirme_deplace', $c);
108 instituer_rubrique($id_rubrique, $c);
111 // invalider les caches marques de cette rubrique
112 include_spip('inc/invalideur');
113 suivre_invalideur("id='id_rubrique/$id_rubrique'");
114 // et celui de menu_rubriques
115 effacer_meta("date_calcul_rubriques");
118 // si c'est une rubrique-secteur contenant des breves, ne deplacer
119 // que si $confirme_deplace == 'oui', et changer l'id_rubrique des
120 // breves en question
122 // http://doc.spip.org/@editer_rubrique_breves
123 function editer_rubrique_breves($id_rubrique, $id_parent, $c=false)
125 if (!sql_countsel('spip_breves', "id_rubrique=$id_rubrique"))
128 if ($c['confirme_deplace'] != 'oui')
131 if ($id_secteur = sql_getfetsel("id_secteur",
132 "spip_rubriques", "id_rubrique=$id_parent"))
133 sql_updateq("spip_breves", array("id_rubrique" => $id_secteur), "id_rubrique=$id_rubrique");
139 // http://doc.spip.org/@instituer_rubrique
140 function instituer_rubrique($id_rubrique, $c) {
141 // traitement de la rubrique parente
142 // interdiction de deplacer vers ou a partir d'une rubrique
143 // qu'on n'administre pas.
145 $statut_ancien = $parent = '';
146 if (NULL !== ($id_parent = $c['id_parent'])) {
147 $id_parent = intval($id_parent);
148 $filles = calcul_branche($id_rubrique);
149 if (strpos(",$id_parent,", ",$filles,") !== false)
150 spip_log("La rubrique $id_rubrique ne peut etre fille de sa descendante $id_parent");
152 $s = sql_fetsel("id_parent, statut", "spip_rubriques", "id_rubrique=$id_rubrique");
153 $old_parent = $s['id_parent'];
155 if (!($id_parent != $old_parent
156 AND autoriser('publierdans', 'rubrique', $id_parent)
157 AND autoriser('creerrubriquedans', 'rubrique', $id_parent)
158 AND autoriser('publierdans', 'rubrique', $old_parent)
160 if ($s['statut'] != 'new') {
161 spip_log("deplacement de $id_rubrique vers $id_parent refuse a " . $GLOBALS['visiteur_session']['id_auteur'] . ' '. $GLOBALS['visiteur_session']['statut']);
163 } elseif (editer_rubrique_breves($id_rubrique, $id_parent, $c)) {
164 $statut_ancien = $s['statut'];
165 sql_updateq('spip_rubriques', array('id_parent' => $id_parent), "id_rubrique=$id_rubrique");
168 propager_les_secteurs();
170 // Deplacement d'une rubrique publiee ==> chgt general de leur statut
171 if ($statut_ancien == 'publie')
172 calculer_rubriques_if($old_parent, array('id_rubrique' => $id_parent), $statut_ancien);
173 // Creation ou deplacement d'une rubrique non publiee
174 // invalider le cache de leur menu
175 elseif (!$statut_ancien ||
$old_parent!=$id_parent)
176 effacer_meta("date_calcul_rubriques");
178 calculer_langues_rubriques();