feat: admin-pages (can add admin pages through plugins)

Also possibility to overwrite default myaac admin pages
This commit is contained in:
slawkens 2025-04-18 13:57:53 +02:00
parent 6844f4392a
commit ceaa0639e6
3 changed files with 95 additions and 10 deletions

View File

@ -1,6 +1,8 @@
<?php <?php
// few things we'll need // few things we'll need
use MyAAC\Plugins;
require '../common.php'; require '../common.php';
const ADMIN_PANEL = true; const ADMIN_PANEL = true;
@ -42,6 +44,11 @@ if(!$logged || !admin()) {
$page = 'login'; $page = 'login';
} }
$pluginsAdminPages = Plugins::getAdminPages();
if(isset($pluginsAdminPages[$page]) && file_exists(BASE . $pluginsAdminPages[$page])) {
$file = BASE . $pluginsAdminPages[$page];
}
else {
// include our page // include our page
$file = __DIR__ . '/pages/' . $page . '.php'; $file = __DIR__ . '/pages/' . $page . '.php';
if(!@file_exists($file)) { if(!@file_exists($file)) {
@ -53,6 +60,7 @@ if(!@file_exists($file)) {
$file = SYSTEM . 'pages/404.php'; $file = SYSTEM . 'pages/404.php';
} }
} }
}
ob_start(); ob_start();
if($hooks->trigger(HOOK_ADMIN_BEFORE_PAGE)) { if($hooks->trigger(HOOK_ADMIN_BEFORE_PAGE)) {

View File

@ -48,6 +48,8 @@
"pages": true, "pages": true,
"pagesSubFolders": false, "pagesSubFolders": false,
"commands": true, "commands": true,
"themes": true "themes": true,
"admin-pages": true,
"admin-pages-sub-folders": true,
} }
} }

View File

@ -11,6 +11,81 @@ class Plugins {
private static $error = null; private static $error = null;
private static $plugin_json = []; private static $plugin_json = [];
public static function getAdminPages()
{
return Cache::remember('plugins_admin_pages', 10 * 60, function () {
$adminPages = [];
foreach(self::getAllPluginsJson() as $plugin) {
if (!self::getAutoLoadOption($plugin, 'admin-pages', true)) {
continue;
}
$adminPagesDefaultPriority = 1000;
if (isset($plugin['admin-pages-default-priority'])) {
$adminPagesDefaultPriority = $plugin['admin-pages-default-priority'];
}
//
// Get all plugins/*/admin-pages/*.php pages
//
$pluginAdminPages = glob(PLUGINS . $plugin['filename'] . '/admin-pages/*.php');
foreach ($pluginAdminPages as $file) {
$file = str_replace(PLUGINS, 'plugins/', $file);
$name = pathinfo($file, PATHINFO_FILENAME);
$adminPages[] = ['name' => $name, 'file' => $file, 'priority' => $adminPagesDefaultPriority];
}
if (self::getAutoLoadOption($plugin, 'admin-pages-sub-folders', true)) {
//
// Get all plugins/*/admin-pages/subFolder/*.php pages
//
$pluginAdminPagesSubFolders = glob(PLUGINS . $plugin['filename'] . '/admin-pages/*', GLOB_ONLYDIR);
foreach ($pluginAdminPagesSubFolders as $folder) {
$folderName = pathinfo($folder, PATHINFO_FILENAME);
$subFiles = glob(PLUGINS . $plugin['filename'] . '/admin-pages/' . $folderName . '/*.php');
foreach ($subFiles as $file) {
$file = str_replace(PLUGINS, 'plugins/', $file);
$name = $folderName . '/' . pathinfo($file, PATHINFO_FILENAME);
$adminPages[] = ['name' => $name, 'file' => $file, 'priority' => $adminPagesDefaultPriority];
}
$subFolders = glob(PLUGINS . $plugin['filename'] . '/admin-pages/' . $folderName . '/*', GLOB_ONLYDIR);
foreach ($subFolders as $subFolder) {
$subFolderName = pathinfo($subFolder, PATHINFO_FILENAME);
$subSubFiles = glob(PLUGINS . $plugin['filename'] . '/admin-pages/' . $folderName . '/' . $subFolderName . '/*.php');
foreach ($subSubFiles as $subSubFile) {
$subSubFile = str_replace(PLUGINS, 'plugins/', $subSubFile);
$name = $folderName . '/' . $subFolderName . '/' . pathinfo($subSubFile, PATHINFO_FILENAME);
$adminPages[] = ['name' => $name, 'file' => $subSubFile, 'priority' => $adminPagesDefaultPriority];;
}
}
}
}
}
usort($adminPages, function ($a, $b)
{
if ($a['priority'] == $b['priority']) {
return 0;
}
return ($a['priority'] > $b['priority']) ? -1 : 1;
});
$ret = [];
foreach ($adminPages as $value) {
$ret[$value['name']] = $value['file'];
}
return $ret;
});
}
public static function getRoutes() public static function getRoutes()
{ {
$cache = Cache::getInstance(); $cache = Cache::getInstance();