[PLUGINS] ~acces_restreint 3.3.5-->3.3.8
[ptitvelo/web/www.git] / www / plugins / accesrestreint_3_5 / action / editer_zone.php
1 <?php
2 /**
3 * Plugin Acces Restreint 3.0 pour Spip 2.0
4 * Licence GPL (c) 2006-2008 Cedric Morin
5 *
6 */
7 if (!defined("_ECRIRE_INC_VERSION")) return;
8
9 /**
10 * editer une zone (action apres creation/modif de zone)
11 *
12 * @param int $arg
13 * @return array
14 */
15 function action_editer_zone_dist($arg=null){
16
17 if (is_null($arg)){
18 $securiser_action = charger_fonction('securiser_action', 'inc');
19 $arg = $securiser_action();
20 }
21
22 // Envoi depuis le formulaire d'edition d'une zone
23 if (!$id_zone = intval($arg)) {
24 $id_zone = zone_inserer();
25 }
26
27 if (!$id_zone)
28 return array(0,''); // erreur
29
30 if (_request('droits_admin')){
31 zone_lier($id_zone,'auteur',$GLOBALS['visiteur_session']['id_auteur']);
32 }
33
34 $err = zone_modifier($id_zone);
35
36 return array($id_zone,$err);
37 }
38
39
40 /**
41 * Inserer une zone en base
42 *
43 * @return int
44 */
45 function zone_inserer() {
46
47 include_spip('inc/autoriser');
48 if (!autoriser('creer','zone'))
49 return false;
50
51 $champs = array(
52 'publique'=>'non',
53 'privee'=>'non',
54 );
55
56 // Envoyer aux plugins
57 $champs = pipeline('pre_insertion',
58 array(
59 'args' => array(
60 'table' => 'spip_zones',
61 ),
62 'data' => $champs
63 )
64 );
65 $id_zone = sql_insertq("spip_zones", $champs);
66 pipeline('post_insertion',
67 array(
68 'args' => array(
69 'table' => 'spip_zones',
70 'id_objet' => $id_zone
71 ),
72 'data' => $champs
73 )
74 );
75 return $id_zone;
76 }
77
78
79 /**
80 * Modifier une zone en base
81 * $c est un contenu (par defaut on prend le contenu via _request())
82 *
83 * @param int $id_zone
84 * @param array $set
85 * @return string|bool
86 */
87 function zone_modifier ($id_zone, $set=null) {
88
89 include_spip('inc/modifier');
90 $c = collecter_requests(
91 // white list
92 array('titre', 'descriptif','publique', 'privee'),
93 // black list
94 array(),
95 // donnees eventuellement fournies
96 $set
97 );
98
99 // Si la zone est publiee, invalider les caches et demander sa reindexation
100 $invalideur = $indexation = '';
101 $t = sql_getfetsel("statut", "spip_zones", "id_zone=$id_zone");
102 if ($t == 'publie') {
103 $invalideur = "id='zone/$id_zone'";
104 $indexation = true;
105 }
106
107 if ($err = objet_modifier_champs('zone', $id_zone,
108 array(
109 'nonvide' => array('titre' => _T('info_sans_titre')),
110 'invalideur' => $invalideur,
111 'indexation' => $indexation
112 ),
113 $c))
114 return $err;
115
116
117 zone_lier($id_zone, 'rubrique', _request('rubriques'),'set');
118 return $err;
119 }
120
121
122 /**
123 * Mettre à jour les liens objets/zones.
124 *
125 * @param int|array|string $zones
126 * Identifiant ou liste d'identifiants zones à affecter.
127 * Si zones vaut '', associe toutes les zones a(aux) objets(s).
128 * @param string $type
129 * Type d'objet (rubrique, auteur).
130 * @param int|array $ids
131 * Identifiant ou liste d'identifiants de l'objet
132 * @param string $operation
133 * Action à effectuer parmi `add`, `set` ou `del` pour ajouter, affecter uniquement,
134 * ou supprimer les objets listés dans ids.
135 */
136 function zone_lier($zones,$type,$ids,$operation = 'add'){
137 include_spip('inc/autoriser');
138 include_spip('action/editer_liens');
139 if (!$zones)
140 $zones="*";
141 if (!$ids)
142 $ids = array();
143 elseif (!is_array($ids))
144 $ids = array($ids);
145
146 if ($operation=='del'){
147 // on supprime les ids listes
148 objet_dissocier(array('zone'=>$zones),array($type=>$ids));
149 }
150 else {
151 // si c'est une affectation exhaustive, supprimer les existants qui ne sont pas dans ids
152 // si c'est un ajout, ne rien effacer
153 if ($operation=='set'){
154 objet_dissocier(array('zone'=>$zones),array($type=>array("NOT",$ids)));
155 }
156 foreach ($ids as $id) {
157 if (autoriser('affecterzones',$type,$id,null,array('id_zone'=>$zones))) {
158 objet_associer(array('zone'=>$zones),array($type=>$id));
159 }
160 }
161 }
162 }
163
164
165
166 /**
167 * Supprimer une zone
168 *
169 * @param int $id_zone
170 * @return int
171 */
172 function zone_supprimer($id_zone){
173 include_spip('action/editer_liens');
174 objet_dissocier(array('zone'=>$id_zone),array('*'=>'*'));
175
176 // puis la zone
177 sql_delete("spip_zones", "id_zone=".intval($id_zone));
178
179 $id_zone = 0;
180 return $id_zone;
181 }
182
183
184 ?>