prepare("SELECT setting_value FROM site_settings WHERE setting_key = ? LIMIT 1"); $stmt->bind_param("s", $key); $stmt->execute(); $res = $stmt->get_result(); if ($row = $res->fetch_assoc()) { $stmt->close(); return $row['setting_value']; } $stmt->close(); return $default; } /** * Update or insert site setting. */ function update_site_setting($key, $value) { global $conn; if (!isset($conn)) return false; $stmt = $conn->prepare("INSERT INTO site_settings (setting_key, setting_value) VALUES (?, ?) ON DUPLICATE KEY UPDATE setting_value = VALUES(setting_value)"); $stmt->bind_param("ss", $key, $value); $res = $stmt->execute(); $stmt->close(); return $res; } /** * Upload and validate high-resolution site Favicon. */ function upload_site_favicon($file) { if (empty($file) || $file['error'] !== UPLOAD_ERR_OK) { return ['success' => false, 'message' => 'Errore nel caricamento del file favicon.']; } $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); $allowed_extensions = ['png', 'ico', 'webp', 'svg', 'jpeg', 'jpg']; if (!in_array($ext, $allowed_extensions)) { return ['success' => false, 'message' => 'Formato favicon non supportato. Formati ammessi: PNG, ICO, WEBP, SVG, JPG.']; } // High resolution dimension check for raster formats (PNG, WEBP, JPG, ICO) if (in_array($ext, ['png', 'webp', 'jpeg', 'jpg', 'ico'])) { $image_info = @getimagesize($file['tmp_name']); if ($image_info) { $width = $image_info[0]; $height = $image_info[1]; // Minimum high resolution requirement: 64x64px if ($width < 64 || $height < 64) { return [ 'success' => false, 'message' => "Risoluzione favicon troppo bassa ({$width}x{$height}px). Per garantire la massima qualità visiva, carica un'immagine ad alta risoluzione (almeno 64x64px)." ]; } } } // Ensure assets/img directory exists $img_dir = ROOT_DIR . "assets/img/"; if (!is_dir($img_dir)) { @mkdir($img_dir, 0777, true); } $new_filename = "favicon_" . time() . "." . $ext; $target_file = $img_dir . $new_filename; $relative_path = "assets/img/" . $new_filename; if (move_uploaded_file($file['tmp_name'], $target_file)) { update_site_setting('site_favicon', $relative_path); return ['success' => true, 'message' => 'Favicon aggiornata con successo!']; } return ['success' => false, 'message' => 'Impossibile salvare il file favicon su disco.']; }