diff --git a/action/confirm_unsubscribe_mailsubscriber.php b/action/confirm_unsubscribe_mailsubscriber.php
index 81d7104..504198f 100644
--- a/action/confirm_unsubscribe_mailsubscriber.php
+++ b/action/confirm_unsubscribe_mailsubscriber.php
@@ -26,12 +26,17 @@ function action_confirm_unsubscribe_mailsubscriber_dist($email = null, $id_mails
$_COOKIE['spip_lang'] = utiliser_langue_visiteur($GLOBALS['meta']['langues_multilingue']);
$timestamp = null;
+ $unconsent = false;
if (is_null($email)) {
$securiser_action = charger_fonction("securiser_action", "inc");
$arg = $securiser_action();
$arg = mailsubscriber_base64url_decode($arg);
$arg = explode(':', $arg);
$timestamp = array_pop($arg);
+ if ($timestamp === 'unconsent') {
+ $unconsent = true;
+ $timestamp = array_pop($arg);
+ }
$id_mailsubscribinglists = array_pop($arg);
$id_mailsubscribinglists = explode('-', $id_mailsubscribinglists);
$email = implode(":", $arg);
@@ -50,7 +55,7 @@ function action_confirm_unsubscribe_mailsubscriber_dist($email = null, $id_mails
// il suffit de rejouer unsubscribe en forcant le simple-optin
$unsubscribe_mailsubscriber = charger_fonction("unsubscribe_mailsubscriber", "action");
- $unsubscribe_mailsubscriber ($email, $id_mailsubscribinglists, false);
+ $unsubscribe_mailsubscriber ($email, $id_mailsubscribinglists, false, $unconsent);
}
function mailsubscriber_base64url_decode($data) {
diff --git a/action/unconsent_mailsubscriber.php b/action/unconsent_mailsubscriber.php
new file mode 100644
index 0000000..4b15a9e
--- /dev/null
+++ b/action/unconsent_mailsubscriber.php
@@ -0,0 +1,35 @@
+
" . bouton_action($label_bouton_this,
generer_action_auteur('confirm_unsubscribe_mailsubscriber',
- mailsubscriber_base64url_encode($email . ":" . implode('-', $id_mailsubscribinglists) . ":" . time())));
+ mailsubscriber_base64url_encode(
+ $email .
+ ":" . implode('-', $id_mailsubscribinglists) .
+ ":" . time() .
+ ($unconsent ? ':unconsent' : '')
+ )
+ )
+ );
}
}
else {
@@ -120,7 +130,7 @@ function action_unsubscribe_mailsubscriber_dist($email = null, $id_mailsubscribi
// bouton de desinscription de TOUTES : il n'y aura que celui la present si pas d'autre inscription valide que celle(s) qu'on resilie
$corps .= "
" . bouton_action($has_other ? _T('newsletter:bouton_unsubscribe_all') : $label_bouton_this,
generer_action_auteur('confirm_unsubscribe_mailsubscriber',
- mailsubscriber_base64url_encode($email . "::".time())));
+ mailsubscriber_base64url_encode($email . "::" . time() . ($unconsent ? ':unconsent' : ''))));
}
else {
$options['force'] = true;
@@ -136,6 +146,15 @@ function action_unsubscribe_mailsubscriber_dist($email = null, $id_mailsubscribi
$options['listes'] = $identifiants;
}
$unsubscribe($email, $options);
+
+ if ($unconsent) {
+ $reconsent = charger_fonction('reconsent','newsletter');
+ $options = array(
+ 'listes' => $options['listes'],
+ 'status' => false,
+ );
+ $reconsent($email, $options);
+ }
}
}
diff --git a/mailsubscribers_fonctions.php b/mailsubscribers_fonctions.php
index b2bf566..1a95d0a 100644
--- a/mailsubscribers_fonctions.php
+++ b/mailsubscribers_fonctions.php
@@ -238,18 +238,29 @@ function mailsubscriber_url_confirm($email, $jeton, $id_mailsubscribinglists=nul
* @return string
*/
function mailsubscriber_url_reconsent($email, $jeton, $id_mailsubscribinglists=null, $sep = "&") {
- // legacy ancien format d'appel : $sep etait le 3eme argument
- if (is_string($id_mailsubscribinglists) and $id_mailsubscribinglists and !intval($id_mailsubscribinglists)) {
- $sep = $id_mailsubscribinglists;
- $id_mailsubscribinglists = null;
- }
-
$url = generer_url_action("reconsent_mailsubscriber", "email=" . urlencode($email), false, true);
$url = parametre_url($url, "arg", mailsubscriber_cle_action("consent", $email, $jeton, $id_mailsubscribinglists), $sep);
return $url;
}
+/**
+ * URL unconsent
+ * pour refuser de consentir sur une ou plusieurs listes precises, fournir le ou les ID dans $id_mailsubscribinglist
+ * @param string $email
+ * @param string $jeton
+ * @param int|array $id_mailsubscribinglists
+ * une ou plusieurs listes a confirmer
+ * @param string $sep
+ * @return string
+ */
+function mailsubscriber_url_unconsent($email, $jeton, $id_mailsubscribinglists=null, $sep = "&") {
+ $url = generer_url_action("unconsent_mailsubscriber", "email=" . urlencode($email), false, true);
+ $url = parametre_url($url, "arg", mailsubscriber_cle_action("unconsent", $email, $jeton, $id_mailsubscribinglists), $sep);
+
+ return $url;
+}
+
function mailsubscriber_afficher_filtre_segment($segment) {
$out = array();
diff --git a/newsletter/reconsent.php b/newsletter/reconsent.php
index 7696237..c5cad82 100644
--- a/newsletter/reconsent.php
+++ b/newsletter/reconsent.php
@@ -17,15 +17,14 @@ include_spip('inc/autoriser');
* Reconsentir un subscriber par son email
*
* si une ou plusieurs listes precisees, le subscriber reconsent ces seules listes
-
- * si aucune liste precisee, le subscriber est ne reconsent rien (on ne fait rien)
+ * si aucune liste precisee, le subscriber ne reconsent rien (on ne fait rien)
+ * par défaut l'état du reconsent est true (oui j'accepte), mais si on passe un status false, c'est un unconsent
*
* @param $email
* champ obligatoire
* @param array $options
- * listes : array
- * notify : bool
- * comment : string commentaire sur la raison de consentement
+ * array $listes
+ * ?bool $status : status du consentement (true par defaut)
* @return bool
* true si inscrit, false sinon
*/
@@ -33,6 +32,9 @@ function newsletter_reconsent_dist($email, $options = array()) {
static $dejala = false;
if ($dejala) {return false;}
+ $status = (isset($options['status']) ? $options['status'] : true);
+ $log_action = ($status ? 'accepte' : 'refuse');
+
// chercher si un tel email est deja en base
$row = sql_fetsel('*', 'spip_mailsubscribers', 'email=' . sql_quote($email));
if (!$row) {
@@ -71,13 +73,13 @@ function newsletter_reconsent_dist($email, $options = array()) {
if ($ids) {
spip_log(
- sprintf("reconsentirmailsubscriptions %s (#%s) accepte les listes %s (%s)", $email, $id_mailsubscriber, implode(', ', $listes), implode(', ', $ids)),
+ sprintf("reconsentirmailsubscriptions %s (#%s) $log_action les listes %s (%s)", $email, $id_mailsubscriber, implode(', ', $listes), implode(', ', $ids)),
"mailsubscribers." . _LOG_INFO_IMPORTANTE
);
sql_updateq(
'spip_mailsubscriptions_optins',
[
- 'statut' => 'valide',
+ 'statut' => $status ? 'valide' : 'refuse',
'date' => (new \DateTime())->format('Y-m-d 00:00:00'),
],
[
@@ -88,7 +90,7 @@ function newsletter_reconsent_dist($email, $options = array()) {
// l’indiquer direcetement sur le subscriber
$trace_optin = '';
foreach ($listes as $liste) {
- $trace_optin .= '[' . $liste . ':reconsent]';
+ $trace_optin .= '[' . $liste . ':reconsent '.($status ? ' OK' : ' NIET').']';
}
$old_trace = sql_getfetsel('optin', 'spip_mailsubscribers', 'id_mailsubscriber=' . $id_mailsubscriber);
$new_trace = mailsubscribers_trace_optin($trace_optin, $old_trace);
diff --git a/notifications/mailsubscriber_reconsent.html b/notifications/mailsubscriber_reconsent.html
index 108148a..339a5c4 100644
--- a/notifications/mailsubscriber_reconsent.html
+++ b/notifications/mailsubscriber_reconsent.html
@@ -23,7 +23,7 @@
[(#SET{url_confirm,[
[(#VAL{mailsubscriber:reconsent_confirmsubscribe_texte_email_2}|_T{#ARRAY{url_reconsent_confirmsubscribe,#GET{url}},#ARRAY{sanitize,0}})]