Permalink
Browse files

MDL-32862 - Backup: Rewriting resource_old links on backup.

  • Loading branch information...
1 parent d883550 commit 769bef0ee09a76935ce2269e75960d5a48cdc645 @abgreeve abgreeve committed Sep 6, 2013
Showing with 61 additions and 4 deletions.
  1. +61 −4 mod/resource/backup/moodle2/backup_resource_activity_task.class.php
@@ -34,6 +34,11 @@
class backup_resource_activity_task extends backup_activity_task {
/**
+ * @param bool $resourceoldexists True if there are records in the resource_old table.
+ */
+ protected static $resourceoldexists = null;
+
+ /**
* No specific settings for this activity
*/
protected function define_my_settings() {
@@ -57,14 +62,66 @@ static public function encode_content_links($content) {
$base = preg_quote($CFG->wwwroot,"/");
- // Link to the list of resources
+ // Link to the list of resources.
$search="/(".$base."\/mod\/resource\/index.php\?id\=)([0-9]+)/";
$content= preg_replace($search, '$@RESOURCEINDEX*$2@$', $content);
- // Link to resource view by moduleid
- $search="/(".$base."\/mod\/resource\/view.php\?id\=)([0-9]+)/";
- $content= preg_replace($search, '$@RESOURCEVIEWBYID*$2@$', $content);
+ // Link to resource view by moduleid.
+ $search = "/(".$base."\/mod\/resource\/view.php\?id\=)([0-9]+)/";
+ // Link to resource view by recordid
+ $search2 = "/(".$base."\/mod\/resource\/view.php\?r\=)([0-9]+)/";
+
+ // Check whether there are contents in the resource old table.
+ if (static::$resourceoldexists === null) {
+ static::$resourceoldexists = $DB->record_exists('resource_old', array());
+ }
+
+ // If there are links to items in the resource_old table, rewrite them to be links to the correct URL
+ // for their new module.
+ if (static::$resourceoldexists) {
+ // Match all of the resources.
+ $result = preg_match_all($search, $content, $matches, PREG_PATTERN_ORDER);
+
+ // Course module ID resource links.
+ if ($result) {
+ list($insql, $params) = $DB->get_in_or_equal($matches[2]);
+ $oldrecs = $DB->get_records_select('resource_old', "cmid $insql", $params, '', 'cmid, newmodule');
+
+ for ($i = 0; $i < count($matches[0]); $i++) {
+ $cmid = $matches[2][$i];
+ if (isset($oldrecs[$cmid])) {
+ // Resource_old item, rewrite it
+ $replace = '$@' . strtoupper($oldrecs[$cmid]->newmodule) . 'VIEWBYID*' . $cmid . '@$';
+ } else {
+ // Not in the resource old table, don't rewrite
+ $replace = '$@RESOURCEVIEWBYID*'.$cmid.'@$';
+ }
+ $content = str_replace($matches[0][$i], $replace, $content);
+ }
+ }
+
+ $matches = null;
+ $result = preg_match_all($search2, $content, $matches, PREG_PATTERN_ORDER);
+
+ // No resource links.
+ if (!$result) {
+ return $content;
+ }
+ // Resource ID links.
+ list($insql, $params) = $DB->get_in_or_equal($matches[2]);
+ $oldrecs = $DB->get_records_select('resource_old', "oldid $insql", $params, '', 'oldid, cmid, newmodule');
+ for ($i = 0; $i < count($matches[0]); $i++) {
+ $recordid = $matches[2][$i];
+ if (isset($oldrecs[$recordid])) {
+ // Resource_old item, rewrite it
+ $replace = '$@' . strtoupper($oldrecs[$recordid]->newmodule) . 'VIEWBYID*' . $oldrecs[$recordid]->cmid . '@$';
+ $content = str_replace($matches[0][$i], $replace, $content);
+ }
+ }
+ } else {
+ $content = preg_replace($search, '$@RESOURCEVIEWBYID*$2@$', $content);
+ }
return $content;
}
}

0 comments on commit 769bef0

Please sign in to comment.