source: plugins_spip/gestion_mutu/action/editer_mutu.php @ 3009

Last change on this file since 3009 was 3009, checked in by kent1, 11 years ago

On va plutot le faire de la sorte avec une autorisation spécifique qui devient surchargeable

File size: 4.8 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5/**
6 * Action de création / Modification d'une mutu
7 * @param unknown_type $arg
8 * @return unknown_type
9 */
10function action_editer_mutu_dist($arg=null) {
11
12        if (is_null($arg)){
13                $securiser_action = charger_fonction('securiser_action', 'inc');
14                $arg = $securiser_action();
15        }
16
17        // si id_mutu n'est pas un nombre, c'est une creation
18        if (!$id_mutu = intval($arg)) {
19                $id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
20                if (!$id_auteur) {
21                        include_spip('inc/headers');
22                        redirige_url_ecrire();
23                }
24                $id_mutu = insert_mutu();
25        }
26
27        // Enregistre l'envoi dans la BD
28        if ($id_mutu > 0) $err = mutu_set($id_mutu);
29
30        if (_request('redirect')) {
31                $redirect = parametre_url(urldecode(_request('redirect')),
32                        'id_mutu', $id_mutu, '&') . $err;
33
34                include_spip('inc/headers');
35                redirige_par_entete($redirect);
36        }
37        else
38                return array($id_mutu,$err);
39}
40
41/**
42 * Appelle la fonction de modification d'une instance de mutu
43 *
44 * @param int $id_mutu
45 * @param unknown_type $set
46 * @return $err
47 */
48function mutu_set($id_mutu, $set=null) {
49        $err = '';
50
51        $c = array();
52        foreach (array(
53                'titre',
54                'domaine',
55                'ssdomaine',
56                'descriptif'
57        ) as $champ)
58                $c[$champ] = _request($champ,$set);
59
60        include_spip('inc/modifier');
61        revision_mutu($id_mutu, $c);
62
63        // Modification de statut, changement de rubrique ?
64        $c = array();
65        foreach (array(
66                'date_validation', 'statut'
67        ) as $champ)
68                $c[$champ] = _request($champ,$set);
69        $err .= instituer_mutu($id_mutu, $c);
70
71        return $err;
72}
73
74/**
75 * Crée une nouvelle instance de mutu et retourne son ID
76 *
77 * @return int id_mutu
78 */
79function insert_mutu() {
80        $champs = array(
81                'id_admin'=>$GLOBALS['visiteur_session']['id_auteur'],
82                'statut' =>  'prepa',
83                'date' => date('Y-m-d H:i:s'));
84
85        // Envoyer aux plugins
86        $champs = pipeline('pre_insertion',
87                array(
88                        'args' => array(
89                                'table' => 'spip_mutus',
90                        ),
91                        'data' => $champs
92                )
93        );
94
95        $id_mutu = sql_insertq("spip_mutus",$champs);
96
97        if ($id_mutu > 0)
98                sql_insertq('spip_auteurs_mutus', array('id_auteur' => $GLOBALS['visiteur_session']['id_auteur'], 'id_mutu' => $id_mutu));
99
100        return $id_mutu;
101}
102
103/**
104 * Institue une instance de mutualisation
105 *
106 * @param $id_mutu int
107 * @param $c Array
108 * @return unknown_type
109 */
110function instituer_mutu($id_mutu, $c) {
111
112        include_spip('inc/autoriser');
113        include_spip('inc/modifier');
114
115        $row = sql_fetsel("statut, date", "spip_mutus", "id_mutu=$id_mutu");
116        $statut_ancien = $statut = $row['statut'];
117        $date_ancienne = $date = $row['date_validation'];
118        $champs = array();
119
120        $d = isset($c['date_validation'])?$c['date_validation']:null;
121        $s = isset($c['statut'])?$c['statut']:$statut;
122
123        if ($s != $statut) {
124                if (autoriser('publier','mutu',$id_mutu))
125                        $statut = $champs['statut'] = $s;
126                else if (autoriser('modifier', 'mutu', $id_mutu) AND $s != 'publie')
127                        $statut = $champs['statut'] = $s;
128                else
129                        spip_log("editer_mutu $id_mutu refus " . join(' ', $c));
130
131                // En cas de publication, fixer la date de validation à "maintenant"
132                // sauf si $c commande autre chose
133                if ($champs['statut'] == 'publie'
134                 OR ($champs['statut'] == 'prop' AND ($d OR !in_array($statut_ancien, array('publie', 'prop'))))
135                ) {
136                        if ($d OR strtotime($d=$date)>time())
137                                $champs['date_validation'] = $date = $d;
138                        else
139                                $champs['date_validation'] = $date = date('Y-m-d H:i:s');
140                }
141                /**
142                 * On crée le passe s'il n'existe pas à la publication
143                 */
144                if($champs['statut'] == 'publie'){
145                        if(!sql_getfetsel('pass','spip_mutus','id_mutu='.intval($id_mutu))){
146                                $champs['pass'] = md5($champs['statut'].$GLOBALS['visiteur_session']['id_auteur'].date('U'));
147                        }
148                }
149        }
150
151        // Envoyer aux plugins
152        $champs = pipeline('pre_edition',
153                array(
154                        'args' => array(
155                                'table' => 'spip_mutus',
156                                'id_objet' => $id_mutu,
157                                'action'=>'instituer'
158                        ),
159                        'data' => $champs
160                )
161        );
162
163        if (!count($champs)) return;
164
165        // Envoyer les modifs.
166        sql_updateq('spip_mutus', $champs, "id_mutu=$id_mutu");
167
168        // Invalider les caches
169        include_spip('inc/invalideur');
170        suivre_invalideur("id='id_mutu/$id_mutu'");
171
172        // Pipeline
173        pipeline('post_edition',
174                array(
175                        'args' => array(
176                                'table' => 'spip_mutus',
177                                'id_objet' => $id_mutu,
178                                'action'=>'instituer'
179                        ),
180                        'data' => $champs
181                )
182        );
183
184        // Notifications
185        if ($notifications = charger_fonction('notifications', 'inc')) {
186                $notifications('instituermutu', $id_mutu,
187                        array('statut' => $statut, 'statut_ancien' => $statut_ancien, 'date'=>$date)
188                );
189        }
190
191        return ''; // pas d'erreur
192}
193
194/**
195 * Enregistre une révision de mutu
196 *
197 * @param int $id_mutu
198 * @param array $c
199 * @return
200 */
201function revision_mutu ($id_mutu, $c=false) {
202        $invalideur = "id='id_mutu/$id_mutu'";
203
204        modifier_contenu('mutu', $id_mutu,
205                array(
206                        'nonvide' => array('titre' => _T('info_sans_titre'),'domaine'=>_T('info_domaine'),'ssdomaine'=>_T('info_ssdomaine')),
207                        'invalideur' => $invalideur
208                ),
209                $c);
210
211        return ''; // pas d'erreur
212}
213?>
Note: See TracBrowser for help on using the repository browser.