/** * Validate subparameters and fill default values * * @param $subParameterBundle : <parameterName : <subParameterName : value>> * @return : an array which contains an array of error messages and an * array which contains the subparameters together with their values */ public function validateSpecifiedSubParameters($subParameterBundle) { $messages = array(); $response = array(); // search for parameters that were not passed and add // them to the subParametersBundle, so that also their // missing subparameters will be recognized if ($this->mParsedParameters != null) { foreach ($this->mParsedParameters->children() as $child) { $found = false; foreach ($subParameterBundle as $parameterName => $subParameters) { if (strtolower("" . $child["name"]) == strtolower($parameterName)) { $found = true; } } if (!$found) { $subParameterBundle["" . $child["name"]] = array(); } } } foreach ($subParameterBundle as $parameterName => $subParameters) { $parameterDefinition = ""; if ($this->mParsedParameters != null) { foreach ($this->mParsedParameters->children() as $child) { if (strtolower("" . $child["name"]) == strtolower($parameterName)) { $parameterDefinition = $child->asXML(); } } } if ($parameterDefinition == "") { $messages[] = wfMsg('smw_wsuse_wrong_parameter', $parameterName); //handle this!!! //return array($messages, null); } $subParameterProcessor = new SMWSubParameterProcessor($parameterDefinition, $subParameters); $subParameterProcessor->getMissingSubParameters(); $missingSP = $subParameterProcessor->getMissingSubParameters(); foreach ($missingSP as $key => $dontCare) { $messages[] = wfMsg('smw_wsuse_parameter_missing', $parameterName . "." . $key); } $unavailableSP = $subParameterProcessor->getUnavailableSubParameters(); foreach ($unavailableSP as $key => $dontCare) { $messages[] = wfMsg('smw_wsuse_wrong_parameter', $parameterName . "." . $key); } $computedParameterValue = $subParameterProcessor->createParameterValue(); if (count($subParameterProcessor->getDefaultSubParameters()) > 0 || count($subParameterProcessor->getPassedSubParameters()) > 0) { $response = array_merge($response, array($parameterName => $subParameterProcessor->createParameterValue())); } } if (count($messages) > 0) { return array($messages, array()); } return array(null, $response); }