mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/ConfirmEdit
synced 2024-11-14 11:16:50 +00:00
31c59374a4
Also update MathCaptcha so that it works with recent versions of Math (and breaks with old ones). Also fix MathCaptcha API output, which used to send the question in plaintext. Bug: T110302 Change-Id: I0da671a546700110d789b79a3089460abd9cce3b Depends-On: I8b52ec8ddf494f23941807638f149f15b5e46b0c
100 lines
3.1 KiB
PHP
100 lines
3.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Captcha input field for FancyCaptcha that displays a question and returns the answer.
|
|
* Does not include the captcha ID; that must be included in the form as a separate hidden field.
|
|
*/
|
|
class HTMLFancyCaptchaField extends HTMLFormField {
|
|
/** @var string */
|
|
protected $imageUrl;
|
|
|
|
/** @var bool */
|
|
protected $showCreateHelp;
|
|
|
|
protected $mClass = 'captcha';
|
|
|
|
/**
|
|
* Apart from normal HTMLFormField parameters, recognizes the following keys:
|
|
* - 'imageUrl': (string, required) src of the captcha image
|
|
* - 'showCreateHelp': (bool) show some extra messaging that's only relevant at account creation
|
|
* @param array $params
|
|
*/
|
|
public function __construct( array $params ) {
|
|
parent::__construct( $params );
|
|
$this->imageUrl = $params['imageUrl'];
|
|
$this->showCreateHelp = !empty( $params['showCreateHelp'] );
|
|
}
|
|
|
|
public function getInputHTML( $value ) {
|
|
global $wgEnableAPI;
|
|
|
|
$out = $this->mParent->getOutput();
|
|
|
|
// Uses addModuleStyles so it is loaded when JS is disabled.
|
|
$out->addModuleStyles( 'ext.confirmEdit.fancyCaptcha.styles' );
|
|
|
|
if ( $wgEnableAPI ) {
|
|
// Loaded only if JS is enabled
|
|
$out->addModules( 'ext.confirmEdit.fancyCaptcha' );
|
|
|
|
$captchaReload = Html::element(
|
|
'small',
|
|
[ 'class' => 'confirmedit-captcha-reload fancycaptcha-reload' ],
|
|
wfMessage( 'fancycaptcha-reload-text' )->text()
|
|
);
|
|
} else {
|
|
$captchaReload = '';
|
|
}
|
|
|
|
$attribs = [
|
|
'type' => 'text',
|
|
'id' => $this->mID,
|
|
'name' => $this->mName,
|
|
'class' => 'mw-ui-input',
|
|
'size' => '12', // max_length in captcha.py plus fudge factor
|
|
'dir' => $this->mDir,
|
|
'autocomplete' => 'off',
|
|
'autocorrect' => 'off',
|
|
'autocapitalize' => 'off',
|
|
'placeholder' => wfMessage( 'fancycaptcha-imgcaptcha-ph' )
|
|
];
|
|
$attribs += $this->getAttributes( [ 'tabindex', 'required', 'autofocus' ] );
|
|
|
|
$html = Html::openElement( 'div', [ 'class' => 'fancycaptcha-captcha-container' ] )
|
|
. Html::openElement( 'div', [ 'class' => 'fancycaptcha-captcha-and-reload' ] )
|
|
. Html::openElement( 'div', [ 'class' => 'fancycaptcha-image-container' ] )
|
|
. Html::element( 'img', [
|
|
'class' => 'fancycaptcha-image',
|
|
'src' => $this->imageUrl,
|
|
'alt' => ''
|
|
] ) . $captchaReload . Html::closeElement( 'div' ) . Html::closeElement( 'div' ) . "\n"
|
|
. Html::element( 'input', $attribs );
|
|
|
|
if ( $this->showCreateHelp ) {
|
|
// use raw element, the message will contain a link
|
|
$html .= Html::rawElement( 'small', [
|
|
'class' => 'mw-createacct-captcha-assisted'
|
|
], wfMessage( 'createacct-imgcaptcha-help' )->parse() );
|
|
}
|
|
|
|
$html .= Html::closeElement( 'div' );
|
|
|
|
return $html;
|
|
}
|
|
|
|
public function getLabel() {
|
|
// slight abuse of what getLabel() should mean; $mLabel is used for the pre-label text
|
|
// as the actual label is always the same
|
|
return wfMessage( 'captcha-label' )->text() . ' ' . wfMessage( 'fancycaptcha-captcha' )->text();
|
|
}
|
|
|
|
public function getLabelHtml( $cellAttributes = [] ) {
|
|
$labelHtml = parent::getLabelHtml( $cellAttributes );
|
|
if ( $this->mLabel ) {
|
|
// use raw element, the message will contain a link
|
|
$labelHtml = Html::rawElement( 'p', [], $this->mLabel ) . $labelHtml;
|
|
}
|
|
return $labelHtml;
|
|
}
|
|
}
|