silverstripe-textextraction/code/extractors/FileTextExtractor.php
2012-08-27 11:31:53 +02:00

67 lines
1.7 KiB
PHP

<?php
/**
* A decorator for File or a subclass that provides a method for extracting full-text from the file's external contents.
* @author mstephens
*
*/
abstract class FileTextExtractor extends Object {
/**
* Set priority from 0-100.
* The highest priority extractor for a given content type will be selected.
*
* @var int
*/
public static $priority = 50;
protected static $sorted_extractor_classes = null;
/**
* @param String $path
* @return FileTextExtractor
*/
static function for_file($path) {
$extension = pathinfo($path, PATHINFO_EXTENSION);
if (!self::$sorted_extractor_classes) {
// Generate the sorted list of extractors on demand.
$classes = ClassInfo::subclassesFor("FileTextExtractor");
array_shift($classes);
$sortedClasses = array();
foreach($classes as $class) $sortedClasses[$class] = Object::get_static($class, 'priority');
arsort($sortedClasses);
self::$sorted_extractor_classes = $sortedClasses;
}
foreach(self::$sorted_extractor_classes as $className => $priority) {
$formatter = new $className();
if(in_array($extension, $formatter->supportedExtensions())) {
return $formatter;
}
}
}
/**
* Checks if the extractor is supported on the current environment,
* for example if the correct binaries or libraries are available.
*
* @return boolean
*/
abstract function isAvailable();
/**
* Return an array of content types that the extractor can handle.
* @return unknown_type
*/
abstract function supportedExtensions();
/**
* Given a file path, extract the contents as text.
*
* @param $path
* @return unknown_type
*/
abstract function getContent($path);
}
class FileTextExtractor_Exception extends Exception {}