( jc – 19.11.2008 12:39)
class.xform.recaptcha.inc.php
Diese XFORM Klasse bindet ReCaptcha in XFORM ein.
Installation
- Die Klasse nach redaxo/include/addons/xform/classes/values/ kopieren.
- ReCaptcha lib einbinden, wahlweise per:
- ReCaptcha Addon (default)
- ReCaptcha lib nach xform/ext/recaptcha/recaptchalib.php kopieren (entsprechende Passage in der Klasse (un)kommentieren)
- Bei recaptcha.net registrieren, Public und private key Paar passend für die eigene Domain erstellen.
Anwendung
Die Einbindung in ein XFORM Formular folgt den gewohnten Konventionen – im Detail ist die Feldbelegung wie folgt:
recaptcha|Beschreibungstext|Fehlertext|public-key|private-key|lang|theme|tabindex|custom_theme_widget
Die Felder lang, theme, tabindex und custom_theme_widget sind optional (d.h. sie können leer bleiben, aber die Feldabtrenner | müssen erhalten bleiben!).
class.xform.recaptcha.inc.php:
0 1 2 3 45 6 7 8 910 11 12 13 1415 16 17 18 1920 21 22 23 2425 26 27 28 2930 31 32 33 3435 36 37 38 3940 41 42 43 4445 46 47 48 4950 51 52 53 5455 56 57 58 5960 61 62 63 6465 66 67 68 6970 71 72 73 7475 76 77 78 7980 81 82 83 8485 86 87 88 8990 91 92 93 9495 96 97 98 99100 101 102 103 104105 106 107 108 109110 111 112 113 114115 116 117 118 119 | <?php ////////////////////////////////////////////////////////////////////////////// // Redaxo AddOn: "reCAPTCHA" // Redaxo Version: 4.1 // AddOn Version: 1.0 // reCAPTCHA Version: 1.1.0 // Author: redaxo (A) f-stop.de // Edit: Mon May 05 17:00:35 CEST 2008 ////////////////////////////////////////////////////////////////////////////// // --------------------------------------------------------------------------- // class.xform.recaptcha.inc.php // VERSION: 10 // EDITED: Sat May 03 02:27:37 CEST 2008 - jeandeluxe - redaxo@f-stop.de // --------------------------------------------------------------------------- // RECAPTCHA LIB: http://recaptcha.net/plugins/php/ // RECAPTCHA KEYS: https://admin.recaptcha.net/accounts/signup/ // --------------------------------------------------------------------------- // RECAPTCHA LIB INSTALLATION: // Variante 1: per recaptcha Addon // Variante 2: lib -> "../addons/xform/ext/recaptcha/recaptchalib.php" // -> Zeilen 47/44 un/kommentieren // AUFRUF: // recaptcha|Beschreibungstext|Fehlertext|public-key|private-key|lang|theme|tabindex|custom_theme_widget // --------------------------------------------------------------------------- // TODOS: // * lang wahlweise aus rex_lang oder moduleingabe (auto/wert) // --------------------------------------------------------------------------- class rex_xform_recaptcha extends rex_xform_abstract { // Aufruf des Objektes mit den verschiedenen Zeigern function enterObject(&$email_elements,&$sql_elements,&$warning,&$form_output,$send = 0) { //$email_elements =''; //$sql_elements =''; // Beschreibung und Fehlertext $desc = $this->elements[1]; $warn = $this->elements[2]; // recaptcha keys $RC_publickey = $this->elements[3]; $RC_privatekey = $this->elements[4]; // recaptcha gui settings $RC_lang = $this->elements[5]; $RC_theme = $this->elements[6]; $RC_tabindex = $this->elements[7]; $RC_custom = $this->elements[8]; global $REX; // recaptcha lib per reCAPTCHA Addon require_once($REX['INCLUDE_PATH'].'/addons/recaptcha/recaptcha.net/recaptchalib.php'); // Alternative: recaptcha lib in "xform/ext/recaptcha/recaptchalib.php" // require_once (realpath(dirname (__FILE__).'/../../ext/recaptcha/recaptchalib.php')); if (isset($_REQUEST["recaptcha"]) && $_REQUEST["recaptcha"] == "show") { ob_end_clean(); ob_end_clean(); $server = &new recaptcha (); $server->handle_request (); exit; } $RC_response = recaptcha_check_answer ($RC_privatekey,$_SERVER["REMOTE_ADDR"],$_POST["recaptcha_challenge_field"],$_POST["recaptcha_response_field"]); if ( $send == 1 && ($RC_response->is_valid)) { // Alles ist gut. }elseif($send==1) { // Error. Fehlermeldung ausgeben $this->params["warning"][] = $warn; $this->params["warning_messages"][] = $warn; } // checken ob Beschreibungstext definiert. wenn ja span Element, sont nix if ($desc != "") { $span = '<span>'.$desc.'</span>'; } else { $span = ''; } // recaptcha options ausgeben $RC_control =''; $s = ''; if ($RC_lang != '') { $RC_control = "lang:'".$RC_lang."'"; $s = ',';} if ($RC_theme != '') { $RC_control .= $s."theme:'".$RC_theme."'"; $s = ',';} if ($RC_tabindex != '') { $RC_control .= $s."tabindex:".$RC_tabindex; $s = ',';} if ($RC_custom != '') { $RC_control .= $s."custom_theme_widget:'".$RC_custom."'";} if ($RC_control != '') { $RC_control =' <script type="text/javascript"> var RecaptchaOptions = { '.$RC_control.' }; </script> '; } $form_output[] = ' <div class="formtext"> '.$span.$RC_control.recaptcha_get_html($RC_publickey).' </div>'; } function getDescription() { return 'recaptcha -> Beispiel: recaptcha|Beschreibungstext|Fehlertext|<a href="https://admin.recaptcha.net/accounts/signup/" target="extern">public-key</a>|<a href="https://admin.recaptcha.net/accounts/signup/" target="extern">private-key</a>|<a href="http://recaptcha.net/apidocs/captcha/client.html#customization" target="extern">lang</a>|<a href="http://recaptcha.net/apidocs/captcha/client.html#customization" target="extern">theme</a>|<a href="http://recaptcha.net/apidocs/captcha/client.html#customization" target="extern">tabindex</a>|<a href="http://recaptcha.net/apidocs/captcha/client.html#customization" target="extern">custom_theme_widget</a>'; } } ?> |