"; */ #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['kid'])) { $kid = mb_strtoupper($_POST['kid']); } else { $kid = ""; } if (isset($_POST['ukid'])) { $ukid = mb_strtoupper($_POST['ukid']); } 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"); ?>