3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2014 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
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 \***************************************************************************/
13 if (!defined("_ECRIRE_INC_VERSION")) return;
15 function action_editer_petition_dist($arg=null) {
18 $securiser_action = charger_fonction('securiser_action', 'inc');
19 $arg = $securiser_action();
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');
27 include_spip('inc/headers');
28 redirige_url_ecrire();
30 $id_petition = petition_inserer($id_article);
33 // Enregistre l'envoi dans la BD
35 $err = petition_modifier($id_petition);
37 return array($id_petition,$err);
41 * Mettre a jour une petition existante
43 * @param int $id_petition
47 function petition_modifier($id_petition, $set=null) {
50 include_spip('inc/modifier');
51 $c = collecter_requests(
54 "email_unique","site_obli",
55 "site_unique","message","texte"
58 array('statut','id_article'),
59 // donnees eventuellement fournies
63 if ($err = objet_modifier_champs('petition', $id_petition,array(),$c))
66 // changement d'article ou de statut ?
67 $c = collecter_requests(array('statut','id_article'),array(),$set);
68 $err .= petition_instituer($id_petition, $c);
74 * Inserer une petition en base
75 * @param <type> $id_article
78 function petition_inserer($id_article) {
80 // Si id_article vaut 0 ou n'est pas definie, echouer
81 if (!$id_article = intval($id_article))
85 'id_article' => $id_article,
88 // Envoyer aux plugins
89 $champs = pipeline('pre_insertion',
92 'table' => 'spip_petitions',
98 $id_petition = sql_insertq("spip_petitions", $champs);
100 pipeline('post_insertion',
103 'table' => 'spip_petitions',
104 'id_objet' => $id_petition
115 * $c est un array ('id_article' = changement d'article)
116 * il n'est pas autoriser de deplacer une petition
118 * @param $id_petition
120 * @param bool $calcul_rub
123 function petition_instituer($id_petition, $c) {
125 include_spip('inc/autoriser');
126 include_spip('inc/modifier');
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'];
133 $s = isset($c['statut'])?
$c['statut']:$statut;
135 // cf autorisations dans inc/petition_instituer
136 if ($s != $statut /*OR ($d AND $d != $date)*/) {
137 $statut = $champs['statut'] = $s;
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
144 if ($champs['statut'] == 'publie') {
146 $champs['date_time'] = $date = $d;
148 $champs['date_time'] = $date = date('Y-m-d H:i:s');
152 // Envoyer aux plugins
153 $champs = pipeline('pre_edition',
156 'table' => 'spip_petitions',
157 'id_objet' => $id_petition,
158 'action'=>'instituer',
159 'statut_ancien' => $statut_ancien,
165 if (!count($champs)) return;
167 // Envoyer les modifs.
168 sql_updateq('spip_petitions',$champs,'id_petition='.intval($id_petition));
170 // Invalider les caches
171 include_spip('inc/invalideur');
172 suivre_invalideur("id='petition/$id_petition'");
173 suivre_invalideur("id='article/".$row['id_article']."'");
176 pipeline('post_edition',
179 'table' => 'spip_petitions',
180 'id_objet' => $id_petition,
181 'action'=>'instituer',
182 'statut_ancien' => $statut_ancien,
189 if ($notifications = charger_fonction('notifications', 'inc')) {
190 $notifications('instituerpetition', $id_petition,
191 array('statut' => $statut, 'statut_ancien' => $statut_ancien)
195 return ''; // pas d'erreur
198 // http://doc.spip.org/@revision_petition
199 function revision_petition($id_petition, $c=null) {
200 return petition_modifier($id_petition,$c);