mirror of
				https://git.code.sf.net/p/seeddms/code
				synced 2025-10-31 13:18:06 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			115 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Implementation of conversion manager
 | |
|  *
 | |
|  * @category   DMS
 | |
|  * @package    SeedDMS
 | |
|  * @license    GPL 2
 | |
|  * @version    @version@
 | |
|  * @author     Uwe Steinmann <uwe@steinmann.cx>
 | |
|  * @copyright  Copyright (C) 2021 Uwe Steinmann
 | |
|  * @version    Release: @package_version@
 | |
|  */
 | |
| 
 | |
| require_once("inc/inc.ClassConversionServiceExec.php");
 | |
| require_once("inc/inc.ClassConversionServiceImageToImage.php");
 | |
| require_once("inc/inc.ClassConversionServiceImageToText.php");
 | |
| require_once("inc/inc.ClassConversionServicePdfToImage.php");
 | |
| require_once("inc/inc.ClassConversionServiceTextToText.php");
 | |
| require_once("inc/inc.ClassConversionServiceTextToImage.php");
 | |
| 
 | |
| /**
 | |
|  * Implementation of conversion manager
 | |
|  *
 | |
|  * @category   DMS
 | |
|  * @package    SeedDMS
 | |
|  * @author     Uwe Steinmann <uwe@steinmann.cx>
 | |
|  * @copyright  Copyright (C) 2021 Uwe Steinmann
 | |
|  * @version    Release: @package_version@
 | |
|  */
 | |
| class SeedDMS_ConversionMgr {
 | |
| 	/**
 | |
| 	 * List of services for converting documents
 | |
| 	 */
 | |
| 	public $services;
 | |
| 
 | |
| 	/**
 | |
| 	 * @var $success set to false if conversion failed
 | |
| 	 */
 | |
| 	protected $success;
 | |
| 
 | |
| 	public function __construct() {
 | |
| 		$this->services = array();
 | |
| 		$this->success = true;
 | |
| 	}
 | |
| 
 | |
| 	public function addService($service) {
 | |
| 		$service->setConversionMgr($this);
 | |
| 		$this->services[$service->from][$service->to][] = $service;
 | |
| 		return $service;
 | |
| 	}
 | |
| 
 | |
| 	public function hasService($from, $to) {
 | |
| 		if(!empty($this->services[$from][$to]))
 | |
| 			return true;
 | |
| 		else
 | |
| 			return false;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Return the service that would be tried first for converting
 | |
| 	 * the document.
 | |
| 	 *
 | |
| 	 * The conversion manager may not use this service but choose a different
 | |
| 	 * one when it fails.
 | |
| 	 */
 | |
| 	public function getService($from, $to) { /* {{{ */
 | |
| 		if(!empty($this->services[$from][$to]))
 | |
| 			return end($this->services[$from][$to]);
 | |
| 		else
 | |
| 			return null;
 | |
| 	} /* }}} */
 | |
| 
 | |
| 	public function getServices() { /* {{{ */
 | |
| 		return $this->services;
 | |
| 	} /* }}} */
 | |
| 
 | |
| 	public function wasSuccessful() { /* {{{ */
 | |
| 		return $this->success;
 | |
| 	} /* }}} */
 | |
| 
 | |
| 	/**
 | |
| 	 * Convert a file from one format into another format
 | |
| 	 *
 | |
| 	 * This method will try each conversion service until a service
 | |
| 	 * fails or was successful. If a service succeeds it must not
 | |
| 	 * return false, null, '' or 0
 | |
| 	 *
 | |
| 	 * @param string $file name of file to convert
 | |
| 	 * @param string $from mimetype of input file
 | |
| 	 * @param string $to   mimetype of output file
 | |
| 	 * @param string $target name of target file. If none is given the
 | |
| 	 * content of the converted document will be returned.
 | |
| 	 * @param array $params additional parameter needed for the conversion,
 | |
| 	 * e.g. the width of an image
 | |
| 	 *
 | |
| 	 * @return boolean true on success, other false
 | |
| 	 */
 | |
| 	public function convert($file, $from, $to, $target=null, $params=array()) { /* {{{ */
 | |
| 		if(isset($this->services[$from][$to])) {
 | |
| 			$services = $this->services[$from][$to];
 | |
| 			for(end($services); key($services)!==null; prev($services)) {
 | |
| 				$service = current($services);
 | |
| 				$text = $service->convert($file, $target, $params);
 | |
| 				if(!$service->wasSuccessful()) {
 | |
| 					$this->success = false;
 | |
| 					return false;
 | |
| 				}
 | |
| 				if($text)
 | |
| 					return $text;
 | |
| 			}
 | |
| 		}
 | |
| 		return true;
 | |
| 	} /* }}} */
 | |
| }
 | 
