Oui, tout à fait, et ça marche plutôt bien, à part quelques situations particulières.
Premièrement :
Moodle permet de rediriger la fonction "login" vers une URL extérieure, Le lien "connexion" pointe alors vers la page de login de votre ENT.
Deuxièmement, vous pouvez effectuer l'identification sur votre ENT. Il faut alors simplement en profiter pour récupérer un cookie Moodle. L'astuce n'est pas très belle mais marche parfaitement :
Dans une IFRAME invisible (style="width : 0px ; height : 0px", vous appelez l'URL de retour de la procédure de login normal de Moodle, en lui répercutant les paramètres demandés par Moodle. Moodle va alors exécuter le login dans la frame et envoyer le cookie. Il considère désormais l'utilisateur connecté.
Voici un boût de code qui fait ça dans un CMS que je développe, sur la page pointée par Moodle :
Avec les trois clefs suivantes dans un fichier de configuration :
$_CFG['modules']['externals']['moodle']['root'] = $_CFG['SITE_URL'] . '/moodle';
$_CFG['modules']['externals']['moodle']['accessUrl'] = $_CFG['SITE_URL'] . '/moodle/login/index.php';
$_CFG['modules']['externals']['moodle']['logoutUrl'] = $_CFG['SITE_URL'] . '/moodle/login/logout.php';
<?
// this is a moodle bridge implementation
if (@$_CXT->hasLoggedIn){
$login = get('login', 'POST');
$password = get('password', 'POST');
if (@$_CFG['modules']['externals']['moodle']['accessUrl'] != ''){
?>
<form name="moodle_bridge" action="<?= $_CFG['modules']['externals']['moodle']['accessUrl'] ?>" method="POST" target="foo_moodle">
<input type="hidden" name="username" value="<?= $login ?>">
<input type="hidden" name="password" value="<?= $password ?>">
</form>
<iframe name="foo_moodle" style="display : none ; visibility : hidden ; width : 250px ; height : 200px"></iframe>
<script type="text/javascript">
document.moodle_bridge.submit();
</script>
<input type="hidden" name="referer" value="<?= get('referer', 'POST') ?>">
<?
$referer = get('referer', 'REQUEST');
if (preg_match("/moodle\/login\/index\.php/", $referer)){
?>
<script type="text/jevescript">
document.location.href = "<?= $referer ?>";
</script>
<?
}
}
}
?>
On peut faire un pont identique dans l'autre sens, en modifiant légèrement la page d'arrivée de Moodle. On fait également le même type de wrapping pour le logout :
Voilà l'astuce à la ... que j'utilise, dans la procédure de logout de mon site :
<img src="<?= $_CFG['modules']['externals']['moodle']['logoutUrl'] ?>" style="width : 0px ; height : 0px">
En rapport aux clefs ci-dessus.
Un peu "tricky" quand même... non ?