private function exportPNG($sData) { $this->getOutput()->disable(); global $wgRequest, $wgSVGConverter, $wgSVGConverters, $wgSVGConverterPath, $IP; if ($wgSVGConverter == false || !isset($wgSVGConverters[$wgSVGConverter])) { echo wfMessage('bs-statistics-err-converter')->plain(); return false; } $sFileName = wfTimestampNow(); $sFileExt = '.svg'; $oStatus = BsFileSystemHelper::saveToCacheDirectory($sFileName . $sFileExt, $sData, 'Statistics'); if (!$oStatus->isGood()) { echo $oStatus->getMessage(); return false; } $sCacheDir = $oStatus->getValue(); $cmd = str_replace(array('$path/', '$width', '$height', '$input', '$output'), array($wgSVGConverterPath ? wfEscapeShellArg("{$wgSVGConverterPath}/") : "", intval($wgRequest->getVal('width', 600)), intval($wgRequest->getVal('height', 400)), wfEscapeShellArg($sCacheDir . '/' . $sFileName . $sFileExt), wfEscapeShellArg($sCacheDir)), $wgSVGConverters[$wgSVGConverter]) . " 2>&1"; $err = wfShellExec($cmd); unlink($sCacheDir . '/' . $sFileName . $sFileExt); $sFileExt = '.png'; if (!file_exists($sCacheDir . '/' . $sFileName . $sFileExt)) { echo $err; return false; } $this->getRequest()->response()->header("Content-Type:image/png"); $this->getRequest()->response()->header("Content-Disposition:attachment; filename={$sFileName}{$sFileExt}"); readfile($sCacheDir . '/' . $sFileName . $sFileExt); unlink($sCacheDir . '/' . $sFileName . $sFileExt); return true; }