Commit 2526a5a3 authored by Dominik Hebeler's avatar Dominik Hebeler

Merge branch '398-site-host-und-domain-suchen-zusammenfassen' into 'development'

Resolve "site host und domain suchen zusammenfassen"

Closes #398

See merge request !641
parents 42d58c7a c7476ee0
......@@ -854,10 +854,7 @@ class MetaGer
}
# Sucheingabe
$this->eingabe = trim($request->input('eingabe', ''));
if (strlen($this->eingabe) === 0) {
$this->warnings[] = trans('metaGer.formdata.noSearch');
}
$this->q = $this->eingabe;
$this->q = strtolower($this->eingabe);
# IP
$this->ip = $request->ip();
# Language
......@@ -959,15 +956,13 @@ class MetaGer
$this->searchCheckDomainBlacklist();
$this->searchCheckPhrase();
$this->searchCheckStopwords();
if ($this->q === "") {
$this->warnings[] = trans('metaGer.formdata.noSearch');
}
$this->searchCheckNoSearch();
}
public function searchCheckSitesearch($site)
{
if (preg_match("/(.*)\bsite:(\S+)(.*)/si", $this->q, $match)) {
// matches '[... ]site:test.de[ ...]'
while (preg_match("/(^|.+\s)site:(\S+)(?:\s(.+)|($))/si", $this->q, $match)) {
$this->site = $match[2];
$this->q = $match[1] . $match[3];
}
......@@ -978,9 +973,10 @@ class MetaGer
public function searchCheckHostBlacklist()
{
while (preg_match("/(.*)(^|\s)-host:(\S+)(.*)/si", $this->q, $match)) {
$this->hostBlacklist[] = $match[3];
$this->q = $match[1] . $match[4];
// matches '[... ]-site:test.de[ ...]'
while (preg_match("/(^|.+\s)-site:([^\s\*]\S*)(?:\s(.+)|($))/si", $this->q, $match)) {
$this->hostBlacklist[] = $match[2];
$this->q = $match[1] . $match[3];
}
if (sizeof($this->hostBlacklist) > 0) {
$hostString = "";
......@@ -994,9 +990,10 @@ class MetaGer
public function searchCheckDomainBlacklist()
{
while (preg_match("/(.*)(^|\s)-domain:(\S+)(.*)/si", $this->q, $match)) {
$this->domainBlacklist[] = $match[3];
$this->q = $match[1] . $match[4];
// matches '[... ]-site:*.test.de[ ...]'
while (preg_match("/(^|.+\s)-site:\*\.(\S+)(?:\s(.+)|($))/si", $this->q, $match)) {
$this->domainBlacklist[] = $match[2];
$this->q = $match[1] . $match[3];
}
if (sizeof($this->domainBlacklist) > 0) {
$domainString = "";
......@@ -1010,9 +1007,10 @@ class MetaGer
public function searchCheckStopwords()
{
while (preg_match("/(.*)(^|\s)-(\S+)(.*)/si", $this->q, $match)) {
$this->stopWords[] = $match[3];
$this->q = $match[1] . $match[4];
// matches '[... ]-test[ ...]'
while (preg_match("/(^|.+\s)-(\S+)(?:\s(.+)|($))/si", $this->q, $match)) {
$this->stopWords[] = $match[2];
$this->q = $match[1] . $match[3];
}
if (sizeof($this->stopWords) > 0) {
$stopwordsString = "";
......@@ -1028,7 +1026,8 @@ class MetaGer
{
$p = "";
$tmp = $this->q;
while (preg_match("/(.*)\"(.+)\"(.*)/si", $tmp, $match)) {
// matches '[... ]"test satz"[ ...]'
while (preg_match("/(^|.+\s)\"(.+)\"(?:\s(.+)|($))/si", $tmp, $match)) {
$tmp = $match[1] . $match[3];
$this->phrases[] = strtolower($match[2]);
}
......@@ -1041,6 +1040,13 @@ class MetaGer
}
}
public function searchCheckNoSearch()
{
if ($this->q === "") {
$this->warnings[] = trans('metaGer.formdata.noSearch');
}
}
public function nextSearchLink()
{
if (isset($this->next) && isset($this->next['engines']) && count($this->next['engines']) > 0) {
......@@ -1214,7 +1220,7 @@ class MetaGer
{
$host = urlencode($host);
$requestData = $this->request->except(['page', 'out', 'next']);
$requestData['eingabe'] .= " -host:$host";
$requestData['eingabe'] .= " -site:$host";
$link = action('MetaGerSearch@search', $requestData);
return $link;
}
......@@ -1223,7 +1229,7 @@ class MetaGer
{
$domain = urlencode($domain);
$requestData = $this->request->except(['page', 'out', 'next']);
$requestData['eingabe'] .= " -domain:$domain";
$requestData['eingabe'] .= " -site:*.$domain";
$link = action('MetaGerSearch@search', $requestData);
return $link;
}
......
......@@ -23,25 +23,28 @@ return [
"grossklein.title" => "Groß-/ Kleinschreibung",
"grossklein.1" => "Groß- und Kleinschreibung wird bei der Suche nicht unterschieden, es handelt sich um eine rein inhaltliche Suche.",
"grossklein.2" => "Beispiel: Die Suche nach <div class=\"well well-sm\">großschreibung</div> liefert genau die gleichen Ergebnisse wie <div class=\"well well-sm\">GROßSCHREIBUNG</div>",
"domains.title" => "Suche auf Domains beschränken / Domains ausschließen",
"domains.sitesearch.explanation" => "Wenn Sie Ihre Suche nur auf Ergebnisse von einer bestimmten Domain (z.B. wikipedia.org) beschränken möchten, können Sie dies erreichen indem Sie Ihrer Suche site:<i>ihre-domain.de</i> hinzufügen.",
"domains.sitesearch.example.1" => "Beispiel: Sie möchten nur noch Ergebnisse von der deutschen Wikipedia (de.wikipedia.org) erhalten. Ihre Suche lautet also:",
"domains.sitesearch.example.2" => "<i>meine suche</i> site:de.wikipedia.org",
"domains.sitesearch.example.3" => "Beispiel: Sie möchten auch Ergebnisse von Wikipedia in anderen Sprachen (wikipedia.org) erhalten. Ihre Suche lautet also:",
"domains.sitesearch.example.4" => "<i>meine suche</i> site:wikipedia.org",
"domains.blacklist.explanation" => "Manchmal kann es auch passieren, dass Sie Ergebnisse einer bestimmten Domain nicht mehr sehen möchten. In diesem Fall haben Sie zwei Möglichkeiten: Den Ausschluss eines Hosts und den Ausschluss einer Domain. Dies erreichen Sie, indem Sie -host:<i>unterseite.ihre-seite.de</i> beziehungsweise -domain:<i>ihre-seite.de</i> zu Ihrer Suche hinzufügen.",
"domains.blacklist.explanation" => "Manchmal kann es auch passieren, dass Sie Ergebnisse einer bestimmten Domain nicht mehr sehen möchten. In diesem Fall haben Sie zwei Möglichkeiten: Den Ausschluss einer Subdomain und den Ausschluss einer Top-Level-Domain. Dies erreichen Sie, indem Sie -site:<i>unterseite.ihre-seite.de</i> beziehungsweise -site:*.<i>ihre-seite.de</i> zu Ihrer Suche hinzufügen.",
"domains.blacklist.example.1" => "Beispiel: Sie haben genug von den ganzen Wikipedia-Ergebnissen. Nun haben Sie zwei Möglichkeiten:",
"domains.blacklist.example.2" => "Sie schließen alle Ergebnisse von der deutschen Wikipedia-Domain, also de.wikipedia.org, aus",
"domains.blacklist.example.3" => "<i>meine suche</i> -host:de.wikipedia.org",
"domains.blacklist.example.3" => "<i>meine suche</i> -site:de.wikipedia.org",
"domains.blacklist.example.4" => "Sie erhalten nun weiterhin Ergebnisse von beispielsweise en.wikipedia.org, solange diese zu Ihrer Suche passen",
"domains.blacklist.example.5" => "Sie schließen generell alle Ergebnisse von allen Wikipedia-Domains aus",
"domains.blacklist.example.6" => "<i>meine suche</i> -domain:wikipedia.org",
"domains.showcase.explanation.1" => "Zusätzlich bieten wir Ihnen die Möglichkeit Hosts beziehungsweise Domains direkt auf der Ergebnisseite auszuschließen. Bei jedem unserer Ergebnisse erscheint dieses kleine Symbol für die Optionen:",
"domains.blacklist.example.6" => "<i>meine suche</i> -site:*.wikipedia.org",
"domains.showcase.explanation.1" => "Zusätzlich bieten wir Ihnen die Möglichkeit Subdomains beziehungsweise Top-Level-Domains direkt auf der Ergebnisseite auszuschließen. Bei jedem unserer Ergebnisse erscheint dieses kleine Symbol für die Optionen:",
"domains.showcase.explanation.2" => "Wenn Sie auf dieses Symbol klicken, erscheint folgendes Menü:",
"domains.showcase.menu.1" => "Mit diesem Menü lassen sich:",
"domains.showcase.menu.2" => "Eine neue Suche nur auf der Domain des Ergebnisses (de.wikipedia.de) starten",
"domains.showcase.menu.3" => "Eine Suche ohne Ergebnisse der Subdomain (de.wikipedia.de) starten",
"domains.showcase.menu.4" => "Eine Suche ohne Ergebnisse der Top-Level-Domain (wikipedia.de) starten",
"dienste" => "Weitere Dienste um die Suche herum",
"app.title" => "Android-App",
"app.1" => "Sie können MetaGer auch als App nutzen. Laden Sie sich dazu einfach die <a href=\"https://play.google.com/store/apps/details?id=de.metager.metagerapp\" target=\"_blank\" rel=\"noopener\">MetaGer App</a> auf ihr Android Smartphone.",
......
......@@ -29,13 +29,13 @@ return [
"domains.sitesearch.example.2" => "<i>my search words</i> site:en.wikipedia.org",
"domains.sitesearch.example.3" => "Example: Restriction to wikipedia but all languages:",
"domains.sitesearch.example.4" => "Type: <i>my search words</i> site:wikipedia.org",
"domains.blacklist.explanation" => "Exclude a specific domain: Either the exclusion of a host or of a domain. Type <i>my search words</i> -host:<i>en.wikipedia.org</i> or <i>my search words</i> -domain:<i>wikipedia.org</i>",
"domains.blacklist.example.1" => "Example: You don't want to get results from Wikipedia. There are two possibilities:",
"domains.blacklist.explanation" => "Exclude a specific domain: Either the exclusion of a subdomain or of a top level domain. Type <i>my search words</i> -site:<i>en.wikipedia.org</i> or <i>my search words</i> -site:*.<i>wikipedia.org</i>",
"domains.blacklist.example.1" => "Example: You do not want to get results from Wikipedia. There are two possibilities:",
"domains.blacklist.example.2" => "Exclude results from the english Wikipedia (domain) so <i>en.wikipedia.org</i>",
"domains.blacklist.example.3" => "<i>my search words</i> -host:<i>en.wikipedia.org</i>",
"domains.blacklist.example.3" => "<i>my search words</i> -site:<i>en.wikipedia.org</i>",
"domains.blacklist.example.4" => "You get results from e.g. de.wikipedia.org further on.",
"domains.blacklist.example.5" => "Exclude all results of all wikipedia domains:",
"domains.blacklist.example.6" => "<i>my search words</i> -domain:<i>wikipedia.org</i>",
"domains.blacklist.example.6" => "<i>my search words</i> -site:*.<i>wikipedia.org</i>",
"domains.showcase.explanation.1" => "Additionally there is the option to exclude hosts or domains on the result page: All of the results have the small triangle sign:",
"domains.showcase.explanation.2" => "Click for the menu shown below:",
"domains.showcase.menu.1" => "Decide here:",
......
......@@ -43,20 +43,14 @@ class MetaGerPhpTest extends TestCase
// Testet das erkennen von Spezialsuchen in verschiedenen Sucheingaben
public function specialSearchTest()
{
$metager = new MetaGer();
$request = new Request(['eingabe' => 'suchwort -blackword -host:blackhost -domain:blackdomain site:wantsite "i want phrase"']);
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
$metager = $this->createSpecialSearchMetager('suchwort -blackword -site:blackhost -site:*.blackdomain site:wantsite "i want phrase"');
$this->assertEquals("wantsite", $metager->getSite());
$this->assertContains("blackhost", $metager->getUserHostBlacklist());
$this->assertContains("blackdomain", $metager->getUserDomainBlacklist());
$this->assertContains("blackword", $metager->getStopWords());
$this->assertContains("i want phrase", $metager->getPhrases());
$metager = new MetaGer();
$request = new Request(['eingabe' => '-site:peter:test -blackword-test -host:blackhost-test.de.nz/test ich suche nach -host:blackhost:blackhost2.cote/t?p=5 "peter ist obst-garten und -bauern"']);
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
$metager = $this->createSpecialSearchMetager('site:peter:test -blackword-test -site:blackhost-test.de.nz/test ich suche nach -site:blackhost:blackhost2.cote/t?p=5 "peter ist obst-garten und -bauern"');
$this->assertEquals("peter:test", $metager->getSite());
$this->assertContains("blackhost:blackhost2.cote/t?p=5", $metager->getUserHostBlacklist());
$this->assertContains("blackhost-test.de.nz/test", $metager->getUserHostBlacklist());
......@@ -64,17 +58,28 @@ class MetaGerPhpTest extends TestCase
$this->assertNotContains("bauern", $metager->getStopWords());
$this->assertContains("peter ist obst-garten und -bauern", $metager->getPhrases());
$metager = new MetaGer();
$request = new Request(['eingabe' => '-host:-domain:test']);
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
$this->assertContains("-domain:test", $metager->getUserHostBlacklist());
$metager = $this->createSpecialSearchMetager('-site:-site:*.test');
$this->assertContains("-site:*.test", $metager->getUserHostBlacklist());
$metager = $this->createSpecialSearchMetager('"-site:-site:*.test"');
$this->assertContains("-site:-site:*.test", $metager->getPhrases());
$metager = $this->createSpecialSearchMetager('site:wikipedia.de apfel site:test.de tomate');
$this->assertEquals("apfel tomate", $metager->getQ());
$this->assertEquals("test.de", $metager->getSite());
$metager = $this->createSpecialSearchMetager('site:wikipedia.de');
$this->assertEquals("", $metager->getQ());
$this->assertEquals("wikipedia.de", $metager->getSite());
}
public function createSpecialSearchMetager($eingabe)
{
$metager = new MetaGer();
$request = new Request(['eingabe' => '"-host:-domain:test"']);
$request = new Request(['eingabe' => $eingabe]);
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
$this->assertContains("-host:-domain:test", $metager->getPhrases());
return $metager;
}
// Testet, ob ein Link wirklich nur einmal hinzugefügt werden kann
......@@ -141,9 +146,9 @@ class MetaGerPhpTest extends TestCase
$this->containCallbackTester($metager, "generateSiteSearchLink", ["wolf.de"],
'site%3Awolf.de');
$this->containCallbackTester($metager, "generateRemovedHostLink", ["wolf.de"],
'-host%3Awolf.de');
'-site%3Awolf.de');
$this->containCallbackTester($metager, "generateRemovedDomainLink", ["wolf.de"],
'-domain%3Awolf.de');
'-site%3A%2A.wolf.de');
}
// Prüft ob der Host Count funktioniert
......@@ -329,7 +334,7 @@ class MetaGerPhpTest extends TestCase
#new Request(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null)
$query = [];
$query["eingabe"] = 'suchwort -blackword -host:blackhost -domain:blackdomain site:wantsite "i want phrase"';
$query["eingabe"] = 'suchwort -blackword -site:blackhost -site:*.blackdomain site:wantsite "i want phrase"';
$query["focus"] = "angepasst";
$query["encoding"] = "utf8";
$query["lang"] = "all";
......
......@@ -78,7 +78,7 @@ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
$this->assertTrue($result->isValid($metager));
$metager = new MetaGer();
$request = new Request(['eingabe' => 'test -host:host.domain.de -domain:domain.de']);
$request = new Request(['eingabe' => 'test -site:host.domain.de -site:*.domain.de']);
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
......@@ -99,7 +99,7 @@ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
$this->assertFalse($result->isValid($metager));
}
// Prüft die Funktionen die Links umformen oder erzeugen
// Prüft die Funktionen, die Links umformen oder erzeugen
public function linkGeneratorsTest()
{
$result = $this->getDummyResult();
......@@ -120,6 +120,13 @@ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
'solo.de');
$this->equalCallbackTester($result, "getStrippedLink", [$url],
'han.solo.de/unterseite/document.htm');
$url = "http://www.foo.bar.han.solo.de/test?ja=1";
$this->equalCallbackTester($result, "getStrippedHost", [$url],
'foo.bar.han.solo.de');
$this->equalCallbackTester($result, "getStrippedDomain", [$url],
'solo.de');
}
/**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment