diff --git a/app/MetaGer.php b/app/MetaGer.php index 166c3ea9ae7ae3fa4e98428bda76e90f639133ad..99ee104a9ca397d1e2530426e50758ebbec2f966 100644 --- a/app/MetaGer.php +++ b/app/MetaGer.php @@ -24,6 +24,7 @@ class MetaGer protected $site; protected $hostBlacklist = []; protected $domainBlacklist = []; + private $urlBlacklist = []; protected $stopWords = []; protected $phrases = []; protected $engines = []; @@ -1008,12 +1009,13 @@ class MetaGer $this->searchCheckSitesearch($site); $this->searchCheckHostBlacklist(); $this->searchCheckDomainBlacklist(); + $this->searchCheckUrlBlacklist(); $this->searchCheckPhrase(); $this->searchCheckStopwords(); $this->searchCheckNoSearch(); } - public function searchCheckSitesearch($site) + private function searchCheckSitesearch($site) { // matches '[... ]site:test.de[ ...]' while (preg_match("/(^|.+\s)site:(\S+)(?:\s(.+)|($))/si", $this->q, $match)) { @@ -1025,13 +1027,14 @@ class MetaGer } } - public function searchCheckHostBlacklist() + private function searchCheckHostBlacklist() { // 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]; } + // print the host blacklist as a user warning if (sizeof($this->hostBlacklist) > 0) { $hostString = ""; foreach ($this->hostBlacklist as $host) { @@ -1042,13 +1045,14 @@ class MetaGer } } - public function searchCheckDomainBlacklist() + private function searchCheckDomainBlacklist() { // 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]; } + // print the domain blacklist as a user warning if (sizeof($this->domainBlacklist) > 0) { $domainString = ""; foreach ($this->domainBlacklist as $domain) { @@ -1059,13 +1063,32 @@ class MetaGer } } - public function searchCheckStopwords() + private function searchCheckUrlBlacklist() + { + // matches '[... ]-site:*.test.de[ ...]' + while (preg_match("/(^|.+\s)-url:(\S+)(?:\s(.+)|($))/si", $this->q, $match)) { + $this->urlBlacklist[] = $match[2]; + $this->q = $match[1] . $match[3]; + } + // print the url blacklist as a user warning + if (sizeof($this->urlBlacklist) > 0) { + $urlString = ""; + foreach ($this->urlBlacklist as $url) { + $urlString .= $url . ", "; + } + $urlString = rtrim($urlString, ", "); + $this->warnings[] = trans('metaGer.formdata.urlBlacklist', ['url' => $urlString]); + } + } + + private function searchCheckStopwords() { // matches '[... ]-test[ ...]' while (preg_match("/(^|.+\s)-(\S+)(?:\s(.+)|($))/si", $this->q, $match)) { $this->stopWords[] = $match[2]; $this->q = $match[1] . $match[3]; } + // print the stopwords as a user warning if (sizeof($this->stopWords) > 0) { $stopwordsString = ""; foreach ($this->stopWords as $stopword) { @@ -1076,7 +1099,7 @@ class MetaGer } } - public function searchCheckPhrase() + private function searchCheckPhrase() { $p = ""; $tmp = $this->q; @@ -1094,7 +1117,7 @@ class MetaGer } } - public function searchCheckNoSearch() + private function searchCheckNoSearch() { if ($this->q === "") { $this->warnings[] = trans('metaGer.formdata.noSearch'); @@ -1433,6 +1456,11 @@ class MetaGer return $this->domainBlacklist; } + public function getUserUrlBlacklist() + { + return $this->urlBlacklist; + } + public function getDomainBlacklist() { return $this->domainsBlacklisted; diff --git a/app/Models/Result.php b/app/Models/Result.php index c60bf62f3178fac5ac4b24b5b35d06e0c634040a..e7ee28f9233d25f1313b0cf953c01125ec6918ea 100644 --- a/app/Models/Result.php +++ b/app/Models/Result.php @@ -216,12 +216,17 @@ class Result # Überprüft ob das Ergebnis aus irgendwelchen Gründen unerwünscht ist. public function isValid(\App\MetaGer $metager) { - # Perönliche URL und Domain Blacklist - if (in_array($this->strippedHost, $metager->getUserHostBlacklist()) - || in_array($this->strippedDomain, $metager->getUserDomainBlacklist())) { + # Perönliche Host und Domain Blacklist + if (in_array(strtolower($this->strippedHost), $metager->getUserHostBlacklist()) + || in_array(strtolower($this->strippedDomain), $metager->getUserDomainBlacklist())) { return false; } + # Persönliche URL Blacklist + foreach ($metager->getUserUrlBlacklist() as $word) { + if (strpos(strtolower($this->link), $word)) return false; + } + # Allgemeine URL und Domain Blacklist if ($this->strippedHost !== "" && (in_array($this->strippedHost, $metager->getDomainBlacklist()) || in_array($this->strippedLink, $metager->getUrlBlacklist()))) { return false; diff --git a/resources/lang/de/hilfe.php b/resources/lang/de/hilfe.php index 652df71c07ff4fba28c5d8534d2003bdc08b8012..bc236580a7a36dbf5be1eb0a5722e1cf8f8b9bff 100644 --- a/resources/lang/de/hilfe.php +++ b/resources/lang/de/hilfe.php @@ -39,7 +39,6 @@ return [ "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 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", @@ -54,6 +53,12 @@ return [ "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", "domains.showcase.menu.5" => "Probieren Sie es doch gleich einmal aus, indem Sie die Optionen anklicken.", + + 'urls.title' => 'URLs ausschließen', + 'urls.explanation' => 'Sie können Suchergebnisse ausschließen, deren Ergebnislinks bestimmte Worte enthalten, indem Sie in ihrer Suche "-url:" verwenden.', + 'urls.example.1' => 'Beispiel: Sie möchten keine Ergebnisse bei denen im Ergebnislink das Wort "Hund" auftaucht:', + 'urls.example.2' => '<i>meine suche</i> -url:hund', + "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.", diff --git a/resources/lang/de/metaGer.php b/resources/lang/de/metaGer.php index e2baeb7c7bc4ae9de74c85f5ecd5559ee9ee8912..f776751c99e08556ab0fde5b7714b254bb9f241e 100644 --- a/resources/lang/de/metaGer.php +++ b/resources/lang/de/metaGer.php @@ -11,8 +11,8 @@ return [ 'formdata.noSearch' => 'Achtung: Sie haben keinen Suchbegriff eingegeben. Sie können ihre Suchbegriffe oben eingeben und es erneut versuchen.', 'formdata.dartEurope' => 'Hinweis: Sie haben Dart-Europe aktiviert. Die Suche kann deshalb länger dauern und die maximale Suchzeit wurde auf 10 Sekunden hochgesetzt.', 'formdata.hostBlacklist' => 'Ergebnisse von folgenden Hosts werden nicht angezeigt: ":host"', - 'formdata.domainBlacklist' => 'Ergebnisse von folgenden Domains werden nicht angezeigt: ":domain"', + 'formdata.urlBlacklist' => 'Ergebnisse mit URLs die folgendes nicht beinhalten werden nicht angezeigt: ":url"', 'formdata.stopwords' => 'Sie machen eine Ausschlusssuche. Ergebnisse mit folgenden Wörtern werden nicht angezeigt: ":stopwords"', 'formdata.phrase' => 'Sie führen eine Phrasensuche durch: :phrase', diff --git a/resources/views/hilfe.blade.php b/resources/views/hilfe.blade.php index 63b2e2a941624b35b31023206698a070b668376f..9a236ebc15d98f115e8dd0bed4da6521860ebfb4 100644 --- a/resources/views/hilfe.blade.php +++ b/resources/views/hilfe.blade.php @@ -146,6 +146,18 @@ </div> </div> </div> + <div id="urls" class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">{!! trans('hilfe.urls.title') !!}</h3> + </div> + <div class="panel-body"> + <p>{!! trans('hilfe.urls.explanation') !!}</p> + <ul class="dotlist"> + <li>{!! trans('hilfe.urls.example.1') !!}</li> + <div class = "well well-sm">{!! trans('hilfe.urls.example.2') !!}</div> + </ul> + </div> + </div> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">{!! trans('hilfe.bang.title') !!}</h3>