protected $mMessagePrefix;
/** @var HTMLFormField[] */
- protected $mFlatFields;
-
- protected $mFieldTree;
+ protected $mFlatFields = [];
+ protected $mFieldTree = [];
protected $mShowReset = false;
protected $mShowSubmit = true;
protected $mSubmitFlags = [ 'primary', 'progressive' ];
/**
* 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