Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
local:moodlescript:syntaxspecification [2019/03/26 13:38] admin [Arguments, identifiants et variables] |
local:moodlescript:syntaxspecification [2024/04/04 15:52] (Version actuelle) |
||
---|---|---|---|
Ligne 143: | Ligne 143: | ||
Toute invocation d'une pile d'exécution MoodleScript peut être chargée avec un contexte d'entrée de départ, permettant à tout plugin d'y injecter le contexte dont il a besoin pour l'exécution de ses propres scriptlets. | Toute invocation d'une pile d'exécution MoodleScript peut être chargée avec un contexte d'entrée de départ, permettant à tout plugin d'y injecter le contexte dont il a besoin pour l'exécution de ses propres scriptlets. | ||
- | ==== Special keywords (metas) ==== | + | ==== Mots-clefs spéciaux (metas) ==== |
==='current'=== | ==='current'=== | ||
- | 'current' is a special keyword in place of an expected identifier that will resolve into the nearest current object in the executing environment. F.e, if the expected object is a user identifier, current will resolve to $USER->id. If 'current' addresses a course identifier, it wil usually resolve as $COURSE->id, unless another course id is given to the execution stack by the global context (for plugin developers). | + | 'current' est un mot-clef spécial qui se substitue en lieu et place d'un identifiant d'objet et qui se résoudra par l'objet du type attendu le plus "proche" dans l'environnement d'exécution. Par exmple, si l'identifiant attendu à cet emplacement est un identifiant d'un utilisateur, alors 'current' désignera le plus souvent $USER->id. Si 'current' désigne un identifiant de cours, alors il se résoudra le plus souvent comme $COURSE->id. En général, l'exécution d'une création d'un objet imposera la valeur courante du "dernier identifiant connu" par la pile d'exécution, afin que les instructions suivantes puissent naturellement le réutiliser. Ce concept du "dernier objet connu" par le contexte sous-tendra toute la programmation interne des commandes du Moodlescript. |
- | The use of current will simplify scripts run within a known context, by using shorten expressions: | + | L'utilisation du mot clef 'current' simplifie la compréhension de scripts qui se déroulent dans un contexte connu, en raccourcissant les instructions : |
ADD ENROL METHOD guest TO current | ADD ENROL METHOD guest TO current | ||
- | For adding an enrolment method to the current course. | + | Pour ajouter la méthode d'inscription autorisant l'accès des invités dans le dernier cours connu par le contexte. |
ENROL current INTO current AS student | ENROL current INTO current AS student | ||
- | For enrolling the current user (the $USER being executing the script) into the current course. | + | Pour inscrire le dernier utilisateur connu (en général l'utilisateur $USER pour lequel le script est exécuté) dans le cours courant. (dernier cours créé, dernier cours mis à jour, etc.) |
- | ==='last' or 'first'=== | + | ==='last' ou 'first'=== |
- | this usually addresses the first available or last available item in the current syntax context. this is used f.e. for blocks location in a region, but might also address any object locaton being sorted with a sortorder attribute. | + | Ceci désignera généralement le premier ou dernier objet connu dans le contexte, lorsque la valeur associée au mot clef désigne un ensemble. Il est actuellement expérimentalement utilisé pour trouver la première zone de blocs disponible dans un format de cours, et sera étendu à d'autre usages où l'intérrogation d'une liste ordonnée d'objets est souhaitable. |
==='runtime'=== | ==='runtime'=== | ||
- | Usually identifiers and variable can be evaluated at parse time or at check time, because they are litterals in the script, or they come from some input or global context. But this is not true in all cases. Lets take an example: | + | Par défaut, les identifiants et les variables sont évaluées au moment de la compilation du script ou sa validation. car les valeurs sont soit statiques (littéraux), soit proviennent de valeurs chargées //a priori// dans le contexte d'exécution. Mais ce n'est pas toujours le cas. Prenons un exemple : |
- | In the following scriptlet: | + | Dans le sriptlet suivant : |
- | ADD CATEGORY "New category" TO idnumber:EXISTINGCAT HAVING | + | ADD CATEGORY "Nouvelle catégorie" TO idnumber:PARENTE HAVING |
- | idnumber: NEWCAT | + | idnumber: NOUVELLE |
- | MOVE COURSE idnumber:SOMECOURSE TO idnumber:NEWCAT | + | MOVE COURSE idnumber:UNCOURS TO idnumber:NOUVELLE |
- | We run into an issue because at parse time or at check time, NEWCAT category is not yet created. Thus we must tell the engine that in the second statement, we need the engine waiting the latest moment to evaulate the identifier to move the course in. | + | Il y a de manière évidente un problème à la compilation ou à la validation, car la catégorie désignée par NOUVELLE n'est pas encore créée. Nous devons donc indiquer à la deuxième instruction qu'il faudra attendre lors de l'exécution pour résoudre l'identifiant de la catégorie où le cours doit être déplacé. |
- | This can be done by the special keywork runtime: and we'll rewrite the scriplet as follows: | + | Ceci peut être fait en ajoutant le préfixe spécial 'runtime:' et nous réécrirons le script comme suit : |
- | ADD CATEGORY "New category" TO idnumber:EXISTINGCAT HAVING | + | ADD CATEGORY "Nouvelle catégorie" TO idnumber:PARENTE HAVING |
idnumber: NEWCAT | idnumber: NEWCAT | ||
- | MOVE COURSE idnumber:SOMECOURSE TO runtime:idnumber:NEWCAT | + | MOVE COURSE idnumber:UNCOURS TO runtime:idnumber:NOUVELLE |
- | Using the runtime: special keyword will prevent the parser to evaluate and resolve the identifier, and will store it's initial definition in the handler class. The handler will also NOT try to resolve it at check time, as check time only checks the conditions of execution of all the statements without executing them. At real execution time, the identifier will be resolved to get it's definitive actual value. | + | En utlisant le mot-clef 'runtime:' nous empêchons l'interpéteur syntaxique de résoudre cette valeur, et stockons sa définition initiale (sa référence à remplacer). The handler will also NOT try to resolve it at check time, as check time only checks the conditions of execution of all the statements without executing them. At real execution time, the identifier will be resolved to get it's definitive actual value. |
Note that 'runtime' variables may raise a real error situation that cannot be recovered or anticipated by the engine and may terminate in a tecnhical failure of the script and the calling process. | Note that 'runtime' variables may raise a real error situation that cannot be recovered or anticipated by the engine and may terminate in a tecnhical failure of the script and the calling process. | ||
[[:local:moodlescript|Revenir à l'index du composant]] | [[:local:moodlescript|Revenir à l'index du composant]] |