%PDF- %PDF-
Direktori : /var/www/pn/wp-content/plugins/wp-rocket/inc/Engine/Preload/ |
Current File : /var/www/pn/wp-content/plugins/wp-rocket/inc/Engine/Preload/SitemapPreloadSubscriber.php |
<?php namespace WP_Rocket\Engine\Preload; use WP_Rocket\Admin\Options_Data; use WP_Rocket\Event_Management\Subscriber_Interface; /** * Sitemap Preload Subscriber. * * @since 3.2 * @author Remy Perona */ class SitemapPreloadSubscriber implements Subscriber_Interface { /** * Constructor * * @since 3.2 * @author Remy Perona * * @param Sitemap $sitemap_preload Sitemap Preload instance. * @param Options_Data $options Options instance. */ public function __construct( Sitemap $sitemap_preload, Options_Data $options ) { $this->options = $options; $this->sitemap_preload = $sitemap_preload; } /** * Return an array of events that this subscriber wants to listen to. * * @since 3.2 * @author Remy Perona * * @return array */ public static function get_subscribed_events() { return [ 'pagely_cache_purge_after' => [ 'preload', 12 ], 'update_option_' . WP_ROCKET_SLUG => [ 'maybe_cancel_preload', 10, 2 ], 'admin_notices' => [ 'simplexml_notice' ], 'admin_post_rocket_rollback' => [ 'stop_sitemap_preload', 9 ], 'wp_rocket_upgrade' => [ 'stop_sitemap_preload', 9 ], ]; } /** * Launches the sitemap preload * * @since 3.2 * @author Remy Perona * * @return void */ public function preload() { if ( ! $this->options->get( 'sitemap_preload' ) || ! $this->options->get( 'manual_preload' ) ) { return; } /** * Filters the sitemaps list to preload * * @since 2.8 * * @param array Array of sitemaps URL */ $sitemaps = apply_filters( 'rocket_sitemap_preload_list', $this->options->get( 'sitemaps', false ) ); $sitemaps = array_flip( array_flip( $sitemaps ) ); if ( ! $sitemaps ) { return; } $this->sitemap_preload->run_preload( $sitemaps ); } /** * Cancels any running sitemap preload if the option is deactivated * * @since 3.2 * @author Remy Perona * * @param array $old_value Previous option values. * @param array $value New option values. * @return void */ public function maybe_cancel_preload( $old_value, $value ) { if ( isset( $old_value['sitemap_preload'], $value['sitemap_preload'] ) && $old_value['sitemap_preload'] !== $value['sitemap_preload'] && 0 === (int) $value['sitemap_preload'] ) { $this->sitemap_preload->cancel_preload(); } } /** * Displays a notice if SimpleXML PHP extension is not enabled * * @since 3.2.5 * @author Remy Perona * @return void */ public function simplexml_notice() { if ( ! current_user_can( 'rocket_preload_cache' ) ) { return; } $screen = get_current_screen(); if ( 'settings_page_wprocket' !== $screen->id ) { return; } if ( ! $this->options->get( 'sitemap_preload' ) ) { return; } if ( function_exists( 'simplexml_load_string' ) ) { return; } $message = sprintf( // Translators: %1$s = opening link tag, %2$s = closing link tag. __( '%1$sSimpleXML PHP extension%2$s is not enabled on your server. Please contact your host to enable it before running sitemap-based cache preloading.', 'rocket' ), '<a href="http://php.net/manual/en/book.simplexml.php" target="_blank" rel="noopener noreferrer">', '</a>' ); \rocket_notice_html( [ 'status' => 'warning', 'message' => $message, ] ); } /** * Stops sitemap preload. * * @since 3.10 * * @return void */ public function stop_sitemap_preload() { $this->sitemap_preload->cancel_preload(); } }