mirror of
https://github.com/Pathduck/gallery3.git
synced 2026-08-05 14:40:44 -04:00
Added the ability to identify and present the defined forms to the
adminstrator. The forms are presented as a checklist, I would have preferred a selection list, but Forge doesn't have one. The generated html to contain the recaptcha challenge is defined as <ul> as that was the only way to force itto line up.
This commit is contained in:
@@ -37,11 +37,17 @@ class Admin_Recaptcha_Controller extends Admin_Controller {
|
||||
$new_public_key = $form->configure_recaptcha->public_key->value;
|
||||
$new_private_key = $form->configure_recaptcha->private_key->value;
|
||||
|
||||
$updated = false;
|
||||
if ($this->_update_key("public_key", $old_public_key, $new_public_key) ||
|
||||
$this->_update_key("private_key", $old_private_key, $new_private_key)) {
|
||||
message::success(t("Recaptcha Configured"));
|
||||
$this->_update_key("public_key", $old_public_key, $new_public_key);
|
||||
$this->_update_key("private_key", $old_private_key, $new_private_key);
|
||||
|
||||
$add_recaptcha_to = array();
|
||||
foreach ($form->configure_recaptcha->activated_forms->value as $name) {
|
||||
$add_recaptcha_to[$name] = 1;
|
||||
}
|
||||
module::set_var("recaptcha", "form_list", serialize($add_recaptcha_to));
|
||||
log::success(t("Recaptcha active forms have changed."));
|
||||
|
||||
message::success(t("Recaptcha Configured"));
|
||||
recaptcha::check_config();
|
||||
}
|
||||
} else {
|
||||
@@ -68,9 +74,8 @@ class Admin_Recaptcha_Controller extends Admin_Controller {
|
||||
$changed = false;
|
||||
}
|
||||
if ($changed) {
|
||||
module::set_var("recaptcha", $key, $new_key);
|
||||
module::set_var("recaptcha", $type, $new_key);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function gethtml($public_key, $error=null) {
|
||||
|
||||
@@ -31,7 +31,7 @@ class recaptcha_Core {
|
||||
private $options = array();
|
||||
|
||||
static function get_configure_form() {
|
||||
$form = new Forge("admin/recaptcha", "", "post", array("id" => "gConfigure_Recaptcha_Form"));
|
||||
$form = new Forge("admin/recaptcha", "", "post", array("id" => "gConfigureRecaptchaForm"));
|
||||
$group = $form->group("configure_recaptcha")
|
||||
->label(t("Configure Recaptcha"));
|
||||
$group->hidden("orig_public_key")
|
||||
@@ -46,6 +46,11 @@ class recaptcha_Core {
|
||||
->value(module::get_var("recaptcha", "private_key"))
|
||||
->rules("required|length[40]");
|
||||
$group->private_key->error_messages("invalid", t("The private key you provided is invalid."));
|
||||
|
||||
$forms_list = self::_get_form_list();
|
||||
$group->checklist("activated_forms")
|
||||
->label(t("Recaptcha Activated on:"))
|
||||
->options($forms_list);
|
||||
$group->submit("")->value(t("Save"));
|
||||
$site_domain = urlencode(stripslashes($_SERVER["HTTP_HOST"]));
|
||||
$form->recaptcha_site = self::API_SERVER;
|
||||
@@ -106,7 +111,6 @@ class recaptcha_Core {
|
||||
if (empty($private_key)) {
|
||||
$private_key = module::get_var("recaptcha", "private_key");
|
||||
}
|
||||
Kohana::log("debug", $private_key);
|
||||
$remoteip = $_SERVER["REMOTE_ADDR"] ;
|
||||
$challenge = $input->post("recaptcha_challenge_field", "", true);
|
||||
$response = $input->post("recaptcha_response_field", "", true);
|
||||
@@ -174,4 +178,32 @@ class recaptcha_Core {
|
||||
$response = explode("\r\n\r\n", $response, 2);
|
||||
return $response;
|
||||
}
|
||||
|
||||
function _get_form_list() {
|
||||
$forms = unserialize(module::get_var("recaptcha", "form_list", "a:0:{}"));
|
||||
Kohana::log("debug", print_r($forms, 1));
|
||||
$form_list = array();
|
||||
|
||||
// @todo Ignore administrative forms
|
||||
foreach (array_merge(glob(APPPATH . "helpers/*"), glob(MODPATH . "*/helpers/*")) as $path) {
|
||||
if (preg_match("#.*/(.*)/helpers/(.*).*\.php$#", $path, $matches)) {
|
||||
Kohana::log("debug", "$path => $matches[1]");
|
||||
if ("recaptcha" == $matches[1]) {
|
||||
continue;
|
||||
}
|
||||
$content = file_get_contents($path);
|
||||
|
||||
$preg_match_all = preg_match_all("#.*\"(g([A-Za-z]*)Form)\"#m",
|
||||
$content, $matches, PREG_SET_ORDER);
|
||||
if ($preg_match_all !== false) {
|
||||
foreach ($matches as $match) {
|
||||
$label = trim(preg_replace("/([A-Z])/", " $1", $match[2]));
|
||||
$form_id = $match[1];
|
||||
$form_list[$form_id] = array($label, !empty($forms[$form_id]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $form_list;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
<script type="text/javascript" src="http://api.recaptcha.net/js/recaptcha_ajax.js"></script>
|
||||
<script>
|
||||
var site = (document.location.protocol == "http:") ? "<?= $form->recaptcha_site ?>" : "<?= $form->recaptcha_ssl_site ?>";
|
||||
var RecaptchaOptions = {lang: 'en'};
|
||||
var RecaptchaOptions = {lang: 'en', theme: "white"};
|
||||
|
||||
$("#gAdminRecaptcha form").ready(function() {
|
||||
$("#gAdminRecaptcha form ul li:last-child").before("<li id=recaptcha_div />");
|
||||
$("#gConfigureRecaptchaForm").ready(function() {
|
||||
$("#gConfigureRecaptchaForm :submit").before("<ul><li id=recaptcha_div /></ul>");
|
||||
$("#public_key").change(function() {
|
||||
showRecaptcha($(this).val());
|
||||
});
|
||||
@@ -22,15 +22,15 @@ function showRecaptcha(public_key) {
|
||||
dataType: "json",
|
||||
cache: false,
|
||||
error: function(request, textStatus, errorThrown) {
|
||||
var public_key = $("#gAdminRecaptcha form ul li:first-child");
|
||||
var public_key = $("#gConfigureRecaptchaForm ul li:first-child");
|
||||
public_key.addClass("gError");
|
||||
$("#gAdminRecaptcha form ul li:first-child p").replaceWith("");
|
||||
$("#gConfigureRecaptchaForm ul li:first-child p").replaceWith("");
|
||||
public_key.append('<p class="gError">' + request.responseText + "</p>");
|
||||
},
|
||||
success: function(data, textStatus) {
|
||||
var public_key = $("#gAdminRecaptcha form ul li:first-child");
|
||||
var public_key = $("#gConfigureRecaptchaForm ul li:first-child");
|
||||
public_key.removeClass("gError");
|
||||
$("#gAdminRecaptcha form ul li:first-child p").replaceWith("");
|
||||
$("#gConfigureRecaptchaForm ul li:first-child p").replaceWith("");
|
||||
$("#recaptcha_div").html("<script type='text/javascript'>" + data.script + "</script" + ">");
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user