| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 | 
							- <?php
 
- class 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 "?";
 
- 	}
 
- }
 
- ?>
 
 
  |