From: addshore Date: Fri, 8 Aug 2014 23:44:59 +0000 (+0100) Subject: Split PoolCounterWorkViaCallback into own file X-Git-Tag: 1.31.0-rc.0~14512^2 X-Git-Url: https://git.cyclocoop.org/%242?a=commitdiff_plain;h=880e496a304d979b4500a14cdd8148ef6a5bd07a;p=lhc%2Fweb%2Fwiklou.git Split PoolCounterWorkViaCallback into own file Change-Id: I9c920cd03351a2b2b155247d58fbb2280d4d3775 --- diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index 5002617c31..6c9213979c 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -137,7 +137,7 @@ $wgAutoloadLocalClasses = array( 'PoolCounter_Stub' => 'includes/poolcounter/PoolCounter.php', 'PoolCounterRedis' => 'includes/poolcounter/PoolCounterRedis.php', 'PoolCounterWork' => 'includes/poolcounter/PoolCounterWork.php', - 'PoolCounterWorkViaCallback' => 'includes/poolcounter/PoolCounterWork.php', + 'PoolCounterWorkViaCallback' => 'includes/poolcounter/PoolCounterWorkViaCallback.php', 'PoolWorkArticleView' => 'includes/poolcounter/PoolWorkArticleView.php', 'Preferences' => 'includes/Preferences.php', 'PreferencesForm' => 'includes/Preferences.php', diff --git a/includes/poolcounter/PoolCounterWork.php b/includes/poolcounter/PoolCounterWork.php index 1bc1a8b122..e49afed096 100644 --- a/includes/poolcounter/PoolCounterWork.php +++ b/includes/poolcounter/PoolCounterWork.php @@ -64,6 +64,9 @@ abstract class PoolCounterWork { /** * Do something with the error, like showing it to the user. + * + * @param $status + * * @return bool */ public function error( $status ) { @@ -155,73 +158,3 @@ abstract class PoolCounterWork { } } } - -/** - * Convenience class for dealing with PoolCounters using callbacks - * @since 1.22 - */ -class PoolCounterWorkViaCallback extends PoolCounterWork { - /** @var callable */ - protected $doWork; - /** @var callable|null */ - protected $doCachedWork; - /** @var callable|null */ - protected $fallback; - /** @var callable|null */ - protected $error; - - /** - * Build a PoolCounterWork class from a type, key, and callback map. - * - * The callback map must at least have a callback for the 'doWork' method. - * Additionally, callbacks can be provided for the 'doCachedWork', 'fallback', - * and 'error' methods. Methods without callbacks will be no-ops that return false. - * If a 'doCachedWork' callback is provided, then execute() may wait for any prior - * process in the pool to finish and reuse its cached result. - * - * @param string $type - * @param string $key - * @param array $callbacks Map of callbacks - * @throws MWException - */ - public function __construct( $type, $key, array $callbacks ) { - parent::__construct( $type, $key ); - foreach ( array( 'doWork', 'doCachedWork', 'fallback', 'error' ) as $name ) { - if ( isset( $callbacks[$name] ) ) { - if ( !is_callable( $callbacks[$name] ) ) { - throw new MWException( "Invalid callback provided for '$name' function." ); - } - $this->$name = $callbacks[$name]; - } - } - if ( !isset( $this->doWork ) ) { - throw new MWException( "No callback provided for 'doWork' function." ); - } - $this->cacheable = isset( $this->doCachedWork ); - } - - public function doWork() { - return call_user_func_array( $this->doWork, array() ); - } - - public function getCachedWork() { - if ( $this->doCachedWork ) { - return call_user_func_array( $this->doCachedWork, array() ); - } - return false; - } - - public function fallback() { - if ( $this->fallback ) { - return call_user_func_array( $this->fallback, array() ); - } - return false; - } - - public function error( $status ) { - if ( $this->error ) { - return call_user_func_array( $this->error, array( $status ) ); - } - return false; - } -} diff --git a/includes/poolcounter/PoolCounterWorkViaCallback.php b/includes/poolcounter/PoolCounterWorkViaCallback.php new file mode 100644 index 0000000000..af83d2e069 --- /dev/null +++ b/includes/poolcounter/PoolCounterWorkViaCallback.php @@ -0,0 +1,92 @@ +$name = $callbacks[$name]; + } + } + if ( !isset( $this->doWork ) ) { + throw new MWException( "No callback provided for 'doWork' function." ); + } + $this->cacheable = isset( $this->doCachedWork ); + } + + public function doWork() { + return call_user_func_array( $this->doWork, array() ); + } + + public function getCachedWork() { + if ( $this->doCachedWork ) { + return call_user_func_array( $this->doCachedWork, array() ); + } + return false; + } + + public function fallback() { + if ( $this->fallback ) { + return call_user_func_array( $this->fallback, array() ); + } + return false; + } + + public function error( $status ) { + if ( $this->error ) { + return call_user_func_array( $this->error, array( $status ) ); + } + return false; + } +}