* (bug 32609) API: Move captchaid/captchaword of action=edit from core to Captcha...
authorSam Reed <reedy@users.mediawiki.org>
Wed, 23 Nov 2011 19:09:57 +0000 (19:09 +0000)
committerSam Reed <reedy@users.mediawiki.org>
Wed, 23 Nov 2011 19:09:57 +0000 (19:09 +0000)
Left setting of wpCaptchaId and wpCaptchaWord in core. Can't think of a sane way to check and set them via an extension (subclass and override, or a hook). Annoyingly APIEditBeforeSave doesn't pass the params array

Captcha.php
ConfirmEdit.php
ConfirmEditHooks.php
ReCaptcha.php

index 0124c77b172b6584526abe0fd1898913ae956670..a67870c8e61e444cc834753bb415bff98b53d961 100644 (file)
@@ -44,7 +44,7 @@ abstract class Captcha {
 
        /**
         * Instantiate a new Captcha object for a given Id
-        * 
+        *
         * @param  $id Int
         * @return Captcha
         */
@@ -305,7 +305,7 @@ class SimpleCaptcha {
                                wfDebug( "ConfirmEdit: user group allows skipping captcha on email sending\n" );
                                return true;
                        }
-                       $form->addFooterText( 
+                       $form->addFooterText(
                                "<div class='captcha'>" .
                                $wgOut->parse( $this->getMessage( 'sendemail' ) ) .
                                $this->getForm() .
@@ -692,6 +692,7 @@ class SimpleCaptcha {
                        $this->addCaptchaAPI( $resultArr );
                        return false;
                }
+
                return true;
        }
 
@@ -742,7 +743,7 @@ class SimpleCaptcha {
        }
 
        /**
-        * Check the captcha on Special:EmailUser 
+        * Check the captcha on Special:EmailUser
         * @param $from MailAddress
         * @param $to MailAddress
         * @param $subject String
@@ -759,7 +760,7 @@ class SimpleCaptcha {
                        }
                        if ( $this->isIPWhitelisted() )
                                return true;
-               
+
                        if ( defined( 'MW_API' ) ) {
                                # API mode
                                # Asking for captchas in the API is really silly
@@ -775,6 +776,36 @@ class SimpleCaptcha {
                return true;
        }
 
+       /**
+        * @param $module ApiBase
+        * @param $params array
+        * @return bool
+        */
+       public function APIGetAllowedParams( &$module, &$params ) {
+               if ( !$module instanceof ApiEditPage ) {
+                       return true;
+               }
+               $params['captchaword'] = null;
+               $params['captchaid'] = null;
+
+               return true;
+       }
+
+       /**
+        * @param $module ApiBae
+        * @param $desc array
+        * @return bool
+        */
+       public function APIGetParamDescription( &$module, &$desc ) {
+               if ( !$module instanceof ApiEditPage ) {
+                       return true;
+               }
+               $desc['captchaid'] = 'CAPTCHA ID from previous request';
+               $desc['captchaword'] = 'Answer to the CAPTCHA';
+
+               return true;
+       }
+
        /**
         * Given a required captcha run, test form input for correct
         * input on the open session.
index 8a18a844966b185fd705e1954b14742eba5d4b1b..1231212dbb40274eda44ac168cdf8e0f959d883f 100644 (file)
@@ -199,6 +199,8 @@ $wgHooks['EmailUserForm'][] = 'ConfirmEditHooks::injectEmailUser';
 $wgHooks['EmailUser'][] = 'ConfirmEditHooks::confirmEmailUser';
 # Register API hook
 $wgHooks['APIEditBeforeSave'][] = 'ConfirmEditHooks::confirmEditAPI';
+$wgHooks['APIGetAllowedParams'][] = 'ConfirmEditHooks::APIGetAllowedParams';
+$wgHooks['APIEditBeforeSave'][] = 'ConfirmEditHooks::APIEditBeforeSave';
 
 $wgAutoloadClasses['ConfirmEditHooks'] = "$wgConfirmEditIP/ConfirmEditHooks.php";
 $wgAutoloadClasses['Captcha']= "$wgConfirmEditIP/Captcha.php";
index dcdf49f7b05058b0db6ab32271f3c32b35420ba1..137821c4941909e7d6fd6c4fdb6b35198b91c797 100644 (file)
@@ -5,7 +5,7 @@ class ConfirmEditHooks {
        /**
         * Get the global Captcha instance
         *
-        * @return Captcha
+        * @return Captcha|SimpleCaptcha
         */
        static function getInstance() {
                global $wgCaptcha, $wgCaptchaClass;
@@ -56,6 +56,14 @@ class ConfirmEditHooks {
        static function confirmEmailUser( $from, $to, $subject, $text, &$error ) {
                return self::getInstance()->confirmEmailUser( $from, $to, $subject, $text, $error );
        }
+
+       public static function APIGetAllowedParams( &$module, &$params ) {
+               return self::getInstance()->APIGetAllowedParams( $module, $params );
+       }
+
+       public static function APIGetParamDescription( &$module, &$desc ) {
+               return self::getInstance()->APIGetParamDescription( $module, $desc );
+       }
 }
 
 class CaptchaSpecialPage extends UnlistedSpecialPage {
index a8755277fc6178cd7b7c837a9ed5fa566e14255f..7837bb7a66f7683c140643e0dd4379d98094575a 100644 (file)
@@ -1,8 +1,8 @@
 <?php
 
 /**
- * Captcha class using the reCAPTCHA widget. 
- * Stop Spam. Read Books.  
+ * Captcha class using the reCAPTCHA widget.
+ * Stop Spam. Read Books.
  *
  * @addtogroup Extensions
  * @author Mike Crawford <mike.crawford@gmail.com>
@@ -57,7 +57,7 @@ function efReCaptcha() {
                die ('You need to set $wgReCaptchaPrivateKey and $wgReCaptchaPublicKey in LocalSettings.php to ' .
                     "use the reCAPTCHA plugin. You can sign up for a key <a href='" .
                     htmlentities(recaptcha_get_signup_url ($wgServerName, "mediawiki")) . "'>here</a>.");
-       }       
+       }
 }
 
 
@@ -142,4 +142,11 @@ class ReCaptcha extends SimpleCaptcha {
                return wfEmptyMsg( $name, $text ) ? wfMsg( 'recaptcha-edit' ) : $text;
        }
 
+       public function APIGetAllowedParams( &$module, &$params ) {
+               return true;
+       }
+
+       public function APIGetParamDescription( &$module, &$desc ) {
+               return true;
+       }
 }