SQLPage est une application permettant de publier des bases de données sur une page Web sans se préoccuper de la mise en forme. Elle est développée et partagée par Ophir Lojkine (un grand merci à lui !!!).
Site officiel : https://sql.ophir.dev/Voir cette page où je décris son installation sur un NAS Synology : [SQLPage] Utilisation sur un NAS Synology avec Docker et MySQL
Projet École Inclusive : https://github.com/DSMejantel/Ecole_inclusive
Projet Carnet de Rucher : https://github.com/DSMejantel/Carnet-de-Rucher
Je liste ci-dessous des info pour aide-mémoire.
Sauf mention contraire, on part du principe qu'on travaille sur des bases SQLite.
A- Astuces générales
- Personnaliser le pied de page, le titre principal et les menus :
Il faudra agir sur le composant "shell" proposé par SQLPage : https://sql.ophir.dev/documentation.sql?component=shell#component. Ces fichiers se terminent par l'extension .json. Il peut y en avoir plusieurs.
Pour le pied de page, on modifiera celui proposé par défaut, avec le paramètre "footer" qui peut mettre des liens hypertextes en Markdown.
Pour le titre de l'application, on agira sur le paramètre "title".
Exemple de code dans un fichier .json :{
"component": "shell",
"title": "A.S.D.A.E.L",
"footer": "Adapté par xxxxxxxxxxx, à partir de [SQLPage](https://sql.ophir.dev/) et du projet [École Inclusive](https://forge.apps.education.fr/dsoulie/Ecole_inclusive)",
"link": "/",
"icon": "home",
"language":"fr-FR",
"layout": "fluid",
"norobot": "TRUE",
"menu_item": [
{"title": "Fiches-Outils",
"link": "fiches.sql" }
,
{"title": "Élèves",
"link": "eleves_etab.sql" }
,
{"title": "Établissement",
"link": "etablissement.sql" }
,
{"title": "Mon compte", "submenu": [
{"link": "parametres.sql?tab=Mon profil", "title": "Mon profil"},
{"link": "logout.sql", "title": "Se déconnecter"}
]}
],
}
- Personnaliser la page d'accueil :
Pour cela, il faudra modifier le bas du fichier "index.sql" où se trouve le composant "hero" :SELECT 'hero' as component,
'A.S.D.A.E.L' as title,
'Application Suivi Des Aides Élèves Lézignan' as description,
'./Logo.png' as image;
- Les champs de type "date" doivent être importés/stockés sous la forme : YYYY-MM-DD (norme ISO 8601 ou EN 28601).
Pour les afficher dans un format du type DD/MM/YYYY, on utilisera la fonction "strftime" de cette façon :strftime('%d/%m/%Y', date.naissance)
- Pré-remplir une base de données SQLite :
Il peut être utile de pré-remplir des tables avec des données pour éviter d'avoir à le faire via l'interface. Cela permet de gagner du temps et d'éviter des erreurs.
Par exemple si l'on veut créer un table "niveaux" puis ajouter les niveaux de classe des élèves du 1er degré, voici un exemple de code à inclure dans le dossier "migrations" via un fichier .sql :CREATE TABLE niveaux(
niv TEXT PRIMARY KEY
);
INSERT INTO niveaux (niv)
VALUES ('TPS'),('PS'),('MS'),('GS'),('CP'),('CE1'),('CE2'),('CM1'),('CM2');
Autre exemple si on veut créer une table "annee_scol" puis y inclure les années scolaires :CREATE TABLE annee_scol(
id INTEGER PRIMARY KEY AUTOINCREMENT,
annee TEXT,
active INTEGER
);
INSERT INTO annee_scol (annee,active)
VALUES ('2023-2024',1),('2024-2025',0),('2025-2026',0),('2026-2027',0),('2027-2028',0),('2028-2029',0),('2029-2030',0);
- Utilisation d'une case à cocher (checkbox) dans un composant de type form :
Pour un champ de type Integer, on peut utiliser 1 comme la valeur d'une case à cocher. Dans l'exemple ci-dessous, si la variable $suivi_edit vaut 1, alors la case est cochée.SELECT 'SUIVI' AS label, 'suivi' AS name, 'checkbox' as type, $suivi_edit=1 as checked, 1 as value, 1 as width;
- Pour avoir des champs en cascade où la valeur d'un champ précédant détermine le contenu du champ suivant :
Voir cette page : https://sql.ophir.dev/examples/multistep-form/ - Pour ne pas voir apparaître un champ dans un formulaire mais retourner sa valeur lors de la soumission, utiliser la propriété :
'hidden' as type
- Un champ de formulaire avec la propriété
TRUE as 'readonly'
ne sera pas modifiable. - Un champ de formulaire avec la propriété
TRUE as 'disabled'
sera grisé et ne sera pas modifiable mais ne retournera aucune valeur lors de la soumission du formulaire.
B- Importation .csv dans École Inclusive à partir des extractions ONDE
À partir de ONDE, on peut obtenir des extractions .csv avec les informations administratives des élèves avec notamment leur INE. Cependant le format du fichier .csv obtenu ne respecte pas les normes, en effet il n'est pas au format UTF-8 mais Europe Occidentale ("norme" Windows)... Le séparateur est le point virgule ";" et comme séparateur de chaine de caractères les guillemets doubles " ".
Les dates sont au format YYYY-MM-DD (norme ISO 8601 ou EN 28601) qui ne nécessite pas de modifications.
Les en-têtes de champs pour les élèves sont :
Nom élève | Nom d'usage élève | Prénom élève | Date naissance | Sexe | INE | Adresse1 | Cp1 | Commune1 | Pays1 | Adresse2 | Cp2 | Commune2 | Pays2 | Cycle | Niveau | Libellé classe | Identifiant classe | Attestation fournie | Autorisation photo | Décision de passage | Dispositif(s) | Regroupement(s) |
Pour s'appuyer sur École Inclusive, il est nécessaire de renommer les en-têtes de champ pour qu'ils correspondent à ceux de la table "élèves". Il faut aussi enlever les espaces par exemple. Voici le renommage à faire :
nom | Nom d'usage élève | prenom | naissance | sexe | INE | adresse | code_postal | commune | Pays1 | Adresse2 | Cp2 | Commune2 | Pays2 | Cycle | niveau | classe | Identifiant classe | Attestation fournie | Autorisation photo | Décision de passage | dispositif | regroupement |
On remarque qu'il n'y a pas le nom de l'établissement et qu'il faudrait le rajouter.
De plus, il faudrait rajouter un champ "suivi" de type booléen pour indiquer si l'élève fait l'objet d'un suivi. On pourrait donc l'indiquer dans l'application avec une case à cocher (checkbox).
Pour effectuer toutes ces modifications, on va utiliser un fichier LibreOffice Calc avec des macros :
- pour modifier les noms des champs utilisés,
- modifier l'encodage en UTF-8, avec séparateur ";" et délimiteur de texte avec " ".
- rajouter le champ "suivi" qui indiquera si l'élève fait l'objet d'un suivi (1 si c'est le cas), -> INUTILE : on le fera dans l'apllication en ligne.
- rajouter l'UAI de l'établissement, -> INUTILE : au moment de l'importation, on pourra choisir l'établissement auquel on rattachera les élèves.
C- Utilisation d'une application SQLPage dans un réseau Intranet
Pour diverses raisons, on peut être amené à utiliser une application SQLPage sur un réseau local. C'est beaucoup plus simple que ce qu'on croit !!! En effet, SQLPage intègre déjà un serveur web accessible localement en donnant l'adresse IP de la machine sur laquelle tourne SQLPage sur le port 8080.
Par exemple, si l'ordinateur qui fait tourner SQLPage a comme adresse IP 192.18.1.68, il suffira à partir d'une autre machine sur le même réseau de taper dans la barre d'adresse : http://192.168.1.68:8080 et on aura accès à l'application. On ne peut pas faire plus simple !!!
D- Démarrage automatique au lancement sous Linux Mint / Ubuntu
J'avais essayé de passer par le lancement automatique d'applications au démarrage mais sans résultat probant.
Si l'on souhaite lancer automatiquement SQLPage au démarrage de son ordinateur sous Linux Mint / Ubuntu / Debian, il faut passer par systemd comme m'a répondu le créateur de SQLPage (un grand merci à lui, une fois de plus !) dans cette discussion https://github.com/lovasoa/SQLpage/discussions/603. Je reprends ici ses explications en français.
Étape pour créer un service Systemd pour SQLPage
- Créer un fichier service systemd dans un terminal avec la commande :
sudo nano /etc/systemd/system/sqlpage.service
- Ce fichier indique comment et quand SQLPage fonctionne. Il faut ajouter le contenu du fichier suivant : https://github.com/lovasoa/SQLpage/blob/main/sqlpage.service qui est détaillé ci-dessous :
# This is a basic systemd service file for SQLPage
# For more information about systemd service files, see https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html
# Put this file in /etc/systemd/system/sqlpage.service[Unit]
Description=SQLPage website
Documentation=https://sql.datapage.app
After=network.target[Service]
# Define the user and group to run the service
User=sqlpage
Group=sqlpage# Set the working directory and the executable path
WorkingDirectory=/var/www/sqlpage
ExecStart=/usr/local/bin/sqlpage.bin# Environment variables
Environment="RUST_LOG=info"
Environment="LISTEN_ON=0.0.0.0:80"# Allow binding to port 80
AmbientCapabilities=CAP_NET_BIND_SERVICE# Restart options
Restart=always
RestartSec=10# Logging options
#StandardOutput=syslog
#StandardError=syslog
SyslogIdentifier=sqlpage# Security options
NoNewPrivileges=true
ProtectSystem=full
PrivateTmp=true
ProtectControlGroups=true
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectClock=true
ProtectHostname=true
ProtectProc=invisible
ProtectClock=true# Resource limits
LimitNOFILE=65536[Install]
WantedBy=multi-user.target
Paramètres importants :
- ExecStart: C'est la commande qui lance SQLPage. Il pointe vers le binaire indiqué (/usr/local/bin/sqlpage.bin est fortement recommandé).
- WorkingDirectory: Sert à fixer le répertoire de travail. Par défaut, si WEB_ROOT n'est pas indiqué dans le fichier de configuration, c'est ce dossier à partir duquel travaillera SQLPage.
- Restart=always: Permet le relancement automatique de SQLPage en cas de plantage.
- User and Group: Ces paramètres indiquent quel⋅le utilisateur⋅rice lance le service. Remplacer avec le nom d'utilisateur actuel.
- Environment: Fixe les environment variables.
- Relancer systemd avec la commande
sudo systemctl daemon-reload
- Après avoir créer ce fichier système,vous devez recharger le gestionnaire de configuration de systemd afin qu'il reconnaisse ce nouveau service.
Activation du service pour qu'il démarre automatiquement à l'allumage de l'ordinateur :sudo systemctl enable sqlpage.service
- Pour démarrer immédiatement ce service pour tester si ça fonctionne correctement (sans avoir à redémarrer la machine) :
sudo systemctl start sqlpage.service
- Pour vérifier si le service fonctionne correctement :
sudo systemctl status sqlpage.service
- Pour stopper le service à tout moment :
sudo systemctl stop sqlpage.service
Cette méthode garantie que SQLPage se lance au démarrage et utilise le dossier spécifié. Cela permet un meilleur contrôle sur son exécution, en supportant les variables d'environnement et la possibilité de relancer le service en cas d'échec.
Cette méhode est plus propre et plus faible que de passer par le lancement d'applications au démarrage pour des services comme SQLPage qui ont besoin de fonctionner dans un contexte spécifique.