https://crispy.cat/software/crispage Crispage is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. */ namespace Crispage; defined("ROOT") or die(); use \Crispage\Auth\CorePermissions; class Asset { public static function getNames(): array { return ["Asset", "Assets"]; } public static function getPermissions(): array { return [ "create" => CorePermissions::NEVER, "modify" => CorePermissions::NEVER, "modify_own"=> CorePermissions::NEVER, "delete" => CorePermissions::NEVER, "delete_own"=> CorePermissions::NEVER ]; } public static function getRoutingInfo(): array { return [ "action" => null, "data" => [] ]; } public static function getSortingInfo(): array { return [ "field" => "mtime", "desc" => true ]; } public static function getListColumns(): array { global $Crispage; return [ "id" => ["label" => "{%ID}"], "slug" => [ "label" => "{%SLUG}", "filter" => "\\Crispage\\Utils\\TextUtils::codeify" ], "ctime" => [ "label" => "{%CREATED}", "filter" => [$Crispage->i18n, "datetime"] ], "mtime" => [ "label" => "{%MODIFIED}", "filter" => [$Crispage->i18n, "datetime"] ] ]; } public static function getListActions(): array { return [ [ "route" => "assets/editor", "label" => "{%CREATE_NEW}", "color" => "success" ] ]; } public static function getListItemActions(): array { return [ [ "route" => "assets/editor", "label" => "{%EDIT}", "color" => "primary", "fields" => [ "asset_id" => "id" ] ], [ "route" => "assets/delete", "label" => "{%DELETE}", "color" => "danger", "fields" => [ "asset_id" => "id" ] ] ]; } public static function getEditorFields(): array { return [ "slug" => [ "column" => 1, "component" => "\\Crispage\\Components\\Fields\\TextFieldComponent", "com_data" => [ "label" => "{%SLUG}:" ], "filter" => "strval" ] ]; } public static function getOptionFields(): array { return []; } public static function slug(string $text = null): string { if (empty($text)) return strval(time()); $slug = strtolower($text); $slug = preg_replace("/[^a-z\\d\\-_]+/", "-", $slug); $slug = preg_replace("/-{2,}/", "-", $slug); $slug = trim($slug, "-"); if (empty($slug)) return strval(time()); return $slug; } public ?string $_table; public int $id; public string $slug; public int $ctime; public int $mtime; public string $options; protected array $_options_array; protected function __construct(array $props) { $this->_table = $props["_table"] ?? null; $this->id = $props["id"] ?? 0; $this->slug = $props["slug"] ?? ""; $this->ctime = $props["ctime"] ?? time(); $this->mtime = $props["mtime"] ?? time(); $this->options = $props["options"] ?? "[]"; $this->_options_array = json_decode($this->options, true); } public function toArray(): array { $arr = []; foreach ($this as $k => $v) { if ($k[0] == "_") continue; if (is_bool($v)) $v = intval($v); $arr[$k] = $v; } return $arr; } public function getOption(string $key, $default = null) { return $this->_options_array[$key] ?? $default; } public function getOptions(): array { return $this->_options_array; } public function setOption(string $key, $value): void { $this->_options_array[$key] = $value; $this->options = json_encode($this->_options_array); } public function setOptions(array $data): void { $this->_options_array = array_merge($this->_options_array, $data); $this->options = json_encode($this->_options_array); } public function isTemporary(): bool { return $this->_table === null; } public function getOwnerId(): int { return 0; } public function getName(): string { return $this->slug; } public function getParentId(): int { return 0; } } ?>