318 lines
8.1 KiB
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;
|
||
|
}
|
||
|
}
|
||
|
}
|