Gestion de la validation
Problématique
Un module est validé alors qu'il manque des champs importants. Le gestionnaire de service todd.ws.php n'a pas connaissance de la particularité d'un module. Nous ne pouvons pas implémenter dans ce service généraliste pour l'extension des contrôle qui seraient propres à un certain module.
Il faut déléguer au module lui-même la capacité à être validé ou pas.
Solution
Le gestionnaire de service de validation d'un module doit interroger le module lui-même afin de savoir s'il est prêt à être validé.
Nous installons un hook qui va respecter l'architecture MVC :
- Dans
todd.ws.php, lors d'une actionsaveContent(hors brouillon),submitContent, oumoderateApprove, le script interroge désormais dynamiquement le module concerné en invoquant sonhandler.phpavec l'action$module_action = 'check_ready_state'. - Le cœur écoute deux variables que le module peut modifier :
$is_ready_for_validation(booléen) et$validation_error_msg. - Dans
todd_poll/handler.php, j'ai implémenté l'écoute de cette actioncheck_ready_state. Le module S'ÉVALUE LUI-MÊME et décide seul que s'il manque les dates de campagne, il n'est pas prêt. Il bloque alors l'action globale detodd.ws.php.
Ce mécanisme est propre, 100% agnostique côté cœur, et désormais reproductible pour n'importe quel autre module TODD ; chaque module déclarera ses états que le cœur interrogera.
Implémentation
Dans le gestionnaire de service todd.ws.php (côté cœur) :
// --- MODULE HANDLER HOOK (Pre-Save & Validation) ---
if ($module_code) {
$handlerFile = PLUGIN_PATH . 'todd/modules/' . $module_code . '/handler.php';
if (file_exists($handlerFile)) {
// Hook standard Pre-Save
$module_action = 'saveContent';
include $handlerFile;
// Hook de conversation de validation (uniquement si on ne sauvegarde pas en simple brouillon)
if ($status !== 'draft') {
$is_ready_for_validation = true;
$validation_error_msg = "";
$module_action = 'check_ready_state';
include $handlerFile;
if (!$is_ready_for_validation) {
echo json_encode(['status' => 0, 'msg' => $validation_error_msg ?: "Ce contenu ne remplit pas les conditions pour changer de statut."]);
exit;
}
}
}
}On pourra implémenter dans un module cette vérification dans handler.php de cette manère par exemple :
// ------------------------------------------------------------------------
// HOOK: Validation avant changement de statut (Brouillon -> En attente -> Approuvé)
// ------------------------------------------------------------------------
case 'check_ready_state':
// Vérification des règles métier spécifiques au module
if (empty($payload['ma_donnee_obligatoire'])) {
$is_ready_for_validation = false;
$validation_error_msg = "Veuillez d'abord définir la donnée obligatoire.";
}
break;