Problème avec le format cloze

Problème avec le format cloze

par Étienne Rozé,
Nombre de réponses : 7
Bonjour,

Nous sommes en train de mettre en place un test. Tout va bien sauf pour les questions au format cloze : nous nous heurtons aux problèmes suivants : parfois,non interprétation du code cloze ( affiché tel quel) , non prise en compte des modifications voire erreur php ( hélas, je n'ai pas conservé le message et je n'arriva pas à le reproduire).
Version Moodle utilisée : dernière version 1.6

Est-ce que vous vous confrontez aux mêmes problèmes ?


Moyenne des évaluations  -
En réponse à Étienne Rozé

Re: Problème avec le format cloze

par Joseph Rézeau,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour Etienne,

Le format de questions Cloze (dans l'activité Test/Quiz) de Moodle est extrêmement chatouilleux.tongueout Une source fréquente d'erreurs (non-interprétation du code) est la présence de sauts de ligne invisibles dans le texte de la question. Il ne faut jamais faire de copier-coller depuis un traitement de texte vers le texte de la question Cloze en mode édition. En cas de problème Il faut vérifier en mode "code HTML" qu'il n'y a aucun caractère ni saut de ligne parasite.

Si tu as encore des problèmes le mieux est de poster ici le code intégral d'une question Cloze qui pose problème, pour diagnostic.

Joseph

En réponse à Joseph Rézeau

Re: Problème avec le format cloze

par Étienne Rozé,
Oui, j'en étais à cette constatation du problème des saut de ligne....
Il me semble même que le problème vient de cette ligne de code :
(ligne 592 du fichier : question/type/multianswer/questiontype.php )

define("ANSWER_ALTERNATIVE_FEEDBACK_REGEX",
'.*?(?<!\\\\)(?=[~}]|$)');

Mais je n'en suis pas sur....
Et je ne suis pas sur de comprendre bien la syntaxe surtout de la partie (?<!\\\\)
Globalement je comprends : un certain nombre de caractère ( au moins un) non suivi de \\ et suivi de ~ ou } ou fin de chaine...

Bref je ne suis pas plus avancé !!!

Où peut-on trouver une description du format cloze ?


En réponse à Étienne Rozé

Re: Problème avec le format cloze

par Joseph Rézeau,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Le format multianswer (cloze) est tellement compliqué que Tim Hunt, qui est l'actuel responsable du module Test/Quiz, refuse d'y mettre le nez... Je ne comprends pas grand-chose non plus à la syntaxe que tu signales.

Mais pas besoin de modifier quoi que ce soit dans le code php. Il faut juste faire très attention aux sauts de ligne cachés. A partir de là, plus de pb. J'utilise très régulièrement ce type de question.

Pour la description du format cloze, le mieux est de regarder l'exemple fourni par l'aide en ligne lorsqu'on est en mode édition de ce type de question. Et aussi la documentation sur MoodleDocs (en anglais).

Bon courage

Joseph

En réponse à Joseph Rézeau

Re: Problème avec le format cloze

par Étienne Rozé,
Ok. Merci pour tes infos. J'avais vu les exemples mais une description exaustive comme donnée dans la doc me convient mieux ( j'aurais pu penser que c'était là !!)
Je pense que le (?<!\\\\) a à voir avec l'utilisation de \ pour "échapper" les caractères réservés dans les réponses et les feedbacks...
Mais pourquoi les saut de lignes poses problèmes... c'est encore un mystère...

C'est sur qu'il faut donc faire attention aux sauts de ligne... mais bon ...
En réponse à Étienne Rozé

Re: Problème avec le format cloze

par Valery Fremaux,

Bonjour Etienne,

moi aussi j'ai quelques soucis avec Cloze (balises qui sautent complètement, des erreurs php si il n'y a aucune balise dans le texte). Je vais y mettre le nez après avoir testé les patches proposés.

Pour info, j'ai fait une petite traduction des spec REGEX* pour les look-ahead et les look-behind (c'est une définition POSIX des "ectended regex", donc en principe celle qui est implémentée aussi dans php)

origine : la documentation du Perl qui est excellente, mais ardue.


(?:pattern)

(?imsx-imsx:pattern)

Pour grouper des séquences caractères, sans capturer ; les expressions sont regroupées comme dans des parenthèses normales '()', mais ne produisent pas des sous-motifs comme le fait '()' does. Donc

(?=pattern)

Une assertion de largeur nulle en "look-ahead" (test sur ce qui suit). Par exemple, preg_match("/\w+(?=\t)/", $var, $matches) trouve un mot SUIVI PAR une tabulation, mais sans prendre en compte la tabulation dans le motif $matches[0].

(?!pattern)

La négation de la prcédente. Par exemple preg_match("/foo(?!bar)/", $var, $matches) trouve toute occurrence de 'foo' qui n'EST PAS SUIVI PAR 'bar'. Notez que "look-ahead" et "look-behind" ne sont PAS identiques. Vous ne pouvez utiliser cette forme pour du "look-behind" : Si vous cherchez 'bar' non précédé par 'foo', /(?!foo)bar/ ne fera pas ce que vous pensez. La forme (?!foo) dit juste que "ce qui suit ne doit pas être 'foo'" -- mais ne dit pas, c'est 'bar', et donc 'foobar' sera détecté. Vous devrez écrire plutôt quelque chose comme /(?!foo)...bar/ pour ce type de détection.

(?<=pattern)

Une assertion de largeur nulle en "look-behind" (test sur ce qui précède). Par exemple, preg_match("/(?<=\t)\w+/", $var, $matches) le mot QUI SUIT une tabulation, sans inclure la tabulation dans le motif résultat. Ne fonctionne que pour un motif "look-behind" de largeur fixe.

(?<!pattern)

L'inversion de la précédente. Par exemple pregmatch("/(?<!bar)foo/", $var, $matches) trouve toute occurrence de 'foo' QUI NE SUIT PAS 'bar'. Ne fonctionne que pour un motif "look-behind" de largeur fixe.

En réponse à Joseph Rézeau

Re: Problème avec le format cloze

par Étienne Rozé,
N'étant pas expert en expression régulière j'ai fait ces quelques lignes pour éliminer le problème agaçant des sauts de lignes dans un format cloze
à placer dans le fichier question/type/multianswer/questiontype.php à partir de la ligne 680
Si des téméraires sourire pouvaient tester...

// not a beautiful hack to eliminate the end of line problem
$toreplace = array("\n","<br />","<br>");
$tab = split('[{}]',$text);
$l= count($tab);
for ($i=0;$i<$l-1;$i=$i+2) {
$lachaine.=$tab[$i].'{'.str_replace($toreplace,'',$tab[$i+1]).'}';
}
$text =$lachaine.$tab[$i];

En réponse à Étienne Rozé

Re: Problème avec le format cloze

par Joseph Rézeau,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Bravo Etienne.
Je viens de tester ton "not beautiful hack"black eye et ça m'a l'air de bien fonctionner. Au fait, tu l'as testé avec tes questions rebelles, et ça marchait?
On pourrait le proposer dans le bug tracker, mais je doute que Tim Hunt fasse quoi que ce soit.
Bon w-end,
Joseph