Actualiser test.html
CI / PHP Syntax Check (push) Has been cancelled
CI / JavaScript Lint (push) Has been cancelled
CI / Docker Build Test (push) Has been cancelled
CI / Validate Translation Files (push) Has been cancelled
CI / Auto-merge develop → main (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled

This commit is contained in:
2026-06-17 20:06:17 +00:00
parent f3c1fd2e7b
commit f65f65d38f
+13 -16
View File
@@ -39,11 +39,13 @@
async function loadData() { async function loadData() {
try { try {
// Chargement des données
const [transRes, prodsRes] = await Promise.all([ const [transRes, prodsRes] = await Promise.all([
fetch('translations/fr.json').then(r => r.json()), fetch('translations/fr.json').then(r => r.json()),
fetch('api/index.php?action=products_list').then(r => r.json()) fetch('api/index.php?action=products_list').then(r => r.json())
]); ]);
categories = transRes.categories || {}; categories = transRes.categories || {};
// Vérification de la structure des données
fullProductList = prodsRes.inventory || prodsRes.products || prodsRes; fullProductList = prodsRes.inventory || prodsRes.products || prodsRes;
const catSel = document.getElementById('cat-mass'); const catSel = document.getElementById('cat-mass');
@@ -91,33 +93,29 @@
let errorCount = 0; let errorCount = 0;
for (const checkbox of checkedBoxes) { for (const checkbox of checkedBoxes) {
let p = fullProductList[checkbox.dataset.index]; let p = { ...fullProductList[checkbox.dataset.index] };
p.category = newCat;
let formData = new FormData();
for (let key in p) {
formData.append(key, p[key]);
}
formData.set('category', newCat);
try { try {
// Ajout de credentials: 'include' pour envoyer tes cookies de connexion // On force les headers pour simuler une requête de l'interface officielle
// Ajout de X-Requested-With pour simuler une requête AJAX authentique // credentials: 'include' envoie les cookies de session
let res = await fetch('api/index.php?action=product_save', { let res = await fetch('api/index.php?action=product_save', {
method: 'POST', method: 'POST',
body: formData,
credentials: 'include',
headers: { headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest' 'X-Requested-With': 'XMLHttpRequest'
} },
body: JSON.stringify(p),
credentials: 'include'
}); });
if (res.ok) { if (res.ok) {
successCount++; successCount++;
} else { } else {
console.error("Erreur serveur sur " + p.name, res.status); console.error("Erreur serveur sur " + p.name + ":", res.status);
errorCount++; errorCount++;
} }
await new Promise(r => setTimeout(r, 300)); await new Promise(r => setTimeout(r, 400)); // Pause pour ne pas saturer
} catch (e) { } catch (e) {
console.error("Erreur réseau sur " + p.name, e); console.error("Erreur réseau sur " + p.name, e);
errorCount++; errorCount++;
@@ -127,8 +125,7 @@
await loadData(); await loadData();
btn.disabled = false; btn.disabled = false;
btn.textContent = "APPLIQUER AUX COCHÉS"; btn.textContent = "APPLIQUER AUX COCHÉS";
alert(`Terminé :\nSuccès : ${successCount}\nErreurs : ${errorCount}`);
alert(`Traitement terminé :\n- Succès : ${successCount}\n- Erreurs : ${errorCount}`);
} }
</script> </script>
</body> </body>