PluginProbe
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder / 51.1.86
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder v51.1.86
51.1.86 51.1.84 51.1.85 51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 All 40 releases
← All changes | freemius/includes/managers/class-fs-cache-manager.php +326 -0 51.1.2 → 51.1.86 View file →
@@ -1,0 +1,326 @@
1 +<?php
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 +
9 + if ( ! defined( 'ABSPATH' ) ) {
10 + exit;
11 + }
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;
22 +
23 + /**
24 + * @var FS_Cache_Manager[]
25 + */
26 + private static $_MANAGERS = array();
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 );
36 +
37 + $this->_logger->entrance();
38 + $this->_logger->log( 'id = ' . $id );
39 +
40 + $this->_options = FS_Option_Manager::get_manager( $id, true, true, false );
41 + }
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 );
53 +
54 + if ( ! isset( self::$_MANAGERS[ $id ] ) ) {
55 + self::$_MANAGERS[ $id ] = new FS_Cache_Manager( $id );
56 + }
57 +
58 + return self::$_MANAGERS[ $id ];
59 + }
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();
69 +
70 + return $this->_options->is_empty();
71 + }
72 +
73 + /**
74 + * @author Vova Feldman (@svovaf)
75 + * @since 1.1.6
76 + */
77 + function clear() {
78 + $this->_logger->entrance();
79 +
80 + $this->_options->clear( true );
81 + }
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 + }
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 );
105 +
106 + return ( is_object( $cache_entry ) &&
107 + isset( $cache_entry->timestamp ) &&
108 + is_numeric( $cache_entry->timestamp )
109 + );
110 + }
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 + * @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 );
125 +
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 +
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 + }
147 +
148 + return $is_valid;
149 + }
150 +
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 );
162 +
163 + $cache_entry = $this->_options->get_option( $key, false );
164 +
165 + if ( is_object( $cache_entry ) &&
166 + isset( $cache_entry->timestamp ) &&
167 + is_numeric( $cache_entry->timestamp )
168 + ) {
169 + return $cache_entry->result;
170 + }
171 +
172 + return is_object( $default ) ? clone $default : $default;
173 + }
174 +
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 );
186 +
187 + $cache_entry = $this->_options->get_option( $key, false );
188 +
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 + }
196 +
197 + return is_object( $default ) ? clone $default : $default;
198 + }
199 +
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 );
211 +
212 + $cache_entry = new stdClass();
213 +
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 + }
219 +
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 );
232 +
233 + $cache_entry = $this->_options->get_option( $key, false );
234 +
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 + }