Bonjour,
Depuis un bon moment je cherche à intégrer ReCaptcha au formulaire de contact sur mon site en utilisant certains plugins disponible sur le site de cake. Malheureusement, ils sont tous à ce jour pour des versions antérieurs à Cake 2.x. J'ai essayé de leur apporter quelques modifications pour qu'ils soient compatibles avec la version 2 mais en vain.
Exemple : http://bakery.cakephp.org/articles/tbsmcd/2011/02/05/recaptcha\_plugin\_6
Alors merci à tous ceux qui m'aideront à l'intégrer à cake.
Voici ma version modifiée : http://www.mediafire.com/?0d10g6e6c14kj71
Pourquoi ne pas développer le truc à partir de l'API originale de reCaptcha plutot que de chercher un plugin ?
C'est de ça qu'il s'agit. je vais poster le component, le behavior et le helper ici et dites-moi si dans le code y a quelque chose qui colle pas avec la version 2.
Component
<?php
class RecaptchaComponent extends Component {
function startup(&$controller) {
$modelClass = $controller->modelClass;
if (!empty($controller->params'form']'recaptcha_challenge_field']) && !empty($controller->params'form']'recaptcha_response_field'])) {
$controller->data$modelClass]'recaptcha_challenge_field'] = $controller->params'form']'recaptcha_challenge_field'];
$controller->data$modelClass]'recaptcha_response_field'] = $controller->params'form']'recaptcha_response_field'];
}
$controller->$modelClass->Behaviors->attach('RecaptchaPlugin.Validation');
}
}
Behavior
<?php
class ValidationBehavior extends ModelBehavior {
function beforeValidate(&$model) {
$model->validate'recaptcha_response_field'] = array(
'checkRecaptcha' => array(
'rule' => array('checkRecaptcha', 'recaptcha_challenge_field'),
'message' => 'Vous n\'avez pas correctement entré les deux mots.',
),
);
}
function checkRecaptcha(&$model, $data, $target) {
App::import('Vendor', 'RecaptchaPlugin.recaptchalib');
Configure::load('RecaptchaPlugin.key');
$privatekey = Configure::read('Recaptcha.Private');
$resp = recaptcha_check_answer( $privatekey, $_SERVER'REMOTE_ADDR'], $model->data$model->alias]$target], $data'recaptcha_response_field']
);
return $resp->is_valid;
}
}
Helper
<?php
class RecaptchaHelper extends Helper {
public $helpers = array('Form');
function show($theme = null) {
if (empty($theme) || !in_array($theme, array('red', 'white', 'blackglass', 'clean'))) {
$theme = 'red';
}
App::import('Vendor', 'RecaptchaPlugin.recaptchalib');
Configure::load('RecaptchaPlugin.key');
$publickey = Configure::read('Recaptcha.Public');
$lang = 'fr';
$html = '<script type="text/javascript">
var RecaptchaOptions = {
custom_translations : {
instructions_visual : "Tapez les deux mots:",
instructions_audio : "Ecrivez:",
play_again : "Rejouer la piste audio",
cant_hear_this : "Télécharger la piste au format MP3",
visual_challenge : "Mode visuel",
audio_challenge : "Mode audio",
refresh_btn : "Obtenez deux nouveaux mots",
help_btn : "Aide",
incorrect_try_again : "Incorrecte. S\'il vous plaît essayez de nouveau.",
},
lang : "fr",
theme : "white"
};
</script>';
if (isset($recaptcha_error)) {
$html .= $recaptcha_error . '<br/>';
}
return $html .= recaptcha_get_html($publickey);
}
function error() {
return $this->Form->error('recaptcha_response_field');
}
}
Bonjour,
@Vaillant as-tu pu finalement faire fonctionner le plugin ?
Je cherche moi aussi à l'utiliser. Merci d'avance,