mirror of
https://github.com/slawkens/myaac.git
synced 2025-04-26 01:09:21 +02:00
feat: admin-pages (can add admin pages through plugins)
Also possibility to overwrite default myaac admin pages
This commit is contained in:
parent
6844f4392a
commit
ceaa0639e6
@ -1,6 +1,8 @@
|
||||
<?php
|
||||
|
||||
// few things we'll need
|
||||
use MyAAC\Plugins;
|
||||
|
||||
require '../common.php';
|
||||
|
||||
const ADMIN_PANEL = true;
|
||||
@ -42,15 +44,21 @@ if(!$logged || !admin()) {
|
||||
$page = 'login';
|
||||
}
|
||||
|
||||
// include our page
|
||||
$file = __DIR__ . '/pages/' . $page . '.php';
|
||||
if(!@file_exists($file)) {
|
||||
if (str_contains($page, 'plugins/')) {
|
||||
$file = BASE . $page;
|
||||
}
|
||||
else {
|
||||
$page = '404';
|
||||
$file = SYSTEM . 'pages/404.php';
|
||||
$pluginsAdminPages = Plugins::getAdminPages();
|
||||
if(isset($pluginsAdminPages[$page]) && file_exists(BASE . $pluginsAdminPages[$page])) {
|
||||
$file = BASE . $pluginsAdminPages[$page];
|
||||
}
|
||||
else {
|
||||
// include our page
|
||||
$file = __DIR__ . '/pages/' . $page . '.php';
|
||||
if(!@file_exists($file)) {
|
||||
if (str_contains($page, 'plugins/')) {
|
||||
$file = BASE . $page;
|
||||
}
|
||||
else {
|
||||
$page = '404';
|
||||
$file = SYSTEM . 'pages/404.php';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -48,6 +48,8 @@
|
||||
"pages": true,
|
||||
"pagesSubFolders": false,
|
||||
"commands": true,
|
||||
"themes": true
|
||||
"themes": true,
|
||||
"admin-pages": true,
|
||||
"admin-pages-sub-folders": true,
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,81 @@ class Plugins {
|
||||
private static $error = null;
|
||||
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()
|
||||
{
|
||||
$cache = Cache::getInstance();
|
||||
|
Loading…
x
Reference in New Issue
Block a user