38217-vm/wp-content/plugins/mainwp/class/class-mainwp-menu.php
2026-02-05 17:08:59 +03:00

1443 lines
69 KiB
PHP

<?php
/**
* MainWP Main Menu
*
* Build & Render MainWP Main Menu.
*
* @package MainWP/Dashboard
*/
namespace MainWP\Dashboard;
/**
* Class MainWP_Menu
*
* @package MainWP\Dashboard
*/
class MainWP_Menu { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR.
/**
* Method get_class_name()
*
* Get Class Name.
*
* @return object
*/
public static function get_class_name() {
return __CLASS__;
}
/**
* Method get_instance().
*/
public static function get_instance() {
return new self();
}
/**
* MainWP_Menu constructor.
*
* Run each time the class is called.
* Define MainWP Main Menu Items.
*/
public function __construct() {
/**
* MainWP Disable Menus items array.
*
* @global object
*/
global $_mainwp_disable_menus_items;
// Init disable menu items, default is false.
// Use the MainWP Hook 'mainwp_main_menu_disable_menu_items' to disable menu items.
if ( null === $_mainwp_disable_menus_items ) {
$_mainwp_disable_menus_items = array(
// Compatible with old hooks.
'level_1' => array(
'not_set_this_level' => true,
),
'level_2' => array(
// 'mainwp_tab' - Do not hide this menu.
'UpdatesManage' => false,
'managesites' => false,
'ManageClients' => false,
'ManageGroups' => false,
'PostBulkManage' => false,
'PageBulkManage' => false,
'ThemesManage' => false,
'PluginsManage' => false,
'UserBulkManage' => false,
'ManageBackups' => false,
'Settings' => false,
'Extensions' => false,
'ServerInformation' => false,
),
// Compatible with old hooks.
'level_3' => array(),
);
}
}
/**
* Method init_mainwp_menus()
*
* Init MainWP menus.
*
* @uses \MainWP\Dashboard\MainWP_System_Utility::is_admin()
* @uses \MainWP\Dashboard\MainWP_Updates::init_menu()
* @uses \MainWP\Dashboard\MainWP_Manage_Sites::init_menu()
* @uses \MainWP\Dashboard\MainWP_Post::init_menu()
* @uses \MainWP\Dashboard\MainWP_Page::init_menu()
* @uses \MainWP\Dashboard\MainWP_Themes::init_menu()
* @uses \MainWP\Dashboard\MainWP_Plugins::init_menu()
* @uses \MainWP\Dashboard\MainWP_User::init_menu()
* @uses \MainWP\Dashboard\MainWP_Manage_Backups::init_menu()
* @uses \MainWP\Dashboard\MainWP_Manage_Groups::init_menu()
* @uses \MainWP\Dashboard\MainWP_Monitoring::init_menu()
* @uses \MainWP\Dashboard\MainWP_Settings::init_menu()
* @uses \MainWP\Dashboard\MainWP_Extensions::init_menu()
* @uses \MainWP\Dashboard\MainWP_Bulk_Update_Admin_Passwords::init_menu()
*/
public static function init_mainwp_menus() { // phpcs:ignore -- NOSONAR - complex method. Current complexity is the only way to achieve desired results, pull request solutions appreciated.
if ( MainWP_System_Utility::is_admin() ) {
$menus_items = array();
// Manage Sites.
$menus_items[] = array(
'slug' => 'managesites',
'menu_level' => 2,
'menu_rights' => array(
'dashboard' => array(
'add_sites',
'edit_sites',
'delete_sites',
'access_individual_dashboard',
'access_wpadmin_on_child_sites',
'manage_security_issues',
'test_connection',
'manage_groups',
'manage_uptime_monitoring',
),
),
'init_menu_callback' => array( MainWP_Manage_Sites::class, 'init_menu' ),
'leftbar_order' => 1,
);
// Manage Clients.
$menus_items[] = array(
'slug' => 'ManageClients',
'menu_level' => 2,
'menu_rights' => array(
'dashboard' => array(
'manage_clients',
),
),
'init_menu_callback' => array( MainWP_Client::class, 'init_menu' ),
'leftbar_order' => 2,
);
// Manage Tags.
$menus_items[] = array(
'slug' => 'ManageGroups',
'menu_level' => 2,
'menu_rights' => array(
'dashboard' => array(
'manage_groups',
),
),
'init_menu_callback' => array( MainWP_Manage_Groups::class, 'init_menu' ),
);
// Manage Updates.
$menus_items[] = array(
'slug' => 'UpdatesManage',
'menu_level' => 2,
'menu_rights' => array(
'dashboard' => array(
'update_wordpress',
'update_plugins',
'update_themes',
'update_translations',
'ignore_unignore_updates',
'trust_untrust_updates',
),
),
'init_menu_callback' => array( MainWP_Updates::class, 'init_menu' ),
);
// Manage Plugins.
$menus_items[] = array(
'slug' => 'PluginsManage',
'menu_level' => 2,
'menu_rights' => array(
'dashboard' => array(
'install_plugins',
'delete_plugins',
'activate_deactivate_plugins',
),
),
'init_menu_callback' => array( MainWP_Plugins::class, 'init_menu' ),
);
// Manage Themes.
$menus_items[] = array(
'slug' => 'ThemesManage',
'menu_level' => 2,
'menu_rights' => array(
'dashboard' => array(
'install_themes',
'delete_themes',
'activate_deactivate_themes',
),
),
'init_menu_callback' => array( MainWP_Themes::class, 'init_menu' ),
);
// Manage Users.
$menus_items[] = array(
'slug' => 'UserBulkManage',
'menu_level' => 2,
'menu_rights' => array(
'dashboard' => array(
'manage_users',
),
),
'init_menu_callback' => array( MainWP_User::class, 'init_menu' ),
);
// Manage Posts.
$menus_items[] = array(
'slug' => 'PostBulkManage',
'menu_level' => 2,
'menu_rights' => array(
'dashboard' => array(
'manage_posts',
),
),
'init_menu_callback' => array( MainWP_Post::class, 'init_menu' ),
);
// Manage Pages.
$menus_items[] = array(
'slug' => 'PageBulkManage',
'menu_level' => 2,
'menu_rights' => array(
'dashboard' => array(
'manage_pages',
),
),
'init_menu_callback' => array( MainWP_Page::class, 'init_menu' ),
);
// Manage Backups.
$menus_items[] = array(
'slug' => 'ManageBackups',
'menu_level' => 2,
'menu_rights' => true,
'init_menu_callback' => array( MainWP_Manage_Backups::class, 'init_menu' ),
);
// Manage Settings.
$menus_items[] = array(
'slug' => 'Settings',
'menu_level' => 2,
'menu_rights' => array(
'dashboard' => array(
'manage_dashboard_settings',
),
),
'init_menu_callback' => array( MainWP_Settings::class, 'init_menu' ),
'leftbar_order' => 5,
);
// Manage RESTAPI.
$menus_items[] = array(
'slug' => 'RESTAPI',
'menu_level' => 2,
'menu_rights' => array(
'dashboard' => array(
'manage_dashboard_restapi',
),
),
'init_menu_callback' => array( MainWP_Rest_Api_Page::class, 'init_menu' ),
'leftbar_order' => 4,
);
// Manage Extensions.
$menus_items[] = array(
'slug' => 'Extensions',
'menu_level' => 2,
'menu_rights' => true,
'init_menu_callback' => array( MainWP_Extensions::class, 'init_menu' ),
'leftbar_order' => 3,
);
// Manage Admin Passwords.
$menus_items[] = array(
'slug' => 'UpdateAdminPasswords',
'menu_level' => 2,
'menu_rights' => array(
'dashboard' => array(
'manage_users',
),
),
'init_menu_callback' => array( MainWP_Bulk_Update_Admin_Passwords::class, 'init_menu' ),
);
// Monitoring Sites.
$menus_items[] = array(
'slug' => 'MonitoringSites',
'menu_level' => 3,
'menu_rights' => true,
'init_menu_callback' => array( MainWP_Monitoring::class, 'init_menu' ),
);
static::init_mainwp_menu_items( $menus_items, 'first' ); // do NOT change 'first', it related other hooks.
/**
* Action: mainwp_admin_menu
*
* Hooks main navigation menu items.
*
* @since 4.0
*/
do_action( 'mainwp_admin_menu' ); // to compatible.
$menus_items_low = array();
// Manage Admin Passwords.
$menus_items_low[] = array(
'slug' => 'ServerInformation',
'menu_level' => 2,
'menu_rights' => array(
'dashboard' => array(
'see_server_information',
),
),
'init_menu_callback' => array( MainWP_Server_Information::class, 'init_menu' ),
'leftbar_order' => 6,
);
static::init_mainwp_menu_items( $menus_items_low, 'second' );
}
}
/**
* Method init_mainwp_menu_items()
*
* Init MainWP menus.
*
* @param array $menus_items menus items.
* @param string $part menus part.
*/
public static function init_mainwp_menu_items( $menus_items, $part ) { //phpcs:ignore -- NOSONAR - complex method.
if ( ! is_array( $menus_items ) ) {
return;
}
$menus_items = apply_filters( 'mainwp_init_primary_menu_items', $menus_items, $part );
MainWP_Utility::array_sort_existed_keys( $menus_items, 'leftbar_order' );
foreach ( $menus_items as $item ) {
if ( ! is_array( $item ) ) {
continue;
}
$empty_level = true;
if ( ! empty( $item['slug'] ) && ! empty( $item['menu_level'] ) && ! empty( $item['init_menu_callback'] ) ) {
$empty_level = false;
}
if ( ! $empty_level && ! static::is_disable_menu_item( intval( $item['menu_level'] ), $item['slug'] ) && is_callable( $item['init_menu_callback'] ) ) {
$accessable = false;
if ( isset( $item['menu_rights'] ) ) {
$item_rights = $item['menu_rights'];
if ( is_array( $item_rights ) && ! empty( $item_rights ) ) {
foreach ( $item_rights as $group_right => $rights ) {
if ( is_array( $rights ) ) {
foreach ( $rights as $func_right ) {
if ( \mainwp_current_user_can( $group_right, $func_right ) ) {
$accessable = true;
break;
}
}
}
if ( $accessable ) {
break;
}
}
} elseif ( true === $item['menu_rights'] ) {
$accessable = true;
}
}
if ( $accessable ) {
call_user_func( $item['init_menu_callback'] );
}
}
}
}
/**
* Method init_sub_pages()
*
* Init subpages MainWP menus.
*
* @uses \MainWP\Dashboard\MainWP_Extensions::init_subpages_menu()
* @uses \MainWP\Dashboard\MainWP_Manage_Backups::init_subpages_menu()
* @uses \MainWP\Dashboard\MainWP_Manage_Sites::init_subpages_menu()
* @uses \MainWP\Dashboard\MainWP_Page::init_subpages_menu()
* @uses \MainWP\Dashboard\MainWP_Post::init_subpages_menu()
* @uses \MainWP\Dashboard\MainWP_Settings::init_subpages_menu()
* @uses \MainWP\Dashboard\MainWP_Themes::init_subpages_menu()
* @uses \MainWP\Dashboard\MainWP_Themes::init_subpages_menu()
* @uses \MainWP\Dashboard\MainWP_Plugins::init_subpages_menu()
* @uses \MainWP\Dashboard\MainWP_User::init_subpages_menu()
* @uses \MainWP\Dashboard\MainWP_Settings::init_subpages_menu()
*/
public static function init_sub_pages() {
if ( ! static::is_disable_menu_item( 2, 'PostBulkManage' ) ) {
MainWP_Post::init_subpages_menu();
}
if ( ! static::is_disable_menu_item( 2, 'managesites' ) ) {
MainWP_Manage_Sites::init_subpages_menu();
}
if ( ! static::is_disable_menu_item( 2, 'RESTAPI' ) ) {
MainWP_Rest_Api_Page::init_subpages_menu();
}
if ( ! static::is_disable_menu_item( 2, 'Settings' ) ) {
MainWP_Settings::init_subpages_menu();
}
if ( ! static::is_disable_menu_item( 2, 'Extensions' ) ) {
MainWP_Extensions::init_subpages_menu();
}
if ( ! static::is_disable_menu_item( 2, 'PageBulkManage' ) ) {
MainWP_Page::init_subpages_menu();
}
if ( ! static::is_disable_menu_item( 2, 'ThemesManage' ) ) {
MainWP_Themes::init_subpages_menu();
}
if ( ! static::is_disable_menu_item( 2, 'PluginsManage' ) ) {
MainWP_Plugins::init_subpages_menu();
}
if ( ! static::is_disable_menu_item( 2, 'UserBulkManage' ) ) {
MainWP_User::init_subpages_menu();
}
if ( ! static::is_disable_menu_item( 2, 'ManageClients' ) ) {
MainWP_Client::init_subpages_menu();
}
if ( get_option( 'mainwp_enableLegacyBackupFeature' ) && ! static::is_disable_menu_item( 2, 'ManageBackups' ) ) {
MainWP_Manage_Backups::init_subpages_menu();
}
if ( ! static::is_disable_menu_item( 2, 'Settings' ) ) {
MainWP_Settings::init_subpages_menu();
}
/**
* Action: mainwp_admin_menu_sub
*
* Hooks main navigation sub-menu items.
*
* @since 4.0
*/
do_action( 'mainwp_admin_menu_sub' );
if ( ! static::is_disable_menu_item( 2, 'ServerInformation' ) ) {
MainWP_Server_Information::init_subpages_menu();
}
}
/**
* Method set_menu_active_slugs
*
* @param string $item Menu item.
* @param string $active Menu active slug.
*/
public static function set_menu_active_slugs( $item, $active ) {
global $_mainwp_menu_active_slugs;
if ( ! is_array( $_mainwp_menu_active_slugs ) ) {
$_mainwp_menu_active_slugs = array();
}
$_mainwp_menu_active_slugs[ $item ] = $active;
}
/**
* Method init_subpages_left_menu
*
* Build left menu subpages array.
*
* @param array $subPages Array of SubPages.
* @param array $initSubpage Initial SubPage Array.
* @param string $parentKey Parent Menu Slug.
* @param mixed $slug SubPage Slug.
*/
public static function init_subpages_left_menu( $subPages, &$initSubpage, $parentKey, $slug ) { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR - complexity.
if ( ! is_array( $subPages ) ) {
$subPages = array();
}
global $_mainwp_menu_active_slugs;
$subPages = apply_filters( 'mainwp_subpages_left_menu', $subPages, $initSubpage, $parentKey, $slug );
foreach ( $subPages as $subPage ) {
if ( ! isset( $subPage['menu_hidden'] ) || ( isset( $subPage['menu_hidden'] ) && empty( $subPage['menu_hidden'] ) ) ) {
$sub_slug = isset( $subPage['slug'] ) ? $subPage['slug'] : '';
$_item = array(
'title' => isset( $subPage['title'] ) ? $subPage['title'] : '',
'parent_key' => $parentKey,
'href' => 'admin.php?page=' . $slug . $sub_slug,
'slug' => $slug . $sub_slug,
'right' => '',
);
if ( ! empty( $subPage['before_title'] ) ) {
$item['before_title'] = $subPage['before_title'];
}
// To support check right to open menu for sometime.
if ( isset( $subPage['item_slug'] ) ) {
$_item['item_slug'] = $subPage['item_slug'];
}
if ( isset( $subPage['href'] ) && ! empty( $subPage['href'] ) ) { // override href.
$_item['href'] = $subPage['href'];
}
$initSubpage[] = $_item;
} elseif ( isset( $subPage['slug'] ) ) {
$_mainwp_menu_active_slugs[ $slug . $subPage['slug'] ] = $parentKey; // to fix.
}
}
}
/**
* Method is_disable_menu_item
*
* Check if $_mainwp_disable_menus_items contains any menu items to hide.
*
* @param string $level The level the menu item is on.
* @param array|string $item The menu items meta data.
*
* @return bool True|False, default is False.
*/
public static function is_disable_menu_item( $level, $item ) {
/**
* MainWP Disable Menus items array.
*
* @global object
*/
global $_mainwp_disable_menus_items;
$disabled = false;
$_level = 'level_' . $level;
if ( is_array( $_mainwp_disable_menus_items ) && isset( $_mainwp_disable_menus_items[ $_level ] ) && isset( $_mainwp_disable_menus_items[ $_level ][ $item ] ) ) {
$disabled = $_mainwp_disable_menus_items[ $_level ][ $item ];
}
$disabled = apply_filters( 'mainwp_is_disable_menu_item', $disabled, $level, $item );
$_mainwp_disable_menus_items[ $_level ][ $item ] = $disabled;
return $disabled;
}
/**
* Method add_left_menu
*
* Build Top Level Menu
*
* @param array $params Menu Item parameters.
* @param integer $level Menu Item Level 1 or 2.
*
* @return array $mainwp_leftmenu[] | $mainwp_sub_leftmenu[].
*/
public static function add_left_menu( $params = array(), $level = 1 ) { //phpcs:ignore -- NOSONAR - complex method.
if ( empty( $params ) ) {
return;
}
if ( ! empty( $params['menu_hidden'] ) ) {
return;
}
$level = (int) $level;
if ( 1 !== $level && 2 !== $level && 0 !== $level ) {
$level = 1;
}
$title = $params['title'];
$before_title = ! empty( $params['before_title'] ) ? $params['before_title'] : '';
$slug = isset( $params['slug'] ) ? $params['slug'] : '';
$href = isset( $params['href'] ) ? $params['href'] : '';
$right = isset( $params['right'] ) ? $params['right'] : '';
$id = isset( $params['id'] ) ? $params['id'] : '';
$level_cls = 'left-menu-item-level-' . $level;
$icon = isset( $params['icon'] ) ? $params['icon'] : '';
$leftsub_order = isset( $params['leftsub_order'] ) ? $params['leftsub_order'] : '';
$leftsub_order_level2 = isset( $params['leftsub_order_level2'] ) ? $params['leftsub_order_level2'] : '';
$ext_state = isset( $params['ext_status'] ) && ( 'activated' === $params['ext_status'] || 'inactive' === $params['ext_status'] ) ? $params['ext_status'] : '';
$parent_key = isset( $params['parent_key'] ) ? $params['parent_key'] : '';
$others = array( 'level_class' => $level_cls );
if ( isset( $params['active_params'] ) ) {
$others['active_params'] = $params['active_params'];
}
/**
* MainWP Left Menu, Sub Menu & Active menu slugs.
*
* @global object $mainwp_leftmenu
* @global object $mainwp_sub_leftmenu
* @global object $_mainwp_menu_active_slugs
*/
global $mainwp_leftmenu, $mainwp_sub_leftmenu, $_mainwp_menu_active_slugs;
if ( ! is_array( $mainwp_leftmenu ) ) {
$mainwp_leftmenu = array();
}
if ( ! isset( $mainwp_leftmenu['mainwp_tab'] ) ) {
$mainwp_leftmenu['mainwp_tab'] = array(); // to compatible with old hooks.
}
if ( ! is_array( $_mainwp_menu_active_slugs ) ) {
$_mainwp_menu_active_slugs = array();
}
$active_path = false;
if ( isset( $params['active_path'] ) && is_array( $params['active_path'] ) && ! empty( $params['active_path'] ) ) {
$active_path = $params['active_path'];
reset( $active_path );
$item = key( $active_path );
$active = current( $active_path );
$_mainwp_menu_active_slugs['leftbar'][ $item ] = $active;
$_mainwp_menu_active_slugs['parent_slug'][ $item ] = $parent_key;
}
if ( 0 === $level ) {
$parent_key = 'mainwp_tab'; // forced value.
$mainwp_leftmenu['leftbar'][] = array( $title, $slug, $href, $id, $icon, $level_cls );
} elseif ( 1 === $level ) {
if ( empty( $parent_key ) ) {
$parent_key = 'mainwp_tab'; // forced value.
}
if ( 'mainwp_tab' === $parent_key ) {
$mainwp_leftmenu[ $parent_key ][] = array( $title, $slug, $href, $id, $level_cls );
} else {
$mainwp_sub_leftmenu['leftbar'][ $parent_key ][] = array( $title, $slug, $href, $id, $leftsub_order, $ext_state, $active_path, $level_cls );
if ( ! empty( $slug ) ) {
$_mainwp_menu_active_slugs['leftbar'][ $slug ] = $parent_key; // to get active menu.
}
}
} else {
if ( empty( $parent_key ) ) {
$parent_key = 'mainwp_tab'; // forced value.
}
$mainwp_sub_leftmenu[ $parent_key ][] = array( $title, $href, $right, $id, $slug, $leftsub_order_level2, $ext_state, $active_path, $before_title, $others );
}
if ( ! empty( $slug ) ) {
$no_submenu = ! empty( $params['nosubmenu'] ) ? true : false;
if ( $no_submenu ) {
$_mainwp_menu_active_slugs[ $slug ] = $slug; // to get active menu.
} else {
$_mainwp_menu_active_slugs[ $slug ] = $parent_key; // to get active menu.
}
}
}
/**
* Method render_left_menu
*
* Build Top Level Main Menu HTML & Render.
*/
public static function render_left_menu() { // phpcs:ignore -- NOSONAR -Current complexity is the only way to achieve desired results, pull request solutions appreciated.
/**
* MainWP Left Menu, Sub Menu & Active menu slugs.
*
* @global object $mainwp_leftmenu
* @global object $mainwp_sub_leftmenu
* @global object $_mainwp_menu_active_slugs
*/
global $mainwp_leftmenu, $mainwp_sub_leftmenu, $_mainwp_menu_active_slugs, $plugin_page;
/**
* Filter: mainwp_main_menu
*
* Filters main navigation menu items
*
* @since 4.0
*/
$mainwp_leftmenu = apply_filters( 'mainwp_main_menu', $mainwp_leftmenu );
$bar_leftmenu = isset( $mainwp_leftmenu['leftbar'] ) ? $mainwp_leftmenu['leftbar'] : array();
/**
* Filter: mainwp_main_menu_submenu
*
* Filters main navigation subt-menu items
*
* @since 4.0
*/
$mainwp_sub_leftmenu = apply_filters( 'mainwp_main_menu_submenu', $mainwp_sub_leftmenu );
$sub_bar_leftmenu = isset( $mainwp_sub_leftmenu['leftbar'] ) ? $mainwp_sub_leftmenu['leftbar'] : array();
$version = get_option( 'mainwp_plugin_version' );
?>
<?php
/**
* Action: before_mainwp_menu
*
* Fires before the main navigation element.
*
* @since 4.0
*/
do_action( 'before_mainwp_menu' );
?>
<div id="mainwp-main-navigation-container">
<div id="mainwp-first-level-navigation">
<div id="mainwp-first-level-navigation-menu" class="ui vertical labeled inverted icon tiny menu">
<?php
$bar_item_actived_key = '';
if ( is_array( $_mainwp_menu_active_slugs ) && isset( $_mainwp_menu_active_slugs[ $plugin_page ] ) ) {
$menu_item_actived_key = $_mainwp_menu_active_slugs[ $plugin_page ];
if ( isset( $_mainwp_menu_active_slugs['leftbar'] ) && is_array( $_mainwp_menu_active_slugs['leftbar'] ) && isset( $_mainwp_menu_active_slugs['leftbar'][ $menu_item_actived_key ] ) ) {
$bar_item_actived_key = $_mainwp_menu_active_slugs['leftbar'][ $menu_item_actived_key ];
}
}
$bar_item_active = null;
$sites_count = MainWP_DB::instance()->get_websites_count();
if ( empty( $sites_count ) ) {
?>
<a style="background: #FFD300 !important;" id="leftbar-item-quick-setup" title="<?php esc_html_e( 'Quick Setup', 'mainwp' ); ?>" class="item" href="admin.php?page=mainwp-setup">
<i class="magic large icon"></i><span class="ui small text"><?php esc_html_e( 'Quick Setup', 'mainwp' ); ?></span>
</a>
<?php
}
if ( is_array( $bar_leftmenu ) && ! empty( $bar_leftmenu ) ) {
foreach ( $bar_leftmenu as $item ) {
$title = wptexturize( $item[0] );
$item_key = $item[1];
$href = $item[2];
$item_id = isset( $item[3] ) ? $item[3] : '';
$item_icon = isset( $item[4] ) ? $item[4] : '';
$level_cls = isset( $item[5] ) ? $item[5] : '';
$has_sub = true;
if ( ! isset( $mainwp_sub_leftmenu[ $item_key ] ) || empty( $mainwp_sub_leftmenu[ $item_key ] ) ) {
$has_sub = false;
}
$active_item = '';
if ( empty( $bar_item_actived_key ) ) {
if ( isset( $_mainwp_menu_active_slugs['leftbar'][ $plugin_page ] ) ) {
if ( $item_key === $_mainwp_menu_active_slugs['leftbar'][ $plugin_page ] ) {
$bar_item_actived_key = $item_key;
}
} elseif ( isset( $_mainwp_menu_active_slugs[ $plugin_page ] ) ) {
if ( $item_key === $_mainwp_menu_active_slugs[ $plugin_page ] ) {
$bar_item_actived_key = $item_key;
}
}
}
if ( ! empty( $bar_item_actived_key ) && $item_key === $bar_item_actived_key ) {
$active_item = 'active';
$bar_item_active = $item;
}
$id_attr = ! empty( $item_id ) ? 'id="' . esc_html( $item_id ) . '"' : '';
$item_cls = $level_cls . ' ' . $active_item;
// phpcs:disable WordPress.Security.EscapeOutput
echo '<a ' . $id_attr . ' title="' . esc_html( $title ) . '" class="item ' . esc_attr( $item_cls ) . "\" href=\"$href\">";
echo ! empty( $item_icon ) ? $item_icon : '<i class="th large icon"></i>';
echo '<span class="ui small text">' . esc_html( $title ) . '</span>';
echo '</a>';
// phpcs:enable
}
}
?>
<a id="mainwp-help-menu-item" title="<?php esc_attr_e( 'Help', 'mainwp' ); ?>" class="item" href="#" style="opacity:0.3;">
<i class="question circle outline icon"></i>
<span class="ui small text"><?php esc_html_e( 'Quick Help', 'mainwp' ); ?></span>
</a>
</div>
<?php
$all_updates = wp_get_update_data();
$go_back_wpadmin_url = admin_url( 'index.php' );
$link = array(
'url' => $go_back_wpadmin_url,
'text' => esc_html__( 'WP Admin', 'mainwp' ),
'tip' => esc_html__( 'Click to go back to the site WP Admin area.', 'mainwp' ),
);
/**
* Filter: mainwp_go_back_wpadmin_link
*
* Filters URL for the Go to WP Admin button in Main navigation.
*
* @since 4.0
*/
$go_back_link = apply_filters( 'mainwp_go_back_wpadmin_link', $link );
if ( false !== $go_back_link && is_array( $go_back_link ) ) {
if ( isset( $go_back_link['url'] ) ) {
$link['url'] = $go_back_link['url'];
}
if ( isset( $go_back_link['text'] ) ) {
$link['text'] = $go_back_link['text'];
}
if ( isset( $go_back_link['tip'] ) ) {
$link['tip'] = $go_back_link['tip'];
}
}
?>
<div id="mainwp-first-level-wpitems-menu" class="ui vertical labeled inverted icon mini menu">
<a class="item" href="#" id="mainwp-collapse-second-level-navigation" aria-label="<?php esc_attr_e( 'Collapse menu.', 'mainwp' ); ?>">
<i class="double angle left icon"></i>
</a>
</div>
<div id="mainwp-first-level-navigation-version-label">
<?php if ( is_array( $all_updates ) && isset( $all_updates['counts']['total'] ) && 0 < $all_updates['counts']['total'] ) : ?>
<a class="ui tiny red fluid centered pulse looping transition label" id="mainwp-dashboard-update-available" data-inverted="" data-position="left center" data-tooltip="<?php esc_attr_e( 'Your MainWP Dashboard sites needs your attention. Please check the available updates', 'mainwp' ); ?>" aria-label="<?php esc_attr_e( 'Your MainWP Dashboard sites needs your attention. Please check the available updates', 'mainwp' ); ?>" href="update-core.php">
<i class="exclamation triangle icon" style="color:#fff"></i> <?php esc_html_e( 'Update Dashboard Site', 'mainwp' ); ?>
</a>
<?php endif; ?>
<div id="mainwp-version-label" class="ui tiny green fluid centered label"><?php echo esc_html( $version ); ?></div>
</div>
</div>
<div id="mainwp-second-level-navigation">
<div id="mainwp-main-menu" class="ui inverted vertical accordion menu">
<?php
$bar_active_item_key = '';
$set_actived = false;
if ( ! empty( $bar_item_active ) ) {
$item = $bar_item_active;
$title = wptexturize( $item[0] );
$item_key = $item[1];
$href = $item[2];
$item_id = isset( $item[3] ) ? $item[3] : '';
$level_cls = isset( $item[5] ) ? $item[5] : '';
$bar_active_item_key = $item_key;
$has_sub = true;
if ( ! isset( $mainwp_sub_leftmenu[ $item_key ] ) || empty( $mainwp_sub_leftmenu[ $item_key ] ) ) {
$has_sub = false;
}
$active_item = '';
if ( ! $set_actived && isset( $_mainwp_menu_active_slugs['parent_slug'][ $plugin_page ] ) && $item_key === $_mainwp_menu_active_slugs['parent_slug'][ $plugin_page ] ) {
$active_item = 'active';
$set_actived = true;
}
// to fix active menu.
if ( ! $set_actived && isset( $_mainwp_menu_active_slugs[ $plugin_page ] ) && $item_key === $_mainwp_menu_active_slugs[ $plugin_page ] ) {
$active_item = 'active';
$set_actived = true;
}
$id_attr = ! empty( $item_id ) ? 'id="' . esc_html( $item_id ) . '"' : '';
// phpcs:disable WordPress.Security.EscapeOutput
if ( $has_sub ) {
echo '<div ' . $id_attr . " class=\"item $active_item " . esc_attr( $level_cls ) . ' ">';
echo "<a class=\"title with-sub $active_item\" href=\"$href\">$title <i class=\"dropdown icon\"></i></a>";
echo "<div class=\"content menu $active_item\">";
static::render_sub_item( $item_key );
echo '</div>';
echo '</div>';
} else {
echo '<div ' . $id_attr . ' class="item ' . esc_attr( $level_cls ) . '">';
echo "<a class='title $active_item' href=\"$href\">$title</a>";
echo '</div>';
}
// phpcs:enable
if ( is_array( $sub_bar_leftmenu ) && ! empty( $bar_active_item_key ) && isset( $sub_bar_leftmenu[ $bar_active_item_key ] ) && is_array( $sub_bar_leftmenu[ $bar_active_item_key ] ) ) {
$sub_bar_leftmenu_active_items = $sub_bar_leftmenu[ $bar_active_item_key ];
MainWP_Utility::array_sort_existed_keys( $sub_bar_leftmenu_active_items, 4 ); //phpcs:ignore Squiz.PHP.CommentedOutCode.Found -- 4 => 'leftsub_order'.
$set_actived = false;
foreach ( $sub_bar_leftmenu_active_items as $item ) {
if ( empty( $item ) || ! is_array( $item ) ) {
continue;
}
$title = wptexturize( $item[0] );
$item_key = $item[1];
$has_sub = true;
if ( ! isset( $mainwp_sub_leftmenu[ $item_key ] ) || empty( $mainwp_sub_leftmenu[ $item_key ] ) ) {
$has_sub = false;
}
$href = $item[2];
$item_id = isset( $item[3] ) ? $item[3] : '';
$ext_state = isset( $item[5] ) ? $item[5] : '';
$level_cls = isset( $item[7] ) ? $item[7] : '';
$item_classes = 'inactive' === $ext_state ? 'extension-inactive' : '';
$active_item = '';
if ( ! $set_actived && isset( $_mainwp_menu_active_slugs['parent_slug'][ $plugin_page ] ) && $item_key === $_mainwp_menu_active_slugs['parent_slug'][ $plugin_page ] ) {
$active_item = 'active';
$set_actived = true;
}
// to fix active menu.
if ( ! $set_actived && isset( $_mainwp_menu_active_slugs[ $plugin_page ] ) && $item_key === $_mainwp_menu_active_slugs[ $plugin_page ] ) {
$active_item = 'active';
$set_actived = true;
}
$id_attr = ! empty( $item_id ) ? 'id="' . esc_html( $item_id ) . '"' : '';
$hide_item = '';
if ( 'admin.php?page=ManageApiBackups' === $href ) {
$hide_item = ' style="display:none"';
}
if ( ! empty( $level_cls ) ) {
$item_classes = $item_classes . ' ' . $level_cls;
}
// phpcs:disable WordPress.Security.EscapeOutput
if ( $has_sub ) {
echo '<div ' . $id_attr . " class=\"item $active_item $item_classes\">";
echo "<a class=\"title with-sub $active_item\" href=\"$href\">$title <i class=\"dropdown icon\"></i></a>";
echo "<div class=\"content menu $active_item\">";
static::render_sub_item( $item_key );
echo '</div>';
echo '</div>';
} else {
echo '<div ' . $id_attr . $hide_item . " class=\"item $active_item $item_classes\">";
echo "<a class='title $active_item' href=\"$href\">$title</a>";
echo '</div>';
}
// phpcs:enable
}
}
}
?>
</div>
</div>
</div>
<?php
/**
* Action: after_mainwp_menu
*
* Fires after the main navigation element.
*
* @since 4.0
*/
do_action( 'after_mainwp_menu' );
?>
<script type="text/javascript">
jQuery( document ).ready( function () {
setTimeout(() => {
jQuery('#mainwp-dashboard-update-available').removeClass('looping');
}, 1500);
let mainwp_left_bar_showhide_init = function(){
if(jQuery('body').hasClass('mainwp-hidden-second-level-navigation')){
return; // hide always.
}
if(jQuery('body').hasClass('toplevel_page_mainwp_tab')){
return; // hide always.
}
let lbar = jQuery( '#mainwp-collapse-second-level-navigation' );
let show = ( typeof mainwp_ui_state_load !== 'undefined' ) && 0 != mainwp_ui_state_load( 'showmenu' );
mainwp_left_bar_showhide( lbar, show);
}
mainwp_left_bar_showhide = function( lbar, show ){
if ( show ) {
jQuery( '#mainwp-second-level-navigation' ).show();
jQuery( '.mainwp-content-wrap' ).css( "margin-left", "272px" );
//jQuery( '#mainwp-screenshots-sites' ).css( "margin-left", "272px" );
jQuery( '#mainwp-main-navigation-container' ).css( "width", "272px" );
jQuery( lbar ).find( '.icon' ).removeClass( 'right' );
jQuery( lbar ).find( '.icon' ).addClass( 'left' );
jQuery( lbar ).css( "left", "272px" );
jQuery( lbar ).removeClass( 'collapsed' );
if( ( typeof mainwp_ui_state_save !== 'undefined' ) ) {
mainwp_ui_state_save( 'showmenu', 1 );
}
} else {
jQuery( '#mainwp-second-level-navigation' ).hide();
jQuery( '.mainwp-content-wrap' ).css( "margin-left", "72px" );
//jQuery( '#mainwp-screenshots-sites' ).css( "margin-left", "72px" );
jQuery( '#mainwp-main-navigation-container' ).css( "width", "72px" );
jQuery( lbar ).find( '.icon' ).removeClass( 'left' );
jQuery( lbar ).find( '.icon' ).addClass( 'right' );
jQuery( lbar ).css( "left", "72px" );
jQuery( lbar ).addClass( 'collapsed' );
jQuery( '#mainwp-top-header' ).css( "width", "100%" );
if( ( typeof mainwp_ui_state_save !== 'undefined' ) ) {
mainwp_ui_state_save( 'showmenu', 0 );
}
}
}
jQuery( '#mainwp-collapse-second-level-navigation' ).on( 'click', function() {
let show = jQuery( this ).hasClass( 'collapsed' ) ? true : false;
mainwp_left_bar_showhide( this, show);
return false;
} );
mainwp_left_bar_showhide_init();
// click on menu with-sub icon.
jQuery( '#mainwp-main-navigation-container #mainwp-main-menu a.title.with-sub .icon' ).on( "click", function ( event ) {
let pr = jQuery( this ).closest( '.item' );
let title = jQuery( this ).closest( '.title' );
let active = jQuery( title ).hasClass( 'active' );
// remove current active.
mainwp_menu_collapse();
// if current menu item are not active then set it active.
if ( !active ) {
jQuery( title ).addClass( 'active' );
jQuery( pr ).find('.content.menu').addClass( 'active' );
pr.addClass('active');
}
return false;
} );
jQuery( '#mainwp-main-navigation-container #mainwp-main-menu a.title.with-sub' ).on( "click", function ( event ) {
let pr = jQuery( this ).closest( '.item' );
let active = jQuery( this ).hasClass( 'active' );
// remove current active.
mainwp_menu_collapse();
// set active before go to the page.
if ( !active ) {
jQuery( this ).addClass( 'active' );
jQuery( pr ).find('.content.menu').addClass( 'active' );
pr.addClass('active');
}
} );
mainwp_menu_collapse = function() {
// remove current active.
jQuery( '#mainwp-main-navigation-container #mainwp-main-menu a.title.active').removeClass('active');
jQuery( '#mainwp-main-navigation-container #mainwp-main-menu .item').removeClass('active');
jQuery( '#mainwp-main-navigation-container #mainwp-main-menu .content.menu.active').removeClass('active');
};
jQuery('.mainwp-main-mobile-navigation-container #mainwp-main-menu').accordion();
} );
</script>
<?php
}
/**
* Method render_mobile_menu
*
* Renders the mobile menu.
*/
public static function render_mobile_menu() { // phpcs:ignore -- NOSONAR -Current complexity is the only way to achieve desired results, pull request solutions appreciated.
$mainwp_show_language_updates = get_option( 'mainwp_show_language_updates', 1 );
?>
<div class="mainwp-main-mobile-navigation-container">
<div class="mainwp-nav-menu">
<?php
/**
* Action: before_mainwp_menu
*
* Fires before the main navigation element.
*
* @since 4.0
*/
do_action( 'before_mainwp_menu' );
?>
<div id="mainwp-main-menu" class="test-menu ui inverted vertical accordion menu">
<div class="hamburger">
<span class="hamburger-bun"></span>
<span class="hamburger-patty"></span>
<span class="hamburger-bun"></span>
</div>
<div class="item"><a href="admin.php?page=mainwp_tab"><?php esc_html_e( 'Overview', 'mainwp' ); ?></a></div>
<div class="item">
<div class="title"><a href="admin.php?page=managesites" class=" with-sub"><?php esc_html_e( 'Sites', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu" id="mainwp-sites-mobile-menu-item">
<div class="accordion item">
<div class="title"><a href="admin.php?page=managesites"><?php esc_html_e( 'Sites', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=managesites"><?php esc_html_e( 'Manage Sites', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=managesites&do=new"><?php esc_html_e( 'Add New Site', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=managesites&do=bulknew"><?php esc_html_e( 'Import Sites', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=MonitoringSites"><?php esc_html_e( 'Monitoring', 'mainwp' ); ?></a>
</div>
</div>
<div class="item accordion">
<div class="title"><a class="" href="admin.php?page=ManageGroups"><?php esc_html_e( 'Tags', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=ManageGroups"><?php esc_html_e( 'Manage Tags', 'mainwp' ); ?></a>
</div>
</div>
<div class="item accordion">
<div class="title"><a href="admin.php?page=UpdatesManage"><?php esc_html_e( 'Updates', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=UpdatesManage&tab=plugins-updates"><?php esc_html_e( 'Plugin Updates', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=UpdatesManage&tab=themes-updates"><?php esc_html_e( 'Theme Updates', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=UpdatesManage&tab=wordpress-updates"><?php esc_html_e( 'WordPress Updates', 'mainwp' ); ?></a>
<?php if ( $mainwp_show_language_updates ) : ?>
<a class="item" href="admin.php?page=UpdatesManage&tab=translations-updates"><?php esc_html_e( 'Translation Plugins', 'mainwp' ); ?></a>
<?php endif; ?>
<a class="item" href="admin.php?page=PluginsAbandoned"><?php esc_html_e( 'Abandoned Plugins', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=ThemesAbandoned"><?php esc_html_e( 'Abandoned Themes', 'mainwp' ); ?></a>
</div>
</div>
<div class="item accordion">
<div class="title"><a href="admin.php?page=PluginsManage"><?php esc_html_e( 'Plugins', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=PluginsManage"><?php esc_html_e( 'Manage Plugins', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=PluginsInstall"><?php esc_html_e( 'Install', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=PluginsAutoUpdate"><?php esc_html_e( 'Advanced Auto Updates', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=PluginsIgnore"><?php esc_html_e( 'Ignored Updates', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=PluginsIgnoredAbandoned"><?php esc_html_e( 'Ignored Abandoned', 'mainwp' ); ?></a>
</div>
</div>
<div class="item accordion">
<div class="title"><a href="admin.php?page=ThemesManage"><?php esc_html_e( 'Themes', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=ThemesManage"><?php esc_html_e( 'Manage Themes', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=ThemesInstall"><?php esc_html_e( 'Install', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=ThemesAutoUpdate"><?php esc_html_e( 'Advanced Auto Updates', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=ThemesIgnore"><?php esc_html_e( 'Ignored Updates', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=ThemesIgnoredAbandoned"><?php esc_html_e( 'Ignored Abandoned', 'mainwp' ); ?></a>
</div>
</div>
<div class="item accordion">
<div class="title"><a href="admin.php?page=UserBulkManage"><?php esc_html_e( 'Users', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=UserBulkManage"><?php esc_html_e( 'Manage Users', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=UserBulkAdd"><?php esc_html_e( 'Add New User', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=BulkImportUsers"><?php esc_html_e( 'Import Users', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=UpdateAdminPasswords"><?php esc_html_e( 'Admin Passwords', 'mainwp' ); ?></a>
</div>
</div>
<div class="item accordion">
<div class="title"><a href="admin.php?page=PostBulkManage"><?php esc_html_e( 'Posts', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=PostBulkManage"><?php esc_html_e( 'Manage Pages', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=PostBulkAdd"><?php esc_html_e( 'Add New Post', 'mainwp' ); ?></a>
</div>
</div>
<div class="item accordion">
<div class="title"><a href="admin.php?page=PageBulkManage"><?php esc_html_e( 'Pages', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=PageBulkManage"><?php esc_html_e( 'Manage Pages', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=PageBulkAdd"><?php esc_html_e( 'Add New Page', 'mainwp' ); ?></a>
</div>
</div>
<div class="item accordion">
<div class="title"><a href="admin.php?page=ManageApiBackups"><?php esc_html_e( 'Backups', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=ManageApiBackups"><?php esc_html_e( 'Backups', 'mainwp' ); ?></a>
</div>
</div>
</div>
</div>
<div class="item">
<div class="title"><a href="admin.php?page=ManageClients" class="with-sub"><?php esc_html_e( 'Clients', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=ManageClients"><?php esc_html_e( 'Clients', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=ClientAddNew"><?php esc_html_e( 'Add Client', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=ClientAddField"><?php esc_html_e( 'Client Fields', 'mainwp' ); ?></a>
</div>
</div>
<div class="item">
<div class="title"><a href="admin.php?page=ManageCostTracker" class="with-sub"><?php esc_html_e( 'Cost Tracker', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=ManageCostTracker"><?php esc_html_e( 'Cost Tracker', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=CostTrackerAdd"><?php esc_html_e( 'Add Cost', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=CostTrackerSettings"><?php esc_html_e( 'Cost Tracker Settings', 'mainwp' ); ?></a>
</div>
</div>
<div class="item">
<div class="title"><a href="admin.php?page=InsightsOverview" class="with-sub"><?php esc_html_e( 'Insights', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=InsightsOverview"><?php esc_html_e( 'Insights', 'mainwp' ); ?></a>
</div>
</div>
<div class="item">
<div class="title"><a href="admin.php?page=RESTAPI" class="with-sub"><?php esc_html_e( 'REST API', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=RESTAPI"><?php esc_html_e( 'Manage API Keys', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=AddApiKeys"><?php esc_html_e( 'Add API Keys', 'mainwp' ); ?></a>
</div>
</div>
<div class="item">
<div class="title"><a href="admin.php?page=Extensions" class=""><?php esc_html_e( 'Extensions', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=Extensions"><?php esc_html_e( 'Manage Extensions', 'mainwp' ); ?></a>
</div>
</div>
<div class="item">
<div class="title"><a href="admin.php?page=Settings" class="with-sub"><?php esc_html_e( 'Settings', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=Settings"><?php esc_html_e( 'General Settings', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=SettingsAdvanced"><?php esc_html_e( 'Advanced Settings', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=SettingsEmail"><?php esc_html_e( 'Email Settings', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=MainWPTools"><?php esc_html_e( 'Tools', 'mainwp' ); ?></a>
</div>
</div>
<div class="item">
<div class="title"><a href="admin.php?page=ServerInformation" class="with-sub"><?php esc_html_e( 'Info', 'mainwp' ); ?></a><i class="dropdown icon"></i></div>
<div class="content menu">
<a class="item" href="admin.php?page=ServerInformation"><?php esc_html_e( 'Server', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=ServerInformationCron"><?php esc_html_e( 'Cron Schedules', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=ErrorLog"><?php esc_html_e( 'Error Log', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=ActionLogs"><?php esc_html_e( 'Custom Event Monitor', 'mainwp' ); ?></a>
<a class="item" href="admin.php?page=PluginPrivacy"><?php esc_html_e( 'Plugin Privacy', 'mainwp' ); ?></a>
</div>
</div>
<div class="item">
<a id="mainwp-help-menu-item2" title="<?php esc_attr_e( 'Help', 'mainwp' ); ?>" class="item" href="#" style="opacity:0.3;"><?php esc_html_e( 'Quick Help', 'mainwp' ); ?></a>
</div>
<?php
$go_back_wpadmin_url = admin_url( 'index.php' );
$link = array(
'url' => $go_back_wpadmin_url,
'text' => esc_html__( 'WP Admin', 'mainwp' ),
'tip' => esc_html__( 'Click to go back to the site WP Admin area.', 'mainwp' ),
);
/**
* Filter: mainwp_go_back_wpadmin_link
*
* Filters URL for the Go to WP Admin button in Main navigation.
*
* @since 4.0
*/
$go_back_link = apply_filters( 'mainwp_go_back_wpadmin_link', $link );
if ( false !== $go_back_link ) {
if ( is_array( $go_back_link ) ) {
if ( isset( $go_back_link['url'] ) ) {
$link['url'] = $go_back_link['url'];
}
if ( isset( $go_back_link['text'] ) ) {
$link['text'] = $go_back_link['text'];
}
if ( isset( $go_back_link['tip'] ) ) {
$link['tip'] = $go_back_link['tip'];
}
}
?>
<div class="item item-wp-admin">
<a href="<?php echo esc_html( $link['url'] ); ?>" class="title" style="display:inline" data-position="top left" data-tooltip="<?php echo esc_html( $link['tip'] ); ?>"><b><i class="icon wordpress"></i> <?php echo esc_html( $link['text'] ); ?></b></a> <a class="ui small label" data-position="top right" data-tooltip="<?php esc_html_e( 'Logout', 'mainwp' ); ?>" href="<?php echo wp_logout_url(); ?>"><i class="sign out icon" style="margin:0"></i></a> <?php //phpcs:ignore -- to avoid auto fix icon wordpress ?>
</div>
<?php } ?>
</div>
<?php
/**
* Action: after_mainwp_menu
*
* Fires after the main navigation element.
*
* @since 4.0
*/
do_action( 'after_mainwp_menu' );
?>
</div>
</div>
<?php
}
/**
* Method render_sub_item
*
* Grabs all submenu items and attatches to Main Menu.
*
* @param mixed $parent_key The parent key.
*/
public static function render_sub_item( $parent_key ) { //phpcs:ignore -- NOSONAR - complex method.
if ( empty( $parent_key ) ) {
return;
}
/**
* MainWP Left Menu.
*
* @global object $mainwp_sub_leftmenu
*/
global $mainwp_sub_leftmenu;
$submenu_items = $mainwp_sub_leftmenu[ $parent_key ];
if ( ! is_array( $submenu_items ) || empty( $submenu_items ) ) {
return;
}
global $plugin_page;
$set_actived = false;
MainWP_Utility::array_sort_existed_keys( $submenu_items, 5 ); //phpcs:ignore Squiz.PHP.CommentedOutCode.Found -- 5 => 'leftsub_order_level2'.
foreach ( $submenu_items as $sub_item ) {
$title = $sub_item[0];
$href = $sub_item[1];
$right = $sub_item[2];
$id = isset( $sub_item[3] ) ? $sub_item[3] : '';
$slug = isset( $sub_item[4] ) ? $sub_item[4] : '';
$ext_state = isset( $sub_item[6] ) ? $sub_item[6] : '';
$active_path = isset( $sub_item[7] ) ? $sub_item[7] : '';
$before_title = isset( $sub_item[8] ) ? $sub_item[8] : '';
$others = isset( $sub_item[9] ) ? $sub_item[9] : array();
if ( ! is_array( $others ) ) {
$others = array();
}
$item_classes = 'inactive' === $ext_state ? 'extension-inactive' : '';
$_blank = false;
if ( '_blank' === $id ) {
$_blank = true;
}
$level2_active = false;
if ( ! $set_actived ) {
$level2_active = static::is_level2_menu_item_active( $href ) ? true : false;
if ( is_array( $active_path ) && ! empty( $active_path ) ) {
reset( $active_path );
$item = key( $active_path );
if ( $item === $plugin_page ) {
$level2_active = true;
}
}
// hard fix managesite menu items active status.
//phpcs:disable WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
if ( false !== strpos( $href, 'admin.php?page=managesites' ) ) {
$page_name = isset( $_GET['page'] ) ? wp_unslash( $_GET['page'] ) : '';
$level2_active = false;
if ( isset( $_GET['do'] ) && 'new' === $_GET['do'] && false !== strpos( $href, 'admin.php?page=managesites&do=new' ) ) {
$level2_active = true;
}
if ( ! $level2_active && isset( $_GET['do'] ) && 'bulknew' === $_GET['do'] && false !== strpos( $href, 'admin.php?page=managesites&do=bulknew' ) ) {
$level2_active = true;
}
if ( ! $level2_active && ! isset( $_GET['do'] ) && 'InsightsManage' !== $page_name && 'Extensions-Mainwp-Clone-Extension' !== $page_name && 'admin.php?page=managesites' === $href ) {
$level2_active = true;
}
}
if ( ! $level2_active && ! empty( $others['active_params'] ) && is_array( $others['active_params'] ) ) {
foreach ( $others['active_params'] as $name => $value ) {
if ( isset( $_GET[ $name ] ) && wp_unslash( $_GET[ $name ] ) === $value ) {
$level2_active = true;
break;
}
}
}
//phpcs:enable WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
if ( $level2_active ) {
$set_actived = true;
}
}
$right_group = 'dashboard';
if ( ! empty( $right ) && strpos( $right, 'extension_' ) === 0 ) {
$right_group = 'extension';
$right = str_replace( 'extension_', '', $right );
}
if ( ! empty( $others['level_class'] ) ) {
$item_classes = $item_classes . ' ' . $others['level_class'];
}
if ( empty( $right ) || ( ! empty( $right ) && \mainwp_current_user_can( $right_group, $right ) ) ) {
$menu_itemid = $slug; // compatible.
$menu_itemid = 'managesites' === $slug && ! empty( $id ) ? $id : $menu_itemid;
?>
<a class="item <?php echo $level2_active ? 'active level-two-active' : ''; ?> <?php echo esc_attr( $item_classes ); ?>" href="<?php echo esc_url( $href ); ?>" id="<?php echo esc_attr( $menu_itemid ); ?>" <?php echo $_blank ? 'target="_blank"' : ''; ?>>
<?php echo $before_title . $title; //phpcs:ignore -- requires escaped. ?>
</a>
<?php
}
}
}
/**
* Method is_level2_menu_item_active().
*
* Check if menu item level 2 is active.
*
* @param mixed $href The href value.
*/
public static function is_level2_menu_item_active( $href ) {
$current_path = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '';
$san_path = $current_path;
if ( 0 === stripos( $san_path, '/wp-admin/' ) ) {
$san_path = str_replace( '/wp-admin/', '', $san_path );
}
$orther = '';
if ( 0 === stripos( $san_path, $href ) ) {
$orther = str_replace( $href, '', $san_path );
}
if ( ! empty( $orther ) && '&' === substr( $orther, 0, 1 ) ) { // cheat: start by &, it is addition params string.
$san_path = str_replace( $orther, '', $san_path ); // remove other path of uri.
}
$san_path = MainWP_Utility::sanitize_attr_slug( $san_path );
$san_href = MainWP_Utility::sanitize_attr_slug( $href );
return $san_path === $san_href;
}
}