oazaSrdceWeb / admin / addlector.php
addlector.php
Raw
<?php

/**
 * @file addlector.php
 * @brief Skript pro přidání nového lektora do databáze.
 *
 * Tento skript zajišťuje zobrazení formuláře a zpracování dat pro přidání nového lektora.
 * Umožňuje nahrání hlavní fotografie (s možností ořezu), videa, dalších fotografií a zadání informací o lektorovi.
 * Přístup je povolen pouze přihlášeným uživatelům.
 */

include '../db_connection.php'; ///< Připojení k databázi.
$conn->set_charset("utf8mb4");
session_start();

/**
 * Kontrola, zda je uživatel přihlášen.
 * Pokud není, přesměruje na přihlašovací stránku.
 */
if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
    header('Location: login.php');
    exit();
}
/**
 * Zpracování odeslaného formuláře.
 */
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $name = $_POST['name'];
    $field = $_POST['field'];
    $videoLink = $_POST['videoLink'];
    $info = $_POST['info'];
    $web1 = $_POST['web1'];
    $web2 = $_POST['web2'];
    $tel = $_POST['tel'];
    $email = $_POST['email'];

    $uploadDir = '../media/seminar/lectors/'; ///< Cílová složka pro nahrání souborů (serverová cesta).
    $actualDir = 'media/seminar/lectors/'; ///< Cesta pro uložení do databáze (relativní).
    $photoMain = $uploadDir . basename($_FILES['photoMain']['name']); ///< Cesta k hlavní fotce.
    $videoMain = $uploadDir . basename($_FILES['videoMain']['name']); ///< Cesta k hlavnímu videu.
    ///Cesty k fotkám 1-3
    $photo1 = $uploadDir . basename($_FILES['photo1']['name']);
    $photo2 = $uploadDir . basename($_FILES['photo2']['name']);
    $photo3 = $uploadDir . basename($_FILES['photo3']['name']);

    /**
     * Zpracování ořezu hlavní fotografie, pokud je k dispozici.
     */
    if (isset($_POST['croppedPhotoMain'])) {
        $croppedPhotoMain = $_POST['croppedPhotoMain'];
        $croppedPhotoMainPath = $uploadDir . 'cropped_' . basename($_FILES['photoMain']['name']);
        file_put_contents($croppedPhotoMainPath, base64_decode($croppedPhotoMain));
        $photoMain = $actualDir . 'cropped_' . basename($_FILES['photoMain']['name']);
    } else {
        move_uploaded_file($_FILES['photoMain']['tmp_name'], $photoMain);
        $photoMain = $actualDir . basename($_FILES['photoMain']['name']);
    }

    /**
     * Zpracování hlavního videa.
     */
    if (!empty($_FILES['videoMain']['tmp_name'])) {
        move_uploaded_file($_FILES['videoMain']['tmp_name'], $videoMain);
        $videoMain = $actualDir . basename($_FILES['videoMain']['name']);
    } else {
        $videoMain = null;
    }

    /**
     * Zpracování fotografií (1-3).
     */
    if (!empty($_FILES['photo1']['tmp_name'])) {
        move_uploaded_file($_FILES['photo1']['tmp_name'], $photo1);
        $photo1 = $actualDir . basename($_FILES['photo1']['name']);
    } else {
        $photo1 = null;
    }

    if (!empty($_FILES['photo2']['tmp_name'])) {
        move_uploaded_file($_FILES['photo2']['tmp_name'], $photo2);
        $photo2 = $actualDir . basename($_FILES['photo2']['name']);
    } else {
        $photo2 = null;
    }

    if (!empty($_FILES['photo3']['tmp_name'])) {
        move_uploaded_file($_FILES['photo3']['tmp_name'], $photo3);
        $photo3 = $actualDir . basename($_FILES['photo3']['name']);
    } else {
        $photo3 = null;
    }

    /**
     * Vložení nového lektora do databáze.
     */
    $stmt = $conn->prepare('INSERT INTO lectors (name, field, photoMain, videoMain, videoLink, photo1, photo2, photo3, info, web1, web2, tel, email) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
    $stmt->bind_param('sssssssssssss', $name, $field, $photoMain, $videoMain, $videoLink, $photo1, $photo2, $photo3, $info, $web1, $web2, $tel, $email);

    if ($stmt->execute()) {
        $success = 'Lektor úspěšně přidán';
    } else {
        $error = 'Vyskytla se chyba';
    }
    $stmt->close();
}
?>
<!DOCTYPE html>
<html lang="cs">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Přidat Lektora</title>
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet" />
    <link rel="stylesheet" href="../admin.css" />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.css" />
    <style>
        #photoMainPreview {
            max-height: 500px;
            /* Zvětší max výšku */
        }
    </style>
</head>

<body>
    <div class="container mt-5">
        <a href="../admin.php" class="backbtn">Zpět na panel</a>
        <h2 class="text-center mb-4 hedingForm">Přidat Lektora</h2>
        <?php if (isset($success)) {
            echo '<div class="alert alert-success text-center">' . $success . '</div>';
        } ?>
        <?php if (isset($error)) {
            echo '<div class="alert alert-danger text-center">' . $error . '</div>';
        } ?>
        <div class="row justify-content-center">
            <div class="col-md-8">
                <form action="addlector.php" method="post" enctype="multipart/form-data">
                    <div class="form-group">
                        <label for="name">Jméno</label>
                        <input type="text" class="form-control" id="name" name="name" required>
                    </div>
                    <div class="form-group">
                        <label for="field">Obor</label>
                        <input type="text" class="form-control" id="field" name="field" required>
                    </div>
                    <div class="form-group">
                        <label for="photoMain">Hlavní Fotografie</label>
                        <input type="file" class="form-control" id="photoMain" name="photoMain" required>
                        <img id="photoMainPreview" style="display:none; max-width:100%;" />
                        <button type="button" id="cropButton" style="display:none;" class="btn btn-secondary">Crop</button>
                        <input type="hidden" id="croppedPhotoMain" name="croppedPhotoMain">
                    </div>
                    <div class="form-group">
                        <label for="videoMain">Hlavní Video</label>
                        <input type="file" class="form-control" id="videoMain" name="videoMain">
                    </div>
                    <div class="form-group">
                        <label for="videoLink">Odkaz na video</label>
                        <input type="text" class="form-control" id="videoLink" name="videoLink">
                    </div>
                    <div class="form-group">
                        <label for="photo1">Fotografie 1</label>
                        <input type="file" class="form-control" id="photo1" name="photo1">
                    </div>
                    <div class="form-group">
                        <label for="photo2">Fotografie 2</label>
                        <input type="file" class="form-control" id="photo2" name="photo2">
                    </div>
                    <div class="form-group">
                        <label for="photo3">Fotografie 3</label>
                        <input type="file" class="form-control" id="photo3" name="photo3">
                    </div>
                    <div class="form-group">
                        <label for="info">Informace</label>
                        <textarea class="form-control" id="info" name="info" required></textarea>
                    </div>
                    <div class="form-group">
                        <label for="web1">Web 1</label>
                        <input type="text" class="form-control" id="web1" name="web1">
                    </div>
                    <div class="form-group">
                        <label for="web2">Web 2</label>
                        <input type="text" class="form-control" id="web2" name="web2">
                    </div>
                    <div class="form-group">
                        <label for="tel">Telefon</label>
                        <input type="number" class="form-control" id="tel" name="tel">
                    </div>
                    <div class="form-group">
                        <label for="email">Email</label>
                        <input type="email" class="form-control" id="email" name="email">
                    </div>
                    <button type="submit" class="btn btn-primary btn-block">Přidat</button>
                </form>
            </div>
        </div>
    </div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.js"></script>
    <script>
        document.getElementById('photoMain').addEventListener('change', function(e) {
            const file = e.target.files[0];
            if (file) {
                const reader = new FileReader();
                reader.onload = function(event) {
                    const img = document.getElementById('photoMainPreview');
                    img.src = event.target.result;
                    img.style.display = 'block';
                    document.getElementById('cropButton').style.display = 'block';
                    const cropper = new Cropper(img, {
                        aspectRatio: 2 / 3,
                        viewMode: 1,
                        autoCropArea: 1,
                        cropBoxResizable: true,
                        cropBoxMovable: true,
                        ready: function() {
                            cropper.setCropBoxData({
                                width: 200,
                                height: 300
                            });
                        }
                    });
                    document.getElementById('cropButton').addEventListener('click', function() {
                        const canvas = cropper.getCroppedCanvas({
                            width: 200,
                            height: 300
                        });
                        document.getElementById('croppedPhotoMain').value = canvas.toDataURL().split(',')[1];
                        cropper.destroy();
                        img.style.display = 'none';
                        this.style.display = 'none';
                    });
                };
                reader.readAsDataURL(file);
            }
        });
    </script>
</body>

</html>