272 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			272 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * File: CacheGroups_Plugin_Admin.php
 | 
						|
 *
 | 
						|
 * @since 2.1.0
 | 
						|
 *
 | 
						|
 * @package W3TC
 | 
						|
 */
 | 
						|
 | 
						|
namespace W3TC;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class: CacheGroups_Plugin_Admin
 | 
						|
 *
 | 
						|
 * @since 2.1.0
 | 
						|
 */
 | 
						|
class CacheGroups_Plugin_Admin extends Base_Page_Settings {
 | 
						|
	/**
 | 
						|
	 * Current page.
 | 
						|
	 *
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	protected $_page = 'w3tc_cachegroups'; // phpcs:ignore PSR2.Classes.PropertyDeclaration.Underscore
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Cache groups settings view.
 | 
						|
	 *
 | 
						|
	 * @since 2.1.0
 | 
						|
	 */
 | 
						|
	public function view() {
 | 
						|
		$c = Dispatcher::config();
 | 
						|
 | 
						|
		// Header.
 | 
						|
		require W3TC_INC_DIR . '/options/common/header.php';
 | 
						|
 | 
						|
		// User agent groups.
 | 
						|
		$useragent_groups = array(
 | 
						|
			'value'       => $c->get_array( 'mobile.rgroups' ),
 | 
						|
			'disabled'    => $c->is_sealed( 'mobile.rgroups' ),
 | 
						|
			'description' =>
 | 
						|
				'<li>' .
 | 
						|
				__(
 | 
						|
					'Enabling even a single user agent group will set a cookie called "w3tc_referrer." It is used to ensure a consistent user experience across page views. Make sure any reverse proxy servers etc respect this cookie for proper operation.',
 | 
						|
					'w3-total-cache'
 | 
						|
				) .
 | 
						|
				'</li>' .
 | 
						|
				'<li>' .
 | 
						|
				__(
 | 
						|
					'Per the above, make sure that visitors are notified about the cookie as per any regulations in your market.',
 | 
						|
					'w3-total-cache'
 | 
						|
				) .
 | 
						|
				'</li>',
 | 
						|
		);
 | 
						|
 | 
						|
		$useragent_groups = apply_filters( 'w3tc_ui_config_item_mobile.rgroups', $useragent_groups ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
 | 
						|
		$w3_mobile        = Dispatcher::component( 'Mobile_UserAgent' );
 | 
						|
		$useragent_themes = $w3_mobile->get_themes();
 | 
						|
 | 
						|
		// Referrer groups.
 | 
						|
		$referrer_groups = $this->_config->get_array( 'referrer.rgroups' );
 | 
						|
		$w3_referrer     = Dispatcher::component( 'Mobile_Referrer' );
 | 
						|
		$referrer_themes = $w3_referrer->get_themes();
 | 
						|
 | 
						|
		// Cookie groups.
 | 
						|
		$cookie_groups = array(
 | 
						|
			'value'    => $c->get_array( 'pgcache.cookiegroups.groups' ),
 | 
						|
			'disabled' => $c->is_sealed( 'pgcache.cookiegroups.groups' ),
 | 
						|
		);
 | 
						|
		$cookie_groups = apply_filters( 'w3tc_ui_config_item_pgcache.cookiegroups.groups', $cookie_groups ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
 | 
						|
 | 
						|
		// Load view.
 | 
						|
		require W3TC_DIR . '/CacheGroups_Plugin_Admin_View.php';
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Save settings.
 | 
						|
	 *
 | 
						|
	 * @since 2.1.0
 | 
						|
	 *
 | 
						|
	 * @static
 | 
						|
	 *
 | 
						|
	 * @param array $config Config.
 | 
						|
	 */
 | 
						|
	public static function w3tc_config_ui_save_w3tc_cachegroups( $config ) {
 | 
						|
		// * User agent groups.
 | 
						|
		$useragent_groups     = Util_Request::get_array( 'mobile_groups' );
 | 
						|
		$mobile_groups        = array();
 | 
						|
		$cached_mobile_groups = array();
 | 
						|
 | 
						|
		foreach ( $useragent_groups as $group => $group_config ) {
 | 
						|
			$group = strtolower( $group );
 | 
						|
			$group = preg_replace( '~[^0-9a-z_]+~', '_', $group );
 | 
						|
			$group = trim( $group, '_' );
 | 
						|
 | 
						|
			if ( $group ) {
 | 
						|
				$theme    = isset( $group_config['theme'] ) ? trim( $group_config['theme'] ) : 'default';
 | 
						|
				$enabled  = isset( $group_config['enabled'] ) ? (bool) $group_config['enabled'] : true;
 | 
						|
				$redirect = isset( $group_config['redirect'] ) ? trim( $group_config['redirect'] ) : '';
 | 
						|
				$agents   = isset( $group_config['agents'] ) ? Util_Environment::textarea_to_array( $group_config['agents'] ) : array();
 | 
						|
 | 
						|
				$mobile_groups[ $group ] = array(
 | 
						|
					'theme'    => $theme,
 | 
						|
					'enabled'  => $enabled,
 | 
						|
					'redirect' => $redirect,
 | 
						|
					'agents'   => $agents,
 | 
						|
				);
 | 
						|
 | 
						|
				$cached_mobile_groups[ $group ] = $agents;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		// Allow plugins modify WPSC mobile groups.
 | 
						|
		$cached_mobile_groups = apply_filters( 'cached_mobile_groups', $cached_mobile_groups );
 | 
						|
 | 
						|
		// Merge existent and delete removed groups.
 | 
						|
		foreach ( $mobile_groups as $group => $group_config ) {
 | 
						|
			if ( isset( $cached_mobile_groups[ $group ] ) ) {
 | 
						|
				$mobile_groups[ $group ]['agents'] = (array) $cached_mobile_groups[ $group ];
 | 
						|
			} else {
 | 
						|
				unset( $mobile_groups[ $group ] );
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		// Add new groups.
 | 
						|
		foreach ( $cached_mobile_groups as $group => $agents ) {
 | 
						|
			if ( ! isset( $mobile_groups[ $group ] ) ) {
 | 
						|
				$mobile_groups[ $group ] = array(
 | 
						|
					'theme'    => '',
 | 
						|
					'enabled'  => true,
 | 
						|
					'redirect' => '',
 | 
						|
					'agents'   => $agents,
 | 
						|
				);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		// Allow plugins modify W3TC mobile groups.
 | 
						|
		$mobile_groups = apply_filters( 'w3tc_mobile_groups', $mobile_groups );
 | 
						|
 | 
						|
		// Sanitize mobile groups.
 | 
						|
		foreach ( $mobile_groups as $group => $group_config ) {
 | 
						|
			$mobile_groups[ $group ] = array_merge(
 | 
						|
				array(
 | 
						|
					'theme'    => '',
 | 
						|
					'enabled'  => true,
 | 
						|
					'redirect' => '',
 | 
						|
					'agents'   => array(),
 | 
						|
				),
 | 
						|
				$group_config
 | 
						|
			);
 | 
						|
 | 
						|
			$mobile_groups[ $group ]['agents'] = array_unique(
 | 
						|
				array_map(
 | 
						|
					'strtolower',
 | 
						|
					$mobile_groups[ $group ]['agents']
 | 
						|
				)
 | 
						|
			);
 | 
						|
			sort( $mobile_groups[ $group ]['agents'] );
 | 
						|
		}
 | 
						|
 | 
						|
		$enable_mobile = false;
 | 
						|
 | 
						|
		foreach ( $mobile_groups as $group_config ) {
 | 
						|
			if ( $group_config['enabled'] ) {
 | 
						|
				$enable_mobile = true;
 | 
						|
				break;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		$config->set( 'mobile.enabled', $enable_mobile );
 | 
						|
		$config->set( 'mobile.rgroups', $mobile_groups );
 | 
						|
 | 
						|
		// * Referrer groups.
 | 
						|
		$ref_groups = Util_Request::get_array( 'referrer_groups' );
 | 
						|
 | 
						|
		$referrer_groups = array();
 | 
						|
 | 
						|
		foreach ( $ref_groups as $group => $group_config ) {
 | 
						|
			$group = strtolower( $group );
 | 
						|
			$group = preg_replace( '~[^0-9a-z_]+~', '_', $group );
 | 
						|
			$group = trim( $group, '_' );
 | 
						|
 | 
						|
			if ( $group ) {
 | 
						|
				$theme     = isset( $group_config['theme'] ) ? trim( $group_config['theme'] ) : 'default';
 | 
						|
				$enabled   = isset( $group_config['enabled'] ) ? (bool) $group_config['enabled'] : true;
 | 
						|
				$redirect  = isset( $group_config['redirect'] ) ? trim( $group_config['redirect'] ) : '';
 | 
						|
				$referrers = isset( $group_config['referrers'] ) ? Util_Environment::textarea_to_array( $group_config['referrers'] ) : array();
 | 
						|
 | 
						|
				$referrer_groups[ $group ] = array(
 | 
						|
					'theme'     => $theme,
 | 
						|
					'enabled'   => $enabled,
 | 
						|
					'redirect'  => $redirect,
 | 
						|
					'referrers' => $referrers,
 | 
						|
				);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		// Allow plugins modify W3TC referrer groups.
 | 
						|
		$referrer_groups = apply_filters( 'w3tc_referrer_groups', $referrer_groups );
 | 
						|
 | 
						|
		// Sanitize mobile groups.
 | 
						|
		foreach ( $referrer_groups as $group => $group_config ) {
 | 
						|
			$referrer_groups[ $group ] = array_merge(
 | 
						|
				array(
 | 
						|
					'theme'     => '',
 | 
						|
					'enabled'   => true,
 | 
						|
					'redirect'  => '',
 | 
						|
					'referrers' => array(),
 | 
						|
				),
 | 
						|
				$group_config
 | 
						|
			);
 | 
						|
 | 
						|
			$referrer_groups[ $group ]['referrers'] = array_unique(
 | 
						|
				array_map(
 | 
						|
					'strtolower',
 | 
						|
					$referrer_groups[ $group ]['referrers']
 | 
						|
				)
 | 
						|
			);
 | 
						|
			sort( $referrer_groups[ $group ]['referrers'] );
 | 
						|
		}
 | 
						|
 | 
						|
		$enable_referrer = false;
 | 
						|
 | 
						|
		foreach ( $referrer_groups as $group_config ) {
 | 
						|
			if ( $group_config['enabled'] ) {
 | 
						|
				$enable_referrer = true;
 | 
						|
				break;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		$config->set( 'referrer.enabled', $enable_referrer );
 | 
						|
		$config->set( 'referrer.rgroups', $referrer_groups );
 | 
						|
 | 
						|
		// * Cookie groups.
 | 
						|
		$mobile_groups        = array();
 | 
						|
		$cached_mobile_groups = array();
 | 
						|
		$cookie_groups        = Util_Request::get_array( 'cookiegroups' );
 | 
						|
 | 
						|
		foreach ( $cookie_groups as $group => $group_config ) {
 | 
						|
			$group = strtolower( $group );
 | 
						|
			$group = preg_replace( '~[^0-9a-z_]+~', '_', $group );
 | 
						|
			$group = trim( $group, '_' );
 | 
						|
 | 
						|
			if ( $group ) {
 | 
						|
				$enabled = isset( $group_config['enabled'] ) ? (bool) $group_config['enabled'] : false;
 | 
						|
				$cache   = isset( $group_config['cache'] ) ? (bool) $group_config['cache'] : false;
 | 
						|
				$cookies = isset( $group_config['cookies'] ) ? Util_Environment::textarea_to_array( $group_config['cookies'] ) : array();
 | 
						|
 | 
						|
				$cookiegroups[ $group ] = array(
 | 
						|
					'enabled' => $enabled,
 | 
						|
					'cache'   => $cache,
 | 
						|
					'cookies' => $cookies,
 | 
						|
				);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		// Allow plugins modify W3TC cookie groups.
 | 
						|
		$cookiegroups = apply_filters( 'w3tc_pgcache_cookiegroups', $cookiegroups );
 | 
						|
 | 
						|
		$enabled = false;
 | 
						|
 | 
						|
		foreach ( $cookiegroups as $group_config ) {
 | 
						|
			if ( $group_config['enabled'] ) {
 | 
						|
				$enabled = true;
 | 
						|
				break;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		$config->set( 'pgcache.cookiegroups.enabled', $enabled );
 | 
						|
		$config->set( 'pgcache.cookiegroups.groups', $cookiegroups );
 | 
						|
	}
 | 
						|
}
 |