AddOn


Search Index [REX 4] UTF 8 Update

Beschreibung

UTF8 sichers suchen mit dem Addon - siehe http://www.redaxo.org/de/download/addons/?addon_id=275&searchtxt=search&cat_id=-1

Die regexen brauchten ein u am Ende um das ganze UTF safe zu machen

SC siehe Beschreibung.

pls integrate & Delete

<?php

class rex_search_index
{

var $clang = -1;
var $path = '';
var $status = false;
var $searchIds = false;
var $surroundchars = 20;
var $sourround_start_tag = "<b>";
var $sourround_end_tag = "</b>";
var $striptags = true;
var $only_warnings = FALSE;

function rex_indexArticle($id = 0,$clang = 0)
{
    global $REX;

    $tmp = $REX['GG'];
    $REX['GG'] = true;
    $REX_ARTICLE = new rex_article;
    $REX_ARTICLE->setCLang($clang);
    $REX_ARTICLE->setArticleId($id);
    $artcache = $REX_ARTICLE->getArticle();

    // HTML Code im Artikel filtern 
    if ($this->striptags)
        $artcache = preg_replace('@<[\/\!]*?[^<>]*?>@si', '', $artcache);

    // speichern    
    $sql = 'UPDATE '.$REX['TABLE_PREFIX'].'article set vt="'.mysql_escape_string($artcache).'" where id='.$id.' and clang='.$clang.'';
    $db2 = new rex_sql;
    // $db2->debugsql = 1;
    $db2->setQuery($sql);
    $REX['GG'] = $tmp;

}

function rex_indexSite()
{

    global $REX;

    if ($this->only_warnings) error_reporting(E_WARNINGS);

    $SQL = "SELECT id,clang FROM ".$REX['TABLE_PREFIX']."article ";
    $WHERE = "";

    $LIMIT = "";
    $db2 = new rex_sql;
    // $db2->debugsql = 1;
    $stop = false;
    $oldstart = 0;
    if (isset($_REQUEST["oldstart"])) $oldstart = (int) $_REQUEST["oldstart"];

    $start = 0;
    if (isset($_REQUEST["start"])) $start = (int) $_REQUEST["start"];

    if ($oldstart == $start && $start != 0)
    {
        $stop = true;
    }

    if ($start != 0)
    {
        $LIMIT = "LIMIT $start, 10000";
        $oldstart = $start;
    }else
    {
        // $db2->setQuery('TRUNCATE TABLE rex_12_search_index');
    }

    if ($stop)
    {

        return "Bei der Indexgenerieung ist ein Fehler unterlaufen. Das kann an eventuell fehlerhaften Artikeln liegen. 
        Bei folgendem Artikel kam ein Fehler. <a href=index.php?page=content&article_id=".$_REQUEST["errorid"]."&mode=edit&clang=".$_REQUEST["errorclang"].">-> Artikel</a>";

    }else
    {

        $i=$start;
        $articles = $db2->getArray("$SQL $LIMIT");
        $CONTENT = ob_get_contents();
        // ob_end_clean();

        foreach ($articles as $var)
        {

            ob_end_clean();
            ob_start();
            echo "<html><head><title>REX SEARCH</title></head><body bgcolor=#fffff3>
            Scriptlaufzeit war zu kurz, der Prozess wird sofort 
            weitergeführt. Sollten Sie dennoch abbrechen wollen dann <a href=index.php?page=search_index>hier</a>.
            <br><br>
            Sollte das Script sich nicht erneut aufrufen, dann <a href=index.php?page=search_index&subpage=gen_index&start=$i&oldstart=$oldstart&errorid=".$var['id']."&errorclang=".$var['clang'].">hier</a> klicken um den Prozess weiterzuführen.
            <br><br><a href=index.php?page=content&article_id=".$var['id']."&mode=edit&clang=".$var['clang'].">Bei diesem Artikel wurde abgebrochen</a>
            <br><br><br><br>";

            $this->rex_indexArticle($var['id'],$var['clang']);

            $i++;
        }

        ob_end_clean();
        echo $CONTENT;
        $REX['GG'] = false;

        return "Suchindex wurde erneuert!";
    }
}

function rex_search($keywords)
{
GLOBAL $REX;

if ($this->only_warnings) error_reporting(E_WARNINGS);

if (trim($keywords) == '')
  return false;

$keywords = mysql_escape_string((trim($keywords)));

$keywords = mysql_escape_string((htmlentities(trim($keywords)))); 

$suche = new rex_sql;
// $suche->debugsql = true;

// ---------------------- clang check
if ($this->clang > -1)
{
  $clang_set = "AND clang='".$this->clang."'";
}
else
{
  $clang_set = '';
}

// ---------------------- status check
if ($this->status)
{
  $status_set = "AND status='".$this->status."'";
}
else
{
  $status_set = '';
}

// ---------------------- path check
if ($this->path)
{
  $path_set = "AND path LIKE ('|".$this->path."|%')";
}
else
{
  $path_set = '';
}

// ---------------------- searchIds check
if ($this->searchIds)
{
  $find_set = "(FIND_IN_SET('$keywords',REPLACE(id,' ',',')) * 100) +";
  $like_set = "id = '$keywords' OR";
}
$sql = "
      SELECT

      (FIND_IN_SET('$keywords',REPLACE(name,' ',',')) * 10) +
      (FIND_IN_SET('$keywords',REPLACE(art_keywords,' ',',')) * 5) +
      $find_set
      (FIND_IN_SET('$keywords',REPLACE(vt,' ',',')) * 5)
      AS COUNTWORD, id , art_keywords, name , vt , clang

      FROM ".$REX['TABLE_PREFIX']."article
      WHERE
      (
      name LIKE ('%$keywords%') OR art_keywords LIKE ('%$keywords%') OR
      $like_set
      vt LIKE ('%$keywords%')
      )

      $clang_set

      $path_set

      $status_set

      ORDER BY COUNTWORD DESC
      LIMIT 0,50
      ";

$suche->setQuery($sql);

for ($c = 0; $c < $suche->getRows(); $c ++)
{

  $regex = "/\b.{0,".$this->surroundchars."}".$keywords.".{0,".$this->surroundchars."}\b/imu";
  $regexcontent = $suche->getValue('name').$suche->getValue('art_keywords').$suche->getValue('vt');
  #$regexcontent = utf8_decode($regexcontent);

  preg_match_all($regex, $regexcontent, $matches);

  $result[$c]['id'] = $suche->getValue('id');
  $result[$c]['name'] = $suche->getValue('name');
  $result[$c]['clang'] = $suche->getValue('clang');
  #print_R($matches[0]);
  if (is_array($matches[0]))
  {
    $result[$c]['highlightedtext'] = '';
    foreach ($matches[0] as $var)
    {
      $result[$c]['highlightedtext'] .= " ...".preg_replace("/(".$keywords.")/imsu", $this->sourround_start_tag.'\\1'.$this->sourround_end_tag, $var)."... ";
    }
  }
  $suche->next();
}

return $result;

}
}
?>


Umsetzung

gerald urbas

www.crossmediapool.at

Versionen

4.3

Für REDAXO
4.3.x
Veröffentlicht am
21.02.2011