123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- <?php
- class TransformerController
- {
- public static function Run ($argv)
- {
- $action = $argv[1];
- $pyi = $argv[2];
- switch ($action) {
- case 'cubename':
- echo "\"" . TransformerController::GetCubeName($pyi) . "\"";
- break;
- case 'duration':
- $d = TransformerController::GetDuration($pyi);
- if ($d) {
- echo "Geschaetzte Dauer: {$d[0]} Minuten\r\n";
- echo "Geschaetztes Ende: {$d[1]}\r\n";
- }
- break;
- case 'create':
- default:
- TransformerController::CreateCube($pyi);
- break;
- }
- }
- private $app;
- private $model;
- private $cubeFile;
- private $error;
-
- public function __construct ()
- {
- $this->app = new COM("CognosTransformer.Application");
- }
- public static function GetCubeName ($file)
- {
- $transCtrl = new TransformerController();
- if ($transCtrl->OpenModel($file)) {
- $cubeFile = $transCtrl->GetCubeFilename();
- $transCtrl->Close();
- $transCtrl->Quit();
- if (preg_match("/cube_out.(.*)\.mdc$/", $cubeFile, $match)) {
- return $match[1];
- }
- }
- return "";
- }
-
- public static function GetDuration ($logfile)
- {
- if (file_exists($logfile)) {
- foreach (file($logfile) as $line) {
- if (preg_match("/ZEIT INSGESAMT \(CUBE ERSTELLEN\),(\d\d):(\d\d):(\d\d)/", $line, $match)) {
- $duration = intval($match[1]) * 60 + intval($match[2]) + 1;
- $estimate = strtotime("now") + $duration * 60;
- return array($duration, date("H:i", $estimate));
- }
- }
- }
- return false;
- }
-
- public static function CreateCube ($file)
- {
- $transCtrl = new TransformerController();
- $transCtrl->OpenModel($file);
- $error = $transCtrl->CreateMdc();
- $transCtrl->Close();
- $transCtrl->Quit();
-
- if ($error) {
- print("\r\n" . TransformerController::formatMessage($error) . "\r\n\r\n");
- die(110);
- }
- }
-
- public function OpenModel ($pyiFile)
- {
- try {
- $this->model = $this->app->OpenModel($pyiFile);
- return true;
- } catch (Exception $e) {
- return false;
- }
- }
-
- public function GetCubeFilename ()
- {
- $cube = $this->model->Cubes->Item(1);
- $this->cubeFile = $cube->MDCFile;
- return $this->cubeFile;
- }
-
- public function Close ()
- {
- $this->model->Close();
- }
-
- public function CreateMdc ()
- {
- try {
- $time = strtotime("now");
- $cube = $this->model->Cubes->Item(1);
- $cube->MDCFile = str_replace("\\cube_out\\", "\\cube_out\\tasks\\", strtolower($cube->MDCFile));
- $cube->Update();
- $this->model->CreateMDCFiles();
-
- if (!file_exists($cube->MDCFile)) {
- return "(TR0001) Cube-Datei wurde nicht geschrieben.";
- } else if (intval(filemtime($cube->MDCFile)) < $time) {
- return "(TR0002) Cube-Datei ist nicht aktuell. Stand: " . date("d.m.Y H:i:s", filemtime($cube->MDCFile));
- } else if (filesize($cube->MDCFile) < 50000) {
- return "(TR0003) Cube-Datei ist zu klein. Dateigroesse: " . (filesize($cube->MDCFile)/ 1000) . "KB";
- }
- } catch (Exception $e) {
- if (file_exists($cube->MDCFile) && filesize($cube->MDCFile) < 50000) {
- unlink($cube->MDCFile);
- }
- if (preg_match("/trModel\(CreateMDCFiles\)\s:\s(.*)$/", $e->getMessage(), $match)) {
- return $match[1];
- }
- if (preg_match("/Call to a member function Item\(\) on a non-object/", $e->getMessage(), $match)) {
- return "Modell ist blockiert";
- }
- return $e->getMessage();
- }
- return false;
- }
-
- public function Quit ()
- {
- $this->app->Quit();
- }
- private static function formatMessage($message)
- {
- $message = str_replace("'", "`", $message);
- $message = str_replace("\"", "`", $message);
- $message = str_replace("ä", "ae", $message);
- $message = str_replace("\xf6", "oe", $message);
- $message = str_replace("\xfc", "ue", $message);
- $message = str_replace("ß", "ss", $message);
- $message = str_replace("Ä", "Ae", $message);
- $message = str_replace("Ö", "Oe", $message);
- $message = str_replace("Ü", "Ue", $message);
- $message = str_replace("[->OK]", "", $message);
- $message = str_replace("\r", "", $message);
- $message = str_replace("\n", " ", $message);
- $message = str_replace("<", "", $message);
- $message = str_replace(">", "", $message);
- return $message;
- }
- }
|