Powermail permet d’appliquer des validations personnalisées à n’importe quel champ du formulaire. La validation peut être effectuée soit par Typoscript, soit par php en utilisant une userfunc.
C’est ce dernier cas qui nous intéresse.
Pour appeler la userfunction…pas de pb :
plugin.tx_powermail_pi1 {
customvalidation.UIDxxx.includelib = fileadmin/userfunc/proc.php
customvalidation.UIDxxx.userfunc = proc->method
customvalidation.UIDxxx.errormsg = <p>Erreur dans le format des fichiers</p>
}
Côté php, il suffit de remonter les erreurs avec la constante errormsg :
if ($erreur!="")
return array(
'result' => false, // true allows, false disallows
'errormsg' => $erreur, // errormessage
);
else
return array(
'result' => true, // true allows, false disallows
);
Le problème c’est qu’avec cette version de powermail (1.6.9), ça ne marche pas ! On a beau relire la doc dans tous les sens…ça ne marche pas. Et pourtant un petit tour sur le bugtracker, nous a donné la solution :
Fichier : pi1/class.tx_powermail_mandatory.php
Ligne : 442
Remplacer if (isset($result->errormsg)){ par if (isset($result[‘errormsg’])){
Ce qui donne :
$result = t3lib_div::callUserFunction($method, $paramsValue, $paramsRef, null, 2);
$resultStatus = false;
// Get the actual validation result and eventual error message
if (is_object($result)){ // check if userFunc returns an object
$resultStatus = $result->result;
if (isset($result->errormsg)){
$message = $result->errormsg;
}
} elseif (is_array($result)) { // check if userFunc returns an array
$resultStatus = $result['result'];
//if (isset($result->errormsg)){
if (isset($result['errormsg'])){
$message = $result['errormsg'];
}
} elseif (is_bool($result)) { // check if userFunc returns true or false
$resultStatus = $result;
} else {
throw new Exception('Unknown return on custom validation');
}
Comme quoi dés fois, ça tient à pas grand chose 🙂