From 20a4e5d79cccbf372e2133611bb97b50e07449df Mon Sep 17 00:00:00 2001
From: Karl <Karl Hasselbring>
Date: Wed, 14 Dec 2016 08:35:23 +0100
Subject: [PATCH] sitesearch funktioniert jetzt auch bei mehreren site:

---
 app/MetaGer.php          | 14 +++++++++-----
 tests/MetaGerPhpTest.php | 29 +++++++++++++++--------------
 2 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/app/MetaGer.php b/app/MetaGer.php
index e89928a24..69fcdb4c4 100644
--- a/app/MetaGer.php
+++ b/app/MetaGer.php
@@ -959,15 +959,12 @@ 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)) {
+        while (preg_match("/(^|.+\s)site:(\S+)(?:\s(.+)|$)/si", $this->q, $match)) {
             $this->site = $match[2];
             $this->q    = $match[1] . $match[3];
         }
@@ -1041,6 +1038,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) {
diff --git a/tests/MetaGerPhpTest.php b/tests/MetaGerPhpTest.php
index 845e7b975..73403bf7c 100644
--- a/tests/MetaGerPhpTest.php
+++ b/tests/MetaGerPhpTest.php
@@ -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 -host:blackhost -domain: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 -host:blackhost-test.de.nz/test ich suche nach -host: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,24 @@ 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);
+        $metager = $this->createSpecialSearchMetager('-host:-domain:test');
         $this->assertContains("-domain:test", $metager->getUserHostBlacklist());
 
+        $metager = $this->createSpecialSearchMetager('"-host:-domain:test"');
+        $this->assertContains("-host:-domain:test", $metager->getPhrases());
+
+        $metager = $this->createSpecialSearchMetager('site:wikipedia.de site:test.de tomate');
+        $this->assertEquals("tomate", $metager->getQ());
+        $this->assertEquals("test.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
-- 
GitLab