Browse files

ENHANCEMENT Creating filesystem node in Folder->onBeforeWrite() (move…

…d 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
  • Loading branch information...
1 parent 8b11599 commit b1300f7c493be1cde9b328841d50ac88fc652950 @chillu chillu committed Nov 21, 2009
Showing with 83 additions and 1 deletion.
  1. +33 −1 filesystem/Folder.php
  2. +50 −0 tests/model/FolderTest.php
View
34 filesystem/Folder.php
@@ -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 @@ static function findOrMake($folderPath) {
$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
50 tests/model/FolderTest.php
@@ -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'
+ );
+ }
+}
+?>

0 comments on commit b1300f7

Please sign in to comment.