diff --git a/app/Controllers/EventController.php b/app/Controllers/EventController.php index 97add5809aa25ce62621231bc8b28a823e7af203..c15062c65080ee1e518796a0be09a9dcaf2f284d 100644 --- a/app/Controllers/EventController.php +++ b/app/Controllers/EventController.php @@ -1,9 +1,15 @@ - <?php // app/Controllers/EventController.php +ob_start(); require_once(__DIR__ . '/../Models/Event.php'); +if (!isset($_SESSION["user_id"])) { + // User is not authenticated; redirect to login page + header("Location: /app/Views/login/login.php"); + ob_end_flush(); +} + class EventController { private $eventModel; @@ -11,18 +17,18 @@ class EventController { $this->eventModel = new EventModel(); } - public function createEvent($event_name, $event_stock, $event_date, $details, $gambar, $event_location, $vid) { + public function createEvent($stock, $event_date, $event_name, $gambar, $event_location, $vid){ $eventModel = new EventModel(); - $eventModel->createEvent($event_name, $event_stock, $event_date, $details, $gambar, $event_location, $vid); + $eventModel->createEvent($stock, $event_date, $event_name, $gambar, $event_location, $vid); } // public function getEvent($eventId) { // return $this->eventModel->getEvent($eventId); // } - public function updateEvent($event_id, $event_name, $event_stock, $event_date, $details, $gambar, $event_location, $vid) { + public function updateEvent($eventId, $stock, $event_date, $event_name, $event_location, $gambar, $vid){ $eventModel = new EventModel(); - $eventModel->updateEvent($event_id, $event_name, $event_stock, $event_date, $details, $gambar, $event_location, $vid); + $eventModel->updateEvent($eventId, $stock, $event_date, $event_name, $event_location, $gambar, $vid); } public function deleteEvent($eventId) { @@ -32,16 +38,37 @@ class EventController { public function getAllEvents() { return $this->eventModel->getAllEvents(); } - - public function paginateEvents($page=1,$pagesize=10,$events) { - $maxpage = ceil(count($events)/$pagesize); + + public function paginateEvents($events, $page = 1, $pagesize = 10) { + $maxpage = ceil(count($events) / $pagesize); if ($page > $maxpage) { $page = $maxpage; } - $offset = $pagesize * ($page-1); + $offset = $pagesize * ($page - 1); $selectedEvents = array_slice($events, $offset, $pagesize); - + return $selectedEvents; } + + + public function searchEvents($searchQuery, $sortKey, $minStock = null) { + try { + return $this->eventModel->searchEvents($searchQuery, $sortKey, $minStock); + } catch (Exception $e) { + echo "Error searching events: " . $e->getMessage(); + return []; + } + } + + public function handleRequest() { + if (isset($_GET['action'])) { + if ($_GET['action'] === 'purchaseTicket') { + + } else { + // Handle other actions here, if needed + } + } + } + } ?> \ No newline at end of file diff --git a/app/Controllers/PembelianController.php b/app/Controllers/PembelianController.php index b83fa7b1e9d097b87d448e97ea7ef9e75e68a2b5..38421ab674065a34f2204a49d07d8a7b6f6dc694 100644 --- a/app/Controllers/PembelianController.php +++ b/app/Controllers/PembelianController.php @@ -1,12 +1,20 @@ <?php // app/controllers/pembelianController.php +ob_start(); // require_once 'Pembelian.php'; require_once(__DIR__ . '/../Models/Pembelian.php'); +if (!isset($_SESSION["user_id"])) { + // User is not authenticated; redirect to login page + header("Location: /app/Views/login/login.php"); + ob_end_flush(); +} + class PembelianController { private $pembelianModel; - + + public function __construct() { $this->pembelianModel = new PembelianModel(); } @@ -31,7 +39,7 @@ class PembelianController { return $this->pembelianModel->getAllPembelian(); } - public function paginateHistory($page=1,$pagesize=10,$pembelian) { + public function paginateHistory($pembelian,$page=1,$pagesize=10) { $maxpage = ceil(count($pembelian)/$pagesize); if ($page > $maxpage) { $page = $maxpage; @@ -41,5 +49,33 @@ class PembelianController { return $selectedHistory; } + + // Returns true if purchase succeeds + public function purchaseTicket($ticketId,$userId) { + // $purchases = $this->getAllPembelian(); + // foreach ($purchases as $purchase) : + // echo $purchase['pembelian_id'] . ': ' . $purchase['user_id'] . ', ' . $purchase['ticket_id'] . ', ' . $purchase['pembelian_created_time']."\n"; + // endforeach; + + $createdTime = date("Y-m-d H:i:s"); + $this->createPembelian($ticketId,$userId,$createdTime); + // $purchases = $this->getAllPembelian(); + // foreach ($purchases as $purchase) : + // echo $purchase['pembelian_id'] . ': ' . $purchase['user_id'] . ', ' . $purchase['ticket_id'] . ', ' . $purchase['pembelian_created_time']."\n"; + // endforeach; + } + + public function handleRequest() { + if (isset($_GET['purchaseAction'])) { + if ($_GET['purchaseAction'] === 'purchaseTicket') { + $ticketId = $_POST['ticketId']; + $userId = $_POST['userId']; + $this->purchaseTicket($ticketId,$userId); + } else { + // Handle other actions here, if needed + } + } + } + } ?> diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index b8e4e799195ffb6c596d7b42e446bd43d0e5fe82..4a36198c5b58cdaa7d602806c875caede5d715fd 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -1,9 +1,16 @@ <?php // app/controllers/ticketController.php +ob_start(); // require_once 'Ticket.php'; require_once(__DIR__ . '/../Models/Ticket.php'); +if (!isset($_SESSION["user_id"])) { + // User is not authenticated; redirect to login page + header("Location: /app/Views/login/login.php"); + ob_end_flush(); +} + class TicketController { private $ticketModel; @@ -26,5 +33,21 @@ class TicketController { public function deleteTicket($ticketId) { return $this->ticketModel->deleteTicket($ticketId); } + + public function previewTicket($ticketId) { + $ticket = $this->getTicket($ticketId); + + include(__DIR__ . '/../Views/pembelian/pembelian.php'); + } + + public function handleRequest() { + if (isset($_GET['action'])) { + if ($_GET['action'] === 'purchaseTicket') { + + } else { + // Handle other actions here, if needed + } + } + } } ?> diff --git a/app/Controllers/UserController.php b/app/Controllers/UserController.php index f644678939f1569675e8a337566a24bf47e46f34..5bfaee12a16a77392bb4f0260b85a47554a468dd 100644 --- a/app/Controllers/UserController.php +++ b/app/Controllers/UserController.php @@ -1,6 +1,6 @@ <?php // app/controllers/userController.php - +ob_start(); require_once(__DIR__ . '/../Models/User.php'); @@ -30,7 +30,7 @@ class UserController { public function getAllUsers() { return $this->userModel->getAllUsers(); } - + public function registerUser($name, $username, $email, $password, $isAdmin) { return $this->createUser($name, $username, $email, password_hash($password,PASSWORD_DEFAULT), $isAdmin); } @@ -38,6 +38,7 @@ class UserController { public function loginByEmail($email,$password) { $user = $this->userModel->getUserByEmail($email); if ($user !== false && password_verify($password, $user['user_hashedPass'])) { + session_start(); $_SESSION["user_id"] = $user['user_ID']; return "success"; } else { @@ -48,6 +49,7 @@ class UserController { public function loginByUsername($username,$password) { $user = $this->userModel->getUserByUsername($username); if ($user !== false && password_verify($password, $user['user_hashedPass'])) { + session_start(); $_SESSION["user_id"] = $user['user_ID']; return "success"; } else { @@ -65,5 +67,54 @@ class UserController { } } + public function handleRequest() { + if (isset($_POST['userAction'])) { + if ($_POST['userAction'] === 'login') { + unset($_POST['userAction']); + $emailOrUsername = $_POST['loginIdentifier']; + $password = $_POST['loginPassword']; + if (filter_var($emailOrUsername, FILTER_VALIDATE_EMAIL)){ + if ($this->loginByEmail($emailOrUsername, $password) === "success") { + header("Location:/../../../home.php"); + ob_end_flush(); + } else { + header("Location:Views/login/login.php"); + ob_end_flush(); + } + } else { + if ($this->loginByUsername($emailOrUsername,$password) === "success") { + header("Location:/../../../home.php"); + ob_end_flush(); + } else { + header("Location:Views/login/login.php"); + ob_end_flush(); + } + } + } elseif ($_POST['userAction'] === 'createUser') { + unset($_POST['userAction']); + $userName = $_POST['userName']; + $userUsername = $_POST['userUsername']; + $userEmail = $_POST['userEmail']; + $userPassword = $_POST['userPassword']; + $isAdmin = isset($_POST['isAdmin']) ? 1 : 0; + $success = $this->registerUser($userName,$userUsername,$userEmail,$userPassword,$isAdmin)['success']; + if($success){ + header("Location:Views/login/login.php"); + ob_end_flush(); + } else { + header("Location:Views/login/register.php"); + ob_end_flush(); + } + } elseif ($_POST['userAction'] === 'logout') { + echo "here"; + $this->logout(); + header("Location:Views/login/login.php"); + ob_end_flush(); + } else { + // Handle other actions here, if needed + } + } + } + } -?> +?> \ No newline at end of file diff --git a/app/Models/Event.php b/app/Models/Event.php index cebd4d87ae06613905bad1ffb85ed41a1818ffe8..cdfc2e1c9886d62b98451c50efe1465a12648055 100644 --- a/app/Models/Event.php +++ b/app/Models/Event.php @@ -5,7 +5,7 @@ require_once(__DIR__ . '/../../util.php'); class EventModel { - public function createEvent($event_name, $event_stock, $event_date, $details, $gambar, $event_location, $vid) { + public function createEvent($stock, $event_date, $event_name, $gambar, $event_location, $vid) { echo "createEvent method called<br>"; global $db; @@ -39,20 +39,20 @@ class EventModel { $vidFilePath = null; // Set to null if no file is uploaded } - $stmt = $db->prepare("INSERT INTO events (event_name, event_stock, event_date, event_details, gambar, event_location, vid) VALUES (?, ?, ?, ?, ?, ?, ?)"); + $stmt = $db->prepare("INSERT INTO events (event_stock, event_date, event_name, gambar, event_location, vid) VALUES (?, ?, ?, ?, ?, ?)"); - if ($stmt->execute([$event_name, $event_stock, $event_date, $details, $imageFilePath, $event_location, $vidFilePath])) { + if ($stmt->execute([$stock, $event_date, $event_name, $imageFilePath, $event_location, $vidFilePath])) { echo "Event created successfully"; } else { echo "Error creating event: " . print_r($stmt->errorInfo(), true); } } - public function updateEvent($event_id, $event_name, $event_stock, $event_date, $details, $gambar, $event_location, $vid) { + public function updateEvent($event_id, $event_stock, $event_date, $event_name, $event_location, $gambar, $vid) { global $db; $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 1); - echo "Updating Event with ID: $event_id, Stock: $event_stock, Event_Date: $event_date, Details: $details"; + echo "Updating Event with ID: $event_id, Stock: $event_stock, Date: $event_date, Name: $event_name, Location: $event_location"; if ($gambar !== null && isset($gambar['name']) && isset($gambar['tmp_name'])) { $imageFilePath = 'assets/images/' . $gambar['name']; @@ -91,7 +91,7 @@ class EventModel { // $sql = "UPDATE events SET event_name = '$event_name', event_stock = '$event_stock', event_date = '$event_date', event_details = '$details', event_location = '$event_location', vid = '$vid' WHERE event_id = $event_id"; // } - $sql = "UPDATE events SET event_name = '$event_name', event_stock = '$event_stock', event_date = '$event_date', event_details = '$details', gambar = '$imageFilePath', event_location = '$event_location', vid = '$vidFilePath' WHERE event_id = $event_id"; + $sql = "UPDATE events SET event_stock = '$event_stock', event_date = '$event_date', event_name = '$event_name', gambar = '$imageFilePath', event_location = '$event_location', vid = '$vidFilePath' WHERE event_id = $event_id"; $rowCount = $db->exec($sql); @@ -133,10 +133,59 @@ class EventModel { public function getAllEvents() { global $db; + $stmt = $db->prepare("SELECT * FROM events"); + $stmt->execute(); + return $stmt->fetchAll(PDO::FETCH_ASSOC); + } + + + public function searchEvents($searchQuery, $sortKey, $minStock) { + global $db; + + try { + $sql = "SELECT * FROM events WHERE 1"; // Start with a true condition + + // Add search condition + if (!empty($searchQuery)) { + $sql .= " AND (LOWER(event_name) LIKE :query OR LOWER(event_location) LIKE :query)"; + } + + // Add filter condition + if ($minStock !== null) { + $sql .= " AND event_stock >= :minStock"; + } + + // Add sort condition + if ($sortKey === 'name') { + $sql .= " ORDER BY event_name ASC"; + } elseif ($sortKey === 'location') { + $sql .= " ORDER BY event_location ASC"; + } + + $stmt = $db->prepare($sql); + + // Bind search query parameter + if (!empty($searchQuery)) { + $lowerSearchQuery = strtolower("%" . $searchQuery . "%"); + $stmt->bindParam(':query', $lowerSearchQuery, PDO::PARAM_STR); + } + + // Bind filter parameter + if ($minStock !== null) { + $stmt->bindParam(':minStock', $minStock, PDO::PARAM_INT); + } + + $stmt->execute(); - $stmt = $db->query("SELECT * FROM events"); return $stmt->fetchAll(PDO::FETCH_ASSOC); + } catch (PDOException $e) { + throw new Exception("Error searching events: " . $e->getMessage()); } +} + + + + } ?> diff --git a/app/Models/Pembelian.php b/app/Models/Pembelian.php index ca374427bb15f86069f658d1542d4bcf9074f868..7abc874b18263729b13ec59bd3d7fb1922797a20 100644 --- a/app/Models/Pembelian.php +++ b/app/Models/Pembelian.php @@ -9,9 +9,7 @@ class PembelianModel { global $db; $stmt = $db->prepare("INSERT INTO pembelian (ticket_id, user_id, pembelian_created_time) VALUES (?, ?, ?)"); - $stmt->execute([$ticketId, $userId, $createdTime]); - - return "Pembelian created successfully"; + return $stmt->execute([$ticketId, $userId, $createdTime]); } public function getPembelian($pembelianId) { diff --git a/app/Models/User.php b/app/Models/User.php index 189678fab36389ab260092117ed12144614a4dca..dc6079a4b7c10bfa084ac52765e656d8039128b0 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -7,20 +7,28 @@ require_once(__DIR__ . '/../../db/connect.php'); class UserModel { public function createUser($name, $username, $email, $hashedPass, $isAdmin) { global $db; + + $response = [ + 'success'=> true, + 'message'=> '' + ]; try { $stmt = $db->prepare("INSERT INTO users (user_name, username, user_email, user_hashedPass, isAdmin) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([$name, $username, $email, $hashedPass, $isAdmin]); - - return "User created successfully"; + $response['message'] = "User created successfully"; + return $response; } catch (PDOException $e) { + $response['success'] = false; // Check if the error code corresponds to a unique constraint violation. if ($e->getCode() === '23000') { // Handle the error as a duplicate entry. - return "Username or email already exists. Please choose a different one."; + $response['message'] = "Username or email already exists. Please choose a different one."; + return $response; } else { // Handle other database errors. - return "Database error: " . $e->getMessage(); + $response['message'] = "Database error: " . $e->getMessage(); + return $response; } } } diff --git a/app/View/login.php b/app/Views/login/login.php similarity index 70% rename from app/View/login.php rename to app/Views/login/login.php index 501ebe110f7c42a0438431b06b935a46e6921a78..6e6b60192a6cc771163e81ea233758d0e5557433 100644 --- a/app/View/login.php +++ b/app/Views/login/login.php @@ -5,16 +5,16 @@ <title>Login • TICKET KU</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <link rel="stylesheet" type="text/css" href="../../styles/auth.css"> + <link rel="stylesheet" type="text/css" href="../../../styles/auth.css"> </head> <body> <div class="login-container"> <h1>Login</h1> - <form id="loginForm" method="post" action="../../home.php"> + <form id="loginForm" method="post" action="../../router.php"> <!-- Aslinya email atau username bisa(?) --> - <label for="email">Email</label> - <input type="email" id="email" name="loginEmail" required> + <label for="email">Email or Username</label> + <input type="text" id="identifier" name="loginIdentifier" required> <label for="password">Password</label> <input type="password" id="password" name="loginPassword" required> diff --git a/app/View/register.php b/app/Views/login/register.php similarity index 93% rename from app/View/register.php rename to app/Views/login/register.php index ed6173b0f0440ad83dcf9799e89cff60c219bcd5..d6a5772363a1d4e830ebf3847582ccf5dc43884a 100644 --- a/app/View/register.php +++ b/app/Views/login/register.php @@ -5,13 +5,13 @@ <title>Register • TICKET KU</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <link rel="stylesheet" type="text/css" href="../../styles/auth.css"> + <link rel="stylesheet" type="text/css" href="../../../styles/auth.css"> </head> <body> <div class="register-container"> <h1>Register</h1> - <form id="registerForm" method="post" action="../../home.php"> + <form id="registerForm" method="post" action="../../router.php"> <label for="userName">Name</label> <input type="text" id="userName" name="userName" required> diff --git a/app/Views/pembelian/pembelian.php b/app/Views/pembelian/pembelian.php new file mode 100644 index 0000000000000000000000000000000000000000..6e41397fbdae5639a7efbb1491322c4a73efd906 --- /dev/null +++ b/app/Views/pembelian/pembelian.php @@ -0,0 +1,46 @@ +<<!-- app/Views/purchase.php --> + +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Purchase Ticket</title> + <!-- Include any CSS styles or external libraries here --> +</head> +<body> + <h1>Purchase Ticket</h1> + + <!-- Display the ticket details --> + <h2>Ticket Details</h2> + <p>Ticket ID: <?php echo $ticket['ticket_id']; ?></p> + <p>Ticket Name: <?php echo $ticket['ticket_name']; ?></p> + <p>Price: <?php echo $ticket['ticket_price']; ?></p> + + <!-- Purchase Form --> + <form id="purchaseForm" method="post" action="/app/router.php?purchaseAction=purchaseTicket"> + <input type="hidden" name="ticketId" value="<?php echo $ticket['ticket_id']; ?>"> + <input type="hidden" name="userId" value="<?php echo $_SESSION['user_id']; ?>"> + + <!-- Additional form fields or options can be added here --> + + <button type="button" id="confirmPurchaseBtn">Confirm Purchase</button> + </form> + + <!-- JavaScript code for the confirmation dialog --> + <script> + // Function to show the confirmation dialog + function showConfirmationDialog() { + if (confirm("Are you sure you want to purchase this ticket?")) { + // If the user confirms, submit the form + document.getElementById("purchaseForm").submit(); + } + } + + // Attach the confirmation dialog to the button click event + document.getElementById("confirmPurchaseBtn").addEventListener("click", showConfirmationDialog); + </script> + + <!-- Include any additional content or messages here --> +</body> +</html> diff --git a/app/router.php b/app/router.php new file mode 100644 index 0000000000000000000000000000000000000000..cb55957a8cad6d74fe5fcead911d78633fb708b1 --- /dev/null +++ b/app/router.php @@ -0,0 +1,24 @@ +<?php + +require_once './Controllers/PembelianController.php'; +require_once './Controllers/TicketController.php'; +require_once './Controllers/UserController.php'; +require_once './Controllers/EventController.php'; + +$eventController = new EventController(); +$pembelianController = new PembelianController(); +$ticketController = new TicketController(); +$userController = new UserController(); + +if ($_SERVER["REQUEST_METHOD"] == "POST") { + if (isset($_POST["eventAction"])) { + $eventController->handleRequest(); + } elseif (isset($_POST["ticketAction"])) { + $ticketController->handleRequest(); + } elseif (isset($_POST["userAction"])) { + $userController->handleRequest(); + } elseif (isset($_GET["purchaseAction"])) { + $pembelianController->handleRequest(); + } +} +?> \ No newline at end of file diff --git a/db/data.php b/db/data.php index fb6e8e75334a2449e20f2f8118b5615dbfba081a..910413672b6c7765670ddfe98e9069501d7fc16d 100644 --- a/db/data.php +++ b/db/data.php @@ -5,12 +5,12 @@ if (isset($db)) { try { $sqlEvent = <<<EOF - INSERT INTO events (event_name, event_stock, event_date, event_details, gambar, event_location, vid) VALUES - ('Music Concert', 100, '2023-09-30 10:00:00', 'Music Concert', 'assets/images/1.jpg', 'Location1', 'assets/videos/video.mp4'), - ('Art Exhibition', 50, '2023-10-05 15:30:00', 'Art Exhibition', 'assets/images/2.png', 'Location2', 'assets/videos/video.mp4'), - ('Sports Tournament', 200, '2023-11-12 18:45:00', 'Sports Tournament', 'assets/images/3.jpg', 'Location3', 'assets/videos/video.mp4'), - ('Comedy Show', 75, '2023-12-03 20:00:00', 'Comedy Show', 'assets/images/4.jpg', 'Location4', 'assets/videos/video.mp4'), - ('Tech Conference', 120, '2024-01-18 14:15:00', 'Tech Conference', 'assets/images/5.jpg', 'Location5', 'assets/videos/video.mp4'); + INSERT INTO events (event_stock, event_date, event_name, gambar, event_location, vid) VALUES + (100, '2023-09-30 10:00:00', 'Music Concert', 'assets/images/1.jpg', 'jakarta', 'assets/videos/video.mp4'), + (50, '2023-10-05 15:30:00', 'Art Exhibition', 'assets/images/2.png', 'prancis', 'assets/videos/video.mp4'), + (200, '2023-11-12 18:45:00', 'Sports Tournament', 'assets/images/3.jpg', 'italy', 'assets/videos/video.mp4'), + (75, '2023-12-03 20:00:00', 'Comedy Show', 'assets/images/4.jpg', 'jakarta', 'assets/videos/video.mp4'), + (120, '2024-01-18 14:15:00', 'Tech Conference', 'assets/images/5.jpg', 'ITB', 'assets/videos/video.mp4'); EOF; $sqlTicket = <<<EOF diff --git a/db/init.sql b/db/init.sql index 1c99403f8af58801494a16529852e9c76a65bc90..e945f7a31a4445c6fa12556ef53f9e6650bf8ef9 100644 --- a/db/init.sql +++ b/db/init.sql @@ -4,10 +4,9 @@ USE tubes1_WBD; CREATE TABLE IF NOT EXISTS events ( event_id INT AUTO_INCREMENT PRIMARY KEY, - event_name CHAR(255), event_stock INT, event_date DATETIME, - event_details CHAR(255), + event_name CHAR(255), gambar VARCHAR(255), event_location CHAR(255), vid VARCHAR(255) diff --git a/home.php b/home.php index ba33bbc90daf09a9e6561d866c9ad05c638e85f3..1525b333d14d8070bd7b17b482ef5d6ca441cdae 100644 --- a/home.php +++ b/home.php @@ -19,20 +19,19 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { if (isset($_POST['action'])) { if ($_POST['action'] === 'createEvent') { - $eventName = $_POST['event_name']; $eventStock = $_POST['stock']; $eventDate = $_POST['event_date']; - $eventDetails = $_POST['details']; + $eventName = $_POST['name']; + $eventLocation = $_POST['location']; // $uploadedFilePath = $_POST['gambar']; - $eventLocation = $_POST['event_location']; // $ = $_POST['vid']; $imageFilePath = isset($_FILES['gambar']) && $_FILES['gambar']['error'] === 0 ? $_FILES['gambar'] : null; // Check if 'gambar' is set in the files array $vidFilePath = isset($_FILES['vid']) && $_FILES['vid']['error'] === 0 ? $_FILES['vid'] : null; // Check if 'vid' is set in the files array // Check if the values are not empty - if (!empty($eventName) && !empty($eventStock) && !empty($eventDate) && !empty($eventDetails) - && !empty($eventLocation) && $imageFilePath !== null && $vidFilePath !== null) { + if (!empty($eventName) && !empty($eventStock) && !empty($eventDate) && !empty($eventLocation) + && $imageFilePath !== null && $vidFilePath !== null) { var_dump($_FILES); // Output for debugging purposes // // Check for file upload @@ -46,17 +45,16 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { // move_uploaded_file($uploadedFile['tmp_name'], $uploadedFilePath); // } - $eventController->createEvent($eventName, $eventStock, $eventDate, $eventDetails, $imageFilePath, $eventLocation, $vidFilePath); + $eventController->createEvent($eventStock, $eventDate, $eventName, $imageFilePath, $eventLocation, $vidFilePath); } else { echo "Please fill in all the fields for creating an event."; } } elseif ($_POST['action'] === 'updateEvent') { $eventIdUpdate = $_POST['eventIdUpdate']; - $eventName = $_POST['event_name']; $eventStock = $_POST['eventStock']; $eventDate = $_POST['event_date']; - $eventDetails = $_POST['eventDetails']; - $eventLocation = $_POST['event_location']; + $eventName = $_POST['eventName']; + $eventLocation = $_POST['eventLocation']; $imageFilePath = isset($_FILES['gambar']) && $_FILES['gambar']['error'] === 0 ? $_FILES['gambar'] : null; // Check if 'gambar' is set in the files array $vidFilePath = isset($_FILES['vid']) && $_FILES['vid']['error'] === 0 ? $_FILES['vid'] : null; // Check if 'vid' is set in the files array @@ -75,7 +73,7 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { // move_uploaded_file($uploadedFile['tmp_name'], $uploadedFilePath); // } - $eventController->updateEvent($eventIdUpdate, $eventName, $eventStock, $eventDate, $eventDetails, $imageFilePath, $eventLocation, $vidFilePath); + $eventController->updateEvent($eventIdUpdate, $eventStock, $eventDate, $eventName, $imageFilePath, $eventLocation, $vidFilePath); } else { echo "Please fill in all the fields for updating an event."; } @@ -115,8 +113,8 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { $loginEmail = $_POST['loginEmail']; $loginPassword = $_POST['loginPassword']; echo $userController->loginByEmail($loginEmail,$loginPassword); - } elseif ($_POST['userAction'] === 'logout') { - echo $userController->logout(); + // } elseif ($_POST['userAction'] === 'logout') { + // echo $userController->logout(); } } } @@ -152,7 +150,7 @@ $users = $userController->getAllUsers(); <li><a href="#">History</a></li> <!-- Logout Button --> <li> - <form method="post" action="home.php"> + <form method="post" action="app/router.php"> <button type="submit" name="userAction" value="logout">Logout</button> </form> </li> @@ -168,10 +166,10 @@ $users = $userController->getAllUsers(); <!-- Create Event --> <form method="post" action="home.php" enctype="multipart/form-data"> <label>Create Event:</label> - <input type="text" name="event_name" placeholder="Event Name"> <input type="text" name="stock" placeholder="Stock"> <input type="datetime-local" name="event_date"> - <input type="text" name="details" placeholder="Details"> + <input type="text" name="name" placeholder="Name"> + <input type="text" name="location" placeholder="Location"> <!-- Drag-and-drop area for image upload --> <div id="drop-area-create"> @@ -179,7 +177,6 @@ $users = $userController->getAllUsers(); <input type="file" id="file-input-create" name="gambar" accept="image/*"> </div> - <input type="text" name="event_location" placeholder="Event Location"> <!-- <input type="text" name="vid" placeholder="Video URL"> --> <div id="drop-area-create"> <p>Drag and drop an video file here or click to select one.</p> @@ -193,10 +190,10 @@ $users = $userController->getAllUsers(); <form method="post" action="home.php" enctype="multipart/form-data"> <label>Update Event:</label> <input type="text" name="eventIdUpdate" placeholder="Event ID"> - <input type="text" name="event_name" placeholder="Event Name"> <input type="text" name="eventStock" placeholder="Stock"> - <input type="datetime-local" name="event_date"> - <input type="text" name="eventDetails" placeholder="Details"> + <input type="datetime-local" name="event_dateUpdate"> + <input type="text" name="eventName" placeholder="Name"> + <input type="text" name="eventLocation" placeholder="Location"> <!-- Drag-and-drop area for image upload --> <div id="drop-area-update"> @@ -204,7 +201,6 @@ $users = $userController->getAllUsers(); <input type="file" id="file-input-update" name="gambar" accept="image/*"> </div> - <input type="text" name="event_location" placeholder="Event Location"> <!-- <input type="text" name="vid" placeholder="Video URL"> --> <div id="drop-area-update"> <p>Drag and drop an video file here or click to select one.</p> diff --git a/index.php b/index.php index 9da7d6f4676f7b6985eb7a8e264b101653d1c278..be535ae63bde661e79da27d2426504dec13974f1 100644 --- a/index.php +++ b/index.php @@ -1,7 +1,17 @@ <?php session_start(); include './db/connect.php'; - // include './db/init.php'; + require_once './app/Controllers/EventController.php'; + + $eventController = new EventController(); + + // Handle search query + $searchQuery = isset($_GET['search']) ? $_GET['search'] : ''; + $sortKey = isset($_GET['sort']) ? $_GET['sort'] : 'name'; + $minStock = isset($_GET['min_stock']) ? $_GET['min_stock'] : null; + + // Get search results or all events + $searchResults = $eventController->searchEvents($searchQuery, $sortKey, $minStock); ?> <!DOCTYPE html> @@ -51,35 +61,91 @@ <div class="events"> <h2>All Events</h2> <ul> - <?php - require_once './app/Controllers/EventController.php'; - $eventController = new EventController(); - // Get all events - $allEvents = $eventController->getAllEvents(); - - // Loop through events and display details - foreach ($allEvents as $event) { + <?php + require_once './app/Controllers/EventController.php'; + $eventController = new EventController(); + $allEvents = $eventController->getAllEvents(); + + foreach ($allEvents as $event) { + echo "<li>"; + echo "<strong>Event ID:</strong> " . $event['event_id'] . "<br>"; + echo "<strong>Stock:</strong> " . $event['event_stock'] . "<br>"; + echo "<strong>Created Time:</strong> " . $event['event_date'] . "<br>"; + echo "<strong>Name:</strong> " . $event['event_name'] . "<br>"; + echo "<strong>Image:</strong> <img src='" . $event['gambar'] . "' alt='Event Image' width='100'><br>"; + echo "<strong>Location:</strong> " . $event['event_location'] . "<br>"; + echo "<strong>Video:</strong> <video src='" . $event['vid'] . "' controls width='150'></video><br>"; + echo "</li>"; + } + + include './db/init.php'; + ?> + + </ul> + </div> + <!-- Search Bar with Filter --> + <div class="search-bar"> + <form method="get" action="index.php"> + <input type="text" name="search" placeholder="Search events..." value="<?= htmlspecialchars($searchQuery) ?>"> + <?php if (!empty($searchQuery) || !empty($minStock) || !empty($sortKey)) : ?> + <select name="sort"> + <option value="" <?= empty($sortKey) ? 'selected' : '' ?>>No Sorting</option> + <option value="name" <?= $sortKey === 'name' ? 'selected' : '' ?>>Sort by Name</option> + <option value="location" <?= $sortKey === 'location' ? 'selected' : '' ?>>Sort by Location</option> + </select> + <?php else : ?> + <select name="sort"> + <option value="" selected>No Sorting</option> + <option value="name">Sort by Name</option> + <option value="location">Sort by Location</option> + </select> + <?php endif; ?> + <!-- Change input type to "text" for minimum stock --> + <input type="text" name="min_stock" placeholder="Min Stock" value="<?= htmlspecialchars($minStock) ?>"> + <button type="submit" id="search-button">Search</button> + </form> + </div> + + <!-- Display Search Results or All Events --> + <div class="events"> + <h2><?= !empty($searchQuery) || !empty($minStock) ? 'Search Results' : 'All Events' ?></h2> + <ul> + <?php + foreach ($searchResults as $event) { echo "<li>"; echo "<strong>Event ID:</strong> " . $event['event_id'] . "<br>"; - echo "<strong>Event Name:</strong> " . ($event['event_name'] ?? 'N/A') . "<br>"; echo "<strong>Stock:</strong> " . $event['event_stock'] . "<br>"; - echo "<strong>Date:</strong> " . $event['event_date'] . "<br>"; - echo "<strong>Details:</strong> " . $event['event_details'] . "<br>"; + echo "<strong>Created Time:</strong> " . $event['event_date'] . "<br>"; + echo "<strong>Name:</strong> " . $event['event_name'] . "<br>"; echo "<strong>Image:</strong> <img src='" . $event['gambar'] . "' alt='Event Image' width='100'><br>"; - echo "<strong>Location:</strong> " . ($event['event_location'] ?? 'N/A') . "<br>"; - echo "<strong>Video:</strong> " . ($event['vid'] ? "<video src='" . $event['vid'] . "' controls width='150'></video>" : 'N/A') . "<br>"; + echo "<strong>Location:</strong> " . $event['event_location'] . "<br>"; echo "</li>"; } - - include './db/init.php'; ?> - </ul> </div> <div class="footer"> © 2023 Ticket Ku. All rights reserved. </div> </div> + + <script> + // disable search button temporarily (DEBOUNCE) + function disableSearchButton() { + const searchButton = document.getElementById("search-button"); + searchButton.disabled = true; + + setTimeout(() => { + searchButton.disabled = false; + }, 1200); // 0.8s delay + } + + document.querySelector(".search-bar form").addEventListener("submit", function (e) { + e.preventDefault(); + disableSearchButton(); + }); + </script> + </body> </html>