[04/03/2023] Ajout du module ReCaptcha et config
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
<div class="row">
|
||||
<div class="col-md-12 general-block-decorator">
|
||||
<div class="row">
|
||||
<div class="col-md-12 title title-without-tabs">
|
||||
{intl d='payzen.bo.default' l="reCAPTCHA Configuration" d='recaptcha.bo.default'}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{form name="recaptcha_configuration.form"}
|
||||
<form action="{url path="/admin/module/recaptcha/configuration"}" method="post">
|
||||
{form_hidden_fields form=$form}
|
||||
|
||||
{if $form_error}
|
||||
<div class="alert alert-danger">{$form_error_message}</div>
|
||||
{/if}
|
||||
|
||||
{include file = "includes/inner-form-toolbar.html"
|
||||
hide_flags = true
|
||||
page_url = "{url path='/admin/module/ReCaptcha'}"
|
||||
close_url = "{url path='/admin/modules'}"
|
||||
}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{render_form_field field="site_key" }
|
||||
{render_form_field field="secret_key"}
|
||||
<p>{intl l="These infos are available here : " d='recaptcha.bo.default'}<a href="http://www.google.com/recaptcha/admin">http://www.google.com/recaptcha/admin</a></p>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{render_form_field field="captcha_style"}
|
||||
|
||||
{if $with_contact_form}
|
||||
<label></label>
|
||||
{render_form_field field="add_to_contact_form"}
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{/form}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,56 @@
|
||||
|
||||
<script src="https://www.google.com/recaptcha/api.js?render={$siteKey}"></script>
|
||||
|
||||
<script>var siteKey = "{$siteKey}";</script>
|
||||
|
||||
{literal}
|
||||
<script type="module">
|
||||
function verifyRecaptcha(form, dataElement) {
|
||||
const { sitekey, size } = dataElement.dataset;
|
||||
const id = dataElement.id;
|
||||
|
||||
if (!sitekey) return;
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
grecaptcha.execute(sitekey, {action: 'submit'}).then((token) => {
|
||||
if (token) {
|
||||
resolve(token);
|
||||
}
|
||||
|
||||
reject('Invalid Captcha');
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
const allForm = document.querySelectorAll('form');
|
||||
|
||||
allForm.forEach((form) => {
|
||||
const dataElement = form.querySelector('.g-recaptcha');
|
||||
|
||||
if (!dataElement) return;
|
||||
|
||||
form.addEventListener("submit", async (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
grecaptcha.ready(() =>
|
||||
{
|
||||
const response = verifyRecaptcha(form, dataElement)
|
||||
|
||||
response.then((token) => {
|
||||
const customEvent = new CustomEvent('validRecaptcha', {
|
||||
detail: {
|
||||
token,
|
||||
form,
|
||||
}
|
||||
})
|
||||
|
||||
form.dispatchEvent(customEvent);
|
||||
})
|
||||
.catch((error) => console.log(error))
|
||||
}
|
||||
);
|
||||
})
|
||||
})
|
||||
</script>
|
||||
{/literal}
|
||||
@@ -0,0 +1,23 @@
|
||||
<script src="https://www.google.com/recaptcha/api.js?hl={lang attr='code'}" async defer></script>
|
||||
<script>
|
||||
window.onload = function() {
|
||||
var captchaDiv = document.querySelector(".g-recaptcha.g-invisible");
|
||||
|
||||
if (captchaDiv !== null) {
|
||||
var form = captchaDiv.parentElement;
|
||||
|
||||
form.addEventListener("submit", function (event) {
|
||||
if (!grecaptcha.getResponse()) {
|
||||
event.preventDefault(); //prevent form submit
|
||||
grecaptcha.execute();
|
||||
}
|
||||
});
|
||||
|
||||
onCompleted = function () {
|
||||
if (form.reportValidity() !== false) {
|
||||
form.submit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user