initial commit
This commit is contained in:
commit
1cc4bf3572
254 changed files with 63622 additions and 0 deletions
htdocs/libraries/formsgeneration
198
htdocs/libraries/formsgeneration/form_recaptcha.php
Normal file
198
htdocs/libraries/formsgeneration/form_recaptcha.php
Normal file
|
@ -0,0 +1,198 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* @(#) $Id: form_recaptcha.php,v 1.1 2012/09/16 11:19:33 mlemos Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
class form_recaptcha_class extends form_custom_class
|
||||
{
|
||||
var $format = '<div>{image}</div>
|
||||
<div>{instructions_visual}{instructions_audio} {input}</div>
|
||||
<div>{refresh_btn} {visual_challenge}{audio_challenge} {help_btn}</div>';
|
||||
var $validation_error_message = 'It was not entered the correct text.';
|
||||
var $key = '';
|
||||
var $private_key = '';
|
||||
var $valid = 0;
|
||||
var $widget = '';
|
||||
var $challenge = '';
|
||||
var $response = '';
|
||||
var $text = array(
|
||||
'instructions_visual'=>'Enter the words above',
|
||||
'instructions_audio'=>'Enter the numbers you hear',
|
||||
'visual_challenge'=>'Enter text in an image instead',
|
||||
'audio_challenge'=>'Enter numbers you hear instead',
|
||||
'refresh_btn'=>'Try another',
|
||||
'help_btn'=>'Help',
|
||||
'play_again'=>'Play the sound again',
|
||||
'cant_hear_this'=>'Download the sound as a MP3 file',
|
||||
'image_alt_text'=>'Image with text to enter'
|
||||
);
|
||||
var $tab_index = '';
|
||||
|
||||
Function CheckRequirements()
|
||||
{
|
||||
if(!class_exists('http_class'))
|
||||
return('the HTTP class to access the Recaptcha server is not available');
|
||||
return('');
|
||||
}
|
||||
|
||||
Function AddInput(&$form, $arguments)
|
||||
{
|
||||
if(strlen($error = $this->CheckRequirements()))
|
||||
return($error);
|
||||
if(!IsSet($arguments['Key'])
|
||||
|| strlen($arguments['Key']) != 40)
|
||||
return('it was not specified a valid Recaptcha public key');
|
||||
$this->key = $arguments['Key'];
|
||||
if(!IsSet($arguments['PrivateKey'])
|
||||
|| strlen($arguments['PrivateKey']) != 40)
|
||||
return('it was not specified a valid Recaptcha private key');
|
||||
$this->private_key = $arguments['PrivateKey'];
|
||||
if(IsSet($arguments['ValidationErrorMessage']))
|
||||
{
|
||||
if(strlen($arguments['ValidationErrorMessage']))
|
||||
$this->validation_error_message = $arguments['ValidationErrorMessage'];
|
||||
else
|
||||
return('it was not specified a valid validation error message');
|
||||
}
|
||||
if(IsSet($arguments['Text']))
|
||||
{
|
||||
if(GetType($text = $arguments['Text']) != 'array')
|
||||
return('it was not specified a valid array with Recaptcha text definitions');
|
||||
Reset($text);
|
||||
$tt = count($text);
|
||||
for($t = 0; $t < $tt; ++$t)
|
||||
{
|
||||
$k = Key($text);
|
||||
if(!IsSet($this->text[$k]))
|
||||
return($k.' is not a supported reCAPTCHA text definition');
|
||||
$this->text[$k] = $text[$k];
|
||||
Next($text);
|
||||
}
|
||||
}
|
||||
Reset($this->text);
|
||||
$this->widget = $this->GenerateInputID($form, $this->input, 'widget');
|
||||
$this->challenge = 'recaptcha_challenge_field';
|
||||
$this->focus_input = $this->response = 'recaptcha_response_field';
|
||||
$input_arguments = array(
|
||||
'NAME'=>$this->challenge,
|
||||
'TYPE'=>'textarea',
|
||||
'COLS'=>40,
|
||||
'ROWS'=>3
|
||||
);
|
||||
if(strlen($error = $form->AddInput($input_arguments)))
|
||||
return($error);
|
||||
$input_arguments = array(
|
||||
'NAME'=>$this->response,
|
||||
'ID'=>$this->response,
|
||||
'TYPE'=>'text',
|
||||
'ValidateAsNotEmpty'=>1,
|
||||
'ValidationErrorMessage'=>$this->validation_error_message,
|
||||
'ONKEYPRESS'=>'return(event.keyCode!=13)'
|
||||
);
|
||||
if(IsSet($arguments['DependentValidation']))
|
||||
$input_arguments['DependentValidation'] = $arguments['DependentValidation'];
|
||||
if(IsSet($arguments['InputClass']))
|
||||
$input_arguments['CLASS'] = $arguments['InputClass'];
|
||||
if(IsSet($arguments['InputStyle']))
|
||||
$input_arguments['STYLE'] = $arguments['InputStyle'];
|
||||
if(IsSet($arguments['InputTabIndex']))
|
||||
$this->tab_index = $input_arguments['TABINDEX'] = $arguments['InputTabIndex'];
|
||||
if(IsSet($arguments['InputExtraAttributes']))
|
||||
$input_arguments['ExtraAttributes'] = $arguments['InputExtraAttributes'];
|
||||
if(strlen($error = $form->AddInput($input_arguments)))
|
||||
return($error);
|
||||
if(IsSet($arguments['Format']))
|
||||
$this->format = $arguments['Format'];
|
||||
$this->valid_marks = array(
|
||||
'input'=>array(
|
||||
'input'=>$this->response,
|
||||
),
|
||||
'data'=>array(
|
||||
'image'=>'<div id="recaptcha_image"></div>',
|
||||
'instructions_visual'=>'<span class="recaptcha_only_if_image">'.HtmlSpecialChars($this->text['instructions_visual']).'</span>',
|
||||
'instructions_audio'=>'<span class="recaptcha_only_if_audio">'.HtmlSpecialChars($this->text['instructions_audio']).'</span>',
|
||||
'refresh_btn'=>'<span><a href="javascript:Recaptcha.reload()">'.HtmlSpecialChars($this->text['refresh_btn']).'</a></span>',
|
||||
'audio_challenge'=>'<span class="recaptcha_only_if_image"><a href="javascript:Recaptcha.switch_type(\'audio\')">'.HtmlSpecialChars($this->text['audio_challenge']).'</a></span>',
|
||||
'visual_challenge'=>'<span class="recaptcha_only_if_audio"><a href="javascript:Recaptcha.switch_type(\'image\')">'.HtmlSpecialChars($this->text['visual_challenge']).'</a></span>',
|
||||
'help_btn'=>'<span><a href="javascript:Recaptcha.showhelp()">'.HtmlSpecialChars($this->text['help_btn']).'</a></span>'
|
||||
)
|
||||
);
|
||||
return '';
|
||||
}
|
||||
|
||||
Function LoadInputValues(&$form, $submitted)
|
||||
{
|
||||
if(!$submitted)
|
||||
return('');
|
||||
$http = new http_class;
|
||||
$http->timeout = 60;
|
||||
$http->data_timeout = 60;
|
||||
$http->debug = 0;
|
||||
$http->log_debug = 1;
|
||||
$http->html_debug = 0;
|
||||
$error = $http->GetRequestArguments('http://www.google.com/recaptcha/api/verify', $arguments);
|
||||
$arguments['RequestMethod'] = 'POST';
|
||||
$arguments['PostValues'] = array(
|
||||
'privatekey'=>$this->private_key,
|
||||
'remoteip'=>GetEnv('REMOTE_ADDR'),
|
||||
'challenge'=>$form->GetInputValue($this->challenge),
|
||||
'response'=>$form->GetInputValue($this->response),
|
||||
);
|
||||
if(strlen($error = $http->Open($arguments)))
|
||||
return('recaptcha-not-reachable: '.$error);
|
||||
if(strlen($error = $http->SendRequest($arguments)) == 0)
|
||||
$error = $http->ReadWholeReplyBody($response);
|
||||
$http->Close();
|
||||
if(strlen($error))
|
||||
return('recaptcha-not-reachable: '.$error);
|
||||
$this->valid = !strcmp(strtok($response,"\n"), 'true');
|
||||
if(!$this->valid)
|
||||
{
|
||||
switch($error = strtok("\n"))
|
||||
{
|
||||
case 'incorrect-captcha-sol':
|
||||
break;
|
||||
case 'invalid-site-private-key':
|
||||
return($error.': the specified reCAPTCHA private key is incorrect');
|
||||
case 'invalid-request-cookie':
|
||||
return($error.': the reCAPTCHA challenge parameter is corrupted');
|
||||
case 'recaptcha-not-reachable':
|
||||
return($error.': it was not possible to access the reCAPTCHA server');
|
||||
default:
|
||||
return($error.': not yet supported reCAPTCHA error');
|
||||
}
|
||||
}
|
||||
return('');
|
||||
}
|
||||
|
||||
Function ValidateInput(&$form)
|
||||
{
|
||||
return($this->valid ? '' : $this->validation_error_message);
|
||||
}
|
||||
|
||||
Function AddInputPart(&$form)
|
||||
{
|
||||
if(strlen($error = $form->AddDataPart('<div id="'.HtmlSpecialChars($this->widget).'" style="display:none">'))
|
||||
|| ($error = parent::AddInputPart($form))
|
||||
|| ($error = $form->AddDataPart('</div><script type="text/javascript"><!--
|
||||
var RecaptchaOptions = {
|
||||
theme : "custom",
|
||||
custom_theme_widget: '.$form->EncodeJavaScriptString($this->widget).',
|
||||
custom_translations: {
|
||||
play_again: '.$form->EncodeJavaScriptString($this->text['play_again']).',
|
||||
cant_hear_this: '.$form->EncodeJavaScriptString($this->text['cant_hear_this']).',
|
||||
image_alt_text: '.$form->EncodeJavaScriptString($this->text['image_alt_text']).'
|
||||
}'.(strlen($this->tab_index) ? ',
|
||||
tabindex: '.$form->EncodeJavaScriptString($this->tab_index) : '').'
|
||||
};
|
||||
// --></script><script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k='.HtmlSpecialChars($this->key).'"></script><noscript><iframe src="http://www.google.com/recaptcha/api/noscript?k='.HtmlSpecialChars($this->key).'" height="300" width="500" frameborder="0"></iframe>'))
|
||||
|| strlen($error = $form->AddInputPart($this->challenge))
|
||||
|| strlen($error = $form->AddDataPart('<input type="hidden" name="'.HtmlSpecialChars($this->response).'" value="manual_challenge"></noscript>')))
|
||||
return($error);
|
||||
return('');
|
||||
}
|
||||
};
|
||||
|
||||
?>
|
Loading…
Add table
Add a link
Reference in a new issue