intval($intParam1), 'url' => $strUrl, 'file' => $strOutputFile, ]; } /** * Génère une série de QR codes key_chain. */ function fxKcQrGenerateBatch(array $options) { $intStart = intval($options['start'] ?? 500); $intCount = max(1, intval($options['count'] ?? 100)); $strBaseUrl = rtrim($options['base_url'] ?? 'https://ms1inscription.com', '/'); $strOutputDir = rtrim($options['output_dir'] ?? (__DIR__ . '/../output/kc_qr'), DIRECTORY_SEPARATOR); $intModuleSize = max(6, intval($options['module_size'] ?? 18)); $blnWithLogo = !empty($options['with_logo']); if (!is_dir($strOutputDir)) { mkdir($strOutputDir, 0755, true); } $tabGenerated = []; for ($i = 0; $i < $intCount; $i++) { $intParam1 = $intStart + $i; $strFile = $strOutputDir . DIRECTORY_SEPARATOR . 'qr_kc_' . $intParam1 . '.png'; $tabGenerated[] = fxKcQrGeneratePng($intParam1, $strBaseUrl, $strFile, $intModuleSize, $blnWithLogo); } $strManifest = $strOutputDir . DIRECTORY_SEPARATOR . 'manifest.csv'; $fh = fopen($strManifest, 'w'); if ($fh !== false) { fputcsv($fh, ['param1', 'vehicule_no', 'url', 'filename']); foreach ($tabGenerated as $row) { $intVehicule = $row['param1']; if (defined('KEYCHAIN_HTTP_EDIT_SHIFT')) { $intVehicule = $row['param1'] - KEYCHAIN_HTTP_EDIT_SHIFT; } fputcsv($fh, [ $row['param1'], $intVehicule, $row['url'], basename($row['file']), ]); } fclose($fh); } return [ 'output_dir' => $strOutputDir, 'count' => count($tabGenerated), 'start' => $intStart, 'end' => $intStart + $intCount - 1, 'manifest' => $strManifest, 'files' => array_column($tabGenerated, 'file'), ]; }