Moodle / WSPP et get_my_courses

Moodle / WSPP et get_my_courses

par Florent Carlier,
Nombre de réponses : 2
Bonjour,

Je travaille sur des applications pouvant être Mobile (tel un iPhone) mais basé
sur la plateforme Moodle pour le coté présentiel des activités de cours.

Ayant des problèmes pour les aspects Login/Logout pour les connexions via mon application, j'ai installé WSPP pour faire du soap.

Et je me suis apercu d'un symptôme bizarre dont je vais tenté de vous expliquer :

J'ai un script PHP avec l'appel suivant :
33 if ($mycourses = get_my_courses($user->id, null, null, false )) {

Si je ne suis pas logguer avec mon firefox, je vois uniquement les cours visible.
Si je suis en admin loggué, je vois tous !!

Trés bien !!

Maintenant, je veux que ce soit mon application mobile, j'ai donc mis WSPP (1.5.13)
J'ai écrit un autre script adapté :
38 $moodle= new MoodleWS();
39 try {
40 $lr= $moodle->login(LOGIN,PASSWORD);
41 }
42 catch (Exception $e) {
43 }
44
45 $mycourses = $moodle->get_my_courses($lr->client,$lr->sessionkey, $user->id,'');

Si mon fichier auth.php n'est pas correctement renseigné, il ne se passe rien
Par contre avec mon admin/password, je récupére la liste des cours du user mais uniquement
la liste des visibles alors que je souhaite de la même manière avoir la liste des cours du user
ou il est inscrit même si le cours est provisoirement invisible.

Dans les deux cas, je génere un fichier XML avec les infos dont mon application à besoin.

Merci d'avoir eu le courage de lire tous cela, auriez-vous des idées ? un bug ?

Cordialement
Moyenne des évaluations  -
En réponse à Florent Carlier

Re: Moodle / WSPP et get_my_courses

par Florent Carlier,
Suite à de long échanges avec Patrick Pollet, la solution a été identifié :

"
Votre code fonctionne Ok en Moodle 1.7 mais pas en 1.9. Cela vient du fait qu'en 1.9 la fonction get_my_courses (dans lib/datalib.php) a été entierement réécrite et repose intimement sur la variable globale $USER qui est mal renseignée par le web service dans sa version actuelle ... d'ou les anomalies."


Aprés de la mixtouille, voici la solution :"

Plutot que de changer le coeur de Moodle j'ai remis la ligne d'origine et ai
SEULEMENT modifié get_my_courses dans server.class.php pour renseigner en partie $USER
//ajouter ces 4 lignes

 global $USER;
 $USER->id=$cuid; // l'utilisateur loggué, peut etre ou pas admin
 unset($USER->access); // TRES IMPORTANT sinon ne trouve aucun cours !


//juste avant celle-ci
 $sort=$sort?$sort:'fullname';

"

Et voila, le probleme corrigé, un grand merci à Patrick.


A+

En réponse à Florent Carlier

Re: Moodle / WSPP et get_my_courses

par Patrick Pollet,
et ne pas oublier de modifier la fonction filter_course comme suit :


function filter_course ($client,$course) {
//return false if not visible to $client
$cuid=$this->get_session_user($client);
if ($this->isteacher($course->id,$cuid)) //rev 1.5.14 include admin (cf Florent Carlier)
return $course;
$course->password=''; // do not disclose it to non teacher
// question : is course's category is not visible, should we hide it ?
if (!$this->using17)
return ($course->visible ? $course:false); //wrong if called by get_my_courses
else {
// check capability , course maybe non visible
$context = get_context_instance(CONTEXT_COURSE, $course->id);
if (has_capability('moodle/course:view', $context,$cuid,false))
return $course;
else
return false;
//return ($course->visible ? $course:false); WRONG !
}
}


Un patch sera bientôt commité dans le CVS.

@+