MediaWiki  master
CachedAction.php
Go to the documentation of this file.
1 <?php
46 abstract class CachedAction extends FormlessAction implements ICacheHelper {
47 
55  protected $cacheHelper;
56 
63  protected $cacheEnabled = true;
64 
71  public function setCacheEnabled( $cacheEnabled ) {
72  $this->cacheHelper->setCacheEnabled( $cacheEnabled );
73  }
74 
84  public function startCache( $cacheExpiry = null, $cacheEnabled = null ) {
85  $this->cacheHelper = new CacheHelper();
86 
87  $this->cacheHelper->setCacheEnabled( $this->cacheEnabled );
88  $this->cacheHelper->setOnInitializedHandler( [ $this, 'onCacheInitialized' ] );
89 
90  $keyArgs = $this->getCacheKey();
91 
92  if ( array_key_exists( 'action', $keyArgs ) && $keyArgs['action'] === 'purge' ) {
93  unset( $keyArgs['action'] );
94  }
95 
96  $this->cacheHelper->setCacheKey( $keyArgs );
97 
98  if ( $this->getRequest()->getText( 'action' ) === 'purge' ) {
99  $this->cacheHelper->rebuildOnDemand();
100  }
101 
102  $this->cacheHelper->startCache( $cacheExpiry, $cacheEnabled );
103  }
104 
119  public function getCachedValue( $computeFunction, $args = [], $key = null ) {
120  return $this->cacheHelper->getCachedValue( $computeFunction, $args, $key );
121  }
122 
135  public function addCachedHTML( $computeFunction, $args = [], $key = null ) {
136  $html = $this->cacheHelper->getCachedValue( $computeFunction, $args, $key );
137  $this->getOutput()->addHTML( $html );
138  }
139 
146  public function saveCache() {
147  $this->cacheHelper->saveCache();
148  }
149 
158  public function setExpiry( $cacheExpiry ) {
159  $this->cacheHelper->setExpiry( $cacheExpiry );
160  }
161 
169  protected function getCacheKey() {
170  return [
171  get_class( $this->page ),
172  $this->getName(),
173  $this->getLanguage()->getCode()
174  ];
175  }
176 
184  public function onCacheInitialized( $hasCached ) {
185  if ( $hasCached ) {
186  $this->getOutput()->setSubtitle( $this->cacheHelper->getCachedNotice( $this->getContext() ) );
187  }
188  }
189 }
setCacheEnabled( $cacheEnabled)
Sets if the cache should be enabled or not.
getOutput()
Get the OutputPage being used for this instance.
Definition: Action.php:208
Helper class for caching various elements in a single cache entry.
Definition: CacheHelper.php:45
getLanguage()
Shortcut to get the user Language being used for this instance.
Definition: Action.php:237
CacheHelper $cacheHelper
CacheHelper object to which we forward the non-SpecialPage specific caching work. ...
getCachedValue( $computeFunction, $args=[], $key=null)
Get a cached value if available or compute it if not and then cache it if possible.
if( $line===false) $args
Definition: cdb.php:64
getCacheKey()
Returns the variables used to constructed the cache key in an array.
bool $cacheEnabled
If the cache is enabled or not.
setExpiry( $cacheExpiry)
Sets the time to live for the cache, in seconds or a unix timestamp indicating the point of expiry...
getName()
Return the name of the action this object responds to.
onCacheInitialized( $hasCached)
Gets called after the cache got initialized.
saveCache()
Saves the HTML to the cache in case it got recomputed.
An action which just does something, without showing a form first.
Abstract action class with scaffolding for caching HTML and other values in a single blob...
addCachedHTML( $computeFunction, $args=[], $key=null)
Add some HTML to be cached.
getRequest()
Get the WebRequest being used for this instance.
Definition: Action.php:198
Interface for all classes implementing CacheHelper functionality.
startCache( $cacheExpiry=null, $cacheEnabled=null)
Initializes the caching.