Question : Modifier une partie de plugin existant depuis un autre plugin

Question : Modifier une partie de plugin existant depuis un autre plugin

par Romain D,
Nombre de réponses : 5

Bonjour,

Je suis actuellement en train de développer un plugin pour modifier une partie du fonctionnement du plugin natif de forum (mod_forum) de Moodle afin de permettre, dans certains cas, les postes anonymes.

J'ai déjà réussi à atteindre l'objectif souhaité en modifiant directement le code du plugin, cependant, j'ai pour contrainte de modifier les parties voulues depuis un plugin additionnel (que j'ai nommé local_postano), afin de permettre son installation et sa désinstallation sans impacter le code du plugin mod_forum directement.

Je souhaiterais donc pouvoir aller modifier certaines parties du code de mod_forum sans directement toucher au code source de ce plugin natif. En ayant fait quelques recherches j'ai trouvé sur la page de la Doc pour les plugins locaux le mécanisme d'injection de scripts personnalisés qui semble, à première vue, correspondre à ce dont j'aurais besoin mais je ne comprends pas bien son fonctionnement ni comment il faudrait l'utiliser si cela pouvait effectivement être la solution à mon problème.

Il s'agit de mon premier développement de plugin Moodle (mis à part le plugin local_helloworld à développer comme exercices à disposition sur learn.moodle.org), je m'excuse donc par avance s'il s'agit de quelque chose d'évident auquel je n'aurait pas prêté attention ou si un poste, que je n'ai pas trouvé sur le forum, répond déjà à ma problématique.

Merci d'avance du temps passé à me répondre, bonne journée.

Romain Deleau


Moyenne des évaluations  -
En réponse à Romain D

Re: Question : Modifier une partie de plugin existant depuis un autre plugin

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Bonjour Romain,

Sans répondre à ta question, je voulais juste t'informer qu'il existait un plugin permettant de poster comme anonyme, plus mis à jour depuis 5 ans : https://moodle.org/plugins/view.php?plugin=local_anonymousposting

Sinon, il existe une demande, qui intéresse beaucoup de monde (cette fonctionnalité étant beaucoup demandée) : MDL-1071 !

Séverin
En réponse à Séverin Terrier

Re: Question : Modifier une partie de plugin existant depuis un autre plugin

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
C'est étrange, l'individu qui est "responsable" de MDL-1071 ne m'est pas inconnu 🤔😅
En réponse à Patrick Lemaire

Re: Question : Modifier une partie de plugin existant depuis un autre plugin

par Nicolas Martignoni,
Avatar Développeurs Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Incroyable, je ne le savais même pas (ou plus) ! Je pense que j'ai peut-être annoncé la chose dans l'ancien outil de gestion des améliorations/corrections, il y a une éternité.

Je me suis désattribué le ticket afin d'éviter toute ambiguïté, merci pour le signalement.

Modification. En fait on m'a attribué par erreur ce ticket hier.

En réponse à Nicolas Martignoni

Re: Question : Modifier une partie de plugin existant depuis un autre plugin

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Je trouvais ça plutôt étrange... et un peu amusant (sans doute pas pour toi 😅)

En tout cas, c'est une très vieille demande 😮
En réponse à Romain D

Re: Question : Modifier une partie de plugin existant depuis un autre plugin

par Valery Fremaux,
Avatar Développeurs de plugins
Pour répondre sur le fond de ta question, oui, ce que l'on appelle la technique du "customscripts" est la seule qui te permet de détourner un "point d'entrée" (un php qui inclue le "config.php" de moodle et qui n'est donc pas lui-même un script inclus) vers une alternative qui te permet en suite de détourner certains appels SANS toucher au plugin d'origine. La technique est efficiente, un peu compliquée à maintenir, et ne peut facilement conduire à une installation "automatique" avec les règles strictes de moodle (il faudra aller mettre les customscripts "à la main").

Voilà le scénario type :

Je veux détourner des choses qui sont rendues dans la page mod/forum/view.php vers des nouvelles dispositions "à moi".

1. Je peux rassembler le code de mes alternatives dans un plugin (par exemple de type local/monforum, qui regroupe tout ce qui est inclassable ailleurs). Je peux y mettre une page alternative local/monforum/view.php en prenant les précautions suivantes :
- ma page alternative est chargée via le customscript, "config.php" est donc déjà chargé (car c'est à travers config.php qu'on déroute vers les customscripts). du coup il ne faut pas réinclure une nouvelle fois "config.php" mais déclarer cette page en "MOODLE_INTERNAL"
- la page standard a été montée en mémoire, donc tous les "require" ou "require_once" de librairies sont aussi déjà appelés. Pas de redéfinitions de fonctions ni de constantes dans la page customisée, sauf pour les nouvelles qui seraient nécessaires.

2. Je détourne la page mod/forum/view.php en créant un "wrapper" dans /customscripts/mod/forum/view.php, laquelle vient :
- juste inclure local/monforum/view.php
- mettre un "die" à la fin pour pas rejouer derrière la page "core"

3. Je rajoute le CFG->customscripts = '{dirrootversmoodle]/customscripts';
dans mon config.php

Avec ce montage le nouveau plugin pourra fournir ses bibliothèques propres, appelées par le view.php surchargé.

Avec cette technique, on peut atteindre des modifications assez profondes, mais cela peut demander à ajouter des nouvelles classes qui surchargent celles du plugin d'origine. Le tout étant de pouvoir trouver un "chemin d'appels" depuis l'entrée jusqu'au morceau de code qui doit détourner son code.
Moyenne des évaluations Utile (2)