From 80e9b337eec3d87f5d299da747d60eb061551b85 Mon Sep 17 00:00:00 2001 From: Sam Reed Date: Wed, 23 Nov 2011 19:21:12 +0000 Subject: [PATCH] Kill the abstract Captcha class Not used anywhere, everything else uses the SimpleCaptcha class as the base --- Captcha.php | 216 ------------------------------------------------ ConfirmEdit.php | 1 - 2 files changed, 217 deletions(-) diff --git a/Captcha.php b/Captcha.php index 2b32b4eb6..565cc3cbe 100644 --- a/Captcha.php +++ b/Captcha.php @@ -1,221 +1,5 @@ setId( $id ); - return $obj->exists() - ? $obj - : null; - } - - /** - * Instantiate a brand new captcha, never seen before. - * - * @return Captcha - */ - public final static function newRandom(){ - $obj = self::factory(); - $obj->generateNew(); - return $obj; - } - - /** - * Protected constructor - use only the factory methods above to instantiate captchas, - * or you may end up with the wrong type of object - */ - protected function __construct(){} - - /** - * Get the captcha Id - * - * @return String - */ - public function getId(){ - return $this->id; - } - - /** - * Set the Id internally. Don't include wierd things like entities or characters that - * need to be HTML-escaped, you'll just be creating more work and pain for yourself... - * - * @param $id String - */ - protected function setId( $id ){ - $this->id = $id; - } - - /** - * Initialise $this->info etc with information needed to make this object a new, - * (ideally) never-seen-before captcha. Implementations should not save the data in - * the store in this function, as the captcha may not ever be used. - * - * @return Array of captcha info - */ - # FIXME: detail - protected abstract function generateNew(); - - /** - * Save a generated captcha in storage somewhere where it won't be lost between - * requests. A random ID is used so legit users can make edits in multiple tabs - * or windows without being unnecessarily hobbled by a serial order requirement. - */ - protected function store() { - // Assign random index if we're not udpating - if ( !isset( $this->info['index'] ) ) { - if( !$this->getId() ){ - $this->setId( strval( mt_rand() ) ); - } - $this->info['index'] = $this->getId(); - } - CaptchaStore::get()->store( $this->info['index'], $this->info ); - } - - /** - * Fetch the data for this captcha from the CaptchaStore. This requires $this->id - * to be set. - * - * @return Array|Bool: Array of info, or false if missing - */ - protected function retrieve() { - if( $this->getId() === null ){ - return null; - } - if( $this->info === null ){ - $this->info = CaptchaStore::get()->retrieve( $this->getId() ); - $this->exists = $this->info !== false; - } - return $this->info; - } - - /** - * Clear the information about this captcha from the CaptchaStore, so it cannot - * be reused at a later date. - */ - protected function delete() { - if( $this->getId() !== null ){ - CaptchaStore::get()->clear( $this->getId() ); - } - } - - /** - * Whether this captcha exists. $this->setId() must have been called from some context - * - * @return Bool - */ - public function exists(){ - if( $this->exists === null ){ - $this->retrieve(); - } - return $this->exists; - } - - /** - * Load some data from a WebRequest. Implementations must load all data they need - * from the request in this function, they must not use the global $wgRequest, as - * in the post-1.18 environment they may not necessarily be the same. - * - * @param $request WebRequest - * @param $field HTMLCaptchaField will be passed if the captcha is part of an HTMLForm - */ - public abstract function loadFromRequest( WebRequest $request, HTMLCaptchaField $field = null ); - - /** - * Return the data that would be needed to pass the captcha challenge through the API. - * Implementations must return an array with at least the following parameters: - * 'type' - a unique description of the type of challenge. This could be - * the class name - * 'mime' - the MIME type of the challenge - * 'id' - the captcha Id produced by getId() - * Implementations should document how the user should use the provided data to answer - * the captcha. - * - * Implementations may return False to indicate that it is not possible to represent - * the challenge via the API. API actions protected by such a captcha will be disabled. - * - * @return Array|Bool - */ - public abstract function getApiParams(); - - /** - * Return the HTML which will be placed in the 'input' table cell of an HTMLForm. - * Implementations must include input fields which will perpetuate the captcha Id and - * any special data, as well as providing a means for the user to answer the captcha. - * Implementations should not include any help or label text, as these will be set in - * the label-message and help-message attributes of the HTMLCaptchafield. - * Implementations should honour the options set in the HTMLFormField such as - * $field->mName and $field->mReadonly. - * - * @param $field HTMLCaptchaField - * @return String raw HTML - */ - public abstract function getFormHTML( HTMLCaptchaField $field ); - - /** - * Return the HTML which will be used in legacy forms which do not implement HTMLForm - * Implementations must include input fields which will perpetuate the captcha Id and - * any other necessary data, as well as providing a means for the user to answer the - * captcha, and any relevant descriptions and instructions. - * - * @return String raw HTML - */ - public abstract function getFreeflowHTML(); - - /** - * Using the parameters loaded from the web request, check the captcha, maybe delete - * it if that's desirable, do any other necessary cleanup, and return Bool - * @return Bool whether the captcha was successfully answered - */ - public abstract function checkCaptcha(); -} - class SimpleCaptcha { function getCaptcha() { diff --git a/ConfirmEdit.php b/ConfirmEdit.php index f11eb7d6d..974870f1d 100644 --- a/ConfirmEdit.php +++ b/ConfirmEdit.php @@ -199,7 +199,6 @@ $wgHooks['APIGetAllowedParams'][] = 'ConfirmEditHooks::APIGetAllowedParams'; $wgHooks['APIEditBeforeSave'][] = 'ConfirmEditHooks::APIEditBeforeSave'; $wgAutoloadClasses['ConfirmEditHooks'] = "$wgConfirmEditIP/ConfirmEditHooks.php"; -$wgAutoloadClasses['Captcha']= "$wgConfirmEditIP/Captcha.php"; $wgAutoloadClasses['SimpleCaptcha']= "$wgConfirmEditIP/Captcha.php"; $wgAutoloadClasses['CaptchaStore']= "$wgConfirmEditIP/CaptchaStore.php"; $wgAutoloadClasses['CaptchaSessionStore']= "$wgConfirmEditIP/CaptchaStore.php";