loadXML($svg_file);
$xpath1 = new DOMXPath($doc1);
$xpath1->registerNamespace('svg', 'http://www.w3.org/2000/svg');
//prüfen ob exteranlImage dann wird dieses verwendet
if(strlen($svg_file) < 400){
$url = $xpath1->query("/svg:svg/svg:image/@href");
$svg_file = file_get_contents($url[0]->nodeValue);
}
$doc = new DOMDocument;
$doc->loadXML($svg_file);
$xpath = new DOMXPath($doc);
$xpath->registerNamespace('svg', 'http://www.w3.org/2000/svg');
$root = $xpath->query("/*");
$root[0]->setAttribute("viewBox", "0 0 1280 720");
$widthq = $xpath->query("/*/@width");
$heightq = $xpath->query("/*/@height");
$root = $xpath->query("/*");
$root[0]->setAttribute("viewBox", "0 0 ". $widthq[0]->nodeValue . " " . $heightq[0]->nodeValue);
$widthq[0]->nodeValue = "100%";
$heightq[0]->nodeValue = "100%";
//Get all Text Nodes
$style = $xpath->query('//svg:text');
$keyValueStore=array();
$keyValueStore2=array();
//Get all rect nodes before text nodes and store them in key value store to access them for manipulation
foreach ($style as $result) {
$style2 = $xpath->query('./preceding-sibling::*[1]', $result);
//echo $style2[0]->nodeName;
//echo $result->nodeValue . " ";
//get Rect
foreach ($style2 as $result3) {
//echo $result->nodeValue;
//echo $result3->getAttribute('transform') . "
";
$keyValueStore[$result->nodeValue] = $result3;
$keyValueStore2[$result->nodeValue] = $result;
}
}
$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https://" : "http://") . $_SERVER['HTTP_HOST']. dirname($_SERVER['PHP_SELF']) . "/TransformProductCode.php" . "?ProductCode=" . $_GET["ProductCode"] . "&Semantic=true";
$json = file_get_contents($url);
$asocarray = json_decode($json, true);
//echo "Test für Perfomance:
";
$curstation = $_GET["Station"];
$allAssignmentsPattern=array();
$allAssignmentsStation=array();
$allAssignmentsText=array();
//Einzelbilder vom Universal Storage laden
foreach ($keyValueStore as $key => $value) {
$keyorig = $key;
$key = substr($key, 1);
$keyarray = str_split($key, 2);
if (startsWith($key, 'URL')) {
echo "";
}
$fullfilename = "";
$textentry = "";
foreach($keyarray as $keypart){
//only if all keyparts (Pb Sy Pk Of) can be found within the asociative array (Pb -> E, Sy -> X) the file can be linked otherwise there is a problem.
if($keypart == "ID"){
$fullfilename = $fullfilename . "_ID;" . substr($keyorig, strrpos($keyorig, "ID:") + 3);
$textentry = substr($keyorig, strrpos($keyorig, "ID:") + 3);
break;
}
else if(array_key_exists ($keypart, $asocarray)){
$fullfilename = $fullfilename . "_" . $keypart . ";" . $asocarray[$keypart];
}
else{
continue 2;
}
}
$fullfilename = substr($fullfilename, 1);
$fullfilename2 = $fullfilename;
$fullfilename = $universalStorageEinzelbilder . "Station" . $curstation . "/Station". $curstation. "_" . $fullfilename . ".jpg";
$url = realpath("./../../universal-storage/storage/Stationsbilder/Einzelbilder/" . "Station" . $curstation . "/Station". $curstation. "_" . $fullfilename2 . ".jpg");
//if url does not exist check if symlink exists
if(!$url) {
$fullurl2 = "./../../universal-storage/storage/Stationsbilder/Einzelbilder/Symlinks/Station". $curstation. "_" . $fullfilename2 . ".jpg";
$url = realpath($fullurl2);
//echo "URL: " . $fullurl2;
$fullfilename = $universalStorageEinzelbilder . "Symlinks/Station". $curstation. "_" . $fullfilename2 . ".jpg";
}
//echo "URL: " . $url . " filename" . $fullfilename . "
";
//if Real image was not found search for Assignments
//$file_headers = @get_headers($fullfilename);
//if(!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found') {
if(!$url) {
//echo $fullfilename;
//echo " Does not Exist
";
//echo $key . " ";
//echo json_encode($asocarray);
$onlyUsedParts=array();
foreach($asocarray as $keypart => $keyval){
if(in_array($keypart, $keyarray)){
array_push($onlyUsedParts, $keyval);
}
else{
array_push($onlyUsedParts, "");
}
}
//echo implode (".", $onlyUsedParts);
//echo "
";
array_push($allAssignmentsPattern, implode (".", $onlyUsedParts));
array_push($allAssignmentsStation, $curstation);
array_push($allAssignmentsText, $textentry);
$fullfilename = $wasUrl . "server/assignments/search?pattern=". implode (".", $onlyUsedParts) ."&station=". $curstation ."&Text=" . $textentry;
$json = json_decode(file_get_contents($fullfilename));
if (isset($json[0])) {
$fullfilename = $json[0];
}
else{
continue;
}
}
else{
//echo $fullfilename;
}
//echo $fullfilename . "
";
$element3 = $doc->createElement('pattern');
$element3->setAttribute("id", $fullfilename);
$element3->setAttribute("x", "0");
$element3->setAttribute("y", "0");
$element3->setAttribute("width", "1");
$element3->setAttribute("height", "1");
$element2 = $doc->createElement('image');
$element2->setAttribute("x", "0");
$element2->setAttribute("y", "0");
$element2->setAttribute("width", $value->getAttribute('width'));
$element2->setAttribute("height", $value->getAttribute('height'));
$element2->setAttribute("xlink:href", $fullfilename);
$element3->appendChild($element2);
$parent = $doc->getElementsByTagName('defs')->item(0);
$parent->appendChild($element3);
$value->setAttribute("fill", "url(#". $fullfilename . ")");
//override identifier to be empty
$keyValueStore2[$keyorig]->nodeValue = "";
}
//$keyValueStore["*imga"]->setAttribute("fill", "#FFFFFF");
/*
$url = $wasUrl . "server/assignments/searchMultiple";
$data = array('key1' => json_encode($allAssignmentsPattern), 'key2' => json_encode($allAssignmentsStation), 'key3' => json_encode($allAssignmentsText));
// use key 'http' even if you send the request to https://...
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) {}
else{
//var_dump($result);
}
*/
//replace text from URL GET within image
foreach($_GET as $key => $value){
if($key != "___image___"){
$alltext = $xpath->query('//svg:text');
foreach ($alltext as $text) {
if($key == $text->nodeValue){
$text->nodeValue = $value;
}
}
}
}
//load image Replacements
$replacements = new DOMDocument();
$newstr = substr( $_GET["___image___"], 0, strpos( $_GET["___image___"], '/', strpos( $_GET["___image___"], '/')+1));
$urlreplacement = dirname('https://' . $_SERVER['HTTP_HOST']. $_SERVER['PHP_SELF'], 2) . "/server/" . $newstr . "/replacement";
$replacements->loadXML(file_get_contents($urlreplacement));
$elements = $replacements->getElementsByTagName('item');
foreach($elements as $node){
if(array_key_exists($node->getElementsByTagName("abbreviation")[0]->nodeValue, $keyValueStore)){
$extension = pathinfo($node->getElementsByTagName("url")[0]->nodeValue, PATHINFO_EXTENSION);
if($extension == "mp4"){
$element = $doc->createElement('foreignObject');
//Notwendig da ab und zu mit transform exportiert wird liegt an der powerpoint version
if($result3->getAttribute('transform') != null){
$transform = get_string_between($keyValueStore[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->getAttribute('transform'), "matrix(", ")");
$matrix = explode(" ", $transform);
$videox =$matrix[4];
$videoy =$matrix[5];
$element->setAttribute("x", $videox);
$element->setAttribute("y", $videoy);
}else{
$element->setAttribute("x", $keyValueStore[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->getAttribute('x'));
$element->setAttribute("y", $keyValueStore[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->getAttribute('y'));
}
// echo $result->nodeValue;// + result3->getAttribute('x');
// echo $result3->getAttribute('transform') . "
";
$element->setAttribute("width", $keyValueStore[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->getAttribute('width'));
$element->setAttribute("height", $keyValueStore[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->getAttribute('height'));
$element1 = $doc->createElement('video');
$element1->setAttribute("width", $keyValueStore[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->getAttribute('width'));
$element1->setAttribute("height", $keyValueStore[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->getAttribute('height'));
$element1->setAttribute("controls", "");
$element2 = $doc->createElement('source');
$element2->setAttribute("type", "video/mp4");
$element2->setAttribute("src", $node->getElementsByTagName("url")[0]->nodeValue);
$element1->appendChild($element2);
$element->appendChild($element1);
$parent = $doc->getElementsByTagName('svg')->item(0);
$parent->appendChild($element);
//override identifier to be empty
$keyValueStore2[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->nodeValue = "";
}
else{
//create image element (currently we use background image)
/*
$element = $doc->createElement('image');
$element->setAttribute("x", $keyValueStore[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->getAttribute('x'));
$element->setAttribute("y", $keyValueStore[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->getAttribute('y'));
$element->setAttribute("width", $keyValueStore[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->getAttribute('width'));
$element->setAttribute("height", $keyValueStore[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->getAttribute('height'));
$element->setAttribute("xlink:href", $node->getElementsByTagName("url")[0]->nodeValue);
$doc->appendChild($element);
$parent = $doc->getElementsByTagName('svg')->item(0);
$parent->appendChild($element);
*/
//create pattern for rect-filling looks like this:
/*
*/
$element3 = $doc->createElement('pattern');
$element3->setAttribute("id", $node->getElementsByTagName("abbreviation")[0]->nodeValue);
$element3->setAttribute("x", "0");
$element3->setAttribute("y", "0");
$element3->setAttribute("width", "1");
$element3->setAttribute("height", "1");
$element2 = $doc->createElement('image');
$element2->setAttribute("x", "0");
$element2->setAttribute("y", "0");
$element2->setAttribute("width", $keyValueStore[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->getAttribute('width'));
$element2->setAttribute("height", $keyValueStore[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->getAttribute('height'));
$element2->setAttribute("xlink:href", $node->getElementsByTagName("url")[0]->nodeValue);
$element3->appendChild($element2);
$parent = $doc->getElementsByTagName('defs')->item(0);
$parent->appendChild($element3);
$keyValueStore[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->setAttribute("fill", "url(#".$node->getElementsByTagName("abbreviation")[0]->nodeValue.")");
//override identifier to be empty
$keyValueStore2[$node->getElementsByTagName("abbreviation")[0]->nodeValue]->nodeValue = "";
}
}
}
echo $doc->saveXML();
?>