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=-1Die 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;
}
}
?>