mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
BUGFIX: Handle filename deduping when uploading of double-barrelled extensions and files ending in numbers better. (from r99818)
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@105531 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
d00d876efe
commit
c193d27f31
@ -212,8 +212,7 @@ class Folder extends File {
|
|||||||
if(!is_array($tmpFile)) {
|
if(!is_array($tmpFile)) {
|
||||||
user_error("Folder::addUploadToFolder() Not passed an array. Most likely, the form hasn't got the right enctype", E_USER_ERROR);
|
user_error("Folder::addUploadToFolder() Not passed an array. Most likely, the form hasn't got the right enctype", E_USER_ERROR);
|
||||||
}
|
}
|
||||||
|
if(!isset($tmpFile['size'])) {
|
||||||
if(!$tmpFile['size']) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,19 +231,34 @@ class Folder extends File {
|
|||||||
$file = $this->RelativePath . $file;
|
$file = $this->RelativePath . $file;
|
||||||
Filesystem::makeFolder(dirname("$base/$file"));
|
Filesystem::makeFolder(dirname("$base/$file"));
|
||||||
|
|
||||||
while(file_exists("$base/$file")) {
|
$doubleBarrelledExts = array('.gz', '.bz', '.bz2');
|
||||||
$i = isset($i) ? ($i+1) : 2;
|
|
||||||
|
$ext = "";
|
||||||
|
if(preg_match('/^(.*)(\.[^.]+)$/', $file, $matches)) {
|
||||||
|
$file = $matches[1];
|
||||||
|
$ext = $matches[2];
|
||||||
|
// Special case for double-barrelled
|
||||||
|
if(in_array($ext, $doubleBarrelledExts) && preg_match('/^(.*)(\.[^.]+)$/', $file, $matches)) {
|
||||||
|
$file = $matches[1];
|
||||||
|
$ext = $matches[2] . $ext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$origFile = $file;
|
||||||
|
|
||||||
|
$i = 1;
|
||||||
|
while(file_exists("$base/$file$ext")) {
|
||||||
|
$i++;
|
||||||
$oldFile = $file;
|
$oldFile = $file;
|
||||||
$file = ereg_replace('[0-9]*(\.[^.]+$)',$i . '\\1', $file);
|
$file = "$origFile-$i";
|
||||||
if($oldFile == $file && $i > 2) user_error("Couldn't fix $file with $i", E_USER_ERROR);
|
if($oldFile == $file && $i > 2) user_error("Couldn't fix $file$ext with $i", E_USER_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (move_uploaded_file($tmpFile['tmp_name'], "$base/$file")) {
|
if (move_uploaded_file($tmpFile['tmp_name'], "$base/$file$ext")) {
|
||||||
// Update with the new image
|
// Update with the new image
|
||||||
return $this->constructChild(basename($file));
|
return $this->constructChild(basename($file . $ext));
|
||||||
} else {
|
} else {
|
||||||
if(!file_exists($tmpFile['tmp_name'])) user_error("Folder::addUploadToFolder: '$tmpFile[tmp_name]' doesn't exist", E_USER_ERROR);
|
if(!file_exists($tmpFile['tmp_name'])) user_error("Folder::addUploadToFolder: '$tmpFile[tmp_name]' doesn't exist", E_USER_ERROR);
|
||||||
else user_error("Folder::addUploadToFolder: Couldn't copy '$tmpFile[tmp_name]' to '$base/$file'", E_USER_ERROR);
|
else user_error("Folder::addUploadToFolder: Couldn't copy '$tmpFile[tmp_name]' to '$base/$file$ext'", E_USER_ERROR);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user