mirror of
https://github.com/silverstripe/silverstripe-textextraction
synced 2024-10-22 11:06:00 +02:00
977c4e49c9
Makes coupling to File objects optional, by choosing to use the FileTextExtractable extension.
43 lines
1.3 KiB
PHP
43 lines
1.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Decorate File or a File derivative to enable text extraction from the file content. Uses a set of subclasses of
|
|
* FileTextExtractor to do the extraction based on the content type of the file.
|
|
*
|
|
* Adds an additional property which is the cached contents, which is populated on demand.
|
|
*
|
|
* @author mstephens
|
|
*
|
|
*/
|
|
class FileTextExtractable extends DataExtension {
|
|
|
|
static $db = array(
|
|
'FileContentCache' => 'Text'
|
|
);
|
|
|
|
/**
|
|
* Tries to parse the file contents if a FileTextExtractor class exists to handle the file type, and returns the text.
|
|
* The value is also cached into the File record itself.
|
|
*
|
|
* @param $forceParse If false, the file content is only parsed on demand. If true, the content parsing is forced, bypassing the
|
|
* cached version
|
|
* @return String
|
|
*/
|
|
function extractFileAsText($forceParse = false) {
|
|
if (!$forceParse && $this->owner->FileContentCache) return $this->owner->FileContentCache;
|
|
|
|
// Determine which extractor can process this file.
|
|
$extractor = FileTextExtractor::for_file($this->owner->FullPath);
|
|
if (!$extractor) return null;
|
|
|
|
$text = $extractor->getContent($this->owner->FullPath);
|
|
if (!$text) return null;
|
|
|
|
$this->owner->FileContentCache = $text;
|
|
$this->owner->write();
|
|
|
|
return $text;
|
|
}
|
|
}
|
|
|
|
?>
|