fxGetRow($sql); return ($tabRow === null || $tabRow === false) ? null : $tabRow; } /** * Retourne le lien résultats brut, ou null s'il est absent / vide. * * @param int $intEveId * @return string|null */ function fxEveExtraGetResultatsUrl($intEveId) { $tabRow = fxEveExtraGetRow($intEveId); if ($tabRow === null) { return null; } $strUrl = trim((string) ($tabRow['eve_resultats_url'] ?? '')); return ($strUrl !== '') ? $strUrl : null; } /** * Lien résultats à utiliser pour une redirection : * URL configurée, sinon fallback (ms1.ca). * * @param int $intEveId * @return string */ function fxEveExtraResolveResultatsUrl($intEveId) { $strUrl = fxEveExtraGetResultatsUrl($intEveId); return ($strUrl !== null) ? $strUrl : fxEveExtraResultatsFallbackUrl(); } /** * Crée ou met à jour le lien résultats pour un événement. * * @param int $intEveId * @param string $strUrl Chaîne vide = effacer le lien (NULL en BD) * @return bool */ function fxEveExtraSetResultatsUrl($intEveId, $strUrl) { global $objDatabase; $intEveId = intval($intEveId); if ($intEveId <= 0) { return false; } $strUrl = trim((string) $strUrl); if ($strUrl === '') { $strSqlUrl = 'NULL'; } else { $strSqlUrl = "'" . $objDatabase->fxEscape($strUrl) . "'"; } // MSIN-3487 — upsert : une ligne max par eve_id $sql = 'INSERT INTO inscriptions_evenements_extra (eve_id, eve_resultats_url, eve_extra_maj)' . ' VALUES (' . $intEveId . ', ' . $strSqlUrl . ', NOW())' . ' ON DUPLICATE KEY UPDATE' . ' eve_resultats_url = VALUES(eve_resultats_url),' . ' eve_extra_maj = NOW()'; return (bool) $objDatabase->fxQuery($sql); } /** * URL courte à encoder dans un QR (kc.php redirige vers les résultats). * Exemple : https://ms1inscription.com/kc.php?t=eve&id=760 * * @param int $intEveId * @param string|null $strBaseUrl Défaut = $vDomaine * @return string */ function fxKcEveResultatsQrUrl($intEveId, $strBaseUrl = null) { global $vDomaine; $intEveId = intval($intEveId); if ($strBaseUrl === null || trim((string) $strBaseUrl) === '') { $strBaseUrl = !empty($vDomaine) ? $vDomaine : 'https://ms1inscription.com'; } return rtrim($strBaseUrl, '/') . '/kc.php?t=eve&id=' . $intEveId; } /** * PNG binaire du QR résultats événement (avec logo MS1). * MSIN-3487 * * @param int $intEveId * @param string|null $strBaseUrl * @param int $intModuleSize * @param bool $blnWithLogo * @return string|false */ function fxKcEveResultatsQrPngBinary($intEveId, $strBaseUrl = null, $intModuleSize = 10, $blnWithLogo = true) { require_once __DIR__ . '/inc_fx_kc_qr.php'; $intEveId = intval($intEveId); if ($intEveId <= 0) { return false; } return fxKcQrGeneratePngBinary( fxKcEveResultatsQrUrl($intEveId, $strBaseUrl), $intModuleSize, $blnWithLogo ); }