From: skodak Date: Tue, 19 Feb 2008 13:04:04 +0000 (+0000) Subject: MDL-11586 rewritten file name collision handling in upload manager - files without... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=94ba6c906c9db8f769927f7378083f517d44f530;p=moodle.git MDL-11586 rewritten file name collision handling in upload manager - files without extension, fixed increments if file name contains _123 already; merged from MOODLE_19_STABLE --- diff --git a/lib/uploadlib.php b/lib/uploadlib.php index ea3422f450..190058c512 100644 --- a/lib/uploadlib.php +++ b/lib/uploadlib.php @@ -298,28 +298,37 @@ class upload_manager { * Handles filename collisions - if the desired filename exists it will rename it according to the pattern in $format * @param string $destination Destination directory (to check existing files against) * @param object $file Passed in by reference. The current file from $files we're processing. - * @param string $format The printf style format to rename the file to (defaults to filename_number.extn) - * @return string The new filename. - * @todo verify return type - this function does not appear to return anything since $file is passed in by reference + * @return void - modifies &$file parameter. */ - function handle_filename_collision($destination, &$file, $format='%s_%d.%s') { - $part1 = explode('.', $file['name']); - $bits = array(); - $bits[1] = array_pop($part1); - $bits[0] = implode('.', $part1); - // check for collisions and append a nice numberydoo. - if (file_exists($destination .'/'. $file['name'])) { - $a->oldname = $file['name']; - for ($i = 1; true; $i++) { - $try = sprintf($format, $bits[0], $i, $bits[1]); - if ($this->check_before_renaming($destination, $try, $file)) { - $file['name'] = $try; - break; - } - } - $a->newname = $file['name']; - $file['uploadlog'] .= "\n". get_string('uploadrenamedcollision','moodle', $a); + function handle_filename_collision($destination, &$file) { + if (!file_exists($destination .'/'. $file['name'])) { + return; + } + + $parts = explode('.', $file['name']); + if (count($parts) > 1) { + $extension = '.'.array_pop($parts); + $name = implode('.', $parts); + } else { + $extension = ''; + $name = $file['name']; + } + + $current = 0; + if (preg_match('/^(.*)_(\d*)$/s', $name, $matches)) { + $name = $matches[1]; + $current = (int)$matches[2]; + } + $i = $current + 1; + + while (!$this->check_before_renaming($destination, $name.'_'.$i.$extension, $file)) { + $i++; } + $a = new object(); + $a->oldname = $file['name']; + $file['name'] = $name.'_'.$i.$extension; + $a->newname = $file['name']; + $file['uploadlog'] .= "\n". get_string('uploadrenamedcollision','moodle', $a); } /**