vlw.se/src/Database/Models/Work/Action.php

78 lines
No EOL
2.5 KiB
PHP

<?php
namespace VLW\Database\Models\Work;
use \VV;
use VLW\Helpers\UUID;
use VLW\Database\Models\Model;
use VLW\Database\Models\Work\Work;
use VLW\Database\Tables\Work\Actions;
require_once VV::root("src/Helpers/UUID.php");
require_once VV::root("src/Database/Models/Model.php");
require_once VV::root("src/Database/Models/Work/Work.php");
require_once VV::root("src/Database/Tables/Work/Actions.php");
class Action extends Model {
final public static function new(Work $work): self {
$id = UUID::v4();
if (!parent::create(Actions::TABLE, [
Actions::ID->value => $id,
Actions::REF_WORK_ID->value => $work->id,
Actions::HREF->value => null,
Actions::CLASSLIST->value => null,
Actions::ICON_PREPEND->value => null,
Actions::ICON_APPEND->value => null
])) { throw new Exception("Failed to create Work Action entity"); }
return new Action($id);
}
final public static function from(Work $work): array {
return array_map(fn(array $tag): Actions => new Actions($tag[Actions::ID->value]), new Database()
->from(Actions::TABLE)
->where([Actions::REF_WORK_ID->value => $work->id])
->order([Actions::LABEL->value => Order::DESC])
->select(Actions::ID->value)
->fetch_all(MYSQLI_ASSOC)
);
}
public function __construct(public readonly string $id) {
parent::__construct(Actions::TABLE, Actions::values(), [
Actions::ID->value => $this->id
]);
}
final public Work $work {
get => $this->get(Actions::REF_WORK_ID->value);
set (Work $work) => $this->set(Actions::REF_WORK_ID->value, $work);
}
final public int $order_idx {
get => $this->get(TimelineTable::ORDER_IDX->value);
set (int $order_idx) => $this->set(TimelineTable::ORDER_IDX->value, $order_idx);
}
final public ?string $href {
get => $this->get(Actions::HREF->value);
set (?string $href) => $this->set(Actions::HREF->value, $href);
}
final public ?string $classlist {
get => $this->get(Actions::CLASSLIST->value);
set (?string $classlist) => $this->set(Actions::CLASSLIST->value, $classlist);
}
final public ?string $icon_prepend {
get => $this->get(Actions::ICON_PREPEND->value);
set (?string $icon_prepend) => $this->set(Actions::ICON_PREPEND->value, $icon_prepend);
}
final public ?string $icon_append {
get => $this->get(Actions::ICON_APPEND->value);
set (?string $icon_append) => $this->set(Actions::ICON_APPEND->value, $icon_append);
}
}