Asset now part of \Crispage\Framework

Assets now loadable with Crispage->loadClass
new shortnames parameter for Crispage->loadClass
This commit is contained in:
crispycat 2024-05-20 00:16:44 -04:00
parent 3dabd9209e
commit 4a8bc32bab
36 changed files with 69 additions and 81 deletions

View File

@ -14,7 +14,7 @@
defined("ROOT") or die(); defined("ROOT") or die();
use \Crispage\Asset; use \Crispage\Framework\Asset;
use \Crispage\Auth\CorePermissions; use \Crispage\Auth\CorePermissions;
class APIAssetAction extends \Crispage\Framework\Action class APIAssetAction extends \Crispage\Framework\Action
@ -67,7 +67,7 @@
$class = strval($this->app->request->json["_class"] ?? null); $class = strval($this->app->request->json["_class"] ?? null);
if ( if (
!class_exists($class) || !class_exists($class) ||
!is_a($class, "\\Crispage\\Asset", true) !is_a($class, "\\Crispage\\Framework\\Asset", true)
) { ) {
http_response_code(400); http_response_code(400);
$out = ["error" => "Bad Request"]; $out = ["error" => "Bad Request"];

View File

@ -14,7 +14,7 @@
defined("ROOT") or die(); defined("ROOT") or die();
use \Crispage\Asset; use \Crispage\Framework\Asset;
use \Crispage\Auth\CorePermissions; use \Crispage\Auth\CorePermissions;
class APIAssetOptionsAction extends \Crispage\Framework\Action class APIAssetOptionsAction extends \Crispage\Framework\Action

View File

@ -15,7 +15,7 @@
defined("ROOT") or die(); defined("ROOT") or die();
use \Crispage\Auth\CorePermissions; use \Crispage\Auth\CorePermissions;
use \Crispage\Asset; use \Crispage\Framework\Asset;
class APIAssetsAction extends \Crispage\Framework\Action class APIAssetsAction extends \Crispage\Framework\Action
implements \Crispage\Response\APIPermissions { implements \Crispage\Response\APIPermissions {

View File

@ -55,7 +55,7 @@
} }
// Get required permissions // Get required permissions
$this->app->loadClass($route->action, "\Crispage\Framework\Action"); $this->app->loadClass($route->action, "\\Crispage\\Framework\\Action");
if (!is_a($route->action, "\\Crispage\\Response\\APIPermissions", true)) { if (!is_a($route->action, "\\Crispage\\Response\\APIPermissions", true)) {
http_response_code(500); http_response_code(500);
header("Content-Type: application/json"); header("Content-Type: application/json");

View File

@ -16,7 +16,7 @@
use \Crispage\CrispageException; use \Crispage\CrispageException;
use \Crispage\Utils\URIUtils; use \Crispage\Utils\URIUtils;
use \Crispage\Asset; use \Crispage\Framework\Asset;
class AssetDeleteAction extends \Crispage\Framework\Action { class AssetDeleteAction extends \Crispage\Framework\Action {
public static function getExtensionInfo(): array { public static function getExtensionInfo(): array {
@ -33,11 +33,11 @@
public function run(): void { public function run(): void {
// Get class name // Get class name
$this->data["classname"] = strval( $this->data["classname"] = strval(
$this->app->request->params["classname"] ?? "\\Crispage\\Asset" $this->app->request->params["classname"] ?? "\\Crispage\\Framework\\Asset"
); );
if ( if (
!class_exists($this->data["classname"]) || !class_exists($this->data["classname"]) ||
!is_a($this->data["classname"], "\\Crispage\\Asset", true) !is_a($this->data["classname"], "\\Crispage\\Framework\\Asset", true)
) { ) {
$this->app->handleException( $this->app->handleException(
new CrispageException( new CrispageException(

View File

@ -16,7 +16,7 @@
use \Crispage\CrispageException; use \Crispage\CrispageException;
use \Crispage\Utils\URIUtils; use \Crispage\Utils\URIUtils;
use \Crispage\Asset; use \Crispage\Framework\Asset;
class AssetEditorAction extends \Crispage\Framework\Action { class AssetEditorAction extends \Crispage\Framework\Action {
public static function getExtensionInfo(): array { public static function getExtensionInfo(): array {
@ -33,12 +33,12 @@
public function run(): void { public function run(): void {
// Get class name // Get class name
$this->data["classname"] = strval( $this->data["classname"] = strval(
$this->app->request->params["classname"] ?? "\\Crispage\\Asset" $this->app->request->params["classname"] ?? "\\Crispage\\Framework\\Asset"
); );
if ( if (
!class_exists($this->data["classname"]) || !class_exists($this->data["classname"]) ||
!is_a($this->data["classname"], "\\Crispage\\Asset", true) !is_a($this->data["classname"], "\\Crispage\\Framework\\Asset", true)
) { ) {
$this->app->handleException( $this->app->handleException(
new CrispageException( new CrispageException(

View File

@ -32,11 +32,11 @@
public function run(): void { public function run(): void {
// Get class name // Get class name
$this->data["classname"] = strval( $this->data["classname"] = strval(
$this->app->request->params["classname"] ?? "\\Crispage\\Asset" $this->app->request->params["classname"] ?? "\\Crispage\\Framework\\Asset"
); );
if ( if (
!class_exists($this->data["classname"]) || !class_exists($this->data["classname"]) ||
!is_a($this->data["classname"], "\\Crispage\\Asset", true) !is_a($this->data["classname"], "\\Crispage\\Framework\\Asset", true)
) { ) {
$this->app->handleException( $this->app->handleException(
new CrispageException( new CrispageException(

View File

@ -16,7 +16,7 @@
use \Crispage\CrispageException; use \Crispage\CrispageException;
use \Crispage\Utils\URIUtils; use \Crispage\Utils\URIUtils;
use \Crispage\Asset; use \Crispage\Framework\Asset;
use \Crispage\Assets\Module; use \Crispage\Assets\Module;
class ModuleCreateAction extends \Crispage\Framework\Action { class ModuleCreateAction extends \Crispage\Framework\Action {
@ -54,7 +54,7 @@
// If classname given, create the module // If classname given, create the module
$component = strval($this->app->request->params["component"] ?? ""); $component = strval($this->app->request->params["component"] ?? "");
if (!empty($component)) { if (!empty($component)) {
$this->app->loadClass($component, "\Crispage\Framework\Component"); $this->app->loadClass($component, "\\Crispage\\Framework\\Component");
if (!is_a($component, "\Crispage\Framework\ModuleComponent", true)) { if (!is_a($component, "\Crispage\Framework\ModuleComponent", true)) {
$this->app->page->setPersistentMessage( $this->app->page->setPersistentMessage(
"invalid_module_component", "invalid_module_component",

View File

@ -16,7 +16,7 @@
use \Crispage\CrispageException; use \Crispage\CrispageException;
use \Crispage\Utils\URIUtils; use \Crispage\Utils\URIUtils;
use \Crispage\Asset; use \Crispage\Framework\Asset;
use \Crispage\Assets\User; use \Crispage\Assets\User;
class UserCreateAction extends \Crispage\Framework\Action { class UserCreateAction extends \Crispage\Framework\Action {

View File

@ -66,7 +66,7 @@
require_once ROOT . "/core/app/text/ShortcodeEngine.php"; require_once ROOT . "/core/app/text/ShortcodeEngine.php";
use \Crispage\Assets\Plugin; use \Crispage\Assets\Plugin;
use \Crispage\Framwork\PluginClass; use \Crispage\Framework\PluginClass;
require_once ROOT . "/core/app/framework/PluginClass.php"; require_once ROOT . "/core/app/framework/PluginClass.php";
require_once ROOT . "/core/app/utils/FileUtils.php"; require_once ROOT . "/core/app/utils/FileUtils.php";
@ -239,22 +239,29 @@
$this->dispatcher->trigger("crispage.initialized"); $this->dispatcher->trigger("crispage.initialized");
} }
public function loadClass(string $classname, string $type = "\Crispage\Framework\Component"): void { public function loadClass(string $classname, string $type, bool $shortnames = false): void {
// Return if already loaded // Return if already loaded
if (in_array($classname, $this->loadedClasses)) return; if (in_array($classname, $this->loadedClasses)) return;
// Assemble paths // Assemble paths
$pathend = preg_replace("/\\\\/", "/", $classname) . ".php"; $classpaths = Config::CLASS_PATHS[$type] ?? null;
$paths = Config::CLASS_PATHS[$type] ?? null; if (!$classpaths) {
if (!$paths) {
$this->handleException(new CrispageException( $this->handleException(new CrispageException(
"Unknown class type $type", 500 "Unknown class type $type", 500
)); ));
} }
$fullpaths = array_map(fn(string $p): string => ROOT . $p . $pathend, $paths);
$name = preg_replace("/\\\\/", "/", $classname) . ".php";
$paths = [];
foreach ($classpaths as $cpath) $paths[] = ROOT . $cpath . $name;
if ($shortnames) {
foreach ($classpaths as $cpath)
$paths[] = ROOT . $cpath . "/" . basename($name);
}
// Try each path and return if class loaded // Try each path and return if class loaded
foreach ($fullpaths as $path) { foreach ($paths as $path) {
if (!file_exists($path)) continue; if (!file_exists($path)) continue;
include_once $path; include_once $path;
if (class_exists($classname)) { if (class_exists($classname)) {
@ -427,6 +434,7 @@
} }
public function handleException(\Throwable $exception): void { public function handleException(\Throwable $exception): void {
//throw $exception;
if ($this->handlingException) return; if ($this->handlingException) return;
$this->handlingException = true; $this->handlingException = true;

View File

@ -14,10 +14,11 @@
defined("ROOT") or die(); defined("ROOT") or die();
require_once ROOT . "/core/app/assets/Asset.php"; use \Crispage\Framework\Asset;
require_once ROOT . "/core/app/framework/Asset.php";
// Include default assets // Include default assets
require_once ROOT . "/core/app/assets/class/Article.php"; /*require_once ROOT . "/core/app/assets/class/Article.php";
require_once ROOT . "/core/app/assets/class/Category.php"; require_once ROOT . "/core/app/assets/class/Category.php";
require_once ROOT . "/core/app/assets/class/Comment.php"; require_once ROOT . "/core/app/assets/class/Comment.php";
require_once ROOT . "/core/app/assets/class/Redirect.php"; require_once ROOT . "/core/app/assets/class/Redirect.php";
@ -26,7 +27,7 @@
require_once ROOT . "/core/app/assets/class/Module.php"; require_once ROOT . "/core/app/assets/class/Module.php";
require_once ROOT . "/core/app/assets/class/Plugin.php"; require_once ROOT . "/core/app/assets/class/Plugin.php";
require_once ROOT . "/core/app/assets/class/Role.php"; require_once ROOT . "/core/app/assets/class/Role.php";
require_once ROOT . "/core/app/assets/class/User.php"; require_once ROOT . "/core/app/assets/class/User.php";*/
use \Crispage\Framework\ApplicationFeature; use \Crispage\Framework\ApplicationFeature;
use \Crispage\Signaling\Receiver; use \Crispage\Signaling\Receiver;
@ -34,23 +35,28 @@
use \Crispage\Text\ShortcodeRenderer; use \Crispage\Text\ShortcodeRenderer;
class AssetManager extends ApplicationFeature { class AssetManager extends ApplicationFeature {
private array $registeredClasses = []; public const CORE_CLASSES = [
private int $nextTempId = -2147483648; "\\Crispage\\Assets\\ContentAsset",
"\\Crispage\\Assets\\Article",
"\\Crispage\\Assets\\Category",
"\\Crispage\\Assets\\Comment",
"\\Crispage\\Assets\\Redirect",
"\\Crispage\\Assets\\Menu",
"\\Crispage\\Assets\\MenuItem",
"\\Crispage\\Assets\\Module",
"\\Crispage\\Assets\\Plugin",
"\\Crispage\\Assets\\Role",
"\\Crispage\\Assets\\User"
];
private int $nextTempId = PHP_INT_MIN;
public function __construct(\Crispage $app) { public function __construct(\Crispage $app) {
parent::__construct($app); parent::__construct($app);
// Register default assets // Load default asset classes
$this->registerClass("\\Crispage\\Assets\\Article"); foreach (self::CORE_CLASSES as $class)
$this->registerClass("\\Crispage\\Assets\\Category"); $this->app->loadClass($class, "\\Crispage\\Framework\\Asset", true);
$this->registerClass("\\Crispage\\Assets\\Comment");
$this->registerClass("\\Crispage\\Assets\\Redirect");
$this->registerClass("\\Crispage\\Assets\\Menu");
$this->registerClass("\\Crispage\\Assets\\MenuItem");
$this->registerClass("\\Crispage\\Assets\\Module");
$this->registerClass("\\Crispage\\Assets\\Plugin");
$this->registerClass("\\Crispage\\Assets\\Role");
$this->registerClass("\\Crispage\\Assets\\User");
// Automatically update routes // Automatically update routes
$this->app->dispatcher->register( $this->app->dispatcher->register(
@ -93,22 +99,6 @@
)); ));
} }
public function getRegisteredClasses(): array {
return $this->registeredClasses;
}
public function registerClass(string $classname): void {
if (!in_array($classname, $this->registeredClasses))
$this->registeredClasses[] = $classname;
}
public function unregisterClass(string $classname): void {
$this->registeredClasses = array_filter(
$this->registeredClasses,
fn(string $cn): bool => $cn != $classname
);
}
public function getTable(string $classname): string { public function getTable(string $classname): string {
return "assets_" . substr(md5($classname), 0, 8) . @end(explode("\\", $classname)); return "assets_" . substr(md5($classname), 0, 8) . @end(explode("\\", $classname));
} }
@ -129,7 +119,7 @@
public function createTable(string $classname): bool { public function createTable(string $classname): bool {
// Error if class is not an asset // Error if class is not an asset
if (!is_a($classname, "\\Crispage\\Asset", true)) return false; if (!is_a($classname, "\\Crispage\\Framework\\Asset", true)) return false;
// Get table name // Get table name
$table = $this->getTable($classname); $table = $this->getTable($classname);
@ -265,7 +255,7 @@
// Error if class is not an asset // Error if class is not an asset
if ( if (
!class_exists($classname) || !class_exists($classname) ||
!is_a($classname, "\\Crispage\\Asset", true) !is_a($classname, "\\Crispage\\Framework\\Asset", true)
) { ) {
$this->app->handleException( $this->app->handleException(
new CrispageException("$classname is not an Asset", 500) new CrispageException("$classname is not an Asset", 500)

View File

@ -14,8 +14,6 @@
defined("ROOT") or die(); defined("ROOT") or die();
require_once ROOT . "/core/app/assets/class/ContentAsset.php";
class Article extends ContentAsset { class Article extends ContentAsset {
public static function getNames(): array { public static function getNames(): array {
return ["{%ARTICLE}", "{%ARTICLES}"]; return ["{%ARTICLE}", "{%ARTICLES}"];

View File

@ -14,8 +14,6 @@
defined("ROOT") or die(); defined("ROOT") or die();
require_once ROOT . "/core/app/assets/class/ContentAsset.php";
class Category extends ContentAsset { class Category extends ContentAsset {
public static function getNames(): array { public static function getNames(): array {
return ["{%CATEGORY}", "{%CATEGORIES}"]; return ["{%CATEGORY}", "{%CATEGORIES}"];

View File

@ -16,7 +16,7 @@
use \Crispage\Auth\CorePermissions; use \Crispage\Auth\CorePermissions;
class Comment extends \Crispage\Asset { class Comment extends \Crispage\Framework\Asset {
public const HIDDEN = -1; public const HIDDEN = -1;
public const PENDING_APPROVAL = 0; public const PENDING_APPROVAL = 0;
public const APPROVED = 1; public const APPROVED = 1;

View File

@ -14,13 +14,11 @@
defined("ROOT") or die(); defined("ROOT") or die();
require_once ROOT . "/core/app/assets/Asset.php";
use \Crispage\Auth\CorePermissions; use \Crispage\Auth\CorePermissions;
use \Crispage\Caching\CacheEngine; use \Crispage\Caching\CacheEngine;
use \Crispage\Caching\CacheEntry; use \Crispage\Caching\CacheEntry;
abstract class ContentAsset extends \Crispage\Asset { abstract class ContentAsset extends \Crispage\Framework\Asset {
public const UNPUBLISHED = 0; public const UNPUBLISHED = 0;
public const PUBLISHED = 1; public const PUBLISHED = 1;

View File

@ -16,7 +16,7 @@
use \Crispage\Auth\CorePermissions; use \Crispage\Auth\CorePermissions;
class Menu extends \Crispage\Asset { class Menu extends \Crispage\Framework\Asset {
public static function getNames(): array { public static function getNames(): array {
return ["{%MENU}", "{%MENUS}"]; return ["{%MENU}", "{%MENUS}"];
} }

View File

@ -16,7 +16,7 @@
use \Crispage\Auth\CorePermissions; use \Crispage\Auth\CorePermissions;
class MenuItem extends \Crispage\Asset { class MenuItem extends \Crispage\Framework\Asset {
public static function getNames(): array { public static function getNames(): array {
return ["{%MENU_ITEM}", "{%MENU_ITEMS}"]; return ["{%MENU_ITEM}", "{%MENU_ITEMS}"];
} }

View File

@ -16,7 +16,7 @@
use \Crispage\Auth\CorePermissions; use \Crispage\Auth\CorePermissions;
class Module extends \Crispage\Asset { class Module extends \Crispage\Framework\Asset {
public static function getNames(): array { public static function getNames(): array {
return ["{%MODULE}", "{%MODULES}"]; return ["{%MODULE}", "{%MODULES}"];
} }

View File

@ -16,7 +16,7 @@
use \Crispage\Auth\CorePermissions; use \Crispage\Auth\CorePermissions;
class Plugin extends \Crispage\Asset { class Plugin extends \Crispage\Framework\Asset {
public static function getNames(): array { public static function getNames(): array {
return ["{%PLUGIN}", "{%PLUGINS}"]; return ["{%PLUGIN}", "{%PLUGINS}"];
} }

View File

@ -16,7 +16,7 @@
use \Crispage\Auth\CorePermissions; use \Crispage\Auth\CorePermissions;
class Redirect extends \Crispage\Asset { class Redirect extends \Crispage\Framework\Asset {
public static function getNames(): array { public static function getNames(): array {
return ["{%REDIRECT}", "{%REDIRECTS}"]; return ["{%REDIRECT}", "{%REDIRECTS}"];
} }

View File

@ -14,11 +14,9 @@
defined("ROOT") or die(); defined("ROOT") or die();
require_once ROOT . "/core/app/assets/Asset.php";
use \Crispage\Auth\CorePermissions; use \Crispage\Auth\CorePermissions;
class Role extends \Crispage\Asset { class Role extends \Crispage\Framework\Asset {
public static function getNames(): array { public static function getNames(): array {
return ["{%ROLE}", "{%ROLES}"]; return ["{%ROLE}", "{%ROLES}"];
} }

View File

@ -14,11 +14,9 @@
defined("ROOT") or die(); defined("ROOT") or die();
require_once ROOT . "/core/app/assets/Asset.php";
use \Crispage\Auth\CorePermissions; use \Crispage\Auth\CorePermissions;
class User extends \Crispage\Asset { class User extends \Crispage\Framework\Asset {
public const DISABLED = -1; public const DISABLED = -1;
public const UNCONFIRMED= 0; public const UNCONFIRMED= 0;
public const CONFIRMED = 1; public const CONFIRMED = 1;

View File

@ -10,7 +10,7 @@
(at your option) any later version. (at your option) any later version.
*/ */
namespace Crispage; namespace Crispage\Framework;
defined("ROOT") or die(); defined("ROOT") or die();

View File

@ -15,7 +15,7 @@
defined("ROOT") or die(); defined("ROOT") or die();
use \Crispage\Config; use \Crispage\Config;
use \Crispage\Asset; use \Crispage\Framework\Asset;
use \Crispage\Framework\ApplicationFeature; use \Crispage\Framework\ApplicationFeature;
require_once ROOT . "/core/app/request/CoreRoutes.php"; require_once ROOT . "/core/app/request/CoreRoutes.php";

View File

@ -27,7 +27,7 @@
public function __construct(\Crispage $app, array $data) { public function __construct(\Crispage $app, array $data) {
if ($data["asset"] ?? null) { if ($data["asset"] ?? null) {
$app->loadClass($data["asset"]->component, "\Crispage\Framework\Component"); $app->loadClass($data["asset"]->component, "\\Crispage\\Framework\\Component");
$data["fields"] = $data["asset"]->component::getModuleFields(); $data["fields"] = $data["asset"]->component::getModuleFields();
} else $data["fields"] = []; } else $data["fields"] = [];

View File

@ -14,7 +14,7 @@
defined("ROOT") or die(); defined("ROOT") or die();
use \Crispage\Asset; use \Crispage\Framework\Asset;
use \Crispage\Assets\ContentAsset; use \Crispage\Assets\ContentAsset;
class NewContentComponent extends \Crispage\Framework\Component class NewContentComponent extends \Crispage\Framework\Component

View File

@ -14,7 +14,7 @@
defined("ROOT") or die(); defined("ROOT") or die();
use \Crispage\Asset; use \Crispage\Framework\Asset;
use \Crispage\Assets\ContentAsset; use \Crispage\Assets\ContentAsset;
class PopularContentComponent extends \Crispage\Framework\Component class PopularContentComponent extends \Crispage\Framework\Component