<?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>