195 lines
6.9 KiB
PHP
195 lines
6.9 KiB
PHP
<?php
|
|
/**
|
|
* MSIN API ChronoTrack — AJAX superadmin (liste CT, lien, mapping, statut).
|
|
*/
|
|
require_once dirname(__FILE__) . '/php/inc_functions.php';
|
|
require_once dirname(__FILE__) . '/../php/chronotrack_api/inc_bootstrap.php';
|
|
|
|
$intUsaId = fxSuperadmAjaxAuthOrJsonExit();
|
|
|
|
$strAction = trim((string)($_REQUEST['a'] ?? ''));
|
|
$intEveId = intval($_REQUEST['eve_id'] ?? 0);
|
|
$tabRetour = array('state' => 'error', 'message' => 'action_invalide');
|
|
|
|
switch ($strAction) {
|
|
case 'list_events':
|
|
if (!fxChronotrackApiSettingsConfigured()) {
|
|
$tabRetour = array('state' => 'error', 'message' => fxChronotrackApiSettingsErrorMessage());
|
|
break;
|
|
}
|
|
$strSearch = trim((string)($_REQUEST['search'] ?? ''));
|
|
$blnShowPast = (intval($_REQUEST['show_past'] ?? 0) === 1);
|
|
$tabRetour = fxChronotrackApiFetchEventsFiltered($strSearch, $blnShowPast);
|
|
break;
|
|
|
|
case 'save_link':
|
|
if ($intEveId <= 0) {
|
|
$tabRetour = array('state' => 'error', 'message' => 'eve_id manquant');
|
|
break;
|
|
}
|
|
$intCtEventId = intval($_REQUEST['ct_event_id'] ?? 0);
|
|
if ($intCtEventId <= 0) {
|
|
$tabRetour = array('state' => 'error', 'message' => 'ct_event_id manquant');
|
|
break;
|
|
}
|
|
|
|
$arrEvents = fxChronotrackApiFetchEventsFiltered('', true);
|
|
$strName = '';
|
|
$strDate = '';
|
|
if ($arrEvents['state'] === 'ok') {
|
|
foreach ($arrEvents['events'] as $arrEv) {
|
|
if (intval($arrEv['ct_event_id']) === $intCtEventId) {
|
|
$strName = $arrEv['name'];
|
|
$strDate = $arrEv['start_label'];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if ($strName === '') {
|
|
$strName = 'Event CT ' . $intCtEventId;
|
|
}
|
|
|
|
$tabRetour = fxChronotrackApiConfigSaveLink($intEveId, $intCtEventId, $strName, $strDate, $intUsaId);
|
|
break;
|
|
|
|
case 'set_status':
|
|
$strStatus = trim((string)($_REQUEST['sync_status'] ?? ''));
|
|
$tabRetour = fxChronotrackApiConfigSetStatus($intEveId, $strStatus, $intUsaId);
|
|
break;
|
|
|
|
case 'list_races':
|
|
$intCtEventId = intval($_REQUEST['ct_event_id'] ?? 0);
|
|
if ($intCtEventId <= 0 && $intEveId > 0) {
|
|
$arrCfg = fxChronotrackApiConfigGet($intEveId);
|
|
$intCtEventId = intval($arrCfg['ct_event_id'] ?? 0);
|
|
}
|
|
$tabRetour = fxChronotrackApiFetchRacesForEvent($intCtEventId);
|
|
break;
|
|
|
|
case 'save_race_map':
|
|
$tabMap = $_REQUEST['map'] ?? array();
|
|
if (is_string($tabMap)) {
|
|
$tabDecoded = json_decode($tabMap, true);
|
|
if (is_array($tabDecoded)) {
|
|
$tabMap = $tabDecoded;
|
|
}
|
|
}
|
|
$tabRetour = fxChronotrackApiRaceMapSave($intEveId, $tabMap);
|
|
break;
|
|
|
|
case 'diagnostic':
|
|
$intCtEventId = intval($_REQUEST['ct_event_id'] ?? 0);
|
|
if ($intCtEventId <= 0 && $intEveId > 0) {
|
|
$arrCfg = fxChronotrackApiConfigGet($intEveId);
|
|
$intCtEventId = intval($arrCfg['ct_event_id'] ?? 0);
|
|
}
|
|
$tabRetour = fxChronotrackApiRunEventDiagnostic($intCtEventId);
|
|
break;
|
|
|
|
case 'sync_preview':
|
|
if ($intEveId <= 0) {
|
|
$tabRetour = array('state' => 'error', 'message' => 'eve_id manquant');
|
|
break;
|
|
}
|
|
set_time_limit(60);
|
|
$tabRetour = fxChronotrackApiSyncBuildPreview($intEveId);
|
|
break;
|
|
|
|
case 'sync_ct_count':
|
|
if ($intEveId <= 0) {
|
|
$tabRetour = array('state' => 'error', 'message' => 'eve_id manquant');
|
|
break;
|
|
}
|
|
$arrCfg = fxChronotrackApiConfigGet($intEveId);
|
|
$intCtEventId = intval($arrCfg['ct_event_id'] ?? 0);
|
|
if ($intCtEventId <= 0) {
|
|
$tabRetour = array('state' => 'error', 'message' => 'Événement non lié à ChronoTrack');
|
|
break;
|
|
}
|
|
set_time_limit(180);
|
|
$tabRetour = fxChronotrackApiSyncFetchCtEntryCount($intCtEventId, $intEveId);
|
|
break;
|
|
|
|
case 'sync_mark_current':
|
|
// MSIN-4328 — reclôt last_push_at sans renvoyer (ex. faux différentiel après backfill entry_id)
|
|
if ($intEveId <= 0) {
|
|
$tabRetour = array('state' => 'error', 'message' => 'eve_id manquant');
|
|
break;
|
|
}
|
|
if (fxChronotrackApiConfigGet($intEveId) === null) {
|
|
$tabRetour = array('state' => 'error', 'message' => 'Événement non lié à ChronoTrack');
|
|
break;
|
|
}
|
|
$intOkCount = max(0, intval($_REQUEST['ok_count'] ?? 0));
|
|
if (fxChronotrackApiConfigSetLastPush($intEveId, $intOkCount)) {
|
|
$tabRetour = array(
|
|
'state' => 'ok',
|
|
'message' => 'Différentiel remis à zéro (last_push_at actualisé, rien envoyé à ChronoTrack).',
|
|
);
|
|
} else {
|
|
$tabRetour = array('state' => 'error', 'message' => 'Impossible de mettre à jour last_push_at');
|
|
}
|
|
break;
|
|
|
|
case 'sync_auto_save':
|
|
// MSIN-4328 — phase A : config only (cron phase B)
|
|
if ($intEveId <= 0) {
|
|
$tabRetour = array('state' => 'error', 'message' => 'eve_id manquant');
|
|
break;
|
|
}
|
|
$blnEnabled = (intval($_REQUEST['enabled'] ?? 0) === 1);
|
|
$intInterval = intval($_REQUEST['interval_min'] ?? 15);
|
|
$strUntil = trim((string)($_REQUEST['until'] ?? ''));
|
|
$tabRetour = fxChronotrackApiConfigSaveAutoSync($intEveId, $blnEnabled, $intInterval, $strUntil);
|
|
break;
|
|
|
|
case 'sync_probe_push':
|
|
if ($intEveId <= 0) {
|
|
$tabRetour = array('state' => 'error', 'message' => 'eve_id manquant');
|
|
break;
|
|
}
|
|
set_time_limit(120);
|
|
$tabRetour = fxChronotrackApiSyncProbePush($intEveId);
|
|
break;
|
|
|
|
case 'sync_push_prepare':
|
|
if ($intEveId <= 0) {
|
|
$tabRetour = array('state' => 'error', 'message' => 'eve_id manquant');
|
|
break;
|
|
}
|
|
set_time_limit(180);
|
|
$tabRetour = fxChronotrackApiSyncPushPrepare($intEveId);
|
|
break;
|
|
|
|
case 'sync_push':
|
|
if ($intEveId <= 0) {
|
|
$tabRetour = array('state' => 'error', 'message' => 'eve_id manquant');
|
|
break;
|
|
}
|
|
set_time_limit(300);
|
|
$intOffset = max(0, intval($_REQUEST['offset'] ?? 0));
|
|
$intLimit = max(0, intval($_REQUEST['limit'] ?? 0));
|
|
if ($intLimit <= 0) {
|
|
$intLimit = MSIN_API_CHRONOTRACK_SYNC_CHUNK_SIZE;
|
|
}
|
|
$tabRetour = fxChronotrackApiSyncPushEvent($intEveId, array(
|
|
'offset' => $intOffset,
|
|
'limit' => $intLimit,
|
|
));
|
|
break;
|
|
|
|
case 'sync_orphans':
|
|
if ($intEveId <= 0) {
|
|
$tabRetour = array('state' => 'error', 'message' => 'eve_id manquant');
|
|
break;
|
|
}
|
|
set_time_limit(180);
|
|
$tabRetour = fxChronotrackApiSyncListCtOrphans($intEveId);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
echo json_encode($tabRetour);
|