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