MediaWiki REL1_35
CachedAction.php
Go to the documentation of this file.
1<?php
46abstract 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->getArticle() ),
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}
getName()
Return the name of the action this object responds to.
getOutput()
Get the OutputPage being used for this instance.
Definition Action.php:239
getArticle()
Get a Article object.
Definition Action.php:289
getLanguage()
Shortcut to get the user Language being used for this instance.
Definition Action.php:268
getRequest()
Get the WebRequest being used for this instance.
Definition Action.php:229
Helper class for caching various elements in a single cache entry.
Abstract action class with scaffolding for caching HTML and other values in a single blob.
CacheHelper $cacheHelper
CacheHelper object to which we forward the non-SpecialPage specific caching work.
addCachedHTML( $computeFunction, $args=[], $key=null)
Add some HTML to be cached.
setCacheEnabled( $cacheEnabled)
Sets if the cache should be enabled or not.
saveCache()
Saves the HTML to the cache in case it got recomputed.
startCache( $cacheExpiry=null, $cacheEnabled=null)
Initializes the caching.
bool $cacheEnabled
If the cache is enabled or not.
onCacheInitialized( $hasCached)
Gets called after the cache got initialized.
getCachedValue( $computeFunction, $args=[], $key=null)
Get a cached value if available or compute it if not and then cache it if possible.
setExpiry( $cacheExpiry)
Sets the time to live for the cache, in seconds or a unix timestamp indicating the point of expiry.
getCacheKey()
Returns the variables used to constructed the cache key in an array.
An action which just does something, without showing a form first.
Interface for all classes implementing CacheHelper functionality.
if( $line===false) $args
Definition mcc.php:124