Commit 429110ea authored by Dominik Hebeler's avatar Dominik Hebeler
Browse files

Merge branch '495-suchworte-in-urls-ausschliessen' into 'development'

urls mit bestimmten wörtern auszuschließen ins jetzt über -url:<Wort> möglich

Closes #495

See merge request !882
parents 1e3d14a3 53c2340e
......@@ -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;
......
......@@ -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;
......
......@@ -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.",
......
......@@ -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',
......
......@@ -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>
......
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