<validationpattern>^[^/]*$</validationpattern>
<showorder>2</showorder>
</option>
+ <option name="recaptcha_publickey_invisible">
+ <categoryname>security.antispam.recaptcha</categoryname>
+ <optiontype>text</optiontype>
+ <validationpattern>^[^/]*$</validationpattern>
+ <showorder>3</showorder>
+ </option>
+ <option name="recaptcha_privatekey_invisible">
+ <categoryname>security.antispam.recaptcha</categoryname>
+ <optiontype>text</optiontype>
+ <validationpattern>^[^/]*$</validationpattern>
+ <showorder>4</showorder>
+ </option>
<!-- /security.antispam.recaptcha -->
<!-- general.system.date -->
</dl>
</section>
{else}
- {if $supportsAsyncCaptcha|isset && $supportsAsyncCaptcha}
+ {if $supportsAsyncCaptcha|isset && $supportsAsyncCaptcha && RECAPTCHA_PUBLICKEY_INVISIBLE && RECAPTCHA_PRIVATEKEY_INVISIBLE}
<section class="section">
<h2 class="sectionTitle">{lang}wcf.recaptcha.title{/lang}</h2>
{assign var="recaptchaBucketID" value=true|microtime|sha1}
<div style="width: 302px; height: 473px;">
<div style="width: 302px; height: 422px; position: relative;">
<div style="width: 302px; height: 422px; position: relative;">
- <iframe src="https://www.google.com/recaptcha/api/fallback?k={RECAPTCHA_PUBLICKEY|encodeJS}" frameborder="0" scrolling="no" style="width: 302px; height:422px; border-style: none;"></iframe>
+ <iframe src="https://www.google.com/recaptcha/api/fallback?k={RECAPTCHA_PUBLICKEY_INVISIBLE|encodeJS}" frameborder="0" scrolling="no" style="width: 302px; height:422px; border-style: none;"></iframe>
</div>
<div style="width: 300px; height: 60px; position: relative; border-style: none; bottom: 12px; left: 0; margin: 0px; padding: 0px; right: 25px; background: #f9f9f9; border: 1px solid #c1c1c1; border-radius: 3px;">
<textarea name="g-recaptcha-response" class="g-recaptcha-response" style="width: 290px; height: 50px; border: 1px solid #c1c1c1; margin: 5px; padding: 0px; resize: none;"></textarea>
var promise = new Promise(function (resolve, reject) {
WCF.recaptcha.mapping['recaptchaBucket{$recaptchaBucketID}'] = grecaptcha.render(bucket, {
- sitekey: '{RECAPTCHA_PUBLICKEY|encodeJS}',
+ sitekey: '{RECAPTCHA_PUBLICKEY_INVISIBLE|encodeJS}',
size: 'invisible',
badge: 'inline',
callback: resolve
</dl>
</section>
{else}
- {if $supportsAsyncCaptcha|isset && $supportsAsyncCaptcha}
+ {if $supportsAsyncCaptcha|isset && $supportsAsyncCaptcha && RECAPTCHA_PUBLICKEY_INVISIBLE && RECAPTCHA_PRIVATEKEY_INVISIBLE}
<section class="section">
<h2 class="sectionTitle">{lang}wcf.recaptcha.title{/lang}</h2>
{assign var="recaptchaBucketID" value=true|microtime|sha1}
<div style="width: 302px; height: 473px;">
<div style="width: 302px; height: 422px; position: relative;">
<div style="width: 302px; height: 422px; position: relative;">
- <iframe src="https://www.google.com/recaptcha/api/fallback?k={RECAPTCHA_PUBLICKEY|encodeJS}" frameborder="0" scrolling="no" style="width: 302px; height:422px; border-style: none;"></iframe>
+ <iframe src="https://www.google.com/recaptcha/api/fallback?k={RECAPTCHA_PUBLICKEY_INVISIBLE|encodeJS}" frameborder="0" scrolling="no" style="width: 302px; height:422px; border-style: none;"></iframe>
</div>
<div style="width: 300px; height: 60px; position: relative; border-style: none; bottom: 12px; left: 0; margin: 0px; padding: 0px; right: 25px; background: #f9f9f9; border: 1px solid #c1c1c1; border-radius: 3px;">
<textarea name="g-recaptcha-response" class="g-recaptcha-response" style="width: 290px; height: 50px; border: 1px solid #c1c1c1; margin: 5px; padding: 0px; resize: none;"></textarea>
var promise = new Promise(function (resolve, reject) {
WCF.recaptcha.mapping['recaptchaBucket{$recaptchaBucketID}'] = grecaptcha.render(bucket, {
- sitekey: '{RECAPTCHA_PUBLICKEY|encodeJS}',
+ sitekey: '{RECAPTCHA_PUBLICKEY_INVISIBLE|encodeJS}',
size: 'invisible',
badge: 'inline',
callback: resolve
$key = RECAPTCHA_PRIVATEKEY;
}
else if ($type === 'invisible') {
- $key = RECAPTCHA_PRIVATEKEY;
+ $key = RECAPTCHA_PRIVATEKEY_INVISIBLE;
}
else {
throw new \InvalidArgumentException('$type must be either v2 or invisible.');
<item name="wcf.acp.option.enable_woltlab_news"><![CDATA[WoltLab-Nachrichten anzeigen]]></item>
<item name="wcf.acp.option.enable_woltlab_news.description"><![CDATA[Aktiviert die Anzeige aktueller WoltLab-Nachrichten auf der Startseite der Administrationsoberfläche.]]></item>
<item name="wcf.acp.option.category.security.antispam.recaptcha"><![CDATA[reCAPTCHA]]></item>
- <item name="wcf.acp.option.recaptcha_publickey"><![CDATA[Websiteschlüssel]]></item>
+ <item name="wcf.acp.option.recaptcha_publickey"><![CDATA[Websiteschlüssel (reCAPTCHA, Version 2)]]></item>
<item name="wcf.acp.option.recaptcha_publickey.description"><![CDATA[Einen eigenen Websiteschlüssel für die Nutzung der reCAPTCHA-Funktion {if LANGUAGE_USE_INFORMAL_VARIANT}kannst du{else}können Sie{/if} auf der Website von <a href="https://www.google.com/recaptcha/admin" class="externalURL">reCAPTCHA</a> beantragen.]]></item>
- <item name="wcf.acp.option.recaptcha_privatekey"><![CDATA[Geheimer Schlüssel]]></item>
+ <item name="wcf.acp.option.recaptcha_privatekey"><![CDATA[Geheimer Schlüssel (reCAPTCHA, Version 2)]]></item>
+ <item name="wcf.acp.option.recaptcha_publickey_invisible"><![CDATA[Websiteschlüssel (Unsichtbares reCAPTCHA)]]></item>
+ <item name="wcf.acp.option.recaptcha_publickey_invisible.description"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Trage{else}Tragen Sie{/if} hier <b>zusätzlich</b> zu den obigen Schlüsseln Schlüssel für das unsichtbare reCAPTCHA ein, wenn {if LANGUAGE_USE_INFORMAL_VARIANT}du{else}Sie{/if}diese Variante nutzen {if LANGUAGE_USE_INFORMAL_VARIANT}möchtest{else}möchten{/if}.]]></item>
+ <item name="wcf.acp.option.recaptcha_privatekey_invisible"><![CDATA[Geheimer Schlüssel (Unsichtbares reCAPTCHA)]]></item>
<item name="wcf.acp.option.category.message.attachment"><![CDATA[Dateianhänge]]></item>
<item name="wcf.acp.option.attachment_enable_thumbnails"><![CDATA[Vorschaugrafiken von hochgeladenen Bilder erzeugen]]></item>
<item name="wcf.acp.option.attachment_retain_dimensions"><![CDATA[Bildformat beim Erzeugen von Vorschaugrafiken beibehalten]]></item>
<item name="wcf.acp.option.enable_woltlab_news"><![CDATA[Display WoltLab news]]></item>
<item name="wcf.acp.option.enable_woltlab_news.description"><![CDATA[Displays the current WoltLab News on the Administration Control Panel’s index page.]]></item>
<item name="wcf.acp.option.category.security.antispam.recaptcha"><![CDATA[reCAPTCHA]]></item>
- <item name="wcf.acp.option.recaptcha_publickey"><![CDATA[Public API Key]]></item>
+ <item name="wcf.acp.option.recaptcha_publickey"><![CDATA[Public API Key (reCAPTCHA v2)]]></item>
<item name="wcf.acp.option.recaptcha_publickey.description"><![CDATA[You can request your own API-Key for using reCAPTCHA on the <a href="https://www.google.com/recaptcha/admin" class="externalURL">reCAPTCHA website</a>.]]></item>
- <item name="wcf.acp.option.recaptcha_privatekey"><![CDATA[Private API Key]]></item>
+ <item name="wcf.acp.option.recaptcha_privatekey"><![CDATA[Private API Key (reCAPTCHA v2)]]></item>
+ <item name="wcf.acp.option.recaptcha_publickey_invisible"><![CDATA[Public API Key (Invisible reCAPTCHA)]]></item>
+ <item name="wcf.acp.option.recaptcha_publickey_invisible.description"><![CDATA[Enter the keys <b>in addition</b> to the keys above if you want to use the invisible variant of reCAPTCHA.]]></item>
+ <item name="wcf.acp.option.recaptcha_privatekey_invisible"><![CDATA[Private API Key (Invisible reCAPTCHA)]]></item>
<item name="wcf.acp.option.category.message.attachment"><![CDATA[Attachments]]></item>
<item name="wcf.acp.option.attachment_enable_thumbnails"><![CDATA[Create thumbnails for attachment images]]></item>
<item name="wcf.acp.option.attachment_retain_dimensions"><![CDATA[Retain thumbnail dimensions]]></item>