101 lines
4.1 KiB
PHP
101 lines
4.1 KiB
PHP
<?php
|
|
// public/gallery.php
|
|
|
|
use Hpz\Photogal\Database;
|
|
use Hpz\Photogal\Image;
|
|
|
|
require_once '../vendor/autoload.php';
|
|
|
|
$dotenv = Dotenv\Dotenv::createImmutable('../');
|
|
$dotenv->load();
|
|
if (!isset($_ENV['DB_FILE_PATH'])) {
|
|
die('DB_FILE_PATH is not set in the .env file');
|
|
}
|
|
if (!file_exists('../' . $_ENV['DB_FILE_PATH'])) {
|
|
die('Database file does not exist');
|
|
}
|
|
|
|
// Get the selected album
|
|
$album = $_GET['album'] ?? '';
|
|
$album = urldecode($album);
|
|
|
|
if (empty($album)) {
|
|
header("Location: index.php");
|
|
exit;
|
|
}
|
|
|
|
// Pagination settings
|
|
$limit = 24; // Number of images per page
|
|
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
|
|
$offset = ($page - 1) * $limit;
|
|
|
|
|
|
// Create a new Database connection
|
|
$dbFilePath = '../' . $_ENV['DB_FILE_PATH'];
|
|
$database = new Database($dbFilePath);
|
|
$image = new Image($database);
|
|
|
|
// Get images and total count for the selected album
|
|
$images = $image->getImages($album, $limit, $offset);
|
|
$totalImages = $image->countImages($album);
|
|
$totalPages = ceil($totalImages / $limit);
|
|
|
|
// Limit the number of pages displayed in the pagination
|
|
$paginationRange = $_ENV['PAGINATION_RANGE'] ?? 5;
|
|
$startPage = max(1, $page - floor($paginationRange / 2));
|
|
$endPage = min($totalPages, $startPage + $paginationRange - 1);
|
|
?>
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Photo Gallery - <?= htmlspecialchars($album) ?></title>
|
|
<link href="/css/styles.css" rel="stylesheet">
|
|
</head>
|
|
<body class="bg-gray-100">
|
|
<div class="container mx-auto p-4">
|
|
<h1 class="text-3xl font-bold mb-4"><?= htmlspecialchars($album) ?> - Gallery</h1>
|
|
<a href="index.php" class="text-blue-500 mb-4 inline-block">← Back to Albums</a>
|
|
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
|
|
<?php foreach ($images as $image): ?>
|
|
<div class="relative bg-white shadow-md rounded-lg overflow-hidden group">
|
|
<img src="images/<?= $album ?>/thumbs/<?= $image['title'] ?>.webp" alt="<?= htmlspecialchars($image['title']) ?>" class="w-full h-full object-cover cursor-pointer" data-big="images/<?= $album ?>/big/<?= $image['title'] ?>.webp" data-original="images/<?= $album ?>/photos/<?= $image['filename'] ?>" onclick="openLightbox(this)">
|
|
<div class="absolute inset-0 bg-black bg-opacity-50 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center title-overlay">
|
|
<h2 class="text-lg font-semibold text-white"><?= htmlspecialchars($image['title']) ?></h2>
|
|
</div>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
|
|
<!-- Pagination Controls -->
|
|
<div class="mt-6">
|
|
<?php if ($totalPages > 1): ?>
|
|
<nav class="flex justify-center">
|
|
<?php if ($page > 1): ?>
|
|
<a href="?album=<?= urlencode($album) ?>&page=<?= $page - 1 ?>" class="px-4 py-2 bg-gray-300 rounded-l hover:bg-gray-400">Previous</a>
|
|
<?php endif; ?>
|
|
|
|
<?php for ($i = $startPage; $i <= $endPage; $i++): ?>
|
|
<a href="?album=<?= urlencode($album) ?>&page=<?= $i ?>" class="px-4 py-2 <?= $i == $page ? 'bg-gray-500 text-white' : 'bg-gray-300' ?> hover:bg-gray-400"><?= $i ?></a>
|
|
<?php endfor; ?>
|
|
|
|
<?php if ($page < $totalPages): ?>
|
|
<a href="?album=<?= urlencode($album) ?>&page=<?= $page + 1 ?>" class="px-4 py-2 bg-gray-300 rounded-r hover:bg-gray-400">Next</a>
|
|
<?php endif; ?>
|
|
</nav>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Lightbox -->
|
|
<div id="lightbox" class="lightbox" onclick="closeLightbox()">
|
|
<img id="lightbox-img" src="" alt="Lightbox Image" onwheel="zoomImage(event)">
|
|
<div id="original-button" class="original-button" onclick="loadOriginal(event)">View Original</div>
|
|
</div>
|
|
|
|
<script type="text/javascript" src="/js/app.min.js"></script>
|
|
</body>
|
|
</html>
|