From: stronk7 Date: Sat, 24 Jan 2009 00:40:32 +0000 (+0000) Subject: MDL-17835 backup & restore - encode/decode content links from/to course formats info. X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=d45b28ef3d93d1a77045fbbb25cff102fa7fc919;p=moodle.git MDL-17835 backup & restore - encode/decode content links from/to course formats info. Credit goes to Mark Nielsen. Thanks! ; merged from 19_STABLE --- diff --git a/backup/backuplib.php b/backup/backuplib.php index 655244ec63..47a00a91ea 100644 --- a/backup/backuplib.php +++ b/backup/backuplib.php @@ -2314,7 +2314,7 @@ //It does this conversions: // - $CFG->wwwroot/file.php/courseid ------------------> $@FILEPHP@$ (slasharguments links) // - $CFG->wwwroot/file.php?file=/courseid ------------> $@FILEPHP@$ (non-slasharguments links) - // - Every module xxxx_encode_content_links() is executed too + // - Every module/block/course_format xxxx_encode_content_links() is executed too // function backup_encode_absolute_links($content) { global $CFG,$preferences, $DB; @@ -2372,6 +2372,25 @@ } } + // For the current course format call its encode_content_links method (if it exists) + static $format_function_name; + if (!isset($format_function_name)) { + $format_function_name = false; + if ($format = $DB->get_field('course','format', array('id'=>$mypreferences->backup_course))) { + if (file_exists("$CFG->dirroot/course/format/$format/backuplib.php")) { + include_once("$CFG->dirroot/course/format/$format/backuplib.php"); + $function_name = $format.'_encode_format_content_links'; + if (function_exists($function_name)) { + $format_function_name = $function_name; + } + } + } + } + // If the above worked - then we have a function to call + if ($format_function_name) { + $result = $format_function_name($result, $mypreferences); + } + // For each block, call its encode_content_links method. // This encodes forexample links to blocks/something/viewphp?id=666 // that are stored in other activities. diff --git a/backup/restorelib.php b/backup/restorelib.php index d88370cbd3..53ca90da13 100644 --- a/backup/restorelib.php +++ b/backup/restorelib.php @@ -81,7 +81,7 @@ define('RESTORE_GROUPS_GROUPINGS', 3); } //This function makes all the necessary calls to xxxx_decode_content_links_caller() - //function in each module, passing them the desired contents to be decoded + //function in each module/block/course format..., passing them the desired contents to be decoded //from backup format to destination site/course in order to mantain inter-activities //working in the backup/restore process function restore_decode_content_links($restore) { @@ -148,6 +148,23 @@ define('RESTORE_GROUPS_GROUPINGS', 3); } } + // For the course format call its decode_content_links method (if it exists) + $format = $DB->get_field('course','format', array('id'=>$restore->course_id)); + if (file_exists("$CFG->dirroot/course/format/$format/restorelib.php")) { + include_once("$CFG->dirroot/course/format/$format/restorelib.php"); + $function_name = $format.'_decode_format_content_links_caller'; + + if (function_exists($function_name)) { + if (!defined('RESTORE_SILENTLY')) { + echo "
  • ".get_string ("from")." ".get_string("format").' '.$format; + } + $status = $function_name($restore); + if (!defined('RESTORE_SILENTLY')) { + echo '
  • '; + } + } + } + // Process all html text also in blocks too if (!defined('RESTORE_SILENTLY')) { echo '
  • '.get_string ('from').' '.get_string('blocks'); @@ -186,7 +203,7 @@ define('RESTORE_GROUPS_GROUPINGS', 3); //its task is to ask all modules (maybe other linkable objects) to restore //links to them. function restore_decode_content_links_worker($content,$restore) { - global $DB; + global $CFG, $DB; foreach($restore->mods as $name => $info) { $function_name = $name."_decode_content_links"; @@ -195,6 +212,25 @@ define('RESTORE_GROUPS_GROUPINGS', 3); } } + // For the current format, call decode_format_content_links if it exists + static $format_function_name; + if (!isset($format_function_name)) { + $format_function_name = false; + if ($format = $DB->get_field('course','format', array('id'=>$restore->course_id))) { + if (file_exists("$CFG->dirroot/course/format/$format/restorelib.php")) { + include_once("$CFG->dirroot/course/format/$format/restorelib.php"); + $function_name = $format.'_decode_format_content_links'; + if (function_exists($function_name)) { + $format_function_name = $function_name; + } + } + } + } + // If the above worked - then we have a function to call + if ($format_function_name) { + $content = $format_function_name($content, $restore); + } + // For each block, call its encode_content_links method static $blockobjects = null; if (!isset($blockobjects)) {