From 5b76e6fc51138457c9468702edea6e28b8a142db Mon Sep 17 00:00:00 2001 From: stronk7 Date: Sat, 8 May 2004 18:30:30 +0000 Subject: [PATCH] Now every link to forums (from resources and forums) and every link to resources (from resources and forums) are re-encoded in backup/restore. I could reduce the code size but for now I prefer to have it this looong form to clarify what it's doing. Please, test, test and test... --- backup/STATUS.txt | 16 ++- backup/version.php | 2 +- mod/forum/restorelib.php | 35 ++++++ mod/resource/backuplib.php | 14 +++ mod/resource/restorelib.php | 225 ++++++++++++++++++++++++++++++++++++ 5 files changed, 286 insertions(+), 6 deletions(-) diff --git a/backup/STATUS.txt b/backup/STATUS.txt index 6af982b3ce..5fe7caffd1 100644 --- a/backup/STATUS.txt +++ b/backup/STATUS.txt @@ -126,9 +126,9 @@ Backup Details: - Modify the backup frontend..............................NOT EXISTS - Modify the backup of course_sections and course_modules.NOT EXISTS - Modify every module backuplib to work properly..........NOT EXISTS - - Encode every possible internal link........................IN PROGRESS + - Encode every possible internal link........................DONE - Links to forums.........................................DONE - - Links to resources......................................NOT EXISTS + - Links to resources......................................DONE Restore Details: =============== - Delete old entries at restore start........................DONE @@ -245,11 +245,17 @@ Restore Details: - From database...........................................DONE - From filesystem.........................................DONE - Upload backup files........................................DONE - - Decode every possible internal link........................IN PROGRESS - - Links to forums.........................................IN PROGRESS + - Decode every possible internal link........................DONE + - Links to forums.........................................DONE + - From forums (post->message)..........................DONE + - From forums (forum->intro)...........................DONE + - From resources (resource->summary)...................DONE + - From resources (resource->alltext)...................DONE + - Links to resources......................................DONE - From forums (post->message)..........................DONE + - From forums (forum->intro)...........................DONE + - From resources (resource->summary)...................DONE - From resources (resource->alltext)...................DONE - - Links to resources......................................NOT EXISTS ========== ========== ========== =========== =========== =========== === diff --git a/backup/version.php b/backup/version.php index e9799d1fa7..b17aa23813 100644 --- a/backup/version.php +++ b/backup/version.php @@ -5,6 +5,6 @@ // database (backup_version) to determine whether upgrades should // be performed (see db/backup_*.php) -$backup_version = 2004050800; // The current version is a date (YYYYMMDDXX) +$backup_version = 2004050801; // The current version is a date (YYYYMMDDXX) $backup_release = "1.3 development"; // User-friendly version number diff --git a/mod/forum/restorelib.php b/mod/forum/restorelib.php index 234a45927a..d09764a377 100644 --- a/mod/forum/restorelib.php +++ b/mod/forum/restorelib.php @@ -951,6 +951,41 @@ } } + //RESOURCE: Decode every RESOURCE (summary) in the coure + + //Check we are restoring resources + if ($restore->mods['resource']->restore == 1) { + //Get all course resources + if ($resources = get_records_sql ("SELECT r.id, r.summary + FROM {$CFG->prefix}resource r + WHERE r.course = $restore->course_id")) { + //Iterate over each resource->summary + $i = 0; //Counter to send some output to the browser to avoid timeouts + foreach ($resources as $resource) { + //Increment counter + $i++; + $content = $resource->summary; + $result = forum_decode_content_links($content,$restore); + if ($result != $content) { + //Update record + $resource->summary = addslashes($result); + $status = update_record("resource",$resource); + if ($CFG->debug>7) { + echo "

".$content."
changed to
".$result."

"; + } + } + //Do some output + if (($i+1) % 5 == 0) { + echo "."; + if (($i+1) % 100 == 0) { + echo "
"; + } + backup_flush(300); + } + } + } + } + echo ""; return $status; } diff --git a/mod/resource/backuplib.php b/mod/resource/backuplib.php index 61e63b5a18..fb8c8e5dce 100644 --- a/mod/resource/backuplib.php +++ b/mod/resource/backuplib.php @@ -57,10 +57,24 @@ return $info; } + //Return a content encoded to support interactivities linking. Every module + //should have its own. They are called automatically from the backup procedure. + function resource_encode_content_links ($content,$preferences) { + global $CFG; + + $base = preg_quote($CFG->wwwroot,"/"); + //Link to the list of resources + $buscar="/(".$base."\/mod\/resource\/index.php\?id\=)([0-9]+)/"; + $result= preg_replace($buscar,'$@RESOURCEINDEX*$2@$',$content); + //Link to resource view by moduleid + $buscar="/(".$base."\/mod\/resource\/view.php\?id\=)([0-9]+)/"; + $result= preg_replace($buscar,'$@RESOURCEVIEWBYID*$2@$',$result); + return $result; + } // INTERNAL FUNCTIONS. BASED IN THE MOD STRUCTURE diff --git a/mod/resource/restorelib.php b/mod/resource/restorelib.php index f57296e1dd..f80a6bd60c 100644 --- a/mod/resource/restorelib.php +++ b/mod/resource/restorelib.php @@ -68,6 +68,231 @@ return $status; } + //Return a content decoded to support interactivities linking. Every module + //should have its own. They are called automatically from + //resource_decode_content_links_caller() function in each module + //in the restore process + function resource_decode_content_links ($content,$restore) { + + global $CFG; + + $result = $content; + + //Link to the list of resources + + $searchstring='/\$@(RESOURCEINDEX)\*([0-9]+)@\$/'; + //We look for it + preg_match_all($searchstring,$content,$foundset); + //If found, then we are going to look for its new id (in backup tables) + if ($foundset[0]) { + //print_object($foundset); //Debug + //Iterate over foundset[2]. They are the old_ids + foreach($foundset[2] as $old_id) { + //We get the needed variables here (course id) + $rec = backup_getid($restore->backup_unique_code,"course",$old_id); + //Personalize the searchstring + $searchstring='/\$@(RESOURCEINDEX)\*('.$old_id.')@\$/'; + //If it is a link to this course, update the link to its new location + if($rec->new_id) { + //Now replace it + $result= preg_replace($searchstring,$CFG->wwwroot.'/mod/resource/index.php?id='.$rec->new_id,$result); + } else { + //It's a foreign link so leave it as original + $result= preg_replace($searchstring,$restore->original_wwwroot.'/mod/resource/index.php?id='.$old_id,$result); + } + } + } + + //Link to resource view by moduleid + + $searchstring='/\$@(RESOURCEVIEWBYID)\*([0-9]+)@\$/'; + //We look for it + preg_match_all($searchstring,$result,$foundset); + //If found, then we are going to look for its new id (in backup tables) + if ($foundset[0]) { + //print_object($foundset); //Debug + //Iterate over foundset[2]. They are the old_ids + foreach($foundset[2] as $old_id) { + //We get the needed variables here (course_modules id) + $rec = backup_getid($restore->backup_unique_code,"course_modules",$old_id); + //Personalize the searchstring + $searchstring='/\$@(RESOURCEVIEWBYID)\*('.$old_id.')@\$/'; + //If it is a link to this course, update the link to its new location + if($rec->new_id) { + //Now replace it + $result= preg_replace($searchstring,$CFG->wwwroot.'/mod/resource/view.php?id='.$rec->new_id,$result); + } else { + //It's a foreign link so leave it as original + $result= preg_replace($searchstring,$restore->original_wwwroot.'/mod/resource/view.php?id='.$old_id,$result); + } + } + } + + return $result; + } + + //This function makes all the necessary calls to xxxx_decode_content_links() + //function in each module, 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. It's called from restore_decode_content_links() + //function in restore process + function resource_decode_content_links_caller($restore) { + + global $CFG; + + $status = true; + + echo ""; + return $status; + } + + //This function returns a log record with all the necessay transformations //done. It's used by restore_log_module() to restore modules log. function resource_restore_logs($restore,$log) { -- 2.39.5