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); } } /**