mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
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:
parent
8b11599917
commit
b1300f7c49
@ -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;
|
||||
}
|
||||
|
50
tests/model/FolderTest.php
Normal file
50
tests/model/FolderTest.php
Normal 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'
|
||||
);
|
||||
}
|
||||
}
|
||||
?>
|
Loading…
Reference in New Issue
Block a user