source: spip-zone/_plugins_/acces_restreint/trunk/action/editer_zone.php @ 53604

Last change on this file since 53604 was 53604, checked in by cedric@…, 10 years ago

configuration des acces en CVT et squelette

File size: 4.2 KB
Line 
1<?php
2/**
3 * Plugin Acces Restreint 3.0 pour Spip 2.0
4 * Licence GPL (c) 2006-2008 Cedric Morin
5 *
6 */
7if (!defined("_ECRIRE_INC_VERSION")) return;
8
9/**
10 * editer une zone (action apres creation/modif de zone)
11 *
12 * @return array
13 */
14function action_editer_zone_dist(){
15
16        $securiser_action = charger_fonction('securiser_action', 'inc');
17        $arg = $securiser_action();
18
19        // si id_article n'est pas un nombre, c'est une creation
20        // mais on verifie qu'on a toutes les donnees qu'il faut.
21        if (!$id_zone = intval($arg)) {
22                if (!$id_zone = accesrestreint_action_insert_zone())
23                        return array(false,_L('echec'));
24                // ajouter les droits a l'admin si demande, lors de la creation
25                if (_request('droits_admin')){
26                        accesrestreint_revision_zone_objets_lies($id_zone,$GLOBALS['visiteur_session']['id_auteur'],'auteur');
27                }
28        }
29       
30        $err = action_zone_set($id_zone);
31        return array($id_zone,$err);
32}
33
34/**
35 * mettre a jour une zone
36 *
37 * @param int $id_zone
38 * @return string
39 */
40function action_zone_set($id_zone){
41        $err = '';
42
43        $c = array();
44        foreach (array(
45                'titre', 'descriptif',
46        ) as $champ)
47                $c[$champ] = _request($champ);
48        foreach (array(
49                'publique', 'privee'
50        ) as $champ)
51                $c[$champ] = _request($champ)=='oui'?'oui':'non';
52
53        include_spip('inc/modifier');
54        accesrestreint_revision_zone($id_zone, $c);
55        accesrestreint_revision_zone_objets_lies($id_zone, _request('rubriques'),'rubrique','set');
56
57        return $err;
58}
59
60
61/**
62 * Mettre a jour les liens objets/zones.
63 * si zones vaut '', associe toutes les zones a(aux) objets(s).
64 * $ids est une liste d'id.
65 * $type est le type de l'objet (rubrique, auteur).
66 * $operation = add/set/del pour ajouter, affecter uniquement, ou supprimer les objets listes dans ids.
67 *
68 * @param int/array $zones
69 * @param int/array $ids
70 * @param string $type
71 */
72function accesrestreint_revision_zone_objets_lies($zones,$ids,$type,$operation = 'add'){
73        include_spip('inc/autoriser');
74        $in = "";
75        if ($zones){
76                $in = sql_in('id_zone',$zones);
77        }
78        $liste = sql_allfetsel('id_zone','spip_zones',$in);
79        foreach($liste as $row){
80                if ($operation=='del'){
81                        // on supprime les ids listes
82                        sql_delete("spip_zones_{$type}s",array("id_zone=".intval($row['id_zone']),sql_in("id_$type",$ids)));                   
83                }
84                else {
85                        if (!$ids) $ids = array();
86                        elseif (!is_array($ids)) $ids = array($ids);
87                        // si c'est une affectation exhaustive, supprimer les existants qui ne sont pas dans ids
88                        // si c'est un ajout, ne rien effacer
89                        if ($operation=='set')
90                                sql_delete("spip_zones_{$type}s",array("id_zone=".intval($row['id_zone']),sql_in("id_$type",$ids,"NOT")));
91                        $deja = array_map('reset',sql_allfetsel("id_$type","spip_zones_{$type}s","id_zone=".intval($row['id_zone'])));
92                        $add = array_diff($ids,$deja);
93                        foreach ($add as $id) {
94                                if (autoriser('affecterzones',$type,$id,null,array('id_zone'=>$row['id_zone'])))
95                                        sql_insertq("spip_zones_{$type}s",array('id_zone'=>$row['id_zone'],"id_$type"=>intval($id)));
96                        }
97                }
98        }       
99}
100
101/**
102 * Creer une nouvelle zone
103 *
104 * @return int
105 */
106function accesrestreint_action_insert_zone(){
107        include_spip('inc/autoriser');
108        if (!autoriser('creer','zone'))
109                return false;
110        // nouvel zone
111        $id_zone = sql_insertq("spip_zones", array("maj"=>"NOW()", 'publique'=>'non','privee'=>'non'));
112
113        if (!$id_zone){
114                spip_log("accesrestreint action : impossible d'ajouter un zone");
115                return false;
116        } 
117        return $id_zone;       
118}
119
120/**
121 * Enregistre la revision d'une zone
122 *
123 * @param int $id_zone
124 * @param array $c
125 * @return string
126 */
127function accesrestreint_revision_zone($id_zone, $c=false) {
128
129        modifier_contenu('zone', $id_zone,
130                array(
131                        'nonvide' => array('titre' => _T('info_sans_titre')),
132                ),
133                $c);
134
135        return ''; // pas d'erreur
136}
137
138/**
139 * Supprimer une zone
140 *
141 * @param unknown_type $supp_zone
142 * @return unknown
143 */
144function accesrestreint_supprime_zone($id_zone){
145        $supp_zone = sql_getfetsel("id_zone", "spip_zones", "id_zone=" . intval($id_zone));
146        if (intval($id_zone) AND        intval($id_zone) == intval($supp_zone)){
147                // d'abord les auteurs
148                sql_delete("spip_zones_auteurs", "id_zone=".intval($id_zone));
149                // puis la portee
150                sql_delete("spip_zones_rubriques", "id_zone=".intval($id_zone));
151                // puis la zone
152                sql_delete("spip_zones", "id_zone=".intval($id_zone));
153        }
154        $id_zone = 0;
155        return $id_zone;
156}
157
158
159?>
Note: See TracBrowser for help on using the repository browser.