Easier installation: is now automaticaly set for every additional plugin.
[toast/cookiecaptcha.git] / CaptchaStore.php
index b32d637b7b530905ceebf47ac2deeee4dfcdbd49..7b29e44804c4b0781f34ba383a06de756c01d34c 100644 (file)
@@ -1,5 +1,63 @@
 <?php
-class CaptchaSessionStore {
+
+abstract class CaptchaStore {
+       /**
+        * Store the correct answer for a given captcha
+        * @param  $index String
+        * @param  $info String the captcha result
+        */
+       public abstract function store( $index, $info );
+
+       /**
+        * Retrieve the answer for a given captcha
+        * @param  $index String
+        * @return String
+        */
+       public abstract function retrieve( $index );
+
+       /**
+        * Delete a result once the captcha has been used, so it cannot be reused
+        * @param  $index
+        */
+       public abstract function clear( $index );
+
+       /**
+        * Whether this type of CaptchaStore needs cookies
+        * @return Bool
+        */
+       public abstract function cookiesNeeded();
+
+       /**
+        * The singleton instance
+        * @var CaptchaStore
+        */
+       private static $instance;
+
+       /**
+        * Get somewhere to store captcha data that will persist between requests
+        *
+        * @throws MWException
+        * @return CaptchaStore
+        */
+       public final static function get() {
+               if( !self::$instance instanceof self ){
+                       global $wgCaptchaStorageClass;
+                       if( in_array( 'CaptchaStore', class_parents( $wgCaptchaStorageClass ) ) ) {
+                               self::$instance = new $wgCaptchaStorageClass;
+                       } else {
+                               throw new MWException( "Invalid CaptchaStore class $wgCaptchaStorageClass" );
+                       }
+               }
+               return self::$instance;
+       }
+
+       /**
+        * Protected constructor: no creating instances except through the factory method above
+        */
+       protected function __construct(){}
+}
+
+class CaptchaSessionStore extends CaptchaStore {
 
        function store( $index, $info ) {
                $_SESSION['captcha' . $info['index']] = $info;
@@ -22,7 +80,7 @@ class CaptchaSessionStore {
        }
 }
 
-class CaptchaCacheStore {
+class CaptchaCacheStore extends CaptchaStore {
 
        function store( $index, $info ) {
                global $wgMemc, $wgCaptchaSessionExpiration;