Nouveau bouton dans le topbar de l'éditeur, à côté d'Aperçu, qui ouvre une modale listant les thèmes du catalogue (document_engine/themes/). Cliquer un thème charge un VRAI aperçu (rendu serveur réel dans un iframe, jamais une resucée CSS côté client) avec le choix de garder le contenu actuel ou de le remplacer par le contenu de démonstration du modèle. Architecture pensée pour une centaine de thèmes futurs : chaque thème est une feuille de style externe (static/document/themes/<id>.css) qui habille les classes fixes du moteur, jamais du code qui en changerait la structure. Premier thème implémenté pour valider le mécanisme : "Sécurité Incendie" (6 pages de contenu réel, quiz inclus). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
159 lines
6.0 KiB
Python
159 lines
6.0 KiB
Python
"""
|
|
db — toute la logique base de données du moteur Forge, organisée en un
|
|
sous-module par responsabilité (un fichier = une fonction, un dossier = un
|
|
domaine) plutôt qu'un seul gros fichier. Ce fichier réexporte l'intégralité
|
|
de l'API publique historique : le reste du moteur continue simplement
|
|
d'écrire `import db` puis `db.ma_fonction(...)`, sans rien savoir de cette
|
|
organisation interne.
|
|
|
|
Chaque JEU créé a SA PROPRE base SQLite (fichier .db dans son dossier de
|
|
projet). Cette base contient :
|
|
- des tables "méta" (_definitions, _fields) qui décrivent les objets que
|
|
l'utilisateur a définis via l'interface (l'équivalent d'un schéma de
|
|
base de données, mais construit à la souris plutôt qu'en SQL) ;
|
|
- une VRAIE table SQL par objet défini (obj_<nom>), avec des colonnes du
|
|
bon type SQLite selon le type choisi pour chaque champ, y compris des
|
|
colonnes de clé étrangère pour les champs de type "relation".
|
|
|
|
Rien n'est une simulation : créer une "définition d'objet" avec des champs
|
|
exécute un vrai CREATE TABLE, et remplir le formulaire généré exécute un
|
|
vrai INSERT dans cette table.
|
|
"""
|
|
|
|
from .assert_not_none import assert_not_none
|
|
from .connection import connect
|
|
from .constants import FIELD_TYPES, GLOBAL_VARIABLE_TYPES, PROJECTS_DIR, SCORE_STATUS_CHOICES, SCORE_STATUS_LABELS
|
|
from .custom_events.create_custom_event import create_custom_event
|
|
from .custom_events.get_custom_event import get_custom_event
|
|
from .custom_events.list_custom_events import list_custom_events
|
|
from .custom_events.update_custom_event import update_custom_event
|
|
from .db_path import db_path
|
|
from .definitions.create_definition import create_definition
|
|
from .definitions.definitions_referencing import definitions_referencing
|
|
from .definitions.delete_definition import delete_definition
|
|
from .definitions.get_definition import get_definition
|
|
from .definitions.list_definitions import list_definitions
|
|
from .dialogue_lines import QUESTION_REWARD_TYPES, sanitize_dialogue_lines, sum_question_rewards
|
|
from .game_dir import game_dir
|
|
from .games.create_game import create_game
|
|
from .games.delete_game import delete_game
|
|
from .games.game_meta import game_meta
|
|
from .games.game_type_catalog import (
|
|
DEFAULT_ONBOARDING_TYPE,
|
|
ONBOARDING_TYPES,
|
|
get_onboarding_type,
|
|
get_onboarding_type_raw,
|
|
is_restricted,
|
|
set_onboarding_type,
|
|
)
|
|
from .games.get_game_type import DEFAULT_GAME_TYPE, get_game_type
|
|
from .games.get_scorm_version import get_scorm_version
|
|
from .games.get_success_threshold import get_success_threshold
|
|
from .games.get_xapi_settings import get_xapi_settings
|
|
from .games.list_games import list_games
|
|
from .games.move_game import move_game
|
|
from .games.set_scorm_version import set_scorm_version
|
|
from .games.set_success_threshold import set_success_threshold
|
|
from .games.set_xapi_settings import set_xapi_settings
|
|
from .games.update_game_name import update_game_name
|
|
from .global_vars.create_global_variable import create_global_variable
|
|
from .global_vars.delete_global_variable import delete_global_variable
|
|
from .global_vars.delete_global_variable_by_id import delete_global_variable_by_id
|
|
from .global_vars.ensure_global_vars_schema import PLAYER_SHARED
|
|
from .global_vars.get_global_variable import get_global_variable
|
|
from .global_vars.list_global_variables import list_global_variables
|
|
from .global_vars.list_global_variables_for_player import list_global_variables_for_player
|
|
from .global_vars.update_global_variable import update_global_variable
|
|
from .global_vars.update_global_variable_value import update_global_variable_value
|
|
from .json_for_script import json_for_script
|
|
from .rows.delete_row import delete_row
|
|
from .rows.get_row import get_row
|
|
from .rows.insert_row import insert_row
|
|
from .rows.list_rows import list_rows
|
|
from .rows.update_row import update_row
|
|
from .rows.update_row_field import update_row_field
|
|
from .scoring.get_score import get_score
|
|
from .scoring.set_score_value import set_score_value
|
|
from .scoring.set_status import set_status
|
|
from .slugify import slugify
|
|
from .supports.create_support import create_support
|
|
from .supports.delete_support import delete_support
|
|
from .supports.get_document_theme import get_document_theme
|
|
from .supports.list_supports import list_supports
|
|
from .supports.set_document_theme import set_document_theme
|
|
from .supports.support_dir import support_dir
|
|
from .supports.support_meta import support_meta
|
|
from .table_name_for import table_name_for
|
|
|
|
__all__ = [
|
|
"PROJECTS_DIR",
|
|
"FIELD_TYPES",
|
|
"GLOBAL_VARIABLE_TYPES",
|
|
"PLAYER_SHARED",
|
|
"SCORE_STATUS_CHOICES",
|
|
"SCORE_STATUS_LABELS",
|
|
"get_score",
|
|
"set_score_value",
|
|
"set_status",
|
|
"slugify",
|
|
"table_name_for",
|
|
"json_for_script",
|
|
"assert_not_none",
|
|
"game_dir",
|
|
"db_path",
|
|
"connect",
|
|
"list_games",
|
|
"game_meta",
|
|
"create_game",
|
|
"update_game_name",
|
|
"delete_game",
|
|
"move_game",
|
|
"get_game_type",
|
|
"DEFAULT_GAME_TYPE",
|
|
"get_xapi_settings",
|
|
"set_xapi_settings",
|
|
"get_success_threshold",
|
|
"set_success_threshold",
|
|
"get_scorm_version",
|
|
"set_scorm_version",
|
|
"create_support",
|
|
"list_supports",
|
|
"support_dir",
|
|
"support_meta",
|
|
"delete_support",
|
|
"get_document_theme",
|
|
"set_document_theme",
|
|
"ONBOARDING_TYPES",
|
|
"DEFAULT_ONBOARDING_TYPE",
|
|
"get_onboarding_type",
|
|
"get_onboarding_type_raw",
|
|
"set_onboarding_type",
|
|
"is_restricted",
|
|
"list_definitions",
|
|
"get_definition",
|
|
"create_definition",
|
|
"definitions_referencing",
|
|
"delete_definition",
|
|
"list_rows",
|
|
"insert_row",
|
|
"get_row",
|
|
"update_row",
|
|
"update_row_field",
|
|
"delete_row",
|
|
"list_global_variables",
|
|
"list_global_variables_for_player",
|
|
"get_global_variable",
|
|
"create_global_variable",
|
|
"update_global_variable_value",
|
|
"update_global_variable",
|
|
"delete_global_variable",
|
|
"delete_global_variable_by_id",
|
|
"list_custom_events",
|
|
"get_custom_event",
|
|
"create_custom_event",
|
|
"update_custom_event",
|
|
"sanitize_dialogue_lines",
|
|
"QUESTION_REWARD_TYPES",
|
|
"sum_question_rewards",
|
|
]
|