PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.6.1
GiveWP – Donation Plugin and Fundraising Platform v2.6.1
4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / includes / class-give-cache.php
give / includes Last commit date
admin 6 years ago api 6 years ago database 6 years ago deprecated 6 years ago donors 6 years ago emails 6 years ago forms 6 years ago frontend 6 years ago gateways 6 years ago libraries 7 years ago payments 6 years ago actions.php 6 years ago ajax-functions.php 6 years ago class-give-async-process.php 6 years ago class-give-background-updater.php 6 years ago class-give-cache-setting.php 6 years ago class-give-cache.php 6 years ago class-give-cli-commands.php 6 years ago class-give-comment.php 6 years ago class-give-cron.php 6 years ago class-give-donate-form.php 6 years ago class-give-donor-wall-widget.php 6 years ago class-give-donor.php 6 years ago class-give-email-access.php 6 years ago class-give-license-handler.php 6 years ago class-give-logging.php 6 years ago class-give-readme-parser.php 6 years ago class-give-roles.php 6 years ago class-give-scripts.php 6 years ago class-give-session.php 6 years ago class-give-stats.php 6 years ago class-give-template-loader.php 6 years ago class-give-tooltips.php 6 years ago class-give-translation.php 6 years ago class-notices.php 6 years ago country-functions.php 6 years ago currencies-list.php 6 years ago currency-functions.php 6 years ago error-tracking.php 6 years ago filters.php 6 years ago formatting.php 6 years ago install.php 6 years ago login-register.php 6 years ago misc-functions.php 6 years ago plugin-compatibility.php 6 years ago post-types.php 6 years ago price-functions.php 6 years ago process-donation.php 6 years ago setting-functions.php 6 years ago shortcodes.php 6 years ago template-functions.php 6 years ago user-functions.php 6 years ago
class-give-cache.php
804 lines
1 <?php
2 /**
3 * Class for managing cache
4 * Note: only use for internal purpose.
5 *
6 * @package Give
7 * @subpackage Classes/Give_Cache
8 * @copyright Copyright (c) 2017, GiveWP
9 * @license https://opensource.org/licenses/gpl-license GNU Public License
10 * @since 1.8.7
11 */
12
13 // Exit if accessed directly.
14 if ( ! defined( 'ABSPATH' ) ) {
15 exit;
16 }
17
18 class Give_Cache {
19 /**
20 * Instance.
21 *
22 * @since 1.8.7
23 * @access private
24 * @var Give_Cache
25 */
26 private static $instance;
27
28 /**
29 * Flag to check if caching enabled or not.
30 *
31 * @since 2.0
32 * @access private
33 * @var
34 */
35 private $is_cache;
36
37 /**
38 * Singleton pattern.
39 *
40 * @since 1.8.7
41 * @access private
42 * Give_Cache constructor.
43 */
44 private function __construct() {
45 }
46
47
48 /**
49 * Get instance.
50 *
51 * @since 1.8.7
52 * @access public
53 * @return static
54 */
55 public static function get_instance() {
56 if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Give_Cache ) ) {
57 self::$instance = new Give_Cache();
58 }
59
60 return self::$instance;
61 }
62
63 /**
64 * Setup hooks.
65 *
66 * @since 1.8.7
67 * @access public
68 */
69 public function setup() {
70 // Currently enable cache only for backend.
71 self::$instance->is_cache = defined( 'GIVE_CACHE' ) ? GIVE_CACHE : $this->is_cache_enabled();
72
73 // weekly delete all expired cache.
74 Give_Cron::add_weekly_event( array( $this, 'delete_all_expired' ) );
75
76 add_action( 'save_post_give_forms', array( $this, 'delete_form_related_cache' ) );
77 add_action( 'save_post_give_payment', array( $this, 'delete_payment_related_cache' ) );
78 add_action( 'give_deleted_give-donors_cache', array( $this, 'delete_donor_related_cache' ), 10, 3 );
79 add_action( 'give_deleted_give-donations_cache', array( $this, 'delete_donations_related_cache' ), 10, 3 );
80
81 add_action( 'give_save_settings_give_settings', array( __CLASS__, 'flush_cache' ) );
82
83 add_action( 'wp', array( __CLASS__, 'prevent_caching' ) );
84 add_action( 'admin_notices', array( $this, '__notices' ) );
85 }
86
87 /**
88 * Get result if cache enabled or not.
89 *
90 * @return bool
91 * @since 2.6.1
92 */
93 private function is_cache_enabled() {
94 return give_is_setting_enabled( give_get_option( 'cache', 'enabled' ) ) && ( is_admin() || false !== strpos( $_SERVER['REQUEST_URI'], rest_get_url_prefix() . '/give-api/' ) );
95 }
96
97 /**
98 * Prevent caching on certain pages
99 *
100 * @since 2.0.5
101 * @access public
102 * @credit WooCommerce
103 */
104 public static function prevent_caching() {
105 if ( ! is_blog_installed() ) {
106 return;
107 }
108
109 $page_ids = array_filter(
110 array(
111 give_get_option( 'success_page' ),
112 give_get_option( 'failure_page' ),
113 give_get_option( 'history_page' ),
114 )
115 );
116
117 if (
118 is_page( $page_ids )
119 || is_singular( 'give_forms' )
120 ) {
121 self::set_nocache_constants();
122 nocache_headers();
123 }
124 }
125
126 /**
127 * Set constants to prevent caching by some plugins.
128 *
129 * @since 2.0.5
130 * @access public
131 * @credit WooCommerce
132 *
133 * @param mixed $return Value to return. Previously hooked into a filter.
134 *
135 * @return mixed
136 */
137 public static function set_nocache_constants( $return = true ) {
138 give_maybe_define_constant( 'DONOTCACHEPAGE', true );
139 give_maybe_define_constant( 'DONOTCACHEOBJECT', true );
140 give_maybe_define_constant( 'DONOTCACHEDB', true );
141
142 return $return;
143 }
144
145 /**
146 * Notices function.
147 *
148 * @since 2.0.5
149 * @access public
150 * @credit WooCommerce
151 */
152 public function __notices() {
153 if ( ! function_exists( 'w3tc_pgcache_flush' ) || ! function_exists( 'w3_instance' ) ) {
154 return;
155 }
156
157 $config = w3_instance( 'W3_Config' );
158 $enabled = $config->get_integer( 'dbcache.enabled' );
159 $settings = array_map( 'trim', $config->get_array( 'dbcache.reject.sql' ) );
160
161 if ( $enabled && ! in_array( 'give', $settings, true ) ) {
162 ?>
163 <div class="error">
164 <p><?php echo wp_kses_post( sprintf( __( 'In order for <strong>database caching</strong> to work with GiveWP you must add %1$s to the "Ignored query stems" option in <a href="%2$s">W3 Total Cache settings</a>.', 'give' ), '<code>give</code>', esc_url( admin_url( 'admin.php?page=w3tc_dbcache#dbcache_reject_sql' ) ) ) ); ?></p>
165 </div>
166 <?php
167 }
168 }
169
170 /**
171 * Get cache key.
172 *
173 * @since 1.8.7
174 *
175 * @param string $action Cache key prefix.
176 * @param array $query_args (optional) Query array.
177 * @param bool $is_prefix
178 *
179 * @return string
180 */
181 public static function get_key( $action, $query_args = null, $is_prefix = true ) {
182 // Bailout.
183 if ( empty( $action ) ) {
184 return new WP_Error( 'give_invalid_cache_key_action', __( 'Do not pass empty action to generate cache key.', 'give' ) );
185 }
186
187 // Set cache key.
188 $cache_key = $is_prefix ? "give_cache_{$action}" : $action;
189
190 // Bailout.
191 if ( ! empty( $query_args ) ) {
192 $cache_key = "{$cache_key}_" . substr( md5( serialize( $query_args ) ), 0, 15 );
193 }
194
195 /**
196 * Filter the cache key name.
197 *
198 * @since 2.0
199 */
200 return apply_filters( 'give_get_cache_key', $cache_key, $action, $query_args );
201 }
202
203 /**
204 * Get cache.
205 *
206 * @since 1.8.7
207 *
208 * @param string $cache_key
209 * @param bool $custom_key
210 * @param mixed $query_args
211 *
212 * @return mixed
213 */
214 public static function get( $cache_key, $custom_key = false, $query_args = array() ) {
215 if ( ! self::is_valid_cache_key( $cache_key ) ) {
216 if ( empty( $cache_key ) ) {
217 return new WP_Error( 'give_empty_cache_key', __( 'Do not pass invalid empty cache key', 'give' ) );
218 } elseif ( ! $custom_key ) {
219 return new WP_Error( 'give_invalid_cache_key', __( 'Cache key format should be give_cache_*', 'give' ) );
220 }
221
222 $cache_key = self::get_key( $cache_key, $query_args );
223 }
224
225 $option = get_option( $cache_key );
226
227 // Backward compatibility (<1.8.7).
228 if ( ! is_array( $option ) || empty( $option ) || ! array_key_exists( 'expiration', $option ) ) {
229 return $option;
230 }
231
232 // Get current time.
233 $current_time = time();
234
235 if ( empty( $option['expiration'] ) || ( $current_time < $option['expiration'] ) ) {
236 $option = $option['data'];
237 } else {
238 $option = false;
239 }
240
241 return $option;
242 }
243
244 /**
245 * Set cache.
246 *
247 * @since 1.8.7
248 *
249 * @param string $cache_key
250 * @param mixed $data
251 * @param int|null $expiration Timestamp should be in GMT format.
252 * @param bool $custom_key
253 * @param mixed $query_args
254 *
255 * @return mixed
256 */
257 public static function set( $cache_key, $data, $expiration = null, $custom_key = false, $query_args = array() ) {
258 if ( ! self::is_valid_cache_key( $cache_key ) ) {
259 if ( ! $custom_key ) {
260 return new WP_Error( 'give_invalid_cache_key', __( 'Cache key format should be give_cache_*', 'give' ) );
261 }
262
263 $cache_key = self::get_key( $cache_key, $query_args );
264 }
265
266 $option_value = array(
267 'data' => $data,
268 'expiration' => ! is_null( $expiration )
269 ? ( $expiration + time() )
270 : null,
271 );
272
273 $result = update_option( $cache_key, $option_value, false );
274
275 return $result;
276 }
277
278 /**
279 * Delete cache.
280 *
281 * Note: only for internal use
282 *
283 * @since 1.8.7
284 *
285 * @param string|array $cache_keys
286 *
287 * @return bool|WP_Error
288 */
289 public static function delete( $cache_keys ) {
290 $result = true;
291 $invalid_keys = array();
292
293 if ( ! empty( $cache_keys ) ) {
294 $cache_keys = is_array( $cache_keys ) ? $cache_keys : array( $cache_keys );
295
296 foreach ( $cache_keys as $cache_key ) {
297 if ( ! self::is_valid_cache_key( $cache_key ) ) {
298 $invalid_keys[] = $cache_key;
299 $result = false;
300 }
301
302 delete_option( $cache_key );
303 }
304 }
305
306 if ( ! $result ) {
307 $result = new WP_Error(
308 'give_invalid_cache_key',
309 __( 'Cache key format should be give_cache_*', 'give' ),
310 $invalid_keys
311 );
312 }
313
314 return $result;
315 }
316
317 /**
318 * Delete all logging cache.
319 *
320 * Note: only for internal use
321 *
322 * @since 1.8.7
323 * @access public
324 * @global wpdb $wpdb
325 *
326 * @param bool $force If set to true then all cached values will be delete instead of only expired
327 *
328 * @return bool
329 */
330 public static function delete_all_expired( $force = false ) {
331 global $wpdb;
332 $options = $wpdb->get_results(
333 $wpdb->prepare(
334 "SELECT option_name, option_value
335 FROM {$wpdb->options}
336 Where option_name
337 LIKE '%%%s%%'",
338 'give_cache'
339 ),
340 ARRAY_A
341 );
342
343 // Bailout.
344 if ( empty( $options ) ) {
345 return false;
346 }
347
348 $current_time = time();
349
350 // Delete log cache.
351 foreach ( $options as $option ) {
352 $option['option_value'] = maybe_unserialize( $option['option_value'] );
353
354 if (
355 (
356 ! self::is_valid_cache_key( $option['option_name'] )
357 || ! is_array( $option['option_value'] ) // Backward compatibility (<1.8.7).
358 || ! array_key_exists( 'expiration', $option['option_value'] ) // Backward compatibility (<1.8.7).
359 || empty( $option['option_value']['expiration'] )
360 || ( $current_time < $option['option_value']['expiration'] )
361 )
362 && ! $force
363 ) {
364 continue;
365 }
366
367 self::delete( $option['option_name'] );
368 }
369 }
370
371
372 /**
373 * Get list of options like.
374 *
375 * Note: only for internal use
376 *
377 * @since 1.8.7
378 * @access public
379 *
380 * @param string $option_name
381 * @param bool $fields
382 *
383 * @return array
384 */
385 public static function get_options_like( $option_name, $fields = false ) {
386 global $wpdb;
387
388 $field_names = $fields ? 'option_name, option_value' : 'option_name';
389
390 if ( $fields ) {
391 $options = $wpdb->get_results(
392 $wpdb->prepare(
393 "SELECT {$field_names }
394 FROM {$wpdb->options}
395 Where option_name
396 LIKE '%%%s%%'",
397 "give_cache_{$option_name}"
398 ),
399 ARRAY_A
400 );
401 } else {
402 $options = $wpdb->get_col(
403 $wpdb->prepare(
404 "SELECT *
405 FROM {$wpdb->options}
406 Where option_name
407 LIKE '%%%s%%'",
408 "give_cache_{$option_name}"
409 ),
410 1
411 );
412 }
413
414 if ( ! empty( $options ) && $fields ) {
415 foreach ( $options as $index => $option ) {
416 $option['option_value'] = maybe_unserialize( $option['option_value'] );
417 $options[ $index ] = $option;
418 }
419 }
420
421 return $options;
422 }
423
424 /**
425 * Check cache key validity.
426 *
427 * @since 1.8.7
428 * @access public
429 *
430 * @param $cache_key
431 *
432 * @return bool
433 */
434 public static function is_valid_cache_key( $cache_key ) {
435 $is_valid = ( false !== strpos( $cache_key, 'give_cache_' ) );
436
437 /**
438 * Filter the flag which tell about cache key valid or not
439 *
440 * @since 2.0
441 */
442 return apply_filters( 'give_is_valid_cache_key', $is_valid, $cache_key );
443 }
444
445
446 /**
447 * Get cache from group
448 *
449 * @since 2.0
450 * @access public
451 *
452 * @param int $id
453 * @param string $group
454 *
455 * @return mixed
456 */
457 public static function get_group( $id, $group = '' ) {
458 $cached_data = null;
459
460 // Bailout.
461 if ( self::$instance->is_cache && ! empty( $id ) ) {
462 $group = self::$instance->filter_group_name( $group );
463
464 $cached_data = wp_cache_get( $id, $group );
465 $cached_data = false !== $cached_data ? $cached_data : null;
466 }
467
468 return $cached_data;
469 }
470
471 /**
472 * Cache small chunks inside group
473 *
474 * @since 2.0
475 * @access public
476 *
477 * @param int $id
478 * @param mixed $data
479 * @param string $group
480 * @param int $expire
481 *
482 * @return bool
483 */
484 public static function set_group( $id, $data, $group = '', $expire = 0 ) {
485 $status = false;
486
487 // Bailout.
488 if ( ! self::$instance->is_cache || empty( $id ) ) {
489 return $status;
490 }
491
492 $group = self::$instance->filter_group_name( $group );
493
494 $status = wp_cache_set( $id, $data, $group, $expire );
495
496 return $status;
497 }
498
499 /**
500 * Cache small db query chunks inside group
501 *
502 * @since 2.0
503 * @access public
504 *
505 * @param int $id
506 * @param mixed $data
507 *
508 * @return bool
509 */
510 public static function set_db_query( $id, $data ) {
511 $status = false;
512
513 // Bailout.
514 if ( ! self::$instance->is_cache || empty( $id ) ) {
515 return $status;
516 }
517
518 return self::set_group( $id, $data, 'give-db-queries', 0 );
519 }
520
521 /**
522 * Get cache from group
523 *
524 * @since 2.0
525 * @access public
526 *
527 * @param string $id
528 *
529 * @return mixed
530 */
531 public static function get_db_query( $id ) {
532 return self::get_group( $id, 'give-db-queries' );
533 }
534
535 /**
536 * Delete group cache
537 *
538 * @since 2.0
539 * @access public
540 *
541 * @param int|array $ids
542 * @param string $group
543 * @param int $expire
544 *
545 * @return bool
546 */
547 public static function delete_group( $ids, $group = '', $expire = 0 ) {
548 $status = false;
549
550 // Bailout.
551 if ( ! self::$instance->is_cache || empty( $ids ) ) {
552 return $status;
553 }
554
555 $group_prefix = $group;
556 $group = self::$instance->filter_group_name( $group );
557
558 // Delete single or multiple cache items from cache.
559 if ( ! is_array( $ids ) ) {
560 $status = wp_cache_delete( $ids, $group );
561 self::$instance->get_incrementer( true );
562
563 /**
564 * Fire action when cache deleted for specific id.
565 *
566 * @since 2.0
567 *
568 * @param string $ids
569 * @param string $group
570 * @param int $expire
571 */
572 do_action( "give_deleted_{$group_prefix}_cache", $ids, $group, $expire, $status );
573
574 } else {
575 foreach ( $ids as $id ) {
576 $status = wp_cache_delete( $id, $group );
577 self::$instance->get_incrementer( true );
578
579 /**
580 * Fire action when cache deleted for specific id .
581 *
582 * @since 2.0
583 *
584 * @param string $ids
585 * @param string $group
586 * @param int $expire
587 */
588 do_action( "give_deleted_{$group_prefix}_cache", $id, $group, $expire, $status );
589 }
590 }
591
592 return $status;
593 }
594
595
596 /**
597 * Delete form related cache
598 * Note: only use for internal purpose.
599 *
600 * @since 2.0
601 * @access public
602 *
603 * @param int $form_id
604 */
605 public function delete_form_related_cache( $form_id ) {
606 // If this is just a revision, don't send the email.
607 if ( wp_is_post_revision( $form_id ) ) {
608 return;
609 }
610
611 self::flush_cache( true );
612 }
613
614 /**
615 * Delete payment related cache
616 * Note: only use for internal purpose.
617 *
618 * @since 2.0
619 * @access public
620 *
621 * @param int $donation_id
622 */
623 public function delete_payment_related_cache( $donation_id ) {
624 // If this is just a revision, don't send the email.
625 if ( wp_is_post_revision( $donation_id ) ) {
626 return;
627 }
628
629 if ( $donation_id && ( $donor_id = give_get_payment_donor_id( $donation_id ) ) ) {
630 wp_cache_delete( $donor_id, $this->filter_group_name( 'give-donors' ) );
631 }
632
633 wp_cache_delete( $donation_id, $this->filter_group_name( 'give-donations' ) );
634
635 self::$instance->get_incrementer( true );
636 }
637
638 /**
639 * Delete donor related cache
640 * Note: only use for internal purpose.
641 *
642 * @since 2.0
643 * @access public
644 *
645 * @param string $id
646 * @param string $group
647 * @param int $expire
648 */
649 public function delete_donor_related_cache( $id, $group, $expire ) {
650 $donation_ids = Give()->donors->get_column( 'payment_ids', $id );
651
652 if ( ! empty( $donation_ids ) ) {
653 $donation_ids = array_map( 'trim', (array) explode( ',', trim( $donation_ids ) ) );
654
655 foreach ( $donation_ids as $donation ) {
656 wp_cache_delete( $donation, $this->filter_group_name( 'give-donations' ) );
657 }
658 }
659
660 self::$instance->get_incrementer( true );
661 }
662
663 /**
664 * Delete donations related cache
665 * Note: only use for internal purpose.
666 *
667 * @since 2.0
668 * @access public
669 *
670 * @param string $id
671 * @param string $group
672 * @param int $expire
673 */
674 public function delete_donations_related_cache( $id, $group, $expire ) {
675 if ( $id && ( $donor_id = give_get_payment_donor_id( $id ) ) ) {
676 wp_cache_delete( $donor_id, $this->filter_group_name( 'give-donors' ) );
677 }
678
679 self::$instance->get_incrementer( true );
680 }
681
682
683 /**
684 * Get unique incrementer.
685 *
686 * @see https://core.trac.wordpress.org/ticket/4476
687 * @see https://www.tollmanz.com/invalidation-schemes/
688 *
689 * @since 2.0
690 * @access public
691 *
692 * @param bool $refresh
693 * @param string $incrementer_key
694 *
695 * @return string
696 */
697 public function get_incrementer( $refresh = false, $incrementer_key = 'give-cache-incrementer-db-queries' ) {
698 $incrementer_value = wp_cache_get( $incrementer_key );
699
700 if ( false === $incrementer_value || true === $refresh ) {
701 $incrementer_value = (string) microtime( true );
702 wp_cache_set( $incrementer_key, $incrementer_value );
703 }
704
705 return $incrementer_value;
706 }
707
708
709 /**
710 * Flush cache on cache setting enable/disable
711 * Note: only for internal use
712 *
713 * @since 2.0
714 * @access public
715 *
716 * @param bool $force Delete cache forcefully.
717 *
718 * @return bool
719 */
720 public static function flush_cache( $force = false ) {
721 if (
722 $force
723 || ( Give_Admin_Settings::is_saving_settings() && isset( $_POST['cache'] ) && give_is_setting_enabled( give_clean( $_POST['cache'] ) ) )
724 || ( wp_doing_ajax() && isset( $_GET['action'] ) && 'give_cache_flush' === give_clean( $_GET['action'] ) )
725 ) {
726 self::$instance->get_incrementer( true );
727 self::$instance->get_incrementer( true, 'give-cache-incrementer' );
728
729 /**
730 * Fire the action when all cache deleted.
731 *
732 * @since 2.1.0
733 */
734 do_action( 'give_flushed_cache' );
735
736 return true;
737 }
738
739 return false;
740 }
741
742
743 /**
744 * Filter the group name
745 *
746 * @since 2.0
747 * @access private
748 *
749 * @param $group
750 *
751 * @return mixed
752 */
753 private function filter_group_name( $group ) {
754 /**
755 * Filter the group name
756 *
757 * @since 2.1.0
758 */
759 $filtered_group = apply_filters( 'give_cache_filter_group_name', '', $group );
760
761 if ( empty( $filtered_group ) ) {
762
763 switch ( $group ) {
764 case 'give-db-queries':
765 $incrementer = self::$instance->get_incrementer();
766 break;
767
768 default:
769 $incrementer = self::$instance->get_incrementer( false, 'give-cache-incrementer' );
770
771 }
772
773 $current_blog_id = get_current_blog_id();
774 $filtered_group = "{$group}_{$current_blog_id}_{$incrementer}";
775 }
776
777 return $filtered_group;
778 }
779
780
781 /**
782 * Disable cache.
783 *
784 * @since 2.0
785 * @access public
786 */
787 public static function disable() {
788 self::get_instance()->is_cache = false;
789 }
790
791 /**
792 * Enable cache.
793 *
794 * @since 2.0
795 * @access public
796 */
797 public static function enable() {
798 self::get_instance()->is_cache = true;
799 }
800 }
801
802 // Initialize
803 Give_Cache::get_instance()->setup();
804