PluginProbe
WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance / 3.4.1
WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance v3.4.1
4.7.0 4.6.1 4.6.0 4.5.5 4.5.4 4.5.3 4.5.2 3.2.20 3.2.21 3.2.22 3.2.3 3.2.5 3.2.6 3.2.7 3.2.9 3.3.0 3.3.1 3.3.2 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.7.0 3.7.1 All 111 releases
wp-optimize / cache / class-wpo-cache-config.php

class-wpo-cache-config.php in WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance 3.4.1, at cache/class-wpo-cache-config.php

266 lines 7.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if (!defined('ABSPATH')) die('No direct access allowed');
4
5 /**
6 * Handles cache configuration and related I/O
7 */
8
9 if (!class_exists('WPO_Cache_Config')) :
10
11 class WPO_Cache_Config {
12
13 /**
14 * Defaults
15 *
16 * @var array
17 */
18 public $defaults;
19
20 /**
21 * Instance of this class
22 *
23 * @var mixed
24 */
25 public static $instance;
26
27 /**
28 * @var array
29 */
30 public $config;
31
32
33 /**
34 * Set config defaults
35 */
36 public function __construct() {
37 $this->defaults = $this->get_defaults();
38 }
39
40 /**
41 * Get config from file or cache
42 *
43 * @return array
44 */
45 public function get() {
46
47 if (is_multisite()) {
48 $config = get_site_option('wpo_cache_config', $this->get_defaults());
49 } else {
50 $config = get_option('wpo_cache_config', $this->get_defaults());
51 }
52
53 return wp_parse_args($config, $this->get_defaults());
54 }
55
56 /**
57 * Get a specific configuration option
58 *
59 * @param string $option_key The option identifier
60 * @param boolean $default Default value if the option doesn't exist (Default to false)
61 * @return mixed
62 */
63 public function get_option($option_key, $default = false) {
64 $options = $this->get();
65 return apply_filters("wpo_option_key_{$option_key}", (isset($options[$option_key]) ? $options[$option_key] : $default));
66 }
67
68 /**
69 * Updates the given config object in file and DB
70 *
71 * @param array $config - the cache configuration
72 * @param boolean $skip_disk_if_not_yet_present - only write the configuration file to disk if it already exists. This presents PHP notices if the cache has never been on, and settings are saved.
73 *
74 * @return bool
75 */
76 public function update($config, $skip_disk_if_not_yet_present = false) {
77 $config = wp_parse_args($config, $this->get_defaults());
78
79 $config['page_cache_length_value'] = intval($config['page_cache_length_value']);
80 $config['page_cache_length'] = $this->calculate_page_cache_length($config['page_cache_length_value'], $config['page_cache_length_unit']);
81
82 /**
83 * Filters the cookies used to set cache file names
84 *
85 * @param array $cookies - The cookies
86 * @param array $config - The new config
87 */
88 $wpo_cache_cookies = apply_filters('wpo_cache_cookies', array(), $config);
89 sort($wpo_cache_cookies);
90
91 /**
92 * Filters the query variables used to set cache file names
93 *
94 * @param array $wpo_query_variables - The variables
95 * @param array $config - The new config
96 */
97 $wpo_query_variables = apply_filters('wpo_cache_query_variables', array(), $config);
98 sort($wpo_query_variables);
99
100 $config['wpo_cache_cookies'] = $wpo_cache_cookies;
101 $config['wpo_cache_query_variables'] = $wpo_query_variables;
102
103 $config = apply_filters('wpo_cache_update_config', $config);
104
105 if (is_multisite()) {
106 update_site_option('wpo_cache_config', $config);
107 } else {
108 update_option('wpo_cache_config', $config);
109 }
110
111 do_action('wpo_cache_config_updated', $config);
112
113 return $this->write($config, $skip_disk_if_not_yet_present);
114 }
115
116 /**
117 * Calculate cache expiration value in seconds.
118 *
119 * @param int $value
120 * @param string $unit ( hours | days | months )
121 *
122 * @return int
123 */
124 private function calculate_page_cache_length($value, $unit) {
125 $cache_length_units = array(
126 'hours' => 3600,
127 'days' => 86400,
128 'months' => 2629800, // 365.25 * 86400 / 12
129 );
130
131 return $value * $cache_length_units[$unit];
132 }
133
134 /**
135 * Deletes config files and options
136 *
137 * @return bool
138 */
139 public function delete() {
140
141 if (is_multisite()) {
142 delete_site_option('wpo_cache_config');
143 } else {
144 delete_option('wpo_cache_config');
145 }
146
147 if (!WPO_Page_Cache::delete(WPO_CACHE_CONFIG_DIR)) {
148 return false;
149 }
150
151 return true;
152 }
153
154 /**
155 * Writes config to file
156 *
157 * @param array $config - Configuration array.
158 * @param boolean $only_if_present - only writes to the disk if the configuration file already exists
159 *
160 * @return boolean - returns false if an attempt to write failed
161 */
162 public function write($config, $only_if_present = false) {
163
164 $config_file = $this->get_config_file_path();
165
166 $this->config = wp_parse_args($config, $this->get_defaults());
167
168 // from 3.0.17 we use more secure way to store cache config files.
169 $advanced_cache_version = WPO_Page_Cache::instance()->get_advanced_cache_version();
170 // if advanced-cache.php exists and has at least 3.0.17 version or
171 // advanced-cache.php doesn't exist then
172 // we write the cache config in a new format.
173 if (($advanced_cache_version && (version_compare($advanced_cache_version, '3.0.17', '>='))) || !$advanced_cache_version) {
174 // Apply the encoding required for placing within PHP single quotes - https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.single
175 $json_encoded_string = str_replace(array('\\', "'"), array('\\\\', '\\\''), json_encode($this->config));
176
177 $config_content = '<?php' . "\n"
178 . 'if (!defined(\'ABSPATH\')) die(\'No direct access allowed\');' . "\n\n"
179 . '$GLOBALS[\'wpo_cache_config\'] = json_decode(\'' . $json_encoded_string . '\', true);' . "\n";
180 } else {
181 $config_content = json_encode($this->config);
182 }
183
184 if ((!$only_if_present || file_exists($config_file)) && (!is_writable(WPO_CACHE_CONFIG_DIR) || !file_put_contents($config_file, $config_content))) {
185 return new WP_Error('write_cache_config', sprintf(__('The cache configuration file could not be saved to the disk; please check the file/folder permissions of %s .', 'wp-optimize'), $config_file));
186 }
187
188 return true;
189 }
190
191 /**
192 * Get config file name with full path.
193 *
194 * @return string
195 */
196 public function get_config_file_path() {
197 return WPO_CACHE_CONFIG_DIR . '/' . $this->get_cache_config_filename();
198 }
199
200 /**
201 * Return defaults
202 *
203 * @return array
204 */
205 public function get_defaults() {
206
207 $defaults = array(
208 'enable_page_caching' => false,
209 'page_cache_length_value' => 24,
210 'page_cache_length_unit' => 'hours',
211 'page_cache_length' => 86400,
212 'cache_exception_conditional_tags' => array(),
213 'cache_exception_urls' => array(),
214 'cache_exception_cookies' => array(),
215 'cache_exception_browser_agents' => array(),
216 'enable_sitemap_preload' => false,
217 'enable_schedule_preload' => false,
218 'preload_schedule_type' => '',
219 'enable_mobile_caching' => false,
220 'enable_user_caching' => false,
221 'site_url' => network_home_url('/'),
222 'enable_cache_per_country' => false,
223 'permalink_structure' => get_option('permalink_structure'),
224 'uploads' => wp_normalize_path(wp_upload_dir()['basedir']),
225 'gmt_offset' => get_option('gmt_offset'),
226 'timezone_string' => get_option('timezone_string'),
227 'date_format' => get_option('date_format'),
228 'time_format' => get_option('time_format'),
229 'use_webp_images' => false,
230 );
231
232 return apply_filters('wpo_cache_defaults', $defaults);
233 }
234
235 /**
236 * Get advanced-cache.php file name with full path.
237 *
238 * @return string
239 */
240 public function get_cache_config_filename() {
241 $url = parse_url(network_site_url());
242
243 if (isset($url['port']) && '' != $url['port'] && 80 != $url['port']) {
244 return 'config-'.strtolower($url['host']).'-port'.$url['port'].'.php';
245 } else {
246 return 'config-'.strtolower($url['host']).'.php';
247 }
248 }
249
250 /**
251 * Return an instance of the current class, create one if it doesn't exist
252 *
253 * @since 1.0
254 * @return WPO_Cache_Config
255 */
256 public static function instance() {
257
258 if (!self::$instance) {
259 self::$instance = new self();
260 }
261
262 return self::$instance;
263 }
264 }
265 endif;
266