File "Admin.php"
Full Path: /home/warrior1/public_html/plugins/file-manager/backend/app/Views/Admin.php
File size: 13.81 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace BitApps\FM\Views;
use BitApps\FM\Config;
use function BitApps\FM\Functions\view;
use BitApps\FM\Plugin;
use BitApps\WPKit\Hooks\Hooks;
use BitApps\WPKit\Utils\Capabilities;
/**
* The admin Layout and page handler class.
*/
class Admin
{
private $_reviewBlock;
public function __construct()
{
// Hooks::addAction('in_admin_header', [$this, 'removeAdminNotices']);
Hooks::addAction('admin_menu', [$this, 'sideBarMenuItem']);
Hooks::addAction('admin_notices', [$this, 'adminNotice']);
Hooks::addFilter(Config::withPrefix('localized_script'), [$this, 'filterConfigVariable']);
Hooks::addFilter('script_loader_tag', [$this, 'filterScriptTag'], 0, 3);
/*
* // For testing --
* Hooks::addFilter('can_access_fm_home', [$this, 'filterCapabilityForHomeMenu']);
*/
}
/**
* Register the admin left sidebar menu item.
*/
public function sideBarMenuItem()
{
$menus = Hooks::applyFilter(Config::withPrefix('admin_sidebar_menu'), $this->sideBarMenus());
global $submenu;
foreach ($menus as $menu) {
if (isset($menu['capability']) && Capabilities::check($menu['capability'])) {
if ($menu['type'] == 'menu') {
add_menu_page(
$menu['title'],
$menu['name'],
$menu['capability'],
$menu['slug'],
$menu['callback'],
$menu['icon'],
$menu['position']
);
} elseif (isset($menu['callback'])) {
add_submenu_page(
$menu['parent'],
$menu['title'],
$menu['name'],
$menu['capability'],
$menu['slug'],
$menu['callback']
);
} else {
$submenu[$menu['parent']][] = [
$menu['name'],
$menu['capability'],
'admin.php?page=' . $menu['slug'],
];
}
}
}
}
public function removeAdminNotices()
{
// phpcs:disable
global $plugin_page, $wp_filter;
if (empty($plugin_page) || strpos($plugin_page, Config::SLUG) === false) {
return;
}
// phpcs:enable
remove_all_actions('admin_notices');
remove_all_actions('all_admin_notices');
$this->adminNotice();
}
public function filterConfigVariable($config)
{
if (Capabilities::check('list_users')) {
$config['users'] = Plugin::instance()->permissions()->allUsers();
}
if (Capabilities::check('install_plugins')) {
$config['sys_info'] = $this->getSystemInfo();
}
if ($adBanner = Config::adBanner()) {
$config['adBanner'] = $adBanner;
}
return (array) $config + [
'nonce' => wp_create_nonce(Config::withPrefix('nonce')),
'baseURL' => Config::get('ADMIN_URL') . 'admin.php?page=' . Config::SLUG . '#elf_l1_Lw/',
'pluginSlug' => Config::SLUG,
'rootURL' => Config::get('ROOT_URI'),
'assetsURL' => Config::get('ASSET_URI'),
'routePrefix' => Config::VAR_PREFIX,
'plugin_dir' => BFM_ROOT_DIR,
'plugin_url' => BFM_ROOT_URL,
'action' => Config::withPrefix('connector'),
'options' => Plugin::instance()->preferences()->finderOptions(),
];
}
public function enqueueAssets()
{
$preferences = Plugin::instance()->preferences();
wp_enqueue_style('bfm-jquery-ui-css');
if (\in_array($preferences->getTheme(), ['default', 'bootstrap'])) {
wp_enqueue_style(Config::SLUG . 'elfinder-css');
wp_enqueue_style(Config::SLUG . 'theme-css');
}
wp_enqueue_script(Config::SLUG . 'elfinder-script');
wp_enqueue_script(Config::SLUG . 'elfinder-editor-script');
wp_enqueue_script(Config::SLUG . 'elfinder-lang', $preferences->getLangUrl(), [Config::SLUG . 'elfinder-script']);
if (Config::isDev()) {
$port = file_get_contents(Config::get('BASEDIR') . '/port');
$devUrl = 'http://localhost:' . $port;
wp_enqueue_script(
Config::SLUG . '-MODULE-vite-client-helper',
$devUrl . '/config/devHotModule.js',
[],
null
);
wp_enqueue_script(Config::SLUG . '-MODULE-vite-client', $devUrl . '/@vite/client', [], null);
wp_enqueue_script(Config::SLUG . '-MODULE-index', $devUrl . '/main.tsx', [], null);
} else {
wp_enqueue_script(
Config::SLUG . '-MODULE-main',
Config::get('ASSET_JS_URI') . '/main.' . Config::VERSION . '.js',
[Config::SLUG . 'elfinder-script']
);
wp_enqueue_style(
Config::SLUG . '-style-main',
Config::get('ASSET_JS_URI') . '/main.' . Config::VERSION . '.css'
);
}
}
public function dashboard()
{
$this->enqueueAssets();
// phpcs:ignore
echo "<div id='bit-fm-root'></div>";
}
public function homePage()
{
return view('admin.index');
}
public function settingsPage()
{
return view('admin.settings');
}
public function logsPage()
{
return view('admin.logs');
}
public function systemInfoPage()
{
return view('admin.utility');
}
public function permissionsPage()
{
return view('admin.permission_system');
}
/**
* Adds admin notices to the admin page
*
* @return void
* */
public function adminNotice()
{
// DISALLOW_FILE_EDIT Macro checking
if (\defined('DISALLOW_FILE_EDIT') && DISALLOW_FILE_EDIT) {
?>
<div class='update-nag fm-error notice notice-success is-dismissible'>
<b>DISALLOW_FILE_EDIT</b> <?php esc_html_e('is set to', 'file-manager'); ?>
<b>TRUE</b>.
<?php esc_html_e('You will not be able to edit files with', 'file-manager'); ?>
<a href='admin.php?page=file-manager#/settings'>Bit File Manager</a>.
<?php esc_html_e('Please set', 'file-manager'); ?>
<b>DISALLOW_FILE_EDIT</b> <?php esc_html_e('to', 'file-manager'); ?>
<b>FALSE</b>
</div>
<style>
.fm-error {
border-left: 4px solid red;
display: block;
}
</style>
<?php
}
}
public function filterCapabilityForHomeMenu()
{
if (Plugin::instance()->permissions()->isCurrentUserHasPermission()
|| Plugin::instance()->permissions()->isCurrentRoleHasPermission()
) {
return Plugin::instance()->permissions()->currentUserRole();
}
return false;
}
/**
* Modify script tags.
*
* @param string $html script tag
* @param mixed $handle
* @param mixed $href
*
* @return string new script tag
*/
public function filterScriptTag($html, $handle)
{
$newTag = $html;
if (str_contains($handle, Config::SLUG . '-MODULE')) {
$newTag = preg_replace('/<script /', '<script type="module" ', $newTag);
}
return $newTag;
}
private function getSystemInfo()
{
return [
'currentMediaDir' => esc_url(wp_upload_dir()['path']),
'phpVersion' => esc_html(PHP_VERSION),
'iniPath' => esc_html(php_ini_loaded_file()),
'uploadMaxFilesize' => esc_html(\ini_get('upload_max_filesize')),
'postMaxSize' => esc_html(\ini_get('post_max_size')),
'memoryLimit' => esc_html(\ini_get('memory_limit')),
'maxExecutionTime' => esc_html(\ini_get('max_execution_time')),
'ua' => esc_html($_SERVER['HTTP_USER_AGENT']),
'fileEditNotAllowed' => \defined('DISALLOW_FILE_EDIT') && DISALLOW_FILE_EDIT,
];
}
/**
* Provides menus for wordpress admin sidebar.
* should return an array of menus with the following structure:
* [
* 'type' => menu | submenu,
* 'name' => 'Name of menu will shown in sidebar',
* 'capability' => 'capability required to access menu',
* 'slug' => 'slug of menu after ?page=',.
*
* 'title' => 'page title will be shown in browser title if type is menu',
* 'callback' => 'function to call when menu is clicked',
* 'icon' => 'icon to display in menu if menu type is menu',
* 'position' => 'position of menu in sidebar if menu type is menu',
*
* 'parent' => 'parent slug if submenu'
* ]
*
* @return array<string,array{type:string,title:string,name:string,slug:string,callback:callable}>
*/
private function sideBarMenus()
{
return [
'Bit File Manager' => [
'type' => 'menu',
'title' => __('Dashboard | Bit File Manager', 'file-manager'),
'name' => __('Bit File Manager', 'file-manager'),
'capability' => Hooks::applyFilter('can_access_fm_home', 'manage_options'),// fm_capabilities
'slug' => Config::SLUG,
'callback' => [$this, 'dashboard'],
'icon' => 'data:image/svg+xml;base64,' . base64_encode('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 34 30"><g fill="#606060"><path d="M13.54 24.53a7.39 7.39 0 0 1-3.34-9.42Zm5.64.54a7.46 7.46 0 0 1-2.18.32 7.16 7.16 0 0 1-2.28-.39L17 19Z"/><path d="M20.53 14c0 .78 2.28 1.87 1 5.37l-1 2.73L18 14.63h1v-.72h-4.54v.72h1l1.15 3.26-1.49 4.25-2.66-7.51h1v-.72h-2.61a7.4 7.4 0 0 1 11.22-1.28H22A1.42 1.42 0 0 0 20.53 14Zm3.86 4a7.4 7.4 0 0 1-3.92 6.53L23 17.41a7.4 7.4 0 0 0 .25-.7l.11-.32a5.41 5.41 0 0 0 .09-2 7.38 7.38 0 0 1 .94 3.61Z"/><path d="M32.82.76H18.64a1 1 0 0 0-.83.46l-1.6 2.5-2.32 3.9a1 1 0 0 1-.89.48H1.19a1 1 0 0 0-1 1v15c0 2.86 1.82 5.17 4 5.17h25.52c2.23 0 4-2.32 4-5.18l.06-22.32a1 1 0 0 0-.95-1.01ZM17 26.21A8.21 8.21 0 1 1 25.21 18 8.22 8.22 0 0 1 17 26.21Z"/><path d="M20.53 14c0 .78 2.28 1.87 1 5.37l-1 2.73L18 14.63h1v-.72h-4.54v.72h1l1.15 3.26-1.49 4.25-2.66-7.51h1v-.72h-2.61a7.4 7.4 0 0 1 11.22-1.28H22A1.42 1.42 0 0 0 20.53 14Zm-6.99 10.53a7.39 7.39 0 0 1-3.34-9.42ZM24.39 18a7.4 7.4 0 0 1-3.92 6.53L23 17.41a7.4 7.4 0 0 0 .25-.7l.11-.32a5.41 5.41 0 0 0 .09-2 7.38 7.38 0 0 1 .94 3.61Z"/><path d="M19.18 25.07a7.46 7.46 0 0 1-2.18.32 7.16 7.16 0 0 1-2.28-.39L17 19Z"/><path d="M23.24 11.76a8.83 8.83 0 1 0-12.48 12.49 8.83 8.83 0 1 0 12.48-12.49ZM17 26.21A8.21 8.21 0 1 1 25.21 18 8.22 8.22 0 0 1 17 26.21Z"/></g></svg>'),
'position' => '2',
],
'Home' => [
'parent' => Config::SLUG,
'type' => 'submenu',
'title' => __('Dashboard | Bit File Manager', 'file-manager'),
'name' => __('Home', 'file-manager'),
'capability' => Hooks::applyFilter('bitapps_fm_can_access_home', 'manage_options'),
'slug' => Config::SLUG . '#elf_l1_Lw/',
'position' => '2',
],
'Logs' => [
'parent' => Config::SLUG,
'type' => 'submenu',
'name' => 'Logs',
'title' => __('Logs | Bit File Manager', 'file-manager'),
'capability' => Hooks::applyFilter('bitapps_fm_can_access_logs', 'install_plugins'),
'slug' => Config::SLUG . '#/logs',
],
'Settings' => [
'parent' => Config::SLUG,
'type' => 'submenu',
'name' => 'Settings',
'title' => __('Settings | Bit File Manager', 'file-manager'),
'capability' => Hooks::applyFilter('bitapps_fm_can_change_settings', 'install_plugins'),
'slug' => Config::SLUG . '#/settings',
],
'Permissions' => [
'parent' => Config::SLUG,
'type' => 'submenu',
'name' => 'Permissions',
'title' => __(
'Permissions - Sets permission for specific user or by user role | Bit File Manager',
'file-manager'
),
'capability' => Hooks::applyFilter('bitapps_fm_can_change_permissions', 'install_plugins'),
'slug' => Config::SLUG . '#/permissions',
],
'Support' => [
'parent' => Config::SLUG,
'type' => 'submenu',
'name' => 'Support',
'title' => __(
'Support | Bit File Manager',
'file-manager'
),
'capability' => Hooks::applyFilter('bitapps_fm_can_access_home', 'manage_options'),
'slug' => Config::SLUG . '#/support',
],
'System Information' => [
'parent' => Config::SLUG,
'type' => 'submenu',
'name' => 'System Information',
'title' => __(
'System Information | Bit File Manager',
'file-manager'
),
'capability' => Hooks::applyFilter('bitapps_fm_can_view_sys_info', 'install_plugins'),
'slug' => Config::SLUG . '#/system-info',
],
];
}
}