Skip to content

Commit

Permalink
MDL-32862 - Backup: Rewriting resource_old links on backup.
Browse files Browse the repository at this point in the history
  • Loading branch information
abgreeve committed Sep 6, 2013
1 parent ee78814 commit a3b2df6
Showing 1 changed file with 61 additions and 4 deletions.
Expand Up @@ -33,6 +33,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
*/
Expand All @@ -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 a3b2df6

Please sign in to comment.