[SPIP] ~maj SPIP v3.0.17 --> v3.0.19
[lhc/web/clavette_www.git] / www / plugins-dist / petitions / action / editer_petition.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2014 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined("_ECRIRE_INC_VERSION")) return;
14
15 function action_editer_petition_dist($arg=null) {
16
17 if (is_null($arg)){
18 $securiser_action = charger_fonction('securiser_action', 'inc');
19 $arg = $securiser_action();
20 }
21
22 // si id_petition 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_petition = intval($arg)) {
25 $id_article = _request('id_article');
26 if (!($id_article)) {
27 include_spip('inc/headers');
28 redirige_url_ecrire();
29 }
30 $id_petition = petition_inserer($id_article);
31 }
32
33 // Enregistre l'envoi dans la BD
34 if ($id_petition > 0)
35 $err = petition_modifier($id_petition);
36
37 return array($id_petition,$err);
38 }
39
40 /**
41 * Mettre a jour une petition existante
42 *
43 * @param int $id_petition
44 * @param array $set
45 * @return string
46 */
47 function petition_modifier($id_petition, $set=null) {
48 $err = '';
49
50 include_spip('inc/modifier');
51 $c = collecter_requests(
52 // white list
53 array(
54 "email_unique","site_obli",
55 "site_unique","message","texte"
56 ),
57 // black list
58 array('statut','id_article'),
59 // donnees eventuellement fournies
60 $set
61 );
62
63 if ($err = objet_modifier_champs('petition', $id_petition,array(),$c))
64 return $err;
65
66 // changement d'article ou de statut ?
67 $c = collecter_requests(array('statut','id_article'),array(),$set);
68 $err .= petition_instituer($id_petition, $c);
69
70 return $err;
71 }
72
73 /**
74 * Inserer une petition en base
75 * @param <type> $id_article
76 * @return <type>
77 */
78 function petition_inserer($id_article) {
79
80 // Si id_article vaut 0 ou n'est pas definie, echouer
81 if (!$id_article = intval($id_article))
82 return 0;
83
84 $champs = array(
85 'id_article' => $id_article,
86 );
87
88 // Envoyer aux plugins
89 $champs = pipeline('pre_insertion',
90 array(
91 'args' => array(
92 'table' => 'spip_petitions',
93 ),
94 'data' => $champs
95 )
96 );
97
98 $id_petition = sql_insertq("spip_petitions", $champs);
99
100 pipeline('post_insertion',
101 array(
102 'args' => array(
103 'table' => 'spip_petitions',
104 'id_objet' => $id_petition
105 ),
106 'data' => $champs
107 )
108 );
109
110 return $id_petition;
111 }
112
113
114 /**
115 * $c est un array ('id_article' = changement d'article)
116 * il n'est pas autoriser de deplacer une petition
117 *
118 * @param $id_petition
119 * @param $c
120 * @param bool $calcul_rub
121 * @return string
122 */
123 function petition_instituer($id_petition, $c) {
124
125 include_spip('inc/autoriser');
126 include_spip('inc/modifier');
127
128 $row = sql_fetsel("id_article", "spip_petitions", "id_petition=".intval($id_petition));
129 $statut_ancien = $statut = $row['statut'];
130 #$date_ancienne = $date = $row['date_time'];
131 $champs = array();
132
133 $s = isset($c['statut'])?$c['statut']:$statut;
134
135 // cf autorisations dans inc/petition_instituer
136 if ($s != $statut /*OR ($d AND $d != $date)*/) {
137 $statut = $champs['statut'] = $s;
138
139 // En cas de publication, fixer la date a "maintenant"
140 // sauf si $c commande autre chose
141 // ou si l'petition est deja date dans le futur
142 // En cas de proposition d'un petition (mais pas depublication), idem
143 /*
144 if ($champs['statut'] == 'publie') {
145 if ($d)
146 $champs['date_time'] = $date = $d;
147 else
148 $champs['date_time'] = $date = date('Y-m-d H:i:s');
149 }*/
150 }
151
152 // Envoyer aux plugins
153 $champs = pipeline('pre_edition',
154 array(
155 'args' => array(
156 'table' => 'spip_petitions',
157 'id_objet' => $id_petition,
158 'action'=>'instituer',
159 'statut_ancien' => $statut_ancien,
160 ),
161 'data' => $champs
162 )
163 );
164
165 if (!count($champs)) return;
166
167 // Envoyer les modifs.
168 sql_updateq('spip_petitions',$champs,'id_petition='.intval($id_petition));
169
170 // Invalider les caches
171 include_spip('inc/invalideur');
172 suivre_invalideur("id='petition/$id_petition'");
173 suivre_invalideur("id='article/".$row['id_article']."'");
174
175 // Pipeline
176 pipeline('post_edition',
177 array(
178 'args' => array(
179 'table' => 'spip_petitions',
180 'id_objet' => $id_petition,
181 'action'=>'instituer',
182 'statut_ancien' => $statut_ancien,
183 ),
184 'data' => $champs
185 )
186 );
187
188 // Notifications
189 if ($notifications = charger_fonction('notifications', 'inc')) {
190 $notifications('instituerpetition', $id_petition,
191 array('statut' => $statut, 'statut_ancien' => $statut_ancien)
192 );
193 }
194
195 return ''; // pas d'erreur
196 }
197
198 // http://code.spip.net/@revision_petition
199 function revision_petition($id_petition, $c=null) {
200 return petition_modifier($id_petition,$c);
201 }
202
203
204 ?>