= u.start_tijd AND TIME(?) < u.eind_tijd AND u.start_tijd < u.eind_tijd ) OR ( -- CASE 2: Show van GISTEREN die na middernacht EINDIGT (bijv. 23:00 - 02:00) u.dag_van_de_week = ? AND u.eind_tijd < u.start_tijd -- Dit is het kenmerk van een 'overnacht' show AND TIME(?) < u.eind_tijd -- De tijd is nu in de vroege ochtend, maar nog voor de eindtijd. ) LIMIT 1"; // Voorbereiden van de statement if ($stmt = $conn->prepare($sql)) { // Bind parameters: (dag nu), (tijd), (tijd), (dag gisteren), (tijd) $stmt->bind_param("sssss", $db_day, $current_time, $current_time, $db_yesterday, $current_time); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $show_data = $result->fetch_assoc(); $stmt->close(); mysqli_close($conn); return $show_data; } $stmt->close(); } mysqli_close($conn); return null; } /** * NIEUW: Haalt alleen de titel op van de uitzending die nu draait. * Wordt gebruikt voor snelle checks in de frontend, zoals voor de Request Widget. * @return string|null De showtitel (bijv. 'NON-STOP MUZIEK') of NULL. */ function getCurrentShowTitle() { // Roept de bestaande en correct werkende functie aan $current_show = getCurrentShow(); if ($current_show) { return $current_show['show_titel']; } return null; } /** * Haalt alle uitzendingen voor de komende 7 dagen op. * @return array Een array met alle shows, gesorteerd op dag en tijd. */ function getWeekSchedule() { $conn = dbConnect(); $sql = " SELECT -- ⭐️ TOEGEVOEGD: Show ID is cruciaal voor de link s.show_id, -- ⭐️ TOEGEVOEGD: DJ ID is beter voor DJ detail link d.dj_id, u.dag_van_de_week, u.start_tijd, u.eind_tijd, s.titel AS show_titel, d.naam AS dj_naam, d.foto_bestand FROM uitzendingen u JOIN shows s ON u.show_fk = s.show_id JOIN djs d ON u.dj_fk = d.dj_id ORDER BY u.dag_van_de_week ASC, u.start_tijd ASC"; // ... enz. $result = mysqli_query($conn, $sql); $schedule = []; if ($result) { while ($row = mysqli_fetch_assoc($result)) { $schedule[] = $row; } } mysqli_close($conn); return $schedule; } // -------------------------------------------------------------------------------- // 3. FUNCTIES VOOR DJ BEHEER (CRUD) // -------------------------------------------------------------------------------- /** * Haalt alle DJ's op voor weergave in het Admin Panel en op de website. * @return array Een array met alle DJ-data. */ function getAllDjs() { $conn = dbConnect(); $sql = "SELECT dj_id, naam, foto_bestand FROM djs ORDER BY naam ASC"; $result = mysqli_query($conn, $sql); $djs = []; if ($result) { while ($row = mysqli_fetch_assoc($result)) { $djs[] = $row; } } mysqli_close($conn); return $djs; } /** * Haalt één DJ op basis van ID op. * @param int $dj_id De ID van de DJ. * @return array|null De DJ data, of NULL. */ function getDjById($dj_id) { $conn = dbConnect(); $sql = "SELECT * FROM djs WHERE dj_id = ?"; if ($stmt = $conn->prepare($sql)) { $stmt->bind_param("i", $dj_id); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows === 1) { $data = $result->fetch_assoc(); $stmt->close(); mysqli_close($conn); return $data; } $stmt->close(); } mysqli_close($conn); return null; } /** * Slaat een nieuwe of bijgewerkte DJ op in de database. * @param array $data Associatieve array met DJ-gegevens. * @param int|null $dj_id ID van de DJ (NULL voor nieuw). * @return bool True bij succes, False bij falen. */ function saveDj($data, $dj_id = null) { $conn = dbConnect(); $naam = $data['naam']; $bio = $data['bio']; $foto_bestand = $data['foto_bestand'] ?? null; $social_links = $data['social_links'] ?? null; if ($dj_id) { // UPDATE bestaande DJ $sql = "UPDATE djs SET naam = ?, bio = ?, foto_bestand = ?, social_links = ? WHERE dj_id = ?"; if ($stmt = $conn->prepare($sql)) { $stmt->bind_param("ssssi", $naam, $bio, $foto_bestand, $social_links, $dj_id); $success = $stmt->execute(); $stmt->close(); mysqli_close($conn); return $success; } } else { // INSERT nieuwe DJ $sql = "INSERT INTO djs (naam, bio, foto_bestand, social_links) VALUES (?, ?, ?, ?)"; if ($stmt = $conn->prepare($sql)) { $stmt->bind_param("ssss", $naam, $bio, $foto_bestand, $social_links); $success = $stmt->execute(); $stmt->close(); mysqli_close($conn); return $success; } } mysqli_close($conn); return false; } /** * Verwijdert een DJ. * @param int $dj_id ID van de DJ. * @return bool True bij succes, False bij falen. */ function deleteDj($dj_id) { $conn = dbConnect(); $sql = "DELETE FROM djs WHERE dj_id = ?"; if ($stmt = $conn->prepare($sql)) { $stmt->bind_param("i", $dj_id); $success = $stmt->execute(); $stmt->close(); mysqli_close($conn); return $success; } mysqli_close($conn); return false; } /** * Haalt de volledige data voor een DJ op, inclusief al hun shows. * @param int $dj_id De ID van de DJ. * @return array|null De DJ data met een 'shows' array, of NULL. */ function getDjDetailsAndSchedule($dj_id) { $conn = dbConnect(); // 1. Haal de basis DJ info op $dj_data = getDjById($dj_id); if (!$dj_data) { mysqli_close($conn); return null; } // 2. Haal alle shows op die aan deze DJ gekoppeld zijn $sql_shows = " SELECT u.dag_van_de_week, u.start_tijd, u.eind_tijd, s.show_id, s.titel AS show_titel, s.omschrijving, s.genre FROM uitzendingen u JOIN shows s ON u.show_fk = s.show_id WHERE u.dj_fk = ? ORDER BY u.dag_van_de_week ASC, u.start_tijd ASC"; $shows = []; if ($stmt_shows = $conn->prepare($sql_shows)) { $stmt_shows->bind_param("i", $dj_id); $stmt_shows->execute(); $result_shows = $stmt_shows->get_result(); while ($row = $result_shows->fetch_assoc()) { $shows[] = $row; } $stmt_shows->close(); } mysqli_close($conn); // Voeg de shows toe aan de DJ data $dj_data['shows'] = $shows; return $dj_data; } // -------------------------------------------------------------------------------- // 4. FUNCTIES VOOR SHOWS/PROGRAMMA BEHEER (CRUD) // -------------------------------------------------------------------------------- /** * Haalt alle shows op. * @return array Een array met alle show-data. */ function getAllShows() { $conn = dbConnect(); $sql = "SELECT show_id, titel, genre FROM shows ORDER BY titel ASC"; $result = mysqli_query($conn, $sql); $shows = []; if ($result) { while ($row = mysqli_fetch_assoc($result)) { $shows[] = $row; } } mysqli_close($conn); return $shows; } /** * Haalt één show op basis van ID op. * @param int $show_id De ID van de show. * @return array|null De show data, of NULL. */ function getShowById($show_id) { $conn = dbConnect(); $sql = "SELECT * FROM shows WHERE show_id = ?"; if ($stmt = $conn->prepare($sql)) { $stmt->bind_param("i", $show_id); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows === 1) { $data = $result->fetch_assoc(); $stmt->close(); mysqli_close($conn); return $data; } $stmt->close(); } mysqli_close($conn); return null; } /** * Slaat een nieuwe of bijgewerkte show op in de database. * @param array $data Associatieve array met show-gegevens. * @param int|null $show_id ID van de show (NULL voor nieuw). * @return bool True bij succes, False bij falen. */ function saveShow($data, $show_id = null) { $conn = dbConnect(); $titel = $data['titel']; $omschrijving = $data['omschrijving']; $genre = $data['genre']; if ($show_id) { // UPDATE bestaande show $sql = "UPDATE shows SET titel = ?, omschrijving = ?, genre = ? WHERE show_id = ?"; if ($stmt = $conn->prepare($sql)) { $stmt->bind_param("sssi", $titel, $omschrijving, $genre, $show_id); $success = $stmt->execute(); $stmt->close(); mysqli_close($conn); return $success; } } else { // INSERT nieuwe show $sql = "INSERT INTO shows (titel, omschrijving, genre) VALUES (?, ?, ?)"; if ($stmt = $conn->prepare($sql)) { $stmt->bind_param("sss", $titel, $omschrijving, $genre); $success = $stmt->execute(); $stmt->close(); mysqli_close($conn); return $success; } } mysqli_close($conn); return false; } /** * Verwijdert een show. * @param int $show_id ID van de show. * @return bool True bij succes, False bij falen. */ function deleteShow($show_id) { $conn = dbConnect(); $sql = "DELETE FROM shows WHERE show_id = ?"; if ($stmt = $conn->prepare($sql)) { $stmt->bind_param("i", $show_id); $success = $stmt->execute(); $stmt->close(); mysqli_close($conn); return $success; } mysqli_close($conn); return false; } /** * Haalt de volledige data voor een Show op, inclusief alle gekoppelde uitzendingen en DJ's. * @param int $show_id De ID van de Show. * @return array|null De Show data met een 'schedule' array, of NULL. */ function getShowDetailsAndSchedule($show_id) { $conn = dbConnect(); // 1. Haal de basis Show info op $show_data = getShowById($show_id); if (!$show_data) { mysqli_close($conn); return null; } // 2. Haal alle uitzendingen op die aan deze Show gekoppeld zijn, inclusief de DJ-naam $sql_schedule = " SELECT u.dag_van_de_week, u.start_tijd, u.eind_tijd, d.dj_id, d.naam AS dj_naam, d.foto_bestand FROM uitzendingen u JOIN djs d ON u.dj_fk = d.dj_id WHERE u.show_fk = ? ORDER BY u.dag_van_de_week ASC, u.start_tijd ASC"; $schedule = []; if ($stmt_schedule = $conn->prepare($sql_schedule)) { $stmt_schedule->bind_param("i", $show_id); $stmt_schedule->execute(); $result_schedule = $stmt_schedule->get_result(); while ($row = $result_schedule->fetch_assoc()) { $schedule[] = $row; } $stmt_schedule->close(); } mysqli_close($conn); // Voeg het schema toe aan de Show data $show_data['schedule'] = $schedule; return $show_data; } // -------------------------------------------------------------------------------- // 5. FUNCTIES VOOR UITZENDINGEN/PLANNING BEHEER (CRUD) // -------------------------------------------------------------------------------- /** * Haalt één uitzending op basis van ID op. * Wordt gebruikt voor de bewerkingsmodus. * @param int $uitzending_id De ID van de uitzending. * @return array|null De uitzending data, of NULL. */ function getUitzendingById($uitzending_id) { $conn = dbConnect(); $sql = "SELECT * FROM uitzendingen WHERE uitzending_id = ?"; if ($stmt = $conn->prepare($sql)) { $stmt->bind_param("i", $uitzending_id); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows === 1) { $data = $result->fetch_assoc(); $stmt->close(); mysqli_close($conn); return $data; } $stmt->close(); } mysqli_close($conn); return null; } /** * Slaat een nieuwe of bijgewerkte uitzending op in de database. * @param array $data Associatieve array met uitzending-gegevens. * @param int|null $uitzending_id ID van de uitzending (NULL voor nieuw). * @return bool True bij succes, False bij falen. */ function saveUitzending($data, $uitzending_id = null) { $conn = dbConnect(); // Zorg ervoor dat de data er is $show_fk = $data['show_fk']; $dj_fk = $data['dj_fk']; $dag_van_de_week = $data['dag_van_de_week']; $start_tijd = $data['start_tijd']; $eind_tijd = $data['eind_tijd']; if ($uitzending_id) { // UPDATE bestaande uitzending $sql = "UPDATE uitzendingen SET show_fk = ?, dj_fk = ?, dag_van_de_week = ?, start_tijd = ?, eind_tijd = ? WHERE uitzending_id = ?"; if ($stmt = $conn->prepare($sql)) { // Let op: De bind parameters moeten overeenkomen met de types: (iiisssi) // Show FK (i), DJ FK (i), Dag v/d week (i), Starttijd (s), Eindtijd (s), ID (i) // Correcte types voor bovenstaande update: "iissii" (Aangenomen dat dag_van_de_week ook een int is, en de FK's zijn ints) $stmt->bind_param("iiisss", $show_fk, $dj_fk, $dag_van_de_week, $start_tijd, $eind_tijd, $uitzending_id); $success = $stmt->execute(); $stmt->close(); mysqli_close($conn); return $success; } } else { // INSERT nieuwe uitzending $sql = "INSERT INTO uitzendingen (show_fk, dj_fk, dag_van_de_week, start_tijd, eind_tijd) VALUES (?, ?, ?, ?, ?)"; if ($stmt = $conn->prepare($sql)) { // Correcte types voor insert: "iiiss" $stmt->bind_param("iiiss", $show_fk, $dj_fk, $dag_van_de_week, $start_tijd, $eind_tijd); $success = $stmt->execute(); $stmt->close(); mysqli_close($conn); return $success; } } mysqli_close($conn); return false; } /** * Verwijdert een uitzending. * @param int $uitzending_id ID van de uitzending. * @return bool True bij succes, False bij falen. */ function deleteUitzending($uitzending_id) { $conn = dbConnect(); $sql = "DELETE FROM uitzendingen WHERE uitzending_id = ?"; if ($stmt = $conn->prepare($sql)) { $stmt->bind_param("i", $uitzending_id); $success = $stmt->execute(); $stmt->close(); mysqli_close($conn); return $success; } mysqli_close($conn); return false; } // -------------------------------------------------------------------------------- // 6. FUNCTIES VOOR REQUESTS (VERZOEKJES) // -------------------------------------------------------------------------------- /** * Voegt een nieuw verzoekje toe aan de database. * @param string $artiest_titel De artiest en titel van het verzoek. * @param string $naam De naam van de aanvrager (optioneel). * @return bool True bij succes, False bij falen. */ function saveRequest($artiest_titel, $naam = null) { $conn = dbConnect(); // Voegt het verzoek toe met de huidige tijd en status 'nieuw' $sql = "INSERT INTO requests (artiest_titel, naam_aanvrager, datum_tijd_toegevoegd, status) VALUES (?, ?, NOW(), 'nieuw')"; if ($stmt = $conn->prepare($sql)) { // Naam aanvrager is optioneel, bind_param gaat uit van de string type $stmt->bind_param("ss", $artiest_titel, $naam); $success = $stmt->execute(); $stmt->close(); mysqli_close($conn); return $success; } mysqli_close($conn); return false; } /** * Haalt alle (onafgehandelde) verzoekjes op. * @return array Een array met alle request-data. */ function getAllRequests($status = 'nieuw') { $conn = dbConnect(); $sql = "SELECT * FROM requests WHERE status = ? ORDER BY datum_tijd_toegevoegd DESC"; $requests = []; if ($stmt = $conn->prepare($sql)) { $stmt->bind_param("s", $status); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { $requests[] = $row; } $stmt->close(); } mysqli_close($conn); return $requests; } // Einde van database_model.php ?>