<?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>&nbsp;<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");
?>