/** * get import result * @param $import_item * @param $type accept value in post,term,attachment * @return object|string * @example ->get_import_result(array('name'=> 'ax', 'filter'=>'callback'), 'post') * @example ->get_import_result('ax') * @example ->get_import_result($item->children()) //DOMElement/SimpleXMLElement */ public function get_import_result($import_item, $type = 'post') { $tags = array('post' => 'hw:import_post', 'term' => 'hw:import_term', 'attachment' => 'hw:attachment'); if (is_array($import_item) || is_string($import_item)) { if ($type == '') { $type = 'post'; } //default get import post if (is_string($import_item)) { $import_item = array('name' => $import_item); } if (!is_array($import_item) || !isset($import_item['name']) && !isset($import_item['_id'])) { //invalid arguments return; } if (isset($tags[$type])) { $parse = new HWIE_Module_Import_Results($import_item, $tags[$type]); } } elseif ($import_item instanceof SimpleXMLElement || $import_item instanceof DOMElement) { if ($import_item instanceof SimpleXMLElement) { $import_item = dom_import_simplexml($import_item); } $parse = new HWIE_Module_Import_Results($import_item); } if (isset($parse)) { $parse->init($this); return $parse->parse_data()->value; } }
/** * @param $xml * @param $prefix * @param $count * @return array */ public function recursive_option_data($xml, $prefix = '', $count = 0) { //return HW_XML::xml2array($item, 'param', 'params'); $method = 'override'; $attributes = null; $arr = array(); $i_results = array(); foreach ($xml as $id => $element) { $tag = $element->getName(); if ($tag !== 'param' && $tag !== 'params') { continue; } $_recursive = true; $val = null; $skin = $parse = null; $atts = $element->attributes(); $ori_key = $key = isset($atts['name']) ? (string) $atts['name'] : ''; $encoded = isset($atts['encoded']) ? (string) $atts['encoded'] : 0; $export = isset($atts['export']) ? (string) $atts['export'] : ''; if ($count++ == 0) { if (isset($atts['method'])) { $method = (string) $atts['method']; } //tell how to append data if (isset($atts['prefix'])) { $prefix = (string) $atts['prefix']; //prefix option name } $attributes = $atts; } if ($count != 1 && $prefix !== '') { #$key = $prefix.$key; } //for skin data, because not count for xpath namespace element #if(HW_XML::count_childs($element) /*|| count($element->children('params'))*/ ) { //$skin = $this->build_skin_data($element); #} $import_result = HWIE_Module_Import_Results::valid($element); if ($import_result) { $val = $parse = new HWIE_Module_Import_Results(dom_import_simplexml($import_result)); //$parse->init($this->parser->importer); //$val = $parse->parse_data()->value; //$this->import_results[] = &$val; //$i_results[] = &$val; } else { $val = $skin = $this->build_skin_data($element); } //get value /*if(!empty($skin)) { $val = $skin; }*/ if ($val === null) { $val = isset($atts['value']) ? (string) $atts['value'] : (!count($element->children()) ? HW_String::truncate_empty_lines((string) $element) : null); } if ($val === null && !count($element->children()) && $tag == 'params') { $val = array(); } if ($export && isset($val[$export])) { $val = $val[$export]; //used for build_skin_data & other special param } if ($encoded) { //for single param $val = base64_encode(serialize($val)); } $e = get_object_vars($element); if (!empty($e)) { if (HW_XML::count_childs($element) && $_recursive && (empty($skin) && empty($parse))) { $recursive = $this->recursive_option_data($element, $prefix, $count); //join data option if (is_array($recursive->option) && isset($atts->join)) { $recursive->option = join((string) $atts->join, $recursive->option); } if ($key !== '') { $arr[$key] =& $recursive->option; } else { $arr[] =& $recursive->option; } $i_results = array_merge($i_results, $recursive->import_results); #$i_results[0]='XY'; //list($_key, $_value) = end($arr); if ($key) { $_key = $key; } else { end($arr); $_key = key($arr); } $_value = $arr[$_key]; reset($arr); //make sure you reset array data if (is_array($_value) && isset($_value[$export])) { $arr[$_key] = $_value[$export]; $i_results[$_key] =& $arr[$_key]; } if ($encoded) { //encoded whole params has sub $arr[$_key] = base64_encode(serialize($_value)); $i_results[$_key] =& $arr[$_key]; #$arr = base64_encode(serialize($_value)); //don't because if exists more element around it } } else { if ($key !== '') { if ($val instanceof HWIE_Module_Import_Results) { $arr[$key] =& $val; $i_results[$key] =& $val; } else { $arr[$key] = $val; } } else { if ($val instanceof HWIE_Module_Import_Results) { $arr[] =& $val; $i_results[] =& $val; } else { $arr[] = $val; } } } if ($skin) { /*$_skin=$element->xpath('params:skin'); $node = dom_import_simplexml($element); $node->parentNode->removeChild($node);*/ $this->recursive_option_data($element, $prefix, $count); } } else { if ($key !== '') { $arr[$key] = trim($element); } else { $arr[] = trim($element); } } } $result = (object) array('import_results' => &$i_results, 'option' => &$arr, 'method' => $method, 'prefix' => $prefix, 'attributes' => $attributes['@attributes']); return $result; }