| @@ -393,5 +393,119 @@ | ||
| 393 | 393 | $length = strlen( $test ); |
| 394 | 394 | |
| 395 | 395 | return ( substr( $str, -$length, $length ) === $test ); |
| 396 | 396 | } |
| 397 | + | |
| 398 | + /** | |
| 399 | + * Returns true if a pagecache is found, false if not. | |
| 400 | + * Now used to show notice, might be used later on to (un)hide page caching in AO if no page cache found. | |
| 401 | + * | |
| 402 | + * @return bool | |
| 403 | + */ | |
| 404 | + public static function find_pagecache( $disregard_transient = false ) { | |
| 405 | + static $_found_pagecache = null; | |
| 406 | + | |
| 407 | + if ( null === $_found_pagecache ) { | |
| 408 | + $_page_cache_constants = array( 'NgInx' => 'NGINX_HELPER_BASENAME', 'Kinsta' => 'KINSTA_CACHE_ZONE', 'Presslabs' => 'PL_INSTANCE_REF', '' => 'Pressidium', 'Cache Enabler' => 'CACHE_ENABLER_VERSION', 'Speed Booster Pack' => 'SBP_PLUGIN_NAME', 'Servebolt' => 'SERVEBOLT_PLUGIN_FILE', 'WP CloudFlare Super Page Cache' => 'SWCFPC_PLUGIN_PATH', 'Cachify' => 'CACHIFY_CACHE_DIR', 'WP Rocket' => 'WP_ROCKET_CACHE_PATH', 'WP Optimize' => 'WPO_VERSION', 'Autoptimize Pro' => 'AO_PRO_PAGECACHE_CACHE_DIR' ); | |
| 409 | + $_page_cache_classes = array( 'Swift Performance' => 'Swift_Performance_Cache', 'WP Fastest Cache' => 'WpFastestCache', 'Quick Cache' => 'c_ws_plugin__qcache_purging_routines', 'ZenCache' => 'zencache', 'Comet Cache' => 'comet_cache', 'WP Engine' => 'WpeCommon', 'Flywheel' => 'FlywheelNginxCompat', 'Pagely' => 'PagelyCachePurge' ); | |
| 410 | + $_page_cache_functions = array( 'WP Super Cache' => 'wp_cache_clear_cache', 'W3 Total Cache' => 'w3tc_pgcache_flush', 'WP Fast Cache' => 'wp_fast_cache_bulk_delete_all', 'Rapidcache' => 'rapidcache_clear_cache', 'Siteground' => 'sg_cachepress_purge_cache', 'WP Super Cache' => 'prune_super_cache' ); | |
| 411 | + | |
| 412 | + $_found_pagecache = false; | |
| 413 | + if ( true !== $disregard_transient ) { | |
| 414 | + $_ao_pagecache_transient = 'autoptimize_pagecache_check'; | |
| 415 | + $_found_pagecache = get_transient( $_ao_pagecache_transient ); | |
| 416 | + } | |
| 417 | + | |
| 418 | + if ( current_user_can( 'manage_options' ) && false === $_found_pagecache ) { | |
| 419 | + // loop through known pagecache constants. | |
| 420 | + foreach ( $_page_cache_constants as $_name => $_constant ) { | |
| 421 | + if ( defined( $_constant ) ) { | |
| 422 | + $_found_pagecache = $_name; | |
| 423 | + break; | |
| 424 | + } | |
| 425 | + } | |
| 426 | + // and loop through known pagecache classes. | |
| 427 | + if ( false === $_found_pagecache ) { | |
| 428 | + foreach ( $_page_cache_classes as $_name => $_class ) { | |
| 429 | + if ( class_exists( $_class ) ) { | |
| 430 | + $_found_pagecache = $_name; | |
| 431 | + break; | |
| 432 | + } | |
| 433 | + } | |
| 434 | + } | |
| 435 | + // and loop through known pagecache functions. | |
| 436 | + if ( false === $_found_pagecache ) { | |
| 437 | + foreach ( $_page_cache_functions as $_name => $_function ) { | |
| 438 | + if ( function_exists( $_function ) ) { | |
| 439 | + $_found_pagecache = $_name; | |
| 440 | + break; | |
| 441 | + } | |
| 442 | + } | |
| 443 | + } | |
| 444 | + | |
| 445 | + // store in transient for 1 week if pagecache found. | |
| 446 | + if ( true === $_found_pagecache && true !== $disregard_transient ) { | |
| 447 | + set_transient( $_ao_pagecache_transient, true, WEEK_IN_SECONDS ); | |
| 448 | + } | |
| 449 | + } | |
| 450 | + } | |
| 451 | + | |
| 452 | + return $_found_pagecache; | |
| 453 | + } | |
| 454 | + | |
| 455 | + /** | |
| 456 | + * Returns true if on one of the AO settings tabs, false if not. | |
| 457 | + * Used to limit notifications to AO settings pages. | |
| 458 | + * | |
| 459 | + * @return bool | |
| 460 | + */ | |
| 461 | + public static function is_ao_settings() { | |
| 462 | + $_is_ao_settings = ( str_replace( array( 'autoptimize', 'autoptimize_imgopt', 'ao_critcss', 'autoptimize_extra', 'ao_partners' ), '', $_SERVER['REQUEST_URI'] ) !== $_SERVER['REQUEST_URI'] ? true : false ); | |
| 463 | + return $_is_ao_settings; | |
| 464 | + } | |
| 465 | + | |
| 466 | + /** | |
| 467 | + * Returns false if no conflicting plugins are found, the name if the plugin if found. | |
| 468 | + * | |
| 469 | + * @return bool|string | |
| 470 | + */ | |
| 471 | + public static function find_potential_conflicts() { | |
| 472 | + if ( defined( 'WPFC_WP_CONTENT_BASENAME' ) ) { | |
| 473 | + $_wpfc_options = json_decode( get_option( 'WpFastestCache' ) ); | |
| 474 | + foreach ( array( 'wpFastestCacheMinifyCss', 'wpFastestCacheCombineCss','wpFastestCacheCombineJs' ) as $_wpfc_conflicting ) { | |
| 475 | + if ( isset( $_wpfc_options->$_wpfc_conflicting ) && $_wpfc_options->$_wpfc_conflicting === 'on' ) { | |
| 476 | + return 'WP Fastest Cache'; | |
| 477 | + } | |
| 478 | + } | |
| 479 | + } elseif ( defined( 'W3TC_VERSION' ) ) { | |
| 480 | + $w3tcConfig = file_get_contents( WP_CONTENT_DIR . '/w3tc-config/master.php' ); | |
| 481 | + $w3tc_minify_on = strpos( $w3tcConfig, '"minify.enabled": true' ); | |
| 482 | + if ( $w3tc_minify_on ) { | |
| 483 | + return 'W3 Total Cache'; | |
| 484 | + } | |
| 485 | + } elseif ( defined('SiteGround_Optimizer\VERSION') ) { | |
| 486 | + if ( get_option('siteground_optimizer_optimize_css') == 1 || get_option('siteground_optimizer_optimize_javascript') == 1 || get_option('siteground_optimizer_combine_javascript') == 1 || get_option('siteground_optimizer_combine_css') == 1 ) { | |
| 487 | + return 'Siteground Optimizer'; | |
| 488 | + } | |
| 489 | + } elseif ( defined( 'WPO_VERSION' ) ) { | |
| 490 | + $_wpo_options = get_site_option( 'wpo_minify_config' ); | |
| 491 | + if ( is_array( $_wpo_options ) && $_wpo_options['enabled'] == 1 && ( $_wpo_options['enable_css'] == 1 || $_wpo_options['enable_js'] == 1 ) ) { | |
| 492 | + return 'WP Optimize'; | |
| 493 | + } | |
| 494 | + } elseif ( defined( 'WPACU_PLUGIN_VERSION' ) || defined( 'WPACU_PRO_PLUGIN_VERSION' ) ) { | |
| 495 | + $wpacuSettingsClass = new \WpAssetCleanUp\Settings(); | |
| 496 | + $wpacuSettings = $wpacuSettingsClass->getAll(); | |
| 497 | + | |
| 498 | + if ( $wpacuSettings['minify_loaded_css'] || $wpacuSettings['minify_loaded_js'] || $wpacuSettings['combine_loaded_js'] || $wpacuSettings['combine_loaded_css'] ) { | |
| 499 | + return 'Asset Cleanup'; | |
| 500 | + } | |
| 501 | + } elseif ( defined( 'WP_ROCKET_VERSION' ) && function_exists( 'get_rocket_option' ) ) { | |
| 502 | + if ( get_rocket_option( 'minify_js' ) || get_rocket_option( 'minify_concatenate_js' ) || get_rocket_option( 'minify_css' ) || get_rocket_option( 'minify_concatenate_css' ) || get_rocket_option('async_css' ) ) { | |
| 503 | + return 'WP Rocket'; | |
| 504 | + } | |
| 505 | + } elseif ( function_exists( 'fvm_get_settings' ) ) { | |
| 506 | + return 'Fast Velocity Minify'; | |
| 507 | + } | |
| 508 | + | |
| 509 | + return false; | |
| 510 | + } | |
| 397 | 511 | } |