Bonjour,
Dernière évolution du code suite à la proposition d'Erwan :
public function user_menu($user = null, $withlinks = null) { $usermenu = parent::user_menu($user = null, $withlinks = null);
// Expression régulière pour isoler la partie entre parenthèses qui nous intéresse $pattern = '/\(.+'. get_string('login') .'.+\)/';
// Si l'expression est détectée, on retourne une valeur modifiée
if (preg_match($pattern, $usermenu)) {
// Récupération du lien de connexion
$loginurl = get_login_url();
// composition du lien de connexion en utilisant la class html_writer
$replacement = html_writer::link($loginurl, get_string('login'));
// remplacement de la chaîne détectée par le lien composé
$html = preg_replace($pattern, $replacement, $usermenu);
return $html;
// Sinon on reprend l’exécution classique de la méthode parent
} else { return parent::user_menu($user = null, $withlinks = null); } }
L'objectif a été d'être le plus précis possible pour ne pas impacter le comportement par défaut de la méthode user_menu().
L'avantage c'est que du coup, même si le rendu retourné est modifié suite à une mise à jour et que l'expression rationnelle ne fonctionne plus, on revient à l’exécution normale de la méthode parent, sans risquer de retourner une erreur.
@Stéphane : Ta proposition est effectivement plus facile à mettre en œuvre mais on touche directement au code source de Moodle avec tout ce que cela implique.
Seb