<?php
/**
* @file modal.php
* @brief Dynamické generování modálních oken pro události a profily lektorů.
*
* Tento skript:
* - Navazuje připojení k databázi a zpracovává GET parametry (category a eventId, lectorId a eventId, nebo pouze lectorId).
* - Vytváří modální okno pro události s názvem a časovým rozsahem na základě kategorie a ID události.
* - Pro lektora s ID 4 a zadaným eventId generuje specializované modální okno s detaily události (název, popis, lektoři, data).
* - Pro lektory (pouze lectorId nebo s eventId) vytváří modální okno s profilem lektora, včetně videa (pokud je k dispozici), popisu, fotografií, seznamu nadcházejících událostí (max. 3, od aktuálního data) a kontaktních údajů.
* - Obsahuje JavaScript funkci closeModal pro plynulé zavírání modálních oken a odstranění pozadí (backdrop).
*/
?>
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Události a profily lektorů v Oáze Brádlo. Zobrazte podrobnosti o akcích a lektorech pohodlně v modálním okně.">
<title>Modal</title>
<link rel="stylesheet" href="css/modal.css" />
<link
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"
rel="stylesheet" />
</head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-FB7MMZ9KBB"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-FB7MMZ9KBB');
</script>
<body>
<?php
if (isset($_GET['category']) && isset($_GET['eventId'])) {
include 'db_connection.php'; ///< Připojení k databázi
$conn->set_charset("utf8mb4");
$category = $_GET['category'];
$eventId = intval($_GET['eventId']);
$sql = "SELECT * FROM events WHERE category = '$category' AND id = $eventId";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo '<div class="modal fade show" id="otherModal" tabindex="-1" aria-labelledby="otherModal" aria-hidden="true" style="display: block; overflow-y: auto;">';
echo ' <div class="modal-dialog modal-lg">';
echo ' <div class="modal-content">';
echo ' <div class="modal-header">';
echo ' <button type="button" class="close" data-dismiss="modal" aria-label="Close" onclick="closeModal(\'otherModal\')">';
echo ' <span aria-hidden="true">×</span>';
echo ' </button>';
echo ' </div>';
echo ' <div class="modal-body">';
echo ' <div class="container">';
echo ' <div class="row">';
echo ' <div class="col-12 middle">';
echo ' <h2>' . $row["heading"] . '</h2>';
echo ' </div>';
echo ' <div class="col-5 middle">';
echo ' <h2>' . date('d-m-Y', strtotime($row["timefrom"])) . '</h2>';
echo ' </div>';
echo ' <div class="col-2 middle">';
echo ' <h2> - </h2>';
echo ' </div>';
echo ' <div class="col-5 middle">';
echo ' <h2>' . date('d-m-Y', strtotime($row["timeto"])) . '</h2>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo '</div>';
}
}
$conn->close();
}
// Specialní případ pro lektora s ID 4 a eventId
if (isset($_GET['lectorId']) && isset($_GET['eventId']) && $_GET['lectorId'] == 4) {
include 'db_connection.php'; ///< Připojení k databázi
$conn->set_charset("utf8mb4");
$eventId = $_GET['eventId'];
// Získání informací o události
$sql = "SELECT * FROM events WHERE id = $eventId";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$event = $result->fetch_assoc();
// Zobrazí specialní modální okno pro lektora s ID 4
echo '<div class="modal fade show" id="specialLectorModal" tabindex="-1" aria-labelledby="specialLectorModalLabel" aria-hidden="true" style="display: block; overflow-y: auto;">';
echo ' <div class="modal-dialog modal-lg">';
echo ' <div class="modal-content">';
echo ' <div class="modal-header">';
echo ' <h2 class="modal-title" id="specialLectorModalLabel">Informace o akci</h2>';
echo ' <button type="button" class="close" data-dismiss="modal" aria-label="Close" onclick="closeModal(\'specialLectorModal\')">';
echo ' <span aria-hidden="true">×</span>';
echo ' </button>';
echo ' </div>';
echo ' <div class="modal-body">';
echo ' <div class="container">';
echo ' <div class="row">';
echo ' <div class="col-12">';
echo ' <h3>' . $event["heading"] . '</h3>';
echo ' </div>';
echo ' <div class="col-12 my-3">';
echo ' <h5>' . $event["lectors"] . '</h5>';
echo ' </div>';
echo ' <div class="col-12 my-3">';
echo ' <p>' . $event["description"] . '</p>';
echo ' </div>';
echo ' <div class="col-12 mt-4">';
echo ' <div class="row">';
echo ' <div class="col-md-6">';
echo ' <p><strong>Od:</strong> ' . date('d-m-Y', strtotime($event["timefrom"])) . '</p>';
echo ' </div>';
echo ' <div class="col-md-6">';
echo ' <p><strong>Do:</strong> ' . date('d-m-Y', strtotime($event["timeto"])) . '</p>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo '</div>';
echo '<div class="modal-backdrop fade show" onclick="closeModal(\'specialLectorModal\')"></div>';
}
// Důležité: Přidat tento return příkaz, aby se zabránilo zobrazení běžných modálních oken lektorů
return;
}
if (isset($_GET['lectorId'])) {
include 'db_connection.php'; ///< Připojení k databázi
$conn->set_charset("utf8mb4");
$lectorId = $_GET['lectorId'];
$sql = "SELECT * FROM lectors WHERE lectors.id = $lectorId";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
if (!empty($row["videoMain"]) || !empty($row["videoLink"])) {
// Modal 1 s videem
echo '<div class="modal fade show" id="lectorModal" tabindex="-1" aria-labelledby="lectorModalLabel" aria-hidden="true" style="display: block; overflow-y: auto;">';
echo ' <div class="modal-dialog modal-lg">';
echo ' <div class="modal-content">';
echo ' <div class="modal-header">';
echo ' <h2 class="modal-title" id="lectorModalLabel">' . $row["name"] . '</h2>';
echo ' <button type="button" class="close" data-dismiss="modal" aria-label="Close" onclick="closeModal(\'lectorModal\')">';
echo ' <span aria-hidden="true">×</span>';
echo ' </button>';
echo ' </div>';
echo ' <div class="modal-body">';
if (isset($_GET['eventId'])) { // Pokud uživatel přichází z event-card, načte info pro konkrétní událost (pokud ne, otevře jen info o lektorovi)
$eventId = $_GET['eventId'];
$sql2 = "SELECT * FROM events WHERE events.id = $eventId";
$result2 = $conn->query($sql2);
if ($result2->num_rows > 0) {
while ($row2 = $result2->fetch_assoc()) {
echo ' <div class="container">';
echo ' <div class="row seminarInfo">';
echo ' <div class="col-12">';
echo ' <p class="seminarHeading">' . $row2["heading"] . '</p>';
echo ' </div>';
echo ' <div class="col-12">';
echo ' <p class="seminarDescription">' . $row2["description"] . '</p>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
}
}
}
echo ' <div class="container">';
echo ' <div class="row">';
echo ' <div class="col-12">';
if (!empty($row["videoMain"])) {
echo ' <video src="' . $row["videoMain"] . '" autoplay controls></video>';
} elseif (!empty($row["videoLink"])) {
echo ' <iframe src="' . $row["videoLink"] . '"></iframe>';
}
echo ' </div>';
echo ' <div class="col-12">';
echo ' <h4>' . $row["field"] . '</h4>';
echo ' </div>';
echo ' <div class="col-12">';
echo ' <p>' . $row["info"] . '</p>';
echo ' </div>';
echo ' </div>';
if (!empty($row["photo1"]) || !empty($row["photo2"]) || !empty($row["photo3"])) {
echo ' <div class="row lectorPhotos">';
if (!empty($row["photo1"])) {
echo ' <div class="col-md-4 col-lg-4 col-6">';
echo ' <img src="' . $row["photo1"] . '" alt="" class="lectorPhoto" />';
echo ' </div>';
}
if (!empty($row["photo2"])) {
echo ' <div class="col-md-4 col-lg-4 col-6">';
echo ' <img src="' . $row["photo2"] . '" alt="" class="lectorPhoto" />';
echo ' </div>';
}
if (!empty($row["photo3"])) {
echo ' <div class="col-md-4 col-lg-4 col-6">';
echo ' <img src="' . $row["photo3"] . '" alt="" class="lectorPhoto" />';
echo ' </div>';
}
echo ' </div>';
}
echo ' </div>';
echo ' <div class="spacer50"></div>';
echo ' <div class="container modalEnd">';
echo ' <div class="row">';
echo ' <div class="col-md-7 col-lg-7 col-12">';
echo ' <div class="row">';
echo ' <div class="col-12">';
echo ' <h6>Semináře</h6>';
echo ' </div>';
echo ' <div class="col-12">';
echo ' <div class="eventBox">';
// Načtení událostí pro stejného lektora
include 'db_connection.php'; ///< Připojení k databázi
$conn->set_charset("utf8mb4");
$sqlevents = "SELECT * FROM events WHERE events.lector_id = $lectorId AND events.timefrom >= CURDATE() ORDER BY events.timefrom ASC LIMIT 3"; // Fetching events for the same lector with filter of curent date and limit 3
$resultevents = $conn->query($sqlevents);
$dateToday = date('Y-m-d');
$events = [];
if ($resultevents->num_rows > 0) {
while ($row = $resultevents->fetch_assoc()) {
$events[] = $row;
}
}
if (!empty($events)) {
foreach ($events as $row) {
if (strtotime($dateToday) <= strtotime($row["timefrom"])) {
echo '<div class="event-card p-2 medailonek-link" data-url="?lectorId=' . $row["lector_id"] . '&eventId=' . $row["id"] . '#modalPlace">';
echo ' <div class="d-flex">';
echo ' <div class="eventTime">';
echo ' <p class="date-time m-0">' . date('d-m-Y', strtotime($row["timefrom"])) . '</p>';
echo ' <p class="date-time m-0">' . date('d-m-Y', strtotime($row["timeto"])) . '</p>';
echo ' </div>';
echo ' <div>';
echo ' <p class="event-title m-0">' . $row["heading"] . '</p>';
echo ' <p class="event-details m-0">';
$sql3 = "SELECT * FROM lectors WHERE id = $lectorId"; // Zobrazení detailu lektora v kartě události (oddělený dotaz na DB, jinak by načítal události od různých lektorů)
$result3 = $conn->query($sql3);
if ($result3->num_rows > 0) {
while ($row3 = $result3->fetch_assoc()) {
echo ' <span class="organizer">' . $row3["name"] . '</span>';
echo ' <span class="eventContact">' . ($row3["tel"] ? $row3["tel"] : $row3["email"]) . '</span>';
}
}
echo ' </p>';
echo ' </div>';
echo ' </div>';
echo '</div>';
}
}
}
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' <div class="col-md-5 col-lg-5 col-12 contactModal">';
echo ' <div class="col-12">';
echo ' <h6>Kontakt</h6>';
echo ' </div>';
if (!empty($row["tel"])) {
echo ' <div class="col-12 contactLine">';
echo ' <img src="media/seminar/lectors/modal/tel.png" alt="" />';
echo ' <p>' . $row["tel"] . '</p>';
echo ' </div>';
}
if (!empty($row["email"])) {
echo ' <div class="col-12 contactLine">';
echo ' <img src="media/seminar/lectors/modal/email.png" alt="" />';
echo ' <p>' . $row["email"] . '</p>';
echo ' </div>';
}
if (!empty($row["web1"]) || !empty($row["web2"])) {
echo ' <div class="col-12 contactLine">';
echo ' <img src="media/seminar/lectors/modal/web.png" alt="" />';
echo ' <p class="webLines">' . $row["web1"] . ' <br/>' . $row["web2"] . '</p>';
echo ' </div>';
}
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo '</div>';
echo '<div class="modal-backdrop fade show" onclick="closeModal(\'lectorModal\')"></div>';
} else {
// Modal 2 bez videa
echo '<div class="modal fade show" id="lectorModal2" tabindex="-1" aria-labelledby="lectorModalLabel" aria-hidden="true" style="display: block; overflow-y: auto;">';
echo ' <div class="modal-dialog modal-lg">';
echo ' <div class="modal-content">';
echo ' <div class="modal-header">';
echo ' <h2 class="modal-title" id="lectorModalLabel">Medailonek</h2>';
echo ' <button type="button" class="close" data-dismiss="modal" aria-label="Close" onclick="closeModal(\'lectorModal2\')">';
echo ' <span aria-hidden="true">×</span>';
echo ' </button>';
echo ' </div>';
echo ' <div class="modal-body">';
if (isset($_GET['eventId'])) { // Pokud uživatel přichází z event-card, načte info pro konkrétní událost (pokud ne, otevře jen info o lektorovi)
$eventId = $_GET['eventId'];
$sql2 = "SELECT * FROM events WHERE events.id = $eventId";
$result2 = $conn->query($sql2);
if ($result2->num_rows > 0) {
while ($row2 = $result2->fetch_assoc()) {
echo ' <div class="container">';
echo ' <div class="row seminarInfo">';
echo ' <div class="col-12">';
echo ' <p class="seminarHeading">' . $row2["heading"] . '</p>';
echo ' </div>';
echo ' <div class="col-12">';
echo ' <p class="seminarDescription">' . $row2["description"] . '</p>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
}
}
}
echo ' <div class="container">';
echo ' <div class="row">';
echo ' <div class="col-md-6 col-lg-6 col-12">';
echo ' <h2>' . $row["name"] . '</h2>';
echo ' <h5>' . $row["field"] . '</h5>';
echo ' <p>' . $row["info"] . '</p>';
echo ' </div>';
echo ' <div class="col-md-6 col-lg-6 col-12 noVideo">';
echo ' <img src="' . $row["photoMain"] . '" alt="" />';
echo ' </div>';
echo ' </div>';
if (!empty($row["photo1"]) || !empty($row["photo2"]) || !empty($row["photo3"])) {
echo ' <div class="row lectorPhotos">';
if (!empty($row["photo1"])) {
echo ' <div class="col-md-4 col-lg-4 col-6">';
echo ' <img src="' . $row["photo1"] . '" alt="" class="lectorPhoto" />';
echo ' </div>';
}
if (!empty($row["photo2"])) {
echo ' <div class="col-md-4 col-lg-4 col-6">';
echo ' <img src="' . $row["photo2"] . '" alt="" class="lectorPhoto" />';
echo ' </div>';
}
if (!empty($row["photo3"])) {
echo ' <div class="col-md-4 col-lg-4 col-6">';
echo ' <img src="' . $row["photo3"] . '" alt="" class="lectorPhoto" />';
echo ' </div>';
}
echo ' </div>';
}
echo ' </div>';
echo ' <div class="spacer50"></div>';
echo ' <div class="container modalEnd">';
echo ' <div class="row">';
echo ' <div class="col-md-7 col-lg-7 col-12">';
echo ' <div class="row">';
echo ' <div class="col-12">';
echo ' <h6>Semináře</h6>';
echo ' </div>';
echo ' <div class="col-12">';
echo ' <div class="eventBox">';
// Načtení událostí pro stejného lektora
include 'db_connection.php'; ///< Připojení k databázi
$conn->set_charset("utf8mb4");
$sqlevents = "SELECT * FROM events WHERE events.lector_id = $lectorId AND events.timefrom >= CURDATE() ORDER BY events.timefrom ASC LIMIT 3"; // Fetching events for the same lector with filter of curent date and limit 3
$resultevents = $conn->query($sqlevents);
$dateToday = date('Y-m-d');
$events = [];
if ($resultevents->num_rows > 0) {
while ($row = $resultevents->fetch_assoc()) {
$events[] = $row;
}
}
if (!empty($events)) {
foreach ($events as $row) {
if (strtotime($dateToday) <= strtotime($row["timefrom"])) {
echo '<div class="event-card p-2 medailonek-link" data-url="?lectorId=' . $row["lector_id"] . '&eventId=' . $row["id"] . '#modalPlace">';
echo ' <div class="d-flex">';
echo ' <div class="eventTime">';
echo ' <p class="date-time m-0">' . date('d-m-Y', strtotime($row["timefrom"])) . '</p>';
echo ' <p class="date-time m-0">' . date('d-m-Y', strtotime($row["timeto"])) . '</p>';
echo ' </div>';
echo ' <div>';
echo ' <p class="event-title m-0">' . $row["heading"] . '</p>';
echo ' <p class="event-details m-0">';
$sql3 = "SELECT * FROM lectors WHERE id = $lectorId"; // Zobrazení detailu lektora v kartě události (oddělený dotaz na DB, jinak by načítal události od různých lektorů)
$result3 = $conn->query($sql3);
if ($result3->num_rows > 0) {
while ($row3 = $result3->fetch_assoc()) {
echo ' <span class="organizer">' . $row3["name"] . '</span>';
echo ' <span class="eventContact">' . ($row3["tel"] ? $row3["tel"] : $row3["email"]) . '</span>';
}
}
echo ' </p>';
echo ' </div>';
echo ' </div>';
echo '</div>';
}
}
}
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' <div class="col-md-5 col-lg-5 col-12 contactModal">';
echo ' <div class="col-12">';
echo ' <h6>Kontakt</h6>';
echo ' </div>';
if (!empty($row["tel"])) {
echo ' <div class="col-12 contactLine">';
echo ' <img src="media/seminar/lectors/modal/tel.png" alt="" />';
echo ' <p>' . $row["tel"] . '</p>';
echo ' </div>';
}
if (!empty($row["email"])) {
echo ' <div class="col-12 contactLine">';
echo ' <img src="media/seminar/lectors/modal/email.png" alt="" />';
echo ' <p>' . $row["email"] . '</p>';
echo ' </div>';
}
if (!empty($row["web1"]) || !empty($row["web2"])) {
echo ' <div class="col-12 contactLine">';
echo ' <img src="media/seminar/lectors/modal/web.png" alt="" />';
echo ' <p class="webLines">' . $row["web1"] . ' <br/>' . $row["web2"] . '</p>';
echo ' </div>';
}
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo '</div>';
echo '<div class="modal-backdrop fade show" onclick="closeModal(\'lectorModal2\')"></div>';
}
}
}
$conn->close();
}
?>
<script>
// Funkce pro zavření modálního okna
function closeModal(modalId) {
// skrýt modal
var modal = document.getElementById(modalId);
if (modal) {
modal.style.display = 'none';
modal.classList.remove('show');
}
// odstranit backdrop
var backdrops = document.getElementsByClassName('modal-backdrop');
while (backdrops.length > 0) {
backdrops[0].parentNode.removeChild(backdrops[0]);
}
}
</script>
</body>
</html>