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

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

ouvrir la posibilité d'utiliser l'objet "selection_objet" sans liens vers un autre objet

File size: 5.8 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   
52
53    $champs = array(
54        'objet_dest'=>$objet_dest, 
55        'id_objet_dest'=>$id_objet_dest,                                   
56        'lang' => $lang,
57        'langue_choisie' => 'non');
58   
59    // Envoyer aux plugins
60    $champs = pipeline('pre_insertion',
61        array(
62            'args' => array(
63                'table' => 'spip_selection_objets',
64            ),
65            'data' => $champs
66        )
67    );
68    $id_selection_objet = sql_insertq("spip_selection_objets", $champs);
69    pipeline('post_insertion',
70        array(
71            'args' => array(
72                'table' => 'spip_selection_objets',
73                'id_objet' => $id_selection_objet
74            ),
75            'data' => $champs
76        )
77    );
78    return $id_selection_objet;
79}
80
81
82/**
83 * Modifier une selection_objet en base
84 * $c est un contenu (par defaut on prend le contenu via _request())
85 *
86 * http://doc.spip.org/@revisions_selection_objets
87 *
88 * @param int $id_selection_objet
89 * @param array $set
90 * @return string|bool
91 */
92function selection_objet_modifier ($id_selection_objet, $set=null) {
93
94    include_spip('inc/modifier');
95   
96
97   
98    $c = collecter_requests(
99        // white list
100        array('titre', 'descriptif','id_objet_dest','objet_dest'),
101        // black list
102        array('statut'),
103        // donnees eventuellement fournies
104        $set
105    );
106
107    // Si la selection_objet est publiee, invalider les caches et demander sa reindexation
108    $t = sql_fetsel("statut,lang,id_objet_dest,objet_dest", "spip_selection_objets", "id_selection_objet=$id_selection_objet");
109    if ($t['statut'] == 'publie') {
110        $invalideur = "id='selection_objet/$id_selection_objet'";
111        $indexation = true;
112    }
113   
114    //verifier l'ordre
115    $where = array(
116        'id_objet_dest='.$t['id_objet_dest'],
117        'objet_dest='.sql_quote($t['objet_dest']),
118        'lang='.sql_quote($t['lang']),
119        );
120    $verifier_ordre=charger_fonction('verifier_ordre','inc');
121    $ordre=$verifier_ordre($where);
122   
123    if(!$id_objet=_request('id_objet')){
124        $c['ordre']=$ordre+1;
125
126    }
127    else $objet=_request('objet');
128    if ($err = objet_modifier_champs('selection_objet', $id_selection_objet,
129        array(
130            'nonvide' => array(
131                'titre' => _T('selection_objets:titre_nouvelle_selection_objet')." "._T('info_numero_abbreviation').$id_selection_objet,           
132                ),               
133            'invalideur' => $invalideur,
134            'indexation' => $indexation,
135        ),
136        $c)){
137        return $err;   
138        }
139       
140
141    $c = collecter_requests(array('statut'),array(),$set);
142    $err = selection_objet_instituer($id_selection_objet, $c);
143    return $err;
144}
145
146/**
147 * Instituer une selection_objet : modifier son statut ou son parent
148 *
149 * @param int $id_selection_objet
150 * @param array $c
151 * @return string
152 */
153function selection_objet_instituer($id_selection_objet, $c) {
154    $champs = array();
155
156    // Changer le statut de la selection_objet ?
157    $statut= sql_getfetsel("statut", "spip_selection_objets", "id_selection_objet=".intval($id_selection_objet));
158
159
160    $statut_ancien = $statut;
161
162
163    if ($c['statut']
164    AND $c['statut'] != $statut) {
165        $statut = $champs['statut'] = $c['statut'];
166    }
167
168
169    // Envoyer aux plugins
170    $champs = pipeline('pre_edition',
171        array(
172            'args' => array(
173                'table' => 'spip_selection_objets',
174                'id_objet' => $id_selection_objet,
175                'action'=>'instituer',
176                'statut_ancien' => $statut_ancien,
177            ),
178            'data' => $champs
179        )
180    );
181
182    if (!$champs) return;
183
184    sql_updateq('spip_selection_objets', $champs, "id_selection_objet=".intval($id_selection_objet));
185
186    //
187    // Post-modifications
188    //
189
190    // Invalider les caches
191    include_spip('inc/invalideur');
192    suivre_invalideur("id='selection_objet/$id_selection_objet'");
193
194
195
196    // Pipeline
197    pipeline('post_edition',
198        array(
199            'args' => array(
200                'table' => 'spip_selection_objets',
201                'id_objet' => $id_selection_objet,
202                'action'=>'instituer',
203                'statut_ancien' => $statut_ancien,
204            ),
205            'data' => $champs
206        )
207    );
208
209
210    return ''; // pas d'erreur
211}
Note: See TracBrowser for help on using the repository browser.