HEX
Server: Apache
System: Linux 162-240-236-42.bluehost.com 3.10.0-1160.114.2.el7.x86_64 #1 SMP Wed Mar 20 15:54:52 UTC 2024 x86_64
User: bt667 (1004)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /home/bt667/www/wp-content/plugins/wp-rocket-old/inc/Engine/Cache/Config/ConfigSubscriber.php
<?php
namespace WP_Rocket\Engine\Cache\Config;

use WP_Rocket\Event_Management\Subscriber_Interface;
use WP_Rocket\Admin\Options_Data;
use WP_Rocket\Admin\Options;

/**
 * Subscriber for the Cache Config
 */
class ConfigSubscriber implements Subscriber_Interface {

	/**
	 * Options Data instance.
	 *
	 * @var Options_Data
	 */
	private $options;

	/**
	 * Options instance.
	 *
	 * @var Options
	 */
	private $options_api;

	/**
	 * Creates an instance of the Cache Config Subscriber.
	 *
	 * @param Options_Data $options     WP Rocket options instance.
	 * @param Options      $options_api Options instance.
	 */
	public function __construct( Options_Data $options, Options $options_api ) {
		$this->options     = $options;
		$this->options_api = $options_api;
	}

	/**
	 * Return an array of events that this subscriber wants to listen to.
	 *
	 * @return array
	 */
	public static function get_subscribed_events() {
		return [
			'permalink_structure_changed' => 'regenerate_config_file',
			'pre_update_option_' . rocket_get_constant( 'WP_ROCKET_SLUG', 'wp_rocket_settings' ) => [ 'change_cache_reject_uri_with_permalink', 10, 2 ],
		];
	}

	/**
	 * Returns a matching user added patterns with permalink structure
	 *
	 * @param array $patterns user pattern.
	 * @return array
	 */
	private function match_pattern_with_permalink_structure( array $patterns ): array {
		if ( empty( $patterns ) ) {
			return $patterns;
		}

		$patterns = array_map(
			function ( $uri ) {
				if ( false !== strpos( $uri, 'index.php' ) || '/' === $uri ) {
					return $uri;
				}

				return user_trailingslashit( $uri );
			},
			$patterns
			);

		return $patterns;
	}

	/**
	 * Regenerate config file.
	 *
	 * @return void
	 */
	public function regenerate_config_file() {
		$cache_reject_uri = $this->match_pattern_with_permalink_structure( $this->options->get( 'cache_reject_uri', [] ) );

		$this->options->set( 'cache_reject_uri', $cache_reject_uri );
		$this->options_api->set( 'settings', $this->options->get_options() );

		rocket_generate_config_file();
	}

	/**
	 * Modify cache_reject_uri values.
	 *
	 * @param mixed $value The new, unserialized option value.
	 * @param mixed $old_value The old option value.
	 * @return array
	 */
	public function change_cache_reject_uri_with_permalink( $value, $old_value ): array {
		if ( ! isset( $old_value['cache_reject_uri'], $value['cache_reject_uri'] ) ) {
			return $value;
		}

		if ( $old_value['cache_reject_uri'] === $value['cache_reject_uri'] ) {
			return $value;
		}

		$value['cache_reject_uri'] = $this->match_pattern_with_permalink_structure( $value['cache_reject_uri'] );
		return $value;
	}
}