( jc – 19.11.2008 12:39)

class.xform.recaptcha.inc.php

Diese XFORM Klasse bindet ReCaptcha in XFORM ein.

Installation

  1. Die Klasse nach redaxo/include/addons/xform/classes/values/ kopieren.
  2. ReCaptcha lib einbinden, wahlweise per:
    1. ReCaptcha Addon (default)
    2. ReCaptcha lib nach xform/ext/recaptcha/recaptchalib.php kopieren (entsprechende Passage in der Klasse (un)kommentieren)
  3. 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>';
        }
}
 
?>