191 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			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;
 | |
| }
 |