mirror of
https://git.code.sf.net/p/seeddms/code
synced 2025-06-01 06:27:15 +00:00
Merge branch 'seeddms-5.1.x' into seeddms-6.0.x
This commit is contained in:
commit
8e6828e36d
|
@ -6,7 +6,9 @@ Header set X-Content-Type-Options: "nosniff"
|
||||||
</IfModule>
|
</IfModule>
|
||||||
|
|
||||||
RewriteEngine On
|
RewriteEngine On
|
||||||
RewriteRule ^favicon.ico$ views/bootstrap/images/favicon.svg [L]
|
#RewriteRule "^favicon\.ico$" "-" [L]
|
||||||
|
#RewriteRule "^(favicon\.ico)$" %{HTTP_HOST}/views/bootstrap/images/favicon.svg [L,NC]
|
||||||
|
RewriteRule "(favicon\.ico)" /views/bootstrap/images/favicon.svg [L,NC]
|
||||||
|
|
||||||
# Store the current location in an environment variable CWD to use
|
# Store the current location in an environment variable CWD to use
|
||||||
# mod_rewrite in .htaccess files without knowing the RewriteBase
|
# mod_rewrite in .htaccess files without knowing the RewriteBase
|
||||||
|
|
|
@ -16,10 +16,10 @@ application/msword
|
||||||
catdoc %s
|
catdoc %s
|
||||||
|
|
||||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
||||||
xlsx2csv %s
|
xlsx2csv -d tab %s
|
||||||
|
|
||||||
application/vnd.ms-excel
|
application/vnd.ms-excel
|
||||||
xls2csv %s
|
xls2csv -d tab %s
|
||||||
|
|
||||||
text/html
|
text/html
|
||||||
html2text %s
|
html2text %s
|
||||||
|
@ -48,7 +48,7 @@ text/rtf
|
||||||
image/png
|
image/png
|
||||||
image/jpg
|
image/jpg
|
||||||
image/jpeg
|
image/jpeg
|
||||||
convert -f pdf -density 300 '%f' '%o'
|
convert -density 300 '%f' 'pdf:%o'
|
||||||
|
|
||||||
application/vnd.ms-powerpoint
|
application/vnd.ms-powerpoint
|
||||||
application/vnd.openxmlformats-officedocument.presentationml.presentation
|
application/vnd.openxmlformats-officedocument.presentationml.presentation
|
||||||
|
@ -71,16 +71,22 @@ It basically instructs you to comment out the line
|
||||||
|
|
||||||
in /etc/ImageMagick-6/policy.xml
|
in /etc/ImageMagick-6/policy.xml
|
||||||
|
|
||||||
|
convert determines the format of the converted image from the extension of
|
||||||
|
the output filename. SeedDMS usually sets a propper extension when running
|
||||||
|
the command, but nevertheless it is good practice to explicitly set the output
|
||||||
|
format by prefixing the output filename with 'png:'. This is of course always
|
||||||
|
needed if the output goes to stdout.
|
||||||
|
|
||||||
image/jpg
|
image/jpg
|
||||||
image/jpeg
|
image/jpeg
|
||||||
image/png
|
image/png
|
||||||
convert -resize %wx '%f' '%o'
|
convert -resize %wx '%f' 'png:%o'
|
||||||
|
|
||||||
application/pdf
|
application/pdf
|
||||||
gs -dBATCH -dNOPAUSE -sDEVICE=png16m -dPDFFitPage -r72x72 -sOutputFile=- -dFirstPage=1 -dLastPage=1 -q '%f' | convert -resize %wx png:- '%o'
|
gs -dBATCH -dNOPAUSE -sDEVICE=png16m -dPDFFitPage -r72x72 -sOutputFile=- -dFirstPage=1 -dLastPage=1 -q '%f' | convert -resize %wx png:- '%o'
|
||||||
|
|
||||||
text/plain
|
text/plain
|
||||||
a2ps -1 -a1 -R -B -o - '%f' | gs -dBATCH -dNOPAUSE -sDEVICE=png16m -dFirstPage=1 -dLastPage=1 -dPDFFitPage -r72x72 -sOutputFile=- -q - | convert -resize %wx png:- '%o'
|
a2ps -1 -a1 -R -B -o - '%f' | gs -dBATCH -dNOPAUSE -sDEVICE=png16m -dFirstPage=1 -dLastPage=1 -dPDFFitPage -r72x72 -sOutputFile=- -q - | convert -resize %wx png:- 'png:%o'
|
||||||
|
|
||||||
application/msword
|
application/msword
|
||||||
application/vnd.oasis.opendocument.spreadsheet
|
application/vnd.oasis.opendocument.spreadsheet
|
||||||
|
@ -93,5 +99,5 @@ application/vnd.ms-powerpoint
|
||||||
text/csv
|
text/csv
|
||||||
application/csv
|
application/csv
|
||||||
application/vnd.wordperfect
|
application/vnd.wordperfect
|
||||||
unoconv -d document -e PageRange=1 -f pdf --stdout -v '%f' | gs -dBATCH -dNOPAUSE -sDEVICE=pngalpha -dPDFFitPage -r72x72 -sOutputFile=- -dFirstPage=1 -dLastPage=1 -q - | convert -resize %wx png:- '%o'
|
unoconv -d document -e PageRange=1 -f pdf --stdout -v '%f' | gs -dBATCH -dNOPAUSE -sDEVICE=pngalpha -dPDFFitPage -r72x72 -sOutputFile=- -dFirstPage=1 -dLastPage=1 -q - | convert -resize %wx png:- 'png:%o'
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,10 @@ class SeedDMS_ConversionMgr {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getServices() {
|
||||||
|
return $this->services;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a file
|
* Convert a file
|
||||||
*
|
*
|
||||||
|
|
|
@ -49,6 +49,18 @@ abstract class SeedDMS_ConversionServiceBase {
|
||||||
return 'Conversion service';
|
return 'Conversion service';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAdditionalParams() { /* {{{ */
|
||||||
|
return [];
|
||||||
|
} /* }}} */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method does the conversion
|
||||||
|
*
|
||||||
|
* It either returns the content of converted file (if $target is null)
|
||||||
|
* or writes the converted file into $target and returns true on success
|
||||||
|
* or false on error.
|
||||||
|
*/
|
||||||
public function convert($infile, $target = null, $params = array()) {
|
public function convert($infile, $target = null, $params = array()) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,28 +98,95 @@ class SeedDMS_ConversionServiceExec extends SeedDMS_ConversionServiceBase {
|
||||||
$this->timeout = 5;
|
$this->timeout = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getInfo() {
|
||||||
|
return "Convert with command '".$this->cmd."'";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAdditionalParams() { /* {{{ */
|
||||||
|
/* output format is an image and the command has a placeholder for the
|
||||||
|
* width of the converted image, then allow to set the width.
|
||||||
|
*/
|
||||||
|
if(substr($this->to, 0, 6) == 'image/' && strpos($this->cmd, '%w') !== false)
|
||||||
|
return [
|
||||||
|
['name'=>'width', 'type'=>'number', 'description'=>'Width of converted image'],
|
||||||
|
];
|
||||||
|
return [];
|
||||||
|
} /* }}} */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert by running an external command
|
||||||
|
*
|
||||||
|
* The command was set when calling the constructor. The command may
|
||||||
|
* either write a file or to stdout, depending on the placeholder '%o'
|
||||||
|
* either exists or not in the command. If $target is null, but the
|
||||||
|
* command writes to a file, it will create a temporary file, write
|
||||||
|
* ot it and read the content back to be returned by the method.
|
||||||
|
*/
|
||||||
public function convert($infile, $target = null, $params = array()) {
|
public function convert($infile, $target = null, $params = array()) {
|
||||||
|
/* if no %f placeholder is found, we assume output to stdout */
|
||||||
|
$tostdout = strpos($this->cmd, '%o') === false;
|
||||||
|
|
||||||
|
$format = '';
|
||||||
|
switch($this->to) {
|
||||||
|
case 'image/gif':
|
||||||
|
$format = 'gif';
|
||||||
|
break;
|
||||||
|
case 'image/jpg':
|
||||||
|
case 'image/jpeg':
|
||||||
|
$format = 'jpg';
|
||||||
|
break;
|
||||||
|
case 'image/png':
|
||||||
|
$format = 'png';
|
||||||
|
break;
|
||||||
|
case 'application/pdf':
|
||||||
|
$format = 'pdf';
|
||||||
|
break;
|
||||||
|
}
|
||||||
$start = microtime(true);
|
$start = microtime(true);
|
||||||
if(!$target)
|
$hastempfile = false;
|
||||||
|
if(!$target && !$tostdout) {
|
||||||
$tmpfile = tempnam(sys_get_temp_dir(), 'convert');
|
$tmpfile = tempnam(sys_get_temp_dir(), 'convert');
|
||||||
else
|
/* Some programms (e.g. unoconv) need the output file to have the
|
||||||
|
* right extension. Without an extension it will add one by itself.
|
||||||
|
*/
|
||||||
|
if($format)
|
||||||
|
rename($tmpfile, $tmpfile .= '.'.$format);
|
||||||
|
$hastempfile = true;
|
||||||
|
} else
|
||||||
$tmpfile = $target;
|
$tmpfile = $target;
|
||||||
$cmd = str_replace(array('%w', '%f', '%o', '%m'), array(isset($params['width']) ? $params['width'] : '', $infile, $tmpfile, $this->from), $this->cmd);
|
/* %s was just added because the commands to convert to text/plain used
|
||||||
|
* it instead of %f for the input file
|
||||||
|
* %f = input file
|
||||||
|
* %o = output file
|
||||||
|
* %m = mime type
|
||||||
|
* %w = width
|
||||||
|
*/
|
||||||
|
$cmd = str_replace(array('%w', '%f', '%s', '%if', '%o', '%m'), array(!empty($params['width']) ? (int) $params['width'] : '150', $infile, $infile, $format, $tmpfile, $this->from), $this->cmd);
|
||||||
try {
|
try {
|
||||||
self::execWithTimeout($cmd, $this->timeout);
|
$ret = self::execWithTimeout($cmd, $this->timeout);
|
||||||
} catch(Exception $e) {
|
} catch(Exception $e) {
|
||||||
|
if($hastempfile)
|
||||||
|
unlink($tmpfile);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$end = microtime(true);
|
$end = microtime(true);
|
||||||
if($this->logger) {
|
if($this->logger) {
|
||||||
$this->logger->log('Conversion from '.$this->from.' to '.$this->to.' with cmd "'.$this->cmd.'" took '.($end-$start).' sec.', PEAR_LOG_INFO);
|
$this->logger->log('Conversion from '.$this->from.' to '.$this->to.' with cmd "'.$this->cmd.'" took '.($end-$start).' sec.', PEAR_LOG_DEBUG);
|
||||||
}
|
}
|
||||||
if(!$target) {
|
if($tostdout) {
|
||||||
$content = file_get_contents($tmpfile);
|
if(!$target) {
|
||||||
unlink($tmpfile);
|
return $ret['stdout'];
|
||||||
return $content;
|
} else {
|
||||||
|
return file_put_contents($tmpfile, $ret['stdout']);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return true;
|
if(!$target) {
|
||||||
|
$content = file_get_contents($tmpfile);
|
||||||
|
unlink($tmpfile);
|
||||||
|
return $content;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,12 +34,22 @@ class SeedDMS_ConversionServiceImageToImage extends SeedDMS_ConversionServiceBas
|
||||||
$this->timeout = 5;
|
$this->timeout = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getInfo() {
|
||||||
|
return "Convert with imagick php functions";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAdditionalParams() { /* {{{ */
|
||||||
|
return [
|
||||||
|
['name'=>'width', 'type'=>'number', 'description'=>'Width of converted image']
|
||||||
|
];
|
||||||
|
} /* }}} */
|
||||||
|
|
||||||
public function convert($infile, $target = null, $params = array()) {
|
public function convert($infile, $target = null, $params = array()) {
|
||||||
$start = microtime(true);
|
$start = microtime(true);
|
||||||
$imagick = new Imagick();
|
$imagick = new Imagick();
|
||||||
if($imagick->readImage($infile)) {
|
if($imagick->readImage($infile)) {
|
||||||
if(!empty($params['width']))
|
if(!empty($params['width']))
|
||||||
$imagick->scaleImage((int) $params['width'], 0);
|
$imagick->scaleImage(min((int) $params['width'], $imagick->getImageWidth()), 0);
|
||||||
$end = microtime(true);
|
$end = microtime(true);
|
||||||
if($this->logger) {
|
if($this->logger) {
|
||||||
$this->logger->log('Conversion from '.$this->from.' to '.$this->to.' with image service took '.($end-$start).' sec.', PEAR_LOG_INFO);
|
$this->logger->log('Conversion from '.$this->from.' to '.$this->to.' with image service took '.($end-$start).' sec.', PEAR_LOG_INFO);
|
||||||
|
|
|
@ -34,6 +34,17 @@ class SeedDMS_ConversionServicePdfToImage extends SeedDMS_ConversionServiceBase
|
||||||
$this->timeout = 5;
|
$this->timeout = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getInfo() {
|
||||||
|
return "Convert with imagick php functions";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAdditionalParams() { /* {{{ */
|
||||||
|
return [
|
||||||
|
['name'=>'width', 'type'=>'number', 'description'=>'Width of converted image'],
|
||||||
|
['name'=>'page', 'type'=>'number', 'description'=>'Page of Pdf document'],
|
||||||
|
];
|
||||||
|
} /* }}} */
|
||||||
|
|
||||||
public function convert($infile, $target = null, $params = array()) {
|
public function convert($infile, $target = null, $params = array()) {
|
||||||
$start = microtime(true);
|
$start = microtime(true);
|
||||||
$imagick = new Imagick();
|
$imagick = new Imagick();
|
||||||
|
@ -41,9 +52,12 @@ class SeedDMS_ConversionServicePdfToImage extends SeedDMS_ConversionServiceBase
|
||||||
* A resolution of 72,72 will create a 596x842 image
|
* A resolution of 72,72 will create a 596x842 image
|
||||||
*/
|
*/
|
||||||
$imagick->setResolution(36,36);
|
$imagick->setResolution(36,36);
|
||||||
if($imagick->readImage($infile.'[0]')) {
|
$page = 0;
|
||||||
|
if(!empty($params['page']) && intval($params['page']) > 0)
|
||||||
|
$page = intval($params['page'])-1;
|
||||||
|
if($imagick->readImage($infile.'['.$page.']')) {
|
||||||
if(!empty($params['width']))
|
if(!empty($params['width']))
|
||||||
$imagick->scaleImage((int) $params['width'], 0);
|
$imagick->scaleImage(min((int) $params['width'], $imagick->getImageWidth()), 0);
|
||||||
$imagick->setImageFormat('png');
|
$imagick->setImageFormat('png');
|
||||||
$end = microtime(true);
|
$end = microtime(true);
|
||||||
if($this->logger) {
|
if($this->logger) {
|
||||||
|
|
|
@ -28,6 +28,10 @@ class SeedDMS_ConversionServiceTextToText extends SeedDMS_ConversionServiceBase
|
||||||
$this->to = $to;
|
$this->to = $to;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getInfo() {
|
||||||
|
return "Pass through document contents";
|
||||||
|
}
|
||||||
|
|
||||||
public function convert($infile, $target = null, $params = array()) {
|
public function convert($infile, $target = null, $params = array()) {
|
||||||
if($target) {
|
if($target) {
|
||||||
file_put_contents($target, file_get_contents($infile));
|
file_put_contents($target, file_get_contents($infile));
|
||||||
|
|
|
@ -15,6 +15,12 @@ if(!empty($settings->_converters['pdf'])) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!empty($settings->_converters['fulltext'])) {
|
||||||
|
foreach($settings->_converters['fulltext'] as $mimetype=>$cmd) {
|
||||||
|
$conversionmgr->addService(new SeedDMS_ConversionServiceExec($mimetype, 'text/plain', $cmd))->setLogger($logger);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$conversionmgr->addService(new SeedDMS_ConversionServicePdfToImage('application/pdf', 'image/png'))->setLogger($logger);
|
$conversionmgr->addService(new SeedDMS_ConversionServicePdfToImage('application/pdf', 'image/png'))->setLogger($logger);
|
||||||
|
|
||||||
$conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/jpeg', 'image/png'))->setLogger($logger);
|
$conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/jpeg', 'image/png'))->setLogger($logger);
|
||||||
|
|
|
@ -412,7 +412,7 @@ function add_log_line($msg="", $priority=null) { /* {{{ */
|
||||||
elseif(!empty($_SERVER['REMOTE_ADDR']))
|
elseif(!empty($_SERVER['REMOTE_ADDR']))
|
||||||
$ip = $_SERVER['REMOTE_ADDR'];
|
$ip = $_SERVER['REMOTE_ADDR'];
|
||||||
if(!empty($_SERVER["REQUEST_URI"]))
|
if(!empty($_SERVER["REQUEST_URI"]))
|
||||||
$scriptname = basename($_SERVER["REQUEST_URI"], ".php").' ';
|
$scriptname = basename($_SERVER["REQUEST_URI"]).' ';
|
||||||
else
|
else
|
||||||
$scriptname = basename($_SERVER["SCRIPT_NAME"]).' ';
|
$scriptname = basename($_SERVER["SCRIPT_NAME"]).' ';
|
||||||
if($user)
|
if($user)
|
||||||
|
|
|
@ -89,6 +89,13 @@ class SeedDMS_View_ExtensionMgr extends SeedDMS_Theme_Style {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
/* This function is called after the list of installed extension is updated */
|
||||||
|
function filterList() {
|
||||||
|
var value = $("#extensionfilter").val().toLowerCase();
|
||||||
|
$("#extensionlist tbody tr").filter(function() {
|
||||||
|
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
|
||||||
|
});
|
||||||
|
}
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
$this->printFileChooserJs();
|
$this->printFileChooserJs();
|
||||||
|
@ -280,7 +287,7 @@ class SeedDMS_View_ExtensionMgr extends SeedDMS_Theme_Style {
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
<div class="tab-pane <?php if(!$currenttab || $currenttab == 'installed') echo 'active'; ?>" id="installed" role="tabpanel">
|
<div class="tab-pane <?php if(!$currenttab || $currenttab == 'installed') echo 'active'; ?>" id="installed" role="tabpanel">
|
||||||
<input id="extensionfilter" class="form-control" type="text" placeholder="<?= getMLText('type_to_filter'); ?>">
|
<input id="extensionfilter" class="form-control" type="text" placeholder="<?= getMLText('type_to_filter'); ?>">
|
||||||
<div class="ajax" data-view="ExtensionMgr" data-action="installedList"></div>
|
<div class="ajax" data-view="ExtensionMgr" data-action="installedList" data-afterload="()=>{filterList();}"></div>
|
||||||
<?php
|
<?php
|
||||||
// $this->installedList();
|
// $this->installedList();
|
||||||
?>
|
?>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user