Creo que lo que buscas es esto:
MNG - Send Custom PM or Email to User on Paid Subscription. De hecho, es lo que usé en su momento con vB3 (hay un mensaje mío por ahí confirmando que funciona). Se supone que funciona en vB4, pero no lo he probado.
De todos modos vB4 envía unos correos al usuario cuando la suscripción de pago va a caducar (yo ya no uso la modificación anterior y dejo en manos de vB los avisos). Busca las frase "paidsubscription_reminder", y te aparecerán un par de resultados haciendo referencia al título y al mensaje que se envía por correo. El otro día un usuario me avisó de que le había llegado el correo y no sabía de qué iba la fiesta (no recordaba que tenía dicha suscripción), así que funcionar, funciona. Por defecto el aviso se envía entre 2 y 3 días antes de que caduque. Si lo quieres cambiar, hay que editar el archivo "/includes/cron/subscriptions.php" y buscar el siguiente código (debería aparecerte en la línea 48):
PHP:
$subscriptions_reminders = $vbulletin->db->query_read("
SELECT subscriptionlog.subscriptionid, subscriptionlog.userid, subscriptionlog.expirydate, user.username, user.email, user.languageid
FROM " . TABLE_PREFIX . "subscriptionlog AS subscriptionlog
LEFT JOIN " . TABLE_PREFIX . "user AS user ON (user.userid = subscriptionlog.userid)
WHERE subscriptionlog.expirydate >= " . (TIMENOW + (86400 * 2)) . "
AND subscriptionlog.expirydate <= " . (TIMENOW + (86400 * 3)) . "
AND status = 1
");
Por explicarlo un poco... TIMENOW es la fecha en la que el script se ejecuta para comprobar el estado de las suscripciones. Eso de 86400 son los segundos que hay en un día (24 horas · 60 minutos · 60 segundos). De modo que las condiciones que figuran son:
Insertar CODE, HTML o PHP:
subscriptionlog.expirydate >= " . (TIMENOW + (86400 * 2)) . "
Que hace referencia a que la fecha de caducidad esté a más de dos días desde TIMENOW. Y la otra línea:
Insertar CODE, HTML o PHP:
subscriptionlog.expirydate <= " . (TIMENOW + (86400 * 3)) . "
Parecido, pero no igual: que la fecha de caducidad esté a menos de tres días desde TIMENOW.
Así que cuando el script se ejecuta y la fecha de caducidad está en ese margen, entre 2 y 3 días, se enviará el aviso. Que quieres que el aviso se envíe 7 días antes (bueno, entre 7 y 8 días)¿? Pues cambia en la primera línea el 2 por un 7 y en la segunda el 3 por un 8.
Espero haberme explicado bien (y no haberme colado
). En cualquier caso, no he probado esto y no puedo garantizar que funcione (no soy programador ni mucho menos), y lo digo por intuición y por cómo lo haría yo. De modo que antes de hacer cualquier cambio,
haz una copia de seguridad del archivo subscriptions.php, aunque los cambios sean simples y fáciles de corregir. Por si acaso. Repito:
haz copia de seguridad.
Un saludo!!!