laipower/wp-content/plugins/w3-total-cache/Root_AdminMenu.php

318 lines
8.1 KiB
PHP

<?php
/**
* File: Root_AdminMenu.php
*
* @package W3TC
*/
namespace W3TC;
/**
* Class: Root_AdminMenu
*/
class Root_AdminMenu {
/**
* Current page
*
* @var string
*/
protected $_page = 'w3tc_dashboard'; // phpcs:ignore PSR2.Classes.PropertyDeclaration.Underscore
/**
* Config.
*
* @var array
*/
private $_config; // phpcs:ignore PSR2.Classes.PropertyDeclaration.Underscore
/**
* Constructor.
*/
public function __construct() {
$this->_config = Dispatcher::config();
}
/**
* Generate menu array.
*
* @return array
*/
public function generate_menu_array() {
$pages = array(
'w3tc_dashboard' => array(
'page_title' => __( 'Dashboard', 'w3-total-cache' ),
'menu_text' => __( 'Dashboard', 'w3-total-cache' ),
'visible_always' => true,
'order' => 100,
),
'w3tc_feature_showcase' => array(
'page_title' => __( 'Feature Showcase', 'w3-total-cache' ),
'menu_text' => __( 'Feature Showcase', 'w3-total-cache' ),
'visible_always' => false,
'order' => 200,
),
'w3tc_general' => array(
'page_title' => __( 'General Settings', 'w3-total-cache' ),
'menu_text' => __( 'General Settings', 'w3-total-cache' ),
'visible_always' => false,
'order' => 300,
),
'w3tc_pgcache' => array(
'page_title' => __( 'Page Cache', 'w3-total-cache' ),
'menu_text' => __( 'Page Cache', 'w3-total-cache' ),
'visible_always' => false,
'order' => 400,
),
'w3tc_minify' => array(
'page_title' => __( 'Minify', 'w3-total-cache' ),
'menu_text' => __( 'Minify', 'w3-total-cache' ),
'visible_always' => false,
'order' => 500,
),
'w3tc_dbcache' => array(
'page_title' => __( 'Database Cache', 'w3-total-cache' ),
'menu_text' => __( 'Database Cache', 'w3-total-cache' ),
'visible_always' => false,
'order' => 600,
),
'w3tc_objectcache' => array(
'page_title' => __( 'Object Cache', 'w3-total-cache' ),
'menu_text' => __( 'Object Cache', 'w3-total-cache' ),
'visible_always' => false,
'order' => 700,
),
'w3tc_browsercache' => array(
'page_title' => __( 'Browser Cache', 'w3-total-cache' ),
'menu_text' => __( 'Browser Cache', 'w3-total-cache' ),
'visible_always' => false,
'order' => 800,
),
'w3tc_cachegroups' => array(
'page_title' => __( 'Cache Groups', 'w3-total-cache' ),
'menu_text' => __( 'Cache Groups', 'w3-total-cache' ),
'visible_always' => false,
'order' => 900,
),
'w3tc_cdn' => array(
'page_title' => __( 'Content Delivery Network', 'w3-total-cache' ),
'menu_text' => sprintf(
'<acronym title="%1$s">CDN</acronym>',
__( 'Content Delivery Network', 'w3-total-cache' )
),
'visible_always' => false,
'order' => 1000,
),
'w3tc_faq' => array(
'page_title' => __( 'FAQ', 'w3-total-cache' ),
'menu_text' => __( 'FAQ', 'w3-total-cache' ),
'visible_always' => true,
'order' => 1100,
'redirect_faq' => '*',
),
'w3tc_support' => array(
'page_title' => __( 'Support', 'w3-total-cache' ),
'menu_text' => __( 'Support', 'w3-total-cache' ),
'visible_always' => true,
'order' => 1200,
),
'w3tc_pagespeed' => array(
'page_title' => __( 'Google PageSpeed', 'w3-total-cache' ),
'menu_text' => __( 'Google PageSpeed', 'w3-total-cache' ),
'visible_always' => true,
'order' => 1200,
),
'w3tc_install' => array(
'page_title' => __( 'Install', 'w3-total-cache' ),
'menu_text' => __( 'Install', 'w3-total-cache' ),
'visible_always' => false,
'order' => 1300,
),
'w3tc_setup_guide' => array(
'page_title' => __( 'Setup Guide', 'w3-total-cache' ),
'menu_text' => __( 'Setup Guide', 'w3-total-cache' ),
'visible_always' => false,
'order' => 1400,
),
'w3tc_about' => array(
'page_title' => __( 'About', 'w3-total-cache' ),
'menu_text' => __( 'About', 'w3-total-cache' ),
'visible_always' => true,
'order' => 1500,
),
);
$pages = apply_filters( 'w3tc_admin_menu', $pages, $this->_config );
return $pages;
}
/**
* Generate menu.
*
* @param string $base_capability Base compatibility.
* @return array
*/
public function generate( $base_capability ) {
$pages = $this->generate_menu_array();
uasort(
$pages,
function( $a, $b ) {
return ( $a['order'] - $b['order'] );
}
);
add_menu_page(
__( 'Performance', 'w3-total-cache' ),
__( 'Performance', 'w3-total-cache' ),
apply_filters(
'w3tc_capability_menu_w3tc_dashboard',
$base_capability
),
'w3tc_dashboard',
'',
'none'
);
$submenu_pages = array();
$is_master = ( is_network_admin() || ! Util_Environment::is_wpmu() );
$remaining_visible = ! $this->_config->get_boolean( 'common.force_master' );
foreach ( $pages as $slug => $titles ) {
if ( $is_master || $titles['visible_always'] || $remaining_visible ) {
$hook = add_submenu_page(
'w3tc_dashboard',
$titles['page_title'] . ' | W3 Total Cache',
$titles['menu_text'],
apply_filters(
'w3tc_capability_menu_' . $slug,
$base_capability
),
$slug,
array(
$this,
'options',
)
);
$submenu_pages[] = $hook;
}
}
return $submenu_pages;
}
/**
* Options page.
*/
public function options() {
$this->_page = Util_Request::get_string( 'page' );
if ( ! Util_Admin::is_w3tc_admin_page() ) {
$this->_page = 'w3tc_dashboard';
}
/*
* Hidden pages.
*/
if ( ! empty( Util_Request::get_string( 'w3tc_dbcluster_config' ) ) ) {
$options_dbcache = new DbCache_Page();
$options_dbcache->dbcluster_config();
return;
}
/**
* Show tab.
*/
switch ( $this->_page ) {
case 'w3tc_dashboard':
$options_dashboard = new Generic_Page_Dashboard();
$options_dashboard->options();
break;
case 'w3tc_general':
$options_general = new Generic_Page_General();
$options_general->options();
break;
case 'w3tc_pgcache':
$options_pgcache = new PgCache_Page();
$options_pgcache->options();
break;
case 'w3tc_minify':
$options_minify = new Minify_Page();
$options_minify->options();
break;
case 'w3tc_dbcache':
$options_dbcache = new DbCache_Page();
$options_dbcache->options();
break;
case 'w3tc_objectcache':
$options_objectcache = new ObjectCache_Page();
$options_objectcache->options();
break;
case 'w3tc_browsercache':
$options_browsercache = new BrowserCache_Page();
$options_browsercache->options();
break;
case 'w3tc_cachegroups':
$options_cachegroups = new CacheGroups_Plugin_Admin();
$options_cachegroups->options();
break;
case 'w3tc_cdn':
$options_cdn = new Cdn_Page();
$options_cdn->options();
break;
case 'w3tc_stats':
$p = new UsageStatistics_Page();
$p->render();
break;
case 'w3tc_support':
$options_support = new Support_Page();
$options_support->options();
break;
case 'w3tc_pagespeed':
$options_pagespeed = new PageSpeed_Page();
$options_pagespeed->render();
break;
case 'w3tc_install':
$options_install = new Generic_Page_Install();
$options_install->options();
break;
case 'w3tc_setup_guide':
$setup_guide = new SetupGuide_Plugin_Admin();
$setup_guide->load();
break;
case 'w3tc_feature_showcase':
$feature_showcase = new FeatureShowcase_Plugin_Admin();
$feature_showcase->load();
break;
case 'w3tc_about':
$options_about = new Generic_Page_About();
$options_about->options();
break;
default:
// Placeholder to make it the only way to show pages with the time.
$view = new Base_Page_Settings();
$view->options();
do_action( 'w3tc_settings_page-' . $this->_page ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
break;
}
}
}