590 lines
17 KiB
PHP
590 lines
17 KiB
PHP
<?php
|
|
/*
|
|
# Fuer debugging
|
|
error_reporting(E_ALL);
|
|
ini_set('display_errors', 1);
|
|
#echo __LINE__."<br>";
|
|
*/
|
|
#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 . "<nobr> <b>...</b></nobr>";
|
|
}
|
|
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)." <b>...</b> ";
|
|
$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)." <b>...</b> ";
|
|
$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");
|
|
|
|
?>
|