file($f['tmp_name']);
$allowed = ['image/png'=>'png','image/jpeg'=>'jpg','image/webp'=>'webp'];
if (!isset($allowed[$mime])) throw new RuntimeException("Formato no permitido para $field. Usa PNG/JPG/WEBP.");
if ($f['size'] > 5 * 1024 * 1024) throw new RuntimeException("Archivo muy grande para $field (máx 5MB).");
$ext = $allowed[$mime];
$base = sanitize_filename(pathinfo($f['name'], PATHINFO_FILENAME));
$fname = $base . '-' . uniqid() . '.' . $ext;
$dest = rtrim($UPLOAD_DIR, "/\\") . DIRECTORY_SEPARATOR . $fname;
if (!move_uploaded_file($f['tmp_name'], $dest)) throw new RuntimeException("No se pudo guardar el archivo de $field.");
return rtrim($PUBLIC_DIR, '/') . '/' . $fname; // ruta pública para
}
function get_ruleta(mysqli $conn, $id) {
$stmt = $conn->prepare("SELECT id, nombre, descripcion,
imagen_ruleta, imagen_puntero,
banner_1, banner_2, banner_3, banner_4,
background_image, fullscreen_icon
FROM ruletas WHERE id=?");
$stmt->bind_param("i", $id); $stmt->execute();
return $stmt->get_result()->fetch_assoc();
}
$msg = $err = '';
$action = $_GET['action'] ?? '';
$id = (int)($_GET['id'] ?? 0);
// ---------- create / update ----------
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$rid = (int)($_POST['id'] ?? 0);
$nombre = trim($_POST['nombre'] ?? '');
$descripcion = trim($_POST['descripcion'] ?? '');
// valores previos (para mantener si no se sube nuevo archivo)
$old = [
'imagen_ruleta' => trim($_POST['old_imagen_ruleta'] ?? ''),
'imagen_puntero' => trim($_POST['old_imagen_puntero'] ?? ''),
'banner_1' => trim($_POST['old_banner_1'] ?? ''),
'banner_2' => trim($_POST['old_banner_2'] ?? ''),
'banner_3' => trim($_POST['old_banner_3'] ?? ''),
'banner_4' => trim($_POST['old_banner_4'] ?? ''),
'background_image'=> trim($_POST['old_background_image'] ?? ''),
'fullscreen_icon' => trim($_POST['old_fullscreen_icon'] ?? ''),
];
if ($nombre === '') {
$err = "El nombre es obligatorio.";
} else {
try {
// nuevas subidas (si vienen)
$new = [
'imagen_ruleta' => upload_image('imagen_ruleta', $UPLOAD_DIR, $PUBLIC_DIR),
'imagen_puntero' => upload_image('imagen_puntero', $UPLOAD_DIR, $PUBLIC_DIR),
'banner_1' => upload_image('banner_1', $UPLOAD_DIR, $PUBLIC_DIR),
'banner_2' => upload_image('banner_2', $UPLOAD_DIR, $PUBLIC_DIR),
'banner_3' => upload_image('banner_3', $UPLOAD_DIR, $PUBLIC_DIR),
'banner_4' => upload_image('banner_4', $UPLOAD_DIR, $PUBLIC_DIR),
'background_image'=> upload_image('background_image',$UPLOAD_DIR, $PUBLIC_DIR),
'fullscreen_icon' => upload_image('fullscreen_icon', $UPLOAD_DIR, $PUBLIC_DIR),
];
// decidir final (nuevo o viejo o null)
$vals = [];
foreach ($new as $k => $v) {
$vals[$k] = $v ?: ($old[$k] ?: null);
}
if ($rid > 0) {
$stmt = $conn->prepare("UPDATE ruletas SET
nombre=?, descripcion=?,
imagen_ruleta=?, imagen_puntero=?,
banner_1=?, banner_2=?, banner_3=?, banner_4=?,
background_image=?, fullscreen_icon=?
WHERE id=?");
$stmt->bind_param(
"ssssssssssi",
$nombre, $descripcion,
$vals['imagen_ruleta'], $vals['imagen_puntero'],
$vals['banner_1'], $vals['banner_2'], $vals['banner_3'], $vals['banner_4'],
$vals['background_image'], $vals['fullscreen_icon'],
$rid
);
$stmt->execute();
$msg = "Ruleta actualizada.";
} else {
$stmt = $conn->prepare("INSERT INTO ruletas
(nombre, descripcion, imagen_ruleta, imagen_puntero,
banner_1, banner_2, banner_3, banner_4,
background_image, fullscreen_icon)
VALUES (?,?,?,?,?,?,?,?,?,?)");
$stmt->bind_param(
"ssssssssss",
$nombre, $descripcion,
$vals['imagen_ruleta'], $vals['imagen_puntero'],
$vals['banner_1'], $vals['banner_2'], $vals['banner_3'], $vals['banner_4'],
$vals['background_image'], $vals['fullscreen_icon']
);
$stmt->execute();
$msg = "Ruleta creada.";
}
} catch (Throwable $e) {
$err = $e->getMessage();
}
}
}
// ---------- delete ----------
if ($action === 'delete' && $id > 0) {
$stmt = $conn->prepare("DELETE FROM ruletas WHERE id=?");
$stmt->bind_param("i", $id); $stmt->execute();
$msg = "Ruleta eliminada.";
}
// ---------- edit load + list ----------
$edit = null;
if ($action === 'edit' && $id > 0) { $edit = get_ruleta($conn, $id); }
$res = $conn->query("SELECT id, nombre, descripcion,
imagen_ruleta, imagen_puntero,
banner_1, banner_2, banner_3, banner_4,
background_image, fullscreen_icon, fecha_creacion
FROM ruletas ORDER BY id DESC");
$items = $res->fetch_all(MYSQLI_ASSOC);
?>