diff --git a/app/Controllers/EventController.php b/app/Controllers/EventController.php index 7a1f24d2f7a4ab316cc53bc3e26465e6114c8e24..7e43171b3943362878240cbdc32a7f16ea86d06c 100644 --- a/app/Controllers/EventController.php +++ b/app/Controllers/EventController.php @@ -11,18 +11,18 @@ class EventController { $this->eventModel = new EventModel(); } - public function createEvent($stock, $createdTime, $details, $gambar) { + public function createEvent($stock, $event_date, $event_name, $gambar, $event_location){ $eventModel = new EventModel(); - $eventModel->createEvent($stock, $createdTime, $details, $gambar); + $eventModel->createEvent($stock, $event_date, $event_name, $gambar, $event_location); } public function getEvent($eventId) { return $this->eventModel->getEvent($eventId); } - public function updateEvent($eventId, $stock, $createdTime, $details, $gambar) { + public function updateEvent($eventId, $stock, $event_date, $event_name, $event_location, $gambar = null){ $eventModel = new EventModel(); - $eventModel->updateEvent($eventId, $stock, $createdTime, $details, $gambar); + $eventModel->updateEvent($eventId, $stock, $event_date, $event_name, $gambar); } public function deleteEvent($eventId) { @@ -32,16 +32,27 @@ class EventController { public function getAllEvents() { return $this->eventModel->getAllEvents(); } - - public function paginateEvents($events,$page=1,$pagesize=10) { - $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 []; + } + } + } ?> \ No newline at end of file diff --git a/app/Models/Event.php b/app/Models/Event.php index 58c634f635b183f70cddf4dcb86589d65a8822ad..1c3dd531b1064ce5dc3814b5dbe2cdccf81615b5 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($stock, $createdTime, $details, $gambar) { + public function createEvent($stock, $event_date, $event_name, $gambar, $event_location) { echo "createEvent method called<br>"; global $db; @@ -26,9 +26,9 @@ class EventModel { $uploadedFilePath = null; // Set to null if no file is uploaded } - $stmt = $db->prepare("INSERT INTO events (event_stock, event_created_time, event_details, gambar) VALUES (?, ?, ?, ?)"); + $stmt = $db->prepare("INSERT INTO events (event_stock, event_date, event_name, gambar, event_location) VALUES (?, ?, ?, ?)"); - if ($stmt->execute([$stock, $createdTime, $details, $uploadedFilePath])) { + if ($stmt->execute([$stock, $event_date, $event_name, $uploadedFilePath, $event_location])) { echo "Event created successfully"; } else { echo "Error creating event: " . print_r($stmt->errorInfo(), true); @@ -36,17 +36,17 @@ class EventModel { } - public function updateEvent($eventId, $stock, $createdTime, $details, $gambar = null) { + public function updateEvent($eventId, $stock, $event_date, $event_name, $event_location, $gambar = null) { global $db; $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 1); - echo "Updating Event with ID: $eventId, Stock: $stock, Created Time: $createdTime, Details: $details"; + echo "Updating Event with ID: $eventId, Stock: $stock, Date: $event_date, Name: $event_name, Location: $event_location"; // Check whether a new image is provided if ($gambar !== null) { - $sql = "UPDATE events SET event_stock = '$stock', event_created_time = '$createdTime', event_details = '$details', gambar = '$gambar' WHERE event_id = $eventId"; + $sql = "UPDATE events SET event_stock = '$stock', event_date = '$event_date', event_name = '$event_name', gambar = '$gambar', event_location = '$event_location' WHERE event_id = $eventId"; } else { - $sql = "UPDATE events SET event_stock = '$stock', event_created_time = '$createdTime', event_details = '$details' WHERE event_id = $eventId"; + $sql = "UPDATE events SET event_stock = '$stock', event_date = '$event_date', event_name = '$event_name', event_location = '$event_location' WHERE event_id = $eventId"; } $rowCount = $db->exec($sql); @@ -88,10 +88,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/db/data.php b/db/data.php index f53d8c0b0ca76a06c2870972d57fd9d4c4b10b3e..7f614a096154588f7d8cd81d424146b6480dba3d 100644 --- a/db/data.php +++ b/db/data.php @@ -5,12 +5,12 @@ if (isset($db)) { try { $sqlEvent = <<<EOF - INSERT INTO events (event_stock, event_created_time, event_details, gambar) VALUES - (100, '2023-09-30 10:00:00', 'Music Concert', 'assets/1.jpg'), - (50, '2023-10-05 15:30:00', 'Art Exhibition', 'assets/2.png'), - (200, '2023-11-12 18:45:00', 'Sports Tournament', 'assets/3.jpg'), - (75, '2023-12-03 20:00:00', 'Comedy Show', 'assets/4.jpg'), - (120, '2024-01-18 14:15:00', 'Tech Conference', 'assets/5.jpg'); + INSERT INTO events (event_stock, event_date, event_name, gambar, event_location) VALUES + (100, '2023-09-30 10:00:00', 'Music Concert', 'assets/1.jpg', 'jakarta'), + (50, '2023-10-05 15:30:00', 'Art Exhibition', 'assets/2.png', 'prancis'), + (200, '2023-11-12 18:45:00', 'Sports Tournament', 'assets/3.jpg', 'italy'), + (75, '2023-12-03 20:00:00', 'Comedy Show', 'assets/4.jpg', 'jakarta'), + (120, '2024-01-18 14:15:00', 'Tech Conference', 'assets/5.jpg', 'ITB'); EOF; $sqlTicket = <<<EOF diff --git a/db/init.sql b/db/init.sql index d009cd96e21e3ee94a27815b4742247ee2461dd9..77e4e1d75c33c0b704ae026747b0a1e6715bd0c7 100644 --- a/db/init.sql +++ b/db/init.sql @@ -5,9 +5,10 @@ USE tubes1_WBD; CREATE TABLE IF NOT EXISTS events ( event_id INT AUTO_INCREMENT PRIMARY KEY, event_stock INT, - event_created_time DATETIME, - event_details CHAR(255), - gambar VARCHAR(255) + event_date DATETIME, + event_name CHAR(255), + gambar VARCHAR(255), + event_location CHAR(255) ); CREATE TABLE IF NOT EXISTS tickets ( diff --git a/home.php b/home.php index f6a7bdd2312388a6ace6ea7b4af552ace2b16aa5..a043c9fe94529396b0464fc5f9e5a4eb4f6809a5 100644 --- a/home.php +++ b/home.php @@ -20,12 +20,13 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { if (isset($_POST['action'])) { if ($_POST['action'] === 'createEvent') { $eventStock = $_POST['stock']; - $eventCreatedTime = $_POST['createdTime']; - $eventDetails = $_POST['details']; + $eventDate = $_POST['event_date']; + $eventName = $_POST['name']; + $eventLocation = $_POST['location']; // $uploadedFilePath = $_POST['gambar']; // Check if the values are not empty - if (!empty($eventStock) && !empty($eventCreatedTime) && !empty($eventDetails)) { + if (!empty($eventStock) && !empty($eventDate) && !empty($eventName) && !empty($eventLocation)) { var_dump($_FILES); $uploadedFilePath = isset($_FILES['gambar']) && $_FILES['gambar']['error'] === 0 ? $_FILES['gambar'] : null; // Check if 'gambar' is set in the files array @@ -40,19 +41,20 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { // move_uploaded_file($uploadedFile['tmp_name'], $uploadedFilePath); // } - $eventController->createEvent($eventStock, $eventCreatedTime, $eventDetails, $uploadedFilePath); + $eventController->createEvent($eventStock, $eventDate, $eventName, $uploadedFilePath, $eventLocation); } else { echo "Please fill in all the fields for creating an event."; } } elseif ($_POST['action'] === 'updateEvent') { $eventIdUpdate = $_POST['eventIdUpdate']; $eventStock = $_POST['eventStock']; - $eventCreatedTime = $_POST['eventCreatedTime']; - $eventDetails = $_POST['eventDetails']; + $eventDate = $_POST['event_date']; + $eventName = $_POST['eventName']; + $eventLocation = $_POST['eventLocation']; var_dump($_FILES); // $uploadedFilePath = $_POST['uploadedFilePath']; // Check if the values are not empty - if (!empty($eventIdUpdate) && !empty($eventStock) && !empty($eventCreatedTime) && !empty($eventDetails)) { + if (!empty($eventIdUpdate) && !empty($eventStock) && !empty($eventDate) && !empty($eventName) && !empty($eventLocation)) { $uploadedFilePath = isset($_FILES['gambar']) ? $_FILES['gambar'] : null; // Check if 'gambar' is set in the files array $uploadedFile = isset($_FILES['gambar']) ? $_FILES['gambar'] : null; @@ -63,7 +65,7 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { move_uploaded_file($uploadedFile['tmp_name'], $uploadedFilePath); } - $eventController->updateEvent($eventIdUpdate, $eventStock, $eventCreatedTime, $eventDetails, $uploadedFilePath); + $eventController->updateEvent($eventIdUpdate, $eventStock, $eventDate, $eventName, $uploadedFilePath, $eventLocation); } else { echo "Please fill in all the fields for updating an event."; } @@ -156,8 +158,9 @@ $users = $userController->getAllUsers(); <form method="post" action="home.php" enctype="multipart/form-data"> <label>Create Event:</label> <input type="text" name="stock" placeholder="Stock"> - <input type="datetime-local" name="createdTime"> - <input type="text" name="details" placeholder="Details"> + <input type="datetime-local" name="event_date"> + <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"> @@ -173,8 +176,9 @@ $users = $userController->getAllUsers(); <label>Update Event:</label> <input type="text" name="eventIdUpdate" placeholder="Event ID"> <input type="text" name="eventStock" placeholder="Stock"> - <input type="datetime-local" name="eventCreatedTime"> - <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"> diff --git a/index.php b/index.php index 526fd204b4e603f264f56e7cafb79eeca4162490..87b639410efd437b474569c3da4c7291a374d520 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> @@ -54,17 +64,16 @@ <?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) { 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_created_time'] . "<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'] . "<br>"; echo "</li>"; } @@ -72,6 +81,47 @@ ?> </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">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>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 "</li>"; + } + ?> + </ul> + </div> <div class="footer"> © 2023 Ticket Ku. All rights reserved. </div>