API Moodle - Classes abstraites

API Moodle - Classes abstraites

par Olivier Valentin,
Nombre de réponses : 2
Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles
Bonjour tout le monde !

Ne recevant pas trop d'échos du coté des forums anglais, je tente ma chance de ce coté...
J'ai commencé à jouer avec l'API Moodle autour des critères d'achèvement (Completion). Seulement, les choses sont un peu plus compliquées que prévues... En effet, la réutilisation des fonctions de cette API me renvoient en permanence entre des erreurs, qui me semblent indiquer qu'elles sont bien protégées.

J'ai par exemple essayé d'employer la fonction "get_available_custom_rule"s qui se trouve dans une classe abstraite : activity_custom_completion.

  •     Si je l'appelle de cette façon, Moodle m'indique que j'appelle une méthode non-statique de façon statique ("call a non-static method statically) ;
activity_custom_completion::get_available_custom_rules($cm);
  •     Deuxième technique, si j'essaye instancier une classe abstraite à la place de la méthode 1, Moodle fait aussi la tête et répond que je ne peux pas instancier une classe abstraite !
$test = new activity_custom_completion();
$test2 = $test->get_available_custom_rules($cm);
D'une façon ou d'une autre, impossible d'appeler ces fonctions, je suis bloqué...
Est-ce que j'aurais manqué queque chose ? Est-ce que ces fonctions sont totalement protégées et qu'il est vain de tenter de les appeler ? Ou existe-t-il une autre manière de les appeler ??

Merci pour vos lumières !

Olivier
Moyenne des évaluations  -
En réponse à Olivier Valentin

Re: API Moodle - Classes abstraites

par Céline Perves,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles
  • Bonjour,

tu as effectivement compris que tu ne pouvais appeler une méthode non statique sans instancier la classe à laquelle elle appartient

activity_custom_completion est bien une classe abstraite, il faudrait donc que tu trouves la/les classes qui l'implémentent

  • pour cela cherche dans le code extends activity_custom_completion et tu trouveras les classes que tu peux instancier
  • le problème est que là tu dois utiliser les classes des modules que tu observes (tu as une implémentation par module)
  • Il faut donc trouver une méthode static qui te renvoi la classe qui correspond à ton module
  • c'est ce que fait activity_custom_completion::get_cm_completion_class($this->cminfo->modname)
  • elle te retourne la classe custom_completion qui étend activity_custom_completion

En conclusion face à une classe abstraite cherche les  classes qui l'étendent et/ou celle qui t'en retourne une implémentation

Bonne Journée

Céline

Moyenne des évaluations Utile (2)
En réponse à Céline Perves

Re: API Moodle - Classes abstraites

par Céline Perves,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles
coquille dûe à copié-collé
c'est activity_custom_completion::get_cm_completion_class($modname) qu'il faut appeler
Moyenne des évaluations Utile (1)