Ho scoperto dove sta il problema. C’è un chiaro "bug" nella funzione webLoginSendNewPassword del file weblogin.common.inc.php nel core dello snippet weblogin.
La funzione ha questo codice
function webLoginSendNewPassword($email,$uid,$pwd,$ufn){
global $modx;
$mailto = $modx->config['mailto'];
$websignupemail_message = $modx->config['websignupemail_message'];
$emailsubject = $modx->config['emailsubject'];
$emailsender = $modx->config['emailsender'];
$site_name = $modx->config['site_name'];
$site_start = $modx->config['site_start'];
$message = sprintf($websignupemail_message, $uid, $pwd); // use old method
// replace placeholders
$message = str_replace("[+uid+]",$uid,$message);
$message = str_replace("[+pwd+]",$pwd,$message);
$message = str_replace("[+ufn+]",$ufn,$message);
$message = str_replace("[+sname+]",$site_name,$message);
$message = str_replace("[+semail+]",$emailsender,$message);
$message = str_replace("[+surl+]",dirname(PHP_SELF),$message);
if(!mail($email, $emailsubject, $message, "From: ".$emailsender."\r\n"."X-Mailer: Content Manager - PHP/".phpversion())) {
return webLoginAlert(WL_ERRONSEND.$mailto,1);
}
return true;
}
La linea incrimanata
è la seguente:
$message = str_replace("[+surl+]",dirname(PHP_SELF),$message);
che chiaramente non porta a nulla. Al massimo potrebbe essere
$message = str_replace("[+surl+]",dirname($_SERVER['PHP_SELF']),$message);
anche in questo caso non utile allo scopo.
Per poter ovviare al problema bisogna modificare la funzione come segue
function webLoginSendNewPassword($email,$uid,$pwd,$ufn){
global $modx;
//aggiungere questa linea
global $site_url;
$mailto = $modx->config['mailto'];
$websignupemail_message = $modx->config['websignupemail_message'];
$emailsubject = $modx->config['emailsubject'];
$emailsender = $modx->config['emailsender'];
$site_name = $modx->config['site_name'];
$site_start = $modx->config['site_start'];
$message = sprintf($websignupemail_message, $uid, $pwd); // use old method
// replace placeholders
$message = str_replace("[+uid+]",$uid,$message);
$message = str_replace("[+pwd+]",$pwd,$message);
$message = str_replace("[+ufn+]",$ufn,$message);
$message = str_replace("[+sname+]",$site_name,$message);
$message = str_replace("[+semail+]",$emailsender,$message);
//modificare questa linea come segue
$message = str_replace("[+surl+]",$site_url,$message);
if(!mail($email, $emailsubject, $message, "From: ".$emailsender."\r\n"."X-Mailer: Content Manager - PHP/".phpversion())) {
return webLoginAlert(WL_ERRONSEND.$mailto,1);
}
return true;
}
Ciao