MediaWiki  master
FormAction.php
Go to the documentation of this file.
1 <?php
28 abstract class FormAction extends Action {
29 
34  protected function getFormFields() {
35  // Default to an empty form with just a submit button
36  return [];
37  }
38 
43  protected function preText() {
44  return '';
45  }
46 
50  protected function postText() {
51  return '';
52  }
53 
58  protected function alterForm( HTMLForm $form ) {
59  }
60 
65  protected function usesOOUI() {
66  return false;
67  }
68 
73  protected function getForm() {
74  $this->fields = $this->getFormFields();
75 
76  // Give hooks a chance to alter the form, adding extra fields or text etc
77  Hooks::run( 'ActionModifyFormFields', [ $this->getName(), &$this->fields, $this->page ] );
78 
79  if ( $this->usesOOUI() ) {
80  $form = HTMLForm::factory( 'ooui', $this->fields, $this->getContext(), $this->getName() );
81  } else {
82  $form = new HTMLForm( $this->fields, $this->getContext(), $this->getName() );
83  }
84  $form->setSubmitCallback( [ $this, 'onSubmit' ] );
85 
86  $title = $this->getTitle();
87  $form->setAction( $title->getLocalURL( [ 'action' => $this->getName() ] ) );
88  // Retain query parameters (uselang etc)
89  $params = array_diff_key(
90  $this->getRequest()->getQueryValues(),
91  [ 'action' => null, 'title' => null ]
92  );
93  if ( $params ) {
94  $form->addHiddenField( 'redirectparams', wfArrayToCgi( $params ) );
95  }
96 
97  $form->addPreText( $this->preText() );
98  $form->addPostText( $this->postText() );
99  $this->alterForm( $form );
100 
101  // Give hooks a chance to alter the form, adding extra fields or text etc
102  Hooks::run( 'ActionBeforeFormDisplay', [ $this->getName(), &$form, $this->page ] );
103 
104  return $form;
105  }
106 
120  abstract public function onSubmit( $data );
121 
127  abstract public function onSuccess();
128 
136  public function show() {
137  $this->setHeaders();
138 
139  // This will throw exceptions if there's a problem
140  $this->checkCanExecute( $this->getUser() );
141 
142  $form = $this->getForm();
143  if ( $form->show() ) {
144  $this->onSuccess();
145  }
146  }
147 
148  public function doesWrites() {
149  return true;
150  }
151 }
getForm()
Get the HTMLForm to control behavior.
Definition: FormAction.php:73
getTitle()
Shortcut to get the Title object from the page.
Definition: Action.php:247
getUser()
Shortcut to get the User being used for this instance.
Definition: Action.php:218
wfArrayToCgi( $array1, $array2=null, $prefix='')
This function takes one or two arrays as input, and returns a CGI-style string, e.g.
An action which shows a form and does something based on the input from the form. ...
Definition: FormAction.php:28
static factory( $displayFormat,... $arguments)
Construct a HTMLForm object for given display type.
Definition: HTMLForm.php:307
getName()
Return the name of the action this object responds to.
alterForm(HTMLForm $form)
Play with the HTMLForm if you need to more substantially.
Definition: FormAction.php:58
show()
The basic pattern for actions is to display some sort of HTMLForm UI, maybe with some stuff underneat...
Definition: FormAction.php:136
setHeaders()
Set output headers for noindexing etc.
Definition: Action.php:365
getContext()
Get the IContextSource in use here.
Definition: Action.php:179
checkCanExecute(User $user)
Checks if the given user (identified by an object) can perform this action.
Definition: Action.php:308
usesOOUI()
Whether the form should use OOUI.
Definition: FormAction.php:65
onSubmit( $data)
Process the form on POST submission.
preText()
Add pre- or post-text to the form.
Definition: FormAction.php:43
onSuccess()
Do something exciting on successful processing of the form.
getRequest()
Get the WebRequest being used for this instance.
Definition: Action.php:198
static run( $event, array $args=[], $deprecatedVersion=null)
Call hook functions defined in Hooks::register and $wgHooks.
Definition: Hooks.php:200
getFormFields()
Get an HTMLForm descriptor array.
Definition: FormAction.php:34