private function getMergedParameters($wwsd, $result) { $wsClient = DefineWebServiceSpecialAjaxAccess::createWSClient($wwsd->getURI()); if ($result) { $wwsdParameters = new SimpleXMLElement($wwsd->getResult()); } else { $wwsdParameters = new SimpleXMLElement("<p>" . $wwsd->getParameters() . "</p>"); } $wwsdParameters = $wwsdParameters->children(); $rawParameters = $wsClient->getOperation($wwsd->getMethod()); $wsdlParameters = array(); if ($result) { $wsdlParameters = WebService::flattenParam("", $rawParameters[0], $wsClient); } else { //todo: handle no params $numParam = count($rawParameters); for ($i = 1; $i < $numParam; $i++) { $pName = $rawParameters[$i][0]; $pType = $rawParameters[$i][1]; $tempFlat = WebService::flattenParam($pName, $pType, $wsClient); $wsdlParameters = array_merge($wsdlParameters, $tempFlat); } } $mergedParameters = array(); $unsetwwsdParameters = array(); //todo: handle overflows foreach ($wsdlParameters as $wsdlParameter) { if (!$result) { $wsdlParameter = substr($wsdlParameter, 1); } $wsdlParameterSteps = explode("/", $wsdlParameter); $found = false; foreach ($wwsdParameters as $key => $wwsdParameter) { if (!is_null($wwsdParameter['subject'])) { continue; } if (!$result) { $matchedPath = "/"; } else { $matchedPath = "//"; } $wwsdParameterSteps = explode("/", $wwsdParameter["path"]); if (count($wsdlParameterSteps) != count($wwsdParameterSteps)) { continue; } for ($k = 0; $k < count($wsdlParameterSteps); $k++) { if ($wsdlParameterSteps[$k] == "" && $wwsdParameterSteps[$k] == "") { continue; } $dupPos = strpos($wsdlParameterSteps[$k], "##duplicate"); $overflowPos = strpos($wsdlParameterSteps[$k], "##overflow"); //$bracketPos = strpos($wwsdParameterSteps[$k], "["); $wwsdParameterStep = $wwsdParameterSteps[$k]; //if($bracketPos > 0){ // $wwsdParameterStep = substr($wwsdParameterStep, 0, $bracketPos); // $dupPos = $dupPos."-"; //} if (@strpos($wsdlParameterSteps[$k], $wwsdParameterStep) === 0) { $matchedPath .= "/" . $wwsdParameterSteps[$k]; if ($overflowPos) { $matchedPath .= "##overflow##"; } if ($dupPos) { $matchedPath .= "##duplicate"; } } else { $matchedPath = ""; break; } } if (strlen($matchedPath) > 0 && $matchedPath != "//") { $found = true; $a = array(); $a["name"] = $wwsdParameter["name"] . ""; $a["path"] = substr($matchedPath, 1); if (!$result) { $a["defaultValue"] = $wwsdParameter["defaultValue"] . ""; $a["optional"] = $wwsdParameter["optional"] . ""; if (strlen($a["optional"] . "") == 0) { $a["optional"] = "##"; } if (strlen($a["defaultValue"] . "") == 0) { $a["defaultValue"] = "##"; } $subParameter = $this->getSubParameter($wwsdParameter); if (strlen($subParameter) > 0) { $a["subParameter"] = $subParameter; } else { $a["subParameter"] = "##"; } $mergedParameters[$a["path"]] = $a; } else { $a["xpath"] = $wwsdParameter["xpath"] . ""; $a["json"] = $wwsdParameter["json"] . ""; if (strlen($a["xpath"] . "") > 0 || strlen($a["json"] . "") > 0) { if (!array_key_exists($a["path"] . "####", $mergedParameters)) { $found = false; } } if (strlen($a["xpath"] . "") == 0) { $a["xpath"] = "##"; } if (strlen($a["json"] . "") == 0) { $a["json"] = "##"; } $mergedParameters[$a["path"] . $a["json"] . $a["xpath"]] = $a; } $unsetwwsdParameters[$wwsdParameter["path"] . ""] = true; continue; } } if (!$found) { $a = array(); $a["path"] = $wsdlParameter; $a["name"] = "##"; if (!$result) { $a["optional"] = "##"; $a["defaultValue"] = "##"; $a["subParameter"] = "##"; $mergedParameters[$a["path"]] = $a; } else { $a["xpath"] = "##"; $a["json"] = "##"; $mergedParameters[$a["path"] . $a["json"] . $a["xpath"]] = $a; } } } foreach ($wwsdParameters as $wsParameter) { //do not deal with triplification instruction if (!is_null($wwsdParameter['subject'])) { continue; } if (!array_key_exists($wsParameter["path"] . "", $unsetwwsdParameters)) { $o = array(); $o["name"] = $wsParameter["name"] . ""; if ($result) { $o["path"] = "##unmatched" . $wsParameter["path"] . ""; } else { $o["path"] = $wsParameter["path"] . ""; } if (!$result) { $o["defaultValue"] = $wsParameter["defaultValue"] . ""; $o["optional"] = $wsParameter["optional"] . ""; if (strlen($o["optional"] . "") == 0) { $o["optional"] = "##"; } if (strlen($o["defaultValue"] . "") == 0) { $o["defaultValue"] = "##"; } $subParameter = $this->getSubParameter($wsParameter); if (strlen($subParameter) > 0) { $a["subParameter"] = $subParameter; } else { $a["subParameter"] = "##"; } $mergedParameters[$o["path"]] = $o; } else { $o["json"] = $wsParameter["json"] . ""; $o["xpath"] = $wsParameter["xpath"] . ""; if (strlen($o["json"] . "") == 0) { $o["json"] = "##"; } if (strlen($o["xpath"] . "") == 0) { $o["xpath"] = "##"; } $mergedParameters[$o["path"] . $o["json"] . $o["xpath"]] = $o; } } } ksort($mergedParameters); $html = ""; if ($result) { $html .= "<span id=\"editresults\" style=\"display: none\">"; } else { $html .= "<span id=\"editparameters\" style=\"display: none\">"; } $html .= "soap;"; foreach ($mergedParameters as $mergedParameter) { $html .= $mergedParameter["name"] . ";"; // remove parameter paths that start with "//" $html .= $mergedParameter["path"] . ";"; if (!$result) { if (array_key_exists("optional", $mergedParameter)) { $html .= $mergedParameter["optional"] . ";"; } else { $html .= "##;"; } if (array_key_exists("defaultValue", $mergedParameter)) { $html .= $mergedParameter["defaultValue"] . ";"; } else { $html .= "##;"; } if (array_key_exists("subParameter", $mergedParameter)) { $html .= $mergedParameter["subParameter"] . ";"; } else { $html .= "##;"; } } else { $html .= $mergedParameter["xpath"] . ";"; $html .= $mergedParameter["json"] . ";"; } } $html .= "</span>"; return $html; }
/** * this method is called after step 3 (specify parameters) * * @param unknown_string $uri uri of the wsdl * @param unknown_string $methodName the method which was chosen by the user * @return string ";"-separated list of return types that have to be specified * for this method */ function smwf_ws_processStep3($uri, $authenticationType, $user, $pw, $methodName) { $wsClient = DefineWebServiceSpecialAjaxAccess::createWSClient($uri, $authenticationType, $user, $pw); $rawResult = $wsClient->getOperation($methodName); $flatResult = WebService::flattenParam("", $rawResult[0], $wsClient, $typePath); return "todo:handle exceptions;" . implode(";", $flatResult); }