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

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

Mise a jour du formulaire d'edition de la zone, et des fonctions de action/editer_zone pour coller aux conventions SPIP 3
utilisation de l'api editer_liens pour la gestion des liens (beneficie des pipelines etc...)

File size: 3.7 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 * @param int $arg
13 * @return array
14 */
15function 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 */
45function 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 */
87function 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        $t = sql_getfetsel("statut", "spip_zones", "id_zone=$id_zone");
101        if ($t == 'publie') {
102                $invalideur = "id='zone/$id_zone'";
103                $indexation = true;
104        }
105
106        if ($err = objet_modifier_champs('zone', $id_zone,
107                array(
108                        'nonvide' => array('titre' => _T('info_sans_titre')),
109                        'invalideur' => $invalideur,
110                        'indexation' => $indexation
111                ),
112                $c))
113                return $err;
114
115
116        zone_lier($id_zone, 'rubrique', _request('rubriques'),'set');
117        return $err;
118}
119
120
121/**
122 * Mettre a jour les liens objets/zones.
123 * si zones vaut '', associe toutes les zones a(aux) objets(s).
124 * $ids est une liste d'id.
125 * $type est le type de l'objet (rubrique, auteur).
126 * $operation = add/set/del pour ajouter, affecter uniquement, ou supprimer les objets listes dans ids.
127 *
128 * @param int|array $zones
129 * @param string $type
130 * @param int|array $ids
131 * @param string $operation
132 */
133function zone_lier($zones,$type,$ids,$operation = 'add'){
134        include_spip('inc/autoriser');
135        include_spip('action/editer_liens');
136        if (!$zones)
137                $zones="*";
138        if (!$ids)
139                $ids = array();
140        elseif (!is_array($ids))
141                $ids = array($ids);
142
143        if ($operation=='del'){
144                // on supprime les ids listes
145                objet_dissocier(array('zone'=>$zones),array($type=>$ids));
146        }
147        else {
148                // si c'est une affectation exhaustive, supprimer les existants qui ne sont pas dans ids
149                // si c'est un ajout, ne rien effacer
150                if ($operation=='set'){
151                        objet_dissocier(array('zone'=>$zones),array($type=>array("NOT",$ids)));
152                }
153                foreach ($ids as $id) {
154                        if (autoriser('affecterzones',$type,$id,null,array('id_zone'=>$zones)))
155                                objet_associer(array('zone'=>$zones),array($type=>$id));
156                }
157        }
158}
159
160
161
162/**
163 * Supprimer une zone
164 *
165 * @param int $id_zone
166 * @return int
167 */
168function zone_supprimer($id_zone){
169        include_spip('action/editer_liens');
170        objet_dissocier(array('zone'=>$id_zone),array('*'=>'*'));
171
172        // puis la zone
173        sql_delete("spip_zones", "id_zone=".intval($id_zone));
174
175        $id_zone = 0;
176        return $id_zone;
177}
178
179
180?>
Note: See TracBrowser for help on using the repository browser.