Merge pull request #2903 from tractorcow/pulls/fix-fileupload-fileexists

BUG Fix issues with uploading to /assets
This commit is contained in:
Simon Welsh 2014-03-15 21:02:36 +13:00
commit 279b927df1
3 changed files with 63 additions and 3 deletions

View File

@ -134,7 +134,9 @@ class Upload extends Controller {
$file = $nameFilter->filter($tmpFile['name']); $file = $nameFilter->filter($tmpFile['name']);
$fileName = basename($file); $fileName = basename($file);
$relativeFilePath = $parentFolder ? $parentFolder->getRelativePath() . "$fileName" : $fileName; $relativeFilePath = $parentFolder
? $parentFolder->getRelativePath() . "$fileName"
: ASSETS_DIR . "/" . $fileName;
// Create a new file record (or try to retrieve an existing one) // Create a new file record (or try to retrieve an existing one)
if(!$this->file) { if(!$this->file) {

View File

@ -1276,7 +1276,9 @@ class UploadField extends FileField {
// Resolve expected folder name // Resolve expected folder name
$folderName = $this->getFolderName(); $folderName = $this->getFolderName();
$folder = Folder::find_or_make($folderName); $folder = Folder::find_or_make($folderName);
$parentPath = BASE_PATH."/".$folder->getFilename(); $parentPath = $folder
? BASE_PATH."/".$folder->getFilename()
: ASSETS_PATH."/";
// check if either file exists // check if either file exists
$exists = false; $exists = false;

View File

@ -643,6 +643,45 @@ class UploadFieldTest extends FunctionalTest {
$this->assertNotContains($fileSubfolder->ID, $itemIDs, 'Does not contain file in subfolder'); $this->assertNotContains($fileSubfolder->ID, $itemIDs, 'Does not contain file in subfolder');
} }
/**
* Tests that UploadField::fileexist works
*/
public function testFileExists() {
$this->loginWithPermission('ADMIN');
// Check that fileexist works on subfolders
$nonFile = uniqid().'.txt';
$responseEmpty = $this->mockFileExists('NoRelationField', $nonFile);
$responseEmptyData = json_decode($responseEmpty->getBody());
$this->assertFalse($responseEmpty->isError());
$this->assertFalse($responseEmptyData->exists);
// Check that filexists works on root folder
$responseRoot = $this->mockFileExists('RootFolderTest', $nonFile);
$responseRootData = json_decode($responseRoot->getBody());
$this->assertFalse($responseRoot->isError());
$this->assertFalse($responseRootData->exists);
// Check that uploaded files can be detected in the root
$tmpFileName = 'testUploadBasic.txt';
$response = $this->mockFileUpload('RootFolderTest', $tmpFileName);
$this->assertFalse($response->isError());
$this->assertFileExists(ASSETS_PATH . "/$tmpFileName");
$responseExists = $this->mockFileExists('RootFolderTest', $tmpFileName);
$responseExistsData = json_decode($responseExists->getBody());
$this->assertFalse($responseExists->isError());
$this->assertTrue($responseExistsData->exists);
// Check that uploaded files can be detected
$response = $this->mockFileUpload('NoRelationField', $tmpFileName);
$this->assertFalse($response->isError());
$this->assertFileExists(ASSETS_PATH . "/UploadFieldTest/$tmpFileName");
$responseExists = $this->mockFileExists('NoRelationField', $tmpFileName);
$responseExistsData = json_decode($responseExists->getBody());
$this->assertFalse($responseExists->isError());
$this->assertTrue($responseExistsData->exists);
}
protected function getMockForm() { protected function getMockForm() {
return new Form(new Controller(), 'Form', new FieldList(), new FieldList()); return new Form(new Controller(), 'Form', new FieldList(), new FieldList());
} }
@ -717,6 +756,12 @@ class UploadFieldTest extends FunctionalTest {
); );
} }
protected function mockFileExists($fileField, $fileName) {
return $this->get(
"UploadFieldTest_Controller/Form/field/{$fileField}/fileexists?filename=".urlencode($fileName)
);
}
/** /**
* Simulates a physical file deletion * Simulates a physical file deletion
* *
@ -773,7 +818,14 @@ class UploadFieldTest extends FunctionalTest {
} }
// Remove left over folders and any files that may exist // Remove left over folders and any files that may exist
if(file_exists('../assets/UploadFieldTest')) Filesystem::removeFolder('../assets/UploadFieldTest'); if(file_exists(ASSETS_PATH.'/UploadFieldTest')) {
Filesystem::removeFolder(ASSETS_PATH.'/UploadFieldTest');
}
// Remove file uploaded to root folder
if(file_exists(ASSETS_PATH.'/testUploadBasic.txt')) {
unlink(ASSETS_PATH.'/testUploadBasic.txt');
}
} }
} }
@ -859,6 +911,9 @@ class UploadFieldTestForm extends Form implements TestOnly {
if(empty($controller)) { if(empty($controller)) {
$controller = new UploadFieldTest_Controller(); $controller = new UploadFieldTest_Controller();
} }
$fieldRootFolder = UploadField::create('RootFolderTest')
->setFolderName('/');
$fieldNoRelation = UploadField::create('NoRelationField') $fieldNoRelation = UploadField::create('NoRelationField')
->setFolderName('UploadFieldTest'); ->setFolderName('UploadFieldTest');
@ -911,6 +966,7 @@ class UploadFieldTestForm extends Form implements TestOnly {
$fieldAllowedExtensions->getValidator()->setAllowedExtensions(array('txt')); $fieldAllowedExtensions->getValidator()->setAllowedExtensions(array('txt'));
$fields = new FieldList( $fields = new FieldList(
$fieldRootFolder,
$fieldNoRelation, $fieldNoRelation,
$fieldHasOne, $fieldHasOne,
$fieldHasOneMaxOne, $fieldHasOneMaxOne,