118 lines
3.1 KiB
PHP
118 lines
3.1 KiB
PHP
<?php
|
|
|
|
final class Blog
|
|
{
|
|
|
|
private array $links = [];
|
|
|
|
public function __construct()
|
|
{
|
|
$this->loadConfig();
|
|
}
|
|
|
|
public function run()
|
|
{
|
|
$this->render();
|
|
}
|
|
|
|
private function loadConfig()
|
|
{
|
|
require_once "config.php";
|
|
foreach ($links as $title => $url) {
|
|
$this->links[] = new Link($title, $url);
|
|
}
|
|
}
|
|
|
|
private function render()
|
|
{
|
|
extract($this->populateViews());
|
|
include "views/index.phtml";
|
|
}
|
|
|
|
private function populateViews(): array
|
|
{
|
|
return array_merge(
|
|
["lang" => BLOG_LANGUAGE],
|
|
$this->populateHeader(),
|
|
$this->populateMainView(),
|
|
$this->populateBio(),
|
|
$this->populateNavByTag(),
|
|
$this->populateNavByLatest(),
|
|
$this->populateFooter()
|
|
);
|
|
}
|
|
|
|
private function populateHeader(): array
|
|
{
|
|
return [
|
|
"title" => BLOG_TITLE,
|
|
"has_sub_title" => BLOG_SUB_TITLE !== "",
|
|
"sub_title" => BLOG_SUB_TITLE
|
|
];
|
|
}
|
|
|
|
private function populateMainView(): array
|
|
{
|
|
$variables = [];
|
|
$view = filter_input(INPUT_GET, "view", FILTER_SANITIZE_STRING) ?: "single";
|
|
$variables["view"] = $view;
|
|
switch ($view) {
|
|
case "single":
|
|
$date = filter_input(INPUT_GET, "date", FILTER_SANITIZE_STRING);
|
|
$ref = filter_input(INPUT_GET, "ref", FILTER_SANITIZE_STRING);
|
|
$variables["article"] = ($date !== null and $ref !== null) ?
|
|
ArticleManager::get(str_replace("-", "", $date) . $ref) :
|
|
ArticleManager::getNewest();
|
|
break;
|
|
case "tags":
|
|
$tag = filter_input(INPUT_GET, "tag", FILTER_SANITIZE_STRING) ?: "";
|
|
$variables["articles"] = ArticleManager::getMultiple(TagManager::getFromTag($tag));
|
|
break;
|
|
case "archives":
|
|
$variables["dates"] = ArticleManager::getAll();;
|
|
break;
|
|
}
|
|
return $variables;
|
|
}
|
|
|
|
private function populateBio(): array
|
|
{
|
|
return [
|
|
"author" => AUTHOR_NICKNAME,
|
|
"bio" => AUTHOR_BIOGRAPHY,
|
|
];
|
|
}
|
|
|
|
private function populateNavByTag(): array
|
|
{
|
|
return ["tags" => TagManager::getTags()];
|
|
}
|
|
|
|
private function populateNavByLatest(): array
|
|
{
|
|
return [
|
|
"latest" => ArticleManager::getLatestArticles(ARTICLE_COUNT_IN_NAV)
|
|
];
|
|
}
|
|
|
|
private function populateFooter(): array
|
|
{
|
|
return [
|
|
"has_links" => count($this->links) > 0,
|
|
"links" => $this->links,
|
|
"footer" => $this->getFooterString()
|
|
];
|
|
}
|
|
|
|
private function getFooterString(): string
|
|
{
|
|
$currentYear = getdate()["year"];
|
|
$footerYear = BLOG_CREATION_YEAR .
|
|
(BLOG_CREATION_YEAR !== $currentYear ? " - $currentYear" : "");
|
|
$footerAuthor = AUTHOR_NICKNAME .
|
|
(AUTHOR_REALNAME !== "" ? " (" . AUTHOR_REALNAME . ")" : "");
|
|
return "$footerYear. $footerAuthor";
|
|
}
|
|
|
|
}
|