3 * Plugin Acces Restreint 3.0 pour Spip 2.0
4 * Licence GPL (c) 2006-2008 Cedric Morin
7 if (!defined("_ECRIRE_INC_VERSION")) return;
10 * editer une zone (action apres creation/modif de zone)
15 function action_editer_zone_dist($arg=null){
18 $securiser_action = charger_fonction('securiser_action', 'inc');
19 $arg = $securiser_action();
22 // Envoi depuis le formulaire d'edition d'une zone
23 if (!$id_zone = intval($arg)) {
24 $id_zone = zone_inserer();
28 return array(0,''); // erreur
30 if (_request('droits_admin')){
31 zone_lier($id_zone,'auteur',$GLOBALS['visiteur_session']['id_auteur']);
34 $err = zone_modifier($id_zone);
36 return array($id_zone,$err);
41 * Inserer une zone en base
45 function zone_inserer() {
47 include_spip('inc/autoriser');
48 if (!autoriser('creer','zone'))
56 // Envoyer aux plugins
57 $champs = pipeline('pre_insertion',
60 'table' => 'spip_zones',
65 $id_zone = sql_insertq("spip_zones", $champs);
66 pipeline('post_insertion',
69 'table' => 'spip_zones',
70 'id_objet' => $id_zone
80 * Modifier une zone en base
81 * $c est un contenu (par defaut on prend le contenu via _request())
87 function zone_modifier ($id_zone, $set=null) {
89 include_spip('inc/modifier');
90 $c = collecter_requests(
92 array('titre', 'descriptif','publique', 'privee'),
95 // donnees eventuellement fournies
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'";
107 if ($err = objet_modifier_champs('zone', $id_zone,
109 'nonvide' => array('titre' => _T('info_sans_titre')),
110 'invalideur' => $invalideur,
111 'indexation' => $indexation
117 zone_lier($id_zone, 'rubrique', _request('rubriques'),'set');
123 * Mettre a jour les liens objets/zones.
124 * si zones vaut '', associe toutes les zones a(aux) objets(s).
125 * $ids est une liste d'id.
126 * $type est le type de l'objet (rubrique, auteur).
127 * $operation = add/set/del pour ajouter, affecter uniquement, ou supprimer les objets listes dans ids.
129 * @param int|array $zones
130 * @param string $type
131 * @param int|array $ids
132 * @param string $operation
134 function zone_lier($zones,$type,$ids,$operation = 'add'){
135 include_spip('inc/autoriser');
136 include_spip('action/editer_liens');
141 elseif (!is_array($ids))
144 if ($operation=='del'){
145 // on supprime les ids listes
146 objet_dissocier(array('zone'=>$zones),array($type=>$ids));
149 // si c'est une affectation exhaustive, supprimer les existants qui ne sont pas dans ids
150 // si c'est un ajout, ne rien effacer
151 if ($operation=='set'){
152 objet_dissocier(array('zone'=>$zones),array($type=>array("NOT",$ids)));
154 foreach ($ids as $id) {
155 if (autoriser('affecterzones',$type,$id,null,array('id_zone'=>$zones))) {
156 objet_associer(array('zone'=>$zones),array($type=>$id));
167 * @param int $id_zone
170 function zone_supprimer($id_zone){
171 include_spip('action/editer_liens');
172 objet_dissocier(array('zone'=>$id_zone),array('*'=>'*'));
175 sql_delete("spip_zones", "id_zone=".intval($id_zone));