diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index 7e6ca5c4af0..912c64521ed 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -4916,5 +4916,23 @@ function xmldb_main_upgrade($oldversion) { upgrade_main_savepoint(true, 2016020201.00); } + if ($oldversion < 2016021500.00) { + $root = $CFG->tempdir . '/download'; + if (is_dir($root)) { + // Fetch each repository type - include all repos, not just enabled. + $repositories = $DB->get_records('repository', array(), '', 'type'); + + foreach ($repositories as $id => $repository) { + $directory = $root . '/repository_' . $repository->type; + if (is_dir($directory)) { + fulldelete($directory); + } + } + } + + // Main savepoint reached. + upgrade_main_savepoint(true, 2016021500.00); + } + return true; } diff --git a/repository/lib.php b/repository/lib.php index b8c3d20ecc2..1e9bb67053c 100644 --- a/repository/lib.php +++ b/repository/lib.php @@ -1663,18 +1663,16 @@ abstract class repository implements cacheable_object { } /** - * Decide where to save the file, can be overwriten by subclass + * Get a unique file path in which to save the file. + * + * The filename returned will be removed at the end of the request and + * should not be relied upon to exist in subsequent requests. * * @param string $filename file name * @return file path */ public function prepare_file($filename) { - global $CFG; - $dir = make_temp_directory('download/'.get_class($this).'/'); - while (empty($filename) || file_exists($dir.$filename)) { - $filename = uniqid('', true).'_'.time().'.tmp'; - } - return $dir.$filename; + return sprintf('%s/%s', make_request_directory(), $filename); } /** diff --git a/repository/upgrade.txt b/repository/upgrade.txt index e47ba3be344..d724dd70295 100644 --- a/repository/upgrade.txt +++ b/repository/upgrade.txt @@ -3,6 +3,12 @@ information provided here is intended especially for developers. Full details of the repository API are available on Moodle docs: http://docs.moodle.org/dev/Repository_API +=== 3.1 === + +* The prepare_file() function will now return a file in a per-request directory which will + be automatically cleaned at the end of the request. + No modifications should be required as a result of this change. + === 2.8 === * Repositories working with Moodle files must replace serialize() with json_encode() in the diff --git a/version.php b/version.php index 6b769f9afd2..231fd2404cc 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2016021100.00; // YYYYMMDD = weekly release date of this DEV branch. +$version = 2016021500.00; // YYYYMMDD = weekly release date of this DEV branch. // RR = release increments - 00 in DEV branches. // .XX = incremental changes.