summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/HTMLReCaptchaNoCaptchaField.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/HTMLReCaptchaNoCaptchaField.php')
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/HTMLReCaptchaNoCaptchaField.php74
1 files changed, 74 insertions, 0 deletions
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/HTMLReCaptchaNoCaptchaField.php b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/HTMLReCaptchaNoCaptchaField.php
new file mode 100644
index 00000000..e1a39a60
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/HTMLReCaptchaNoCaptchaField.php
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * Creates a ReCaptcha v2 widget. Does not return any data; handling the data submitted by the
+ * widget is callers' responsibility.
+ */
+class HTMLReCaptchaNoCaptchaField extends HTMLFormField {
+ /** @var string Public key parameter to be passed to ReCaptcha. */
+ protected $key;
+
+ /** @var string Error returned by ReCaptcha in the previous round. */
+ protected $error;
+
+ /**
+ * Parameters:
+ * - key: (string, required) ReCaptcha public key
+ * - error: (string) ReCaptcha error from previous round
+ * @param array $params
+ */
+ public function __construct( array $params ) {
+ $params += [ 'error' => null ];
+ parent::__construct( $params );
+
+ $this->key = $params['key'];
+ $this->error = $params['error'];
+
+ $this->mName = 'g-recaptcha-response';
+ }
+
+ public function getInputHTML( $value ) {
+ $out = $this->mParent->getOutput();
+ $lang = htmlspecialchars( urlencode( $this->mParent->getLanguage()->getCode() ) );
+
+ // Insert reCAPTCHA script, in display language, if available.
+ // Language falls back to the browser's display language.
+ // See https://developers.google.com/recaptcha/docs/faq
+ $out->addHeadItem(
+ 'g-recaptchascript',
+ "<script src=\"https://www.google.com/recaptcha/api.js?hl={$lang}\" async defer></script>"
+ );
+ $output = Html::element( 'div', [
+ 'class' => [
+ 'g-recaptcha',
+ 'mw-confirmedit-captcha-fail' => !!$this->error,
+ ],
+ 'data-sitekey' => $this->key,
+ ] );
+ $htmlUrlencoded = htmlspecialchars( urlencode( $this->key ) );
+ $output .= <<<HTML
+<noscript>
+ <div>
+ <div style="width: 302px; height: 422px; position: relative;">
+ <div style="width: 302px; height: 422px; position: absolute;">
+ <iframe src="https://www.google.com/recaptcha/api/fallback?k={$htmlUrlencoded}&hl={$lang}"
+ frameborder="0" scrolling="no"
+ style="width: 302px; height:422px; border-style: none;">
+ </iframe>
+ </div>
+ </div>
+ <div style="width: 300px; height: 60px; border-style: none;
+ bottom: 12px; left: 25px; margin: 0px; padding: 0px; right: 25px;
+ background: #f9f9f9; border: 1px solid #c1c1c1; border-radius: 3px;">
+ <textarea id="g-recaptcha-response" name="g-recaptcha-response"
+ class="g-recaptcha-response"
+ style="width: 250px; height: 40px; border: 1px solid #c1c1c1;
+ margin: 10px 25px; padding: 0px; resize: none;" >
+ </textarea>
+ </div>
+ </div>
+</noscript>
+HTML;
+ return $output;
+ }
+}