91 lines
1.8 KiB
PHP
91 lines
1.8 KiB
PHP
<?php
|
|
|
|
class Blog
|
|
{
|
|
public readonly string $id;
|
|
public readonly array $json;
|
|
|
|
public function __construct(string $id, array $json)
|
|
{
|
|
$this->id = $id;
|
|
$this->json = $json;
|
|
}
|
|
|
|
public function date(): string
|
|
{
|
|
return $this->json['date'];
|
|
}
|
|
|
|
public function title(): string
|
|
{
|
|
return $this->json['title'];
|
|
}
|
|
|
|
public function keywords(): array
|
|
{
|
|
return $this->json['keywords'];
|
|
}
|
|
|
|
public function bookmarks(): array
|
|
{
|
|
return $this->json['bookmarks'];
|
|
}
|
|
|
|
public function urls(): array
|
|
{
|
|
return $this->json['urls'];
|
|
}
|
|
|
|
public function files(): array
|
|
{
|
|
return $this->json['files'];
|
|
}
|
|
|
|
public function width(): float
|
|
{
|
|
return $this->json['dimensions'][0];
|
|
}
|
|
|
|
public function height(): float
|
|
{
|
|
return $this->json['dimensions'][1];
|
|
}
|
|
|
|
public function formatDate(): string
|
|
{
|
|
return date("F jS, Y", strtotime($this->date()));
|
|
}
|
|
|
|
public static function get(string $id): Blog|null
|
|
{
|
|
$path = __DIR__ . "/../blog/$id/_definition.json";
|
|
if (!file_exists($path))
|
|
return null;
|
|
|
|
try {
|
|
$json = json_decode(file_get_contents($path), true);
|
|
return new Blog($id, $json);
|
|
} catch (Exception $e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return Blog[]
|
|
*/
|
|
public static function getAll()
|
|
{
|
|
$dirs = scandir(__DIR__ . '/../blog');
|
|
$dirs = array_filter($dirs, fn($dir) => is_dir(__DIR__ . "/../blog/$dir") && $dir !== '.' && $dir !== '..');
|
|
|
|
$blogs = [];
|
|
|
|
foreach ($dirs as $id) {
|
|
$blog = Blog::get($id);
|
|
if ($blog !== null)
|
|
array_push($blogs, $blog);
|
|
}
|
|
|
|
return $blogs;
|
|
}
|
|
} |