From a860db05d3db58dfed93447d7a27f394ad706e6c Mon Sep 17 00:00:00 2001 From: stephan Date: Tue, 14 Jul 2026 11:37:59 -0400 Subject: [PATCH] Refactor ChronoTrack API synchronization to streamline entry counting and improve performance. Introduce new functions for fetching total entries without detailed scanning, enhancing efficiency. Adjust AJAX handling for synchronization processes and update timeout settings for better reliability. This change aims to optimize data handling during participant synchronization. --- php/chronotrack_api/fx_chronotrack_admin.php | 319 +++++++++---------- php/chronotrack_api/fx_chronotrack_sync.php | 163 ++++++---- superadm/ajax_chronotrack_api.php | 17 +- 3 files changed, 270 insertions(+), 229 deletions(-) diff --git a/php/chronotrack_api/fx_chronotrack_admin.php b/php/chronotrack_api/fx_chronotrack_admin.php index e1b241a..ae5a040 100644 --- a/php/chronotrack_api/fx_chronotrack_admin.php +++ b/php/chronotrack_api/fx_chronotrack_admin.php @@ -101,18 +101,37 @@ function fxChronotrackApiAdminRenderEventPage($intEveId, $strLangue = 'fr', $bln fxChronotrackApiAdminRenderEventLinkPicker($blnClosed); } - if ($arrConfig !== null) { - fxChronotrackApiAdminRenderStatusActions($intEveId, $strStatus, $blnEventLinked); - } - - if ($arrConfig !== null) { - fxChronotrackApiAdminRenderRaceMapping($intEveId, $arrConfig, $strLangue, $blnClosed, $blnEventLinked); - } - + // Sync d’abord (usage courant) ; config repliable ensuite. MSIN-4328 if ($arrConfig !== null && $blnEventLinked && $blnConfigured) { fxChronotrackApiAdminRenderPushPanel($intEveId, $blnClosed); } + if ($arrConfig !== null && $blnEventLinked) { + $blnHasSavedMapping = false; + $arrMapRows = fxChronotrackApiRaceMapGetForEvent($intEveId); + foreach ($arrMapRows as $arrMapRow) { + if (intval($arrMapRow['ct_race_id'] ?? 0) > 0) { + $blnHasSavedMapping = true; + break; + } + } + $strConfigExpanded = $blnHasSavedMapping ? '' : ' show'; + echo '
'; + echo ''; + echo '
'; + fxChronotrackApiAdminRenderStatusActions($intEveId, $strStatus, $blnEventLinked); + fxChronotrackApiAdminRenderRaceMapping($intEveId, $arrConfig, $strLangue, $blnClosed, $blnEventLinked); + echo '
'; + } elseif ($arrConfig !== null) { + fxChronotrackApiAdminRenderStatusActions($intEveId, $strStatus, $blnEventLinked); + fxChronotrackApiAdminRenderRaceMapping($intEveId, $arrConfig, $strLangue, $blnClosed, $blnEventLinked); + } + if ($blnEventLinked && $blnConfigured) { fxChronotrackApiAdminRenderDiagnosticPanel(intval($arrConfig['ct_event_id'])); } @@ -127,9 +146,9 @@ function fxChronotrackApiAdminRenderEventPage($intEveId, $strLangue = 'fr', $bln } function fxChronotrackApiAdminRenderStatusActions($intEveId, $strStatus, $blnEventLinked = true) { - $strStep = $blnEventLinked ? '1' : '2'; - echo '
' . $strStep . '. Cycle de vie sync
'; - echo '

Activer avant la course ; Terminer après la course pour bloquer la sync auto et les changements de config.

'; + echo '
Cycle de vie sync
'; + 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 '
'; if ($strStatus === MSIN_API_CHRONOTRACK_SYNC_LIE) { echo ''; @@ -160,8 +179,7 @@ function fxChronotrackApiAdminRenderRaceMapping($intEveId, $arrConfig, $strLangu } } - $strStep = $blnEventLinked ? '2' : '3'; - echo '
' . $strStep . '. Mapping épreuves MS1 → races ChronoTrack
'; + echo '
Mapping épreuves MS1 → races ChronoTrack
'; if ($arrEpreuves === null || count($arrEpreuves) === 0) { echo '

Aucune épreuve MS1 pour cet événement.

'; return; @@ -227,26 +245,23 @@ function fxChronotrackApiAdminRenderRaceMapping($intEveId, $arrConfig, $strLangu } function fxChronotrackApiAdminRenderPushPanel($intEveId, $blnClosed = false) { - global $vDomaine; echo '
'; - echo '
3. Synchronisation manuelle (participants)
'; + echo '
Synchronisation manuelle (participants)
'; echo '
'; if ($blnClosed) { echo '
Événement fermé — push manuel autorisé pour tests ou rattrapage.
'; } - echo '

Push manuel · External ID = par_id_original · Pas de sync auto.

'; + echo '

Push différentiel MS1 → ChronoTrack ' + . '(nouveaux / modifiés depuis le dernier push OK). External ID = par_id_original.

'; echo '
Cliquez Actualiser.
'; echo '
'; - echo '
'; echo '
'; echo ' '; + echo ' Pousser le différentiel '; echo ' '; - echo ' '; - echo ''; + echo ''; echo '
'; echo '
'; echo '
'; @@ -258,14 +273,15 @@ function fxChronotrackApiAdminRenderDiagnosticPanel($intCtEventId) { echo 'Diagnostic API ChronoTrack (support — event ID ' . intval($intCtEventId) . ')'; echo '
'; echo '
'; - echo '

Utilise les credentials MS1 déjà configurés (OAuth en cache). '; - echo 'Sonde event/{id}/race, entry (5 premières inscriptions), '; - echo 'event et reg_choice. Copie le rapport pour le développement.

'; + echo '

Outils de support (credentials MS1 / OAuth en cache). ' + . 'Pas nécessaire pour une course en production.

'; echo ' '; + echo ' '; echo ''; - echo '
Cliquez sur « Lancer le diagnostic API ».
'; + echo '
Cliquez sur « Lancer le diagnostic API » ou « Sonde ».
'; echo '
'; } @@ -285,16 +301,14 @@ function fxChronotrackApiAdminRenderPageScript($intEveId, $arrConfig, $blnClosed } ?>