source: spip-zone/_plugins_/selection_d_objets/branches/1/action/editer_selection_objet.php @ 70502

Last change on this file since 70502 was 70502, checked in by abelass@…, 7 years ago

enregistrer l'url

File size: 5.6 KB
Line 
1<?php
2if (!defined("_ECRIRE_INC_VERSION")) return;
3
4include_spip('action/editer_objet');
5
6
7// http://doc.spip.org/@action_editer_selection_objet_dist
8function action_editer_selection_objet_dist($arg=null) {
9
10    if (is_null($arg)){
11        $securiser_action = charger_fonction('securiser_action', 'inc');
12        $arg = $securiser_action();
13    }
14
15    // Envoi depuis le formulaire d'edition d'une selection_objet
16    if (!$id_selection_objet = intval($arg)) {
17        $id_selection_objet = selection_objet_inserer(_request('id_objet'),_request('objet'));
18    }
19
20    if (!$id_selection_objet)
21        return array(0,''); // erreur
22
23    $err = selection_objet_modifier($id_selection_objet);
24
25    return array($id_selection_objet,$err);
26}
27
28
29function selection_objet_inserer($id_objet,$objet) {
30
31   $objet_dest=_request('objet_dest');
32   $id_objet_dest=_request('id_objet_dest'); 
33   $objet_table=$objet; 
34   if(!$id_objet){
35      $objet_table=$objet_dest;
36      $objet='selection_objet';
37      $id_objet==$id_objet_dest;
38    }
39    if(!$lang=_request('lang')){
40        $table_sql = table_objet_sql($objet_table);
41        $trouver_table = charger_fonction('trouver_table','base');
42        $desc = $trouver_table($table_sql);
43        if (!$desc OR !isset($desc['field'])) {
44        spip_log("Objet $objet inconnu dans objet_modifier",_LOG_ERREUR);
45        return _L("Erreur objet $objet inconnu");
46    }
47        if($desc['lang'])$lang=sql_getfetsel('lang',$table_sql,'id_'.$objet_table.'='.$id_objet);
48        else $lang=$GLOBALS['visiteur_session']['lang'];
49        }
50   
51    // Verifier l'ordre
52
53    $where = array(
54        'id_objet_dest='.$id_objet_dest,
55        'objet_dest='.sql_quote($objet_dest),
56        'lang='.sql_quote($lang),
57        );
58    $verifier_ordre=charger_fonction('verifier_ordre','inc');
59   
60    //le nombre de résultats
61    $ordre=$verifier_ordre($where);
62   
63
64    $champs = array(
65        'objet_dest'=>$objet_dest, 
66        'id_objet_dest'=>$id_objet_dest,                                   
67        'lang' => $lang,     
68        'langue_choisie' => 'non',
69        'ordre' => $ordre+1,    //   
70        );
71   
72    // Envoyer aux plugins
73    $champs = pipeline('pre_insertion',
74        array(
75            'args' => array(
76                'table' => 'spip_selection_objets',
77            ),
78            'data' => $champs
79        )
80    );
81    $id_selection_objet = sql_insertq("spip_selection_objets", $champs);
82    pipeline('post_insertion',
83        array(
84            'args' => array(
85                'table' => 'spip_selection_objets',
86                'id_objet' => $id_selection_objet
87            ),
88            'data' => $champs
89        )
90    );
91    return $id_selection_objet;
92}
93
94
95/**
96 * Modifier une selection_objet en base
97 * $c est un contenu (par defaut on prend le contenu via _request())
98 *
99 * http://doc.spip.org/@revisions_selection_objets
100 *
101 * @param int $id_selection_objet
102 * @param array $set
103 * @return string|bool
104 */
105function selection_objet_modifier ($id_selection_objet, $set=null) {
106
107    include_spip('inc/modifier');
108   
109
110   
111    $c = collecter_requests(
112        // white list
113        array('titre', 'descriptif','id_objet_dest','objet_dest','url'),
114        // black list
115        array('statut'),
116        // donnees eventuellement fournies
117        $set
118    );
119
120    // Si la selection_objet est publiee, invalider les caches et demander sa reindexation
121    $t = sql_fetsel("statut,lang,id_objet_dest,objet_dest,ordre", "spip_selection_objets", "id_selection_objet=$id_selection_objet");
122    if ($t['statut'] == 'publie') {
123        $invalideur = "id='selection_objet/$id_selection_objet'";
124        $indexation = true;
125    }
126   
127
128
129    if ($err = objet_modifier_champs('selection_objet', $id_selection_objet,
130        array(
131            'nonvide' => array(
132         
133                ),               
134            'invalideur' => $invalideur,
135            'indexation' => $indexation,
136        ),
137        $c)){
138        return $err;   
139        }
140       
141
142    $c = collecter_requests(array('statut'),array(),$set);
143    $err = selection_objet_instituer($id_selection_objet, $c);
144    return $err;
145}
146
147/**
148 * Instituer une selection_objet : modifier son statut ou son parent
149 *
150 * @param int $id_selection_objet
151 * @param array $c
152 * @return string
153 */
154function selection_objet_instituer($id_selection_objet, $c) {
155    $champs = array();
156
157    // Changer le statut de la selection_objet ?
158    $statut= sql_getfetsel("statut", "spip_selection_objets", "id_selection_objet=".intval($id_selection_objet));
159
160
161    $statut_ancien = $statut;
162
163
164    if ($c['statut']
165    AND $c['statut'] != $statut) {
166        $statut = $champs['statut'] = $c['statut'];
167    }
168
169
170    // Envoyer aux plugins
171    $champs = pipeline('pre_edition',
172        array(
173            'args' => array(
174                'table' => 'spip_selection_objets',
175                'id_objet' => $id_selection_objet,
176                'action'=>'instituer',
177                'statut_ancien' => $statut_ancien,
178            ),
179            'data' => $champs
180        )
181    );
182
183    if (!$champs) return;
184
185    sql_updateq('spip_selection_objets', $champs, "id_selection_objet=".intval($id_selection_objet));
186
187    //
188    // Post-modifications
189    //
190
191    // Invalider les caches
192    include_spip('inc/invalideur');
193    suivre_invalideur("id='selection_objet/$id_selection_objet'");
194
195
196
197    // Pipeline
198    pipeline('post_edition',
199        array(
200            'args' => array(
201                'table' => 'spip_selection_objets',
202                'id_objet' => $id_selection_objet,
203                'action'=>'instituer',
204                'statut_ancien' => $statut_ancien,
205            ),
206            'data' => $champs
207        )
208    );
209
210
211    return ''; // pas d'erreur
212}
Note: See TracBrowser for help on using the repository browser.