11 * format = [empty=xls] , 'gnumeric' (download format)
12 * debug = true => download xml.
18 require_once 'Pman.php';
19 class Pman_Core_GnumericToExcel extends Pman
23 $au = $this->getAuthUser();
25 die("NOT authenticated");
27 $this->authUser = $au;
31 function get($v, $opts=array())
35 function post($fname) {
37 $ml = (int) ini_get('suhosin.post.max_value_length');
38 if (empty($_POST['xml'])) {
39 header("HTTP/1.0 400 Internal Server Error");
40 die( $ml ? "Suhosin Patch enabled - try and disable it!!!" : 'no XML sent');
43 if (empty($_POST['xml'])) {
44 header("HTTP/1.0 400 Internal Server Error");
45 die("Missing XML attribute");
49 $xml = iconv("UTF-8", "UTF-8//IGNORE", $xml);
51 //$xml = str_replace('�', 'e', $xml);
52 //$xml = str_replace("\xA0", ' ', $xml);
53 //$xml = str_replace("�", 'dia.',$xml);
55 //$this->addEvent("DOWNLOAD", false, isset($_REQUEST['title']) ? $_REQUEST['title'] : '???');
58 if (!empty($_POST['format']) && $_POST['format']=='gnumeric') {
59 if (empty($_POST['debug'])) {
60 header('Content-type: application/x-gnumeric');
61 header('Content-Disposition: attachment; filename="' .addslashes($fname). '.gnumeric"');
63 header('Content-type: text/xml');
70 $outfmt = 'Gnumeric_Excel:excel_biff8';
71 $mime = 'application/vnd.ms-excel';
74 // ssconvert results in bad images
75 if (!empty($_POST['format']) && $_POST['format']=='xlsx') {
76 $outfmt = 'Gnumeric_Excel:xlsx';
78 $mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
84 $srcTmp = $this->tempName('gnumeric');
85 $targetTmp = $this->tempName($ext);
86 // write the gnumeric file...
87 $fh = fopen($srcTmp,'w');
92 require_once 'System.php';
93 $xvfb = System::which('xvfb-run');
95 $ss = System::which('ssconvert');
96 $cmd = $xvfb . " -a " . $ss.
97 " --import-encoding=Gnumeric_XmlIO:sax" .
98 " --export-type={$outfmt} " .
99 $srcTmp . ' ' . $targetTmp . ' 2>&1';
101 //passthru($cmd);exit;
106 if (!file_exists($targetTmp) || !filesize($targetTmp)) {
107 header("HTTP/1.0 400 Internal Server Error - Convert error");
108 die("ERROR CONVERTING?:" . $cmd ."\n<BR><BR> OUTPUT:". htmlspecialchars($out));
111 if (!empty($_POST['format']) && $_POST['format']=='xlsx') {
112 require_once 'File/Convert.php';
113 $cc = new File_Convert($targetTmp,'application/vnd.ms-excel');
115 $targetTmp = $cc->convert('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
116 $mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
127 $fname = basename($targetTmp);
129 $fname .= preg_match('/\.' . $ext . '/i', $fname) ? '' : ('.' . $ext); // make sure it ends in xls..
131 header('Content-type: ' . $mime);
132 header('Content-Disposition: attachment; filename="' .addslashes($fname). '"');
133 header('Content-length: '. filesize($targetTmp));
134 header("Content-Transfer-Encoding: binary");
135 if ($file = fopen($targetTmp, 'rb')) {
136 while(!feof($file) and (connection_status()==0)) {
137 print(fread($file, 1024*8));