ytkns/src/ZoneTask.php
2020-06-10 16:03:13 +00:00

61 lines
1.7 KiB
PHP

<?php
namespace YTKNS;
final class ZoneTask {
public function getZoneId(): int {
return $this->zone_id ?? 0;
}
public function getZone(): Zone {
return Zone::byId($this->getZoneId());
}
public function getName(): string {
return $this->task_name ?? '';
}
public function getParams(): array {
if(empty($this->task_params))
return [];
return unserialize($this->task_params);
}
public function delete(): void {
$deleteTask = DB::prepare('
DELETE FROM `ytkns_zones_tasks`
WHERE `zone_id` = :zone
AND `task_name` = :task
');
$deleteTask->bindValue('zone', $this->getZoneId());
$deleteTask->bindValue('task', $this->getName());
$deleteTask->execute();
}
public static function queue(): array {
$getTasks = DB::prepare('
SELECT `zone_id`, `task_name`, `task_params`
FROM `ytkns_zones_tasks`
');
$getTasks->execute();
$tasks = [];
while($task = $getTasks->fetchObject(self::class))
$tasks[] = $task;
return $tasks;
}
public static function enqueue(Zone $zone, string $name, array $params = []): void {
$enqueue = DB::prepare('
REPLACE INTO `ytkns_zones_tasks` (
`zone_id`, `task_name`, `task_params`
) VALUES (
:zone, :task, :params
)
');
$enqueue->bindValue('zone', $zone->getId());
$enqueue->bindValue('task', $name);
$enqueue->bindValue('params', serialize(array_values($params)));
$enqueue->execute();
}
}