PluginProbe
Buttonizer – Floating Menus, Sticky Buttons, & Popup Builder / 3.6.0
Buttonizer – Floating Menus, Sticky Buttons, & Popup Builder v3.6.0
3.6.0 3.5.0 trunk 1.0.10 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.6.1 1.0.7 1.0.8 1.0.9 1.1 1.1.1 1.2 1.3 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.5 1.5.1 All 110 releases
← All changes | freemius/includes/managers/class-fs-cache-manager.php +291 -202 1.33.6.0 View file →
@@ -1,237 +1,326 @@
1 1 <?php
2 - /**
3 - * @package Freemius
4 - * @copyright Copyright (c) 2015, Freemius, Inc.
5 - * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6 - * @since 1.1.6
7 - */
2 + /**
3 + * @package Freemius
4 + * @copyright Copyright (c) 2015, Freemius, Inc.
5 + * @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
6 + * @since 1.1.6
7 + */
8 8
9 - if ( ! defined( 'ABSPATH' ) ) {
10 - exit;
11 - }
9 + if ( ! defined( 'ABSPATH' ) ) {
10 + exit;
11 + }
12 12
13 - class FS_Cache_Manager {
14 - /**
15 - * @var FS_Option_Manager
16 - */
17 - private $_options;
18 - /**
19 - * @var FS_Logger
20 - */
21 - private $_logger;
13 + class FS_Cache_Manager {
14 + /**
15 + * @var FS_Option_Manager
16 + */
17 + private $_options;
18 + /**
19 + * @var FS_Logger
20 + */
21 + private $_logger;
22 22
23 - /**
24 - * @var FS_Cache_Manager[]
25 - */
26 - private static $_MANAGERS = array();
23 + /**
24 + * @var FS_Cache_Manager[]
25 + */
26 + private static $_MANAGERS = array();
27 27
28 - /**
29 - * @author Vova Feldman (@svovaf)
30 - * @since 1.1.3
31 - *
32 - * @param string $id
33 - */
34 - private function __construct( $id ) {
35 - $this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_cach_mngr_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
28 + /**
29 + * @author Vova Feldman (@svovaf)
30 + * @since 1.1.3
31 + *
32 + * @param string $id
33 + */
34 + private function __construct( $id ) {
35 + $this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_cach_mngr_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
36 36
37 - $this->_logger->entrance();
38 - $this->_logger->log( 'id = ' . $id );
37 + $this->_logger->entrance();
38 + $this->_logger->log( 'id = ' . $id );
39 39
40 - $this->_options = FS_Option_Manager::get_manager( $id, true );
41 - }
40 + $this->_options = FS_Option_Manager::get_manager( $id, true, true, false );
41 + }
42 42
43 - /**
44 - * @author Vova Feldman (@svovaf)
45 - * @since 1.1.6
46 - *
47 - * @param $id
48 - *
49 - * @return FS_Cache_Manager
50 - */
51 - static function get_manager( $id ) {
52 - $id = strtolower( $id );
43 + /**
44 + * @author Vova Feldman (@svovaf)
45 + * @since 1.1.6
46 + *
47 + * @param $id
48 + *
49 + * @return FS_Cache_Manager
50 + */
51 + static function get_manager( $id ) {
52 + $id = strtolower( $id );
53 53
54 - if ( ! isset( self::$_MANAGERS[ $id ] ) ) {
55 - self::$_MANAGERS[ $id ] = new FS_Cache_Manager( $id );
56 - }
54 + if ( ! isset( self::$_MANAGERS[ $id ] ) ) {
55 + self::$_MANAGERS[ $id ] = new FS_Cache_Manager( $id );
56 + }
57 57
58 - return self::$_MANAGERS[ $id ];
59 - }
58 + return self::$_MANAGERS[ $id ];
59 + }
60 60
61 - /**
62 - * @author Vova Feldman (@svovaf)
63 - * @since 1.1.6
64 - *
65 - * @return bool
66 - */
67 - function is_empty() {
68 - $this->_logger->entrance();
61 + /**
62 + * @author Vova Feldman (@svovaf)
63 + * @since 1.1.6
64 + *
65 + * @return bool
66 + */
67 + function is_empty() {
68 + $this->_logger->entrance();
69 69
70 - return $this->_options->is_empty();
71 - }
70 + return $this->_options->is_empty();
71 + }
72 72
73 - /**
74 - * @author Vova Feldman (@svovaf)
75 - * @since 1.1.6
76 - */
77 - function clear() {
78 - $this->_logger->entrance();
73 + /**
74 + * @author Vova Feldman (@svovaf)
75 + * @since 1.1.6
76 + */
77 + function clear() {
78 + $this->_logger->entrance();
79 79
80 - $this->_options->clear( true );
81 - }
80 + $this->_options->clear( true );
81 + }
82 82
83 - /**
84 - * Delete cache manager from DB.
85 - *
86 - * @author Vova Feldman (@svovaf)
87 - * @since 1.0.9
88 - */
89 - function delete() {
90 - $this->_options->delete();
91 - }
83 + /**
84 + * Delete cache manager from DB.
85 + *
86 + * @author Vova Feldman (@svovaf)
87 + * @since 1.0.9
88 + */
89 + function delete() {
90 + $this->_options->delete();
91 + }
92 92
93 - /**
94 - * Check if there's a cached item.
95 - *
96 - * @author Vova Feldman (@svovaf)
97 - * @since 1.1.6
98 - *
99 - * @param string $key
100 - *
101 - * @return bool
102 - */
103 - function has( $key ) {
104 - $cache_entry = $this->_options->get_option( $key, false );
93 + /**
94 + * Check if there's a cached item.
95 + *
96 + * @author Vova Feldman (@svovaf)
97 + * @since 1.1.6
98 + *
99 + * @param string $key
100 + *
101 + * @return bool
102 + */
103 + function has( $key ) {
104 + $cache_entry = $this->_options->get_option( $key, false );
105 105
106 - return ( is_object( $cache_entry ) &&
107 - isset( $cache_entry->timestamp ) &&
108 - is_numeric( $cache_entry->timestamp )
109 - );
110 - }
106 + return ( is_object( $cache_entry ) &&
107 + isset( $cache_entry->timestamp ) &&
108 + is_numeric( $cache_entry->timestamp )
109 + );
110 + }
111 111
112 - /**
113 - * Check if there's a valid cached item.
114 - *
115 - * @author Vova Feldman (@svovaf)
116 - * @since 1.1.6
117 - *
118 - * @param string $key
119 - *
120 - * @return bool
121 - */
122 - function has_valid( $key ) {
123 - $cache_entry = $this->_options->get_option( $key, false );
112 + /**
113 + * Check if there's a valid cached item.
114 + *
115 + * @author Vova Feldman (@svovaf)
116 + * @since 1.1.6
117 + *
118 + * @param string $key
119 + * @param null|int $expiration Since 1.2.2.7
120 + *
121 + * @return bool
122 + */
123 + function has_valid( $key, $expiration = null ) {
124 + $cache_entry = $this->_options->get_option( $key, false );
124 125
125 - return ( is_object( $cache_entry ) &&
126 - isset( $cache_entry->timestamp ) &&
127 - is_numeric( $cache_entry->timestamp ) &&
128 - $cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
129 - );
130 - }
126 + $is_valid = ( is_object( $cache_entry ) &&
127 + isset( $cache_entry->timestamp ) &&
128 + is_numeric( $cache_entry->timestamp ) &&
129 + $cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
130 + );
131 131
132 - /**
133 - * @author Vova Feldman (@svovaf)
134 - * @since 1.1.6
135 - *
136 - * @param string $key
137 - * @param mixed $default
138 - *
139 - * @return mixed
140 - */
141 - function get( $key, $default = null ) {
142 - $this->_logger->entrance( 'key = ' . $key );
132 + if ( $is_valid &&
133 + is_numeric( $expiration ) &&
134 + isset( $cache_entry->created ) &&
135 + is_numeric( $cache_entry->created ) &&
136 + $cache_entry->created + $expiration < WP_FS__SCRIPT_START_TIME
137 + ) {
138 + /**
139 + * Even if the cache is still valid, since we are checking for validity
140 + * with an explicit expiration period, if the period has past, return
141 + * `false` as if the cache is invalid.
142 + *
143 + * @since 1.2.2.7
144 + */
145 + $is_valid = false;
146 + }
143 147
144 - $cache_entry = $this->_options->get_option( $key, false );
148 + return $is_valid;
149 + }
145 150
146 - if ( is_object( $cache_entry ) &&
147 - isset( $cache_entry->timestamp ) &&
148 - is_numeric( $cache_entry->timestamp )
149 - ) {
150 - return $cache_entry->result;
151 - }
151 + /**
152 + * @author Vova Feldman (@svovaf)
153 + * @since 1.1.6
154 + *
155 + * @param string $key
156 + * @param mixed $default
157 + *
158 + * @return mixed
159 + */
160 + function get( $key, $default = null ) {
161 + $this->_logger->entrance( 'key = ' . $key );
152 162
153 - return $default;
154 - }
163 + $cache_entry = $this->_options->get_option( $key, false );
155 164
156 - /**
157 - * @author Vova Feldman (@svovaf)
158 - * @since 1.1.6
159 - *
160 - * @param string $key
161 - * @param mixed $default
162 - *
163 - * @return mixed
164 - */
165 - function get_valid( $key, $default = null ) {
166 - $this->_logger->entrance( 'key = ' . $key );
165 + if ( is_object( $cache_entry ) &&
166 + isset( $cache_entry->timestamp ) &&
167 + is_numeric( $cache_entry->timestamp )
168 + ) {
169 + return $cache_entry->result;
170 + }
167 171
168 - $cache_entry = $this->_options->get_option( $key, false );
172 + return is_object( $default ) ? clone $default : $default;
173 + }
169 174
170 - if ( is_object( $cache_entry ) &&
171 - isset( $cache_entry->timestamp ) &&
172 - is_numeric( $cache_entry->timestamp ) &&
173 - $cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
174 - ) {
175 - return $cache_entry->result;
176 - }
175 + /**
176 + * @author Vova Feldman (@svovaf)
177 + * @since 1.1.6
178 + *
179 + * @param string $key
180 + * @param mixed $default
181 + *
182 + * @return mixed
183 + */
184 + function get_valid( $key, $default = null ) {
185 + $this->_logger->entrance( 'key = ' . $key );
177 186
178 - return $default;
179 - }
187 + $cache_entry = $this->_options->get_option( $key, false );
180 188
181 - /**
182 - * @author Vova Feldman (@svovaf)
183 - * @since 1.1.6
184 - *
185 - * @param string $key
186 - * @param mixed $value
187 - * @param int $expiration
188 - */
189 - function set( $key, $value, $expiration = WP_FS__TIME_24_HOURS_IN_SEC ) {
190 - $this->_logger->entrance( 'key = ' . $key );
189 + if ( is_object( $cache_entry ) &&
190 + isset( $cache_entry->timestamp ) &&
191 + is_numeric( $cache_entry->timestamp ) &&
192 + $cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
193 + ) {
194 + return $cache_entry->result;
195 + }
191 196
192 - $cache_entry = new stdClass();
193 - $cache_entry->result = $value;
194 - $cache_entry->timestamp = WP_FS__SCRIPT_START_TIME + $expiration;
195 - $this->_options->set_option( $key, $cache_entry, true );
196 - }
197 + return is_object( $default ) ? clone $default : $default;
198 + }
197 199
198 - /**
199 - * Get cached record expiration, or false if not cached or expired.
200 - *
201 - * @author Vova Feldman (@svovaf)
202 - * @since 1.1.7.3
203 - *
204 - * @param string $key
205 - *
206 - * @return bool|int
207 - */
208 - function get_record_expiration( $key ) {
209 - $this->_logger->entrance( 'key = ' . $key );
200 + /**
201 + * @author Vova Feldman (@svovaf)
202 + * @since 1.1.6
203 + *
204 + * @param string $key
205 + * @param mixed $value
206 + * @param int $expiration
207 + * @param int $created Since 2.0.0 Cache creation date.
208 + */
209 + function set( $key, $value, $expiration = WP_FS__TIME_24_HOURS_IN_SEC, $created = WP_FS__SCRIPT_START_TIME ) {
210 + $this->_logger->entrance( 'key = ' . $key );
210 211
211 - $cache_entry = $this->_options->get_option( $key, false );
212 + $cache_entry = new stdClass();
212 213
213 - if ( is_object( $cache_entry ) &&
214 - isset( $cache_entry->timestamp ) &&
215 - is_numeric( $cache_entry->timestamp ) &&
216 - $cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
217 - ) {
218 - return $cache_entry->timestamp;
219 - }
214 + $cache_entry->result = $value;
215 + $cache_entry->created = $created;
216 + $cache_entry->timestamp = $created + $expiration;
217 + $this->_options->set_option( $key, $cache_entry, true );
218 + }
220 219
221 - return false;
222 - }
220 + /**
221 + * Get cached record expiration, or false if not cached or expired.
222 + *
223 + * @author Vova Feldman (@svovaf)
224 + * @since 1.1.7.3
225 + *
226 + * @param string $key
227 + *
228 + * @return bool|int
229 + */
230 + function get_record_expiration( $key ) {
231 + $this->_logger->entrance( 'key = ' . $key );
223 232
224 - /**
225 - * Purge cached item.
226 - *
227 - * @author Vova Feldman (@svovaf)
228 - * @since 1.1.6
229 - *
230 - * @param string $key
231 - */
232 - function purge( $key ) {
233 - $this->_logger->entrance( 'key = ' . $key );
233 + $cache_entry = $this->_options->get_option( $key, false );
234 234
235 - $this->_options->unset_option( $key, true );
236 - }
237 - }
235 + if ( is_object( $cache_entry ) &&
236 + isset( $cache_entry->timestamp ) &&
237 + is_numeric( $cache_entry->timestamp ) &&
238 + $cache_entry->timestamp > WP_FS__SCRIPT_START_TIME
239 + ) {
240 + return $cache_entry->timestamp;
241 + }
242 +
243 + return false;
244 + }
245 +
246 + /**
247 + * Purge cached item.
248 + *
249 + * @author Vova Feldman (@svovaf)
250 + * @since 1.1.6
251 + *
252 + * @param string $key
253 + */
254 + function purge( $key ) {
255 + $this->_logger->entrance( 'key = ' . $key );
256 +
257 + $this->_options->unset_option( $key, true );
258 + }
259 +
260 + /**
261 + * Extend cached item caching period.
262 + *
263 + * @author Vova Feldman (@svovaf)
264 + * @since 2.0.0
265 + *
266 + * @param string $key
267 + * @param int $expiration
268 + *
269 + * @return bool
270 + */
271 + function update_expiration( $key, $expiration = WP_FS__TIME_24_HOURS_IN_SEC ) {
272 + $this->_logger->entrance( 'key = ' . $key );
273 +
274 + $cache_entry = $this->_options->get_option( $key, false );
275 +
276 + if ( ! is_object( $cache_entry ) ||
277 + ! isset( $cache_entry->timestamp ) ||
278 + ! is_numeric( $cache_entry->timestamp )
279 + ) {
280 + return false;
281 + }
282 +
283 + $this->set( $key, $cache_entry->result, $expiration, $cache_entry->created );
284 +
285 + return true;
286 + }
287 +
288 + /**
289 + * Set cached item as expired.
290 + *
291 + * @author Vova Feldman (@svovaf)
292 + * @since 1.2.2.7
293 + *
294 + * @param string $key
295 + */
296 + function expire( $key ) {
297 + $this->_logger->entrance( 'key = ' . $key );
298 +
299 + $cache_entry = $this->_options->get_option( $key, false );
300 +
301 + if ( is_object( $cache_entry ) &&
302 + isset( $cache_entry->timestamp ) &&
303 + is_numeric( $cache_entry->timestamp )
304 + ) {
305 + // Set to expired.
306 + $cache_entry->timestamp = WP_FS__SCRIPT_START_TIME;
307 + $this->_options->set_option( $key, $cache_entry, true );
308 + }
309 + }
310 +
311 + #--------------------------------------------------------------------------------
312 + #region Migration
313 + #--------------------------------------------------------------------------------
314 +
315 + /**
316 + * Migrate options from site level.
317 + *
318 + * @author Vova Feldman (@svovaf)
319 + * @since 2.0.0
320 + */
321 + function migrate_to_network() {
322 + $this->_options->migrate_to_network();
323 + }
324 +
325 + #endregion
326 + }