squellete2
[aidenligne_francais_universite.git] / ecrire / action / editer_rubrique.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2007 *
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 if (!defined("_ECRIRE_INC_VERSION")) return;
14
15 include_spip('inc/rubriques');
16
17 // http://doc.spip.org/@action_editer_rubrique_dist
18 function action_editer_rubrique_dist() {
19
20 $securiser_action = charger_fonction('securiser_action', 'inc');
21 $arg = $securiser_action();
22
23 if (!$id_rubrique = intval($arg)) {
24 if ($arg != 'oui') redirige_par_entete('./');
25 $id_rubrique = insert_rubrique(_request('id_parent'));
26 }
27
28 revisions_rubriques($id_rubrique);
29
30 $redirect = parametre_url(
31 urldecode(_request('redirect')),
32 'id_rubrique', $id_rubrique, '&');
33 redirige_par_entete($redirect);
34 }
35
36
37 // http://doc.spip.org/@insert_rubrique
38 function insert_rubrique($id_parent) {
39 include_spip('base/abstract_sql');
40 return spip_abstract_insert("spip_rubriques",
41 "(titre, id_parent)",
42 "('"._T('item_nouvelle_rubrique')."', ".intval($id_parent).")"
43 );
44 }
45
46 // Enregistrer certaines modifications d'une rubrique
47 // $c est un tableau qu'on peut proposer en lieu et place de _request()
48 // http://doc.spip.org/@revisions_rubriques
49 function revisions_rubriques($id_rubrique, $c=false) {
50 include_spip('inc/autoriser');
51 include_spip('inc/filtres');
52
53 // Ces champs seront pris nom pour nom (_POST[x] => spip_articles.x)
54 $champs_normaux = array('titre', 'texte', 'descriptif');
55
56 // ne pas accepter de titre vide
57 if (_request('titre', $c) === '')
58 $c = set_request('titre', _T('ecrire:info_sans_titre'), $c);
59
60 $champs = array();
61 foreach ($champs_normaux as $champ) {
62 $val = _request($champ, $c);
63 if ($val !== NULL)
64 $champs[$champ] = corriger_caracteres($val);
65 }
66
67 // traitement de la rubrique parente
68 // interdiction de deplacer vers ou a partir d'une rubrique
69 // qu'on n'administre pas.
70 $parent = '';
71 if (NULL !== ($id_parent = _request('id_parent', $c))
72 AND $id_parent != $id_rubrique // au fou
73 ) {
74 $id_parent = intval($id_parent);
75 $s = spip_fetch_array(spip_query("SELECT * FROM spip_rubriques WHERE id_rubrique=".intval($id_rubrique)));
76 $old_parent = $s['id_parent'];
77
78 if ($id_parent != $old_parent
79 AND autoriser('publierdans', 'rubrique', $id_parent)
80 AND autoriser('publierdans', 'rubrique', $old_parent)
81 ) {
82 $champs['id_parent'] = $id_parent;
83 } else {
84 spip_log("deplacement de $id_rubrique vers $id_parent refuse a " . $GLOBALS['auteur_session']['id_auteur'] . ' '. $GLOBALS['auteur_session']['statut']);
85 }
86 }
87
88 // si c'est une rubrique-secteur contenant des breves, ne deplacer
89 // que si $confirme_deplace == 'oui', et changer l'id_rubrique des
90 // breves en question
91 if ($champs['id_parent']
92 AND _request('confirme_deplace', $c) == 'oui') {
93 $id_secteur = spip_fetch_array(spip_query("SELECT id_secteur FROM spip_rubriques WHERE id_rubrique=$id_parent"));
94 if ($id_secteur= $id_secteur['id_secteur'])
95 spip_query("UPDATE spip_breves SET id_rubrique=$id_secteur WHERE id_rubrique=$id_rubrique");
96 }
97
98 // recuperer les extras
99 if ($GLOBALS['champs_extra']) {
100 include_spip('inc/extra');
101 if ($extra = extra_update('rubriques', $id_rubrique, $c))
102 $champs['extra'] = $extra;
103 }
104
105 // Envoyer aux plugins
106 include_spip('inc/modifier'); # temporaire pour eviter un bug
107 $champs = pipeline('pre_edition',
108 array(
109 'args' => array(
110 'table' => 'spip_rubriques',
111 'id_objet' => $id_rubrique
112 ),
113 'data' => $champs
114 )
115 );
116
117 $update = array();
118 foreach ($champs as $champ => $val)
119 $update[] = $champ . '=' . _q($val);
120
121 if (!count($update)) return;
122
123 spip_query("UPDATE spip_rubriques SET ".join(', ', $update)." WHERE id_rubrique=$id_rubrique");
124
125 if ($GLOBALS['meta']['activer_moteur'] == 'oui') {
126 include_spip("inc/indexation");
127 marquer_indexer('spip_rubriques', $id_rubrique);
128 }
129
130 propager_les_secteurs();
131
132 calculer_rubriques();
133 calculer_langues_rubriques();
134
135 // invalider les caches marques de cette rubrique
136 include_spip('inc/invalideur');
137 suivre_invalideur("id='id_rubrique/$id_rubrique'");
138
139 // Notification ?
140 pipeline('post_edition',
141 array(
142 'args' => array(
143 'table' => 'spip_rubriques',
144 'id_objet' => $id_rubrique
145 ),
146 'data' => $champs
147 )
148 );
149
150 }
151
152 ?>