]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Recaptcha/RecaptchaPlugin.php
i18n/L10n review, extension credits added.
[quix0rs-gnu-social.git] / plugins / Recaptcha / RecaptchaPlugin.php
index 3a510ef11ce01ccaf15f79eecd96c0a10a11ba26..0c46a33e0b0cea702326c436fce4283bf8525cad 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * StatusNet, the distributed open-source microblogging tool
  *
- * Plugin to show reCaptcha when a user registers 
+ * Plugin to show reCaptcha when a user registers
  *
  * PHP version 5
  *
@@ -31,8 +31,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
     exit(1);
 }
 
-define('RECAPTCHA', '0.2');
-
 require_once(INSTALLDIR.'/plugins/Recaptcha/recaptchalib.php');
 
 class RecaptchaPlugin extends Plugin
@@ -44,11 +42,11 @@ class RecaptchaPlugin extends Plugin
     var $ssl;
 
     function onInitializePlugin(){
-        if(!isset($this->private_key)){
-            common_log(LOG_ERR, "Recaptcha: Must specify private_key in config.php");
+        if(!isset($this->private_key)) {
+            common_log(LOG_ERR, 'Recaptcha: Must specify private_key in config.php');
         }
-        if(!isset($this->public_key)){
-            common_log(LOG_ERR, "Recaptcha: Must specify public_key in config.php");
+        if(!isset($this->public_key)) {
+            common_log(LOG_ERR, 'Recaptcha: Must specify public_key in config.php');
         }
     }
 
@@ -59,30 +57,37 @@ class RecaptchaPlugin extends Plugin
         return false;
     }
 
-    function onStartShowHTML($action)
-    {
-        //XXX: Horrible hack to make Safari, FF2, and Chrome work with
-        //reChapcha. reChapcha beaks xhtml strict
-        header('Content-Type: text/html');
 
-        $action->extraHeaders();
+    function onEndRegistrationFormData($action)
+    {
+        $action->elementStart('li');
+        $action->raw('<label for="recaptcha">'._m('Captcha').'</label>');
 
-        $action->startXML('html');
+        // AJAX API will fill this div out.
+        // We're calling that instead of the regular one so we stay compatible
+        // with application/xml+xhtml output as for mobile.
+        $action->element('div', array('id' => 'recaptcha'));
+        $action->elementEnd('li');
 
-        $action->style('#recaptcha_area{float:left;}');
-        return false;
+        $action->recaptchaPluginNeedsOutput = true;
+        return true;
     }
 
-    function onEndRegistrationFormData($action)
+    function onEndShowScripts($action)
     {
-        $action->elementStart('li');
-        $action->raw('<label for="recaptcha_area">Captcha</label>');
-        if($this->checkssl() === true){
-            $action->raw(recaptcha_get_html($this->public_key), null, true);
-        } else { 
-            $action->raw(recaptcha_get_html($this->public_key));
+        if (isset($action->recaptchaPluginNeedsOutput) && $action->recaptchaPluginNeedsOutput) {
+            // Load the AJAX API
+            if ($this->checkssl()) {
+                $url = "https://api-secure.recaptcha.net/js/recaptcha_ajax.js";
+            } else {
+                $url = "http://api.recaptcha.net/js/recaptcha_ajax.js";
+            }
+            $action->script($url);
+
+            // And when we're ready, fill out the captcha!
+            $key = json_encode($this->public_key);
+            $action->inlinescript("\$(function(){Recaptcha.create($key, 'recaptcha');});");
         }
-        $action->elementEnd('li');
         return true;
     }
 
@@ -93,14 +98,24 @@ class RecaptchaPlugin extends Plugin
                                         $action->trimmed('recaptcha_challenge_field'),
                                         $action->trimmed('recaptcha_response_field'));
 
-        if (!$resp->is_valid) 
-        {
-            if($this->display_errors)
-            { 
-                $action->showForm ("(reCAPTCHA said: " . $resp->error . ")");
+        if (!$resp->is_valid) {
+            if($this->display_errors) {
+                $action->showForm(sprintf(_("(reCAPTCHA error: %s)", $resp->error)));
             }
-            $action->showForm("Captcha does not match!");
+            $action->showForm(_m("Captcha does not match!"));
             return false;
         }
     }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'Recaptcha',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Eric Helgeson',
+                            'homepage' => 'http://status.net/wiki/Plugin:Recaptcha',
+                            'rawdescription' =>
+                            _m('Uses <a href="http://recaptcha.org/">Recaptcha</a> service to add a  '.
+                               'captcha to the registration page.'));
+        return true;
+    }
 }