X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Ffunctions_helpviewer.inc;h=aad1af72bdba734392a8ffa8307023c3137c990a;hb=2aeab3942abfef8c64c1377992d73082227be400;hp=98040658a770f72f5a2b458c393ad3bb590e13c2;hpb=fcc078a3131b821697c17c5a3e912e210f75d715;p=gosa.git diff --git a/include/functions_helpviewer.inc b/include/functions_helpviewer.inc index 98040658a..aad1af72b 100644 --- a/include/functions_helpviewer.inc +++ b/include/functions_helpviewer.inc @@ -18,10 +18,120 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* Simple class to parse the xml help file */ +class parseXml +{ + var $parser; + var $filename; + var $entries; + + function parseXml($file) + { + $this->parser = xml_parser_create(); + $this->filename = $file; + xml_set_object($this->parser, $this); + xml_set_element_handler($this->parser, "tag_open", "tag_close"); + return($this->entries); + } + function parse() + { + $this->entries = array(); + $fh= fopen($this->filename, "r"); + $xmldata= fread($fh, 100000); + fclose($fh); + if(!xml_parse($this->parser, chop($xmldata))){ + print(sprintf(_("XML error in guide.xml: %s at line %d"), + xml_error_string(xml_get_error_code($this->parser)), + xml_get_current_line_number($this->parser))); + exit; + } + return($this->entries); + } + function tag_open($parser,$tag,$attrs) + { + @$this->entries[$attrs['NAME']]=$attrs; + } + function tag_close(){; } -/******************************************* - Only function definition will follow here -/******************************************* +} + + +/* This function genereates the Index */ +function genIndex() +{ + global $helpobject; + $str = ""; + $test = new pluglist($_SESSION['config'],NULL); + $current_hl = ""; + foreach($_SESSION['helpobject']['helpconf'] as $id => $attrs){ + $path = $test -> get_path($id); + $exists = true; + $helpdir = "../doc/guide/user/".$helpobject['lang']."/html/".preg_replace("/^.*\//i","",$path)."/"; + if(!is_dir($helpdir)){ + $exists = false; + } + $print_hl = false; + if($current_hl != $attrs['HEADLINE']){ + $current_hl = $attrs['HEADLINE']; + $str .= "

"._($current_hl)."

"; + } + $name = $attrs['NAME']; + $file = "index.html"; + //$path = $plug; + if($exists){ + $str .= "

"._($name)."

"; + }else{ + $str .= "

"._($name)." ("._("No help available for this plugin.").")

"; + } + } + return (utf8_decode($str)); +} + + +/* Some replacements */ +$backwardlink = " + \""._("previous")."\" + "; + +$forwardlink = " + \""._("next")."\" + "; + +$pre_mark = "" ; // Sign words with this +$suf_mark = ""; // and this + + +/* Define which tags musst be delete, header, navigation, banner */ +$replacements=array(); +$replacements['from']=array("@@si", + "/border=\".*\"/i", + "''", +// "/alt=\".*\"/i", + "/
/", + "@]*?>.*?ADDRESS>@si", + "@<\/BODY[^>]*?>.*?HTML>@si", + "''", + "/src.*icons/i", + "/src=\"/i", + "/

/", + /* picture replacements */ + // "", + ); + +$replacements['to']=array("", + " border=\"0\" ", + "", + // "", + "", + "", + "", + "", + "src=\"", + "src=\"images/", + "

", + /* picture replacements */ +// "", + ); /* Reads all files in specified directory with contents an some inforations about the file */ @@ -52,6 +162,10 @@ function readfiles($basedir,$prefix,$suffix,$onlyIndex,$singlepage=false) /* While theres is an unreaded file in our resource */ while (($file = readdir($dir)) !== false) { + + if((is_dir($basedir."/".$file))&&($file != "..")&&($file[0]!=".")){ + $str[$file]=(readfiles($basedir."/".$file."/",$prefix,$suffix,$onlyIndex,false)); + } /* Filter all files which arn't intressting */ if((strstr($file,$suffix))&&($file!=".")&&($file!="..")&&(strstr($file,$prefix))){ @@ -141,7 +255,7 @@ function linkwrapper($str,$link) { $str = preg_replace("/HREF=\"http/i","target=\"_blank\" href=\"http",$str); $str = preg_replace("/HREF=\"/","href=\"".$link."?pg=",$str); -// $str=str_replace("HREF=\"","href=\"".$link."?pg=",$str); + $str=str_replace("HREF=\"","href=\"".$link."?pg=",$str); return($str); } @@ -160,6 +274,8 @@ function search($arr,$word) unset($_SESSION['parsed_search_keyword']); $_SESSION['parsed_search_keyword']=""; + error_reporting(E_ALL); + /* prepare searchwords */ $word = trim($word); @@ -179,44 +295,47 @@ function search($arr,$word) } /* Use words to search the content */ - foreach($arr as $key=>$val) + foreach($arr as $keys=>$vals) { - /* overallhits counts hits per page */ - $overallhits=0; + foreach($vals as $key=>$val){ + /* overallhits counts hits per page */ + $overallhits=0; - /* Search all words */ - foreach($useablewords as $word) - { - /* Skip key global, it contains no file data - it is a summary info*/ - if($key!="global") + /* Search all words */ + foreach($useablewords as $word) { - /* Get all hits for the word in $matches*/ - preg_match_all("/".$word."/i",$arr[$key]['content'], $matches,PREG_OFFSET_CAPTURE); - - /* Filter in Tag results*/ - if(count($matches[0])){ - foreach($matches[0] as $num=>$hit){ - if(is_in_tag($arr[$key]['content'],$hit[1])) { - unset($matches[0][$num]); - } + /* Skip key global, it contains no file data - it is a summary info*/ + if($key!="global") + { + + /* Get all hits for the word in $matches*/ + preg_match_all("/".$word."/i",$arr[$keys][$key]['content'], $matches,PREG_OFFSET_CAPTURE); + + /* Filter in Tag results*/ + if(count($matches[0])){ + foreach($matches[0] as $num=>$hit){ + if(isset($arr[$keys][$key]['content']) && (is_in_tag($arr[$keys][$key]['content'],$hit[1]))){ + unset($matches[0][$num]); + } + } } - } - /* Count matches */ - $overallhits=$overallhits + count($matches[0]); + /* Count matches */ + $overallhits=$overallhits + count($matches[0]); - /* Save collected data */ - $result[$key]['hits'][$word] = count($matches[0]); - $result[$key]['hits']['overall']= $overallhits; + /* Save collected data */ + $result[$keys][$key]['hits'][$word] = count($matches[0]); + $result[$keys][$key]['hits']['overall']= $overallhits; - /* Save max hits for page */ - if($overallhits > $result['global']['maxhit']){ - $result['global']['maxhit']=$overallhits; - } + /* Save max hits for page */ + if($overallhits > $result['global']['maxhit']){ + $result['global']['maxhit']=$overallhits; + } - /* Add results for word to return value*/ - $result[$key]['match'][$word]=array(); - $result[$key]['match'][$word]=$matches[0]; + /* Add results for word to return value*/ + $result[$keys][$key]['match'][$word]=array(); + $result[$keys][$key]['match'][$word]=$matches[0]; + } } } } @@ -236,11 +355,11 @@ function searchlist($arr,$res,$maxresults) unset($res['global']); /* Detect 10 best Sites */ - foreach($res as $key=>$val){ - + foreach($res as $key=>$resa) + foreach($resa as $keya=>$val){ /* Skip results with no hits */ if($val['hits']['overall']>0){ - $topten[$key] = $val['hits']['overall']; + $topten[$key."/".$keya] = $val['hits']['overall']; } } @@ -249,17 +368,22 @@ function searchlist($arr,$res,$maxresults) $topten = array_reverse($topten); $topten = (array_slice($topten,0,$maxresults)); + /* We have a result, an array with all content, an array with hits and position and we have the 10 best hits */ /* Foreach */ - foreach($topten as $name => $hits) { - $ret.= createResultEntry($arr[$name],$res[$name],$name,$global['maxhit']); + foreach($topten as $key => $hits) { + + $ks = split("\/",$key); + $k1 = $ks[0]; + $k2 = $ks[1]; + + $ret.= createResultEntry($arr[$k1][$k2],$res[$k1][$k2],$key,$global['maxhit']); } /* appending footer message for resultlist */ $ret.= "
- ".sprintf(_("%s results for your search with the keyword %s interpreted as %s"), + ".sprintf(_("%s results for your search with the keyword %s"), "".count($topten)."", - "".($_SESSION['search_string'])."", "".$_SESSION['parsed_search_keyword'].""); $ret.="

"; @@ -283,7 +407,7 @@ function markup_page($arr,$res) } ksort($repl); - + foreach($repl as $position=>$word) { $pos1 = strlen($arr); $arr= markword($arr,($position+$posadd),$word,$pre_mark,$suf_mark); @@ -325,14 +449,14 @@ function createResultEntry($entry,$res,$name,$max)

@@ -348,9 +472,13 @@ function createResultEntry($entry,$res,$name,$max) /*Simple function to detect if we prepare to change a tag or visible text */ function is_in_tag($string,$pos) { - $pos1 = strpos($string,"<",$pos); - $pos2 = strpos($string,">",$pos); - + $pos1 = $pos2 = 0; + if(preg_match("//",$string)){ + $pos2 = strpos($string,">",$pos); + } if ($pos1 > $pos2) { return(true); }else{
- ".$entry['headline']." -".htmlentities( substr(strip_tags($entry['content']),0,120))."... + ".utf8_encode($entry['headline'])." -".utf8_encode(substr(strip_tags($entry['content']),0,120))."... ".progressbar($percentage,50,8)."
- ".htmlentities(sprintf(_("%s%% hit rate in file %s"),$percentage,$name))." + ".(sprintf(_("%s%% hit rate in file %s"),$percentage,$name))."