| @@ -12,8 +12,9 @@ | ||
| 12 | 12 | add_action('network_admin_menu', array($this, 'admin_menu')); |
| 13 | 13 | } else { |
| 14 | 14 | add_action('admin_menu', array($this, 'admin_menu')); |
| 15 | 15 | } |
| 16 | + add_action('admin_bar_menu', array($this, 'cache_admin_bar'), 100, 1); | |
| 16 | 17 | } |
| 17 | 18 | |
| 18 | 19 | /** |
| 19 | 20 | * Returns singleton instance object |
| @@ -26,10 +27,9 @@ | ||
| 26 | 27 | $_instance = new self(); |
| 27 | 28 | } |
| 28 | 29 | return $_instance; |
| 29 | 30 | } |
| 30 | - | |
| 31 | - | |
| 31 | + | |
| 32 | 32 | /** |
| 33 | 33 | * Builds the Tabs that should be displayed |
| 34 | 34 | * |
| 35 | 35 | * @param string $page |
| @@ -39,8 +39,11 @@ | ||
| 39 | 39 | public function get_tabs($page) { |
| 40 | 40 | // define tabs for pages. |
| 41 | 41 | $pages_tabs = array( |
| 42 | 42 | 'WP-Optimize' => array( |
| 43 | + 'dashboard' => __('Overview', 'wp-optimize'), | |
| 44 | + ), | |
| 45 | + 'wpo_database' => array( | |
| 43 | 46 | 'optimize' => __('Optimizations', 'wp-optimize'), |
| 44 | 47 | 'tables' => __('Tables', 'wp-optimize'), |
| 45 | 48 | 'settings' => __('Settings', 'wp-optimize'), |
| 46 | 49 | 'table_analysis' => __('Table usage', 'wp-optimize').'<span class="menu-pill premium-only">Premium</span>' |
| @@ -53,8 +56,9 @@ | ||
| 53 | 56 | ), |
| 54 | 57 | 'wpo_cache' => array( |
| 55 | 58 | 'cache' => __('Page cache', 'wp-optimize'), |
| 56 | 59 | 'preload' => __('Preload', 'wp-optimize'), |
| 60 | + 'lcp' => __('Auto LCP', 'wp-optimize').'<span class="menu-pill premium-only">Premium</span>', | |
| 57 | 61 | 'advanced' => __('Advanced settings', 'wp-optimize'), |
| 58 | 62 | 'gzip' => __('Gzip compression', 'wp-optimize'), |
| 59 | 63 | 'settings' => __('Static file headers', 'wp-optimize') // Adds a settings tab |
| 60 | 64 | ), |
| @@ -98,16 +102,18 @@ | ||
| 98 | 102 | $can_run_optimizations = WP_Optimize()->can_run_optimizations(); |
| 99 | 103 | $can_manage_options = WP_Optimize()->can_manage_options(); |
| 100 | 104 | |
| 101 | 105 | if (!current_user_can($capability_required) || (!$can_run_optimizations && !$can_manage_options)) { |
| 102 | - echo "Permission denied."; | |
| 106 | + echo esc_html__('Permission denied.', 'wp-optimize'); | |
| 103 | 107 | return; |
| 104 | 108 | } |
| 105 | 109 | |
| 106 | 110 | $this->register_admin_content(); |
| 107 | - | |
| 108 | - echo '<div id="wp-optimize-wrap">'; | |
| 109 | - | |
| 111 | + | |
| 112 | + global $wp_version; | |
| 113 | + | |
| 114 | + echo '<div id="wp-optimize-wrap" class="'.(version_compare($wp_version, '7.0', '>=') ? 'wp-version-7' : '').'">'; | |
| 115 | + | |
| 110 | 116 | WP_Optimize()->include_template('admin-page-header.php', false, array('show_notices' => !(WP_Optimize()->get_install_or_update_notice()->show_current_notice()))); |
| 111 | 117 | |
| 112 | 118 | do_action('wpo_admin_after_header'); |
| 113 | 119 | |
| @@ -133,9 +139,8 @@ | ||
| 133 | 139 | * |
| 134 | 140 | * @param string $page wp-optimize page id i.e. dashboard, database, images, cache, ... |
| 135 | 141 | */ |
| 136 | 142 | public function display_admin_page($page) { |
| 137 | - | |
| 138 | 143 | $active_page = TeamUpdraft\WP_Optimize\Includes\Fragments\fetch_superglobal('request', 'page', 'string', 'sanitize_text_field', ''); |
| 139 | 144 | |
| 140 | 145 | echo '<div class="wpo-page' . ($active_page === $page ? ' active' : '') . '" data-whichpage="'.esc_attr($page).'">'; |
| 141 | 146 | |
| @@ -149,9 +154,9 @@ | ||
| 149 | 154 | $active_tab = $page; |
| 150 | 155 | } else { |
| 151 | 156 | $tab_keys = array_keys($tabs); |
| 152 | 157 | $default_tab = apply_filters('wp_optimize_admin_'.$page.'_default_tab', $tab_keys[0]); |
| 153 | - $active_tab = substr(TeamUpdraft\WP_Optimize\Includes\Fragments\fetch_superglobal('get', 'tab', null, 'sanitize_text_field', ''), 12); | |
| 158 | + $active_tab = substr(TeamUpdraft\WP_Optimize\Includes\Fragments\fetch_superglobal('get', 'tab', null, 'sanitize_text_field', $default_tab), 12); | |
| 154 | 159 | if (!in_array($active_tab, array_keys($tabs))) $active_tab = $default_tab; |
| 155 | 160 | } |
| 156 | 161 | |
| 157 | 162 | do_action('wp_optimize_admin_page_'.$page, $active_tab); |
| @@ -205,16 +210,22 @@ | ||
| 205 | 210 | /** |
| 206 | 211 | * Premium / other plugins |
| 207 | 212 | */ |
| 208 | 213 | add_action('wp_optimize_admin_page_wpo_mayalso_may_also', array($this, 'output_dashboard_other_plugins_tab'), 20); |
| 209 | - | |
| 214 | + | |
| 210 | 215 | /** |
| 216 | + * Dashboard | |
| 217 | + */ | |
| 218 | + add_action('wp_optimize_admin_page_WP-Optimize_dashboard', array($this, 'output_dashboard'), 20); | |
| 219 | + | |
| 220 | + /** | |
| 211 | 221 | * DATABASE |
| 212 | 222 | */ |
| 213 | - add_action('wp_optimize_admin_page_WP-Optimize_optimize', array($this, 'output_database_optimize_tab'), 20); | |
| 214 | - add_action('wp_optimize_admin_page_WP-Optimize_tables', array($this, 'output_database_tables_tab'), 20); | |
| 215 | - add_action('wp_optimize_admin_page_WP-Optimize_settings', array($this, 'output_database_settings_tab'), 20); | |
| 216 | - add_action('wp_optimize_admin_page_WP-Optimize_table_analysis', array($this, 'output_table_usage_tab'), 20); | |
| 223 | + add_action('wp_optimize_admin_page_wpo_database_optimize', array($this, 'output_database_optimize_tab'), 20); | |
| 224 | + add_action('wp_optimize_admin_page_wpo_database_tables', array($this, 'output_database_tables_tab'), 20); | |
| 225 | + add_action('wp_optimize_admin_page_wpo_database_settings', array($this, 'output_database_settings_tab'), 20); | |
| 226 | + add_action('wp_optimize_admin_page_wpo_database_table_analysis', array($this, 'output_table_usage_tab'), 20); | |
| 227 | + | |
| 217 | 228 | /** |
| 218 | 229 | * PERFORMANCE |
| 219 | 230 | */ |
| 220 | 231 | add_action('wp_optimize_admin_page_wpo_performance_404_detector', array($this, 'output_performance_404_requests'), 20); |
| @@ -229,8 +240,10 @@ | ||
| 229 | 240 | } |
| 230 | 241 | add_action('wp_optimize_admin_page_wpo_cache_gzip', array($this, 'output_cache_gzip_tab'), 20); |
| 231 | 242 | add_action('wp_optimize_admin_page_wpo_cache_settings', array($this, 'output_cache_settings_tab'), 20); |
| 232 | 243 | add_action('wpo_page_cache_advanced_settings', array($this, 'output_cloudflare_settings'), 20); |
| 244 | + add_action('wp_optimize_admin_page_wpo_cache_lcp', array($this, 'output_page_cache_lcp'), 20); | |
| 245 | + | |
| 233 | 246 | /** |
| 234 | 247 | * SUPPORT |
| 235 | 248 | */ |
| 236 | 249 | add_action('wp_optimize_admin_page_wpo_support_support', array($this, 'output_dashboard_support_tab'), 20); |
| @@ -262,9 +275,9 @@ | ||
| 262 | 275 | /** |
| 263 | 276 | * Database settings |
| 264 | 277 | */ |
| 265 | 278 | public function output_database_settings_tab() { |
| 266 | - | |
| 279 | + | |
| 267 | 280 | if (WP_Optimize()->can_run_optimizations()) { |
| 268 | 281 | $wp_optimize_commands = new WP_Optimize_Commands(); |
| 269 | 282 | $settings_general_data = $wp_optimize_commands->get_widgets_data(array('widgets' => array('wp_optimize_general_settings'))); |
| 270 | 283 | $settings_cleanup_data = $wp_optimize_commands->get_widgets_data(array('widgets' => array('wp_optimize_schedule_cleanup_settings'))); |
| @@ -292,22 +305,19 @@ | ||
| 292 | 305 | /** |
| 293 | 306 | * Dashboard settings |
| 294 | 307 | */ |
| 295 | 308 | public function output_dashboard_settings_tab() { |
| 296 | - $options = WP_Optimize()->get_options(); | |
| 297 | - | |
| 298 | 309 | if (isset($_SERVER['REQUEST_METHOD']) && 'POST' === $_SERVER['REQUEST_METHOD']) { |
| 299 | 310 | // Nonce check. |
| 300 | 311 | check_admin_referer('wpo_settings'); |
| 301 | - | |
| 302 | - $output = $options->save_settings($_POST); | |
| 303 | - | |
| 312 | + | |
| 304 | 313 | if (isset($_POST['wp-optimize-settings'])) { |
| 314 | + $options = WP_Optimize()->get_options(); | |
| 305 | 315 | // save settings request sent. |
| 306 | 316 | $output = $options->save_settings($_POST); |
| 317 | + | |
| 318 | + $this->wpo_render_output_messages($output); | |
| 307 | 319 | } |
| 308 | - | |
| 309 | - $this->wpo_render_output_messages($output); | |
| 310 | 320 | } |
| 311 | 321 | |
| 312 | 322 | if (WP_Optimize()->can_manage_options()) { |
| 313 | 323 | $wp_optimize_commands = new WP_Optimize_Commands(); |
| @@ -396,9 +406,9 @@ | ||
| 396 | 406 | 'wpo_use_cache_lifespan' => __('Same as cache lifespan', 'wp-optimize') |
| 397 | 407 | ), |
| 398 | 408 | $scheduled_types |
| 399 | 409 | ); |
| 400 | - | |
| 410 | + | |
| 401 | 411 | WP_Optimize()->include_template('cache/page-cache-preload.php', false, array( |
| 402 | 412 | 'wpo_cache_options' => $wpo_cache_options, |
| 403 | 413 | 'is_running' => $is_running, |
| 404 | 414 | 'status_message' => $status['message'] ?? '', |
| @@ -422,8 +432,9 @@ | ||
| 422 | 432 | |
| 423 | 433 | WP_Optimize()->include_template('cache/page-cache-advanced.php', false, array( |
| 424 | 434 | 'wpo_cache' => $wpo_cache, |
| 425 | 435 | 'wpo_cache_options' => $wpo_cache_options, |
| 436 | + 'show_avatars' => (bool) get_option('show_avatars'), | |
| 426 | 437 | 'cache_include_urls' => $cache_include_urls, |
| 427 | 438 | 'cache_exception_urls' => $cache_exception_urls, |
| 428 | 439 | 'cache_ignore_query_variables' => $cache_ignore_query_variables, |
| 429 | 440 | 'cache_exception_conditional_tags' => $cache_exception_conditional_tags, |
| @@ -436,26 +447,49 @@ | ||
| 436 | 447 | * Gzip tab |
| 437 | 448 | */ |
| 438 | 449 | public function output_cache_gzip_tab() { |
| 439 | 450 | $wpo_gzip_compression = WP_Optimize()->get_gzip_compression(); |
| 440 | - $wpo_gzip_compression_enabled = $wpo_gzip_compression->is_gzip_compression_enabled(true); | |
| 441 | - $wpo_gzip_headers_information = $wpo_gzip_compression->get_headers_information(); | |
| 442 | - $is_cloudflare_site = $this->is_cloudflare_site(); | |
| 451 | + $wpo_gzip_compression_enabled = $wpo_gzip_compression->is_gzip_compression_enabled(); | |
| 452 | + $wpo_gzip_compression_test_results_html = $wpo_gzip_compression->get_compression_test_results_html(true); | |
| 453 | + | |
| 454 | + WP_Optimize()->include_template('cache/gzip-compression.php', false, array( | |
| 455 | + 'gzip_compression_control_panel' => $this->get_gzip_compression_control_panel($wpo_gzip_compression_enabled, true), | |
| 456 | + 'wpo_gzip_compression_enabled' => $wpo_gzip_compression_enabled, | |
| 457 | + 'compression_test_results_html' => $wpo_gzip_compression_test_results_html, | |
| 458 | + 'info_link' => 'https://teamupdraft.com/documentation/wp-optimize/topics/caching/faqs/what-is-gzip-compression/?utm_source=wpo-plugin&utm_medium=referral&utm_campaign=paac&utm_content=gzip-compression-guide&utm_creative_format=text', | |
| 459 | + )); | |
| 460 | + } | |
| 461 | + | |
| 462 | + /** | |
| 463 | + * Get gzip compression control panel html content. | |
| 464 | + * | |
| 465 | + * @param bool|null $wpo_gzip_compression_enabled Pass gzip compression status if already known to avoid double check. | |
| 466 | + * | |
| 467 | + * @return string | |
| 468 | + */ | |
| 469 | + public function get_gzip_compression_control_panel($wpo_gzip_compression_enabled = null, $use_cache = false) { | |
| 470 | + $wpo_gzip_compression = WP_Optimize()->get_gzip_compression(); | |
| 471 | + $wpo_gzip_compression_enabled = is_null($wpo_gzip_compression_enabled) ? $wpo_gzip_compression->is_gzip_compression_enabled() : $wpo_gzip_compression_enabled; | |
| 472 | + $wpo_gzip_headers_information = $wpo_gzip_compression->get_headers_information($wpo_gzip_compression->css_resource_url()); | |
| 473 | + $is_cloudflare_site = $this->is_cloudflare_site($use_cache); | |
| 443 | 474 | $is_gzip_compression_section_exists = $wpo_gzip_compression->is_gzip_compression_section_exists(); |
| 444 | - $wpo_gzip_compression_enabled_by_wpo = $is_gzip_compression_section_exists && $wpo_gzip_compression_enabled && !$is_cloudflare_site && !(is_array($wpo_gzip_headers_information) && 'brotli' === $wpo_gzip_headers_information['compression']); | |
| 445 | - | |
| 446 | - WP_Optimize()->include_template('cache/gzip-compression.php', false, array( | |
| 475 | + $wpo_gzip_compression_enabled_by_wpo = $is_gzip_compression_section_exists && true === $wpo_gzip_compression_enabled && !$is_cloudflare_site && !(is_array($wpo_gzip_headers_information) && 'brotli' === $wpo_gzip_headers_information['compression']); | |
| 476 | + $wpo_gzip_compression_content_types = $wpo_gzip_compression->get_enabled_disabled_compression_content_types($use_cache); | |
| 477 | + $wpo_gzip_compression_partially_enabled = count($wpo_gzip_compression_content_types['enabled']) > 0 && count($wpo_gzip_compression_content_types['disabled']) > 0; | |
| 478 | + | |
| 479 | + return WP_Optimize()->include_template('cache/gzip-compression-control-panel.php', true, array( | |
| 447 | 480 | 'wpo_gzip_headers_information' => $wpo_gzip_headers_information, |
| 448 | 481 | 'wpo_gzip_compression_enabled' => $wpo_gzip_compression_enabled, |
| 449 | 482 | 'is_cloudflare_site' => $is_cloudflare_site, |
| 450 | 483 | 'wpo_gzip_compression_enabled_by_wpo' => $wpo_gzip_compression_enabled_by_wpo, |
| 451 | 484 | 'wpo_gzip_compression_settings_added' => $is_gzip_compression_section_exists, |
| 452 | - 'info_link' => 'https://teamupdraft.com/documentation/wp-optimize/topics/caching/faqs/what-is-gzip-compression/?utm_source=wpo-plugin&utm_medium=referral&utm_campaign=paac&utm_content=lossy-compression-guide&utm_creative_format=text', | |
| 453 | 485 | 'faq_link' => 'https://getwpo.com/gzip-faq-link/', |
| 454 | - 'class_name' => (!is_wp_error($wpo_gzip_compression_enabled) && $wpo_gzip_compression_enabled ? 'wpo-enabled' : 'wpo-disabled') | |
| 486 | + 'class_name' => $is_gzip_compression_section_exists ? 'wpo-enabled' : 'wpo-disabled', | |
| 487 | + 'wpo_gzip_compression_content_types' => $wpo_gzip_compression_content_types, | |
| 488 | + 'wpo_gzip_compression_partially_enabled' => $wpo_gzip_compression_partially_enabled, | |
| 455 | 489 | )); |
| 456 | 490 | } |
| 457 | - | |
| 491 | + | |
| 458 | 492 | /** |
| 459 | 493 | * Cache tab |
| 460 | 494 | */ |
| 461 | 495 | public function output_cache_settings_tab() { |
| @@ -461,8 +495,9 @@ | ||
| 461 | 495 | public function output_cache_settings_tab() { |
| 462 | 496 | |
| 463 | 497 | $wpo_browser_cache = WP_Optimize()->get_browser_cache(); |
| 464 | 498 | $wpo_browser_cache_enabled = $wpo_browser_cache->is_enabled(); |
| 499 | + $wpo_browser_cache->maybe_reset_error_message_output(); | |
| 465 | 500 | |
| 466 | 501 | WP_Optimize()->include_template('cache/browser-cache.php', false, array( |
| 467 | 502 | 'wpo_browser_cache_enabled' => $wpo_browser_cache_enabled, |
| 468 | 503 | 'is_cloudflare_handling_browser_cache' => $this->is_cloudflare_handling_browser_cache(), |
| @@ -469,24 +504,45 @@ | ||
| 469 | 504 | 'wpo_browser_cache_settings_added' => $wpo_browser_cache->is_browser_cache_section_exists(), |
| 470 | 505 | 'class_name' => (true === $wpo_browser_cache_enabled ? 'wpo-enabled' : 'wpo-disabled'), |
| 471 | 506 | 'wpo_browser_cache_expire_days' => WP_Optimize()->get_options()->get_option('browser_cache_expire_days', '28'), |
| 472 | 507 | 'wpo_browser_cache_expire_hours' => WP_Optimize()->get_options()->get_option('browser_cache_expire_hours', '0'), |
| 508 | + 'wpo_browser_cache_error_message' => WP_Optimize()->get_options()->get_option('browser_cache_error_message', ''), | |
| 509 | + 'wpo_browser_cache_output' => WP_Optimize()->get_options()->get_option('browser_cache_output', ''), | |
| 473 | 510 | 'info_link' => 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching', |
| 474 | 511 | 'faq_link' => 'https://www.digitalocean.com/community/tutorials/how-to-implement-browser-caching-with-nginx-s-header-module-on-ubuntu-16-04', |
| 475 | 512 | )); |
| 476 | 513 | } |
| 477 | - | |
| 514 | + | |
| 478 | 515 | /** |
| 516 | + * Cache: Auto LCP tab | |
| 517 | + */ | |
| 518 | + public function output_page_cache_lcp() { | |
| 519 | + $lcp_options = array(); | |
| 520 | + if (WP_Optimize::is_premium()) { | |
| 521 | + $lcp_options['lcp_preload_enable'] = (bool) WPO_Cache_Config::instance()->get_option('lcp_preload_enable'); | |
| 522 | + } | |
| 523 | + WP_Optimize()->include_template('cache/page-cache-lcp-settings.php', false, $lcp_options); | |
| 524 | + } | |
| 525 | + | |
| 526 | + /** | |
| 479 | 527 | * Check if is the current site handled with Cloudflare. |
| 480 | 528 | * |
| 481 | 529 | * @return bool |
| 482 | 530 | */ |
| 483 | - public function is_cloudflare_site(): bool { | |
| 531 | + public function is_cloudflare_site($use_cache = false): bool { | |
| 532 | + | |
| 533 | + if ($use_cache) { | |
| 534 | + $cached_value = get_transient('wpo_is_cloudflare_site'); | |
| 535 | + if (false !== $cached_value) return $cached_value; | |
| 536 | + } | |
| 537 | + | |
| 484 | 538 | $response = wp_remote_get(home_url()); |
| 485 | 539 | if (is_wp_error($response)) return false; |
| 486 | 540 | |
| 487 | 541 | $cloudflare_status = wp_remote_retrieve_header($response, 'cf-cache-status'); |
| 488 | 542 | |
| 543 | + set_transient('wpo_is_cloudflare_site', $cloudflare_status, HOUR_IN_SECONDS); | |
| 544 | + | |
| 489 | 545 | return !empty($cloudflare_status); |
| 490 | 546 | } |
| 491 | 547 | |
| 492 | 548 | /** |
| @@ -516,8 +572,9 @@ | ||
| 516 | 572 | */ |
| 517 | 573 | public function output_database_optimize_tab() { |
| 518 | 574 | $optimizer = WP_Optimize()->get_optimizer(); |
| 519 | 575 | $options = WP_Optimize()->get_options(); |
| 576 | + $optimization_results = false; | |
| 520 | 577 | |
| 521 | 578 | $nonce_passed = TeamUpdraft\WP_Optimize\Includes\Fragments\verify_nonce('_wpnonce', 'wpo_optimization'); |
| 522 | 579 | |
| 523 | 580 | // save options. |
| @@ -528,14 +585,35 @@ | ||
| 528 | 585 | $optimize_db = $nonce_passed && TeamUpdraft\WP_Optimize\Includes\Fragments\fetch_superglobal('post', 'optimize-db'); |
| 529 | 586 | |
| 530 | 587 | $optimization_results = (($nonce_passed) ? $optimizer->do_optimizations($_POST) : false); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Only isset is used to check, and compared again literal string |
| 531 | 588 | |
| 532 | - // display optimizations table or restricted access message. | |
| 589 | + // display optimization table or restricted access message. | |
| 533 | 590 | if (WP_Optimize()->can_run_optimizations()) { |
| 591 | + | |
| 592 | + $total_table_count = 0; | |
| 593 | + $too_many_tables = $optimizer->is_table_count_too_high($total_table_count); | |
| 594 | + $server_allows_table_optimization = WP_Optimize()->get_server_compatibility_instance()->does_server_allow_table_optimization(); | |
| 595 | + | |
| 534 | 596 | $wp_optimize_commands = new WP_Optimize_Commands(); |
| 535 | 597 | $status_data = $wp_optimize_commands->get_widgets_data(array('widgets' => array('all_status'))); |
| 536 | 598 | $optimizations_table_data = $wp_optimize_commands->get_widgets_data(array('widgets' => array('wp_optimize'))); |
| 537 | - WP_Optimize()->include_template('database/optimize-table.php', false, array('optimize_db' => $optimize_db, 'optimization_results' => $optimization_results, 'load_data' => false, 'does_server_allow_table_optimization' => WP_Optimize()->get_server_compatibility_instance()->does_server_allow_table_optimization(), 'optimizations_table_data' => $optimizations_table_data['data']['wp_optimize'], 'status_data' => $status_data['data']['all_status'])); | |
| 599 | + | |
| 600 | + // Merge both sets of parameters | |
| 601 | + $template_params = array( | |
| 602 | + 'optimize_db' => $optimize_db, | |
| 603 | + 'optimization_results' => $optimization_results, | |
| 604 | + 'too_many_tables' => $too_many_tables && !$optimizer->is_large_table_count_scan_complete(), | |
| 605 | + 'done_table_count' => $optimizer->get_table_status_count(), | |
| 606 | + 'total_table_count' => $total_table_count, | |
| 607 | + 'should_show_load_in_batches_button' => $server_allows_table_optimization && $too_many_tables && (0 < $total_table_count), | |
| 608 | + 'load_data' => false, | |
| 609 | + 'onboarding_active' => WP_Optimize()->get_onboarding()->is_active(), | |
| 610 | + 'optimizations_table_data' => $optimizations_table_data['data']['wp_optimize'], | |
| 611 | + 'status_data' => $status_data['data']['all_status'], | |
| 612 | + ); | |
| 613 | + | |
| 614 | + WP_Optimize()->include_template('database/optimize-table.php', false, $template_params); | |
| 615 | + | |
| 538 | 616 | } else { |
| 539 | 617 | $this->prevent_run_optimizations_message(); |
| 540 | 618 | } |
| 541 | 619 | } |
| @@ -556,8 +634,16 @@ | ||
| 556 | 634 | } else { |
| 557 | 635 | $this->prevent_run_optimizations_message(); |
| 558 | 636 | } |
| 559 | 637 | } |
| 638 | + | |
| 639 | + /** | |
| 640 | + * Outputs Dashboard Tab | |
| 641 | + */ | |
| 642 | + public function output_dashboard() { | |
| 643 | + $data = WP_Optimize_Dashboard::instance()->get_dashboard_data(); | |
| 644 | + WP_Optimize()->include_template('dashboard/dashboard.php', false, $data); | |
| 645 | + } | |
| 560 | 646 | |
| 561 | 647 | /** |
| 562 | 648 | * Outputs Performance 404 requests Tab |
| 563 | 649 | */ |
| @@ -563,9 +649,9 @@ | ||
| 563 | 649 | */ |
| 564 | 650 | public function output_performance_404_requests() { |
| 565 | 651 | $wp_optimize = WP_Optimize(); |
| 566 | 652 | $is_enabled = $wp_optimize->get_options()->get_option('404_detector', 0); |
| 567 | - | |
| 653 | + | |
| 568 | 654 | $detector = $wp_optimize->get_404_detector(); |
| 569 | 655 | $suspicious_threshold = $detector->get_suspicious_request_count_threshold(); |
| 570 | 656 | |
| 571 | 657 | $report_has_data = false; |
| @@ -697,9 +783,8 @@ | ||
| 697 | 783 | /** |
| 698 | 784 | * Manages the admin bar menu for caching (currently page and minify) |
| 699 | 785 | */ |
| 700 | 786 | public function cache_admin_bar($wp_admin_bar) { |
| 701 | - | |
| 702 | 787 | $options = WP_Optimize()->get_options(); |
| 703 | 788 | if (!$options->get_option('enable_cache_in_admin_bar', true)) return; |
| 704 | 789 | |
| 705 | 790 | /** |
| @@ -735,9 +820,9 @@ | ||
| 735 | 820 | $capability_required = WP_Optimize()->capability_required(); |
| 736 | 821 | $can_run_optimizations = WP_Optimize()->can_run_optimizations(); |
| 737 | 822 | $can_manage_options = WP_Optimize()->can_manage_options(); |
| 738 | 823 | |
| 739 | - if (!current_user_can($capability_required) || (!$can_run_optimizations && !$can_manage_options)) return; | |
| 824 | + if (!WP_Optimize()->current_user_can() || (!$can_run_optimizations && !$can_manage_options)) return; | |
| 740 | 825 | |
| 741 | 826 | $icon_svg = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmlld0JveD0iMCAwIDE2IDE2IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc0MzE2IgogICBoZWlnaHQ9IjE2IgogICB3aWR0aD0iMTYiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0MzE4IiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQzMjEiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6I2EwYTVhYTtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlkPSJwYXRoNTciCiAgICAgICBkPSJtIDEwLjc2ODgwOSw2Ljc2MTYwNTEgMCwwIGMgLTAuMDE2ODgsLTAuMDE2ODc4IC0wLjAyNTMxLC0wLjA0MjE4MSAtMC4wMzM3NCwtMC4wNjc0OTkgLTAuMDA4NCwtMC4wMDgzOSAtMC4wMDg0LC0wLjAxNjg3OCAtMC4wMTY4OCwtMC4wMzM3NDMgQyA5Ljk5MjYxMTIsNS4xOTIzMzY2IDguMjIwODU1Nyw0LjU4NDg3ODEgNi43NDQzOTEyLDUuMjkzNTc5NyA1LjY3MjkwMDUsNS44MDgyMzI4IDUuMDU3MDA0Myw2Ljg4ODE2MTMgNS4wNjU0NDIsOC4wMDE4MzY1IDQuNDU3OTgyMiw3LjMxMDAwNzYgMy42OTg2NTg0LDYuNzk1MzU0NSAyLjg1NDk2NDIsNi40OTE2MjUzIDMuMjY4Mzc0Myw1LjA2NTc4MzEgNC4yNTU0OTYsMy44MTcxMTY2IDUuNjg5Nzc0NiwzLjEyNTI4NzggOC4zNjQyODMyLDEuODM0NDM2OCAxMS41NzAzMTksMi45Mzk2NzQ0IDEyLjg4NjQ4MSw1LjU4ODg3MjYgMTMuNDUxNzU1LDYuNzI3ODU5NiAxNC42NDk4MDEsNy4zNTIxOTIxIDE1Ljg0Nzg0Niw3LjIzNDA3NSAxNS43NjM0ODIsNi4zMzk3NiAxNS41MTg4MDUsNS40MzcwMDg2IDE1LjEwNTM5Niw0LjU3NjQ0MDQgMTMuMjE1NTIxLDAuNjg3MDEzNCA4LjUzMzAyMjYsLTAuOTQxMzE2MjcgNC42NDM1OTQzLDAuOTQwMTIxNzkgMi4zMjM0MzcsMi4wNjIyMzM0IDAuODA0Nzg4MTQsNC4xNzk5MDQ0IDAuMzU3NjMxMzIsNi41MzM4MDk4IDIuNDE2MjQzOCw2LjQyNDEyOSA0LjQzMjY3MTcsNy41MDQwNTc0IDUuNDM2NjY2Miw5LjQzNjExNjcgbCAwLjAwODM5LDAgYyAwLjc1OTMxOTIsMS4zNzUyMjAzIDIuNDcyMDE3OCwxLjk0MDQ5NTMgMy45MDYyOTYsMS4yNDg2NjczIDEuMDQ2MTc5OCwtMC41MDYyMTggMS42NTM2NDA4LC0xLjUzNTUyMzggMS42Nzg5NTA4LC0yLjYxNTQ1MTIgMC41ODIxNDgsMC43MDg3MDE4IDEuMzMzMDM1LDEuMjQ4NjY2OCAyLjE1OTg1NiwxLjU3NzcwNjQgLTAuNDM4NzIxLDEuMzU4MzQ3OCAtMS40MDA1MzMsMi41NDc5NTQ4IC0yLjc5MjYyNywzLjIxNDQ3ODggLTIuNTkwMTM4NywxLjI0ODY1OCAtNS42NzgwNTc0LDAuMjUzMTA0IC03LjA2MTcxNTEsLTIuMjI3MzU3IGwgMCwwIEMgMi43NjIxMDQ4LDkuNDUyOTg5NCAxLjUxMzQzODMsOC44MjAyMTkxIDAuMjgxNjQ1OTIsOC45NzIwODQ0IDAuMzgyODg3NjUsOS43OTg5MDQ2IDAuNjE5MTIzMzEsMTAuNjE3Mjg3IDAuOTk4Nzg1MiwxMS40MDE5MjIgYyAxLjg4MTQzNjgsMy44OTc4NjQgNi41NjM5MzcsNS41MjYxOTggMTAuNDYxODAwOCwzLjY0NDc2IDIuMjQ0MjI2LC0xLjA4ODM2OSAzLjczNzU2MiwtMy4xMDQ3OTYgNC4yMzUzNDIsLTUuMzc0MzMyMyAtMS45OTk1NTQsMC4wNDIxODEgLTMuOTQ4NDg2LC0xLjAyOTMwNjMgLTQuOTI3MTcsLTIuOTEwNzQzMyB6IgogICAgICAgY2xhc3M9InN0MTciIC8+CiAgPC9nPgo8L3N2Zz4K'; |
| 742 | 827 | |
| 743 | 828 | // Removes the admin menu items on the left WP bar. |
| @@ -765,11 +850,20 @@ | ||
| 765 | 850 | */ |
| 766 | 851 | public function get_submenu_items() { |
| 767 | 852 | $sub_menu_items = array( |
| 768 | 853 | array( |
| 854 | + 'page_title' => __('Overview', 'wp-optimize'), | |
| 855 | + 'menu_title' => __('Overview', 'wp-optimize'), | |
| 856 | + 'menu_slug' => 'WP-Optimize', | |
| 857 | + 'function' => array($this, 'display_admin'), | |
| 858 | + 'icon' => 'chart-bar', | |
| 859 | + 'create_submenu' => true, | |
| 860 | + 'order' => 10, | |
| 861 | + ), | |
| 862 | + array( | |
| 769 | 863 | 'page_title' => __('Database', 'wp-optimize'), |
| 770 | 864 | 'menu_title' => __('Database', 'wp-optimize'), |
| 771 | - 'menu_slug' => 'WP-Optimize', | |
| 865 | + 'menu_slug' => 'wpo_database', | |
| 772 | 866 | 'function' => array($this, 'display_admin'), |
| 773 | 867 | 'icon' => 'cloud', |
| 774 | 868 | 'create_submenu' => true, |
| 775 | 869 | 'order' => 20, |