'
. ''
. '' . $strMsg . ''
. '';
}
function fxChronotrackApiAdminRenderLoaderAssets($vDomaine) {
echo '';
echo '';
}
function fxChronotrackApiAdminRenderEventLinkPicker($blnClosed) {
echo '
Lecture seule.
'; } else { echo 'Cliquez sur « Charger la liste » pour voir les événements à venir (tri par date).
'; echo 'Configuration du lien pour l\'événement MS1 ' . fxChronotrackApiAdminEsc($arrEvent['eve_nom']) . ' (eve_id ' . intval($arrEvent['eve_id']) . ').
'; if ($blnConfigured) { $strApiBase = fxChronotrackApiGetBaseUrl(); $blnIsTestApi = (strpos($strApiBase, 'api-test') !== false); echo 'Endpoint API : ' . fxChronotrackApiAdminEsc($strApiBase) . '';
if ($blnIsTestApi) {
echo ' QA';
} else {
echo ' prod';
}
echo '
Activer avant la course ; Terminer après pour bloquer la sync auto ' . 'et les changements de config. (La sync auto différentielle viendra ensuite.)
'; echo 'Aucune épreuve MS1 pour cet événement.
| Épreuve MS1 | Race ChronoTrack |
|---|---|
| ' . fxChronotrackApiAdminEsc($strLabel) . ' (epr_id ' . $intEprId . ') | '; if ($intCtRaceId > 0) { echo fxChronotrackApiAdminEsc($strCtRaceName !== '' ? $strCtRaceName : ('Race ID ' . $intCtRaceId)); echo ' (ID ' . $intCtRaceId . ')'; } else { echo '— Non mappé —'; } echo ' |
ChronoTrack event ID : ' . intval($arrConfig['ct_event_id'])
. ' — courses CT Live (race_name via GET event/{id}/race).
| Épreuve MS1 | Race ChronoTrack |
|---|---|
| ' . fxChronotrackApiAdminEsc($strLabel) . ' (epr_id ' . $intEprId . ') | '; echo ' |
';
if ($blnAutoOn && $strUntilRaw !== '') {
echo 'Config enregistrée — cron auto_chronotrack_sync.php (comme liste d’attente). Arrêt : '
. fxChronotrackApiAdminEsc($strUntilRaw) . '.';
} else {
echo 'Cochez, choisissez fréquence + date/heure de fin, puis Enregistrer.';
}
echo '
'; echo 'Dernier passage auto : '; if ($strLastAuto !== '' && $strLastAuto !== '0000-00-00 00:00:00') { echo fxChronotrackApiAdminEsc($strLastAuto); } else { echo 'jamais (le cron n’a pas encore poussé cet event)'; } echo '
'; echo ''; echo ''; echo 'Envoi manuel : nouveaux / modifiés depuis le dernier push. ' . 'Cet écran se rafraîchit doucement chaque minute (statut MS1 seulement).
'; echo ''; echo ''; // Détails / debug : sous les boutons, repliés par défaut echo 'Info technique : external ID = par_id_original. '
. 'Le comptage Live sert aussi à lier les entry_id pour le bouton fiche.
Outils de support (credentials MS1 / OAuth en cache). ' . 'Pas nécessaire pour une course en production.
'; echo ' '; echo ' '; echo ' '; echo ''; 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 '| Événement MS1 | ChronoTrack | Statut | |
|---|---|---|---|
| ' . fxChronotrackApiAdminEsc($arr['eve_nom']) . ' (' . intval($arr['eve_id']) . ') | '; echo '' . fxChronotrackApiAdminEsc($arr['ct_event_name']) . ' (' . intval($arr['ct_event_id']) . ') | '; echo '' . fxChronotrackApiAdminEsc(fxChronotrackApiConfigStatusLabel($arr['sync_status'])) . ' | '; echo 'Configurer | '; echo '