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,[
(#INCLURE{fond=emails/inc-button,url=[(#EMAIL*|mailsubscriber_url_reconsent{#JETON*,#ID_MAILSUBSCRIBINGLIST}|url_absolue)],label=<:newsletter:bouton_reconsent_confirm:>,width=250px})

]})] -[(#SET{url_cancel,[
(#INCLURE{fond=emails/inc-button,url=[(#EMAIL*|mailsubscriber_url_unsubscribe{#JETON*,#ID_MAILSUBSCRIBINGLIST}|url_absolue)],label=<:newsletter:bouton_reconsent_abort:>,width=250px})

]})] +[(#SET{url_cancel,[
(#INCLURE{fond=emails/inc-button,url=[(#EMAIL*|mailsubscriber_url_unconsent{#JETON*,#ID_MAILSUBSCRIBINGLIST}|url_absolue)],label=<:newsletter:bouton_reconsent_abort:>,width=250px})

]})] [(#SET{url, #GET{url_confirm}|concat{#GET{url_cancel}}})]

[(#VAL{mailsubscriber:reconsent_confirmsubscribe_texte_email_2}|_T{#ARRAY{url_reconsent_confirmsubscribe,#GET{url}},#ARRAY{sanitize,0}})]