X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=GnumericToExcel.php;h=5ce821deb6d17a0e23a68e9ff6c2bcebb6472a85;hp=ed9436c36d83d44b09e0a83d2fb1794646f43a7d;hb=HEAD;hpb=b9a8bac42e7d92994860c3203550641b77c3e304
diff --git a/GnumericToExcel.php b/GnumericToExcel.php
index ed9436c3..feb940c3 100644
--- a/GnumericToExcel.php
+++ b/GnumericToExcel.php
@@ -28,13 +28,13 @@ class Pman_Core_GnumericToExcel extends Pman
return true;
}
- function get()
+ function get($v, $opts=array())
{
-
+
}
function post($fname) {
- $ml = (int) ini_get('suhosin.post.max_value_length');
+ $ml = (int) ini_get('suhosin.post.max_value_length');
if (empty($_POST['xml'])) {
header("HTTP/1.0 400 Internal Server Error");
die( $ml ? "Suhosin Patch enabled - try and disable it!!!" : 'no XML sent');
@@ -48,9 +48,9 @@ class Pman_Core_GnumericToExcel extends Pman
$xml = iconv("UTF-8", "UTF-8//IGNORE", $xml);
- //$xml = str_replace('é', 'e', $xml);
+ //$xml = str_replace('�', 'e', $xml);
//$xml = str_replace("\xA0", ' ', $xml);
- //$xml = str_replace("Ø", 'dia.',$xml);
+ //$xml = str_replace("�", 'dia.',$xml);
//$this->addEvent("DOWNLOAD", false, isset($_REQUEST['title']) ? $_REQUEST['title'] : '???');
@@ -58,14 +58,31 @@ class Pman_Core_GnumericToExcel extends Pman
if (!empty($_POST['format']) && $_POST['format']=='gnumeric') {
if (empty($_POST['debug'])) {
header('Content-type: application/x-gnumeric');
+ header('Content-Disposition: attachment; filename="' .addslashes($fname). '.gnumeric"');
} else {
header('Content-type: text/xml');
}
echo $xml;
exit;
}
- $srcTmp = ini_get('session.save_path') . '/' .uniqid('gnumeric_').'.gnumeric';
- $targetTmp = ini_get('session.save_path') . '/' .uniqid('gnumeric_').'.xls';
+
+ $ext = 'xls';
+ $outfmt = 'Gnumeric_Excel:excel_biff8';
+ $mime = 'application/vnd.ms-excel';
+
+ /*
+ // ssconvert results in bad images
+ if (!empty($_POST['format']) && $_POST['format']=='xlsx') {
+ $outfmt = 'Gnumeric_Excel:xlsx';
+ $ext = 'xlsx';
+ $mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
+ }
+ */
+
+
+
+ $srcTmp = $this->tempName('gnumeric');
+ $targetTmp = $this->tempName($ext);
// write the gnumeric file...
$fh = fopen($srcTmp,'w');
fwrite($fh, $xml);
@@ -73,13 +90,15 @@ class Pman_Core_GnumericToExcel extends Pman
require_once 'System.php';
+ $xvfb = System::which('xvfb-run');
+
$ss = System::which('ssconvert');
- $cmd = $ss.
+ $cmd = $xvfb . " -a " . $ss.
" --import-encoding=Gnumeric_XmlIO:sax" .
- " --export-type=Gnumeric_Excel:excel_biff8 " .
+ " --export-type={$outfmt} " .
$srcTmp . ' ' . $targetTmp . ' 2>&1';
// echo $cmd;
- //passthru($cmd);exit;
+ //passthru($cmd);exit;
//exit;
$out = `$cmd`;
clearstatcache();
@@ -88,18 +107,51 @@ class Pman_Core_GnumericToExcel extends Pman
header("HTTP/1.0 400 Internal Server Error - Convert error");
die("ERROR CONVERTING?:" . $cmd ."\n
OUTPUT:". htmlspecialchars($out));
}
+
+ if (!empty($_POST['format']) && $_POST['format']=='xlsx') {
+ require_once 'File/Convert.php';
+ $cc = new File_Convert($targetTmp,'application/vnd.ms-excel');
+ $targetTmp = $cc->convert('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
+ if (empty($targetTmp)) {
+ $this->jerr("convert to xlsx failed");
+ }
+
+ $mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
+ $ext = "xlsx";
+ }
+ if (empty($fname)) {
+ $fname = basename($targetTmp);
+ }
+ $fname .= preg_match('/\.' . $ext . '/i', $fname) ? '' : ('.' . $ext); // make sure it ends in xls..
+
+
+ DB_DataObject::factory('Events')->addFile(array(
+ 'tmp_name' => $targetTmp,
+ 'name' => $fname,
+ 'type' => $mime,
+ 'size' => filesize($targetTmp)
+ ));
+
+ $this->addEvent("DOWNLOAD", false, $fname );
+
// unlink($srcTmp);
- $fname = preg_match('/\.xls/i', $fname) ? $fname : ($fname . '.xls'); // make sure it ends in xls..
- $fh = fopen($targetTmp, 'r');
- header('Content-type: application/vnd.ms-excel');
+
+ header('Content-type: ' . $mime);
header('Content-Disposition: attachment; filename="' .addslashes($fname). '"');
-
- // will not work on IE... - needs while/fget..
- fpassthru($fh);
+ header('Content-length: '. filesize($targetTmp));
+ header("Content-Transfer-Encoding: binary");
+ if ($file = fopen($targetTmp, 'rb')) {
+ while(!feof($file) and (connection_status()==0)) {
+ print(fread($file, 1024*8));
+ flush();
+ }
+ fclose($file);
+ }
+
unlink($targetTmp);
exit;
}
-
+
}