filters: MDL-7336 backup and restore of local filter settings.
This commit is contained in:
@@ -2821,6 +2821,7 @@
|
||||
function write_per_context_data($bf, $preferences, $context, $startlevel) {
|
||||
write_role_overrides_xml($bf, $context, $startlevel);
|
||||
write_role_assignments_xml($bf, $preferences, $context, $startlevel);
|
||||
write_local_filter_settings($bf, $preferences, $context, $startlevel);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2900,6 +2901,36 @@
|
||||
fwrite ($bf, end_tag("ROLES_ASSIGNMENTS", $startlevel, true));
|
||||
}
|
||||
|
||||
/**
|
||||
* Write any local filter settings for this context to the backup file.
|
||||
* They comprise On/off filter_active.active overrides, and any filter_config
|
||||
* records for this contextid.
|
||||
*/
|
||||
function write_local_filter_settings($bf, $preferences, $context, $startlevel) {
|
||||
if (!filter_context_may_have_filter_settings($context)) {
|
||||
return;
|
||||
}
|
||||
list($actives, $configs) = filter_get_all_local_settings($context->id);
|
||||
|
||||
fwrite($bf, start_tag("FILTERACTIVES", $startlevel, true));
|
||||
foreach ($actives as $active) {
|
||||
fwrite($bf, start_tag("FILTERACTIVE", $startlevel + 1, true));
|
||||
fwrite($bf, full_tag("FILTER", $startlevel + 2, false, $active->filter));
|
||||
fwrite($bf, full_tag("ACTIVE", $startlevel + 2, false, $active->active));
|
||||
fwrite($bf, end_tag("FILTERACTIVE", $startlevel + 1, true));
|
||||
}
|
||||
fwrite($bf, end_tag("FILTERACTIVES", $startlevel, true));
|
||||
|
||||
fwrite($bf, start_tag("FILTERCONFIGS", $startlevel, true));
|
||||
foreach ($configs as $config) {
|
||||
fwrite($bf, start_tag("FILTERCONFIG", $startlevel + 1, true));
|
||||
fwrite($bf, full_tag("FILTER", $startlevel + 2, false, $config->filter));
|
||||
fwrite($bf, full_tag("NAME", $startlevel + 2, false, $config->name));
|
||||
fwrite($bf, full_tag("VALUE", $startlevel + 2, false, $config->value));
|
||||
fwrite($bf, end_tag("FILTERCONFIG", $startlevel + 1, true));
|
||||
}
|
||||
fwrite($bf, end_tag("FILTERCONFIGS", $startlevel, true));
|
||||
}
|
||||
|
||||
function backup_execute(&$preferences, &$errorstr) {
|
||||
global $CFG, $DB;
|
||||
|
||||
@@ -5678,6 +5678,39 @@ define('RESTORE_GROUPS_GROUPINGS', 3);
|
||||
}
|
||||
}
|
||||
} /// ends role_overrides
|
||||
|
||||
if ($this->tree[4] == "FILTERACTIVES") {
|
||||
if ($this->level == 6) {
|
||||
switch ($tagName) {
|
||||
case "FILTER":
|
||||
$this->info->tempfilter = $this->getContents();
|
||||
break;
|
||||
case "ACTIVE":
|
||||
$this->info->filteractives[$this->info->tempfilter] = $this->getContents();
|
||||
break;
|
||||
}
|
||||
}
|
||||
} /// ends FILTERACTIVES
|
||||
|
||||
if ($this->tree[4] == "FILTERCONFIGS") {
|
||||
if ($this->level == 6) {
|
||||
switch ($tagName) {
|
||||
case "FILTER":
|
||||
$this->info->tempfilter = $this->getContents();
|
||||
break;
|
||||
case "NAME":
|
||||
$this->info->tempname = $this->getContents();
|
||||
break;
|
||||
case "VALUE":
|
||||
$fc = new stdClass;
|
||||
$fc->filter = $this->info->tempfilter;
|
||||
$fc->name = $this->info->tempfilter;
|
||||
$fc->value = $this->getContents();
|
||||
$this->info->filterconfigs[] = $fc;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} /// ends FILTERCONFIGS
|
||||
}
|
||||
|
||||
//Stop parsing if todo = COURSE_HEADER and tagName = HEADER (en of the tag, of course)
|
||||
@@ -6123,6 +6156,40 @@ define('RESTORE_GROUPS_GROUPINGS', 3);
|
||||
}
|
||||
} /// ends role_overrides
|
||||
|
||||
|
||||
if (isset($this->tree[7]) && $this->tree[7] == "FILTERACTIVES") {
|
||||
if ($this->level == 9) {
|
||||
switch ($tagName) {
|
||||
case "FILTER":
|
||||
$this->info->tempfilter = $this->getContents();
|
||||
break;
|
||||
case "ACTIVE":
|
||||
$this->info->filteractives[$this->info->tempfilter] = $this->getContents();
|
||||
break;
|
||||
}
|
||||
}
|
||||
} /// ends FILTERACTIVES
|
||||
|
||||
if (isset($this->tree[7]) && $this->tree[7] == "FILTERCONFIGS") {
|
||||
if ($this->level == 9) {
|
||||
switch ($tagName) {
|
||||
case "FILTER":
|
||||
$this->info->tempfilter = $this->getContents();
|
||||
break;
|
||||
case "NAME":
|
||||
$this->info->tempname = $this->getContents();
|
||||
break;
|
||||
case "VALUE":
|
||||
$fc = new stdClass;
|
||||
$fc->filter = $this->info->tempfilter;
|
||||
$fc->name = $this->info->tempfilter;
|
||||
$fc->value = $this->getContents();
|
||||
$this->info->filteractives[]->filter = $fc;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} /// ends FILTERCONFIGS
|
||||
|
||||
if (isset($this->tree[7]) && $this->tree[7] == "COMPLETIONDATA") {
|
||||
if($this->level == 8) {
|
||||
switch($tagName) {
|
||||
@@ -9032,6 +9099,9 @@ WHERE
|
||||
}
|
||||
}
|
||||
|
||||
// Per-context filter settings.
|
||||
restore_write_local_filter_settings($restore, $course, $newcoursecontext);
|
||||
|
||||
/*******************************************************
|
||||
* Restoring role assignments/overrdies *
|
||||
* from module level assignments *
|
||||
@@ -9058,6 +9128,8 @@ WHERE
|
||||
restore_write_roleoverrides($restore, $modoverride->overrides, $newmodcontext, $oldroleid);
|
||||
}
|
||||
}
|
||||
// Per-context filter settings.
|
||||
restore_write_local_filter_settings($restore, $mod, $newmodcontext);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9185,6 +9257,39 @@ WHERE
|
||||
assign_capability($override->capability, $override->permission, $override->roleid, $override->contextid);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write any per-context filter settings from the backup XML to the DB.
|
||||
* @param object $restore the restore we are part of.
|
||||
* @param object $data sata loaded from the XML.
|
||||
* @param object $newmodcontext the restored context object.
|
||||
*/
|
||||
function restore_write_local_filter_settings($restore, $data, $newcontext) {
|
||||
if (filter_context_may_have_filter_settings($newcontext)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$installedfilters = filter_get_all_installed();
|
||||
|
||||
if (!isset($data->filteractives)) {
|
||||
$data->filteractives = array();
|
||||
}
|
||||
foreach ($data->filteractives as $filter => $state) {
|
||||
if (isset($installedfilters[$filter])) {
|
||||
filter_set_local_state($filter, $newcontext->id, $state);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($data->filterconfigs)) {
|
||||
$data->filterconfigs = array();
|
||||
}
|
||||
foreach ($data->filterconfigs as $fc) {
|
||||
if (isset($installedfilters[$fc->filter])) {
|
||||
filter_set_local_config($fc->filter, $newcontext->id, $fc->name, $fc->value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//write activity date changes to the html log file, and update date values in the the xml array
|
||||
function restore_log_date_changes($recordtype, &$restore, &$xml, $TAGS, $NAMETAG='NAME') {
|
||||
|
||||
|
||||
@@ -586,6 +586,23 @@ function filter_get_local_config($filter, $contextid) {
|
||||
return $DB->get_records_menu('filter_config', array('filter' => $filter, 'contextid' => $contextid), '', 'name,value');
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is for use by backup. Gets all the filter information specific
|
||||
* to one context.
|
||||
* @return array with two elements. The first element is an array of objects with
|
||||
* fields filter and active. These come from the filter_active table. The
|
||||
* second element is an array of objects with fields filter, name and value
|
||||
* from the filter_config table.
|
||||
*/
|
||||
function filter_get_all_local_settings($contextid) {
|
||||
global $DB;
|
||||
$context = get_context_instance(CONTEXT_SYSTEM);
|
||||
return array(
|
||||
$DB->get_records('filter_active', array('contextid' => $contextid), 'filter', 'filter,active'),
|
||||
$DB->get_records('filter_config', array('contextid' => $contextid), 'filter,name', 'filter,name,value'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of active filters, in the order that they should be used
|
||||
* for a particular context, along with any local configuration variables.
|
||||
@@ -670,6 +687,16 @@ function filter_has_global_settings($filter) {
|
||||
return is_readable($settingspath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Certain types of context (block and user) may not have local filter settings.
|
||||
* the function checks a context to see whether it may have local config.
|
||||
* @param object $context a context.
|
||||
* @return boolean whether this context may have local filter settings.
|
||||
*/
|
||||
function filter_context_may_have_filter_settings($context) {
|
||||
return $context->contextlevel != CONTEXT_BLOCK && $context->contextlevel != CONTEXT_USER;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process phrases intelligently found within a HTML text (such as adding links)
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user