createElement("manuserver"); $doc->appendChild($root); $root->setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); $root->setAttribute("xmlns", "http://mins.engsas.de/manuserver"); $root->setAttribute("xsi:schemaLocation", "http://mins.engsas.de/manuserver http://mins.engsas.de/manuserver.xsd"); $response = $doc->createElement("response"); $root->appendChild($response); $elem = $doc->createElement("result"); $response->appendChild($elem); $elem->appendChild($doc->createTextNode($result)); $elem = $doc->createElement("message"); $response->appendChild($elem); $elem->appendChild($doc->createTextNode($message)); // bug in php with libxml 2.6.32. Should be fixed with 2.7.3 // (see http://www.php.net/manual/de/domdocument.schemavalidate.php#89893) // if(!$doc->schemaValidate($localSchema)) // return; echo $doc->saveXML(); return; } # accessing raw post data $request = file_get_contents("php://input"); if(empty($request)){ sendResponse("false", "Empty request send"); return; } $reader = new DOMDocument("1.0", $encoding); if(!$reader->loadXML($request)){ sendResponse("false", "Could not load raw data"); return; } # validate request if(!$reader->schemaValidate($localSchema)){ sendResponse("false", "Raw data not valid"); return; } # parse document # check which request is send $test = $reader->getElementsByTagName("getmanufacturersbyname"); if($test->length == 1){ $name = $reader->getElementsByTagName("name"); if($name->length != 1){ sendResponse("false", "No name tag given"); return; } $name = $name->item(0)->nodeValue; if(empty($name)){ sendResponse("false", "Empty name given"); return; } include("helpers.php"); $manus = matchManufacturer($name, false); if(count($manus) < 1){ sendResponse("true", "No related manufacturers found"); return; } # create result document $doc = manufacturersToXml($manus, $encoding); if(!is_a($doc, "DOMDocument")){ sendResponse("false", "Error composing the Xml containing list of manufacturers (". $doc .")"); return; } echo $doc->saveXML(); return; } $test = $reader->getElementsByTagName("getmanufacturersbyprefix"); if($test->length == 1){ $prefix = $reader->getElementsByTagName("prefix"); if($prefix->length != 1){ sendResponse("false", "No prefix tag given"); return; } $prefix = $prefix->item(0)->nodeValue; if(empty($prefix)){ sendResponse("false", "Empty prefix given"); return; } $connId = @ mysql_connect("localhost", Settings::value("SUBMITUSER"), Settings::value("SUBMITPASSWORD")); if(!$connId){ sendResponse("false", "Could not connect to the database"); return; } if(!mysql_select_db(Settings::value("DBNAME"))){ mysql_close($connId); sendResponse("false", "Could select the database"); return; } # fetch manufacturers (only EAN is supported right now) # at least four digists are needed (with EAN) # this meanes: three digits for language code plus at least four for manufacturer # is equal to seven digits $manus = array(); for($i = strlen($prefix); $i > 6; $i--){ $res = mysql_query("SELECT id, name FROM manufacturers WHERE id IN(SELECT manufacturersId FROM manufacturerhasmins WHERE characteristic LIKE '%". mysql_real_escape_string(substr($prefix, 0, $i)) ."%')"); $count = mysql_num_rows($res); $min = min($count, 20); for($j = 0; $j < $min; $j++){ $manu = mysql_fetch_object($res); $manus[0][$manu->id] = $manu->name; } if(count($manu) > 0) break; } mysql_close($connId); # create result document include("helpers.php"); $doc = manufacturersToXml($manus, $encoding); if(!is_a($doc, "DOMDocument")){ sendResponse("false", "Error composing the Xml containing list of manufacturers (". $doc .")"); return; } echo $doc->saveXML(); return; } $test = $reader->getElementsByTagName("submitprefixes"); if($test->length == 1){ $manufacturers = array(); $manus = $reader->getElementsByTagName("manufacturer"); foreach($manus as $manu){ $elements = $manu->getElementsByTagName("name"); $manufacturer = new Manufacturer($elements->item(0)->nodeValue); $elements = $manu->getElementsByTagName("street"); if($elements->item(0)){ $manufacturer->setStreet( $elements->item(0)->getElementsByTagName("name")->item(0)->nodeValue, $elements->item(0)->getElementsByTagName("number")->item(0)->nodeValue ); } $elements = $manu->getElementsByTagName("zip"); if($elements->item(0)) $manufacturer->setZIP($elements->item(0)->nodeValue); $elements = $manu->getElementsByTagName("city"); if($elements->item(0)) $manufacturer->setCity($elements->item(0)->nodeValue); $elements = $manu->getElementsByTagName("postofficebox"); if($elements->item(0)) $manufacturer->setPostOfficeBox($elements->item(0)->nodeValue); $elements = $manu->getElementsByTagName("country"); if($elements->item(0)) $manufacturer->setCountry($elements->item(0)->nodeValue); $elements = $manu->getElementsByTagName("website"); if($elements->item(0)) $manufacturer->setWebsite($elements->item(0)->nodeValue); $elements = $manu->getElementsByTagName("email"); if($elements->item(0)) $manufacturer->setEMail($elements->item(0)->nodeValue); $elements = $manu->getElementsByTagName("phone"); if($elements->item(0)) $manufacturer->setPhone($elements->item(0)->nodeValue); $elements = $manu->getElementsByTagName("fax"); if($elements->item(0)) $manufacturer->setFax($elements->item(0)->nodeValue); $elements = $manu->getElementsByTagName("prefix"); foreach($elements as $prefix){ $manufacturer->addPrefix($prefix->nodeValue, $prefix->getAttribute("type")); } if($manufacturer->isValid()) array_push($manufacturers, $manufacturer); } # queue prefixes foreach($manufacturers as $manu){ if($manu->isValid()){ $result = $manu->queue(); if(!empty($result)){ sendResponse("false", "Could not queue manufacturer: ". $manu->name() ."\nError: ". $result); return; } } } sendResponse("true"); return; } sendResponse("false", "No valid request action"); return; ?>