fix: dans le mail de reconsent, l'action desinscription est envoyee vers unconsent_mailsubscriber qui va demander une desinscription + marquer la demande d'optin en refusee (on utilise l'action unsubscribe en sous-jacent)

dev/mailsubscribers_ask_optin_if_an_email_dont_send_feedback
Cerdic 11 months ago
parent d694699278
commit 25f2236944

@ -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) {

@ -0,0 +1,35 @@
<?php
/**
* Plugin mailsubscribers
* (c) 2012 Cédric Morin
* Licence GNU/GPL v3
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Ne pas consentir à l'option et se desabonner
*
* @param string $email
* @param array $id_mailsubscribinglists
* @param bool $double_optin
*/
function action_unconsent_mailsubscriber_dist($email = null, $id_mailsubscribinglists = null, $double_optin = null) {
include_spip('mailsubscribers_fonctions');
include_spip('inc/mailsubscribers');
if (is_null($email)) {
$arg = mailsubscribers_verifier_args_action('unconsent');
if ($arg){
list($email, $id_mailsubscribinglists) = $arg;
}
$double_optin = true;
} else {
if (is_null($double_optin)) {
$double_optin = false;
}
}
$unsubscribe_mailsubscriber = charger_fonction('unsubscribe_mailsubscriber', 'action');
$unsubscribe_mailsubscriber($email, $id_mailsubscribinglists, $double_optin, true);
}

@ -15,7 +15,7 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* @param array $id_mailsubscribinglists
* @param bool $double_optin
*/
function action_unsubscribe_mailsubscriber_dist($email = null, $id_mailsubscribinglists = null, $double_optin = true) {
function action_unsubscribe_mailsubscriber_dist($email = null, $id_mailsubscribinglists = null, $double_optin = null, $unconsent = false) {
include_spip('mailsubscribers_fonctions');
include_spip('inc/mailsubscribers');
@ -24,8 +24,11 @@ function action_unsubscribe_mailsubscriber_dist($email = null, $id_mailsubscribi
if ($arg){
list($email, $id_mailsubscribinglists) = $arg;
}
$double_optin = true;
} else {
$double_optin = false;
if (is_null($double_optin)) {
$double_optin = false;
}
}
// on prend la langue la plus probable pour le visiteur du moment qu'elle soit dans $GLOBALS['meta']['langues_multilingue']
@ -110,7 +113,14 @@ function action_unsubscribe_mailsubscriber_dist($email = null, $id_mailsubscribi
if ($has_other){
$corps .= "<br /><br />" . 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 .= "<br /><br />" . 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);
}
}
}

@ -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 = "&amp;") {
// 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 = "&amp;") {
$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();

@ -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()) {
// lindiquer 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);

@ -23,7 +23,7 @@
[(#SET{url_confirm,[<br><center>(#INCLURE{fond=emails/inc-button,url=[(#EMAIL*|mailsubscriber_url_reconsent{#JETON*,#ID_MAILSUBSCRIBINGLIST}|url_absolue)],label=<:newsletter:bouton_reconsent_confirm:>,width=250px})</center><br>]})]
[(#SET{url_cancel,[<br><center>(#INCLURE{fond=emails/inc-button,url=[(#EMAIL*|mailsubscriber_url_unsubscribe{#JETON*,#ID_MAILSUBSCRIBINGLIST}|url_absolue)],label=<:newsletter:bouton_reconsent_abort:>,width=250px})</center><br>]})]
[(#SET{url_cancel,[<br><center>(#INCLURE{fond=emails/inc-button,url=[(#EMAIL*|mailsubscriber_url_unconsent{#JETON*,#ID_MAILSUBSCRIBINGLIST}|url_absolue)],label=<:newsletter:bouton_reconsent_abort:>,width=250px})</center><br>]})]
[(#SET{url, #GET{url_confirm}|concat{#GET{url_cancel}}})]
<p>[(#VAL{mailsubscriber:reconsent_confirmsubscribe_texte_email_2}|_T{#ARRAY{url_reconsent_confirmsubscribe,#GET{url}},#ARRAY{sanitize,0}})]</p>

Loading…
Cancel
Save