/**
* Object handling generic submission, CSRF protection, layout and
- * other logic for UI forms. in a reusable manner.
+ * 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
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;
protected $mUseMultipart = false;
protected $mHiddenFields = [];
+ /**
+ * @var array[]
+ * @phan-var array<array{name:string,value:string,label-message?:string,label?:string,label-raw?:string,id?:string,attribs?:array,flags?:string|string[],framed?:bool}>
+ */
protected $mButtons = [];
protected $mWrapperLegend = false;
* Construct a HTMLForm object for given display type. May return a HTMLForm subclass.
*
* @param string $displayFormat
- * @param mixed $arguments,... Additional arguments to pass to the constructor.
+ * @param mixed ...$arguments Additional arguments to pass to the constructor.
* @return HTMLForm
*/
- public static function factory( $displayFormat/*, $arguments...*/ ) {
- $arguments = func_get_args();
- array_shift( $arguments );
-
+ public static function factory( $displayFormat, ...$arguments ) {
switch ( $displayFormat ) {
case 'vform':
return new VFormHTMLForm( ...$arguments );
/**
* 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
$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' ) {
$this->mFlatFields[$fieldname] = $field;
}
- $this->mFieldTree = $loadedDescriptor;
+ $this->mFieldTree = array_merge( $this->mFieldTree, $loadedDescriptor );
+
+ return $this;
}
/**
* @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
* 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
* - attribs: (array, optional) Additional HTML attributes.
* - flags: (string|string[], optional) OOUI flags.
* - framed: (boolean=true, optional) OOUI framed attribute.
+ * @codingStandardsIgnoreStart
+ * @phan-param array{name:string,value:string,label-message?:string,label?:string,label-raw?:string,id?:string,attribs?:array,flags?:string|string[],framed?:bool} $data
+ * @codingStandardsIgnoreEnd
* @return HTMLForm $this for chaining calls (since 1.20)
*/
public function addButton( $data ) {
}
return $elementstr
- ? Html::rawElement( 'div', [ 'class' => $elementsType ], $elementstr )
+ ? Html::rawElement( 'div', [ 'class' => $elementsType . 'box' ], $elementstr )
: '';
}