protected $mSubmitText;
protected $mSubmitTooltip;
- protected $mContext; // <! RequestContext
+ protected $mContext; // <! IContextSource
protected $mTitle;
protected $mMethod = 'post';
/**
* Build a new HTMLForm from an array of field attributes
* @param $descriptor Array of Field constructs, as described above
- * @param $context RequestContext available since 1.18, will become compulsory in 1.19.
+ * @param $context IContextSource available since 1.18, will become compulsory in 1.18.
* Obviates the need to call $form->setTitle()
* @param $messagePrefix String a prefix to go in front of default messages
*/
- public function __construct( $descriptor, /*RequestContext*/ $context = null, $messagePrefix = '' ) {
- if( $context instanceof RequestContext ){
+ public function __construct( $descriptor, /*IContextSource*/ $context = null, $messagePrefix = '' ) {
+ if( $context instanceof IContextSource ){
$this->mContext = $context;
$this->mTitle = false; // We don't need them to set a title
$this->mMessagePrefix = $messagePrefix;
/**
* Initialise a new Object for the field
- * @param $descriptor input Descriptor, as described above
+ * @param $fieldname string
+ * @param $descriptor string input Descriptor, as described above
* @return HTMLFormField subclass
*/
static function loadInputFromParameters( $fieldname, $descriptor ) {
/**
* Add header text, inside the form.
* @param $msg String complete text of message to display
+ * @param $section The section to add the header to
*/
function addHeaderText( $msg, $section = null ) {
if ( is_null( $section ) ) {
/**
* Add footer text, inside the form.
* @param $msg String complete text of message to display
+ * @param $section string The section to add the footer text to
*/
function addFooterText( $msg, $section = null ) {
if ( is_null( $section ) ) {
* @return String HTML.
*/
function getHiddenFields() {
+ global $wgUsePathInfo;
+
$html = '';
if( $this->getMethod() == 'post' ){
$html .= Html::hidden( 'wpEditToken', $this->getUser()->editToken(), array( 'id' => 'wpEditToken' ) ) . "\n";
$html .= Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . "\n";
}
+ if ( !$wgUsePathInfo && $this->getMethod() == 'get' ) {
+ $html .= Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . "\n";
+ }
+
foreach ( $this->mHiddenFields as $data ) {
list( $value, $attribs ) = $data;
$html .= Html::hidden( $attribs['name'], $value, $attribs ) . "\n";
}
if ( isset( $this->mSubmitTooltip ) ) {
- $attribs += Linker::tooltipAndAccessKeyAttribs( $this->mSubmitTooltip );
+ $attribs += Linker::tooltipAndAccesskeyAttribs( $this->mSubmitTooltip );
}
$attribs['class'] = 'mw-htmlform-submit';
*/
function getTitle() {
return $this->mTitle === false
- ? $this->getContext()->title
+ ? $this->getContext()->getTitle()
: $this->mTitle;
}
/**
- * @return RequestContext
+ * @return IContextSource
*/
public function getContext(){
- return $this->mContext instanceof RequestContext
+ return $this->mContext instanceof IContextSource
? $this->mContext
: RequestContext::getMain();
}
* @return OutputPage
*/
public function getOutput(){
- return $this->getContext()->output;
+ return $this->getContext()->getOutput();
}
/**
* @return WebRequest
*/
public function getRequest(){
- return $this->getContext()->request;
+ return $this->getContext()->getRequest();
}
/**
* @return User
*/
public function getUser(){
- return $this->getContext()->user;
+ return $this->getContext()->getUser();
}
/**
/**
* TODO: Document
- * @param $fields
+ * @param $fields array of fields (either arrays or objects)
+ * @param $sectionName string ID attribute of the <table> tag for this section, ignored if empty
+ * @param $fieldsetIDPrefix string ID prefix for the <fieldset> tag of each subsection, ignored if empty
*/
- function displaySection( $fields, $sectionName = '' ) {
+ function displaySection( $fields, $sectionName = '', $fieldsetIDPrefix = '' ) {
$tableHtml = '';
$subsectionHtml = '';
$hasLeftColumn = false;
: $value->getDefault();
$tableHtml .= $value->getTableRow( $v );
- if ( $value->getLabel() != ' ' )
+ if ( $value->getLabel() != ' ' ) {
$hasLeftColumn = true;
+ }
} elseif ( is_array( $value ) ) {
$section = $this->displaySection( $value, $key );
$legend = $this->getLegend( $key );
if ( isset( $this->mSectionFooters[$key] ) ) {
$section .= $this->mSectionFooters[$key];
}
- $subsectionHtml .= Xml::fieldset( $legend, $section ) . "\n";
+ $attributes = array();
+ if ( $fieldsetIDPrefix ) {
+ $attributes['id'] = Sanitizer::escapeId( "$fieldsetIDPrefix$key" );
+ }
+ $subsectionHtml .= Xml::fieldset( $legend, $section, $attributes ) . "\n";
}
}
if ( empty( $this->mParams['tooltip'] ) ) {
return array();
}
- return Linker::tooltipAndAccessKeyAttribs( $this->mParams['tooltip'] );
+ return Linker::tooltipAndAccesskeyAttribs( $this->mParams['tooltip'] );
}
/**
function __construct( $params ) {
if ( !in_array( 'other', $params['options'], true ) ) {
- $params['options'][wfMsg( 'htmlform-selectorother-other' )] = 'other';
+ $msg = isset( $params['other'] ) ? $params['other'] : wfMsg( 'htmlform-selectorother-other' );
+ $params['options'][$msg] = 'other';
}
parent::__construct( $params );
function __construct( $params ) {
if ( array_key_exists( 'other', $params ) ) {
} elseif( array_key_exists( 'other-message', $params ) ){
- $params['other'] = wfMsg( $params['other-message'] );
+ $params['other'] = wfMessage( $params['other-message'] )->escaped();
} else {
- $params['other'] = wfMsg( 'htmlform-selectorother-other' );
+ $params['other'] = null;
}
if ( array_key_exists( 'options', $params ) ) {
# Options array already specified
} elseif( array_key_exists( 'options-message', $params ) ){
# Generate options array from a system message
- $params['options'] = self::parseMessage( wfMsg( $params['options-message'], $params['other'] ) );
+ $params['options'] = self::parseMessage(
+ wfMessage( $params['options-message'] )->inContentLanguage()->escaped(),
+ $params['other']
+ );
} else {
# Sulk
throw new MWException( 'HTMLSelectAndOtherField called without any options' );
*/
public static function parseMessage( $string, $otherName=null ) {
if( $otherName === null ){
- $otherName = wfMsg( 'htmlform-selectorother-other' );
+ $otherName = wfMessage( 'htmlform-selectorother-other' )->escaped();
}
$optgroup = false;