X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fhtmlform%2FHTMLForm.php;h=a7cef3cbe65c60bc41e1b2bc4c83c7456f21a193;hb=6cfb2e3d7a2b96d5041312fcec88248bb46573d7;hp=acf64db3466e342602383d158f05e2f1d30daeda;hpb=e3705c7b17aac5e0c7866e1d03efa7e6b7998ddf;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/htmlform/HTMLForm.php b/includes/htmlform/HTMLForm.php index acf64db346..a7cef3cbe6 100644 --- a/includes/htmlform/HTMLForm.php +++ b/includes/htmlform/HTMLForm.php @@ -21,8 +21,6 @@ * @file */ -use Wikimedia\ObjectFactory; - /** * Object handling generic submission, CSRF protection, layout and * other logic for UI forms. in a reusable manner. @@ -182,11 +180,11 @@ class HTMLForm extends ContextSource { protected $mMessagePrefix; /** @var HTMLFormField[] */ - protected $mFlatFields; - - protected $mFieldTree; + protected $mFlatFields = []; + protected $mFieldTree = []; protected $mShowReset = false; protected $mShowSubmit = true; + /** @var string[] */ protected $mSubmitFlags = [ 'primary', 'progressive' ]; protected $mShowCancel = false; protected $mCancelTarget; @@ -304,12 +302,11 @@ class HTMLForm extends ContextSource { switch ( $displayFormat ) { case 'vform': - return ObjectFactory::constructClassInstance( VFormHTMLForm::class, $arguments ); + return new VFormHTMLForm( ...$arguments ); case 'ooui': - return ObjectFactory::constructClassInstance( OOUIHTMLForm::class, $arguments ); + return new OOUIHTMLForm( ...$arguments ); default: - /** @var HTMLForm $form */ - $form = ObjectFactory::constructClassInstance( self::class, $arguments ); + $form = new self( ...$arguments ); $form->setDisplayFormat( $displayFormat ); return $form; } @@ -318,7 +315,8 @@ class HTMLForm extends ContextSource { /** * Build a new HTMLForm from an array of field attributes * - * @param array $descriptor Array of Field constructs, as described above + * @param array $descriptor Array of Field constructs, as described + * in the class documentation * @param IContextSource|null $context Available since 1.18, will become compulsory in 1.18. * Obviates the need to call $form->setTitle() * @param string $messagePrefix A prefix to go in front of default messages @@ -346,11 +344,23 @@ class HTMLForm extends ContextSource { $this->displayFormat = 'div'; } - // Expand out into a tree. + $this->addFields( $descriptor ); + } + + /** + * Add fields to the form + * + * @since 1.34 + * + * @param array $descriptor Array of Field constructs, as described + * in the class documentation + * @return HTMLForm + */ + public function addFields( $descriptor ) { $loadedDescriptor = []; - $this->mFlatFields = []; foreach ( $descriptor as $fieldname => $info ) { + $section = $info['section'] ?? ''; if ( isset( $info['type'] ) && $info['type'] === 'file' ) { @@ -374,7 +384,9 @@ class HTMLForm extends ContextSource { $this->mFlatFields[$fieldname] = $field; } - $this->mFieldTree = $loadedDescriptor; + $this->mFieldTree = array_merge( $this->mFieldTree, $loadedDescriptor ); + + return $this; } /** @@ -457,7 +469,8 @@ class HTMLForm extends ContextSource { * @since 1.23 * * @param string $fieldname Name of the field - * @param array &$descriptor Input Descriptor, as described above + * @param array &$descriptor Input Descriptor, as described + * in the class documentation * * @throws MWException * @return string Name of a HTMLFormField subclass @@ -484,7 +497,8 @@ class HTMLForm extends ContextSource { * Initialise a new Object for the field * * @param string $fieldname Name of the field - * @param array $descriptor Input Descriptor, as described above + * @param array $descriptor Input Descriptor, as described + * in the class documentation * @param HTMLForm|null $parent Parent instance of HTMLForm * * @throws MWException