Événement MS1 introuvable.'; return; } $arrConfig = fxChronotrackApiConfigGet($intEveId); $blnConfigured = fxChronotrackApiSettingsConfigured(); $strStatus = $arrConfig['sync_status'] ?? ''; $blnClosed = ($strStatus === MSIN_API_CHRONOTRACK_SYNC_FERME); $strWrapperId = $blnInlineOnEventForm ? ' id="chronotrack_api"' : ''; echo '
'; if ($blnInlineOnEventForm) { echo '

MSIN API ChronoTrack

'; } else { echo '

MSIN API ChronoTrack

'; } echo '

Configuration du lien pour l\'événement MS1 ' . fxChronotrackApiAdminEsc($arrEvent['eve_nom']) . ' (eve_id ' . intval($arrEvent['eve_id']) . ').

'; if (!$blnConfigured) { echo '
' . fxChronotrackApiAdminEsc(fxChronotrackApiSettingsErrorMessage()) . '
'; } if ($arrConfig !== null) { echo '
'; echo 'Statut : ' . fxChronotrackApiAdminEsc(fxChronotrackApiConfigStatusLabel($strStatus)) . ''; echo ' — ChronoTrack : ' . fxChronotrackApiAdminEsc($arrConfig['ct_event_name']) . ''; echo ' (ID ' . intval($arrConfig['ct_event_id']) . ')'; echo '
'; } if ($blnClosed) { echo '
Cet événement est fermé. Aucune modification ni sync automatique.
'; } echo '
1. Lier un événement ChronoTrack
'; if ($blnClosed) { echo '

Lecture seule.

'; } else { echo '
'; echo '
'; echo '
'; echo '
'; echo ''; echo '
'; echo '
'; echo '
'; echo '
'; echo '

Cliquez sur « Charger la liste » pour voir les événements à venir (tri par date).

'; echo '
'; echo ''; } echo '
'; if ($arrConfig !== null && !$blnClosed) { fxChronotrackApiAdminRenderStatusActions($intEveId, $strStatus); } if ($arrConfig !== null) { fxChronotrackApiAdminRenderRaceMapping($intEveId, $arrConfig, $strLangue, $blnClosed); } if (!$blnInlineOnEventForm) { echo '

← Retour fiche événement

'; } echo '
'; fxChronotrackApiAdminRenderPageScript($intEveId, $arrConfig, $blnClosed, $vDomaine); } function fxChronotrackApiAdminRenderStatusActions($intEveId, $strStatus) { echo '
2. Cycle de vie sync
'; echo '

Activer avant la course ; Terminer après la course pour bloquer tout envoi vers ChronoTrack.

'; echo '
'; if ($strStatus === MSIN_API_CHRONOTRACK_SYNC_LIE) { echo ''; } if ($strStatus === MSIN_API_CHRONOTRACK_SYNC_ACTIF) { echo 'Sync active'; echo ''; } echo '
'; } function fxChronotrackApiAdminRenderRaceMapping($intEveId, $arrConfig, $strLangue, $blnClosed) { $arrEpreuves = fxChronotrackApiMs1EpreuvesForEvent($intEveId, $strLangue); $arrMap = fxChronotrackApiRaceMapGetForEvent($intEveId); echo '
Mapping épreuves MS1 → races ChronoTrack
'; if ($arrEpreuves === null || count($arrEpreuves) === 0) { echo '

Aucune épreuve MS1 pour cet événement.

'; return; } echo '

ChronoTrack event ID : ' . intval($arrConfig['ct_event_id']) . '

'; echo ''; for ($i = 1; $i <= count($arrEpreuves); $i++) { $intEprId = intval($arrEpreuves[$i]['epr_id']); $strLabel = trim($arrEpreuves[$i]['epr_type'] . ' — ' . $arrEpreuves[$i]['epr_nom']); $intSel = intval($arrMap[$intEprId]['ct_race_id'] ?? 0); echo ''; } echo '
Épreuve MS1Race ChronoTrack
' . fxChronotrackApiAdminEsc($strLabel) . ' (epr_id ' . $intEprId . ')'; echo '
'; if (!$blnClosed) { echo ''; } echo ''; } function fxChronotrackApiAdminRenderPageScript($intEveId, $arrConfig, $blnClosed, $vDomaine) { $intCtEventId = ($arrConfig !== null) ? intval($arrConfig['ct_event_id']) : 0; $arrMapCurrent = array(); if ($arrConfig !== null) { $arrMapRows = fxChronotrackApiRaceMapGetForEvent($intEveId); foreach ($arrMapRows as $intEprId => $arrRow) { $arrMapCurrent[intval($intEprId)] = intval($arrRow['ct_race_id']); } } ?> MSIN API ChronoTrack — Courses connectées'; echo '

Événements liés ou sync active. Le dashboard détaillé (diff, push) viendra en Phase 2.

'; if ($arrRows === null || count($arrRows) === 0) { echo '
Aucune course connectée.
'; return; } echo ''; for ($i = 1; $i <= count($arrRows); $i++) { $arr = $arrRows[$i]; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } echo '
Événement MS1ChronoTrackStatut
' . fxChronotrackApiAdminEsc($arr['eve_nom']) . ' (' . intval($arr['eve_id']) . ')' . fxChronotrackApiAdminEsc($arr['ct_event_name']) . ' (' . intval($arr['ct_event_id']) . ')' . fxChronotrackApiAdminEsc(fxChronotrackApiConfigStatusLabel($arr['sync_status'])) . 'Configurer
'; }