From 5805ddec5a0e9cf31edd1b4139b5d705a303c33b Mon Sep 17 00:00:00 2001 From: flynsarmy Date: Sat, 7 Feb 2015 19:52:34 +1000 Subject: [PATCH] Add support for removing form fields --- modules/backend/classes/FormTabs.php | 20 ++++++++++++++++++++ modules/backend/widgets/Form.php | 21 +++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/modules/backend/classes/FormTabs.php b/modules/backend/classes/FormTabs.php index 0dab4e06a..4ad092e8a 100644 --- a/modules/backend/classes/FormTabs.php +++ b/modules/backend/classes/FormTabs.php @@ -84,6 +84,26 @@ class FormTabs implements IteratorAggregate, ArrayAccess } } + /** + * Remove a field from all tabs by name. + * @param string $name + * @return True on success, False on failure + */ + public function removeField($name) + { + foreach ($this->fields as $tab => $fields) { + foreach ($fields as $fieldName => $field) { + if ($fieldName == $name) { + unset($this->fields[$tab][$fieldName]); + + return true; + } + } + } + + return false; + } + /** * Add a field to the collection of tabs. * @param string $name diff --git a/modules/backend/widgets/Form.php b/modules/backend/widgets/Form.php index e289aecc6..d4da58928 100644 --- a/modules/backend/widgets/Form.php +++ b/modules/backend/widgets/Form.php @@ -459,6 +459,27 @@ class Form extends WidgetBase } } + /** + * Programatically remove a field. + * @return True on success, False on failure + */ + public function removeField($name) + { + if (!isset($this->fields[$name])) { + return false; + } + + // Remove from tabs + $this->primaryTabs->removeField($name); + $this->secondaryTabs->removeField($name); + $this->outsideTabs->removeField($name); + + // Remove from form + unset($this->fields[$name]); + + return true; + } + /** * Programatically add fields, used internally and for extensibility. */