'$errfile' 2>&1");
}
}
function PmDocConvert($opts) {
global $FarmD, $UploadDir, $ScriptUrl, $UploadPrefixFmt, $pagename, $PubCacheDir,
$EnableDirectDownload, $UploadUrlFmt, $FmtV, $LinkUploadCreateFmt, $UploadFileFmt,
$PageFileFmt,
$PubCacheUrl,
$PmDocConvertPython,
$PmDocConvertPgm,
$PmDocConvertIWidth,
$PmDocConvertIHeight,
$PmDocConvertIBorder,
$PmDocConvertIScroll,
$PmDocConvertIAlign,
$PmDocConvertSpecial;
SDV($PubCacheDir, "$FarmD/pub/cache");
SDV($PubCacheUrl, "$PubDirUrl/cache");
SDV($PmDocConvertPython, '/usr/bin/python');
SDV($PmDocConvertPgm, '/usr/local/bin/DC.py');
// For HTML inline iframe viewing
// DocumentConverter.py will default to 640x480 images inside
// a 800x600 space for OOo Impress and PowerPoint files.
//
SDV($PmDocConvertIWidth, '840');
SDV($PmDocConvertIHeight, '680');
SDV($PmDocConvertIBorder, 'default');
SDV($PmDocConvertIScroll, 'default');
SDV($PmDocConvertIAlign, 'default');
// Needed?
// Determine this Group
//
$group = FmtPageName('$Group',$pagename);
$name = FmtPageName('$Name',$pagename);
// Process markup arguments first
//
$defaults = array(
'convertto'=>'',
'display'=>'link',
'headingrows'=>'1',
'startrow'=>'1',
'iwidth'=>$PmDocConvertIWidth,
'iheight'=>$PmDocConvertIHeight,
'iborder'=>$PmDocConvertIBorder,
'iscroll'=>$PmDocConvertIScroll,
'ialign'=>$PmDocConvertIAlign,
'dcopts'=>'',
'htmlwidth'=>$PmDocConvertIWidth,
'htmlcolor'=>'none',
'imageformat'=>'1',
'file'=>'',
'filetype'=>'',
'filter'=>'',
'forceconvert'=>false,
'linktext'=>'',
'quiet'=>false,
'showfilelink'=>false,
'showinlinelink'=>false,
'showicons'=>true,
'svgauto'=>false,
'popiframe'=>false,
'svgnum'=>'1',
);
$args = array_merge($defaults, ParseArgs($opts));
//$upfile = MakeUploadName($pagename,$args['file']);
$source = $args['file'];
// Alter pagename to match Group/Page if provided
$origpagename = $pagename;
if (preg_match('!^(.*)/([^/]+)$!', $source, $match)) {
$pagename = MakePageName($pagename, $match[1]);
$path = $match[2];
} else {
$path = $source;
}
$origuploaddir = FmtPageName("$UploadFileFmt", $origpagename);
$upname = MakeUploadName($pagename,$path);
$encname = rawurlencode($upname);
$uploaddir = FmtPageName("$UploadFileFmt", $pagename);
$filepath = FmtPageName("$UploadFileFmt/$upname", $pagename);
$fe = file_exists($filepath);
$display = $args['display'];
$upfiletype = $args['filetype'];
$convertto = $args['convertto'];
$forceconvert = $args['forceconvert'];
$linktext = $args['linktext'];
$showfilelink = $args['showfilelink'];
$showicons = $args['showicons'];
$headingrows = $args['headingrows'];
$startrow = $args['startrow'];
$iwidth = $args['iwidth'];
$iheight= $args['iheight'];
$iborder= $args['iborder'];
$iscroll = $args['iscroll'];
$ialign = $args['ialign'];
$quiet = $args['quiet'];
$debug = $args['debug'];
$popiframe = $args['popiframe'];
$filter = $args['filter'];
$svgauto = $args['svgauto'];
$svgnum = $args['svgnum'];
// Pull rest straight from args (FilterData opts)
// Intitialize output
$out='';
// Convert command separated list of rows that
// will be csv inline headings to an array.
$headingarray=explode(',',$headingrows);
// Check if upload exists, make link for upload
if (! $fe) {
if (! CondAuth($pagename, 'upload')) {
$error_msg = "No upload permissons";
return PRR("[$encname] [[$pagename?action=login|No upload permissions]]");
} else {
$FmtV['$LinkUpload'] =
FmtPageName("\$PageUrl?action=upload&upname=$encname", $pagename);
$FmtV['$LinkText'] = $upname;
$pagename = $origpagename;
return Keep(FmtPageName($LinkUploadCreateFmt, $pagename));
}
}
if (!$linktext) {
$linktext=$upname;
}
// Upload exists, convert if necessary and display it.
//
$upinfo=pathinfo($filepath);
$upfileext=$upinfo['extension'];
if (!$upfiletype) {
// Try to figure out file type of upload.
// Would love to get a file/magic value, but
// php's support is varied and even so, magic
// values vary from platform to platform as well.
//
// For now, the file extension determines the type.
//
$upfiletype=$upfileext;
}
if ($debug)
echo "upfiletype=[$upfiletype] ";
// Handle default conversion
if (!$convertto) {
switch ($upfiletype) {
case 'xls':
if ($display == 'inline')
$convertto='csv';
else
$convertto='pdf';
break;
default:
$convertto='pdf';
break;
}
}
if ($debug)
echo "convertto=[$convertto] ";
// Handle an identity, no convert, case, for display only entities
if ($convertto == $upfiletype) {
$bupname=basename($upname, ".$upfileext");
$noconvert=1;
} else {
$bupname=basename($upname, ".$upfileext") . "-$upfileext";
}
$bencname = rawurlencode($bupname);
$buploaddir = $uploaddir;
$bfilepath = FmtPageName("$UploadFileFmt/$bupname", $pagename);
$bfe = file_exists($bfilepath);
if ($debug)
echo "bupname=[$bupname] ";
// Normally, converted file is in the normal
// upload group dir, but html conversion results
// in many files and collision potential is
// high. So create a sub-directory and assume
// inline display.
//
$convertedfile="$bupname.$convertto";
$convertedfilepath="$buploaddir/$convertedfile";
$convertedfileerrorpath="$origuploaddir/$convertedfile.err";
$convertedfileurl = PUE(FmtPageName(IsEnabled($EnableDirectDownload, 1)
? "$UploadUrlFmt$UploadPrefixFmt/$convertedfile"
: "{\$PageUrl}?action=download&upname=$convertedfile", $pagename));
if ($convertto == 'html') {
$display='inline';
$converttodir = FmtPageName("$FarmD/$UploadDir/pmdocconvert$UploadPrefixFmt", $pagename);
$convertedfileurl = FmtPageName("$ScriptUrl/pmwiki/$UploadDir/pmdocconvert$UploadPrefixFmt/$convertedfile.dir/$convertedfile", $pagename);
$convertedfiledir="$converttodir/$convertedfile.dir";
$convertedfilepath="$convertedfiledir/$convertedfile";
if (!file_exists($convertedfiledir)) {
mkdir($convertedfiledir, $mode=0755, $recursive=true);
}
if (!file_exists($convertedfiledir)) {
$errout.='!! %red% PmDocConvert ERROR: Cannot create '.$convertedfiledir."\n";
$display='none';
$noconvert=1;
}
}
if (!$noconvert) {
// If the convertedfile exists, and the source uploaded file
// is newer, then delete the convertedfile to force
// new conversion.
//
// Note: right now, the directory for html conversion is NOT
// cleaned up.
//
if (file_exists("$convertedfilepath")) {
if ($debug)
echo "EXISTS ";
if ($forceconvert || filectime("$filepath") > filectime("$convertedfilepath")) {
if ($debug)
echo "NEWER ";
unlink("$convertedfilepath");
$noconvert=0;
} else {
$noconvert=1;
}
}
// Fix this
$linkurl="Attach:$pagename/$convertedfile";
if ($popiframe != 'true' && $linktext == '') {
$linktext="$convertedfile";
}
}
if (!$noconvert) {
if ($debug)
echo "CONVERTING ";
// Why all of this? Well.. I was thinking that things
// might vary at some point and even include other kinds
// of converters besides DocumentConverter.py.
//
switch ($convertto) {
case 'pdf':
PmDocConvertFile($filepath, "$convertedfilepath", "$convertedfileerrorpath", $args);
break;
case 'csv':
PmDocConvertFile($filepath, "$convertedfilepath", "$convertedfileerrorpath", $args);
break;
default:
if ($convertto) {
PmDocConvertFile($filepath, "$convertedfilepath", "$convertedfileerrorpath", $args);
}
}
if ($svgauto == 'true') {
$svg_contents = file_get_contents("$convertedfilepath");
$svg_contents = preg_replace('/width="[^"]*"/','width="100%"', $svg_contents, 1);
$svg_contents = preg_replace('/height="[^"]*"/','height="auto"', $svg_contents, 1);
file_put_contents("$convertedfilepath", $svg_contents);
}
}
// Always run filter. Make sure script can be rerun
if ($filter != '') {
system("/usr/local/wiki/{$filter} $convertto$svgnum $convertedfilepath");
}
if (!$noconvert && !file_exists("$convertedfilepath") && file_exists("$convertedfileerrorpath")) {
$fp=fopen("$convertedfileerrorpath", 'r');
$errout.='!! %red% PmDocConvert ERROR: '.fread($fp,1000)."\n";
$display='none';
}
if ($debug)
echo "filelink=[$filelink] linkurl=[$linkurl] linktext=[$linktext]]";
switch ($display) {
case 'imagelink':
$out.="$filelink"."[[Attach:$pagename/$upfile|$linkurl]]";
break;
case 'link':
if ($popiframe == 'true' && $convertto == 'pdf') {
$out.="%popiframe name=$convertedfile%[[Attach:$pagename/$convertedfile|$linktext]]";
} else {
$out.="$filelink"."[[$linkurl|$linktext]]";
}
break;
case 'attach':
$out.="$filelink"."$linkurl";
break;
case 'inline':
switch ($convertto) {
case 'svg':
if ($showfilelink == 'true') {
$out.="$filelink\n";
}
if ($popiframe == 'true') {
$out.="%popiframe name=$convertedfile%[[$convertedfileurl|$linktext]]";
} else {
$out.="\n\n";
}
break;
case 'csv':
if ($showfilelink == 'true') {
$out.="$filelink\n";
}
$out.=PmDocConvertInlineCsv($convertedfilepath, $headingarray, $startrow);
break;
// wiki means MediaWiki format.. so not really a nice
// way for inline PmWiki viewing... might add a convert
// here to convert MediaWiki to PmWiki... for now...
// it's text.
//
case 'wiki':
case 'txt':
if ($showfilelink == 'true') {
$out.="$filelink\n";
}
$out.=PmDocConvertInlineTxt($convertedfile);
break;
case 'html':
if ($showfilelink == 'true') {
$out.="$filelink\n";
}
if ($popiframe == 'true') {
$out.="%popiframe name=$convertedfile%[[$convertedfileurl|$linktext]]";
} else {
$out.="\n\n";
}
break;
default:
$out.="$filelink"."$linkurl";
break;
}
break;
}
if ($quiet == 'true')
$out='';
$pagename = $origpagename;
if ($errout != '') {
PRR(); return $errout."\n".$out;
} else {
PRR(); return $out;
}
}
?>