123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384 |
- <?php
- require_once(dirname(__FILE__)."/AscParseController.php");
- require_once(dirname(__FILE__)."/GapsXmlInfoController.php");
- class PowerplayController
- {
- private $publishDir;
- private $tempDir;
- private $ppxFile;
- private $report;
- private $app;
- private $cubeFile;
- public $ReportName;
- public static function Run ($argv)
- {
- if (count($argv) <= 2) die();
- $action = $argv[1];
- switch ($action) {
- case "remove-queries":
- PowerplayController::RemoveQueries($argv);
- break;
- case "add-queries":
- case "untermengen":
- PowerplayController::AddQueries($argv);
- break;
- case "cube-name":
- PowerplayController::CubeName($argv[2]);
- break;
- case "rename":
- PowerplayController::Rename($argv);
- break;
- default:
- case "export":
- PowerplayController::Export($argv);
- break;
- }
- }
- public static function Export ($params)
- {
- $pprFile = $params[2];
- $export = (count($params) > 3) ? $params[3] : "jpg";
- $publishDir = (count($params) > 4) ? $params[4] : "";
- $exportFile = (count($params) > 5) ? $params[5] : "";
- $cubeName = (count($params) > 6) ? $params[6] : "";
- $pprCtrl = new PowerplayController($publishDir);
- if (!$pprCtrl->OpenReport($pprFile, $cubeName)) {
- echo "{$pprFile} kann nicht geoeffnet werden!\r\n";
- die();
- }
- switch ($export) {
- case "asc":
- $pprCtrl->SaveAsAsc();
- break;
- case "json":
- $ascFile = $pprCtrl->SaveAsAsc();
- $apCtrl = new AscParseController();
- $apCtrl->Run($ascFile, $exportFile);
- break;
- case "pdf":
- $pprCtrl->SaveAsPdf($exportFile);
- break;
- case "ppr":
- $pprCtrl->SaveAsPpr($exportFile);
- break;
- case "ppx":
- $pprCtrl->SaveAsPpx($exportFile);
- break;
- case "xls":
- $pprCtrl->SaveAsXls($exportFile);
- break;
- case "jpg":
- default:
- $pprCtrl->PublishImages();
- break;
- }
- $pprCtrl->CloseReport();
- $pprCtrl->Quit();
- }
-
- public static function RemoveQueries ($params)
- {
- $reportDir = realpath($params[2]);
- $suffix = $params[3] . ".";
- $dimensions = explode(",", $params[4]);
-
- $pprCtrl = new PowerplayController($reportDir);
- $dir = dir($reportDir);
-
- while ($file = $dir->read()) {
- if (stripos($file, $suffix)) {
- $fullFilename = $reportDir . "\\" . $file;
- if ($pprCtrl->OpenReport($fullFilename)) {
- $pprCtrl->RemoveReportQueryItems($dimensions);
- $pprCtrl->SaveAsPpr(str_replace(".ppx", ".ppr", str_replace($suffix, ".", $fullFilename)));
- $pprCtrl->CloseReport();
- echo " {$file}: Untermengen entfernt.\r\n";
- }
- }
- }
- $pprCtrl->Quit();
- }
- public static function AddQueries ($params)
- {
- $pprCtrl = new PowerplayController("");
- $pprCtrl->OpenReport($params[2]);
- $pprCtrl->AddReportQueryItems("AH-Gruppe", "Serviceberater", "Mainz - Kastel");
- $pprCtrl->CloseReport();
- $pprCtrl->Quit();
- }
- public static function CubeName ($file)
- {
- $pprCtrl = new PowerplayController(dirname(__FILE__));
- $pprCtrl->OpenReport($file);
- $cubeFile = $pprCtrl->GetCubeFilename();
- $pprCtrl->CloseReport();
- $pprCtrl->Quit();
- return $cubeFile;
- }
-
- public static function Rename ($params)
- {
- if (count($params) < 5) {
- echo "Aufruf: powerplay.bat rename [Report-Pfad] [Cubename] [Neuer Pfad und Name]\r\n";
- return;
- }
- $reportPath = realpath($params[2]);
- $cubeName = $params[3];
- $newPathAndName = realpath($params[4]);
-
- if (substr($cubeName, -4) == ".mdc") {
- $cubeName = substr($cubeName, 0, -4);
- }
-
- $pprCtrl = new PowerplayController($reportPath);
- $gxiCtrl = new GapsXmlInfoController();
- $reports = $gxiCtrl->getExistingReportFiles("1", $reportPath . "\\", false, $cubeName);
-
- foreach ($reports as $report => $cube) {
- $reportFile = $reportPath . "\\" . $report . ".ppr";
- if (!file_exists($reportFile)) {
- $reportFile = $reportPath . "\\" . $report . ".ppx";
- }
- if (!file_exists($reportFile)) {
- continue;
- }
-
- if ($pprCtrl->OpenReport($reportFile, $newPathAndName)) {
- $pprCtrl->Save();
- $pprCtrl->CloseReport();
- }
- }
- $pprCtrl->Quit();
- }
- public function __construct ($publishDir)
- {
- $this->publishDir = $publishDir;
- $this->tempDir = $this->publishDir ."\\temp\\";
- @mkdir($this->publishDir, 0777, true);
- @mkdir($this->tempDir);
-
- $this->app = new COM("CognosPowerplay.Application");
- }
- public function OpenReport ($ppxFile, $cubeName = "")
- {
- $this->ppxFile = $ppxFile;
- if (preg_match('/[\\\\\\/]([^\\\\\\/]*)\.pp[rx]$/i', $this->ppxFile, $match)) {
- $this->ReportName = $match[1];
- } else {
- $this->ReportName = substr($this->ppxFile, 0, -4);
- }
- if (preg_match("/_graf$/i", $this->ReportName)) {
- $this->ReportName = substr($this->ReportName, 0, -5);
- }
- if (!file_exists($this->ppxFile)) {
- return false;
- }
- try {
- if ($cubeName != "") {
- $this->report = new COM("CognosPowerplay.Report");
- $this->report->Open($this->ppxFile, $cubeName);
- } else {
- $this->report = $this->app->Reports->Open($this->ppxFile);
- }
- }
- catch (Exception $e) {
- echo "Could not open file '" . $this->ppxFile . "'\r\n";
- echo $e->getMessage() . "\r\n";
- return false;
- }
- return true;
- }
- public function CloseReport ()
- {
- $this->report->Close();
- }
- public function Quit ()
- {
- $this->app->Quit();
- }
-
- public function RemoveReportQueryItems ($dimensions)
- {
- $items = $this->report->ReportQueries->Count;
- $i = 1;
- while ($i <= $items) {
- $dim = $this->report->ReportQueries->Item($i)->Dimension;
- if (in_array($dim, $dimensions)) {
- $this->report->ReportQueries->Item($i)->Remove(false);
- $items -= 1;
- } else {
- $i += 1;
- }
- }
- }
- public function AddReportQueryItems ($dimension, $level, $category)
- {
- $parent = $this->report->ReportQueries->Add(2);
- $parent->Category($category);
- $parent->LowestLevel = false;
- $parent->Execute();
- $query = $this->report->ReportQueries->Add(3);
- $query->Name = $level . " " . $category;
- $query->Dimension = $dimension;
- $query->Level($level);
- $query->Find($parent);
- $query->Execute();
- $query->AddToReport(1, 1, 3);
- }
-
- public function GetCubeFilename ()
- {
- $this->cubeFile = $this->report->CubeName;
- return $this->cubeFile;
- }
-
- public function GetCellValue ($row, $col)
- {
- try {
- return $this->report->CellValue($row, $col);
- }
- catch (Exception $e) {
- echo $e->getMessage() . "\r\n";
- return 0;
- }
- }
- public function SaveAsPdf ($filename = "", $layers = null)
- {
- if ($filename == "") {
- $filename = $this->ReportName;
- }
- $layerCount = $this->report->Layers->Count;
- if ($layers == null) {
- $layers = range(0, $layerCount);
- }
- foreach ($layers as $layer) {
- if ($layer > $layerCount) {
- continue;
- }
- $pdfFile = "{$this->publishDir}\\{$filename}_{$layer}.pdf";
- $pdf = $this->report->PDFFile($pdfFile, true);
- if ($layer == 0) {
- $pdf->SaveEntireReport = true;
- $pdf->SaveAllCharts = true;
- $pdf->IncludeLegend = false;
- $pdf->AxisOnAllPages = true;
- $pdf->ChartTitleOnAllPages = false;
- } else {
- $this->report->Layers->Item($layer)->Activate();
- if ($this->report->Rows->Count == 0) {
- continue;
- }
- $pdf->SaveEntireReport = false;
- $pdf->SaveAllCharts = false;
- $pdf->IncludeLegend = true;
- $pdf->ChartTitleOnAllPages = true;
- $pdf->AxisOnAllPages = true;
- $pdf->SetListOfLayersToSave($this->report->Layers->Subset($layer, $layer));
- $pdf->SetListOfRowsToSave($this->report->Rows);
- }
- @unlink($pdfFile);
- $pdf->Save();
- }
- }
- public function SaveAsXls ($filename = "")
- {
- if ($filename == "") {
- $filename = "{$this->publishDir}\\{$this->ReportName}_0.xls";
- }
- @unlink($filename);
- $this->report->SaveAs($filename, 4);
- return $filename;
- }
- public function SaveAsPpx ($filename = "")
- {
- if ($filename == "") {
- $filename = substr($this->ppxFile, 0, -4) . ".ppx";
- }
- @unlink($filename);
- $this->report->SaveAs($filename, 5);
- return $filename;
- }
- public function SaveAsAsc ($filename = "")
- {
- if ($filename == "") {
- $filename = "{$this->publishDir}\\{$this->ReportName}.asc";
- }
- @unlink($filename);
- $this->report->SaveAs($filename, 3);
- return $filename;
- }
-
- public function Save ()
- {
- if (substr($this->ppxFile, -4) == ".ppr") {
- $this->SaveAsPpr();
- } else {
- $this->SaveAsPpx();
- }
- }
-
- public function SaveAsPpr ($filename = "")
- {
- if ($filename == "") {
- $filename = substr($this->ppxFile, 0, -4) . ".ppr";
- }
- @unlink($filename);
- $this->report->SaveAs($filename, 1);
- return $filename;
- }
-
- public function PublishImages ()
- {
- $this->clearTempDir();
- $this->report->Visible = true;
- $this->report->Publish($this->tempDir, false, true, true);
- $files = glob($this->tempDir . "*.jpg");
- foreach ($files as $i => $filename) {
- $layer = $i + 1;
- $renameTo = "{$this->publishDir}\\{$this->ReportName}_{$layer}.jpg";
- @unlink($renameTo);
- rename($filename, $renameTo);
- $imageObject = imagecreatefromjpeg($renameTo);
- imagegif($imageObject, substr($renameTo, 0, -4) . '.gif');
- }
- }
- private function clearTempDir ()
- {
- shell_exec("del /F /Q " . $this->tempDir . "*.*");
- }
- }
|