TicketCompany/controladores/crear-evento.php

96 lines
3.2 KiB
PHP

<?php
header("Content-Type: application/json");
require_once "conexion-bd.php";
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
echo json_encode(["mensaje" => "Método no permitido."]);
exit();
}
$artista = $conn->real_escape_string($_POST['artista']);
$fecha = $conn->real_escape_string($_POST['fecha']);
$lugar_id = intval($_POST['lugar_id']);
$precio = isset($_POST['precio']) ? floatval($_POST['precio']) : 0;
$descripcion = isset($_POST['descripcion']) ? $conn->real_escape_string($_POST['descripcion']) : "";
// Validar precio
if ($precio <= 0) {
echo json_encode(["mensaje" => "Error: El precio debe ser un número mayor a 0."]);
exit();
}
// Obtener capacidad del lugar
$sql_capacidad = "SELECT capacidad FROM lugares WHERE id = ?";
$stmt = $conn->prepare($sql_capacidad);
$stmt->bind_param("i", $lugar_id);
$stmt->execute();
$result = $stmt->get_result();
$lugar = $result->fetch_assoc();
if (!$lugar) {
echo json_encode(["mensaje" => "Error: El lugar seleccionado no existe."]);
exit();
}
$capacidad = $lugar['capacidad'];
// 🔹 Manejar subida del archivo (imagen)
$imagen_path = "";
if (isset($_FILES['imagen']) && $_FILES['imagen']['error'] === UPLOAD_ERR_OK) {
$imagen_nombre = basename($_FILES['imagen']['name']);
$imagen_extension = strtolower(pathinfo($imagen_nombre, PATHINFO_EXTENSION));
// Validar extensión permitida
$extensiones_permitidas = ['jpg', 'jpeg', 'png', 'gif'];
if (!in_array($imagen_extension, $extensiones_permitidas)) {
echo json_encode(["mensaje" => "Error: Formato de imagen no permitido."]);
exit();
}
// Carpeta destino para las imágenes subidas
$carpeta_destino = "../img/eventos/";
if (!is_dir($carpeta_destino)) {
mkdir($carpeta_destino, 0777, true);
}
// Crear nombre único para evitar conflictos
$nuevo_nombre = uniqid('evento_', true) . '.' . $imagen_extension;
$imagen_path = $carpeta_destino . $nuevo_nombre;
// Guardar archivo en servidor
if (!move_uploaded_file($_FILES['imagen']['tmp_name'], $imagen_path)) {
echo json_encode(["mensaje" => "Error al guardar la imagen."]);
exit();
}
// Guardar ruta relativa para acceder desde HTML
$imagen_path = "img/eventos/" . $nuevo_nombre;
}
// Insertar el evento incluyendo la imagen
$sql = "INSERT INTO conciertos (artista, fecha, lugar_id, precio, descripcion, imagen) VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ssidss", $artista, $fecha, $lugar_id, $precio, $descripcion, $imagen_path);
if ($stmt->execute()) {
$evento_id = $conn->insert_id;
// Generar asientos según capacidad
$asientos_insert = $conn->prepare("INSERT INTO asientos (lugar_id, numero_asiento) VALUES (?, ?)");
for ($i = 1; $i <= $capacidad; $i++) {
$fila = chr(65 + floor(($i - 1) / 10));
$numero_asiento = $fila . (($i % 10 == 0) ? 10 : $i % 10);
$asientos_insert->bind_param("is", $lugar_id, $numero_asiento);
$asientos_insert->execute();
}
echo json_encode(["mensaje" => "Evento creado exitosamente."]);
} else {
echo json_encode(["mensaje" => "Error al crear el evento: " . $conn->error]);
}
$stmt->close();
$conn->close();
?>