From 1306770f2e5541af525e86899e4aa387892acbb6 Mon Sep 17 00:00:00 2001
From: stephan
Date: Wed, 22 Jul 2026 21:49:57 -0400
Subject: [PATCH] =?UTF-8?q?MSIN-4328=20=E2=80=94=20Introduce=20verbose=20l?=
=?UTF-8?q?ogging=20option=20in=20the=20ChronoTrack=20API=20for=20detailed?=
=?UTF-8?q?=20entry=20logs.=20Update=20push=20panel=20UI=20to=20include=20?=
=?UTF-8?q?a=20checkbox=20for=20verbose=20logs=20and=20adjust=20related=20?=
=?UTF-8?q?functions=20to=20conditionally=20log=20detailed=20information?=
=?UTF-8?q?=20based=20on=20user=20selection.=20Increment=20version=20code.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
php/chronotrack_api/fx_chronotrack_admin.php | 10 ++++--
php/chronotrack_api/fx_chronotrack_sync.php | 37 ++++++++++++++++----
superadm/ajax_chronotrack_api.php | 4 ++-
3 files changed, 42 insertions(+), 9 deletions(-)
diff --git a/php/chronotrack_api/fx_chronotrack_admin.php b/php/chronotrack_api/fx_chronotrack_admin.php
index 6496b72..63ae9ea 100644
--- a/php/chronotrack_api/fx_chronotrack_admin.php
+++ b/php/chronotrack_api/fx_chronotrack_admin.php
@@ -460,8 +460,13 @@ function fxChronotrackApiAdminRenderPushPanel($intEveId, $blnClosed = false, $ar
echo '';
echo '';
+ echo '';
+ echo '';
+ echo '';
+ echo '
';
echo 'Envoyer = nouveaux / modifiés. '
- . 'Tout renvoyer = tous les éligibles (même barre %). Logs à chaque envoi.
';
+ . 'Tout renvoyer = tous les éligibles (même barre %).
';
echo '';
echo '';
@@ -1971,7 +1976,8 @@ function fxChronotrackApiAdminRenderPageScript($intEveId, $arrConfig, $blnClosed
data: {
a: 'sync_push_prepare',
eve_id: intEveId,
- force_full: blnForceFull ? 1 : 0
+ force_full: blnForceFull ? 1 : 0,
+ verbose_logs: $('#ct_api_verbose_logs').is(':checked') ? 1 : 0
}
}).done(function (prep) {
if (rejectIfSessionLost(prep)) {
diff --git a/php/chronotrack_api/fx_chronotrack_sync.php b/php/chronotrack_api/fx_chronotrack_sync.php
index 8a7c90a..933c0a7 100644
--- a/php/chronotrack_api/fx_chronotrack_sync.php
+++ b/php/chronotrack_api/fx_chronotrack_sync.php
@@ -1153,11 +1153,23 @@ function fxChronotrackApiSyncPostEntries($intCtEventId, array $tabEntries) {
}
/**
- * MSIN-4328 — log push_entry (succès).
+ * MSIN-4328 — logs push_entry un-pour-un (défaut = off, résumé lots seulement).
+ * @param bool|null $blnSet null = lire, bool = fixer pour la requête courante
+ */
+function fxChronotrackApiSyncVerboseEntryLogs($blnSet = null) {
+ static $blnVerbose = false;
+ if ($blnSet !== null) {
+ $blnVerbose = (bool)$blnSet;
+ }
+ return $blnVerbose;
+}
+
+/**
+ * MSIN-4328 — log push_entry (succès). Uniquement si logs détaillés cochés.
*/
function fxChronotrackApiSyncLogPushEntryOk($intEveId, array $arrM, array $arrPayload, $strPrefix = '') {
$intEveId = intval($intEveId);
- if ($intEveId <= 0) {
+ if ($intEveId <= 0 || !fxChronotrackApiSyncVerboseEntryLogs()) {
return;
}
$strBibMs1 = trim((string)($arrM['bib_ms1'] ?? $arrM['bib'] ?? ''));
@@ -1175,6 +1187,17 @@ function fxChronotrackApiSyncLogPushEntryOk($intEveId, array $arrM, array $arrPa
fxChronotrackApiSyncLog($intEveId, intval($arrM['par_id'] ?? 0), 'push_entry', 'ok', trim($strMsg));
}
+/**
+ * MSIN-4328 — log push_entry détail (conflit bib, etc.) si mode verbose.
+ */
+function fxChronotrackApiSyncLogPushEntryDetail($intEveId, $intParId, $strStatus, $strMessage) {
+ $intEveId = intval($intEveId);
+ if ($intEveId <= 0 || !fxChronotrackApiSyncVerboseEntryLogs()) {
+ return;
+ }
+ fxChronotrackApiSyncLog($intEveId, intval($intParId), 'push_entry', $strStatus, $strMessage);
+}
+
/**
* MSIN-4328 — 1 entry : tenter avec bib ; si conflit CT → clear + file pour 2e passe.
*
@@ -1238,10 +1261,9 @@ function fxChronotrackApiSyncPushOneEntryWithBibConflictHandling(
if ($strEntryId === '') {
fxChronotrackApiSyncApplyEntryIdsFromApiJson($arrClearRes['json'] ?? null, array($arrMeta));
}
- fxChronotrackApiSyncLog(
+ fxChronotrackApiSyncLogPushEntryDetail(
$intEveId,
intval($arrMeta['par_id'] ?? 0),
- 'push_entry',
'ok',
'conflit_bib → sans dossard (retry plus tard) external_id='
. ($arrMeta['external_id'] ?? '')
@@ -1396,10 +1418,9 @@ function fxChronotrackApiSyncPostEntriesAdaptive($intCtEventId, array $tabEntrie
if ($strEntryIdOne === '') {
fxChronotrackApiSyncApplyEntryIdsFromApiJson($arrClearRes['json'] ?? null, array($arrM));
}
- fxChronotrackApiSyncLog(
+ fxChronotrackApiSyncLogPushEntryDetail(
$intEveId,
intval($arrM['par_id'] ?? 0),
- 'push_entry',
'ok',
'conflit_bib → sans dossard (retry plus tard) external_id='
. ($arrM['external_id'] ?? '')
@@ -2243,6 +2264,8 @@ function fxChronotrackApiSyncPushJobClear($intEveId) {
function fxChronotrackApiSyncPushPrepare($intEveId, $arrOptions = array()) {
$intEveId = intval($intEveId);
$blnForceFull = !empty($arrOptions['force_full']);
+ $blnVerboseLogs = !empty($arrOptions['verbose_logs']);
+ fxChronotrackApiSyncVerboseEntryLogs($blnVerboseLogs);
$arrConfig = fxChronotrackApiConfigGet($intEveId);
if ($arrConfig === null) {
return array('state' => 'error', 'message' => 'Événement non lié à ChronoTrack');
@@ -2331,6 +2354,7 @@ function fxChronotrackApiSyncPushPrepare($intEveId, $arrOptions = array()) {
'meta' => $tabMeta,
'blocked_count' => $arrClass['blocked_count'],
'force_full' => $blnForceFull ? 1 : 0,
+ 'verbose_logs' => $blnVerboseLogs ? 1 : 0,
'ok_sum' => 0,
'err_sum' => 0,
'bib_retry' => array(),
@@ -2387,6 +2411,7 @@ function fxChronotrackApiSyncPushEvent($intEveId, $arrOptions = array()) {
$tabMetaAll = $arrJob['meta'];
$intTotal = count($tabBatchAll);
$intSkipped = intval($arrJob['blocked_count'] ?? 0);
+ fxChronotrackApiSyncVerboseEntryLogs(!empty($arrJob['verbose_logs']));
$tabBatch = array_slice($tabBatchAll, $intOffset, $intLimit);
$tabMeta = array_slice($tabMetaAll, $intOffset, $intLimit);
diff --git a/superadm/ajax_chronotrack_api.php b/superadm/ajax_chronotrack_api.php
index 187015b..3870b13 100644
--- a/superadm/ajax_chronotrack_api.php
+++ b/superadm/ajax_chronotrack_api.php
@@ -187,8 +187,10 @@ switch ($strAction) {
}
set_time_limit(180);
$blnForceFull = (intval($_REQUEST['force_full'] ?? 0) === 1);
+ $blnVerboseLogs = (intval($_REQUEST['verbose_logs'] ?? 0) === 1);
$tabRetour = fxChronotrackApiSyncPushPrepare($intEveId, array(
- 'force_full' => $blnForceFull,
+ 'force_full' => $blnForceFull,
+ 'verbose_logs' => $blnVerboseLogs,
));
break;