"; */ #error_reporting(E_ALL); #ini_set('display_errors', 1); setlocale (LC_ALL, 'de_DE@UTF8', '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,'a_suche','RE')){require("lib/rechte.php");exit;} // Rechteüberprüfung ende if(isset($_GET['action'])){ $action = $_GET['action']; }else{ $action = ''; } if($action == ''){ $db = dbconnect(); $query1 = "SELECT distinct tid, bezeichnung FROM thema WHERE bezeichnung != '' ORDER BY tid DESC"; $result1 = $db->query( $query1); while ($row = $result1->fetch_array()){ $value[] = $row; } // Assign this array to smarty... $smarty->assign('table_data', $value); $query = "SELECT kid, bezeichnung FROM kategorie ORDER BY bezeichnung ASC"; $result = $db->query( $query); while ($row = $result->fetch_array()){ $value1[] = $row; } $smarty->assign('table_data1', $value1); } if($action == 'suche'){ if(isset($_POST['thema'])){ $thema = mb_strtoupper($_POST['thema']); }else{ $thema = ""; } if(isset($_POST['ueberschrift'])){ $ueberschrift = mb_strtoupper($_POST['ueberschrift']); }else{ $ueberschrift = ""; } if(isset($_POST['textstelle'])){ $textstelle = mb_strtoupper($_POST['textstelle']); }else{ $textstelle = ""; } if(isset($_POST['textwort'])){ $textwort = mb_strtoupper($_POST['textwort']); }else{ $textwort = ""; } if(isset($_POST['inhalt'])){ $inhalt = mb_strtoupper($_POST['inhalt']); }else{ $inhalt = ""; } if(isset($_POST['jahr'])){ $jahr = mb_strtoupper($_POST['jahr']); }else{ $jahr = ""; } if(isset($_POST['monat'])){ $monat = mb_strtoupper($_POST['monat']); }else{ $monat = ""; } if(isset($_POST['tag'])){ $tag = mb_strtoupper($_POST['tag']); }else{ $tag = ""; } if(isset($_POST['stapgd'])){ $stapgd = mb_strtoupper($_POST['stapgd']); }else{ $stapgd = ""; } if(isset($_POST['dhtmlgoodies_country'])){ $kid = mb_strtoupper($_POST['dhtmlgoodies_country']); }else{ $kid = ""; } if(isset($_POST['dhtmlgoodies_city'])){ $ukid = mb_strtoupper($_POST['dhtmlgoodies_city']); }else{ $ukid = ""; } if(isset($_POST['art'])){ $art = $_POST['art']; }else{ $art = ""; } setcookie("ck_ukid",$ukid); if ($jahr == "JJJJ"){$jahr = '';} if ($monat == "MM"){$monat = '';} if ($tag == "TT"){$tag = '';} if ($kid == ''){$kid = '%';} if ($thema == ''){$thema = '%';} if ($ukid == ''){$ukid = '%';} //Select zusammenbauen if($art == 'exact' AND $ueberschrift != ''){ // 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 $textstelle != ''){ $trenner2 = 'REGEXP '; $start2 = ''; $ende2 = ''; }else{ $trenner2 = 'LIKE '; $start2 = ''; $ende2 = ''; } if($art == 'exact' AND $textwort != ''){ $trenner3 = 'REGEXP '; $start3 = '[[:<:]]'; $ende3 = '[[:>:]]'; }else{ $trenner3 = 'LIKE '; $start3 = '%'; $ende3 = '%'; } if($art == 'exact' AND $inhalt != ''){ $trenner4 = 'REGEXP '; $start4 = '[[:<:]]'; $ende4 = '[[:>:]]'; }else{ $trenner4 = 'LIKE '; $start4 = '%'; $ende4 = '%'; } $sql1 = "SELECT count(*) as anz_treffer FROM quelle WHERE "; ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DIE ÜBERSCHRIFT ###################################################################################################### $ueberschrift = preg_replace('/\s{2,}/sm',' ',$ueberschrift,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", $ueberschrift, $Ueberschriften); # 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($ueberschrift != ""){ $sql .= " ("; //Kein AND vor der Klammer notwendig, da direkt nach where, bei anderen muss AND davor stehen for($i=0; $i < count($Ueberschriften[0]); $i++) { #In der Überschrift kommen Umlaute vor, daher keine Ersetzung der Umlaute #$ueberschrift = str_replace (array("\\", "ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), array("", "&AUML;", "&OUML;", "&UUML;", "&SZLIG;", "&AUML;", "&OUML;", "&UUML;"), $Ueberschriften[0][$i]); $ueber = str_replace (array("+", "-", "\"", "\\"), array("", "", "", ""), $Ueberschriften[0][$i]); if($i == 0){ $oper = ""; }else{ $oper = "AND"; } if(strpos($Ueberschriften[0][$i],"+") === 0){ $sql .= "UPPER(ueberschrift) $trenner1 '$start1".$ueber."$ende1' "; } elseif(strpos($Ueberschriften[0][$i],"-") === 0){ $sql .= "$oper UPPER(ueberschrift) NOT $trenner1 '$start1".$ueber."$ende1' "; } elseif($Ueberschriften[0][$i] == ""){ NULL; }else{ $sql .= "$oper UPPER(ueberschrift) $trenner1 '$start1".$ueber."$ende1' "; } } $sql .= ")"; }else{ $sql .= " UPPER(ueberschrift) 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 DIE ÜBERSCHRIFT ENDE ###################################################################################################### ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DIE TEXTSTELLE ###################################################################################################### if($textstelle == ''){ $sql .= " AND ("; $sql .= " UPPER(textstelle) like '%' "; $sql .= " ) "; }else{ $sql .= " AND ("; $sql .= " UPPER(textstelle) like '$textstelle' "; $sql .= " ) "; } ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DIE TEXTSTELLE ENDE ###################################################################################################### ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DAS TEXTWORT ###################################################################################################### $textwort = preg_replace('/\s{2,}/sm',' ',$textwort,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", $textwort, $Textworte); if($textwort != ""){ $sql .= "AND ("; for($i=0; $i < count($Textworte[0]); $i++) { $textwort = str_replace (array("\\", "ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), array("", "&AUML;", "&OUML;", "&UUML;", "&SZLIG;", "&AUML;", "&OUML;", "&UUML;"), $Textworte[0][$i]); $suchtextwort = str_replace (array("+", "-", "\"", "\\"), array("", "", "", ""), $textwort); if($i == 0){ $oper = ""; }else{ $oper = "AND"; } if(strpos($Textworte[0][$i],"+") === 0){ $sql .= "UPPER(textwort) $trenner3 '$start3".$suchtextwort."$ende3' "; } elseif(strpos($Textworte[0][$i],"-") === 0){ $sql .= "$oper UPPER(textwort) NOT $trenner3 '$start3".$suchtextwort."$ende3' "; } elseif($Textworte[0][$i] == ""){ NULL; }else{ $sql .= "$oper UPPER(textwort) $trenner3 '$start3".$suchtextwort."$ende3' "; } } $sql .= ")"; } ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DAS TEXTWORT 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, $Worte); if($inhalt != ""){ $sql .= "AND ("; for($i=0; $i < count($Worte[0]); $i++) { $inhalt = str_replace (array("\\", "ä", "ö", "ü", "ß", "Ä", "Ö", "Ü"), array("", "&AUML;", "&OUML;", "&UUML;", "&SZLIG;", "&AUML;", "&OUML;", "&UUML;"), $Worte[0][$i]); $suchwort = str_replace (array("+", "-", "\"", "\\"), array("", "", "", ""), $inhalt); if($i == 0){ $oper = ""; }else{ $oper = "AND"; } if(strpos($Worte[0][$i],"+") === 0){ $sql .= "UPPER(inhalt) $trenner4 '$start4".$suchwort."$ende4' "; } elseif(strpos($Worte[0][$i],"-") === 0){ $sql .= "$oper UPPER(inhalt) NOT $trenner4 '$start4".$suchwort."$ende4' "; } elseif($Worte[0][$i] == ""){ NULL; }else{ $sql .= "$oper UPPER(inhalt) $trenner4 '$start4".$suchwort."$ende4' "; } } $sql .= ")"; } ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DEN INHALT ENDE ###################################################################################################### ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DIE RESTLICHEN FELDER ###################################################################################################### #ukid-Feld ist einziges Feld mit NULL=ja, da es nicht immer Unterkategorie gibt und mit leerem Feld #hätte das Ergebniss nicht gestimmt #also muss man auch "or ukid is NULL" abfragen $sql .= "AND ( UPPER(datum) LIKE '%$jahr%-%$monat%-%$tag%') AND ( UPPER(stapgd) LIKE '%$stapgd%') AND ( UPPER(kid) LIKE '$kid') AND ( UPPER(thema) LIKE '$thema') AND ( UPPER(ukid) LIKE '$ukid'"; if ($ukid == "%"){ $sql .= " OR ukid IS NULL "; } $sql .= " )"; ###################################################################################################### ## SQL ZUSAMMENBAUEN FÜR DIE RESTLICHEN FELDER ENDE ###################################################################################################### ###################################################################################################### ## GESAMTSELECT - SQL ZUSAMMENBAUEN ###################################################################################################### $query = $sql1.$sql; $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('suche_nomatch', "1"); $smarty->assign('suche_match', "0"); }else{ $smarty->assign('suche_match', "1"); $smarty->assign('suche_nomatch', "0"); $smarty->assign('anzahltreffer', "$res[anz_treffer]"); $db = dbconnect(); $sql1 = "SELECT lid, ueberschrift, textstelle, inhalt, textwort, stapgd, kid, ukid, DATE_Format(datum, '%d') tag, DATE_Format(datum, '%m') monat, DATE_Format(datum, '%Y') jahr, DATE_Format(datum, '%Y%m%d') date_sort FROM quelle WHERE "; $sql2 = " ORDER BY date_sort desc"; $query = $sql1.$sql.$sql2; $result = $db->query( $query) or die ("Cannot execute query"); $ln_zaehler = 0; while ($row = $result->fetch_array()){ if($inhalt == ''){ ##$preview = substr(strip_tags($row[inhalt]),0,200)." ... "; $preview = kurzer_text(strip_tags($row['inhalt']),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['inhalt']),200); } $wochentag = date("l", mktime(0,0,0,$row['monat'],$row['tag'],$row['jahr'])); switch($wochentag) { case 'Sunday': $wochentag = "So."; break; case 'Monday': $wochentag = "Mo."; break; case 'Tuesday': $wochentag = "Di."; break; case 'Wednesday': $wochentag = "Mi."; break; case 'Thursday': $wochentag = "Do."; break; case 'Friday': $wochentag = "Fr."; break; case 'Saturday': $wochentag = "Sa."; break; } $result1 = $db->query( "SELECT bezeichnung FROM kategorie WHERE kid='$row[kid]'" ); $row1 = $result1->fetch_array(); $result2 = $db->query( "SELECT bezeichnung FROM unterkategorie WHERE ukid='$row[ukid]'" ); $row2 = $result2->fetch_array(); $result3 = $db->query( "SELECT count(*) Anz FROM notizen WHERE lid='$row[lid]' AND user='$user_admin'" ); $row3 = $result3->fetch_array(); $ln_zaehler = $ln_zaehler + 1; 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['kategorie'] = $row1['bezeichnung']; $row['unterkategorie'] = $row2['bezeichnung']; $row['preview'] = $preview; $row['wochentag'] = $wochentag; $row['notizen'] = $row3['Anz']; $value[] = $row; } $smarty->assign('table_data3', $value); } } // Ende $action = suche $smarty->assign('action', "$action"); $smarty->display("$template/$templatename"); ?>