mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 16:36:37 +02:00
backup MDL-22142 P22 - Several big backup dependency issues resolved
This commit is contained in:
parent
5fcbdc6bf0
commit
84e546e0fc
5 changed files with 111 additions and 63 deletions
|
@ -74,6 +74,7 @@ class backup_root_task extends backup_task {
|
||||||
$userfiles->set_ui(new backup_setting_ui_select($userfiles, $userfiles->get_name(), array(1=>get_string('yes'), 0=>get_string('no'))));
|
$userfiles->set_ui(new backup_setting_ui_select($userfiles, $userfiles->get_name(), array(1=>get_string('yes'), 0=>get_string('no'))));
|
||||||
$this->add_setting($userfiles);
|
$this->add_setting($userfiles);
|
||||||
$users->add_dependency($userfiles);
|
$users->add_dependency($userfiles);
|
||||||
|
$anonymize->add_dependency($userfiles, setting_dependency::DISABLED_TRUE);
|
||||||
|
|
||||||
// Define activitites
|
// Define activitites
|
||||||
$activities = new backup_activities_setting('activities', base_setting::IS_BOOLEAN, true);
|
$activities = new backup_activities_setting('activities', base_setting::IS_BOOLEAN, true);
|
||||||
|
|
|
@ -61,18 +61,6 @@ abstract class backup_setting extends base_setting implements checksumable {
|
||||||
public function is_checksum_correct($checksum) {
|
public function is_checksum_correct($checksum) {
|
||||||
return $this->calculate_checksum() === $checksum;
|
return $this->calculate_checksum() === $checksum;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get_dependencies() {
|
|
||||||
return $this->dependencies;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function get_ui_name() {
|
|
||||||
return $this->uisetting->get_name();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function get_ui_type() {
|
|
||||||
return $this->uisetting->get_type();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -188,6 +188,22 @@ abstract class base_setting {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an array of all dependencies this setting has as well as the dependencies
|
||||||
|
* of its dependencies.... another words recursivily
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function get_all_dependencies() {
|
||||||
|
$dependencies = array_values($this->dependencies);
|
||||||
|
foreach ($this->dependencies as &$dependency) {
|
||||||
|
$childdependencies = $dependency->get_dependant_setting()->get_all_dependencies();
|
||||||
|
foreach ($childdependencies as $name=>&$childdependency) {
|
||||||
|
$dependencies[] = $childdependency;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $dependencies;
|
||||||
|
}
|
||||||
|
|
||||||
public function set_ui(backup_setting_ui $ui) {
|
public function set_ui(backup_setting_ui $ui) {
|
||||||
$this->uisetting = $ui;
|
$this->uisetting = $ui;
|
||||||
}
|
}
|
||||||
|
@ -270,10 +286,18 @@ abstract class base_setting {
|
||||||
if ($type == null) {
|
if ($type == null) {
|
||||||
switch ($this->vtype) {
|
switch ($this->vtype) {
|
||||||
case self::IS_BOOLEAN :
|
case self::IS_BOOLEAN :
|
||||||
if ($this->value) {
|
if ($this->get_ui_type() == self::UI_HTML_CHECKBOX) {
|
||||||
$type = setting_dependency::DISABLED_FALSE;
|
if ($this->value) {
|
||||||
|
$type = setting_dependency::DISABLED_NOT_CHECKED;
|
||||||
|
} else {
|
||||||
|
$type = setting_dependency::DISABLED_CHECKED;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$type = setting_dependency::DISABLED_TRUE;
|
if ($this->value) {
|
||||||
|
$type = setting_dependency::DISABLED_FALSE;
|
||||||
|
} else {
|
||||||
|
$type = setting_dependency::DISABLED_TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case self::IS_FILENAME :
|
case self::IS_FILENAME :
|
||||||
|
@ -293,13 +317,17 @@ abstract class base_setting {
|
||||||
$dependency = new setting_dependency_disabledif_equals($this, $dependentsetting, $options['value'], $options['defaultvalue']);
|
$dependency = new setting_dependency_disabledif_equals($this, $dependentsetting, $options['value'], $options['defaultvalue']);
|
||||||
break;
|
break;
|
||||||
case setting_dependency::DISABLED_TRUE :
|
case setting_dependency::DISABLED_TRUE :
|
||||||
case setting_dependency::DISABLED_CHECKED :
|
|
||||||
$dependency = new setting_dependency_disabledif_equals($this, $dependentsetting, true, $options['defaultvalue']);
|
$dependency = new setting_dependency_disabledif_equals($this, $dependentsetting, true, $options['defaultvalue']);
|
||||||
break;
|
break;
|
||||||
case setting_dependency::DISABLED_FALSE :
|
case setting_dependency::DISABLED_FALSE :
|
||||||
case setting_dependency::DISABLED_NOT_CHECKED :
|
|
||||||
$dependency = new setting_dependency_disabledif_equals($this, $dependentsetting, false, $options['defaultvalue']);
|
$dependency = new setting_dependency_disabledif_equals($this, $dependentsetting, false, $options['defaultvalue']);
|
||||||
break;
|
break;
|
||||||
|
case setting_dependency::DISABLED_CHECKED :
|
||||||
|
$dependency = new setting_dependency_disabledif_checked($this, $dependentsetting, $options['defaultvalue']);
|
||||||
|
break;
|
||||||
|
case setting_dependency::DISABLED_NOT_CHECKED :
|
||||||
|
$dependency = new setting_dependency_disabledif_not_checked($this, $dependentsetting, $options['defaultvalue']);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
$this->dependencies[$dependentsetting->get_name()] = $dependency;
|
$this->dependencies[$dependentsetting->get_name()] = $dependency;
|
||||||
$dependency->get_dependant_setting()->register_dependent_dependency($dependency);
|
$dependency->get_dependant_setting()->register_dependent_dependency($dependency);
|
||||||
|
@ -389,13 +417,16 @@ abstract class base_setting {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function get_dependencies() {
|
public function get_dependencies() {
|
||||||
$dependencies = array();
|
return $this->dependencies;
|
||||||
foreach ($this->dependencies as $dependency) {
|
}
|
||||||
$dependencies[$dependency->get_dependant_setting()->get_name()] = $dependency->get_dependant_setting();
|
|
||||||
$dependencies = array_merge($dependencies, $dependency->get_dependencies());
|
public function get_ui_name() {
|
||||||
}
|
return $this->uisetting->get_name();
|
||||||
return $dependencies;
|
}
|
||||||
|
|
||||||
|
public function get_ui_type() {
|
||||||
|
return $this->uisetting->get_type();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -38,10 +38,10 @@ abstract class setting_dependency {
|
||||||
*/
|
*/
|
||||||
const DISABLED_VALUE = 0;
|
const DISABLED_VALUE = 0;
|
||||||
const DISABLED_NOT_VALUE = 1;
|
const DISABLED_NOT_VALUE = 1;
|
||||||
const DISABLED_CHECKED = 2;
|
|
||||||
const DISABLED_TRUE = 2;
|
const DISABLED_TRUE = 2;
|
||||||
const DISABLED_NOT_CHECKED = 3;
|
|
||||||
const DISABLED_FALSE = 3;
|
const DISABLED_FALSE = 3;
|
||||||
|
const DISABLED_CHECKED = 4;
|
||||||
|
const DISABLED_NOT_CHECKED = 5;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The parent setting (primary)
|
* The parent setting (primary)
|
||||||
|
@ -130,6 +130,16 @@ abstract class setting_dependency {
|
||||||
public function get_dependant_setting() {
|
public function get_dependant_setting() {
|
||||||
return $this->dependentsetting;
|
return $this->dependentsetting;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* This function enforces the dependency
|
||||||
|
*/
|
||||||
|
abstract public function enforce();
|
||||||
|
/**
|
||||||
|
* Returns an array of properties suitable to be used to define a moodleforms
|
||||||
|
* disabled command
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
abstract public function get_moodleform_properties();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -155,7 +165,7 @@ class setting_dependency_disabledif_equals extends setting_dependency {
|
||||||
*/
|
*/
|
||||||
public function __construct(base_setting $setting, base_setting $dependentsetting, $value, $defaultvalue = false) {
|
public function __construct(base_setting $setting, base_setting $dependentsetting, $value, $defaultvalue = false) {
|
||||||
parent::__construct($setting, $dependentsetting, $defaultvalue);
|
parent::__construct($setting, $dependentsetting, $defaultvalue);
|
||||||
$this->value = $value;
|
$this->value = ($value)?(string)$value:0;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Processes a value change in the primary setting
|
* Processes a value change in the primary setting
|
||||||
|
@ -171,10 +181,8 @@ class setting_dependency_disabledif_equals extends setting_dependency {
|
||||||
$this->dependentsetting->set_status(base_setting::LOCKED_BY_HIERARCHY);
|
$this->dependentsetting->set_status(base_setting::LOCKED_BY_HIERARCHY);
|
||||||
$this->dependentsetting->set_value($this->defaultvalue);
|
$this->dependentsetting->set_value($this->defaultvalue);
|
||||||
} else if ($this->dependentsetting->get_status() == base_setting::LOCKED_BY_HIERARCHY) {
|
} else if ($this->dependentsetting->get_status() == base_setting::LOCKED_BY_HIERARCHY) {
|
||||||
// We can unlock the dependent setting and reset its value to the
|
// We can unlock the dependent setting
|
||||||
// last value the user had for it.
|
|
||||||
$this->dependentsetting->set_status(base_setting::NOT_LOCKED);
|
$this->dependentsetting->set_status(base_setting::NOT_LOCKED);
|
||||||
$this->dependentsetting->set_value($this->lastvalue);
|
|
||||||
}
|
}
|
||||||
// Return true if the value has changed for the dependent setting
|
// Return true if the value has changed for the dependent setting
|
||||||
return ($prevalue != $this->dependentsetting->get_value());
|
return ($prevalue != $this->dependentsetting->get_value());
|
||||||
|
@ -222,6 +230,19 @@ class setting_dependency_disabledif_equals extends setting_dependency {
|
||||||
}
|
}
|
||||||
return $changes;
|
return $changes;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Returns an array of properties suitable to be used to define a moodleforms
|
||||||
|
* disabled command
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function get_moodleform_properties() {
|
||||||
|
return array(
|
||||||
|
'setting'=>$this->dependentsetting->get_ui_name(),
|
||||||
|
'dependenton'=>$this->setting->get_ui_name(),
|
||||||
|
'condition'=>'eq',
|
||||||
|
'value'=>$this->value
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* A dependency that disables the secondary element if the primary element is
|
* A dependency that disables the secondary element if the primary element is
|
||||||
|
@ -231,10 +252,22 @@ class setting_dependency_disabledif_equals extends setting_dependency {
|
||||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
*/
|
*/
|
||||||
class setting_dependency_disabledif_checked extends setting_dependency_disabledif_equals {
|
class setting_dependency_disabledif_checked extends setting_dependency_disabledif_equals {
|
||||||
public function __construct(base_setting $setting, base_setting $dependentsetting) {
|
public function __construct(base_setting $setting, base_setting $dependentsetting, $defaultvalue = false) {
|
||||||
parent::__construct($setting, $dependentsetting, $defaultvalue = false);
|
parent::__construct($setting, $dependentsetting, true, $defaultvalue);
|
||||||
$this->value = true;
|
$this->value = true;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Returns an array of properties suitable to be used to define a moodleforms
|
||||||
|
* disabled command
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function get_moodleform_properties() {
|
||||||
|
return array(
|
||||||
|
'setting'=>$this->dependentsetting->get_ui_name(),
|
||||||
|
'dependenton'=>$this->setting->get_ui_name(),
|
||||||
|
'condition'=>'checked'
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -244,9 +277,21 @@ class setting_dependency_disabledif_checked extends setting_dependency_disabledi
|
||||||
* @copyright 2010 Sam Hemelryk
|
* @copyright 2010 Sam Hemelryk
|
||||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
*/
|
*/
|
||||||
class setting_dependency_disabledif_notchecked extends setting_dependency_disabledif_equals {
|
class setting_dependency_disabledif_not_checked extends setting_dependency_disabledif_equals {
|
||||||
public function __construct(base_setting $setting, base_setting $dependentsetting, $defaultvalue = false) {
|
public function __construct(base_setting $setting, base_setting $dependentsetting, $defaultvalue = false) {
|
||||||
parent::__construct($setting, $dependentsetting);
|
parent::__construct($setting, $dependentsetting, false, $defaultvalue);
|
||||||
$this->value = false;
|
$this->value = false;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Returns an array of properties suitable to be used to define a moodleforms
|
||||||
|
* disabled command
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function get_moodleform_properties() {
|
||||||
|
return array(
|
||||||
|
'setting'=>$this->dependentsetting->get_ui_name(),
|
||||||
|
'dependenton'=>$this->setting->get_ui_name(),
|
||||||
|
'condition'=>'notchecked'
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -110,21 +110,16 @@ abstract class backup_moodleform extends moodleform {
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function add_setting(backup_setting $setting, backup_task $task=null) {
|
function add_setting(backup_setting $setting, backup_task $task=null) {
|
||||||
if ($setting->get_status() == backup_setting::NOT_LOCKED && $setting->get_visibility() == backup_setting::VISIBLE) {
|
// First add the formatting for this setting
|
||||||
// First add the formatting for this setting
|
$this->add_html_formatting($setting);
|
||||||
$this->add_html_formatting($setting);
|
// The call the add method with the get_element_properties array
|
||||||
// The call the add method with the get_element_properties array
|
call_user_method_array('addElement', $this->_form, $setting->get_ui()->get_element_properties($task));
|
||||||
call_user_method_array('addElement', $this->_form, $setting->get_ui()->get_element_properties($task));
|
$this->_form->setDefault($setting->get_ui_name(), $setting->get_value());
|
||||||
$this->_form->setDefault($setting->get_ui_name(), $setting->get_value());
|
if ($setting->has_help()) {
|
||||||
if ($setting->has_help()) {
|
list($identifier, $component) = $setting->get_help();
|
||||||
list($identifier, $component) = $setting->get_help();
|
$this->_form->addHelpButton($setting->get_ui_name(), $identifier, $component);
|
||||||
$this->_form->addHelpButton($setting->get_ui_name(), $identifier, $component);
|
|
||||||
}
|
|
||||||
$this->_form->addElement('html', html_writer::end_tag('div'));
|
|
||||||
} else {
|
|
||||||
// Add as a fixed unchangeable setting
|
|
||||||
$this->add_fixed_setting($setting);
|
|
||||||
}
|
}
|
||||||
|
$this->_form->addElement('html', html_writer::end_tag('div'));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -221,21 +216,9 @@ abstract class backup_moodleform extends moodleform {
|
||||||
if ($basesetting == null) {
|
if ($basesetting == null) {
|
||||||
$basesetting = $setting;
|
$basesetting = $setting;
|
||||||
}
|
}
|
||||||
foreach ($setting->get_dependencies() as $dependency) {
|
// Apply all dependencies for backup
|
||||||
$dependency = $dependency->get_dependant_setting();
|
foreach ($setting->get_all_dependencies() as $dependency) {
|
||||||
switch ($basesetting->get_ui_type()) {
|
call_user_method_array('disabledIf', $this->_form, $dependency->get_moodleform_properties());
|
||||||
case backup_setting::UI_HTML_CHECKBOX :
|
|
||||||
$mform->disabledIf($dependency->get_ui_name(), $basesetting->get_ui_name(), 'notchecked');
|
|
||||||
$this->add_dependencies($dependency, $basesetting);
|
|
||||||
break;
|
|
||||||
case backup_setting::UI_HTML_DROPDOWN :
|
|
||||||
$mform->disabledIf($dependency->get_ui_name(), $basesetting->get_ui_name(), 'eq', 0);
|
|
||||||
$this->add_dependencies($dependency, $basesetting);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
debugging('Unknown backup setting type', DEBUG_DEVELOPER);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue