Files
ms1inscription-v5/ajax_inscr_gestion.php
stephan 8f428a5c18 Refactor event management system to transition from mobile to gestion
This commit updates the event management system by replacing references to mobile inscriptions with gestion inscriptions. It includes changes to AJAX endpoints, helper functions, and UI elements to reflect this transition. The updates enhance the overall structure and maintainability of the codebase while ensuring that user access and permissions are properly managed for the new gestion interface.
2026-06-27 12:10:19 -04:00

118 lines
5.5 KiB
PHP

<?php
/**
* Actions AJAX reservees a la fiche de gestion des inscriptions (v2).
* N'altere pas ajax_promoteur.php ni enregistrer.php (legacy promoteur).
*/
session_start();
require_once 'php/inc_fonctions.php';
require_once 'php/inc_fx_promoteur.php';
require_once 'php/inc_fx_inscriptions_gestion.php';
header('Content-Type: application/json; charset=utf-8');
$intComId = intval($_SESSION['com_id'] ?? 0);
$strAction = trim((string)($_REQUEST['a'] ?? ''));
$strLangue = trim((string)($_REQUEST['lang'] ?? 'fr'));
if ($strLangue === '') {
$strLangue = 'fr';
}
if ($intComId <= 0) {
echo json_encode(array('state' => 'error', 'message' => 'session'));
exit;
}
$tabRetour = array('state' => 'error');
switch ($strAction) {
case 'par_statut_course':
$intParId = intval($_REQUEST['par_id'] ?? 0);
$strStatut = trim((string)($_REQUEST['par_statut_course'] ?? ''));
$intEveId = fxEveAccesResolveEveIdFromParId($intParId);
if ($intEveId <= 0 || !fxInscrGestionCanDo($intComId, $intEveId, 'inscriptions_gestion.statut_edit')) {
$tabRetour = array('state' => 'error', 'message' => 'unauthorized');
break;
}
$tabRetour = fxSetParStatutCourse($intParId, $strStatut, $strLangue);
break;
case 'refund_form':
// Charge le formulaire de remboursement mutualise pour la fiche de gestion (panneau repliable).
$strNoPanier = trim((string)($_REQUEST['no_panier'] ?? ''));
if ($strNoPanier === '') {
$tabRetour = array('state' => 'error', 'message' => 'no_panier_manquant');
break;
}
// Meme source que le Super Admin : la commande vient de inscriptions_panier_acheteurs.
$sqlCmd = "SELECT *, IF(a.com_id <> 0, (SELECT c.com_login FROM inscriptions_comptes c WHERE a.com_id = c.com_id), '') AS usager"
. " FROM inscriptions_panier_acheteurs a, inscriptions_panier_statuts s"
. " WHERE s.sta_id = a.sta_id AND a.no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'";
$recCommandes = $objDatabase->fxGetRow($sqlCmd);
if (!$recCommandes) {
$tabRetour = array('state' => 'error', 'message' => 'commande_introuvable');
break;
}
// L'eve_id fait foi cote serveur (jamais le client) pour le controle d'acces a l'evenement.
$intEveId = intval($recCommandes['eve_id']);
if ($intEveId <= 0 || !fxInscrGestionCanDo($intComId, $intEveId, 'inscriptions_gestion.refund')) {
$tabRetour = array('state' => 'error', 'message' => 'unauthorized');
break;
}
// Module mutualise (ne tire jamais inc_functions.php "U") : voir superadm/php/inc_fx_paypal.php
require_once $_SERVER['DOCUMENT_ROOT'] . '/superadm/php/inc_fx_paypal.php';
$strRefundToken = fxRefundEnsureToken();
$arrRefundCtx = fxRefundComputeContext($recCommandes);
// Auteur = promoteur connecte (alimente l'encart "Ajoute par" du formulaire).
$strAuteur = trim((string)($_SESSION['com_info']['com_prenom'] ?? '') . ' '
. (string)($_SESSION['com_info']['com_nom'] ?? ''));
// Markup seul (sans <script>, dernier param false) car injecte via innerHTML :
// le comportement (submit AJAX) est gere par le handler delegue dans inc_footer_scripts.php.
$strForm = fxRenderRefundForm($recCommandes, $strRefundToken, $arrRefundCtx, $vDomaine, $strAuteur, null, false);
// Resume de la facture (meme rendu que facture.php cote promoteur) : permet de voir ce qu'on rembourse.
// Affiche UNIQUEMENT cote promoteur ; en Super Admin on est deja dans le visuel de la facture.
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/inc_fx_panier.php';
$strResume = fxShowPanier($recCommandes['no_panier'], 0, 'web', 1, $strLangue);
// Libelles bilingues du bouton repliable.
$strLblShow = ($strLangue === 'en') ? 'Show transaction' : 'Afficher la transaction';
$strLblHide = ($strLangue === 'en') ? 'Hide transaction' : 'Masquer la transaction';
// Panneau repliable distinct (masque par defaut) : en-tete bleu + encadre + fond teinte,
// pour qu'il ressorte clairement comme une facture et ne se fonde pas dans la page.
$strResumeBlock =
'<details id="ms1-refund-resume" class="ms1-refund-resume"'
. ' style="margin-bottom:14px;border:1px solid #2d6cdf;border-radius:10px;background:#fff;overflow:hidden;box-shadow:0 1px 4px rgba(0,0,0,.12);">'
. '<summary style="cursor:pointer;list-style:none;padding:10px 14px;font-weight:600;color:#fff;background:#2d6cdf;">'
. '<span class="ms1-resume-when-closed">&#9656; ' . $strLblShow . '</span>'
. '<span class="ms1-resume-when-open">&#9662; ' . $strLblHide . '</span>'
. '</summary>'
. '<div style="padding:14px;background:#f4f7fc;border-top:1px solid #cfe0ff;">' . $strResume . '</div>'
. '</details>'
. '<style>'
. '#ms1-refund-resume[open] .ms1-resume-when-closed{display:none;}'
. '#ms1-refund-resume:not([open]) .ms1-resume-when-open{display:none;}'
. '#ms1-refund-resume summary::-webkit-details-marker{display:none;}'
. '</style>';
$strHtml = $strResumeBlock . $strForm;
$tabRetour = array('state' => 'ok', 'html' => $strHtml);
break;
default:
$tabRetour = array('state' => 'error', 'message' => 'invalid_action');
break;
}
echo json_encode($tabRetour);