| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 | <?phpclass GapsXmlInfoController{	private $xmlConfigPath;	private $reportFiles;	private $reportPaths;	public static function Run ($argv)	{		echo "* Erstelle Info-Dateien fuer Portal und Versand\r\n";		$gapsXmlCtrl = new GapsXmlInfoController($argv[1]);		$gapsXmlCtrl->execute();	}	public function __construct ($path = "")	{		$this->xmlConfigPath = $path;		@mkdir("{$this->xmlConfigPath}\\info");		$this->reportFiles = array();		$this->reportPaths = array();		ini_set("default_charset", "iso-8859-1");	}	public function execute ()	{		$this->applyToAllXmlFiles("getExistingReportFiles");		$result = array();		$result['reports'] = $this->applyToAllXmlFiles("reports");		$this->writeCsvFile($this->getFileName("reports"), $result['reports']);		$result['versand'] = $this->applyToAllXmlFiles("versand");		$this->writeCsvFile($this->getFileName("versand"), $result['versand']);		$result['scorecards'] = $this->applyToAllXmlFiles("scorecards");		$this->writeCsvFile($this->getFileName("scorecards"), $result['scorecards']);		$result['ppr'] = $this->applyToAllXmlFiles("ppr");		$result['ppr'] = array_values(array_merge($result['ppr'], $this->getUnusedReportFiles($result['ppr'])));		$this->writeCsvFile($this->getFileName("ppr"), $result['ppr']);				$this->writeJsonFile($this->getFileName("info", ".json"), $result);	}	private function applyToAllXmlFiles ($callback)	{		$configDir = dir($this->xmlConfigPath);		$result = array();		while ($xmlFile = $configDir->read()) {			if (!preg_match('/\.xml$/i', $xmlFile) || $xmlFile == "auth.xml") {				continue;			}			$doc = simplexml_load_file($this->xmlConfigPath . "\\" . $xmlFile);			$add = @call_user_func(array($this, $callback), $xmlFile, $doc);			$result = array_merge($result, $add);		}		return $result;	}	private function reports ($fileName, $doc)	{		$result = array();		$subPath = $this->getReportsSubDir($doc);		foreach ($doc->Publishes->Publish as $publish) {			/** @var SimpleXMLElement $publish */			$attr = $publish->attributes();			foreach ($publish->Images->Image as $image) {				$rep = strtolower(trim($subPath . (string)$image->Report));				$r = array();				$r['Datei'] = $fileName;				$r['Benutzer'] = substr((string)$image->Directory, 0, -1);				$r['Struktur'] = (string)$attr->Name;				$r['Report'] = (string)$image->Report;				$r['Name'] = str_replace(";", ",", (string)$image->Name);				$r['GIF'] = (string)$image->GIFGenerate;				$r['Schicht'] = (string)$image->ImageLayer;				$r['PDF'] = (string)$image->PDFGenerate;				$r['PDF-Schicht'] = (string)$image->PDFImageLayer;				$r['XLS'] = (string)$image->XLSGenerate;				$r['Versand'] = (string)$image->SendEmail;				$r['Empfaenger'] = str_replace(";", ",", (string)$image->Email);				$r['Cube'] = (isset($this->reportFiles[$rep])) ? $this->reportFiles[$rep] : "";				$result[] = $r;			}		}		return $result;	}	private function versand ($fileName, $doc)	{		$result = array();		$subPath = $this->getReportsSubDir($doc);		foreach ($doc->Publishes->Publish as $publish) {			/** @var SimpleXMLElement $publish */			$attr = $publish->attributes();			foreach ($publish->Images->Image as $image) {				if (stripos((string)$image->Report, "_graf")) {					continue;				}							$empfaenger = explode(";", (string)$image->Email);				if ($empfaenger[0] == "") {					continue;				}				$rep = strtolower(trim($subPath . (string)$image->Report));				foreach ($empfaenger as $eintrag) {					$e = array();					$e['Datei'] = $fileName;					$e['Benutzer'] = substr((string)$image->Directory, 0, -1);					$e['Struktur'] = (string)$attr->Name;					$e['Empfaenger'] = strtolower($eintrag);					$e['Report'] = (string)$image->Report;					$e['Name'] = str_replace(";", ",", (string)$image->Name);					$e['Versand'] = (string)$image->SendEmail;					$e['PDF'] = (string)$image->PDFGenerate;					$e['PDF-Schicht'] = (string)$image->PDFImageLayer;					$e['XLS'] = (string)$image->XLSGenerate;					$e['Cube'] = (isset($this->reportFiles[$rep])) ? $this->reportFiles[$rep] : "";					$result[] = $e;				}			}		}		return $result;	}	private function scorecards ($fileName, $doc)	{		$result = array();		foreach ($doc->Scorecards->Scorecard as $publish) {			/** @var SimpleXMLElement $publish */			$attr = $publish->attributes();			foreach ($publish->Reports->Report as $sc) {				$r = array();				$r['Datei'] = $fileName;				$r['Benutzer'] = substr((string)$attr->Directory, 0, -1);				$r['Struktur'] = (string)$attr->Name;				$r['Report'] = (string)$sc->ReportFile;				$r['Name'] = str_replace(";", ",", (string)$sc->Name);				$r['Zeile'] = (string)$sc->RowData;				$r['Spalte'] = (string)$sc->ColData;				$r['Aktiv'] = (string)$sc->Active;				$result[] = $r;			}		}		return $result;	}	public function getExistingReportFiles ($fileName, $doc, $getSubPath = true, $cubefilter = false)	{		$pprPath = (is_dir($doc)) ? $doc : (string)$doc->General->ReportPath;		$this->reportPaths[$pprPath][$fileName] = 1;		if (count($this->reportPaths[$pprPath]) > 1) {			return array();		}		if (!is_dir($pprPath)) return array();		$pprDir = dir($pprPath);		$subPath = ($getSubPath) ? $this->getReportsSubDir($doc) : "";		while ($file = $pprDir->read()) {			if (preg_match('/(.*)\.pp[rx]$/i', $file, $matches)) {				$cube = GapsXmlInfoController::openFileAndExtractCubeInfo($pprPath.$file);				$rep = strtolower($subPath.$matches[1]);				if (!$cubefilter || $cubefilter == $cube) {					$this->reportFiles[$rep] = $cube;				}			}		}		return $this->reportFiles;	}	public static function openFileAndExtractCubeInfo ($fileName)	{		$fh = fopen($fileName, "r");		for ($i = 0; $i < 200; $i++) {			$row = fread($fh, 300);			if (preg_match("/cube_out.([\w\s\d]*)\.mdc/i", $row, $matches)) {				fclose($fh);				return strtolower($matches[1]);			}		}		fclose($fh);		return "";	}	private function ppr ($fileName, $doc)	{		$subPath = $this->getReportsSubDir($doc);		$linksArray = array();		$result = array();		foreach ($doc->Publishes->Publish as $publish) {			/** @var SimpleXMLElement $publish */			$attr = $publish->attributes();			foreach ($publish->Images->Image as $image) {				$rep = strtolower(trim($subPath . (string)$image->Report));				$layer = 0 + (int)$image->ImageLayer + (int)$image->PDFImageLayer;				if (isset($linksArray[$rep])) {					$linksArray[$rep][$layer] = 1;					continue;				}				$linksArray[$rep][$layer] = 1;				$r = array();				$r['Datei'] = $fileName;				$r['Report'] = $rep;				$r['Name'] = trim(str_replace(";", ",", (string)$image->Name));				$r['PPR'] = (isset($this->reportFiles[$rep])) ? "" : "fehlt";				$r['Cube'] = (isset($this->reportFiles[$rep])) ? $this->reportFiles[$rep] : "";				$r['Typ'] = $this->getImageType($image);				$r['Schichten'] = "";				$result[$rep] = $r;			}		}		foreach ($doc->Scorecards->Scorecard as $publish) {			/** @var SimpleXMLElement $publish */			$attr = $publish->attributes();			foreach ($publish->Reports->Report as $sc) {				$rep = strtolower(trim($subPath . (string)$sc->ReportFile));				if (isset($linksArray[$rep])) {					continue;				}				$linksArray[$rep][0] = 1;				$r = array();				$r['Datei'] = $fileName;				$r['Report'] = $rep;				$r['Name'] = trim(str_replace(";", ",", (string)$sc->Name));				$r['PPR'] = (isset($this->reportFiles[$rep])) ? "" : "fehlt";				$r['Cube'] = (isset($this->reportFiles[$rep])) ? $this->reportFiles[$rep] : "";				$r['Typ'] = "SC";				$r['Schichten'] = "";				$result[$rep] = $r;			}		}		foreach ($linksArray as $rep => $layer) {			$lay = array_keys($layer);			sort($lay);			$result[$rep]['Schichten'] = "[" . implode(",", $lay) . "]";		}		return $result;	}	private function getUnusedReportFiles ($linksArray)	{		$result = array();		$rest = array_diff(array_keys($this->reportFiles), array_keys($linksArray));		foreach ($rest as $rep) {			$r = array();			$r['Datei'] = "nicht verwendet";			$r['Report'] = $rep;			$r['Name'] = "";			$r['PPR'] = "";			$r['Cube'] = $this->reportFiles[$rep];			$r['Typ'] = "";			$r['Schichten'] = "";			$result[$rep] = $r;		}		return $result;	}	private function writeCsvFile ($fileName, $content)	{		if (count($content) > 0) {			$c = array();			$c[] = implode(";", array_keys(current($content)));			foreach($content as $row) {				$c[] = implode(";", $row);			}			file_put_contents($fileName, mb_convert_encoding(implode("\r\n", $c), "ISO-8859-1", "UTF-8"));			echo "* Schreibe Datei '{$fileName}'\r\n";		}	}		private function writeJsonFile ($fileName, $content)	{		file_put_contents($fileName, json_encode($content));		echo "* Schreibe Datei '{$fileName}'\r\n";	}	private function getFileName ($fileName, $extension = ".csv")	{		$fileName = "{$this->xmlConfigPath}\\info\\{$fileName}{$extension}";		return $fileName;	}	private function getReportsSubDir ($doc)	{		$pprPath = (string)$doc->General->ReportPath;		$parentDir = dirname($pprPath);		$subDir = str_replace($parentDir . "\\", "", $pprPath);		return $subDir;	}	private function getImageType ($image)	{		if ((string)$image->PDFGenerate == "J") return "PDF";		if ((string)$image->GIFGenerate == "J") return "GIF";		if ((string)$image->XLSGenerate == "J") return "XLS";		if ((string)$image->Active == "J") return "PPR";		return "?";	}}?>
 |