| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
G_Z 16.03.2011 03:27 / 16.03.2011 03:28
@CLASS
ReCAPTCHA
@auto[]
$self.hDefaultOptions[
$.theme['clean']
$.lang['ru']
]
$self.sChallengeURL[http://api.recaptcha.net/challenge]
$self.sNoscriptChallengeURL[http://api.recaptcha.net/noscript]
$self.sAJAXURL[http://api.recaptcha.net/js/recaptcha_ajax.js]
$self.sVerifyURL[http://api-verify.recaptcha.net/verify]
@create[hOptions]
^self.hDefaultOptions.add[^hash::create[$hOptions]]
@printHTML[sPublicKey;hOptions;sErrorCode][sError]
$sError[]
^if(def $sErrorCode){
$sError[&error=$sErrorCode]
}
$result[<script type="text/javascript">
var RecaptchaOptions = ^self._printOptions[$hOptions]
</script>
<script type="text/javascript" src="${self.sChallengeURL}?k=${sPublicKey}$sError"></script>
<noscript>
<iframe src="${self.sNoscriptChallengeURL}?k=${sPublicKey}$sError" height="300" width="500" frameborder="0"></iframe><br/>
<textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
<input type="hidden" name="recaptcha_response_field" value="manual_challenge"/>
</noscript>]
@printAJAX[sPublicKey;hOptions;sErrorCode][hDefaultOptions;sField;sValue]
$result[<div id="recaptcha_container"></div>
<script type="text/javascript" src="$self.sAJAXURL"></script>
<script type="text/javascript">
Recaptcha.create("$sPublicKey", "recaptcha_container", ^self._printOptions[$hOptions])^;
</script>]
@verify[sPrivateKey;hData][fResult;tResult]
$result[^hash::create[]]
$fResult[^file::load[text;$self.sVerifyURL][
$.method[POST]
$.form[
$.privatekey[$sPrivateKey]
$.remoteip[$env:REMOTE_ADDR]
$.challenge[$hData.recaptcha_challenge_field]
$.response[$hData.recaptcha_response_field]
]
$.headers[
$.[USER-AGENT][reCAPTCHA Parser3]
]
$.timeout(10)
]]
$tResult[^table::create[nameless]{^taint[as-is][$fResult.text]}]
$result.valid(^tResult.0.bool(false))
^tResult.offset(1)
$result.errorcode[$tResult.0]
@_printOptions[hOptions][hDefaultOptions;sField;sValue]
$hDefaultOptions[^hash::create[$self.hDefaultOptions]]
^hDefaultOptions.add[^hash::create[$hOptions]]
$result[{^hDefaultOptions.foreach[sField;sValue]{${sField}: $sValue}[, ]}]Звать так: ^ReCAPTCHA:printHTML[$sPublicKey]или, например, так:
^ReCAPTCHA:printAJAX[$sPublicKey][ $.callback[myCallbackFunction] ]Если вызывать динамически, то можно передать опции в констурктор и исключить их из вызова методов:
$oReCAPTCHA[^ReCAPTCHA::create[ $.lang['en'] ]] … ^oReCAPTCHA.printHTML[$sPublicKey]Проверка:
# хэш-результат с двумя ключами: флаг «valid» и описание ошибки «errorcode»
$hCAPTCHA[^ReCAPTCHA:verify[$sSecretKey;$form:fields]]
^if($hCAPTCHA.valid){
OK
}{
something wrong, ^ReCAPTCHA:printHTML[$sPublicKey;;$hCAPTCHA.errorcode]
}