diff --git a/mod/data/db/upgrade.php b/mod/data/db/upgrade.php index 8983a9ba67d..5608e7ac336 100644 --- a/mod/data/db/upgrade.php +++ b/mod/data/db/upgrade.php @@ -344,6 +344,94 @@ function xmldb_data_upgrade($oldversion) { // Moodle v2.2.0 release upgrade line // Put any upgrade step following this + if ($oldversion < 2011112902) { + // Check if there is a directory containing any old presets. + $olddatadir = $CFG->dataroot . '/data'; + $oldpresetdir = "$olddatadir/preset"; + if (file_exists($oldpresetdir)) { + // Get directory contents. + $userfolders = new DirectoryIterator($oldpresetdir); + // Store the system context, these are site wide presets. + $context = get_system_context(); + // Create file storage object. + $fs = get_file_storage(); + // Create array of accepted files. + $arracceptedfilenames = array('singletemplate.html', 'listtemplateheader.html', 'listtemplate.html', + 'listtemplatefooter.html', 'addtemplate.html', 'rsstemplate.html', + 'rsstitletemplate.html', 'csstemplate.css', 'jstemplate.js', + 'asearchtemplate.html', 'preset.xml'); + // Loop through all the folders, they should represent userids. + foreach ($userfolders as $userfolder) { + // If it is a file, skip it. + if ($userfolder->isFile()) { + continue; + } + // The folder name should represent the user id. + $userid = $userfolder->getFilename(); + // Skip if it is not numeric. + if (!is_numeric($userid)) { + continue; + } + // Skip if the number does not correspond to a user (does not matter if user was deleted). + if (!$DB->record_exists('user', array('id' => $userid))) { + continue; + } + // Open this folder. + $presetfolders = new DirectoryIterator("$oldpresetdir/$userid"); + foreach ($presetfolders as $presetfolder) { + // If it is a file, skip it. + if ($presetfolder->isFile()) { + continue; + } + // Save the name of the preset. + $presetname = $presetfolder->getFilename(); + // Get the files in this preset folder. + $presetfiles = new DirectoryIterator("$oldpresetdir/$userid/$presetname"); + // Now we want to get the contents of the presets. + foreach ($presetfiles as $file) { + // If it is not a file, skip it. + if (!$file->isFile()) { + continue; + } + // Set the filename. + $filename = $file->getFilename(); + // If it is not in the array of accepted file names skip it. + if (!in_array($filename, $arracceptedfilenames)) { + continue; + } + // Store the full file path. + $fullfilepath = "$oldpresetdir/$userid/$presetname/$filename"; + // Create file record. + $filerecord = array('contextid' => $context->id, + 'component' => 'mod_data', + 'filearea' => 'site_presets', + 'itemid' => 0, + 'filename' => $filename, + 'userid' => $userid); + // Check to ensure it does not already exists in the file directory. + if (!$fs->file_exists($context->id, 'mod_data', 'site_presets', 0, '/' . $presetfolder . '/', $filename)) { + $filerecord['filepath'] = '/' . $presetfolder . '/'; + } else { + $filerecord['filepath'] = '/' . $presetfolder . '_' . $userid . '_old/'; + } + $fs->create_file_from_pathname($filerecord, $fullfilepath); + // Remove the file. + @unlink($fullfilepath); + } + // Remove the preset directory. + @rmdir("$oldpresetdir/$userid/$presetname"); + } + // Remove the user directory. + @rmdir("$oldpresetdir/$userid"); + } + // Remove the final directories. + @rmdir("$oldpresetdir"); + @rmdir("$olddatadir"); + } + + upgrade_mod_savepoint(true, 2011112902, 'data'); + } + return true; } diff --git a/mod/data/version.php b/mod/data/version.php index e2220380bd5..0533c03eb08 100644 --- a/mod/data/version.php +++ b/mod/data/version.php @@ -25,7 +25,7 @@ defined('MOODLE_INTERNAL') || die(); -$module->version = 2011112901; // The current module version (Date: YYYYMMDDXX) +$module->version = 2011112902; // The current module version (Date: YYYYMMDDXX) $module->requires = 2011112900; // Requires this Moodle version $module->component = 'mod_data'; // Full name of the plugin (used for diagnostics) $module->cron = 0;