$info, * where $info is an Associative Array with any of the following: * * 'class' -- the subclass of HTMLFormField that will be used * to create the object. *NOT* the CSS class! * 'type' -- roughly translates into the : ", or "" if nothing has been selected in the * select dropdown. * @todo FIXME: If made 'required', only the text field should be compulsory. */ class HTMLSelectAndOtherField extends HTMLSelectField { function __construct( $params ) { if ( array_key_exists( 'other', $params ) ) { } elseif ( array_key_exists( 'other-message', $params ) ) { $params['other'] = wfMessage( $params['other-message'] )->plain(); } else { $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( wfMessage( $params['options-message'] )->inContentLanguage()->plain(), $params['other'] ); } else { # Sulk throw new MWException( 'HTMLSelectAndOtherField called without any options' ); } $this->mFlatOptions = self::flattenOptions( $params['options'] ); parent::__construct( $params ); } /** * Build a drop-down box from a textual list. * @param string $string message text * @param string $otherName name of "other reason" option * @return Array * TODO: this is copied from Xml::listDropDown(), deprecate/avoid duplication? */ public static function parseMessage( $string, $otherName = null ) { if ( $otherName === null ) { $otherName = wfMessage( 'htmlform-selectorother-other' )->plain(); } $optgroup = false; $options = array( $otherName => 'other' ); foreach ( explode( "\n", $string ) as $option ) { $value = trim( $option ); if ( $value == '' ) { continue; } elseif ( substr( $value, 0, 1 ) == '*' && substr( $value, 1, 1 ) != '*' ) { # A new group is starting... $value = trim( substr( $value, 1 ) ); $optgroup = $value; } elseif ( substr( $value, 0, 2 ) == '**' ) { # groupmember $opt = trim( substr( $value, 2 ) ); if ( $optgroup === false ) { $options[$opt] = $opt; } else { $options[$optgroup][$opt] = $opt; } } else { # groupless reason list $optgroup = false; $options[$option] = $option; } } return $options; } function getInputHTML( $value ) { $select = parent::getInputHTML( $value[1] ); $textAttribs = array( 'id' => $this->mID . '-other', 'size' => $this->getSize(), ); if ( $this->mClass !== '' ) { $textAttribs['class'] = $this->mClass; } foreach ( array( 'required', 'autofocus', 'multiple', 'disabled' ) as $param ) { if ( isset( $this->mParams[$param] ) ) { $textAttribs[$param] = ''; } } $textbox = Html::input( $this->mName . '-other', $value[2], 'text', $textAttribs ); return "$select
\n$textbox"; } /** * @param $request WebRequest * @return Array("","