/** create payload for arrays * @param $payload_dom - DomDocument for the payload building * @param $parent_node - The parent node to add the content * @param $user_arguments - The user given argument array * @param $ns_prefix */ function wsf_create_payload_for_unknown_array(DomDocument $payload_dom, DomNode $parent_node, $user_arguments, $ns_prefix) { if (is_array($user_arguments)) { foreach ($user_arguments as $key => $value) { if ($ns_prefix != NULL && !empty($ns_prefix)) { $node_name = $ns_prefix . ":" . $key; } else { $node_name = $key; } if (is_object($value)) { $current_node = $payload_dom->createElement($node_name); wsf_create_payload_for_unknown_class_map($payload_dom, $current_node, $value, $ns_prefix); $parent_node->appendChild($current_node); } else { if (wsf_is_map($value)) { $current_node = $payload_dom->createElement($node_name); wsf_create_payload_for_unknown_array($payload_dom, $current_node, $value, $ns_prefix); $parent_node->appendChild($current_node); } else { if (is_array($value)) { foreach ($value as $child_value) { if (is_object($child_value)) { $current_node = $payload_dom->createElement($node_name); wsf_create_payload_for_unknown_class_map($payload_dom, $current_node, $child_value, $ns_prefix); $parent_node->appendChild($current_node); } else { if (wsf_is_map($child_value)) { $current_node = $payload_dom->createElement($node_name); wsf_create_payload_for_unknown_array($payload_dom, $current_node, $child_value, $ns_prefix); $parent_node->appendChild($current_node); } else { if (is_array($child_value)) { error_log("Invalid array (inside an array) supplied around " . print_r($child_value, TRUE) . " \n"); } else { $current_node = $payload_dom->createElement($node_name, $child_value); $parent_node->appendChild($current_node); } } } } } else { $current_node = $payload_dom->createElement($node_name, $value); $parent_node->appendChild($current_node); } } } } } else { // just return the current value; $ele = $payload_dom->createTextNode($user_arguments); $parent_node->appendChild($ele); } }
/** * wsf_parse_payload_for_unknown_class_map * @param $current_node node to parse * @returns array of parsed data */ function wsf_parse_payload_for_unknown_class_map(DomNode $current_node, $element_type, $classmap) { $class_name = NULL; if (is_array($classmap) && array_key_exists($element_type, $classmap)) { $class_name = $classmap[$element_type]; } if (!isset($class_name) || $class_name == NULL) { $class_name = $element_type; } try { $ref_class = new ReflectionClass($class_name); if ($ref_class->isInstantiable()) { $object = $ref_class->newInstance(); } } catch (Exception $e) { $object = new WSFUnknownSchemaConstruct(); } if ($object == NULL) { return NULL; } while ($current_node != NULL && $current_node->nodeType != XML_ELEMENT_NODE) { $current_node = $current_node->nextSibling; } foreach ($current_node->childNodes as $child) { if ($child->nodeType == XML_TEXT_NODE) { $node_value = $child->nodeValue; return $node_value; } $name = $child->tagName; $needle = strpos($name, ':'); if ($needle !== FALSE) { $name = substr($name, $needle + 1); } if ($child->nodeType == XML_ELEMENT_NODE) { $node_value = wsf_parse_payload_for_unknown_class_map($child, $name, $classmap); } else { $node_value = NULL; } if ($node_value !== NULL) { if ($object->{$name} === NULL) { $object->{$name} = $node_value; } else { if (is_array($object->{$name}) && !wsf_is_map($object->{$name})) { $i = count($object->{$name}); $tmp = $object->{$name}; $tmp[$i] = $node_value; $object->{$name} = $tmp; } else { $tmp = $object->{$name}; $object->{$name} = array($tmp, $node_value); } } } } return $object; }