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