createStorageFolder(self::$dmsPath); return $dms; } /** * 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. E.g: filename, path, etc. all become * single-value tags on the Document. * @param $file File object, or String that is path to a file to store * @return DMSDocumentInstance Document object that we just created */ function storeDocument($file) { //confirm we have a file $fromPath = null; if (is_string($file)) $fromPath = $file; elseif (is_object($file) && $file->is_a("File")) $fromPath = $file->Filename; if (!$fromPath) throw new FileNotFoundException(); //create a new document and get its ID $doc = new DMSDocument(); $docID = $doc->write(); //calculate all the path to copy the file to $fromFilename = basename($fromPath); $toFilename = $docID . '~' . $fromFilename; //add the docID to the start of the Filename $toFolder = self::getStorageFolder($docID); $toPath = $toFolder . DIRECTORY_SEPARATOR . $toFilename; $this->createStorageFolder($toFolder); //copy the file into place copy($fromPath, self::$dmsPath . DIRECTORY_SEPARATOR . $toPath); //write the filename of the stored document $doc->Filename = $toPath; $doc->write(); //set an initial title for the document from the filename $doc->addTag('title', $fromFilename, false); return $doc; } /** * * Returns a number of Document objects based on the a search by tags. You can search by category alone, * by tag value alone, or by both. I.e: getByTag("fruits",null); getByTag(null,"banana"); getByTag("fruits","banana") * @param null $category The metadata category to search for * @param null $value The metadata value to search for * @param bool $showEmbargoed Boolean that specifies if embargoed documents should be included in results * @return DocumentInterface */ function getByTag($category = null, $value = null, $showEmbargoed = false) { // TODO: Implement getByTag() method. } /** * Returns a number of Document objects that match a full-text search of the Documents and their contents * (if contents is searchable and compatible search module is installed - e.g. FullTextSearch module) * @param $searchText String to search for * @param bool $showEmbargoed Boolean that specifies if embargoed documents should be included in results * @return DocumentInterface */ function getByFullTextSearch($searchText, $showEmbargoed = false) { // TODO: Implement getByFullTextSearch() method. } /** * Returns a list of Document objects associated with a Page * @param $page SiteTree to fetch the associated Documents from * @param bool $showEmbargoed Boolean that specifies if embargoed documents should be included in results * @return DataList Document list associated with the Page */ function getByPage($page, $showEmbargoed = false) { // TODO: Implement getByPage() method. } /** * Creates a storage folder for the given path * @param $path Path to create a folder for */ protected function createStorageFolder($path) { if (!is_dir($path)) { mkdir($path, 0777); } } /** * Calculates the storage path from a database DMSDocument ID */ static function getStorageFolder($id) { $folderName = intval($id / self::$dmsFolderSize); return self::$dmsPath . DIRECTORY_SEPARATOR . $folderName; } }