[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / plugins-dist / petitions / action / confirmer_signature.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
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
16
17 /**
18 * Confirmer une signature
19 * Retour a l'ecran du lien de confirmation d'une signature de petition.
20 * var_confirm contient le hash de la signature.
21 * Au premier appel on traite et on publie
22 * Au second appel on retourne le resultat a afficher
23 *
24 * @staticvar string $confirm
25 * @param <type> $var_confirm
26 * @return string
27 */
28 function action_confirmer_signature_dist($var_confirm=null) {
29 static $confirm = null;
30
31 // reponse mise en cache dans la session ?
32 $code_message = 'signature_message_'.strval($var_confirm);
33 if (isset($GLOBALS['visiteur_session'][$code_message]))
34 return $GLOBALS['visiteur_session'][$code_message];
35
36 // reponse deja calculee depuis public/assembler.php
37 if (isset($confirm))
38 return $confirm;
39
40 if (is_null($var_confirm)) {
41 $securiser_action = charger_fonction('securiser_action','inc');
42 $var_confirm = $securiser_action();
43 }
44
45 if (!$var_confirm OR $var_confirm == 'publie' OR $var_confirm == 'poubelle')
46 return '';
47
48 if (!spip_connect()) {
49 $confirm = _T('petitions:form_pet_probleme_technique');
50 return '';
51 }
52 include_spip('inc/texte');
53 include_spip('inc/filtres');
54
55 // Suppression d'une signature par un moderateur ?
56 // Cf. plugin notifications
57 if (isset($_GET['refus'])) {
58 // verifier validite de la cle de suppression
59 // l'id_signature est dans var_confirm
60 include_spip('inc/securiser_action');
61 if ($id_signature = intval($var_confirm)
62 AND (
63 $_GET['refus'] == _action_auteur("supprimer signature $id_signature", '', '', 'alea_ephemere')
64 OR
65 $_GET['refus'] == _action_auteur("supprimer signature $id_signature", '', '', 'alea_ephemere_ancien')
66 )) {
67 include_spip('action/editer_signature');
68 signature_modifier($id_signature,array("statut" => 'poubelle'));
69 $confirm = _T('petitions:info_signature_supprimee');
70 } else $confirm = _T('petitions:info_signature_supprimee_erreur');
71 return '';
72 }
73
74 $row = sql_fetsel('*', 'spip_signatures', "statut=" . sql_quote($var_confirm), '', "1");
75
76 if (!$row) {
77 $confirm = _T('petitions:form_pet_aucune_signature');
78 return '';
79 }
80
81 $id_signature = $row['id_signature'];
82 $id_petition = $row['id_petition'];
83 $adresse_email = $row['ad_email'];
84 $url_site = $row['url_site'];
85
86 $row = sql_fetsel('email_unique, site_unique, id_article', 'spip_petitions', "id_petition=".intval($id_petition));
87
88 $email_unique = $row['email_unique'] == "oui";
89 $site_unique = $row['site_unique'] == "oui";
90 $id_article = $row['id_article'];
91
92 include_spip('action/editer_signature');
93 signature_modifier($id_signature,array('statut' => 'publie'));
94
95 if ($email_unique) {
96 $r = "id_petition=".intval($id_petition)." AND ad_email=" . sql_quote($adresse_email);
97 if (signature_entrop($r))
98 $confirm = _T('petitions:form_pet_deja_signe');
99 }
100
101 if ($site_unique) {
102 $r = "id_petition=".intval($id_petition)." AND url_site=" . sql_quote($url_site);
103 if (signature_entrop($r))
104 $confirm = _T('petitions:form_pet_site_deja_enregistre');
105 }
106
107 include_spip('inc/session');
108
109 if (!$confirm) {
110 $confirm = _T('petitions:form_pet_signature_validee');
111
112 // noter dans la session que l'email est valide
113 // de facon a permettre de signer les prochaines
114 // petitions sans refaire un tour d'email
115 session_set('email_confirme', $adresse_email);
116
117 // invalider les pages ayant des boucles signatures
118 include_spip('inc/invalideur');
119 suivre_invalideur("id='signature/$id_signature'");
120 suivre_invalideur("id='article/$id_article'");
121 }
122
123 // Conserver la reponse dans la session du visiteur
124 if ($confirm)
125 session_set($code_message, $confirm);
126 }
127
128 ?>