prepare(
"SELECT
m.cl_scmanufactures_id,
m.cl_scmanufactures_name,
v.cl_scvaisseaux_id,
v.cl_scvaisseaux_name
FROM tbl_scvaisseaux v
INNER JOIN tbl_scmanufactures m
ON m.cl_scmanufactures_id = v.cl_scvaisseaux_manufacture_id
WHERE m.cl_scmanufactures_id = :manufacture_id
AND v.cl_scvaisseaux_id = :ship_id
LIMIT 1"
);
$stmt->execute([
'manufacture_id' => $manufactureId,
'ship_id' => $shipId,
]);
$relation = $stmt->fetch();
return $relation ?: null;
}
// Handle POST actions
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$submitted_csrf = $_POST['csrf_token'] ?? '';
if (!auth_validate_csrf($submitted_csrf)) {
auth_flash_set('error', 'Jeton CSRF invalide.');
header('Location: scpreset.php');
exit;
}
$action = $_POST['action'] ?? '';
// Add preset
if ($action === 'add_preset') {
$manufacture_id = (int)($_POST['manufacture_id'] ?? 0);
$ship_id = (int)($_POST['ship_id'] ?? 0);
$description = trim($_POST['description'] ?? '');
$link = trim($_POST['link'] ?? '');
$creator = $current_session_user ?: 'Inconnu';
$relation = find_preset_ship_relation($db, $manufacture_id, $ship_id);
if ($relation && $link !== '') {
try {
$stmt = $db->prepare("INSERT INTO tbl_scpreset (
cl_scpreset_manufacture_id,
cl_scpreset_vaisseau_id,
cl_scpreset_name,
cl_scpreset_manufacturer,
cl_scpreset_description,
cl_scpreset_link,
cl_scpreset_creator
) VALUES (
:manufacture_id,
:ship_id,
:name,
:manufacturer,
:description,
:link,
:creator
)");
$stmt->execute([
'manufacture_id' => $relation['cl_scmanufactures_id'],
'ship_id' => $relation['cl_scvaisseaux_id'],
'name' => $relation['cl_scvaisseaux_name'],
'manufacturer' => $relation['cl_scmanufactures_name'],
'description' => $description,
'link' => $link,
'creator' => $creator,
]);
auth_flash_set('success', 'Preset ajouté avec succès.');
} catch (PDOException $e) {
auth_flash_set('error', 'Erreur lors de l\'ajout : ' . $e->getMessage());
}
} else {
auth_flash_set('error', 'Veuillez sélectionner une manufacture, un vaisseau valide et renseigner le lien.');
}
header('Location: scpreset.php');
exit;
}
// Update preset
if ($action === 'update_preset') {
$preset_id = (int)($_POST['preset_id'] ?? 0);
$manufacture_id = (int)($_POST['manufacture_id'] ?? 0);
$ship_id = (int)($_POST['ship_id'] ?? 0);
$description = trim($_POST['description'] ?? '');
$link = trim($_POST['link'] ?? '');
$relation = find_preset_ship_relation($db, $manufacture_id, $ship_id);
if ($preset_id > 0 && $relation && $link !== '') {
try {
$stmt = $db->prepare("UPDATE tbl_scpreset SET
cl_scpreset_manufacture_id = :manufacture_id,
cl_scpreset_vaisseau_id = :ship_id,
cl_scpreset_name = :name,
cl_scpreset_manufacturer = :manufacturer,
cl_scpreset_description = :description,
cl_scpreset_link = :link
WHERE cl_scpreset_id = :id");
$stmt->execute([
'manufacture_id' => $relation['cl_scmanufactures_id'],
'ship_id' => $relation['cl_scvaisseaux_id'],
'name' => $relation['cl_scvaisseaux_name'],
'manufacturer' => $relation['cl_scmanufactures_name'],
'description' => $description,
'link' => $link,
'id' => $preset_id,
]);
auth_flash_set('success', 'Preset mis à jour.');
} catch (PDOException $e) {
auth_flash_set('error', 'Erreur lors de la mise à jour : ' . $e->getMessage());
}
} else {
auth_flash_set('error', 'Données invalides : sélectionne une manufacture, un vaisseau valide et un lien.');
}
header('Location: scpreset.php');
exit;
}
// Delete preset
if ($action === 'delete_preset') {
$preset_id = (int)($_POST['preset_id'] ?? 0);
if ($preset_id > 0) {
$stmt = $db->prepare("DELETE FROM tbl_scpreset WHERE cl_scpreset_id = :id");
$stmt->execute(['id' => $preset_id]);
auth_flash_set('success', 'Preset supprimé.');
} else {
auth_flash_set('error', 'ID de preset invalide.');
}
header('Location: scpreset.php');
exit;
}
}
$stmt_mans = $db->query("SELECT * FROM tbl_scmanufactures ORDER BY cl_scmanufactures_name ASC");
$manufactures = $stmt_mans->fetchAll();
$stmt_ships = $db->query("SELECT
v.cl_scvaisseaux_id,
v.cl_scvaisseaux_name,
v.cl_scvaisseaux_manufacture_id,
m.cl_scmanufactures_name
FROM tbl_scvaisseaux v
INNER JOIN tbl_scmanufactures m ON m.cl_scmanufactures_id = v.cl_scvaisseaux_manufacture_id
ORDER BY m.cl_scmanufactures_name ASC, v.cl_scvaisseaux_name ASC");
$ships = $stmt_ships->fetchAll();
$manufacture_lookup = [];
$ships_by_manufacture = [];
$ships_by_id = [];
$ship_lookup = [];
foreach ($manufactures as $manufacture) {
$manufacture_lookup[normalize_catalog_label($manufacture['cl_scmanufactures_name'])] = (int)$manufacture['cl_scmanufactures_id'];
$ships_by_manufacture[(int)$manufacture['cl_scmanufactures_id']] = [];
}
foreach ($ships as $ship) {
$manufactureId = (int)$ship['cl_scvaisseaux_manufacture_id'];
$shipId = (int)$ship['cl_scvaisseaux_id'];
$shipName = $ship['cl_scvaisseaux_name'];
$manufacturerName = $ship['cl_scmanufactures_name'];
$ships_by_manufacture[$manufactureId][] = [
'id' => $shipId,
'name' => $shipName,
];
$ships_by_id[$shipId] = [
'id' => $shipId,
'name' => $shipName,
'manufacture_id' => $manufactureId,
'manufacturer_name' => $manufacturerName,
];
$ship_lookup[$manufactureId . '|' . normalize_catalog_label($shipName)] = $shipId;
}
$stmt_list = $db->query("SELECT
p.*,
m.cl_scmanufactures_name AS relation_manufacturer_name,
v.cl_scvaisseaux_name AS relation_ship_name,
v.cl_scvaisseaux_manufacture_id AS relation_ship_manufacture_id
FROM tbl_scpreset p
LEFT JOIN tbl_scmanufactures m ON m.cl_scmanufactures_id = p.cl_scpreset_manufacture_id
LEFT JOIN tbl_scvaisseaux v ON v.cl_scvaisseaux_id = p.cl_scpreset_vaisseau_id
ORDER BY COALESCE(m.cl_scmanufactures_name, p.cl_scpreset_manufacturer) ASC,
COALESCE(v.cl_scvaisseaux_name, p.cl_scpreset_name) ASC");
$presets = $stmt_list->fetchAll();
foreach ($presets as &$preset) {
$resolvedManufactureId = (int)($preset['cl_scpreset_manufacture_id'] ?? 0);
if ($resolvedManufactureId <= 0) {
$manufacturerKey = normalize_catalog_label((string)($preset['cl_scpreset_manufacturer'] ?? ''));
if ($manufacturerKey !== '' && isset($manufacture_lookup[$manufacturerKey])) {
$resolvedManufactureId = $manufacture_lookup[$manufacturerKey];
}
}
$resolvedShipId = (int)($preset['cl_scpreset_vaisseau_id'] ?? 0);
if ($resolvedShipId <= 0 && $resolvedManufactureId > 0) {
$shipKey = $resolvedManufactureId . '|' . normalize_catalog_label((string)($preset['cl_scpreset_name'] ?? ''));
if (isset($ship_lookup[$shipKey])) {
$resolvedShipId = $ship_lookup[$shipKey];
}
}
$displayManufacturer = $preset['relation_manufacturer_name'] ?: $preset['cl_scpreset_manufacturer'];
$displayName = $preset['relation_ship_name'] ?: $preset['cl_scpreset_name'];
if ($resolvedShipId > 0 && isset($ships_by_id[$resolvedShipId])) {
$displayName = $ships_by_id[$resolvedShipId]['name'];
$displayManufacturer = $ships_by_id[$resolvedShipId]['manufacturer_name'];
$resolvedManufactureId = $ships_by_id[$resolvedShipId]['manufacture_id'];
}
$preset['resolved_manufacture_id'] = $resolvedManufactureId;
$preset['resolved_ship_id'] = $resolvedShipId;
$preset['display_manufacturer'] = $displayManufacturer;
$preset['display_name'] = $displayName;
}
unset($preset);
?>
Presets Vaisseaux | R.E.A.C.T. Admin