ENHANCEMENT Creating filesystem node in Folder->onBeforeWrite() (moved from AssetAdmin->add())

ENHANCEMENT Setting default folder title in Folder->populateDefaults()

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@92563 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Ingo Schommer 2009-11-21 02:33:33 +00:00
parent 8b11599917
commit b1300f7c49
2 changed files with 83 additions and 1 deletions

View File

@ -10,6 +10,38 @@ class Folder extends File {
static $plural_name = "Folders";
function populateDefaults() {
parent::populateDefaults();
if(!$this->Name) $this->Name = _t('AssetAdmin.NEWFOLDER',"NewFolder");
}
function onBeforeWrite() {
// Ensure folders can't contain path information, just a name
$this->Name = basename($this->Name);
// Get the folder to be created
if($this->ParentID) {
if(!is_numeric($this->ParentID)) $this->ParentID = 0;
$parentObj = DataObject::get_by_id($this->class, $this->ParentID);
}
// TODO Check that the $parentObj matches the ASSETS_PATH
if(isset($parentObj->ID)) $path = $parentObj->FullPath . $this->Name;
else $path = ASSETS_PATH . '/' . $this->Name;
// Ensure uniqueness
$i = 2;
$basePath = $path . '-';
while(file_exists($path)) {
$path = $basePath . $i;
$i++;
}
Filesystem::makeFolder($path);
parent::onBeforeWrite();
}
/*
* Find the given folder or create it, recursively.
*
@ -31,7 +63,7 @@ class Folder extends File {
$item->Name = $part;
$item->Title = $part;
$item->write();
if(!file_exists($item->getFullPath())) mkdir($item->getFullPath(),Filesystem::$folder_create_mask);
if(!file_exists($item->getFullPath())) Filesystem::makeFolder($item->getFullPath());
}
$parentID = $item->ID;
}

View File

@ -0,0 +1,50 @@
<?php
class FolderTest extends SapphireTest {
protected $orig = array();
function testFilesystemFolderIsCreatedOnFirstWrite() {
$parentFolder = new Folder();
$parentFolder->Name = '__FolderTest';
$parentFolder->write();
$this->assertEquals(
$parentFolder->getFullPath(),
ASSETS_PATH . '/' . $parentFolder->Name . '/',
'Folder record creates matching path on filesystem on first write'
);
$this->assertFileExists(
$parentFolder->getFullPath(),
'Folder record without ParentID creates a folder in the $base_dir on filesystem on first write'
);
$childFolder = new Folder();
$childFolder->ParentID = $parentFolder->ID;
$childFolder->Name = 'child';
$childFolder->write();
$this->assertEquals(
$childFolder->getFullPath(),
ASSETS_PATH . '/' . $parentFolder->Name . '/' . $childFolder->Name . '/',
'Folder record creates matching path on filesystem on first write'
);
$this->assertFileExists(
$childFolder->getFullPath(),
'Folder record without ParentID creates a folder on filesystem on first write'
);
}
function testFolderNameCantDuplicate() {
$folder = new Folder();
$folder->Name = 'myfolder';
$folder->write();
$folder2 = new Folder();
$folder2->Name = 'myfolder';
$folder2->write();
$this->assertNotEquals(
$folder->Name,
$folder2->Name,
'Folder write renames to avoid duplicates on filesystem'
);
}
}
?>