source: spip-zone/_plugins_/diogene/diogene/trunk/action/editer_diogene.php @ 93555

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

Fix https://core.spip.net/issues/3617 : passer $set a objet_modifier_champs pour qu'elle ne detecte les conflits sur $_POST que quand c'est pertinent

File size: 5.0 KB
Line 
1<?php
2/**
3 * Plugin Diogene
4 *
5 * Auteurs :
6 * b_b
7 * kent1 (http://www.kent1.info - kent1@arscenic.info)
8 *
9 * Distribue sous licence GNU/GPL
10 *
11 * Action d'édition d'un diogene
12 *
13 **/
14if (!defined("_ECRIRE_INC_VERSION")) return;
15
16function action_editer_diogene_dist($arg=null){
17        if (is_null($arg)){
18                $securiser_action = charger_fonction('securiser_action', 'inc');
19                $arg = $securiser_action();
20        }
21
22        // si id_diogene n'est pas un nombre, c'est une creation
23        // mais on verifie qu'on a toutes les donnees qu'il faut.
24        if (!$id_diogene = intval($arg)) {
25                if (!$GLOBALS['visiteur_session']['id_auteur']) {
26                        include_spip('inc/headers');
27                        redirige_url_ecrire();
28                }
29                $id_diogene = diogene_inserer();
30        }
31
32        // Enregistre l'envoi dans la BD
33        if ($id_diogene > 0)
34                $err = diogene_modifier($id_diogene);
35       
36        if ($err)
37                spip_log("echec editeur diogene: $err",_LOG_ERREUR);
38       
39        return array($id_diogene,$err);
40}
41
42/**
43 * Fonction de changement de statut d'un template
44 *
45 * @param int $id_diogene
46 * @param array $c
47 */
48function diogene_instituer($id_diogene, $c) {
49
50        // Envoyer aux plugins
51        $c = pipeline('pre_edition',
52                array(
53                        'args' => array(
54                                'table' => 'spip_diogenes',
55                                'id_objet' => $id_diogene,
56                                'action'=>'instituer'
57                        ),
58                        'data' => $c
59                )
60        );
61
62        if (!count($c)) return;
63
64        // Envoyer les modifs.
65
66        sql_updateq('spip_diogenes', $c, "id_diogene=$id_diogene");
67
68        // Pipeline
69        pipeline('post_edition',
70                array(
71                        'args' => array(
72                                'table' => 'spip_diogenes',
73                                'id_objet' => $id_diogene,
74                                'action'=>'instituer'
75                        ),
76                        'data' => $c
77                )
78        );
79
80        return ''; // pas d'erreur
81}
82
83/**
84 * Fonction d'insertion d'un template
85 *
86 * @return int $id_diogene
87 *      L'identifiant numérique du template créé
88 */
89function diogene_inserer() {
90
91        $champs = array('id_auteur' => $GLOBALS['visiteur_session']['id_auteur']);
92        // Envoyer aux plugins
93        $champs = pipeline('pre_insertion',
94                array(
95                        'args' => array(
96                                'table' => 'spip_diogenes',
97                        ),
98                        'data' => $champs
99                )
100        );
101        $id_diogene = sql_insertq("spip_diogenes", $champs);
102
103        return $id_diogene;
104}
105
106/**
107 * Fonction de suppression d'un diogene
108 *
109 * @param int $id_diogene
110 *              L'identifiant numérique du diogène à supprimer
111 * @return bool true/false
112 */
113function diogene_supprimer($id_diogene){
114        $diogene = sql_getfetsel('id_diogene','spip_diogenes','id_diogene='.intval($id_diogene));
115        if(is_numeric($diogene) && (intval($diogene) > 0) && include_spip('inc/autoriser') && autoriser('modifier','diogene',$id_diogene)){
116                if($del = sql_delete('spip_diogenes','id_diogene = '.intval($id_diogene))){
117                        /**
118                         * Invalider le cache
119                         */
120                        include_spip('inc/invalideur');
121                        suivre_invalideur("id='diogene/$id_diogene'");
122                        return true;
123                }else
124                        return false;
125        }else
126                return false;
127}
128
129/**
130 * Fonction de révision d'un diogène
131 *
132 * @param int $id_diogene Identifiant numérique du diogene
133 * @param array $champs un tableau des champs à modifier en base
134 */
135function diogene_modifier($id_diogene,$set=null){
136       
137        include_spip('inc/modifier');
138        include_spip('inc/filtres');
139        $c = collecter_requests(
140                // white list
141                objet_info('diogene','champs_editables'),
142                // black list
143                array('id_secteur','objet','type'),
144                // donnees eventuellement fournies
145                $set
146        );
147       
148        if(!_request('menu'))
149                $c['menu'] = '';
150
151        /**
152         * Les champs champs_caches, champs_ajoutes, options_complements
153         * doivent être des tableau serialisés
154         */
155        foreach(array(
156                'champs_caches','champs_ajoutes','options_complements'
157        ) as $champ){
158                if(isset($c[$champ]) && is_array($c[$champ]))
159                        $c[$champ] = serialize($c[$champ]);
160                else if(isset($c[$champ]) && is_array(@unserialize($c[$champ])))
161                        $c[$champ] = $c[$champ];
162                else
163                        $c[$champ] = '';
164        }
165       
166        foreach(array(
167                'titre','description'
168        ) as $texte){
169                if(isset($c[$champ]))
170                        $c[$texte] = filtrer_entites($c[$texte]);
171                else
172                        $c[$texte] = '';
173        }
174
175        $invalideur = "id='diogene/$id_diogene'";
176        $indexation = true;
177       
178        if ($err = objet_modifier_champs('diogene', $id_diogene,
179                array(
180                        'data' => $set,
181                        'nonvide' => array('titre' => _T('info_sans_titre')),
182                        'invalideur' => $invalideur,
183                        'indexation' => $indexation
184                ),
185                $c))
186                return $err;   
187               
188        $rubriques = _request('id_rubrique',$set);
189        sql_delete('spip_diogenes_liens','id_diogene='.intval($id_diogene).' AND objet="rubrique"');
190        if(is_array($rubriques)){
191                foreach($rubriques as $id_rubrique){
192                        sql_insertq('spip_diogenes_liens',array('id_diogene' => $id_diogene,'objet'=> $id_rubrique,'objet'=> 'rubrique'));
193                }
194        }
195
196        $c = collecter_requests(array('id_secteur','objet','identifiant','type'),array(),$set);
197       
198        if(isset($c['identifiant'])){
199                $c['type'] = $c['identifiant'];
200                unset($c['identifiant']);
201        }
202        $err = diogene_instituer($id_diogene, $c);
203        return $err;
204}
205
206function revision_diogene($id_diogene, $c=false) {
207        return diogene_modifier($id_diogene,$c);
208}
209function diogene_set($id_diogene, $set=null) {
210        return diogene_modifier($id_diogene,$set);
211}
212function insert_diogene($id_diogene, $c) {
213        return diogene_inserer();
214}
215function instituer_diogene(){
216        return diogene_instituer($id_diogene, $c);
217}
218?>
Note: See TracBrowser for help on using the repository browser.