getParameters(); if (! is_array($params)) { throw new Exception("Unsupported request type"); } $type = false; foreach ($params as $key => $val) { if (isset($entryTypes[$key])) { $type = $entryTypes[$key]; break; } } if (! $type) { throw new Exception("Unsupported request type"); } return $type; } /** * Easy shortcut for creating & appending XML nodes * * @param DOMDocument $doc document the root document * @param DOMElement $node node to append the new child node to * @param string $name name of the new element * @param string $value value of the element, if empty no text node is created * @param array $attributes optional array of attributes, false by default. If set attributes are added to the node using the key => val pairs * @param string $nameSpace optional namespace to use when creating node * @return DOMElement node */ public static function addNode(DOMDocument $doc, $node, $name, $value = '', $attributes = false, $nameSpace = false) { if ($nameSpace) { $childNode = $node->appendChild($doc->createElementNS($nameSpace, $name)); } else { $childNode = $node->appendChild($doc->createElement($name)); } if (! empty($value) || $value == '0') { $childNode->appendChild($doc->createTextNode($value)); } if ($attributes && is_array($attributes)) { foreach ($attributes as $attrName => $attrVal) { $childNodeAttr = $childNode->appendChild($doc->createAttribute($attrName)); if (! empty($attrVal)) { $childNodeAttr->appendChild($doc->createTextNode($attrVal)); } } } return $childNode; } /** * Recursive function that maps an data array or object to it's xml represantation * * @param DOMDocument $doc the root document * @param DOMElement $element the element to append the new node(s) to * @param string $name the name of the to be created node * @param array or object $data the data to map to xml * @param string $nameSpace if specified, the node is created using this namespace * @return DOMElement returns newly created element */ public static function addData(DOMDocument $doc, DOMElement $element, $name, $data, $nameSpace = false) { if ($nameSpace) { $newElement = $element->appendChild($doc->createElementNS($nameSpace, $name)); } else { $newElement = $element->appendChild($doc->createElement($name)); } if (is_array($data)) { foreach ($data as $key => $val) { if (is_array($val) || is_object($val)) { // prevent invalid names.. try to guess a good one :) if (is_numeric($key)) { $key = is_object($val) ? get_class($val) : $key = $name; } self::addData($doc, $newElement, $key, $val); } else { if (is_numeric($key)) { $key = is_object($val) ? get_class($val) : $key = $name; } $elm = $newElement->appendChild($doc->createElement($key)); $elm->appendChild($doc->createTextNode($val)); } } } elseif (is_object($data)) { if ($data instanceof Enum) { if (isset($data->key)) { // enums are output as : $displayValue $keyEntry = $newElement->appendChild($doc->createAttribute('key')); $keyEntry->appendChild($doc->createTextNode($data->key)); $newElement->appendChild($doc->createTextNode($data->getDisplayValue())); } } else { $vars = get_object_vars($data); foreach ($vars as $key => $val) { if (is_array($val) || is_object($val)) { // prevent invalid names.. try to guess a good one :) if (is_numeric($key)) { $key = is_object($val) ? get_class($val) : $key = $name; } self::addData($doc, $newElement, $key, $val); } else { $elm = $newElement->appendChild($doc->createElement($key)); $elm->appendChild($doc->createTextNode($val)); } } } } else { $newElement->appendChild($doc->createTextNode($data)); } return $newElement; } }