From 6ed9a7da539270dcc86e34f290f96a5ecae5b76f Mon Sep 17 00:00:00 2001 From: Sam Hemelryk Date: Mon, 3 May 2010 03:36:33 +0000 Subject: [PATCH] backup MDL-22142 Fixed dependency chaining through inspection in relation to the dependent setting rather than the prominent setting. Also did away with reference dealing with processing dependencies for mforms, new recursive structure returns managed property array instead. --- backup/util/settings/base_setting.class.php | 28 +++++++++++++++++++++ backup/util/ui/backup_moodleform.class.php | 11 +++----- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/backup/util/settings/base_setting.class.php b/backup/util/settings/base_setting.class.php index 561e132d6dc..fe711b1355c 100644 --- a/backup/util/settings/base_setting.class.php +++ b/backup/util/settings/base_setting.class.php @@ -204,6 +204,34 @@ abstract class base_setting { return $dependencies; } + /** + * Gets an array of properties for all of the dependencies that will affect + * this setting. + * + * This method returns and array rather than the dependencies in order to + * minimise the memory footprint of for the potentially huge recursive + * dependency structure that we may be dealing with. + * + * This method also ensures that all dependencies are transmuted to affect + * the setting in question and that we don't provide any duplicates. + * + * @param string|null $settingname + * @return array + */ + public function get_my_dependency_properties($settingname=null) { + if ($settingname == null) { + $settingname = $this->get_ui_name(); + } + $dependencies = array(); + foreach ($this->dependenton as $dependenton) { + $properties = $dependenton->get_moodleform_properties(); + $properties['setting'] = $settingname; + $dependencies[$properties['setting'].'-'.$properties['dependenton']] = $properties; + $dependencies = array_merge($dependencies, $dependenton->get_setting()->get_my_dependency_properties($settingname)); + } + return $dependencies; + } + public function set_ui(backup_setting_ui $ui) { $this->uisetting = $ui; } diff --git a/backup/util/ui/backup_moodleform.class.php b/backup/util/ui/backup_moodleform.class.php index 3922978e8b4..06872ed8631 100644 --- a/backup/util/ui/backup_moodleform.class.php +++ b/backup/util/ui/backup_moodleform.class.php @@ -192,7 +192,6 @@ abstract class backup_moodleform extends moodleform { */ function add_fixed_setting(backup_setting $setting) { global $OUTPUT; - $settingui = $setting->get_ui(); if ($setting->get_visibility() == backup_setting::VISIBLE) { $this->add_html_formatting($setting); @@ -209,16 +208,12 @@ abstract class backup_moodleform extends moodleform { * Adds dependencies to the form recursively * * @param backup_setting $setting - * @param backup_setting $basesetting */ - function add_dependencies(backup_setting $setting, $basesetting=null) { + function add_dependencies(backup_setting $setting) { $mform = $this->_form; - if ($basesetting == null) { - $basesetting = $setting; - } // Apply all dependencies for backup - foreach ($setting->get_all_dependencies() as $dependency) { - call_user_method_array('disabledIf', $this->_form, $dependency->get_moodleform_properties()); + foreach ($setting->get_my_dependency_properties() as $key=>$dependency) { + call_user_method_array('disabledIf', $this->_form, $dependency); } } /**