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

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

On fixe l'autorisation de publication de la mutu au webmestres

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('configurer'))
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.