Le mode Firewall™ (ou Mur de feu) de LesahrWeb permet de bloquer l'accès d'un élève à un curriculum, sans échappatoire possible.
Ce mode est exclusivement réservé à l'Assistant d'inscription : sélection du ou des domaines et cours suivis et est débrayé lors de la gestion des curriculums hors assistant.
Le Firewall™ est appuyé sur 2 grands axes :
Il s'agit ici d'exploiter le langage poussé de MySQL pour extraire une information de la base de données. La seule opération possible est une sélection d'une population de données. Cette documentation n'ayant pas vocation d'expliquer le langage MySQL, veuillez vous référer à la documentation officielle disponible ici. Cependant, dans les exemples ci-après, les connaissances de base sont suffisantes.
SELECT * FROM table WHERE condition
Cette commande générique permet de sélectionner, et donc de compter, le nombre d'éléments qui satisfont à la condition.
LesahrWeb numérote les règles créees comme suit : $regle suivi d'un numéro (ex. $regle18). LesahrWeb aura besoin de ce nom pour exécuter les actions de Firewall™ (voir infra).
Pour exécuter cette commande en tenant compte du contexte dans lequel LesahrWeb se trouve, vous disposez des variables génériques suivantes :
Vous disposez également de tous les comparateurs disponibles dans MySQL :
<, <= , =, >=, >, !=, LIKE, BETWEEN,…
Enfin, LesahrWeb vous offre un bouton de [ TEST ] qui permet de repérer les éventuelles erreurs syntaxiques et, dès correction, de tester le résultat de la règle.
Exemple 1 : nous allons vérifier que l'élève en cours de traitement par l'Assistant est âgé de 7 ans. Nous avons besoin de :
pour construire la requête :
SELECT * FROM eleves WHERE matricule = '$matricule' AND DN_annee = '$annee'-7
Si l'élève dont le matricule = $matricule a bien 7 ans (strictement) au 31 décembre de l'année $annee, alors le résultat sera = 1, sinon 0.
Exemple 2 : nous allons vérifier l'âge de l'élève dans la fourchette 10-14 ans inclus :
SELECT * FROM eleves WHERE matricule = '$matricule' AND (DN_annee <= '$annee'-10 AND DN_annee >= '$annee'-14)
Exemple 3 : recherche si l'élève a suivi le cours de Diction-Orthophonie (0049) les années antérieures (et donc pas cette année) :
SELECT * FROM curriculum WHERE matricule = '$matricule' AND code_cours = '0049' AND annee <= '$annee'-1
Ce système de règles permet donc de tester des cas simple, mais aussi bien plus complexe comme :
Exemple 4 : Test du contenu de la L2 selon Administration du système : gestion des libellés officiels :
SELECT * FROM curriculum LEFT JOIN cours ON curriculum.code_cours = cours.id LEFT JOIN libelles ON cours.libelle_tableau_2 = libelles.code WHERE curriculum.matricule = '$matricule' AND curriculum.code_cours = '$code_cours' AND libelles.libelle = 'Formation instrumentale'
Ces “tests” sont ensuite comparés à une valeur, généralement '>=1' (test validé).
Exemple 5 : Certains cas nécessitent une comparaison à 2 pour, par exemple, déterminer si un élève a subit ou non un double échec dans le cours concerné :
SELECT * FROM curriculum LEFT JOIN filieres ON curriculum.degre = filieres.id WHERE curriculum.matricule = '$matricule' AND (filieres.degre = '$degre' OR curriculum.degre = '$degre') AND code_cours = '$code_cours'
Dans ce cas, si le nombre d'items est ≥ à 2, l'élève satisfait la règle d'exclusion.
En combinant une ou plusieurs règles ci-dessus, nous allons pouvoir piloter les actions de Firewall™, à savoir interdire l'accès d'un élève dans une situation contextuelle à un ou plusieurs curriculums. Si l'interdiction n'est pas décrite, l'accès est autorisé par défaut. Cela permet aux structures simples ou débutantes de se passer du Firewall™.
Les opérandes classiques sont :
Exemple 6 : Nous allons interdire l'accès au Domaine de la Musique tout entier suite à la décision du conseil de classe, basée sur un double échec en Formation Musicale.
Tout d'abord, générons d'abord la règle qui précise la condition ($regle4) :
SELECT * FROM curriculum WHERE matricule = '$matricule' AND decision_conseil_classe = 'plus_admis' AND code_cours = '0203'
Là, tout simplement, nous exploiterons sa valeur directe :
et préciserons le refus d'accès au Domaine de la Musique.
Les message en cas de refus est précisé dans l'Assistant lors de la tentative d'enrôlement à un curriculum interdit. Ainsi, le personnel d'inscription sait motiver l'interdiction.
Exemple 7 : Nous allons vérifier l'accès au cours de Pointes du Domaine de la Danse sur base de 2 règles : au préalable être inscrit en filière de qualification, ou de transition 3e année, du cours de Danse Classique, ou avoir terminé l'une de ces filières.
Générons donc la première règle : Danse Classique Q ou T3 et + en cours cette année ($regle19) :
SELECT * FROM curriculum LEFT JOIN filieres ON curriculum.degre = filieres.id WHERE curriculum.matricule = '$matricule' AND ( filieres.degre LIKE 'Q%' OR curriculum.degre LIKE 'Q%' OR filieres.degre = 'T3' OR curriculum.degre = 'T3' OR filieres.degre = 'T4' OR curriculum.degre = 'T4' OR filieres.degre = 'T5' OR curriculum.degre = 'T5' OR filieres.degre = 'T6' OR curriculum.degre = 'T6') AND curriculum.code_cours = '0020' AND curriculum.annee = '$annee'
Générons ensuite la seconde règle : danse classique Q7 ou T6 réussi ($regle20)
SELECT * FROM curriculum LEFT JOIN filieres ON curriculum.degre = filieres.id WHERE curriculum.matricule = '$matricule' AND (filieres.degre = 'Q7' OR curriculum.degre = 'Q7' OR filieres.degre = 'T6' OR curriculum.degre = 'T6') AND code_cours = '0020' AND decision_conseil_classe = 'reussi'
Nous refuserons donc l'accès au cours de Pointes du Domaine de la Danse, sur base du calcul suivant :
! ( $regle19 + $regle20 )
Une pléthore de cas est possible, et cette documentation ne saurait tous les égrainer. Nous vous suggérons de bien comprendre ces mécanismes, de consulter ces exemples ainsi que ceux de la démonstration accessible en ligne.
Nous restons bien entendu à votre disposition pour réaliser les cas les plus complexes.