Outils pour utilisateurs

Outils du site


local:moodlescript:expressionsyntaxspecification

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
local:moodlescript:expressionsyntaxspecification [2022/08/17 11:16]
admin
local:moodlescript:expressionsyntaxspecification [2024/04/04 15:52] (Version actuelle)
Ligne 1: Ligne 1:
 +<​html><​!-- nomoodle --></​html>​{{ :​blocks:​logo-apl.png?​nolink |}}<​html><​!-- /nomoodle --></​html>​
 +
 ===== Spécification de syntaxe ===== ===== Spécification de syntaxe =====
 ===== Expressions évaluables MoodleScript ===== ===== Expressions évaluables MoodleScript =====
Ligne 24: Ligne 26:
  
    * [Opérande 1] <​operateur>​ [Opérande 2]    * [Opérande 1] <​operateur>​ [Opérande 2]
-   * [Opérande 1] <​operateur>​ (cette forme est donc admise pour un opérateur à une opérande.)ne +   * [Opérande 1] <​operateur>​ (cette forme est donc admise pour un opérateur à une opérande).
  
 Deux types d'​opérateurs sont définis : un type portant sur les "​données",​ comme par exemple les opérateurs d'​évaluation '​='​ ou '<'​. Les opérandes sont alors des "​valeurs"​ finales d'​attributs,​ comparables arithmétiquement ou textuellement. ​ Deux types d'​opérateurs sont définis : un type portant sur les "​données",​ comme par exemple les opérateurs d'​évaluation '​='​ ou '<'​. Les opérandes sont alors des "​valeurs"​ finales d'​attributs,​ comparables arithmétiquement ou textuellement. ​
Ligne 30: Ligne 32:
 Exemple :  Exemple : 
  
-    user:​username:"​marc":​department = "​Physics"​ ("marc" est il lié au département de Physique)+    ​* ''​user:​username:"​harry":​department = "​Physics"​'' ​("harry" est il lié au département de Physique)
  
 Le deuxième type porte sur des instances d'​objets,​ comme par exemple l'​opérateur '​isloggedin'​. Dans ce cas, les opérandes sont des références à des instances d'​objets Moodle et non des valeurs d'​attributs. Le deuxième type porte sur des instances d'​objets,​ comme par exemple l'​opérateur '​isloggedin'​. Dans ce cas, les opérandes sont des références à des instances d'​objets Moodle et non des valeurs d'​attributs.
Ligne 36: Ligne 38:
 Exemple :  Exemple : 
  
-   ​user:​username:"​marc" isenrolled course:​current ("marc" a-t-il une inscription active dans le cours courant) +   * ''​user:​username:"​harry" isenrolled course:​current'' ​("harry" a-t-il une inscription active dans le cours courant) 
-   ​+ 
 +La liste complète des opérateurs "​fonction"​ supportés est donnée plus loin. 
 D'​après les définitions différentes ci-avant, on voit que les opérandes peuvent être de trois types :  D'​après les définitions différentes ci-avant, on voit que les opérandes peuvent être de trois types : 
  
Ligne 43: Ligne 47:
    * Une référence à un objet    * Une référence à un objet
    * Une référence à un attribut scalaire d'un objet (ce cas est une extension du précédent)    * Une référence à un attribut scalaire d'un objet (ce cas est une extension du précédent)
 +
 +===Valeurs scalaires===
 +
 +Doivent être notées entre guillemet si elles sont "​seules",​ c'est à dire que l'​opérande est à lui tout seul une valeur scalaire.
 +
 +===Référence à un objet===
 +
 +Elle se décompose en deux ou trois segments qui doivent définir une instance unique d'un certain type d'​objet métier de Moodle. On utilise un "type d'​objet"​ en premier segment, les segments suivants doivent nommer un attribut identifiant et fixer une valeur de l'​identifiant.
 +
 +Formes générales : 
 +
 +    [optype]:​[attribut identifiant]:​[valeur identifiante]
 +
 +ou
 +
 +    [optype]:​[deictic]
 +
 +Exemples : 
 +
 +   * ''​user:​id:​364''​
 +   * ''​user:​idnumber:​FC12654''​ (ou ''​user:​idnumber:"​FC12654"''​ aussi admis)
 +   * ''​course:​shortname:"​TRANSFORM 2020-2021"''​
 +   * ''​category:​idnumber:"​MAGICS"''​
 +   * ''​group:​idnumber:"​GRP-A"''​
 +
 +Cas particulier,​ utilisation de déictiques :
 +
 +Les déictiques sont des expressions dont la valeur change en fonction du contexte ou du moment de l'​invocation. Nous utiliserons le plus souvent le mot clef "​current"​ qui désignera l'​objet correspondant au contexte courant dans lequel le script est exécuté.
 +
 +Exemple : 
 +
 +   * ''​user:​current''​ désigne l'​utilisateur correspondant à ''​$USER''​
 +   * ''​course:​current''​ désigne le cours correspondant à ''​$COURSE''​
 +
 +===Référence à un attribut final===
 +
 +Une référence à un attribut final est construite comme une référence "​objet"​ suivi d'une mention d'​attribut. Ces attributs sont le plus souvent les attributs "​naturels"​ de l'​objet en base de données. Dans certains cas cependant, et pour aider à l'​unification du langage, certains noms d'​attributs peuvent être utilisés pour accéder à des données indirectes liées (par exemple, les champs personnalisés de profil d'un compte utilisateur).
 +
 +Forme générale : 
 +
 +    [Ref objet]:​[attribut]
 +
 +Exemple : 
 +
 +   * ''​user:​current:​department''​
 +   * ''​course:​idnumber:"​TR2020":​visible''​
 +
 +
 +====Détail des implémentations====
 +
 +===Types d'​objets autorisés===
 +
 +   * **user** : Un utilisateur
 +   * **user_profile_field** : un champ de données personnalisé de l'​utilisateur
 +   * **course** : Un cours
 +   * **category** : Une catégorie de cours
 +   * **cohort** : Une cohorte
 +   * **group** : Un groupe, dans le contexte de cours courant
 +
 +===Opérateurs supportés===
 +
 +   * **=** : est égal
 +   * **!=** : est différent
 +   * **<** ou **<=** : est inférieur ou inférieur ou égal
 +   * **>** ou **>=** : est supérieur ou supérieur ou égal
 +   * **~** : contient (regex)
 +   * **!~** : ne contient pas (regex) ​
 +
 +===Opérateurs "​fonctions"​ supportés===
 +
 +   * **hasrolein** : a un rôle dans le contexte | <​userref>​ hasrolein <​courseref|categoryref>​
 +   * **isenrolledin** : a une inscription active dans le contexte | <​userref>​ isenrolledin <​courseref|categoryref>​
 +   * **hasloggedin** : s'est connecté au moins une fois | <​userref>​ haslooggedin
 +   * **hascompleted** : a achevé un contexte | <​userref>​ hascompleted <​courseref>​
 +   * **hasstarted** : a commencé à travailler (au sens de l'​achèvement) | <​userref>​ hasstarted <​courseref|categoryref>​
 +   * **isincategory** : est enfant de la catégorie | <​courseref|categoryref>​ isincategory <​categoryref>​
 +   * **isincattree** : est dans l'​arborescence | <​courseref|categoryref>​ isincattree <​categoryref>​
 +   * **isinsubs** : est dans une des sous-catégories | <​courseref|categoryref>​ isinsubs <​categoryref>​
 +   * **isempty** : est vide | <​categoryref|cohortref>​ isempty
 +   * **isingroup** : est dans le groupe | <​userref>​ isingroup <​groupref>​
 +
 +===Objets à venir (prospective)===
 +
 +   * **module** : Module de cours (activité ou ressource)
 +   * **badge** : Badge
 +
 +===Opérateurs "​fonctions"​ à venir (prospective)===
 +
 +   * **isin** : est dans la cohorte ou le groupe <​userref>​ isin <​cohortref|groupref>​
 +   * **hasbadge** : a acquis le badge
 +   * **hascompleted** : extension au context <​moduleref>​ en plus du contexte <​courseref>​
 +
 +===Fonctionnalités à venir===
 +
 +   * Expressions nommées : Des expressions évaluables associées à un nom pour pouvoir être utilisées à plusieurs endroits et définies de manière unique et centralisée. Par anticipation,​ on note la nécessité d'une syntaxe facilement discriminable pour aller chercher une expression dans un catalogue. Une proposition peut être : 
 +
 +   ::<​evaluablerulename>​
 +
 +qui discriminera nettement l'​appel de référence des syntaxe "par membres"​ des appels aux attributs ou aux références d'​objet. Le nom de règle doit être un token unique acceptant les caractères alphanumériques et le '​_'​ sans espaces. L'​usage de caractères étendus ou accentués est déconseillé.
 +
 +Ainsi la simple mention de 
 +
 +   ::​myrule1
 +
 +ira rechercher la définition complète de la règle dans le catalogue de règles nommées. La localisation du catalogue est dans l'​accessoire tool_moodlescript,​ le plugin habilité à proposer des interfaces administrateur.
 +
 +A titre de prospective,​ et afin de favoriser l'​usage des règles nommées, on peut envisager un passage de paramètres à une règle nommée, par exemple :
 +
 +   ::​myrule1 <​param1>​ "<​string param2>"​
 +
 +qui proposera des valeur à substituer dans l'​expression nommée sous les formes classiques de variables shell : $1, $2, etc... L'​exemple suivant montre ce que pourrait être l'​écriture d'une telle expression :
 +
 +   ​user:​idnumber:​$1:​username ~ ^a
 +
 +Pour une règle disant "est ce que le username de l'​utilisateur donné en paramètre par $1 commence par '​a'​ ?"
 +
  
  
  
-[[:​local:​moodlescript|Revenir à l'​index du composant]] ​+<​html><​!-- nomoodle --></​html>​ 
 +[[:​local:​moodlescript|Revenir à l'​index du composant]] ​ - [[:​plugins|Retour à l'​index des plugins]] - [[:​pluginsets|Retour à l'​index des ensembles]] - [[::​start|Retour au catalogue]] 
 +<​html><​!-- /nomoodle --></​html>​
local/moodlescript/expressionsyntaxspecification.1660727777.txt.gz · Dernière modification: 2024/04/04 15:52 (modification externe)