SM-Finder-Logo        
herz Karte Kalender Suche Bookmarks Experte FAQ

Module

Download

SMFinder_Query_analyzeSearch

Wird verwendet von:
SMFinder_Main
SMFinder_Query_analyzeSearch

Keine Erläuterungen gefunden.

<?php /* published under GPL www.gnu.org/licenses/gpl.html */
function SMFinder_Query_analyzeSearch($searchString){
  $searchString=trim($searchString);
  $searchStrings=explode(" ",$searchString);
  list($cats,$atrs,$keywords,$residuum) = SMFinder_Query_filterCatsAtrsFromString($searchStrings);
  list($geoLat,$geoLon,$residuum) = SMFinder_Query_filterTownsFromString($residuum);
  if ($GLOBALS['debug']){
    echo "<aj>SMFinder_Query_analyzeSearch.php</aj><span style='color:silver'>";
    echo "<br>Kategorien: <br>";print_r($cats);
    echo "<br>Attribute: <br>";print_r($atrs);
    echo "<br>Orte: <br>";print_r($geoLat);echo "<p></p></span>";
  }
  if (!empty($geoLat)){
    include_once("SMFinder_Geo_Umkreis.php");
    list($lat_min,$lat_max,$lon_min,$lon_max) = SMFinder_Geo_Umkreis($geoLat[0],$geoLon[0],$GLOBALS['searchRadius']);
  }else{
    $lat_min="";
    $lat_max="";
    $lon_min="";
    $lon_max="";
  }
  /* lock for searchstring as 'fn' */
  /* copied from SMFinder_Edit_genUID.php */
  $uid = strtolower(strtr($searchString, "", "s"));
  $uid = preg_replace("/[^A-Za-z0-9]+/", "_", $uid);
  $uid = preg_replace("/[_]+$/", "", $uid);
  $fn = preg_replace("/^[_]+/", "", $uid);
  /* The UID contains the fn but only lower case letters
     and no suspicious letters. */
  include("SMFinder_Query_getUID4fn.php");
  $UIDs4fn = SMFinder_Query_getUID4fn("address",$fn);

  include_once("SMFinder_Query_getUID4CatsAtrsGeo.php");
  $limit=$GLOBALS['resultsPerPage'];
  if (empty($_GET['p'])){
    list($UIDs,$stati,$names,$count) #
      = SMFinder_Query_getUID4CatsAtrsGeo("address",$cats,$atrs,"AND",$lat_min,$lat_max,$lon_min,$lon_max,0,$limit);
    if ($UIDs4fn){
      $UIDs = array_merge($UIDs4fn,$UIDs);
    }
  }else{
    $page=$_GET['p'];
    list($UIDs,$stati,$names,$count) #
      = SMFinder_Query_getUID4CatsAtrsGeo("address",$cats,$atrs,"AND",$lat_min,$lat_max,$lon_min,$lon_max,$page,$limit);
    $count=$_GET['c'];
  }

  return array($UIDs,$residuum,$cats,$atrs,$keywords,$count);
}

function SMFinder_Query_filterCatsAtrsFromString($searchStrings){
  include_once("SMFinder_Elementdefinitions.php");
  for ($s=0;$s<count($searchStrings);$s++){
    $bad=array("","","","");
    $good=array("ae","oe","ue","sz");
    $searchStrings[$s]=str_replace($bad,$good,$searchStrings[$s]);
  } #s
  list($catsAddressFound,$keywords,$residuumCats) = filterString($searchStrings,$cats_address,$aliasCats_address);
  list($atrsAddressFound,$keywordsTmp,$residuumAtrs) = filterString($searchStrings,$atrs_address,$aliasAtrs_address);
  $keywords = array_merge($keywords,$keywordsTmp);
  /* residuum = no matches */
  $residuum=array();
  for ($s=0;$s<count($searchStrings);$s++){
    if (strlen($residuumCats[$s])>1 AND strlen($residuumAtrs[$s])>1 AND $residuumCats[$s]==$residuumAtrs[$s]){
      array_push($residuum,$residuumCats[$s]);
    }
  } #s
  if ($GLOBALS['debug'] AND false){
    echo "<aj>SMFinder_Query_filterCatsAtrsFromString</aj><br>";
    echo "catsFound: ";print_r($catsAddressFound);echo "<br>";
    echo "atrsFound: ";print_r($atrsAddressFound);echo "<br>";
    echo "residuum: ";print_r($residuum);echo"<br>";
  }
  return array($catsAddressFound,$atrsAddressFound,$keywords,$residuum);
}


function filterString($searchStrings,$keywords,$alias){
  $NoStrings     = count($searchStrings);
  $NoKeywords    = count($keywords);
  $keywordsFound = array();
  $aliasContained= array();
  $unClearStrings=$searchStrings;
  $s=-1;
  while ($s<=$NoStrings AND $s<1e2){
    $s++;
    $isUnclear=true;
    for ($c=0;$c<$NoKeywords;$c++){
      $found=false;
      /* look for keyword and its aliases */
      if (strlen($keywords[$c])>4){
	if (eregi($keywords[$c],$searchStrings[$s])){$found=true;}
      }else{
	if (strtolower($keywords[$c])==strtolower($searchStrings[$s])){$found=true;}
      }
      for ($a=0;$a<count($alias[$keywords[$c]]);$a++){
	if (strlen($alias[$keywords[$c]][$a])>4){
	  if (eregi($alias[$keywords[$c]][$a],$searchStrings[$s])){$found=true;}
	}else{
	  if (strtolower($alias[$keywords[$c]][$a])==strtolower($searchStrings[$s])){$found=true;}
	}
      } #a
      if ($found){
	$isUnclear=false;
	array_push($keywordsFound,$keywords[$c]);
	array_push($aliasContained,$keywords[$c]);
	/*
        Suche nach 'Gummistiefel' soll sowohl 'Gummi' als auch 'Stiefel' liefern,
        deswegen wird nicht $searchString reduziert, aber es wird vermerkt, 
	welche Worte bereits gefunden wurden.
	*/
	/*
	$NoStrings--;
	for ($ss=$s;$ss<$NoStrings;$ss++){
	  $searchStrings[$ss]=$searchStrings[$ss+1];
	} #ss
	$dummy = array_pop($searchStrings);
	$s--;
	*/
      }
    } #c
    if ($isUnclear){
      $unClearStrings[$s]=$searchStrings[$s];
    }else{
      $unClearStrings[$s]="";
    }
  } #s
  return array($keywordsFound,$aliasContained,$unClearStrings);
}

function SMFinder_Query_filterTownsFromString($searchStrings){
  include_once("SMFinder_Geo_getGeo.php");
  $NoStrings = count($searchStrings);
  $geoLat    = array();
  $geoLon    = array();
  $s=-1;
  while ($s<$NoStrings AND $s<1e2){
    $s++;
    $lat="";
    if (strlen($searchStrings[$s])>4){
      list($PLZ,$lat,$lon) = SMFinder_Geo_getGeo4City($searchStrings[$s]);
    }
    #echo $searchStrings[$s]."\t".$lat."\t".$lon."<br>\n";
    if (!empty($lat)){
      array_push($geoLat,$lat);
      array_push($geoLon,$lon);
      for ($ss=$s;$ss<$NoStrings-1;$ss++){
	$searchStrings[$ss]=$searchStrings[$ss+1];
      } #ss
      $dummy = array_pop($searchStrings);
      $NoStrings=$NoStrings-1;
    }
  } #s
  return array($geoLat,$geoLon,$searchStrings);
}
?>

Index

Für die Funktionalität des SM-Finders sind viele kleine Tools notwendig. Alle Funktionen beginnen mit SMFinder_ um deren Ursprung zu kennzeichnen. Dem schließt sich die Funktionsgruppe, z.B. Geo_ an, gefolgt vom eigentlichen Namen, der die Aufgabe der Funktion widerspiegeln soll, z.B. PLZ2DB.

Der gesamte Sourcecode darf gemäß GNU General Public License weiterverbreitet werden.

1Makefile
2SMFinder_Admin
3SMFinder_Admin_addCategories
4SMFinder_Admin_checkAllLinks
5SMFinder_Admin_clean
6SMFinder_Admin_exportXML
7SMFinder_Admin_genMap
8SMFinder_Admin_getTimefInt
9SMFinder_Admin_importGeo
10SMFinder_Admin_sendXML2user
11SMFinder_Admin_uploadXML
12SMFinder_Config
13SMFinder_DTD
14SMFinder_Datenbanken
15SMFinder_Edit
16SMFinder_Edit_AddressFields
17SMFinder_Edit_AdrFields
18SMFinder_Edit_CatsAtrs
19SMFinder_Edit_EventFields
20SMFinder_Edit_LinkFields
21SMFinder_Edit_Modus
22SMFinder_Edit_POST
23SMFinder_Edit_PersFields
24SMFinder_Edit_genUID
25SMFinder_Elementdefinitions
26SMFinder_Geo
27SMFinder_Geo_PLZ2DB
28SMFinder_Geo_Umkreis
29SMFinder_Geo_getGeo
30SMFinder_Help
31SMFinder_Help_Download
32SMFinder_Help_FAQ
33SMFinder_Help_KategorienInfo
34SMFinder_Help_editAddress
35SMFinder_Help_editEvent
36SMFinder_Main
37SMFinder_MapDACH
38SMFinder_Menu
39SMFinder_Modules
40SMFinder_ModulesIndex
41SMFinder_Pagelayout
42SMFinder_Query_ABC
43SMFinder_Query_Calendar
44SMFinder_Query_CheckCatsAtrs
45SMFinder_Query_Map
46SMFinder_Query_Mask
47SMFinder_Query_SearchEngine
48SMFinder_Query_analyzeSearch
49SMFinder_Query_composeDates4UIDs
50SMFinder_Query_dateFormat
51SMFinder_Query_dmoz
52SMFinder_Query_expandSeries
53SMFinder_Query_find
54SMFinder_Query_getAllUID
55SMFinder_Query_getUID4CatsAtrsGeo
56SMFinder_Query_getUID4Geo
57SMFinder_Query_getUID4adr
58SMFinder_Query_getUID4fn
59SMFinder_Query_readAddress
60SMFinder_Query_readAdr
61SMFinder_Query_readBookmark
62SMFinder_Query_readEvent
63SMFinder_Query_readLink
64SMFinder_Query_readPers
65SMFinder_Query_showAddress
66SMFinder_Query_showAdr
67SMFinder_Query_showCalendar
68SMFinder_Query_showCalendarDynamic
69SMFinder_Query_showEvent
70SMFinder_Query_showEventList
71SMFinder_Query_showEventsChronological
72SMFinder_Query_showLink
73SMFinder_Query_showPers
74SMFinder_Query_showResult
75SMFinder_Query_validDate
76SMFinder_Style
77SMFinder_Write_Address
78SMFinder_Write_Adr
79SMFinder_Write_Event
80SMFinder_Write_Link
81SMFinder_Write_Pers
82SMFinder_Write_deleteEntry
83SMFinder_XML_checkType
84SMFinder_XML_export
85SMFinder_XML_extractAttribute
86SMFinder_XML_extractTag
87SMFinder_XML_findAllElements
88SMFinder_XML_import
89SMFinder_XML_importParseAddress
90SMFinder_XML_importParseAdr
91SMFinder_XML_importParseCatsAtrs
92SMFinder_XML_importParseEvent
93SMFinder_XML_importParseLink
94SMFinder_XML_importParsePerson
95SMFinder_XML_readFile
96SMallGiessen_SMFinder
97ShowCatsAtrsNice
98index
99php2txt.pl
100sm-finder-02.dtd
101testGeo
102sm-finder-02.dtd
103

Datenbanken

 

SM-Finder-Logo

Die hier zur Verfügung gestellten Informationen basieren auf dem Austauschnetzwerk des SM-Finders.
Änderungen an eurem Datensatz könnt ihr z.B. beim Arbeitskreis SM-Finder vornehmen.
Bei Fragen und Problemen schreibt bitte an: sm-finderATki-co.org
Der AK-SM-Finder ist korporatives Mitglied der BVSM e.V.

Für Aktualität und Richtigkeit der dargebotenen Infomationen kann keine Gewähr übernommen werden!

blank

blank