Crvi/app/controllers/Plugin - Copie.php
2026-01-20 07:54:37 +01:00

301 lines
12 KiB
PHP

<?php
namespace ESI_CRVI_AGENDA\controllers;
use ESI_CRVI_AGENDA\controllers\CRVI_Local_Controller;
use ESI_CRVI_AGENDA\controllers\CRVI_Beneficiaire_Controller;
use ESI_CRVI_AGENDA\controllers\CRVI_Intervenant_Controller;
use ESI_CRVI_AGENDA\controllers\CRVI_Traducteur_Controller;
use ESI_CRVI_AGENDA\controllers\CRVI_Departement_Controller;
use ESI_CRVI_AGENDA\controllers\CRVI_Type_Intervention_Controller;
use ESI_CRVI_AGENDA\models\CRVI_Event_Model;
use ESI_CRVI_AGENDA\controllers\CRVI_Event_Controller;
use ESI_CRVI_AGENDA\controllers\CRVI_Entity_Controller;
use ESI_CRVI_AGENDA\views\CRVI_Main_View;
use ESI_CRVI_AGENDA\views\CRVI_Agenda_View;
class CRVI_Plugin {
public static function init() {
// Initialisation du plugin (CPT, hooks, etc.)
/* add_action('init', [self::class, 'register_cpt']); */
/* self::register_cpt(); */
self::load_actions();
self::load_filters();
self::load_shortcodes();
self::load_frontend_assets();
self::load_admin_assets();
}
public static function activate() {
// Code d'activation (création de tables, etc.)
// create table
CRVI_Event_Model::create_table();
}
public static function deactivate() {
// Code de désactivation (nettoyage, etc.)
}
public static function register_cpt() {
CRVI_Local_Controller::register_cpt();
CRVI_Beneficiaire_Controller::register_cpt();
/* CRVI_Intervenant_Controller::register_cpt(); */
CRVI_Traducteur_Controller::register_cpt();
//register departement et type_intervention
CRVI_Departement_Controller::register_cpt();
CRVI_Type_Intervention_Controller::register_cpt();
}
public function register_routes() {
// Vérification et enregistrement des routes avec gestion d'erreur
/* $controllers = [
'CRVI_Local_Controller',
'CRVI_Beneficiaire_Controller',
'CRVI_Intervenant_Controller',
'CRVI_Traducteur_Controller',
'CRVI_Departement_Controller',
'CRVI_Event_Controller',
'CRVI_Entity_Controller'
];
foreach ($controllers as $controller) {
if (class_exists($controller)) {
try {
$controller::register_routes();
} catch (\Exception $e) {
error_log("Erreur lors de l'enregistrement des routes pour {$controller}: " . $e->getMessage()."\n");
}
} else {
error_log("Classe {$controller} non trouvée lors de l'enregistrement des routes\n");
}
} */
CRVI_Local_Controller::register_routes();
CRVI_Beneficiaire_Controller::register_routes();
CRVI_Traducteur_Controller::register_routes();
CRVI_Intervenant_Controller::register_routes();
CRVI_Departement_Controller::register_routes();
CRVI_Event_Controller::register_routes();
CRVI_Entity_Controller::register_routes();
}
public function load_actions() {
add_action('init', [self::class, 'register_cpt']);
add_action('init', [self::class, 'register_routes']); // Lancer register_routes en même temps que register_cpt
add_action('admin_menu', [self::class, 'add_admin_menu']);
add_action('admin_post_crvi_import_beneficiaire', [\ESI_CRVI_AGENDA\controllers\CRVI_Beneficiaire_Controller::class, 'import_csv_admin']);
add_action('admin_post_crvi_import_local', [\ESI_CRVI_AGENDA\controllers\CRVI_Local_Controller::class, 'import_csv_admin']);
add_action('admin_post_crvi_import_traducteur', [\ESI_CRVI_AGENDA\controllers\CRVI_Traducteur_Controller::class, 'import_csv_admin']);
add_action('admin_post_crvi_import_intervenant', [\ESI_CRVI_AGENDA\controllers\CRVI_Intervenant_Controller::class, 'import_csv_admin']);
add_action('admin_post_crvi_import_departement', [\ESI_CRVI_AGENDA\controllers\CRVI_Departement_Controller::class, 'import_csv_admin']);
add_action('admin_post_crvi_import_type_intervention', [\ESI_CRVI_AGENDA\controllers\CRVI_Type_Intervention_Controller::class, 'import_csv_admin']);
// Enqueue assets conditionnellement
add_action('admin_enqueue_scripts', [self::class, 'enqueue_admin_assets']);
add_action('wp_enqueue_scripts', [self::class, 'enqueue_front_assets']);
}
/**
* Ajoute la page d'admin Agenda CRVI avec sous-menus Hub, Stats, Agenda
*/
public static function add_admin_menu() {
// Menu principal : Agenda CRVI (affiche le Hub)
add_menu_page(
__('Agenda CRVI', 'esi_crvi_agenda'),
__('Agenda CRVI', 'esi_crvi_agenda'),
'manage_options',
'crvi_agenda',
[CRVI_Main_View::class, 'render_hub_admin_page'],
'dashicons-calendar-alt',
6
);
// Sous-menu : Hub (même callback que le menu principal)
add_submenu_page(
'crvi_agenda',
__('Hub', 'esi_crvi_agenda'),
__('Hub', 'esi_crvi_agenda'),
'manage_options',
'crvi_agenda',
[CRVI_Main_View::class, 'render_hub_admin_page']
);
// Sous-menu : Stats
add_submenu_page(
'crvi_agenda',
__('Stats', 'esi_crvi_agenda'),
__('Stats', 'esi_crvi_agenda'),
'manage_options',
'crvi_agenda_stats',
[self::class, 'render_stats_page']
);
// Sous-menu : Agenda
add_submenu_page(
'crvi_agenda',
__('Agenda', 'esi_crvi_agenda'),
__('Agenda', 'esi_crvi_agenda'),
'manage_options',
'crvi_agenda_hub',
[CRVI_Agenda_View::class, 'render_agenda_page']
);
}
/**
* Affiche la page d'admin des stats
*/
public static function render_stats_page() {
echo '<div class="wrap"><h1>' . esc_html__('Statistiques Agenda', 'esi_crvi_agenda') . '</h1>';
$template = plugin_dir_path(__FILE__) . '../../templates/admin/agenda-stats-form.php';
if (file_exists($template)) {
include $template;
} else {
echo '<p style="color:red">Template agenda-stats-form.php introuvable.</p>';
}
// Traitement du formulaire (debug)
if ($_SERVER['REQUEST_METHOD'] === 'POST' && current_user_can('manage_options')) {
$entite = sanitize_text_field($_POST['entite'] ?? 'global');
$annee = isset($_POST['annee']) ? intval($_POST['annee']) : null;
$date_debut = sanitize_text_field($_POST['date_debut'] ?? '');
$date_fin = sanitize_text_field($_POST['date_fin'] ?? '');
echo '<div class="notice notice-info"><p>';
printf('Debug : entité = %s, année = %s, date_debut = %s, date_fin = %s', esc_html($entite), esc_html((string)$annee), esc_html($date_debut), esc_html($date_fin));
echo '</p></div>';
}
echo '</div>';
}
public function load_filters() {
/* add_filter('rest_endpoints', [self::class, 'register_routes']); */
add_filter('wp_script_attributes', [self::class, 'custom_script_tag'], 10, 2);
}
public function load_shortcodes() {
/* add_shortcode('crvi_agenda', [self::class, 'crvi_agenda_shortcode']); */
}
public function load_frontend_assets() {
self::enqueue_admin_assets();
self::enqueue_front_assets();
}
public function load_admin_assets() {
}
public function add_pages() {
//hub admin
}
/**
* Charge les assets uniquement sur les pages admin CRVI
*/
public static function enqueue_admin_assets() {
// Les slugs des pages admin CRVI
$crvi_pages = [
'crvi_agenda',
'crvi_agenda_stats',
'crvi_agenda_hub',
];
$page = $_GET['page'] ?? '';
if (in_array($page, $crvi_pages, true)) {
// Charger Select2 via WordPress
wp_enqueue_style('select2', 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css', [], '4.0.13');
wp_enqueue_script('select2', 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.full.min.js', ['jquery'], '4.0.13', true);
// Bundle CSS principal (inclut Bootstrap, Toastr, FullCalendar)
wp_enqueue_style('crvi_main_css', ESI_CRVI_AGENDA_URL . 'assets/js/dist/crvi_main_css.min.css', [], '1.0.0');
// Script principal du plugin (inclut Bootstrap, FullCalendar, Toastr)
wp_enqueue_script('crvi_main_agenda', ESI_CRVI_AGENDA_URL . 'assets/js/dist/crvi_main.min.js', ['jquery', 'select2'], '1.0.0', true);
// Transmettre les permissions utilisateur au JavaScript (seulement si l'utilisateur est connecté)
if (did_action('init') && is_user_logged_in()) {
$permissions = \ESI_CRVI_AGENDA\helpers\Api_Helper::get_user_permissions();
wp_localize_script('crvi_main_agenda', 'crviPermissions', $permissions);
} else {
// Permissions par défaut si l'utilisateur n'est pas encore chargé
wp_localize_script('crvi_main_agenda', 'crviPermissions', [
'can_create' => false,
'can_edit' => false,
'can_delete' => false,
'can_close' => false,
'can_view' => false,
'user_roles' => [],
'user_id' => 0,
]);
}
}
}
/**
* Charge les assets uniquement sur la page publique crvi_agenda_interne
*/
public static function enqueue_front_assets() {
if (is_page('crvi_agenda_interne')) {
// Charger Select2 via WordPress
wp_enqueue_style('select2', 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css', [], '4.0.13');
wp_enqueue_script('select2', 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.full.min.js', ['jquery'], '4.0.13', true);
// Bundle CSS principal (inclut Bootstrap, Toastr, FullCalendar)
wp_enqueue_style('crvi_main_css', ESI_CRVI_AGENDA_URL . 'assets/js/dist/crvi_main_css.min.css', [], '1.0.0');
// Script principal du plugin (inclut Bootstrap, FullCalendar, Toastr)
wp_enqueue_script('crvi_main_agenda', ESI_CRVI_AGENDA_URL . 'assets/js/dist/crvi_main.min.js', ['jquery', 'select2'], '1.0.0', true);
// Transmettre les permissions utilisateur au JavaScript (seulement si l'utilisateur est connecté)
if (did_action('init') && is_user_logged_in()) {
$permissions = \ESI_CRVI_AGENDA\helpers\Api_Helper::get_user_permissions();
wp_localize_script('crvi_main_agenda', 'crviPermissions', $permissions);
} else {
// Permissions par défaut si l'utilisateur n'est pas encore chargé
wp_localize_script('crvi_main_agenda', 'crviPermissions', [
'can_create' => false,
'can_edit' => false,
'can_delete' => false,
'can_close' => false,
'can_view' => false,
'user_roles' => [],
'user_id' => 0,
]);
}
}
}
/**
* crvi+script loader
*/
public function custom_script_tag(array $attr) {
if('crvi_main_agenda-js' !== $attr['id']) {
return $attr;
}
// Le script est maintenant compilé avec toutes les dépendances, pas besoin de type module
// $attr['type'] = 'module';
return $attr;
}
public static function write_log($message, $level = 'INFO') {
$message = self::format_message_for_log($message);
$log_entry = sprintf("[%s] [%s] %s\n", date('Y-m-d H:i:s'), $level, $message);
error_log($log_entry);
}
private static function format_message_for_log($message) {
if (is_array($message)) {
return print_r($message, true);
} elseif (is_object($message)) {
return print_r($message, true);
} elseif (is_bool($message)) {
return $message ? 'TRUE' : 'FALSE';
} elseif (is_numeric($message)) {
return (string) $message;
} elseif (is_null($message)) {
return 'NULL';
} else {
return var_export($message, true);
}
}
}