"; */ setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge'); include_once 'classes/lg-on_Smarty.class.php'; $smarty = new lgon_Smarty(); require_once("config.inc.php"); require_once("func_rollenrechte.php"); $templatename = substr(basename($_SERVER['PHP_SELF']),0,-3)."html"; require_once "language/german.inc.php"; require("func_highlight.php"); // Rechteüberprüfung $db = dbconnect(); if ($user_admin == ""){ require("index.php"); exit;} //Wenn man nicht angemeldet ist, darf man nicht auf die Seite if(!rore($user_admin,'e_suche','RE')){require("lib/rechte.php");exit;} // Rechteüberprüfung ende if(isset($_GET['action'])){ $action = $_GET['action']; }else{ $action = ''; } if($action == ''){ $query1 = "SELECT lueaid, bezeichnung FROM lue_art WHERE bezeichnung != '' ORDER BY bezeichnung ASC"; $result1 = $db->query($query1); while ($row = $result1->fetch_array()) { $value[] = $row; } // Assign this array to smarty... $smarty->assign('table_data', $value); } if($action == 'suche'){ $thema = strtoupper($_POST['thema']); $einleitung = strtoupper($_POST['einleitung']); $inhalt = trim(strtoupper($_POST['inhalt'])); $extrakt = strtoupper($_POST['extrakt']); $art = $_POST['art']; $lueart = $_POST['lueart']; //Select zusammenbauen if($art == 'exact' AND $thema != ''){ // wenn leer, darf kein regexp kommen, sonst würde er nichts finden $trenner1 = 'REGEXP '; $start1 = '[[:<:]]'; $ende1 = '[[:>:]]'; }else{ $trenner1 = 'LIKE '; $start1 = '%'; $ende1 = '%'; } if($art == 'exact' AND $einleitung != ''){ $trenner3 = 'REGEXP '; $start3 = '[[:<:]]'; $ende3 = '[[:>:]]'; }else{ $trenner3 = 'LIKE '; $start3 = '%'; $ende3 = '%'; } if($art == 'exact' AND $inhalt != ''){ $trenner4 = 'REGEXP '; $start4 = '[[:<:]]'; $ende4 = '[[:>:]]'; }else{ $trenner4 = 'LIKE '; $start4 = '%'; $ende4 = '%'; } if($art == 'exact' AND $extrakt != ''){ $trenner5 = 'REGEXP '; $start5 = '[[:<:]]'; $ende5 = '[[:>:]]'; }else{ $trenner5 = 'LIKE '; $start5 = '%'; $ende5 = '%'; } $sql1 = "SELECT count(*) as anz_treffer FROM lue_quelle WHERE lueaid like '$lueart' AND "; ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DAS THEMA ###################################################################################################### $thema = preg_replace('/\s{2,}/sm',' ',$thema,PREG_SET_ORDER); //Mehr als zwei leerzeichen entfernen preg_match_all("/(\-{0,1}\+{0,1}\*{0,1}%{0,1}\"([^\"]+)\"\*{0,1}%{0,1}\+{0,1}\-{0,1}|\-{0,1}\+{0,1}\*{0,1}%{0,1}(\w+)\*{0,1}%{0,1}\+{0,1}\-{0,1})/u", $thema, $Themen); # Erklärung: \-{0,1} --> 0 oder 1 Minuszeichen kann string enthalten # \+{0,1} --> 0 oder 1 Pluszeichen kann string enthalten # \*{0,1} --> 0 oder 1 Asterisk kann string enthalten # %{0,1} --> 0 oder 1 Prozentzeichen kann string enthalten, muss nicht durch \ escaped werden # Vorderer Teil bis | überprüft ob "" eingegeben wurden und splittet innerhalb der "" nicht. Hinterer Teil wenn Wörter ohne "" eingegeben wurde $sql =""; if($thema != ""){ $sql .= " ("; //Kein AND vor der Klammer notwendig, da direkt nach where, bei anderen muss AND davor stehen for($i=0; $i < count($Themen[0]); $i++) { #In der Überschrift kommen Umlaute vor, daher keine Ersetzung der Umlaute #$thema = str_replace (array("\\", "ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), array("", "&AUML;", "&OUML;", "&UUML;", "&SZLIG;", "&AUML;", "&OUML;", "&UUML;"), $Themen[0][$i]); $them = str_replace (array("+", "-", "\"", "\\"), array("", "", "", ""), $Themen[0][$i]); if($i == 0){ $oper = ""; }else{ $oper = "AND"; } if(strpos($Themen[0][$i],"+") === 0){ $sql .= "UPPER(thema) $trenner1 '$start1".$them."$ende1' "; } elseif(strpos($Themen[0][$i],"-") === 0){ $sql .= "$oper UPPER(thema) NOT $trenner1 '$start1".$them."$ende1' "; } elseif($Themen[0][$i] == ""){ NULL; }else{ $sql .= "$oper UPPER(thema) $trenner1 '$start1".$them."$ende1' "; } } $sql .= ")"; }else{ $sql .= " UPPER(thema) LIKE '%' "; //Wenn nichts eingegeben, dann soll alles angzeigt werden. Das braucht man hier weil zusammengesetzter string sonst WHERE AND TEXTSTELLE = .... heißen könnte } ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DAS THEMA ENDE ###################################################################################################### ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DIE EINLEITUNG ###################################################################################################### $einleitung = preg_replace('/\s{2,}/sm',' ',$einleitung,PREG_SET_ORDER); //Mehr als zwei leerzeichen entfernen preg_match_all("/(\-{0,1}\+{0,1}\*{0,1}%{0,1}\"([^\"]+)\"\*{0,1}%{0,1}\+{0,1}\-{0,1}|\-{0,1}\+{0,1}\*{0,1}%{0,1}(\w+)\*{0,1}%{0,1}\+{0,1}\-{0,1})/u", $einleitung, $Einleitungen); if($einleitung != ""){ $sql .= "AND ("; for($i=0; $i < count($Einleitungen[0]); $i++) { $einleitung = str_replace (array("\\", "ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), array("", "&AUML;", "&OUML;", "&UUML;", "&SZLIG;", "&AUML;", "&OUML;", "&UUML;"), $Einleitungen[0][$i]); $sucheinleitung = str_replace (array("+", "-", "\"", "\\"), array("", "", "", ""), $einleitung); if($i == 0){ $oper = ""; }else{ $oper = "AND"; } if(strpos($Einleitungen[0][$i],"+") === 0){ $sql .= "UPPER(einleitung) $trenner3 '$start3".$sucheinleitung."$ende3' "; } elseif(strpos($Einleitungen[0][$i],"-") === 0){ $sql .= "$oper UPPER(einleitung) NOT $trenner3 '$start3".$sucheinleitung."$ende3' "; } elseif($Einleitungen[0][$i] == ""){ NULL; }else{ $sql .= "$oper UPPER(einleitung) $trenner3 '$start3".$sucheinleitung."$ende3' "; } } $sql .= ")"; } ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DIE EINLEITUNG ENDE ###################################################################################################### ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DEN INHALT ###################################################################################################### $inhalt = preg_replace('/\s{2,}/sm',' ',$inhalt,PREG_SET_ORDER); //Mehr als zwei leerzeichen entfernen preg_match_all("/(\-{0,1}\+{0,1}\*{0,1}%{0,1}\"([^\"]+)\"\*{0,1}%{0,1}\+{0,1}\-{0,1}|\-{0,1}\+{0,1}\*{0,1}%{0,1}(\w+)\*{0,1}%{0,1}\+{0,1}\-{0,1})/u", $inhalt, $Inhalte); if($inhalt != ""){ $sql .= "AND ("; for($i=0; $i < count($Inhalte[0]); $i++) { $inhalt = str_replace (array("\\", "ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), array("", "&AUML;", "&OUML;", "&UUML;", "&SZLIG;", "&AUML;", "&OUML;", "&UUML;"), $Inhalte[0][$i]); $suchwort = str_replace (array("+", "-", "\"", "\\"), array("", "", "", ""), $inhalt); if($i == 0){ $oper = ""; }else{ $oper = "AND"; } if(strpos($Inhalte[0][$i],"+") === 0){ $sql .= "UPPER(ausfuehrung) $trenner4 '$start4".$suchwort."$ende4' "; } elseif(strpos($Inhalte[0][$i],"-") === 0){ $sql .= "$oper UPPER(ausfuehrung) NOT $trenner4 '$start4".$suchwort."$ende4' "; } elseif($Inhalte[0][$i] == ""){ NULL; }else{ $sql .= "$oper UPPER(ausfuehrung) $trenner4 '$start4".$suchwort."$ende4' "; } } $sql .= ")"; } ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DEN INHALT ENDE ###################################################################################################### ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DEN EXTRAKT ###################################################################################################### $extrakt = preg_replace('/\s{2,}/sm',' ',$extrakt,PREG_SET_ORDER); //Mehr als zwei leerzeichen entfernen preg_match_all("/(\-{0,1}\+{0,1}\*{0,1}%{0,1}\"([^\"]+)\"\*{0,1}%{0,1}\+{0,1}\-{0,1}|\-{0,1}\+{0,1}\*{0,1}%{0,1}(\w+)\*{0,1}%{0,1}\+{0,1}\-{0,1})/u", $extrakt, $Extrakte); if($extrakt != ""){ $sql .= "AND ("; for($i=0; $i < count($Extrakte[0]); $i++) { $extrakt = str_replace (array("\\", "ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), array("", "&AUML;", "&OUML;", "&UUML;", "&SZLIG;", "&AUML;", "&OUML;", "&UUML;"), $Extrakte[0][$i]); $suchextrakt = str_replace (array("+", "-", "\"", "\\"), array("", "", "", ""), $extrakt); if($i == 0){ $oper = ""; }else{ $oper = "AND"; } if(strpos($Extrakte[0][$i],"+") === 0){ $sql .= "UPPER(extrakt) $trenner4 '$start5".$suchextrakt."$ende5' "; } elseif(strpos($Extrakte[0][$i],"-") === 0){ $sql .= "$oper UPPER(extrakt) NOT $trenner5 '$start4".$suchextrakt."$ende5' "; } elseif($Extrakte[0][$i] == ""){ NULL; }else{ $sql .= "$oper UPPER(extrakt) $trenner5 '$start5".$suchextrakt."$ende5' "; } } $sql .= ")"; } ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DEN INHALT ENDE ###################################################################################################### ###################################################################################################### ## GESAMTSELECT - SQL ZUSAMMENBAUEN ###################################################################################################### $query = $sql1.$sql; #echo $query; #exit; $result = $db->query($query); $res = $result->fetch_array() or die ("Cannot execute query"); function kurzer_text($string,$laenge){ $origin=strlen($string); $stri_arr=explode(" ",$string); $anzzahl=count($stri_arr); $gekuerzt=0; $string=""; while($gekuerzt<$anzzahl){ $string_alt=$string; $string=$string." ".$stri_arr[$gekuerzt]; $gekuerzt++; if(strlen($string)>$laenge){ $gekuerzt=$anzzahl; $string=$string_alt; } } if($laenge<$origin){ $string=$string." ..."; } return $string; } if($res['anz_treffer'] == '' or $res['anz_treffer'] == 0){ $smarty->assign('lue_suche_nomatch', "1"); }else{ $smarty->assign('lue_suche_match', "1"); $smarty->assign('anzahltreffer', "$res[anz_treffer]"); $db = dbconnect(); $sql1 = "SELECT eid, thema, einleitung, ausfuehrung, extrakt, bezeichnung FROM lue_quelle a, lue_art b WHERE a.lueaid = b.lueaid AND b.lueaid like '$lueart' AND "; $sql2 = " ORDER BY eid desc"; $query = $sql1.$sql.$sql2; #echo $query; #exit; $result = $db->query($query) or die ("Cannot execute query"); while ($row = $result->fetch_array()){ if($inhalt == ''){ ##$preview = substr(strip_tags($row[inhalt]),0,200)." ... "; $preview = kurzer_text(strip_tags($row['ausfuehrung']),200); }else{ #$preview = preview(strip_tags($row[inhalt]),trim($_POST[inhalt])); ##$preview = substr(strip_tags($row[inhalt]),0,200)." ... "; $preview = kurzer_text(strip_tags($row['ausfuehrung']),200); } if($art == 'exact'){ // Übergabe für Highligthing. Wenn exact, dann darf bei Begriff nicht Gottesdienst hervorgehoben werden $suchart = 0; }else{ $suchart = 1; } $inhalt_hig = urlencode(serialize($_POST['inhalt'])); $row['suchart'] = $suchart; $row['inhalt_hig'] = $inhalt_hig; $row['preview'] = $preview; $value[] = $row; } // Assign this array to smarty... $smarty->assign('table_data', $value); } // Ende if Treffer gefunden } // Ende Action=suche $smarty->assign('action', "$action"); $smarty->display("$template/$templatename"); ?>