laipower/wp-content/plugins/w3-total-cache/Extension_FragmentCache_Api.php

191 lines
5.2 KiB
PHP

<?php
/*
* @param string $fragment_group
* @param boolean $global If group is for whole network in MS install
* @return mixed
*/
function w3tc_fragmentcache_flush_group( $fragment_group ) {
$o = \W3TC\Dispatcher::component( 'CacheFlush' );
return $o->fragmentcache_flush_group( $fragment_group );
}
/**
* Flush all fragment groups
*
* @return mixed
*/
function w3tc_fragmentcache_flush() {
$o = \W3TC\Dispatcher::component( 'CacheFlush' );
return $o->fragmentcache_flush();
}
/**
* Register a fragment group and connected actions for current blog
*
* @param string $group
* @param array $actions on which actions group should be flushed
* @param integer $expiration in seconds
* @return mixed
*/
function w3tc_register_fragment_group( $group, $actions, $expiration ) {
if ( !is_int( $expiration ) ) {
$expiration = (int) $expiration;
trigger_error( __FUNCTION__ . ' needs expiration parameter to be an int.', E_USER_WARNING );
}
$o = \W3TC\Dispatcher::component( 'Extension_FragmentCache_Core' );
return $o->register_group( $group, $actions, $expiration );
}
/**
* Register a fragment group for whole network in MS install
*
* @param unknown $group
* @param unknown $actions
* @param integer $expiration in seconds
* @return mixed
*/
function w3tc_register_fragment_global_group( $group, $actions, $expiration ) {
if ( !is_int( $expiration ) ) {
$expiration = (int) $expiration;
trigger_error( __FUNCTION__ . ' needs expiration parameter to be an int.', E_USER_WARNING );
}
$o = \W3TC\Dispatcher::component( 'Extension_FragmentCache_Core' );
return $o->register_global_group( $group, $actions,
$expiration );
}
/**
* Starts caching output
*
* @param string $id the fragment id
* @param string $group the fragment group name.
* @param string $hook name of the action/filter hook to disable on fragment found
* @return bool returns true if cached fragment is echoed
*/
function w3tc_fragmentcache_start( $id, $group = '', $hook = '' ) {
$fragment = w3tc_fragmentcache_get( $id, $group );
if ( false === $fragment ) {
_w3tc_caching_fragment( $id, $group );
ob_start();
} else {
echo esc_html( $fragment );
if ( $hook ) {
remove_all_filters($hook);
}
return true;
}
return false;
}
/**
* Starts caching filter, returns if filter already cached.
*
* @param string $id the fragment id
* @param string $group the fragment group name.
* @param string $hook name of the action/filter hook to disable on fragment found
* @param mixed $data the data returned by the filter
* @return mixed
*/
function w3tc_fragmentcache_filter_start( $id, $group = '', $hook = '', $data = null ) {
_w3tc_caching_fragment( $id, $group );
$fragment = w3tc_fragmentcache_get( $id, $group );
if ( false !== $fragment ) {
if ( $hook ) {
remove_all_filters($hook);
}
return $fragment;
}
return $data;
}
/**
* Ends the caching of output. Stores it and outputs the content
*
* @param string $id the fragment id
* @param string $group the fragment group
* @param bool $debug
*/
function w3tc_fragmentcache_end( $id, $group = '', $debug = false ) {
if ( w3tc_is_caching_fragment( $id, $group ) ) {
$content = ob_get_contents();
if ( $debug )
$content = sprintf( "\r\n".'<!-- fragment start (%s%s)-->'."\r\n".'%s'."\r\n".'<!-- fragment end (%1$s%2$s) cached at %s by W3 Total Cache expires in %d seconds -->'."\r\n", $group, $id, $content, date_i18n( 'Y-m-d H:i:s' ), 1000 );
w3tc_fragmentcache_store( $id, $group, $content );
ob_end_flush();
}
}
/**
* Ends the caching of filter. Stores it and returns the content
*
* @param string $id the fragment id
* @param string $group the fragment group
* @param mixed $data
* @return mixed
*/
function w3tc_fragmentcache_filter_end( $id, $group = '', $data = null ) {
if ( w3tc_is_caching_fragment( $id, $group ) ) {
w3tc_fragmentcache_store( $id, $group, $data );
}
return $data;
}
/**
* Stores an fragment
*
* @param unknown $id
* @param string $group
* @param string $content
*/
function w3tc_fragmentcache_store( $id, $group = '', $content = '' ) {
set_transient( "{$group}{$id}", $content,
1000 /* default expiration in a case its not catched by fc plugin */ );
}
/**
*
*
* @param unknown $id
* @param string $group
* @return object
*/
function w3tc_fragmentcache_get( $id, $group = '' ) {
return get_transient( "{$group}{$id}" );
}
/**
* Flushes a fragment from the cache
*
* @param unknown $id
* @param string $group
*/
function w3tc_fragmentcache_flush_fragment( $id, $group = '' ) {
delete_transient( "{$group}{$id}" );
}
/**
* Checks wether page fragment caching is being done for the item
*
* @param string $id fragment id
* @param string $group which group fragment belongs too
* @return bool
*/
function w3tc_is_caching_fragment( $id, $group = '' ) {
global $w3tc_caching_fragment;
return isset( $w3tc_caching_fragment["{$group}{$id}"] ) &&
$w3tc_caching_fragment["{$group}{$id}"];
}
/**
* Internal function, sets if page fragment by $id and $group is being cached
*
* @param string $id fragment id
* @param string $group which group fragment belongs too
*/
function _w3tc_caching_fragment( $id, $group = '' ) {
global $w3tc_caching_fragment;
$w3tc_caching_fragment["{$group}{$id}"] = true;
}