mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 08:26: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'))));
|
||||
$this->add_setting($userfiles);
|
||||
$users->add_dependency($userfiles);
|
||||
$anonymize->add_dependency($userfiles, setting_dependency::DISABLED_TRUE);
|
||||
|
||||
// Define activitites
|
||||
$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) {
|
||||
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) {
|
||||
$this->uisetting = $ui;
|
||||
}
|
||||
|
@ -270,11 +286,19 @@ abstract class base_setting {
|
|||
if ($type == null) {
|
||||
switch ($this->vtype) {
|
||||
case self::IS_BOOLEAN :
|
||||
if ($this->get_ui_type() == self::UI_HTML_CHECKBOX) {
|
||||
if ($this->value) {
|
||||
$type = setting_dependency::DISABLED_NOT_CHECKED;
|
||||
} else {
|
||||
$type = setting_dependency::DISABLED_CHECKED;
|
||||
}
|
||||
} else {
|
||||
if ($this->value) {
|
||||
$type = setting_dependency::DISABLED_FALSE;
|
||||
} else {
|
||||
$type = setting_dependency::DISABLED_TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case self::IS_FILENAME :
|
||||
case self::IS_PATH :
|
||||
|
@ -293,13 +317,17 @@ abstract class base_setting {
|
|||
$dependency = new setting_dependency_disabledif_equals($this, $dependentsetting, $options['value'], $options['defaultvalue']);
|
||||
break;
|
||||
case setting_dependency::DISABLED_TRUE :
|
||||
case setting_dependency::DISABLED_CHECKED :
|
||||
$dependency = new setting_dependency_disabledif_equals($this, $dependentsetting, true, $options['defaultvalue']);
|
||||
break;
|
||||
case setting_dependency::DISABLED_FALSE :
|
||||
case setting_dependency::DISABLED_NOT_CHECKED :
|
||||
$dependency = new setting_dependency_disabledif_equals($this, $dependentsetting, false, $options['defaultvalue']);
|
||||
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;
|
||||
$dependency->get_dependant_setting()->register_dependent_dependency($dependency);
|
||||
|
@ -389,13 +417,16 @@ abstract class base_setting {
|
|||
return false;
|
||||
}
|
||||
|
||||
protected function get_dependencies() {
|
||||
$dependencies = array();
|
||||
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_dependencies() {
|
||||
return $this->dependencies;
|
||||
}
|
||||
return $dependencies;
|
||||
|
||||
public function get_ui_name() {
|
||||
return $this->uisetting->get_name();
|
||||
}
|
||||
|
||||
public function get_ui_type() {
|
||||
return $this->uisetting->get_type();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -38,10 +38,10 @@ abstract class setting_dependency {
|
|||
*/
|
||||
const DISABLED_VALUE = 0;
|
||||
const DISABLED_NOT_VALUE = 1;
|
||||
const DISABLED_CHECKED = 2;
|
||||
const DISABLED_TRUE = 2;
|
||||
const DISABLED_NOT_CHECKED = 3;
|
||||
const DISABLED_FALSE = 3;
|
||||
const DISABLED_CHECKED = 4;
|
||||
const DISABLED_NOT_CHECKED = 5;
|
||||
|
||||
/**
|
||||
* The parent setting (primary)
|
||||
|
@ -130,6 +130,16 @@ abstract class setting_dependency {
|
|||
public function get_dependant_setting() {
|
||||
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) {
|
||||
parent::__construct($setting, $dependentsetting, $defaultvalue);
|
||||
$this->value = $value;
|
||||
$this->value = ($value)?(string)$value:0;
|
||||
}
|
||||
/**
|
||||
* 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_value($this->defaultvalue);
|
||||
} else if ($this->dependentsetting->get_status() == base_setting::LOCKED_BY_HIERARCHY) {
|
||||
// We can unlock the dependent setting and reset its value to the
|
||||
// last value the user had for it.
|
||||
// We can unlock the dependent setting
|
||||
$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 ($prevalue != $this->dependentsetting->get_value());
|
||||
|
@ -222,6 +230,19 @@ class setting_dependency_disabledif_equals extends setting_dependency {
|
|||
}
|
||||
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
|
||||
|
@ -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
|
||||
*/
|
||||
class setting_dependency_disabledif_checked extends setting_dependency_disabledif_equals {
|
||||
public function __construct(base_setting $setting, base_setting $dependentsetting) {
|
||||
parent::__construct($setting, $dependentsetting, $defaultvalue = false);
|
||||
public function __construct(base_setting $setting, base_setting $dependentsetting, $defaultvalue = false) {
|
||||
parent::__construct($setting, $dependentsetting, true, $defaultvalue);
|
||||
$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
|
||||
* @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) {
|
||||
parent::__construct($setting, $dependentsetting);
|
||||
parent::__construct($setting, $dependentsetting, false, $defaultvalue);
|
||||
$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,7 +110,6 @@ abstract class backup_moodleform extends moodleform {
|
|||
* @return bool
|
||||
*/
|
||||
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
|
||||
$this->add_html_formatting($setting);
|
||||
// The call the add method with the get_element_properties array
|
||||
|
@ -121,10 +120,6 @@ abstract class backup_moodleform extends moodleform {
|
|||
$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);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
|
@ -221,21 +216,9 @@ abstract class backup_moodleform extends moodleform {
|
|||
if ($basesetting == null) {
|
||||
$basesetting = $setting;
|
||||
}
|
||||
foreach ($setting->get_dependencies() as $dependency) {
|
||||
$dependency = $dependency->get_dependant_setting();
|
||||
switch ($basesetting->get_ui_type()) {
|
||||
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;
|
||||
}
|
||||
// Apply all dependencies for backup
|
||||
foreach ($setting->get_all_dependencies() as $dependency) {
|
||||
call_user_method_array('disabledIf', $this->_form, $dependency->get_moodleform_properties());
|
||||
}
|
||||
}
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue