TransformerController.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. class TransformerController
  3. {
  4. public static function Run ($argv)
  5. {
  6. $action = $argv[1];
  7. $pyi = $argv[2];
  8. switch ($action) {
  9. case 'cubename':
  10. echo "\"" . TransformerController::GetCubeName($pyi) . "\"";
  11. break;
  12. case 'duration':
  13. $d = TransformerController::GetDuration($pyi);
  14. if ($d) {
  15. echo "Geschaetzte Dauer: {$d[0]} Minuten\r\n";
  16. echo "Geschaetztes Ende: {$d[1]}\r\n";
  17. }
  18. break;
  19. case 'create':
  20. default:
  21. TransformerController::CreateCube($pyi);
  22. break;
  23. }
  24. }
  25. private $app;
  26. private $model;
  27. private $cubeFile;
  28. private $error;
  29. public function __construct ()
  30. {
  31. $this->app = new COM("CognosTransformer.Application");
  32. }
  33. public static function GetCubeName ($file)
  34. {
  35. $transCtrl = new TransformerController();
  36. if ($transCtrl->OpenModel($file)) {
  37. $cubeFile = $transCtrl->GetCubeFilename();
  38. $transCtrl->Close();
  39. $transCtrl->Quit();
  40. if (preg_match("/cube_out.(.*)\.mdc$/", $cubeFile, $match)) {
  41. return $match[1];
  42. }
  43. }
  44. return "";
  45. }
  46. public static function GetDuration ($logfile)
  47. {
  48. if (file_exists($logfile)) {
  49. foreach (file($logfile) as $line) {
  50. if (preg_match("/ZEIT INSGESAMT \(CUBE ERSTELLEN\),(\d\d):(\d\d):(\d\d)/", $line, $match)) {
  51. $duration = intval($match[1]) * 60 + intval($match[2]) + 1;
  52. $estimate = strtotime("now") + $duration * 60;
  53. return array($duration, date("H:i", $estimate));
  54. }
  55. }
  56. }
  57. return false;
  58. }
  59. public static function CreateCube ($file)
  60. {
  61. $transCtrl = new TransformerController();
  62. $transCtrl->OpenModel($file);
  63. $error = $transCtrl->CreateMdc();
  64. $transCtrl->Close();
  65. $transCtrl->Quit();
  66. if ($error) {
  67. print("\r\n" . TransformerController::formatMessage($error) . "\r\n\r\n");
  68. die(110);
  69. }
  70. }
  71. public function OpenModel ($pyiFile)
  72. {
  73. try {
  74. $this->model = $this->app->OpenModel($pyiFile);
  75. return true;
  76. } catch (Exception $e) {
  77. return false;
  78. }
  79. }
  80. public function GetCubeFilename ()
  81. {
  82. $cube = $this->model->Cubes->Item(1);
  83. $this->cubeFile = $cube->MDCFile;
  84. return $this->cubeFile;
  85. }
  86. public function Close ()
  87. {
  88. $this->model->Close();
  89. }
  90. public function CreateMdc ()
  91. {
  92. try {
  93. $time = strtotime("now");
  94. $cube = $this->model->Cubes->Item(1);
  95. $cube->MDCFile = str_replace("\\cube_out\\", "\\cube_out\\tasks\\", strtolower($cube->MDCFile));
  96. $cube->Update();
  97. $this->model->CreateMDCFiles();
  98. if (!file_exists($cube->MDCFile)) {
  99. return "(TR0001) Cube-Datei wurde nicht geschrieben.";
  100. } else if (intval(filemtime($cube->MDCFile)) < $time) {
  101. return "(TR0002) Cube-Datei ist nicht aktuell. Stand: " . date("d.m.Y H:i:s", filemtime($cube->MDCFile));
  102. } else if (filesize($cube->MDCFile) < 50000) {
  103. return "(TR0003) Cube-Datei ist zu klein. Dateigroesse: " . (filesize($cube->MDCFile)/ 1000) . "KB";
  104. }
  105. } catch (Exception $e) {
  106. if (file_exists($cube->MDCFile) && filesize($cube->MDCFile) < 50000) {
  107. unlink($cube->MDCFile);
  108. }
  109. if (preg_match("/trModel\(CreateMDCFiles\)\s:\s(.*)$/", $e->getMessage(), $match)) {
  110. return $match[1];
  111. }
  112. if (preg_match("/Call to a member function Item\(\) on a non-object/", $e->getMessage(), $match)) {
  113. return "Modell ist blockiert";
  114. }
  115. return $e->getMessage();
  116. }
  117. return false;
  118. }
  119. public function Quit ()
  120. {
  121. $this->app->Quit();
  122. }
  123. private static function formatMessage($message)
  124. {
  125. $message = str_replace("'", "`", $message);
  126. $message = str_replace("\"", "`", $message);
  127. $message = str_replace("ä", "ae", $message);
  128. $message = str_replace("\xf6", "oe", $message);
  129. $message = str_replace("\xfc", "ue", $message);
  130. $message = str_replace("ß", "ss", $message);
  131. $message = str_replace("Ä", "Ae", $message);
  132. $message = str_replace("Ö", "Oe", $message);
  133. $message = str_replace("Ü", "Ue", $message);
  134. $message = str_replace("[->OK]", "", $message);
  135. $message = str_replace("\r", "", $message);
  136. $message = str_replace("\n", " ", $message);
  137. $message = str_replace("<", "", $message);
  138. $message = str_replace(">", "", $message);
  139. return $message;
  140. }
  141. }