[RESOLU] Ubercart et la notification de l'expiration d'un rôle, une solution?

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Les actions conditionnelles d'Ubercart 2.x ne semblent pas supporter les dates relatives à la date d'expiration d'un rôle. Elles permettent seulement d'entrer une date fixe à laquelle tous les mails seront envoyés.

L'idée est de signaler par mail à chaque utilisateur que leur abonnement de trois mois se termine bientôt, par exemple une première fois à 4 semaines et une seconde fois à deux semaines de la date d'expiration.

Bien entendu, les dates d'échéance sont différentes pour chacun des utilisateurs.

J'ai gribouillé un script à placer dans les conditions customisées, et comme c'est mes premiers pas en php, j'aimerais avoir votre avis.

function send($expiration) {  //$expiration est une des variables proposées par Ubercart danse les actions conditionnelles

$datenow = getdate();

$week = 7 * 24 * 60 * 60;
$twoweeks = 2 * $week;
$fourweeks = 4 * $week;

$mail1 = getdate($expiration -$fourweeks); // 4 semaines avant xpiration
$mail2 = getdate($expiration -$twoweeks); // 2 semaines avant expiration

// format dates to be compared
$now = $datenow['year'] .' '. $datenow['mon'] .' '.$datenow['mday'];
$mail1format = $mail1['year'] .' '.$mail1['mon'] .' '.$mail1['mday'];
$mail2format = $mail2['year'] .' '.$mail2['mon'] .' '.$mail2['mday'];

if ($now == $mail1format || $now == $mail2format) {
    return TRUE; //  Send the email notification
  }

  else {
    return FALSE; //  ne pas envoyer de courriel
  }

}

// appel de la fonction
send($expiration);

Je voudrais savoir si je suis sur la bonne piste?

Est-ce qu'il y a une solution plus simple?

Est-ce que c'est bien comme ça qu'on écrit des conditions customisées dans Ubercart?

Version de Drupal : 

UPDATE
Dans les features des produits d'Ubercart, il y une option qui permet de notifier l'utilisateur que son rôle expire. Il se trouve à l'adresse admin/store/settings/products/edit/features, dans Role assignment settings, si le module Role assignment est activé.

Malheureusement, il ne semble pas y avoir de moyens de notifier un utilisateur deux fois ou plus.

Je mets donc en Résolu.