/** * to be written * * @param mixed $key * @param mixed $value * @param mixed &$metadata * @access private */ function addTableInfo($key, $value, &$metadata) {
}
// end functions, which are intended to be overriden in user classes
// here come some helper functions...
/** * make utf8 out of the input data and escape & with & and "< " with "< " * (we assume that when there's no space after < it's a tag, which we need in the xml) * I'm not sure, if this is the standard way, but it works for me. * * @param string text to be utfed. * @access private */ function xml_encode ($text) { if (function_exists("iconv") && isset($this->encoding_from) && isset($this->encoding_to)) { ini_set("track_errors",1); $text = iconv($this->encoding_from,$this->encoding_to,ereg_replace("&","&",ereg_replace("< ","< ",$text)));
if (! isset($text) ) { if (isset($php_errormsg)) { $errormsg = "error: $php_errormsg"; } else { $errormsg = "undefined iconv error, turn on track_errors in php.ini to get more details"; } return PEAR::raiseError($errormsg,Null,PEAR_ERROR_DIE); } else { return $text; } } else { //$text = utf8_encode(ereg_replace("&","&",ereg_replace("< ","< ",$text))); $text = trim(ereg_replace("&","&",ereg_replace("< ","< ",$text))); // echo $text; } return $text; }
//taken from kc@hireability.com at http://www.php.net/manual/en/function.array-merge-recursive.php /** * There seemed to be no built in function that would merge two arrays recursively and clobber * any existing key/value pairs. Array_Merge() is not recursive, and array_merge_recursive * seemed to give unsatisfactory results... it would append duplicate key/values. * * So here's a cross between array_merge and array_merge_recursive **/ /** * * @param array first array to be merged * @param array second array to be merged * @return array merged array * @access private */ function array_merge_clobber($a1,$a2) { if(!is_array($a1) !is_array($a2)) return false; $newarray = $a1; while (list($key, $val) = each($a2)) { if (is_array($val) && is_array($newarray[$key])) { $newarray[$key] = $this->array_merge_clobber($newarray[$key], $val); } else { $newarray[$key] = $val; } } return $newarray; }
/** * Adds a xml string to $this->xmldoc. * It's inserted on the same level as a "normal" resultset, means just as a children of * if a xpath expression is supplied, it takes that for selecting only part of the xml-file * * the clean code works only with php 4.0.7 * for php4.0.6 : * I found no cleaner method than the below one. it's maybe nasty (xmlObject->string->xmlObject), * but it works. If someone knows how to add whole DomNodes to another one, let me know... * * @param string xml string * @param mixed xpath either a string with the xpath expression or an array with "xpath"=>xpath expression and "root"=tag/subtag/etc, which are the tags to be inserted before the result * @access private */
function doXmlString2Xml ($string,$xpath = Null) {
//check if we have a recent domxml. otherwise use the workaround... $version = explode(".",phpversion());
if (! ($version[0] <= 4 and $version[1] <= 0 and $version[2] < 7) ){
if (is_array($xpath)) { if (isset($xpath["root"])) { $root = $xpath["root"]; } $xpath = $xpath["xpath"]; }
if (isset($root)) { $roots = explode("/",$root); foreach ($roots as $rootelement) { if ( strlen($rootelement) > 0 ) { $subroot = $subroot->new_child($rootelement,""); } } }
//$this->xmlroot->addchild does some strange things when added nodes from xpath.... so this comment helps out $newchild = $subroot->add_child($this->xmldoc->create_comment("the purpose of this comment is a workaround in sql2php.php line ".__LINE__));
// if no xpath is given, just take the whole file if ( (is_null($xpath))) { $newchild->append_child($tmpxml->root()); } else { $xctx = $tmpxml->xpath_new_context(); $xnode = xpath_eval($xctx,$xpath); foreach ($xnode->nodeset as $node) { $newchild->append_child($node); } }
/** * sets the encoding for the db2xml transformation * @param string $encoding_from encoding to transform from * @param string $encoding_to encoding to transform to * @access public */ function setEncoding ($encoding_from = "ISO-8859-1", $encoding_to ="UTF-8") { $this->encoding_from = $encoding_from; $this->encoding_to = $encoding_to; } /** * @param array $parentTables parent to child relation * @access public */
function SetParentTables($parentTables) { foreach ($parentTables as $table => $parent) { $table_info["parent_table"][$table]=$parent; } $this->SetOptions(array("user_tableInfo"=>$table_info)); }
/** * returns the content of the first match of the xpath expression * * @param string $expr xpath expression * @return mixed content of the evaluated xpath expression * @access public */
/** * get the values as an array from the childtags from the first match of the xpath expression * * @param string xpath expression * @return array with key->value of subtags * @access public */
function getXpathChildValues ($expr) { $xpth = $this->xmldoc->xpath_new_context(); $xnode = xpath_eval($xpth,$expr);