0) {
try {
$stmt = $db->prepare("INSERT INTO tbl_scmining (cl_scmining_obj_id, cl_scmining_scan_value, cl_scmining_max_occurrence) VALUES (:obj_id, 0, 1)");
$stmt->execute(['obj_id' => $obj_id]);
auth_flash_set('success', 'Minéral ajouté avec succès.');
} catch (PDOException $e) {
if ($e->getCode() == 23000) {
auth_flash_set('error', 'Ce minéral est déjà dans la liste.');
} else {
auth_flash_set('error', "Erreur lors de l'ajout : " . $e->getMessage());
}
}
}
header('Location: ' . scmining_search_url($return_search, $return_page));
exit;
}
// Update mineral values
if ($action === 'update_mineral') {
$mining_id = (int)$_POST['mining_id'];
$scan_value = (int)$_POST['scan_value'];
$max_occurrence = (int)$_POST['max_occurrence'];
$can_manual = isset($_POST['can_manual']) ? 1 : 0;
$can_land = isset($_POST['can_land']) ? 1 : 0;
$can_space = isset($_POST['can_space']) ? 1 : 0;
$stmt = $db->prepare("UPDATE tbl_scmining SET cl_scmining_scan_value = :scan, cl_scmining_max_occurrence = :occ, cl_scmining_can_manual = :manual, cl_scmining_can_land = :land, cl_scmining_can_space = :space WHERE cl_scmining_id = :id");
$stmt->execute([
'scan' => $scan_value,
'occ' => $max_occurrence,
'manual' => $can_manual,
'land' => $can_land,
'space' => $can_space,
'id' => $mining_id
]);
auth_flash_set('success', 'Valeurs mises à jour.');
header('Location: scmining.php');
exit;
}
// Remove mineral
if ($action === 'delete_mineral') {
$mining_id = (int)$_POST['mining_id'];
$stmt = $db->prepare("DELETE FROM tbl_scmining WHERE cl_scmining_id = :id");
$stmt->execute(['id' => $mining_id]);
auth_flash_set('success', 'Minéral retiré de la liste.');
header('Location: scmining.php');
exit;
}
}
// Search for adding items
function sc_normalize_rarity(?string $rarity): string
{
return strtoupper(trim((string) $rarity));
}
function sc_rarity_class(?string $rarity): string
{
$rarity = sc_normalize_rarity($rarity);
return in_array($rarity, ['L', 'E', 'R', 'U', 'C'], true) ? 'rarity-' . $rarity : 'rarity-none';
}
function sc_rarity_style(?string $rarity): string
{
return match (sc_normalize_rarity($rarity)) {
'L' => 'color:#ff8000 !important;text-shadow:0 0 10px rgba(255,128,0,0.3);',
'E' => 'color:#a335ee !important;text-shadow:0 0 10px rgba(163,53,238,0.3);',
'R' => 'color:#0070dd !important;text-shadow:0 0 10px rgba(0,112,221,0.3);',
'U' => 'color:#1eff00 !important;text-shadow:0 0 10px rgba(30,255,0,0.3);',
'C' => 'color:#ffffff !important;',
default => 'color:#8f96a3 !important;',
};
}
function scmining_search_url(string $search = '', int $page = 1): string
{
$params = [];
if ($search !== '') {
$params['search'] = $search;
}
if ($page > 1) {
$params['search_page'] = $page;
}
return 'scmining.php' . ($params ? '?' . http_build_query($params) : '');
}
$search = isset($_GET['search']) ? trim($_GET['search']) : '';
$search_page = max(1, (int)($_GET['search_page'] ?? 1));
$search_per_page = 10;
$search_results = [];
$search_total_results = 0;
$search_total_pages = 0;
$configured_matches = [];
if ($search !== '') {
$stmt_configured = $db->prepare("SELECT o.* FROM tbl_scobjs o JOIN tbl_scmining m ON m.cl_scmining_obj_id = o.cl_scobjs_id WHERE o.cl_scobjs_name LIKE :search ORDER BY o.cl_scobjs_name ASC, o.cl_scobjs_id ASC");
$stmt_configured->execute(['search' => "%$search%"]);
$configured_matches = $stmt_configured->fetchAll();
$search_where = "FROM tbl_scobjs o WHERE o.cl_scobjs_name LIKE :search AND o.cl_scobjs_id NOT IN (SELECT cl_scmining_obj_id FROM tbl_scmining)";
$stmt_search_count = $db->prepare("SELECT COUNT(*) " . $search_where);
$stmt_search_count->execute(['search' => "%$search%"]);
$search_total_results = (int)$stmt_search_count->fetchColumn();
$search_total_pages = max(1, (int)ceil($search_total_results / $search_per_page));
$search_page = min($search_page, $search_total_pages);
$search_offset = ($search_page - 1) * $search_per_page;
$stmt_search = $db->prepare("SELECT o.* " . $search_where . " ORDER BY o.cl_scobjs_name ASC, o.cl_scobjs_id ASC LIMIT :limit OFFSET :offset");
$stmt_search->bindValue(':search', "%$search%", PDO::PARAM_STR);
$stmt_search->bindValue(':limit', $search_per_page, PDO::PARAM_INT);
$stmt_search->bindValue(':offset', $search_offset, PDO::PARAM_INT);
$stmt_search->execute();
$search_results = $stmt_search->fetchAll();
}
// Fetch current mining list
$sql_list = "SELECT m.*, o.cl_scobjs_name, o.cl_scobjs_uuid, o.cl_scobjs_type, o.cl_scobjs_subtype, o.cl_scobjs_rarity
FROM tbl_scmining m
JOIN tbl_scobjs o ON m.cl_scmining_obj_id = o.cl_scobjs_id
ORDER BY o.cl_scobjs_name ASC";
$stmt_list = $db->query($sql_list);
$mining_list = $stmt_list->fetchAll();
$current_session_user = $_SESSION['user'] ?? '';
?>
Scanner Minage | R.E.A.C.T. Admin