From 6a404486093ff61923fca25355ad774b307ab2c9 Mon Sep 17 00:00:00 2001 From: Julian Seidenberg Date: Fri, 27 Jul 2012 14:02:46 +1200 Subject: [PATCH] API-CHANGE: refactoring to support replace document functionality --- code/DMS.php | 42 +++++++++++++--------------------- code/DMSDocument.php | 38 ++++++++++++++++++++++++++++-- tests/DMS-test-document-2.pdf | Bin 0 -> 15710 bytes tests/DMSDocumentTest.php | 2 +- tests/DMSTagTest.php | 10 +++++--- tests/DMSTest.php | 20 ++++++++++++++++ 6 files changed, 80 insertions(+), 32 deletions(-) create mode 100644 tests/DMS-test-document-2.pdf diff --git a/code/DMS.php b/code/DMS.php index 0eadad3..47d6274 100644 --- a/code/DMS.php +++ b/code/DMS.php @@ -23,6 +23,17 @@ class DMS implements DMSInterface { return $dms; } + function transformFileToFilePath($file) { + //confirm we have a file + $filePath = null; + if (is_string($file)) $filePath = $file; + elseif (is_object($file) && $file->is_a("File")) $filePath = $file->Filename; + + if (!$filePath) throw new FileNotFoundException(); + + return $filePath; + } + /** * 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. @@ -30,35 +41,14 @@ class DMS implements DMSInterface { */ function storeDocument($file) { - //confirm we have a file - $filePath = null; - if (is_string($file)) $filePath = $file; - elseif (is_object($file) && $file->is_a("File")) $filePath = $file->Filename; - - if (!$filePath) throw new FileNotFoundException(); + $filePath = self::transformFileToFilePath($file); //create a new document and get its ID $modelClass = $this->modelClass; - $doc = new $modelClass(); - $docID = $doc->write(); - - //calculate all the path to copy the file to - $fromFilename = basename($filePath); - $toFilename = $docID . '~' . $fromFilename; //add the docID to the start of the Filename - $toFolder = self::getStorageFolder($docID); - $toPath = self::$dmsPath . DIRECTORY_SEPARATOR . $toFolder . DIRECTORY_SEPARATOR . $toFilename; - $this->createStorageFolder(self::$dmsPath . DIRECTORY_SEPARATOR . $toFolder); - - //copy the file into place - $fromPath = BASE_PATH . DIRECTORY_SEPARATOR . $filePath; - copy($fromPath, $toPath); - - //write the filename of the stored document - $doc->Filename = $toFilename; - $doc->Folder = $toFolder; - $doc->Title=$fromFilename; - + $doc = new $modelClass($this); $doc->write(); + $doc->storeDocument($filePath); + return $doc; } @@ -109,7 +99,7 @@ class DMS implements DMSInterface { /** * Calculates the storage path from a database DMSDocument ID */ - static function getStorageFolder($id) { + function getStorageFolder($id) { $folderName = intval($id / self::$dmsFolderSize); return $folderName; } diff --git a/code/DMSDocument.php b/code/DMSDocument.php index 3d3cfc3..8b9e386 100644 --- a/code/DMSDocument.php +++ b/code/DMSDocument.php @@ -5,7 +5,7 @@ class DMSDocument extends DataObject implements DMSDocumentInterface { "Folder" => "Varchar(255)", // eg. 0 "Title" => 'Varchar(1024)', // eg. "Energy Saving Report for Year 2011, New Zealand LandCorp" "Description" => 'Text', - "LastChanged" => 'SS_DateTime' //when this document was created or last replaced (small changes like updating title don't count) + "LastChanged" => 'SS_DateTime' //when this document's file was created or last replaced (small changes like updating title don't count) ); static $many_many = array( @@ -13,6 +13,12 @@ class DMSDocument extends DataObject implements DMSDocumentInterface { 'Tags' => 'DMSTag' ); + protected $dms; //this DMSDocument's associated DMS instance + + function __construct($dms = null) { + $this->dms = $dms; + } + /** * Associates this document with a Page. This method does nothing if the association already exists. * This could be a simple wrapper around $myDoc->Pages()->add($myPage) to add a many_many relation @@ -327,6 +333,32 @@ class DMSDocument extends DataObject implements DMSDocumentInterface { parent::delete(); } + function storeDocument($filePath) { + if (empty($this->ID)) user_error("Document must be written to database before it can store documents",E_USER_ERROR); + if (empty($dms) || !(is_a($dms, 'DMS'))) user_error("You need to provide a DMS object when storing a document",E_USER_ERROR); + + //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 = $this->dms->getStorageFolder($this->ID); + $toPath = DMS::$dmsPath . DIRECTORY_SEPARATOR . $toFolder . DIRECTORY_SEPARATOR . $toFilename; + $this->dms->createStorageFolder(DMS::$dmsPath . DIRECTORY_SEPARATOR . $toFolder); + + //copy the file into place + $fromPath = BASE_PATH . DIRECTORY_SEPARATOR . $filePath; + copy($fromPath, $toPath); //this will overwrite the existing file (if present) + + //write the filename of the stored document + $this->Filename = $toFilename; + $this->Folder = $toFolder; + if (empty($this->Title)) $this->Title = $fromFilename; //don't overwrite existing document titles + $this->LastChanged = SS_Datetime::now()->Rfc2822(); + + $this->write(); + + return $this; + } + /** * Takes a File object or a String (path to a file) and copies it into the DMS, replacing the original document file * but keeping the rest of the document unchanged. @@ -334,7 +366,9 @@ class DMSDocument extends DataObject implements DMSDocumentInterface { * @return DMSDocumentInstance Document object that we replaced the file in */ function replaceDocument($file) { - // TODO: Implement replace() method. + $filePath = $this->dms->transformFileToFilePath($file); + $doc = $this->storeDocument($filePath); //replace the document + return $doc; } } \ No newline at end of file diff --git a/tests/DMS-test-document-2.pdf b/tests/DMS-test-document-2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b32495ee7a21103a6b47373266562ab9af89aee8 GIT binary patch literal 15710 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'SiteTree','s2'); $s3 = $this->objFromFixture('SiteTree','s3'); - $doc = new DMSDocument(); + $doc = new DMSDocument(DMS::getDMSInstance()); $doc->Filename = "test file"; $doc->Folder = "0"; $doc->write(); diff --git a/tests/DMSTagTest.php b/tests/DMSTagTest.php index 7dade60..4ccff29 100644 --- a/tests/DMSTagTest.php +++ b/tests/DMSTagTest.php @@ -15,7 +15,9 @@ class DMSTagTest extends SapphireTest { } function testAddingTags() { - $doc = new DMSDocument(); + $dms = DMS::getDMSInstance(); + + $doc = new DMSDocument($dms); $doc->Filename = "test file"; $doc->Folder = "0"; $doc->write(); @@ -32,7 +34,7 @@ class DMSTagTest extends SapphireTest { $this->assertTrue(in_array("banana",$fruits),"correct fruit tags returned"); //sneakily create another document and link one of the tags to that, too - $doc2 = new DMSDocument(); + $doc2 = new DMSDocument($dms); $doc2->Filename = "sneaky file"; $doc2->Folder = "0"; $doc2->write(); @@ -61,7 +63,9 @@ class DMSTagTest extends SapphireTest { } function testRemovingTags() { - $doc = new DMSDocument(); + $dms = DMS::getDMSInstance(); + + $doc = new DMSDocument($dms); $doc->Filename = "test file"; $doc->Folder = "0"; $doc->write(); diff --git a/tests/DMSTest.php b/tests/DMSTest.php index 4a72db6..11df6df 100644 --- a/tests/DMSTest.php +++ b/tests/DMSTest.php @@ -2,6 +2,7 @@ class DMSTest extends SapphireTest { static $testFile = 'dms/tests/DMS-test-lorum-file.pdf'; + static $testFile2 = 'dms/tests/DMS-test-document-2.pdf'; //store values to reset back to after this test runs static $dmsFolderOld; @@ -96,5 +97,24 @@ class DMSTest extends SapphireTest { } } + function testReplaceDocument() { + $dms = DMS::getDMSInstance(); + + //store the first document + $document = $dms->storeDocument(self::$testFile); + $document->Title = "My custom title"; + $document->Description = "My custom description"; + $document->write(); + + //then overwrite with a second document + $document = $document->replaceDocument(self::$testFile2); + + $this->assertNotNull($document, "Document object created"); + $this->assertTrue(file_exists(DMS::$dmsPath . DIRECTORY_SEPARATOR . $document->Folder . DIRECTORY_SEPARATOR . $document->Filename),"Document file copied into DMS folder"); + $this->assertContains($document->Filename, "DMS-test-document-2", "Original document filename is contain in the new filename"); + $this->assertEquals($document->Title, "My custom title", "Custom title not modified"); + $this->assertEquals($document->Description, "My custom description", "Custom description not modified"); + } + } \ No newline at end of file