Crvi/app/crons/actions.php
2026-01-20 07:54:37 +01:00

89 lines
3.3 KiB
PHP

<?php
/**
* Fichier d'actions pour les crons du plugin ESI_crvi_agenda
*
* Ce fichier fait uniquement le routage vers les méthodes appropriées
* dans les classes Event_Model et Notifications_Controller.
*
* Actions disponibles via paramètres GET :
* - action=get_today_incomplete : Récupère tous les événements d'aujourd'hui non complétés
* - action=send_sms_reminder : Envoie des SMS de rappel pour les événements dans X jours
* Paramètres additionnels :
* - days : nombre de jours avant l'événement (1, 2 ou 3, défaut: 3)
*
* Usage :
* /wp-content/plugins/ESI_crvi_agenda/app/crons/actions.php?key=K7mP9xQ2vN4rT8&action=get_today_incomplete
* /wp-content/plugins/ESI_crvi_agenda/app/crons/actions.php?key=K7mP9xQ2vN4rT8&action=send_sms_reminder&days=3
*
* Sécurité : Une clé secrète est requise via le paramètre GET 'key'
*/
define('WP_USE_THEMES', false);
// Clé secrète pour sécuriser l'accès aux actions cron
define('CRON_ACTIONS_SECRET_KEY', 'K7mP9xQ2vN4rT8');
// Vérification de la clé secrète via paramètre GET
if (!isset($_GET['key']) || $_GET['key'] !== CRON_ACTIONS_SECRET_KEY) {
http_response_code(403);
header('Content-Type: application/json');
die(json_encode(['error' => 'Accès refusé. Clé secrète requise.']));
}
// Déterminer le chemin du plugin
$plugin_dir = dirname(dirname(__DIR__));
$wp_load_path = $plugin_dir . '/../../../../wp-load.php';
// Vérifier que wp-load.php existe
if (!file_exists($wp_load_path)) {
http_response_code(500);
header('Content-Type: application/json');
die(json_encode(['error' => 'Erreur : wp-load.php introuvable.']));
}
require_once $wp_load_path;
// Charger les classes nécessaires
require_once dirname(__DIR__) . '/models/Event_Model.php';
require_once dirname(__DIR__) . '/controllers/Notifications_Controller.php';
use ESI_CRVI_AGENDA\models\CRVI_Event_Model;
use ESI_CRVI_AGENDA\controllers\CRVI_Notifications_Controller;
// Récupérer l'action demandée
$action = isset($_GET['action']) ? sanitize_text_field($_GET['action']) : '';
// Définir le header JSON
header('Content-Type: application/json; charset=utf-8');
// Router vers l'action appropriée
switch ($action) {
case 'get_today_incomplete':
$result = CRVI_Event_Model::get_today_incomplete_events();
echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
break;
case 'send_sms_reminder':
$days = isset($_GET['days']) ? (int) $_GET['days'] : 3;
$result = CRVI_Notifications_Controller::send_sms_reminder($days);
// Si c'est une erreur de validation, retourner un code 400
if (isset($result['error'])) {
http_response_code(400);
}
echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
break;
default:
http_response_code(400);
echo json_encode([
'error' => 'Action non reconnue',
'available_actions' => [
'get_today_incomplete' => 'Récupère tous les événements d\'aujourd\'hui non complétés',
'send_sms_reminder' => 'Envoie des SMS de rappel pour les événements dans X jours (paramètre: days=1|2|3)'
]
], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
break;
}