API Make storage path configurable. Fix instance singleton and remove static methods

This commit is contained in:
Robbie Averill 2017-05-17 16:24:25 +12:00
parent 03fe480ca5
commit 283f9fff7a
14 changed files with 245 additions and 217 deletions

12
_config/config.yml Normal file
View File

@ -0,0 +1,12 @@
---
Name: dmsconfig
---
SiteTree:
extensions:
- DMSSiteTreeExtension
# Whether to show the document sets tab in the CMS for the page type this extension is applied to
documents_enabled: true
HtmlEditorField_Toolbar:
extensions:
- DocumentHtmlEditorFieldToolbar

View File

@ -6,15 +6,5 @@ Director:
rules:
'dmsdocument/$ID' : 'DMSDocument_Controller'
SiteTree:
extensions:
- DMSSiteTreeExtension
# Whether to show the document sets tab in the CMS for the page type this extension is applied to
documents_enabled: true
HtmlEditorField_Toolbar:
extensions:
- DocumentHtmlEditorFieldToolbar
DMSDocument_versions:
enable_versions: true

View File

@ -1,21 +1,30 @@
<?php
class DMS implements DMSInterface
class DMS extends Object implements DMSInterface
{
/**
* Folder to store the documents in
*
* @config
* @var string
*/
public static $dmsFolder = 'dms-assets';
private static $folder_name = 'assets/_dmsassets';
/**
* How many documents to store in a single folder. The square of this number is the maximum number of documents.
*
* The number should be a multiple of 10
*
* @config
* @var int
*/
public static $dmsFolderSize = 1000;
private static $folder_size = 1000;
/**
* Singleton instance of a DMSInterface
*
* @var DMSInterface
*/
private static $instance;
/**
* The shortcode handler key. Can be changed by user code.
@ -27,44 +36,56 @@ class DMS implements DMSInterface
/**
* Factory method that returns an instance of the DMS. This could be any class that implements the DMSInterface.
* @static
*
* @return DMSInterface An instance of the Document Management System
*/
public static function inst()
{
$dmsPath = self::get_dms_path();
if (!self::$instance) {
self::$instance = new static();
$dms = new DMS();
if (!is_dir($dmsPath)) {
self::create_storage_folder($dmsPath);
$dmsPath = self::$instance->getStoragePath();
if (!is_dir($dmsPath)) {
self::$instance->createStorageFolder($dmsPath);
}
if (!file_exists($dmsPath . DIRECTORY_SEPARATOR . '.htaccess')) {
// Restrict access to the storage folder
copy(
BASE_PATH . DIRECTORY_SEPARATOR . DMS_DIR . DIRECTORY_SEPARATOR
. 'resources' . DIRECTORY_SEPARATOR . '.htaccess',
$dmsPath . DIRECTORY_SEPARATOR . '.htaccess'
);
copy(
BASE_PATH . DIRECTORY_SEPARATOR . DMS_DIR . DIRECTORY_SEPARATOR
. 'resources' . DIRECTORY_SEPARATOR . 'web.config',
$dmsPath . DIRECTORY_SEPARATOR . 'web.config'
);
}
}
if (!file_exists($dmsPath . DIRECTORY_SEPARATOR . '.htaccess')) {
// Restrict access to the storage folder
copy(
BASE_PATH . DIRECTORY_SEPARATOR . DMS_DIR . DIRECTORY_SEPARATOR
. 'resources' . DIRECTORY_SEPARATOR . '.htaccess',
$dmsPath . DIRECTORY_SEPARATOR . '.htaccess'
);
copy(
BASE_PATH . DIRECTORY_SEPARATOR . DMS_DIR . DIRECTORY_SEPARATOR
. 'resources' . DIRECTORY_SEPARATOR . 'web.config',
$dmsPath . DIRECTORY_SEPARATOR . 'web.config'
);
}
return $dms;
return self::$instance;
}
/**
* Get the storage path for DMS documents
*
* @return string
*/
public static function get_dms_path()
public function getStoragePath()
{
return BASE_PATH . DIRECTORY_SEPARATOR . self::$dmsFolder;
return BASE_PATH . DIRECTORY_SEPARATOR . $this->config()->get('folder_name');
}
public static function transform_file_to_file_path($file)
/**
* Gets a file path from either a File or a string
*
* @param string|File $file
* @return string
* @throws FileNotFoundException If an unexpected value was provided, or the filename was null
*/
public function transformFileToFilePath($file)
{
//confirm we have a file
$filePath = null;
@ -84,16 +105,16 @@ class DMS implements DMSInterface
/**
* Takes a File object or a String (path to a file) and copies it into the DMS. The original file remains unchanged.
* When storing a document, sets the fields on the File has "tag" metadata.
* @param $file File object, or String that is path to a file to store,
* @param File|string $file File object, or String that is path to a file to store,
* e.g. "assets/documents/industry/supplied-v1-0.pdf"
* @return DMSDocument
*/
public function storeDocument($file)
{
$filePath = self::transform_file_to_file_path($file);
$filePath = $this->transformFileToFilePath($file);
//create a new document and get its ID
$doc = new DMSDocument();
// Create a new document and get its ID
$doc = DMSDocument::create();
$doc->write();
$doc->storeDocument($filePath);
@ -156,22 +177,26 @@ class DMS implements DMSInterface
/**
* Creates a storage folder for the given path
* @param $path Path to create a folder for
*
* @param string $path Path to create a folder for
* @return $this
*/
public static function create_storage_folder($path)
public function createStorageFolder($path)
{
if (!is_dir($path)) {
mkdir($path, 0777);
mkdir($path, 0777, true);
}
return $this;
}
/**
* Calculates the storage path from a database DMSDocument ID
*
* @return int
*/
public static function get_storage_folder($id)
public function getStorageFolder($id)
{
$folderName = intval($id / self::$dmsFolderSize);
return $folderName;
return intval($id / self::config()->get('folder_size'));
}
/**

View File

@ -667,7 +667,8 @@ class DMSDocument extends DataObject implements DMSDocumentInterface
public function getFullPath()
{
if ($this->Filename) {
return DMS::get_dms_path() . DIRECTORY_SEPARATOR . $this->Folder . DIRECTORY_SEPARATOR . $this->Filename;
return DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR
. $this->Folder . DIRECTORY_SEPARATOR . $this->Filename;
}
return null;
@ -712,7 +713,7 @@ class DMSDocument extends DataObject implements DMSDocumentInterface
*/
public function getStorageFolder()
{
return DMS::get_dms_path() . DIRECTORY_SEPARATOR . DMS::get_storage_folder($this->ID);
return DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . DMS::inst()->getStorageFolder($this->ID);
}
/**
@ -770,7 +771,7 @@ class DMSDocument extends DataObject implements DMSDocumentInterface
/**
* Relate an existing file on the filesystem to the document.
*
* Copies the file to the new destination, as defined in {@link get_DMS_path()}.
* Copies the file to the new destination, as defined in {@link DMS::getStoragePath()}.
*
* @param string $filePath Path to file, relative to webroot.
*
@ -785,10 +786,10 @@ class DMSDocument extends DataObject implements DMSDocumentInterface
// calculate all the path to copy the file to
$fromFilename = basename($filePath);
$toFilename = $this->ID. '~' . $fromFilename; //add the docID to the start of the Filename
$toFolder = DMS::get_storage_folder($this->ID);
$toPath = DMS::get_dms_path() . DIRECTORY_SEPARATOR . $toFolder . DIRECTORY_SEPARATOR . $toFilename;
$toFolder = DMS::inst()->getStorageFolder($this->ID);
$toPath = DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $toFolder . DIRECTORY_SEPARATOR . $toFilename;
DMS::create_storage_folder(DMS::get_dms_path() . DIRECTORY_SEPARATOR . $toFolder);
DMS::inst()->createStorageFolder(DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $toFolder);
//copy the file into place
$fromPath = BASE_PATH . DIRECTORY_SEPARATOR . $filePath;
@ -832,7 +833,7 @@ class DMSDocument extends DataObject implements DMSDocumentInterface
*/
public function replaceDocument($file)
{
$filePath = DMS::transform_file_to_file_path($file);
$filePath = DMS::inst()->transformFileToFilePath($file);
$doc = $this->storeDocument($filePath); // replace the document
return $doc;

View File

@ -179,7 +179,7 @@ class DMSDocument_versions extends DataObject
if (!$filename) {
$filename = $this->Filename;
}
return DMS::get_dms_path() . DIRECTORY_SEPARATOR . $this->Folder . DIRECTORY_SEPARATOR . $filename;
return DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $this->Folder . DIRECTORY_SEPARATOR . $filename;
}
/**

View File

@ -23,6 +23,12 @@ having a Document Set intermediary (@todo Add a build task for this).
* `DMSDocumentAddController::add_allowed_extensions` removed, use YAML configuration `DMSDocumentAddController::allowed_extensions` instead
* `DMSInterface` (and `DMS`) are stricter in the `getByPage` method, enforcing a `SiteTree` type hint
* New method `DMSInterface::getDocumentSetsByPage` (and in `DMS`)
* `DMS::$dmsFolder` removed, use YAML configuration `DMS.folder_name` instead
* `DMS::$dmsFolderSize` removed, use YAML configuration `DMS.folder_size` instead
* `DMS::get_dms_path` made non-static, use `DMS::inst()->getStoragePath()` instead
* `DMS::transform_file_to_file_path` made non-static, use `DMS::inst()->transformFileToFilePath()` instead
* `DMS::create_storage_folder` made non-static, use `DMS::inst()->createStorageFolder()` instead
* `DMS::get_storage_folder` made non-static, use `DMS::inst()->getStorageFolder()` instead
## Template changes

View File

@ -1,6 +1,20 @@
# Configuration
The file location is set via the `DMS::$dmsFolder` static, and points to a location in the webroot.
The file location is set via the `DMS.folder_name` configuation property, and points to a location in the webroot. By
default, this resides in an underscores folder within the assets folder. This means that automated snapshots/backups
(e.g. using [sspak](https://github.com/silverstripe/sspak)) can still handle DMS documents, but they will not show up
when navigating asset folders in the CMS.
## Changing the default storage folder
You can change the default storage folder location using YAML configuration. This folder would be relative to your
project root directory:
```yaml
DMS:
folder_name: my-custom-folder
```
## Enable/disable documents/sets for a specific page type

View File

@ -5,7 +5,7 @@
*/
class DMSDocumentControllerTest extends SapphireTest
{
protected static $fixture_file = "dmstest.yml";
protected static $fixture_file = 'dmstest.yml';
/**
* Test that the download behaviour is either "open" or "download"
@ -16,7 +16,7 @@ class DMSDocumentControllerTest extends SapphireTest
*/
public function testDownloadBehaviourOpen($behaviour, $expectedDisposition)
{
DMS::$dmsFolder = DMS_DIR; //sneakily setting the DMS folder to the folder where the test file lives
Config::inst()->update('DMS', 'folder_name', 'assets/_unit-test-123');
$this->logInWithPermission('ADMIN');
@ -33,15 +33,16 @@ class DMSDocumentControllerTest extends SapphireTest
})
);
$openDoc = new DMSDocument();
$openDoc->Filename = "DMS-test-lorum-file.pdf";
$openDoc->Folder = "tests";
$openDoc = DMS::inst()->storeDocument('dms/tests/DMS-test-lorum-file.pdf');
$openDoc->DownloadBehavior = $behaviour;
$openDoc->clearEmbargo(false);
$openDoc->write();
$request = new SS_HTTPRequest('GET', 'index/' . $openDoc->ID);
$request->match('index/$ID');
$controller->index($request);
DMSFilesystemTestHelper::delete('assets/_unit-test-123');
}
/**

View File

@ -3,22 +3,6 @@ class DMSDocumentTest extends SapphireTest
{
protected static $fixture_file = 'dmstest.yml';
public function tearDownOnce()
{
self::$is_running_test = true;
$d = DataObject::get('DMSDocument');
foreach ($d as $d1) {
$d1->delete();
}
$t = DataObject::get('DMSTag');
foreach ($t as $t1) {
$t1->delete();
}
self::$is_running_test = $this->originalIsRunningTest;
}
public function testDefaultDownloadBehabiourCMSFields()
{
$document = singleton('DMSDocument');
@ -259,4 +243,35 @@ class DMSDocumentTest extends SapphireTest
$d2 = $this->objFromFixture('DMSDocument', 'd2');
$this->assertSame('File That Doesn\'t Exist (Title)', $d2->getTitle());
}
/**
* Ensure that the folder a document's file is stored in can be retrieved, and that delete() will also delete
* the file and the record
*/
public function testGetStorageFolderThenDelete()
{
Config::inst()->update('DMS', 'folder_name', 'assets/_unit-tests');
$document = DMS::inst()->storeDocument('dms/tests/DMS-test-lorum-file.pdf');
$filename = $document->getStorageFolder() . '/' . $document->getFileName();
$this->assertTrue(file_exists($filename));
$document->delete();
$this->assertFalse($document->exists());
$this->assertFalse(file_exists($filename));
DMSFilesystemTestHelper::delete('assets/_unit-tests');
}
/**
* Ensure that the description can be returned in HTML format
*/
public function testGetDescriptionWithLineBreak()
{
$document = DMSDocument::create();
$document->Description = "Line 1\nLine 2\nLine 3";
$document->write();
$this->assertSame("Line 1<br />\nLine 2<br />\nLine 3", $document->getDescriptionWithLineBreak());
}
}

View File

@ -1,23 +1,7 @@
<?php
class DMSEmbargoTest extends SapphireTest
{
public static $fixture_file = "dmsembargotest.yml";
public function tearDownOnce()
{
self::$is_running_test = true;
$d = DataObject::get("DMSDocument");
foreach ($d as $d1) {
$d1->delete();
}
$t = DataObject::get("DMSTag");
foreach ($t as $t1) {
$t1->delete();
}
self::$is_running_test = $this->originalIsRunningTest;
}
protected static $fixture_file = 'dmsembargotest.yml';
public function createFakeHTTPRequest($id)
{
@ -28,13 +12,10 @@ class DMSEmbargoTest extends SapphireTest
public function testBasicEmbargo()
{
$oldDMSFolder = DMS::$dmsFolder;
$oldTestMode = DMSDocument_Controller::$testMode;
DMS::$dmsFolder = DMS_DIR; //sneakily setting the DMS folder to the folder where the test file lives
Config::inst()->update('DMS', 'folder_name', 'assets/_unit-test-123');
$doc = new DMSDocument();
$doc->Filename = "DMS-test-lorum-file.pdf";
$doc->Folder = "tests";
$doc = DMS::inst()->storeDocument('dms/tests/DMS-test-lorum-file.pdf');
$doc->CanViewType = 'LoggedInUsers';
$docID = $doc->write();
@ -42,24 +23,24 @@ class DMSEmbargoTest extends SapphireTest
$controller = new DMSDocument_Controller();
DMSDocument_Controller::$testMode = true;
$result = $controller->index($this->createFakeHTTPRequest($docID));
$this->assertEquals($doc->getFullPath(), $result, "Correct underlying file returned (in test mode)");
$this->assertEquals($doc->getFullPath(), $result, 'Correct underlying file returned (in test mode)');
$doc->embargoIndefinitely();
$this->logInWithPermission('ADMIN');
$result = $controller->index($this->createFakeHTTPRequest($docID));
$this->assertEquals($doc->getFullPath(), $result, "Admins can still download embargoed files");
$this->assertEquals($doc->getFullPath(), $result, 'Admins can still download embargoed files');
$this->logInWithPermission('random-user-group');
$result = $controller->index($this->createFakeHTTPRequest($docID));
$this->assertNotEquals(
$doc->getFullPath(),
$result,
"File no longer returned (in test mode) when switching to other user group"
'File no longer returned (in test mode) when switching to other user group'
);
DMS::$dmsFolder = $oldDMSFolder;
DMSDocument_Controller::$testMode = $oldTestMode;
DMSFilesystemTestHelper::delete('assets/_unit-test-123');
}
public function testEmbargoIndefinitely()

View File

@ -0,0 +1,42 @@
<?php
class DMSFilesystemTestHelper
{
/**
* Files that are added to the DMS asset directory by the DMS instance. They will be removed after running tests.
*
* @var array
*/
protected static $dmsFiles = array('.htaccess', 'web.config');
/**
* Deletes a directory and all files within it, or a file. Will automatically prepend the base path.
*
* This only work while a unit test is running for safety reasons.
*
* @param string $path
*/
public static function delete($path)
{
if (!SapphireTest::is_running_test() || !file_exists($path)) {
return false;
}
$path = BASE_PATH . DIRECTORY_SEPARATOR . $path;
if (is_dir($path)) {
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($files as $fileinfo) {
$action = $fileinfo->isDir() ? 'rmdir' : 'unlink';
$action($fileinfo->getRealPath());
}
rmdir($path);
} else {
unlink($path);
}
}
}

View File

@ -9,6 +9,8 @@ class DMSShortcodeTest extends SapphireTest
{
public function testShortcodeOperation()
{
Config::inst()->update('DMS', 'folder_name', 'assets/_unit-test-123');
$file = 'dms/tests/DMS-test-lorum-file.pdf';
$document = DMS::inst()->storeDocument($file);
@ -23,5 +25,7 @@ class DMSShortcodeTest extends SapphireTest
$this->assertStringEndsWith("/dmsdocument/$document->ID", $link->getAttribute('href'));
$this->assertEquals($document->getExtension(), $link->getAttribute('data-ext'));
$this->assertEquals($document->getFileSizeFormatted(), $link->getAttribute('data-size'));
DMSFilesystemTestHelper::delete('assets/_unit-test-123');
}
}

View File

@ -5,86 +5,46 @@ class DMSTest extends FunctionalTest
/**
* Stub PDF files for testing
*
* @var string
*/
public static $testFile = 'dms/tests/DMS-test-lorum-file.pdf';
public static $testFile2 = 'dms/tests/DMS-test-document-2.pdf';
/**
* Store values to reset back to after this test runs
* The test folder to write assets into
*
* @var string
*/
public static $dmsFolderOld;
public static $dmsFolderSizeOld;
protected $testDmsPath = 'assets/_dms-assets-test-1234';
/**
* @var DMS
* @var DMSInterace
*/
protected $dms;
/**
* Use a test DMS folder, so we don't overwrite the live one, and clear it out in case of previous broken tests
*
* {@inheritDoc}
*/
public function setUp()
{
parent::setUp();
self::$dmsFolderOld = DMS::$dmsFolder;
self::$dmsFolderSizeOld = DMS::$dmsFolderSize;
//use a test DMS folder, so we don't overwrite the live one
DMS::$dmsFolder = 'dms-assets-test-1234';
//clear out the test folder (in case a broken test doesn't delete it)
$this->delete(BASE_PATH . DIRECTORY_SEPARATOR . 'dms-assets-test-1234');
Config::inst()->update('DMS', 'folder_name', $this->testDmsPath);
DMSFilesystemTestHelper::delete($this->testDmsPath);
$this->dms = DMS::inst();
}
/**
* Delete the test folder after the test runs
*
* {@inheritDoc}
*/
public function tearDown()
{
parent::tearDown();
self::$is_running_test = true;
$d = DataObject::get("DMSDocument");
foreach ($d as $d1) {
$d1->delete();
}
$t = DataObject::get("DMSTag");
foreach ($t as $t1) {
$t1->delete();
}
//delete the test folder after the test runs
$this->delete(BASE_PATH . DIRECTORY_SEPARATOR . 'dms-assets-test-1234');
//set the old DMS folder back again
DMS::$dmsFolder = self::$dmsFolderOld;
DMS::$dmsFolderSize = self::$dmsFolderSizeOld;
self::$is_running_test = $this->originalIsRunningTest;
}
/**
* Delete a file that was created during a unit test
*
* @param string $path
*/
public function delete($path)
{
if (file_exists($path) || is_dir($path)) {
$it = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($it as $file) {
if (in_array($file->getBasename(), array('.', '..'))) {
continue;
} elseif ($file->isDir()) {
rmdir($file->getPathname());
} elseif ($file->isFile() || $file->isLink()) {
unlink($file->getPathname());
}
}
rmdir($path);
}
DMSFilesystemTestHelper::delete($this->testDmsPath);
}
public function testDMSStorage()
@ -95,7 +55,7 @@ class DMSTest extends FunctionalTest
$this->assertNotNull($document, "Document object created");
$this->assertTrue(
file_exists(
DMS::get_dms_path() . DIRECTORY_SEPARATOR . $document->Folder
DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $document->Folder
. DIRECTORY_SEPARATOR . $document->Filename
),
"Document file copied into DMS folder"
@ -104,7 +64,7 @@ class DMSTest extends FunctionalTest
public function testDMSFolderSpanning()
{
DMS::$dmsFolderSize = 5;
Config::inst()->update('DMS', 'folder_size', 5);
$file = self::$testFile;
$documents = array();
@ -128,7 +88,10 @@ class DMSTest extends FunctionalTest
// Test we created 4 folder to contain the 17 files
foreach ($folders as $f) {
$this->assertTrue(is_dir(DMS::get_dms_path() . DIRECTORY_SEPARATOR . $f), "Document folder '$f' exists");
$this->assertTrue(
is_dir(DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $f),
"Document folder '$f' exists"
);
}
}
@ -146,7 +109,7 @@ class DMSTest extends FunctionalTest
$this->assertNotNull($document, "Document object created");
$this->assertTrue(
file_exists(
DMS::get_dms_path() . DIRECTORY_SEPARATOR . $document->Folder
DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $document->Folder
. DIRECTORY_SEPARATOR . $document->Filename
),
"Document file copied into DMS folder"

View File

@ -10,74 +10,48 @@ class DMSVersioningTest extends SapphireTest
public static $testFile = 'dms/tests/DMS-test-lorum-file.pdf';
public static $testFile2 = 'dms/tests/DMS-test-document-2.pdf';
/**
* The test folder to write assets into
*
* @var string
*/
protected $testDmsPath = 'assets/_dms-assets-test-versions';
/**
* Store values to reset back to after this test runs
*/
public static $dmsFolderOld;
public static $dmsFolderSizeOld;
public static $dmsEnableVersionsOld;
/**
* Use a test DMS folder, so we don't overwrite the live one, and clear out the test folder (in case a broken
* test doesn't delete it)
*
* {@inheritDoc}
*/
public function setUp()
{
parent::setUp();
self::$dmsFolderOld = DMS::$dmsFolder;
self::$dmsFolderSizeOld = DMS::$dmsFolderSize;
self::$dmsEnableVersionsOld = DMSDocument_versions::$enable_versions;
DMSDocument_versions::$enable_versions = true;
//use a test DMS folder, so we don't overwrite the live one
DMS::$dmsFolder = 'dms-assets-test-versions';
//clear out the test folder (in case a broken test doesn't delete it)
$this->delete(BASE_PATH . DIRECTORY_SEPARATOR . 'dms-assets-test-versions');
}
public function tearDown()
{
$d = DataObject::get("DMSDocument");
foreach ($d as $d1) {
$d1->delete();
}
$t = DataObject::get("DMSTag");
foreach ($t as $t1) {
$t1->delete();
}
// Delete the test folder after the test runs
$this->delete(BASE_PATH . DIRECTORY_SEPARATOR . 'dms-assets-test-versions');
parent::tearDown();
// Set the old DMS folder back again
DMS::$dmsFolder = self::$dmsFolderOld;
DMS::$dmsFolderSize = self::$dmsFolderSizeOld;
DMSDocument_versions::$enable_versions = self::$dmsEnableVersionsOld;
Config::inst()->update('DMS', 'folder_name', $this->testDmsPath);
DMSFilesystemTestHelper::delete($this->testDmsPath);
}
/**
* Delete a file that was created during a unit test
* Delete the test folder after the tests run
*
* @param string $path
* {@inheritDoc}
*/
public function delete($path)
public function tearDown()
{
if (file_exists($path) || is_dir($path)) {
$it = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($it as $file) {
if (in_array($file->getBasename(), array('.', '..'))) {
continue;
} elseif ($file->isDir()) {
rmdir($file->getPathname());
} elseif ($file->isFile() || $file->isLink()) {
unlink($file->getPathname());
}
}
rmdir($path);
}
parent::tearDown();
DMSFilesystemTestHelper::delete($this->testDmsPath);
// Set the old DMS folder back again
DMSDocument_versions::$enable_versions = self::$dmsEnableVersionsOld;
}
public function testDMSVersionStorage()
@ -91,7 +65,7 @@ class DMSVersioningTest extends SapphireTest
$this->assertNotNull($document, "Document object created");
$this->assertTrue(
file_exists(
DMS::get_dms_path() . DIRECTORY_SEPARATOR . $document->Folder
DMS::inst()->getStoragePath() . DIRECTORY_SEPARATOR . $document->Folder
. DIRECTORY_SEPARATOR . $document->Filename
),
"Document file copied into DMS folder"