82 lines
2.2 KiB
PHP
82 lines
2.2 KiB
PHP
<?php
|
|
|
|
final class Portfolio
|
|
{
|
|
|
|
private array $links = [];
|
|
|
|
public function __construct()
|
|
{
|
|
$this->loadConfig();
|
|
}
|
|
|
|
public function run()
|
|
{
|
|
$this->render();
|
|
}
|
|
|
|
private function loadConfig()
|
|
{
|
|
require_once "config.php";
|
|
foreach ($links as $id => $link) {
|
|
$this->links[] = new Link($id, $link["label"], $link["url"], $link["self"]);
|
|
}
|
|
}
|
|
|
|
private function render()
|
|
{
|
|
$title = PORTFOLIO_TITLE;
|
|
$url = PORTFOLIO_URL;
|
|
$galleries = $this->loadGalleries();
|
|
$links = $this->links;
|
|
$footer = PORTFOLIO_CREATION_YEAR .
|
|
". " . AUTHOR_NICKNAME .
|
|
(AUTHOR_REALNAME !== "" ? " (" . AUTHOR_REALNAME . ")" : "");
|
|
include "views/index.phtml";
|
|
}
|
|
|
|
private function loadGalleries(): array
|
|
{
|
|
$galleries = [];
|
|
foreach (array_diff(scandir("./galleries"), [".", ".."]) as $dir) {
|
|
$path = "./galleries/$dir";
|
|
$meta = "$gallery_path/metadata.txt";
|
|
if (!is_file($meta)) {
|
|
continue;
|
|
}
|
|
$galleries[] = $this->loadGallery($path, trim(file_get_contents($meta)));
|
|
}
|
|
return $galleries;
|
|
}
|
|
|
|
private function loadGallery(string $dir, string $title): Gallery
|
|
{
|
|
$gallery = new Gallery($title);
|
|
foreach (array_diff(scandir($dir, SCANDIR_SORT_DESCENDING), [".", ".."]) as $file) {
|
|
$path = "$dir/$file";
|
|
$meta = "$path.meta.txt";
|
|
if (!is_file($meta)) {
|
|
continue;
|
|
}
|
|
$gallery->add($this->loadImage($dir, $file, $meta));
|
|
}
|
|
return $gallery;
|
|
}
|
|
|
|
private function loadImage(string $dir, string $file, string $meta): Image
|
|
{
|
|
$path = "$dir/" . rawurlencode($file);
|
|
$thumbnail = str_replace(".jpg", "_thb.jpg", $image_path);
|
|
list($title, $alt) = file($image_meta);
|
|
list($width, $height) = getimagesize("$dir/$file");
|
|
return new Image(
|
|
$path,
|
|
$thumbnail,
|
|
trim($title),
|
|
trim($alt),
|
|
(int) $width,
|
|
(int) $height
|
|
);
|
|
}
|
|
}
|