'hidden' => 'HTMLHiddenField',
'edittools' => 'HTMLEditTools',
'checkmatrix' => 'HTMLCheckMatrix',
+ 'cloner' => 'HTMLFormFieldCloner',
// HTMLTextField will output the correct type="" attribute automagically.
// There are about four zillion other HTML5 input types, like range, but
// we don't use those at the moment, so no point in adding all of them.
protected $mTitle;
protected $mMethod = 'post';
+ protected $mWasSubmitted = false;
/**
* Form action URL. false means we will use the URL to set Title
return $this->displayFormat === 'vform';
}
- /**
- * Add the HTMLForm-specific JavaScript, if it hasn't been
- * done already.
- * @deprecated since 1.18 load modules with ResourceLoader instead
- */
- static function addJS() {
- wfDeprecated( __METHOD__, '1.18' );
- }
-
/**
* Get the HTMLFormField subclass for this descriptor.
*
}
if ( !$class ) {
- throw new MWException( "Descriptor with no class for $fieldname: " . print_r( $descriptor, true ) );
+ throw new MWException( "Descriptor with no class for $fieldname: "
+ . print_r( $descriptor, true ) );
}
+
return $class;
}
}
if ( $submit ) {
+ $this->mWasSubmitted = true;
$result = $this->trySubmit();
}
* display.
*/
function trySubmit() {
+ $this->mWasSubmitted = true;
+
+ # Check for cancelled submission
+ foreach ( $this->mFlatFields as $fieldname => $field ) {
+ if ( !empty( $field->mParams['nodata'] ) ) {
+ continue;
+ }
+ if ( $field->cancelSubmit( $this->mFieldData[$fieldname], $this->mFieldData ) ) {
+ $this->mWasSubmitted = false;
+ return false;
+ }
+ }
+
# Check for validation
foreach ( $this->mFlatFields as $fieldname => $field ) {
if ( !empty( $field->mParams['nodata'] ) ) {
$data = $this->filterDataForSubmit( $this->mFieldData );
$res = call_user_func( $callback, $data, $this );
+ if ( $res === false ) {
+ $this->mWasSubmitted = false;
+ }
return $res;
}
+ /**
+ * Test whether the form was considered to have been submitted or not, i.e.
+ * whether the last call to tryAuthorizedSubmit or trySubmit returned
+ * non-false.
+ *
+ * This will return false until HTMLForm::tryAuthorizedSubmit or
+ * HTMLForm::trySubmit is called.
+ *
+ * @since 1.23
+ * @return bool
+ */
+ function wasSubmitted() {
+ return $this->mWasSubmitted;
+ }
+
/**
* Set a callback to a function to do something with the form
* once it's been successfully validated.
* Add header text, inside the form.
*
* @param string $msg Complete text of message to display
- * @param string $section The section to add the header to
+ * @param string|null $section The section to add the header to
*
* @return HTMLForm $this for chaining calls (since 1.20)
*/
* @since 1.19
*
* @param string $msg Complete text of message to display
- * @param string $section The section to add the header to
+ * @param string|null $section The section to add the header to
*
* @return HTMLForm $this for chaining calls (since 1.20)
*/
* Add footer text, inside the form.
*
* @param string $msg complete text of message to display
- * @param string $section The section to add the footer text to
+ * @param string|null $section The section to add the footer text to
*
* @return HTMLForm $this for chaining calls (since 1.20)
*/
* @since 1.19
*
* @param string $msg Complete text of message to display
- * @param string $section The section to add the footer text to
+ * @param string|null $section The section to add the footer text to
*
* @return HTMLForm $this for chaining calls (since 1.20)
*/
* Prompt the whole form to be wrapped in a "<fieldset>", with
* this text as its "<legend>" element.
*
- * @param string|false $legend HTML to go inside the "<legend>" element, or
+ * @param string|bool $legend HTML to go inside the "<legend>" element, or
* false for no <legend>
* Will be escaped
*