MediaWiki  master
HTMLForm Class Reference

Object handling generic submission, CSRF protection, layout and other logic for UI forms. More...

Inheritance diagram for HTMLForm:
Collaboration diagram for HTMLForm:

List of all members.

Public Member Functions

 __construct ($descriptor, $context=null, $messagePrefix= '')
 Build a new HTMLForm from an array of field attributes.
 addButton ($name, $value, $id=null, $attribs=null)
 Add a button to the form.
 addFooterText ($msg, $section=null)
 Add footer text, inside the form.
 addHeaderText ($msg, $section=null)
 Add header text, inside the form.
 addHiddenField ($name, $value, $attribs=array())
 Add a hidden field to the output.
 addPostText ($msg)
 Add text to the end of the display.
 addPreText ($msg)
 Add introductory text.
 displayForm ($submitResult)
 Display the form (sending to $wgOut), with an appropriate error message or stack of messages, and any validation errors, etc.
 displaySection ($fields, $sectionName= '', $fieldsetIDPrefix= '')
 filterDataForSubmit ($data)
 Overload this if you want to apply special filtration routines to the form as a whole, after it's submitted but before it's processed.
 getBody ()
 Get the whole body of the form.
 getButtons ()
 Get the submit and (potentially) reset buttons.
 getDisplayFormat ()
 Getter for displayFormat.
 getErrors ($errors)
 Format and display an error message stack.
 getHiddenFields ()
 Get the hidden fields that should go inside the form.
 getHTML ($submitResult)
 Returns the raw HTML generated by the form.
 getLegend ($key)
 Get a string to go in the "<legend>" of a section fieldset.
 getMethod ()
 getSubmitText ()
 Get the text for the submit button, either customised or a default.
 getTitle ()
 Get the title.
 loadData ()
 Construct the form fields from the Descriptor array.
 prepareForm ()
 Prepare form for submission.
 setAction ($action)
 Set the value for the action attribute of the form.
 setDisplayFormat ($format)
 Set format in which to display the form.
 setFooterText ($msg, $section=null)
 Set footer text, inside the form.
 setHeaderText ($msg, $section=null)
 Set header text, inside the form.
 setId ($id)
 setIntro ($msg)
 Set the introductory message, overwriting any existing message.
 setMessagePrefix ($p)
 Set the prefix for various default messages.
 setMethod ($method= 'post')
 Set the method used to submit the form.
 setPostText ($msg)
 Set text at the end of the display.
 setPreText ($msg)
 Set the introductory message, overwriting any existing message.
 setSubmitCallback ($cb)
 Set a callback to a function to do something with the form once it's been successfully validated.
 setSubmitID ($t)
 Set the id for the submit button.
 setSubmitName ($name)
 setSubmitText ($t)
 Set the text for the submit button.
 setSubmitTextMsg ($msg)
 Set the text for the submit button to a message.
 setSubmitTooltip ($name)
 setTitle ($t)
 Set the title for form submission.
 setValidationErrorMessage ($msg)
 Set a message to display on a validation error.
 setWrapperLegend ($legend)
 Prompt the whole form to be wrapped in a "<fieldset>", with this text as its "<legend>" element.
 setWrapperLegendMsg ($msg)
 Prompt the whole form to be wrapped in a "<fieldset>", with this message as its "<legend>" element.
 show ()
 The here's-one-I-made-earlier option: do the submission if posted, or display the form with or without funky validation errors.
 suppressReset ($suppressReset=true)
 Stop a reset button being shown for this form.
 tryAuthorizedSubmit ()
 Try submitting, with edit token check first.
 trySubmit ()
 Validate all the fields, and call the submision callback function if everything is kosher.
 wrapForm ($html)
 Wrap the form innards in an actual "<form>" element.

Static Public Member Functions

static addJS ()
 Add the HTMLForm-specific JavaScript, if it hasn't been done already.
static formatErrors ($errors)
 Format a stack of error messages into a single HTML string.
static loadInputFromParameters ($fieldname, $descriptor)
 Initialise a new Object for the field.

Public Attributes

 $mFieldData

Static Public Attributes

static $typeMappings

Protected Attributes

Array $availableDisplayFormats
 Available formats in which to display the form.
String $displayFormat = 'table'
 Format in which to display form.
bool string $mAction = false
 Form action URL.
 $mButtons = array()
 $mFieldTree
HTMLFormField[] $mFlatFields
 *
 $mFooter = ''
 $mHeader = ''
 $mHiddenFields = array()
 $mId
 $mMessagePrefix
 $mMethod = 'post'
 $mPost = ''
 $mPre = ''
 $mSectionFooters = array()
 $mSectionHeaders = array()
 $mShowReset = false
 $mSubmitCallback
 $mSubmitID
 $mSubmitName
 $mSubmitText
 $mSubmitTooltip
 $mSubSectionBeforeFields = true
 If true, sections that contain both fields and subsections will render their subsections before their fields.
 $mTitle
 $mUseMultipart = false
 $mValidationErrorMessage
 $mWrapperLegend = false

Detailed Description

Object handling generic submission, CSRF protection, layout and other logic for UI forms.

in a reusable manner.

In order to generate the form, the HTMLForm object takes an array structure detailing the form fields available. Each element of the array is a basic property-list, including the type of field, the label it is to be given in the form, callbacks for validation and 'filtering', and other pertinent information.

Field types are implemented as subclasses of the generic HTMLFormField object, and typically implement at least getInputHTML, which generates the HTML for the input field to be placed in the table.

You can find extensive documentation on the www.mediawiki.org wiki:

The constructor input is an associative array of $fieldname => $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 <select> type attribute. if 'class' is not specified, this is used as a map through HTMLForm::$typeMappings to get the class name. 'default' -- default value when the form is displayed 'id' -- HTML id attribute 'cssclass' -- CSS class 'options' -- varies according to the specific object. 'label-message' -- message key for a message to use as the label. can be an array of msg key and then parameters to the message. 'label' -- alternatively, a raw text message. Overridden by label-message 'help' -- message text for a message to use as a help text. 'help-message' -- message key for a message to use as a help text. can be an array of msg key and then parameters to the message. Overwrites 'help-messages' and 'help'. 'help-messages' -- array of message key. As above, each item can be an array of msg key and then parameters. Overwrites 'help'. 'required' -- passed through to the object, indicating that it is a required field. 'size' -- the length of text fields 'filter-callback -- a function name to give you the chance to massage the inputted value before it's processed.

See also:
HTMLForm::filter() 'validation-callback' -- a function name to give you the chance to impose extra validation on the field input.
HTMLForm::validate() 'name' -- By default, the 'name' attribute of the input field is "wp{$fieldname}". If you want a different name (eg one without the "wp" prefix), specify it here and it will be used without modification.

Since 1.20, you can chain mutators to ease the form generation:

Example:
 $form = new HTMLForm( $someFields );
 $form->setMethod( 'get' )
      ->setWrapperLegendMsg( 'message-key' )
      ->suppressReset()
      ->prepareForm()
      ->displayForm();
Note that you will have prepareForm and displayForm at the end. Other methods call done after that would simply not be part of the form :(

TODO: Document 'section' / 'subsection' stuff

Definition at line 95 of file HTMLForm.php.


Constructor & Destructor Documentation

HTMLForm::__construct ( descriptor,
context = null,
messagePrefix = '' 
)

Build a new HTMLForm from an array of field attributes.

Parameters:
$descriptorArray of Field constructs, as described above
$contextIContextSource available since 1.18, will become compulsory in 1.18. Obviates the need to call $form->setTitle()
$messagePrefixString a prefix to go in front of default messages

Definition at line 192 of file HTMLForm.php.


Member Function Documentation

HTMLForm::addButton ( name,
value,
id = null,
attribs = null 
)

Add a button to the form.

Parameters:
$nameString field name.
$valueString field value
$idString DOM id for the button (default: null)
$attribsArray
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 576 of file HTMLForm.php.

HTMLForm::addFooterText ( msg,
section = null 
)

Add footer text, inside the form.

Parameters:
$msgString complete text of message to display
$sectionstring The section to add the footer text to
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 507 of file HTMLForm.php.

HTMLForm::addHeaderText ( msg,
section = null 
)

Add header text, inside the form.

Parameters:
$msgString complete text of message to display
$sectionstring The section to add the header to
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 473 of file HTMLForm.php.

Referenced by SpecialBlock\alterForm().

HTMLForm::addHiddenField ( name,
value,
attribs = array() 
)

Add a hidden field to the output.

Parameters:
$nameString field name. This will be used exactly as entered
$valueString field value
$attribsArray
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 562 of file HTMLForm.php.

Referenced by RevertFileAction\alterForm().

static HTMLForm::addJS ( ) [static]

Add the HTMLForm-specific JavaScript, if it hasn't been done already.

Deprecated:
since 1.18 load modules with ResourceLoader instead

Definition at line 273 of file HTMLForm.php.

Add text to the end of the display.

Parameters:
$msgString complete text of message to display
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 540 of file HTMLForm.php.

Add introductory text.

Parameters:
$msgString complete text of message to display
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 462 of file HTMLForm.php.

HTMLForm::displayForm ( submitResult)

Display the form (sending to $wgOut), with an appropriate error message or stack of messages, and any validation errors, etc.

Attention:
You should call prepareForm() before calling this function. Moreover, when doing method chaining this should be the very last method call just after prepareForm().
Parameters:
$submitResultMixed output from HTMLForm::trySubmit()
Returns:
Nothing, should be last call

Definition at line 592 of file HTMLForm.php.

HTMLForm::displaySection ( fields,
sectionName = '',
fieldsetIDPrefix = '' 
)
Todo:
Document
Parameters:
$fieldsarray[]|HTMLFormField[] array of fields (either arrays or objects)
$sectionNamestring ID attribute of the "<table>" tag for this section, ignored if empty
$fieldsetIDPrefixstring ID prefix for the "<fieldset>" tag of each subsection, ignored if empty
Returns:
String

Definition at line 933 of file HTMLForm.php.

Referenced by EditWatchlistNormalHTMLForm\getBody(), and PreferencesForm\getBody().

Overload this if you want to apply special filtration routines to the form as a whole, after it's submitted but before it's processed.

Parameters:
$data
Returns:

Reimplemented in PreferencesForm.

Definition at line 1043 of file HTMLForm.php.

static HTMLForm::formatErrors ( errors) [static]

Format a stack of error messages into a single HTML string.

Parameters:
$errorsArray of message keys/values
Returns:
String HTML, a "<ul>" list of errors

Definition at line 765 of file HTMLForm.php.

Referenced by SpecialBlock\alterForm().

Get the whole body of the form.

Returns:
String

Reimplemented in PreferencesForm, and EditWatchlistNormalHTMLForm.

Definition at line 733 of file HTMLForm.php.

Get the submit and (potentially) reset buttons.

Returns:
String HTML.

Reimplemented in PreferencesForm.

Definition at line 678 of file HTMLForm.php.

Getter for displayFormat.

Since:
1.20
Returns:
String

Definition at line 264 of file HTMLForm.php.

HTMLForm::getErrors ( errors)

Format and display an error message stack.

Parameters:
$errorsString|Array|Status
Returns:
String

Definition at line 742 of file HTMLForm.php.

Get the hidden fields that should go inside the form.

Returns:
String HTML.

Definition at line 653 of file HTMLForm.php.

HTMLForm::getHTML ( submitResult)

Returns the raw HTML generated by the form.

Parameters:
$submitResultMixed output from HTMLForm::trySubmit()
Returns:
string

Definition at line 601 of file HTMLForm.php.

HTMLForm::getLegend ( key)

Get a string to go in the "<legend>" of a section fieldset.

Override this if you want something more complicated.

Parameters:
$keyString
Returns:
String

Reimplemented in PreferencesForm, and EditWatchlistNormalHTMLForm.

Definition at line 1053 of file HTMLForm.php.

Definition at line 922 of file HTMLForm.php.

Get the text for the submit button, either customised or a default.

Returns:
string

Definition at line 813 of file HTMLForm.php.

Get the title.

Returns:
Title

Reimplemented from ContextSource.

Definition at line 906 of file HTMLForm.php.

Construct the form fields from the Descriptor array.

Definition at line 1003 of file HTMLForm.php.

References $name, $value, array(), as, empty, and ContextSource\getRequest().

static HTMLForm::loadInputFromParameters ( fieldname,
descriptor 
) [static]

Initialise a new Object for the field.

Parameters:
$fieldnamestring
$descriptorstring input Descriptor, as described above
Exceptions:
MWException
Returns:
HTMLFormField subclass

Definition at line 282 of file HTMLForm.php.

Referenced by ApiOptions\execute(), and Preferences\getPreferences().

Prepare form for submission.

Attention:
When doing method chaining, that should be the very last method call before displayForm().
Exceptions:
MWException
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 316 of file HTMLForm.php.

HTMLForm::setAction ( action)

Set the value for the action attribute of the form.

When set to false (which is the default state), the set title is used.

Since:
1.19
Parameters:
string | bool$action
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 1066 of file HTMLForm.php.

Set format in which to display the form.

Parameters:
$formatString the name of the format to use, must be one of $this->availableDisplayFormats
Exceptions:
MWException
Since:
1.20
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 251 of file HTMLForm.php.

HTMLForm::setFooterText ( msg,
section = null 
)

Set footer text, inside the form.

Since:
1.19
Parameters:
$msgString complete text of message to display
$sectionstring The section to add the footer text to
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 526 of file HTMLForm.php.

HTMLForm::setHeaderText ( msg,
section = null 
)

Set header text, inside the form.

Since:
1.19
Parameters:
$msgString complete text of message to display
$sectionThe section to add the header to
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 492 of file HTMLForm.php.

Referenced by SpecialUnlockdb\alterForm(), SpecialLockdb\alterForm(), and SpecialBlock\alterForm().

HTMLForm::setId ( id)
Parameters:
$idString DOM id for the form
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 852 of file HTMLForm.php.

HTMLForm::setIntro ( msg)

Set the introductory message, overwriting any existing message.

Parameters:
$msgString complete text of message to display
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 441 of file HTMLForm.php.

Set the prefix for various default messages.

Todo:
currently only used for the "<fieldset>" legend on forms with multiple sections; should be used elsewhre?
Parameters:
$pString
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 887 of file HTMLForm.php.

HTMLForm::setMethod ( method = 'post')

Set the method used to submit the form.

Parameters:
$methodString
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 917 of file HTMLForm.php.

Set text at the end of the display.

Parameters:
$msgString complete text of message to display
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 550 of file HTMLForm.php.

Set the introductory message, overwriting any existing message.

Since:
1.19
Parameters:
$msgString complete text of message to display
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 452 of file HTMLForm.php.

Set a callback to a function to do something with the form once it's been successfully validated.

Parameters:
$cbString function name. The function will be passed the output from HTMLForm::filterDataForSubmit, and must return Bool true on success, Bool false if no submission was attempted, or String HTML output to display on error.
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 420 of file HTMLForm.php.

Referenced by SpecialBlock\alterForm().

Set the id for the submit button.

Parameters:
$tString.
Todo:
FIXME: Integrity of $t is *not* validated
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 843 of file HTMLForm.php.

Parameters:
$nameString Submit button name
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 823 of file HTMLForm.php.

Set the text for the submit button.

Parameters:
$tString plaintext.
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 793 of file HTMLForm.php.

Set the text for the submit button to a message.

Since:
1.19
Parameters:
$msgString message key
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 804 of file HTMLForm.php.

Referenced by SpecialUnlockdb\alterForm(), SpecialLockdb\alterForm(), RevertFileAction\alterForm(), PurgeAction\alterForm(), SpecialBlock\alterForm(), WatchAction\alterForm(), and UnwatchAction\alterForm().

Parameters:
$nameString Tooltip for the submit button
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 832 of file HTMLForm.php.

Set the title for form submission.

Parameters:
$tTitle of page the form is on/should be posted to
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 897 of file HTMLForm.php.

Set a message to display on a validation error.

Parameters:
$msgMixed String or Array of valid inputs to wfMessage() (so each entry can be either a String or Array)
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 431 of file HTMLForm.php.

Prompt the whole form to be wrapped in a "<fieldset>", with this text as its "<legend>" element.

Parameters:
$legendString HTML to go inside the "<legend>" element. Will be escaped
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 863 of file HTMLForm.php.

Referenced by SpecialUnlockdb\alterForm(), and SpecialLockdb\alterForm().

Prompt the whole form to be wrapped in a "<fieldset>", with this message as its "<legend>" element.

Since:
1.19
Parameters:
$msgString message key
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 875 of file HTMLForm.php.

Referenced by RevertFileAction\alterForm(), and SpecialBlock\alterForm().

The here's-one-I-made-earlier option: do the submission if posted, or display the form with or without funky validation errors.

Returns:
Bool or Status whether submission was successful.

Reimplemented in UploadForm.

Definition at line 362 of file HTMLForm.php.

HTMLForm::suppressReset ( suppressReset = true)

Stop a reset button being shown for this form.

Parameters:
$suppressResetBool set to false to re-enable the button again
Returns:
HTMLForm $this for chaining calls (since 1.20)

Definition at line 1031 of file HTMLForm.php.

Try submitting, with edit token check first.

Returns:
Status|boolean

Definition at line 331 of file HTMLForm.php.

Validate all the fields, and call the submision callback function if everything is kosher.

Exceptions:
MWException
Returns:
Mixed Bool true == Successful submission, Bool false == No submission attempted, anything else == Error to display.

Reimplemented in UploadForm.

Definition at line 382 of file HTMLForm.php.

HTMLForm::wrapForm ( html)

Wrap the form innards in an actual "<form>" element.

Parameters:
$htmlString HTML contents to wrap.
Returns:
String wrapped HTML.

Reimplemented in PreferencesForm.

Definition at line 625 of file HTMLForm.php.


Member Data Documentation

Array HTMLForm::$availableDisplayFormats [protected]
Initial value:
 array(
                'table',
                'div',
                'raw',
        )

Available formats in which to display the form.

Definition at line 179 of file HTMLForm.php.

String HTMLForm::$displayFormat = 'table' [protected]

Format in which to display form.

For viable options,

See also:
$availableDisplayFormats

Definition at line 174 of file HTMLForm.php.

bool string HTMLForm::$mAction = false [protected]

Form action URL.

false means we will use the URL to set Title

Since:
1.19

Definition at line 153 of file HTMLForm.php.

HTMLForm::$mButtons = array() [protected]

Definition at line 157 of file HTMLForm.php.

HTMLForm::$mFieldData

Definition at line 128 of file HTMLForm.php.

HTMLForm::$mFieldTree [protected]

Definition at line 126 of file HTMLForm.php.

HTMLFormField [] HTMLForm::$mFlatFields [protected]

*

Definition at line 124 of file HTMLForm.php.

HTMLForm::$mFooter = '' [protected]

Definition at line 135 of file HTMLForm.php.

HTMLForm::$mHeader = '' [protected]

Definition at line 134 of file HTMLForm.php.

HTMLForm::$mHiddenFields = array() [protected]

Definition at line 156 of file HTMLForm.php.

HTMLForm::$mId [protected]

Definition at line 139 of file HTMLForm.php.

HTMLForm::$mMessagePrefix [protected]

Definition at line 122 of file HTMLForm.php.

HTMLForm::$mMethod = 'post' [protected]

Definition at line 147 of file HTMLForm.php.

HTMLForm::$mPost = '' [protected]

Definition at line 138 of file HTMLForm.php.

HTMLForm::$mPre = '' [protected]

Definition at line 133 of file HTMLForm.php.

HTMLForm::$mSectionFooters = array() [protected]

Definition at line 137 of file HTMLForm.php.

HTMLForm::$mSectionHeaders = array() [protected]

Definition at line 136 of file HTMLForm.php.

HTMLForm::$mShowReset = false [protected]

Definition at line 127 of file HTMLForm.php.

HTMLForm::$mSubmitCallback [protected]

Definition at line 130 of file HTMLForm.php.

HTMLForm::$mSubmitID [protected]

Definition at line 141 of file HTMLForm.php.

HTMLForm::$mSubmitName [protected]

Definition at line 142 of file HTMLForm.php.

HTMLForm::$mSubmitText [protected]

Definition at line 143 of file HTMLForm.php.

HTMLForm::$mSubmitTooltip [protected]

Definition at line 144 of file HTMLForm.php.

HTMLForm::$mSubSectionBeforeFields = true [protected]

If true, sections that contain both fields and subsections will render their subsections before their fields.

Subclasses may set this to false to render subsections after fields instead.

Reimplemented in PreferencesForm.

Definition at line 168 of file HTMLForm.php.

HTMLForm::$mTitle [protected]

Definition at line 146 of file HTMLForm.php.

HTMLForm::$mUseMultipart = false [protected]

Definition at line 155 of file HTMLForm.php.

HTMLForm::$mValidationErrorMessage [protected]

Definition at line 131 of file HTMLForm.php.

HTMLForm::$mWrapperLegend = false [protected]

Definition at line 159 of file HTMLForm.php.

HTMLForm::$typeMappings [static]
Initial value:
 array(
                'text' => 'HTMLTextField',
                'textarea' => 'HTMLTextAreaField',
                'select' => 'HTMLSelectField',
                'radio' => 'HTMLRadioField',
                'multiselect' => 'HTMLMultiSelectField',
                'check' => 'HTMLCheckField',
                'toggle' => 'HTMLCheckField',
                'int' => 'HTMLIntField',
                'float' => 'HTMLFloatField',
                'info' => 'HTMLInfoField',
                'selectorother' => 'HTMLSelectOrOtherField',
                'selectandother' => 'HTMLSelectAndOtherField',
                'submit' => 'HTMLSubmitField',
                'hidden' => 'HTMLHiddenField',
                'edittools' => 'HTMLEditTools',

                
                
                
                'email' => 'HTMLTextField',
                'password' => 'HTMLTextField',
        )

Definition at line 98 of file HTMLForm.php.


The documentation for this class was generated from the following file: