diff --git a/app/ContentWarnings.php b/app/ContentWarnings.php new file mode 100644 index 0000000000000000000000000000000000000000..449273135b2797af3e5a111dc611476dc3b23fae --- /dev/null +++ b/app/ContentWarnings.php @@ -0,0 +1,135 @@ +link; + + $new_target_url = route('content-warning', [ + "url" => $target_url, + "result-page" => url()->full(), + "pw" => "test", + ]); + + $result->link = $new_target_url; + $result->content_warning = $blocked; + } + + /** + * Checks the Result if it needs a content warning. It depends on a public list of + * possibly compromised media websites and the source search engine. + * + * @param Result &$result + * + * @return boolean + */ + private static function checkResult(Result &$result) + { + if (in_array($result->provider->{"parser-class"}, self::CONTENT_WARNING_ENGINES)) { + return self::CONTENT_WARNING_STATUS_ENGINE; + } + + + $targetUrl = $result->originalLink; + + // Extract Domain from URL + $targetDomain = parse_url($targetUrl, PHP_URL_HOST); + + $domain_list = self::getContentWarningList(); + foreach ($domain_list as $domain_entry) { + $domain_entry_regexp = preg_quote($domain_entry, "/"); + // We will allow *. notation at the start of the file + // Both characters would have been escaped by above function + if (strpos($domain_entry_regexp, '\*\.') === 0) { + $domain_entry_regexp = substr_replace($domain_entry_regexp, '([^\.]+\.)*?', 0, 4); + } + $domain_entry_regexp = "/^" . $domain_entry_regexp . '$/'; + if (preg_match($domain_entry_regexp, $targetDomain)) { + return self::CONTENT_WARNING_STATUS_DOMAIN; + } + } + return self::CONTENT_WARNING_STATUS_NONE; + } + + /** + * Retrieves a list of domains to use content warnings on + * To Reduce Disk I/O the list of possibly dangerous domains gets cached in redis. + * This function reads in the file from disk and loads it into the cache. + * An expiring redis key is used to determine if the list is loaded or not. + * + * @return array A list of Domains to implement content warnings on. Includes full domains and *.domain.com + */ + private static function getContentWarningList() + { + $domain_list = Cache::get(self::CACHE_KEY, null); + if ($domain_list !== null) { + return $domain_list; + } + + // Domain List is not in cache yet: Load it from disk + $content_warning_list_file_path = storage_path("app/public/content_warning_domains.txt"); + + $domain_list = []; + + $fh = fopen($content_warning_list_file_path, "r"); + + while (($line = fgets($fh)) !== false) { + $line = trim($line); + if (strpos($line, "//") === 0) { + // This is a comment. Skip the line + continue; + } + $domain_to_validate = $line; + // Checks if the Domain starts with .* to include all subdomains + if (preg_match("/^\*\.(.*)/", $domain_to_validate, $matches)) { + $domain_to_validate = $matches[1]; + } + + if ($domain_to_validate === false) { + Log::error("[Content Warnings]: " . date("Y-m-d H:i:s") . " - $line is not a valid domain."); + continue; + } else { + $domain_list[] = $line; + } + } + + fclose($fh); + + Cache::put(self::CACHE_KEY, $domain_list, self::CACHE_TTL); + + return $domain_list; + } +} diff --git a/app/Http/Controllers/SearchEngineList.php b/app/Http/Controllers/SearchEngineList.php new file mode 100644 index 0000000000000000000000000000000000000000..5a67a5afd3f7eb59ca06ea3b7a242a6eff3724ab --- /dev/null +++ b/app/Http/Controllers/SearchEngineList.php @@ -0,0 +1,45 @@ +foki as $fokus_name => $fokus) { + foreach ($fokus->sumas as $suma_name) { + $sumas[$fokus_name][] = $suma_name; + } + } + $suma_infos = []; + foreach ($sumas as $fokus_name => $suma_list) { + foreach ($suma_list as $index => $suma_name) { + if (!$suma_file->sumas->{$suma_name}->disabled) { + $infos = $suma_file->sumas->{$suma_name}->infos; + $suma_infos[$fokus_name][$suma_name] = clone $infos; + } + } + } + return view('search-engine') + ->with('title', trans('titles.search-engine')) + ->with('navbarFocus', 'info') + ->with('suma_infos', $suma_infos); + } +} diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 374209010d2e36156db9d915a870923c1a7f7744..7d947d242ed35dcecc5362f2f1238f0385cc925e 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -95,10 +95,11 @@ class SettingsController extends Controller $sumas = []; foreach ($sumasFoki as $suma) { if ((!empty($langFile->sumas->{$suma}->disabled) && $langFile->sumas->{$suma}->disabled) || - (!empty($langFile->sumas->{$suma}->{"auto-disabled"}) && $langFile->sumas->{$suma}->{"auto-disabled"})) { + (!empty($langFile->sumas->{$suma}->{"auto-disabled"}) && $langFile->sumas->{$suma}->{"auto-disabled"}) + ) { continue; } - $sumas[$suma]["display-name"] = $langFile->sumas->{$suma}->{"display-name"}; + $sumas[$suma]["display-name"] = $langFile->sumas->{$suma}->infos->display_name; $sumas[$suma]["filtered"] = false; if (Cookie::get($fokus . "_engine_" . $suma) === "off") { $sumas[$suma]["enabled"] = false; @@ -335,8 +336,8 @@ class SettingsController extends Controller if (stripos($blacklist, '/') !== false) { $blacklist = substr($blacklist, 0, stripos($blacklist, '/')); } - - $regexUrl = '#^(\*\.)?[a-z0-9]+(\.[a-z0-9]+)?(\.[a-z0-9]{2,})$#'; + #fixme: this doesn't match all valid URLs + $regexUrl = '#^(\*\.)?[a-z0-9-]+(\.[a-z0-9]+)?(\.[a-z0-9]{2,})$#'; if (preg_match($regexUrl, $blacklist) === 1) { $path = \Request::path(); $cookiePath = "/" . substr($path, 0, strpos($path, "meta/") + 5); @@ -360,7 +361,7 @@ class SettingsController extends Controller } } if ($noduplicate && !empty($blacklist) > 0 && strlen($blacklist) <= 255) { - $cookieName= $fokus.'_blpage'.$cookieCounter; + $cookieName = $fokus . '_blpage' . $cookieCounter; Cookie::queue($cookieName, $blacklist, 525600, $cookiePath, null, false, false); } } @@ -389,7 +390,7 @@ class SettingsController extends Controller $empty = $request->input('empty'); $cookiePath = "/" . substr($path, 0, strpos($path, "meta/") + 5); $cookies = Cookie::get(); - + foreach ($cookies as $key => $value) { if (stripos($key, $fokus . '_blpage') === 0) { Cookie::queue($key, "", 0, $cookiePath, null, false, false); @@ -426,10 +427,10 @@ class SettingsController extends Controller foreach ($langFile->foki as $fokus => $fokusInfo) { if (strpos($key, $fokus . '_blpage') === 0 && preg_match($regexUrl, $value) === 1) { Cookie::queue($key, $value, 525600, $cookiePath, null, false, false); - } elseif (strpos($key, $fokus.'_setting_') === 0) { + } elseif (strpos($key, $fokus . '_setting_') === 0) { foreach ($langFile->filter->{'parameter-filter'} as $parameter) { foreach ($parameter->values as $p => $v) { - if ($key === $fokus.'_setting_' . $parameter->{'get-parameter'} && $value === $p) { + if ($key === $fokus . '_setting_' . $parameter->{'get-parameter'} && $value === $p) { Cookie::queue($key, $value, 525600, $cookiePath, null, false, false); } } diff --git a/app/MetaGer.php b/app/MetaGer.php index 0e31d06f74b30f08a7bd0e7aa929e5418ceb4af5..c414a38309bf02b31fd5e8df069306ea77bc4958 100644 --- a/app/MetaGer.php +++ b/app/MetaGer.php @@ -327,6 +327,9 @@ class MetaGer } } + // Content Warnings + $this->contentWarnings($this->results); + # Human Verification $this->humanVerification($this->results); $this->humanVerification($this->ads); @@ -404,6 +407,11 @@ class MetaGer if (isset($arr[$link])) { $arr[$link]->gefVon[] = $this->results[$i]->gefVon[0]; $arr[$link]->gefVonLink[] = $this->results[$i]->gefVonLink[0]; + // Disable Content Warning if it was enabled before + if ($arr[$link]->content_warning === ContentWarnings::CONTENT_WARNING_STATUS_ENGINE) { + $arr[$link]->content_warning = ContentWarnings::CONTENT_WARNING_STATUS_NONE; + } + // The duplicate might already be an adgoal partnershop if ($this->results[$i]->partnershop) { @@ -465,7 +473,7 @@ class MetaGer * If there are no other advertisements we will only display our advertisements * every so often. ~33% in this case */ - if (/*sizeof($this->ads) === 0 &&*/ rand(1, 100) >= 5) { + if (/*sizeof($this->ads) === 0 &&*/rand(1, 100) >= 5) { return; } @@ -486,6 +494,16 @@ class MetaGer array_splice($this->ads, $position, 0, [$donationAd]); } + private function contentWarnings(&$results) + { + /** + * @param \App\Models\Result $result + */ + foreach ($results as $result) { + ContentWarnings::enableContentWarnings($result); + } + } + public function humanVerification(&$results) { # Let's check if we need to implement a redirect for human verification @@ -623,7 +641,7 @@ class MetaGer } $filter = rtrim($filter, ","); $error = trans('metaGer.engines.noSpecialSearch', [ - 'fokus' => trans($this->sumaFile->foki->{$this->fokus}->{"display-name"}), + 'fokus' => trans($this->sumaFile->foki->{$this->fokus}->infos->display_name), 'filter' => $filter, ]); $this->errors[] = $error; @@ -733,8 +751,8 @@ class MetaGer # Prüfe ob Parser vorhanden if (!file_exists(app_path() . "/Models/parserSkripte/" . $engine->{"parser-class"} . ".php")) { - Log::error("Konnte " . $engine->{"display-name"} . " nicht abfragen, da kein Parser existiert"); - $this->errors[] = trans('metaGer.engines.noParser', ['engine' => $engine->{"display-name"}]); + Log::error("Konnte " . $engine->infos->display_name . " nicht abfragen, da kein Parser existiert"); + $this->errors[] = trans('metaGer.engines.noParser', ['engine' => $engine->infos->display_name]); continue; } @@ -743,7 +761,7 @@ class MetaGer try { $tmp = new $path($engineName, $engine, $this); } catch (\ErrorException $e) { - Log::error("Konnte " . $engine->{"display-name"} . " nicht abfragen. " . $e); + Log::error("Konnte " . $engine->infos->display_name . " nicht abfragen. " . $e); continue; } diff --git a/app/Models/Result.php b/app/Models/Result.php index 5618220cffcddfdab0f782afaf7afb0e58a652df..e22f9008f62c915bf17017ea1e1728e5e7ea0295 100644 --- a/app/Models/Result.php +++ b/app/Models/Result.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\ContentWarnings; /* Die Klasse Result sammelt alle Informationen über ein einzelnes Suchergebnis. * Die Results werden von den Suchmaschinenspezifischen Parser-Skripten erstellt. @@ -33,6 +34,7 @@ class Result public $strippedDomainAnzeige; # Die Domain in Form "bar.de" public $strippedLinkAnzeige; # Der Link in Form "foo.bar.de/test" public $rank; # Das Ranking für das Ergebnis + public $content_warning = ContentWarnings::CONTENT_WARNING_STATUS_NONE; # Whether or not the target website was marked by \App\ContentWarnings public $new = true; public $changed = false; diff --git a/app/Models/parserSkripte/Allesklar.php b/app/Models/parserSkripte/Allesklar.php index 7fe67260aa3d5897dbf49930b4f405b45be91a87..459c40c0e1afe098e8f19ab6301fd51045f53069 100644 --- a/app/Models/parserSkripte/Allesklar.php +++ b/app/Models/parserSkripte/Allesklar.php @@ -43,7 +43,8 @@ class Allesklar extends Searchengine $link, $link, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } catch (\Exception $e) { @@ -54,5 +55,4 @@ class Allesklar extends Searchengine } }); } - } diff --git a/app/Models/parserSkripte/BASE.php b/app/Models/parserSkripte/BASE.php index c47dee3d8b3ce6bb5b744a6ad49e27b1f6373e26..7d19a44d44911795851adc7ed598548ee13d6cd2 100644 --- a/app/Models/parserSkripte/BASE.php +++ b/app/Models/parserSkripte/BASE.php @@ -49,7 +49,8 @@ class BASE extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } diff --git a/app/Models/parserSkripte/Beammachine.php b/app/Models/parserSkripte/Beammachine.php index 07eedcac904e029f368a79177445b40b86e46174..ea832df9e8a3288d7b4f79e27c13b2caf09f6b7a 100644 --- a/app/Models/parserSkripte/Beammachine.php +++ b/app/Models/parserSkripte/Beammachine.php @@ -34,10 +34,10 @@ class Beammachine extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } - } } diff --git a/app/Models/parserSkripte/Bing.php b/app/Models/parserSkripte/Bing.php index ba894665af1f07b6fcb38ea2c4552e19b2dc3db6..c5c589794409540ebf92f39e5ac7d9a472c3ac3e 100644 --- a/app/Models/parserSkripte/Bing.php +++ b/app/Models/parserSkripte/Bing.php @@ -14,13 +14,13 @@ class Bing extends Searchengine { parent::__construct($name, $engine, $metager); - if(LaravelLocalization::getCurrentLocale() === 'en'){ + if (LaravelLocalization::getCurrentLocale() === 'en') { $langFile = $metager->getLanguageFile(); $langFile = json_decode(file_get_contents($langFile)); $acceptLanguage = $metager->request->headers->all()['accept-language'][0]; - foreach($langFile->filter->{'parameter-filter'}->language->sumas->bing->values as $key => $value){ - if(stripos($acceptLanguage, "en") === 0 && stripos($acceptLanguage, $value) === 0) - $this->engine->{"get-parameter"}->mkt = $value; + foreach ($langFile->filter->{'parameter-filter'}->language->sumas->bing->values as $key => $value) { + if (stripos($acceptLanguage, "en") === 0 && stripos($acceptLanguage, $value) === 0) + $this->engine->{"get-parameter"}->mkt = $value; } } } @@ -51,13 +51,12 @@ class Bing extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, [] ); - } - } catch (\Exception $e) { Log::error("A problem occurred parsing results from $this->name:"); Log::error($e->getMessage()); @@ -91,12 +90,10 @@ class Bing extends Searchengine $next = new Bing($this->name, $newEngine, $metager); $this->next = $next; - } catch (\Exception $e) { Log::error("A problem occurred parsing results from $this->name:"); Log::error($e->getMessage()); return; } - } } diff --git a/app/Models/parserSkripte/BingBilder.php b/app/Models/parserSkripte/BingBilder.php index 97d26a7d5e23e859dc41ed25b4a03c184cf58871..695ec8fb98cb4ad09da0e6b781b9662a5f71da38 100644 --- a/app/Models/parserSkripte/BingBilder.php +++ b/app/Models/parserSkripte/BingBilder.php @@ -34,8 +34,8 @@ class BingBilder extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, - $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, [ 'image' => $image, diff --git a/app/Models/parserSkripte/Blogsearch.php b/app/Models/parserSkripte/Blogsearch.php index 83689ffcd439ffac4c9482b9b1c8ad4b48e7cedf..bcccc3e6b159c4691add7839f10b1b39a7c0c86f 100644 --- a/app/Models/parserSkripte/Blogsearch.php +++ b/app/Models/parserSkripte/Blogsearch.php @@ -36,7 +36,8 @@ class Blogsearch extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } diff --git a/app/Models/parserSkripte/Dailymotion.php b/app/Models/parserSkripte/Dailymotion.php index 58876c2db8e629186144edf4336be3df74455039..7158aa5b47a93a05e74044b2eb95004cacfee9ab 100644 --- a/app/Models/parserSkripte/Dailymotion.php +++ b/app/Models/parserSkripte/Dailymotion.php @@ -37,7 +37,8 @@ class Dailymotion extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, ['partnershop' => false] ); diff --git a/app/Models/parserSkripte/Dart.php b/app/Models/parserSkripte/Dart.php index 49ef4e80b19f2e28108a293629a79c15c1df1b50..deee3c51c3f99f636d634c89ab7fc2f21f4fd70b 100644 --- a/app/Models/parserSkripte/Dart.php +++ b/app/Models/parserSkripte/Dart.php @@ -57,11 +57,11 @@ class Dart extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } }); - } } diff --git a/app/Models/parserSkripte/Dmoznebel.php b/app/Models/parserSkripte/Dmoznebel.php index d79c3d3223340372484588fd3dd5f69f0c718313..4e5f45c116048a35f6b3c33f3e691a20c1d148cd 100644 --- a/app/Models/parserSkripte/Dmoznebel.php +++ b/app/Models/parserSkripte/Dmoznebel.php @@ -36,10 +36,10 @@ class Dmoznebel extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } - } } diff --git a/app/Models/parserSkripte/Dmoznebel_int.php b/app/Models/parserSkripte/Dmoznebel_int.php index 5006bffbb472d94c7524164f239c5ecf3f11049d..9704935684cd0babcd635b4fdb71b69b721d79f8 100644 --- a/app/Models/parserSkripte/Dmoznebel_int.php +++ b/app/Models/parserSkripte/Dmoznebel_int.php @@ -28,7 +28,8 @@ class Dmoznebel_int extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } diff --git a/app/Models/parserSkripte/Dummy.php b/app/Models/parserSkripte/Dummy.php index 8dc7af0b74865eb2457f936918d38e90ce98337a..8ea045717e9d7a68d39918d0baf348076c8bef99 100644 --- a/app/Models/parserSkripte/Dummy.php +++ b/app/Models/parserSkripte/Dummy.php @@ -24,20 +24,21 @@ class Dummy extends Searchengine } foreach ($content as $result) { - $title = $result->title; - $link = $result->link; - $anzeigeLink = $link; - $descr = $result->descr; - $this->counter++; - $this->results[] = new \App\Models\Result( - $this->engine, - $title, - $link, - $anzeigeLink, - $descr, - $this->engine->{"display-name"},$this->engine->homepage, - $this->counter - ); + $title = $result->title; + $link = $result->link; + $anzeigeLink = $link; + $descr = $result->descr; + $this->counter++; + $this->results[] = new \App\Models\Result( + $this->engine, + $title, + $link, + $anzeigeLink, + $descr, + $this->engine->infos->display_name, + $this->engine->infos->homepage, + $this->counter + ); } } catch (\Exception $e) { Log::error("A problem occurred parsing results from $this->name:"); @@ -53,14 +54,14 @@ class Dummy extends Searchengine $newEngine = unserialize(serialize($this->engine)); $perPage = 0; - if(isset($newEngine->{"get-parameter"}->count)){ + if (isset($newEngine->{"get-parameter"}->count)) { $perPage = $newEngine->{"get-parameter"}->count; } else { $perPage = 10; } $offset = 0; - if(empty($newEngine->{"get-parameter"}->skip)){ + if (empty($newEngine->{"get-parameter"}->skip)) { $offset = $perPage; } else { $offset = $newEngine->{"get-parameter"}->skip + $perPage; @@ -74,12 +75,10 @@ class Dummy extends Searchengine $next = new Dummy($this->name, $newEngine, $metager); $this->next = $next; - } catch (\Exception $e) { Log::error("A problem occurred parsing results from $this->name:"); Log::error($e->getMessage()); return; } - } -} \ No newline at end of file +} diff --git a/app/Models/parserSkripte/Ebay.php b/app/Models/parserSkripte/Ebay.php index 848e01a75d484cb5c102f836dcb630f4946a51f4..e26ff21b327236add7df302fff42d72f4765d7c8 100644 --- a/app/Models/parserSkripte/Ebay.php +++ b/app/Models/parserSkripte/Ebay.php @@ -51,11 +51,14 @@ class Ebay extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, - ['partnershop' => false, + [ + 'partnershop' => false, 'price' => $price, - 'image' => $image] + 'image' => $image + ] ); $count++; } diff --git a/app/Models/parserSkripte/Ecoshopper.php b/app/Models/parserSkripte/Ecoshopper.php index 818d55cf7fa39a1f57411fdf65cf27fcafe4316d..4ea3d1f69b6fd5a512d205e16761bc5e556d8765 100644 --- a/app/Models/parserSkripte/Ecoshopper.php +++ b/app/Models/parserSkripte/Ecoshopper.php @@ -36,7 +36,6 @@ class Ecoshopper extends Searchengine } else { $anzeigeLink = $link; } - } else { $anzeigeLink = $link; } @@ -49,10 +48,13 @@ class Ecoshopper extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, - ['partnershop' => false, - 'image' => $image] + [ + 'partnershop' => false, + 'image' => $image + ] ); } } catch (\Exception $e) { diff --git a/app/Models/parserSkripte/Europeana.php b/app/Models/parserSkripte/Europeana.php index ce96e7152540285e9d335fd3dcee7e6cd97e2351..c03517b7cfd79a595ed914474a3b448528ad0e07 100644 --- a/app/Models/parserSkripte/Europeana.php +++ b/app/Models/parserSkripte/Europeana.php @@ -42,7 +42,8 @@ class Europeana extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, ['image' => $image] ); diff --git a/app/Models/parserSkripte/Exalead.php b/app/Models/parserSkripte/Exalead.php index a500dc750e7aecb7db0915d06d89a549a1018321..c77d335a70713bbd169fb86daea8df0b021118c9 100644 --- a/app/Models/parserSkripte/Exalead.php +++ b/app/Models/parserSkripte/Exalead.php @@ -61,7 +61,8 @@ class Exalead extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } catch (\ErrorException $e) { diff --git a/app/Models/parserSkripte/Fairmondo.php b/app/Models/parserSkripte/Fairmondo.php index d305f8922a4ac360de4230ee098381f9dd1a43a7..8b65569f7b663bfde3220a0f6c71a69b469ece5e 100644 --- a/app/Models/parserSkripte/Fairmondo.php +++ b/app/Models/parserSkripte/Fairmondo.php @@ -48,8 +48,8 @@ class Fairmondo extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, - $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, [ 'price' => $price, diff --git a/app/Models/parserSkripte/Fernsehsuche.php b/app/Models/parserSkripte/Fernsehsuche.php index 407822b9c8cab166f15ae558a7d0d6edf07995f0..bd3b41e3820d26e19470e95f5a67e002f03c951e 100644 --- a/app/Models/parserSkripte/Fernsehsuche.php +++ b/app/Models/parserSkripte/Fernsehsuche.php @@ -38,12 +38,12 @@ class Fernsehsuche extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, ['image' => $image] ); } catch (\ErrorException $e) { - } } } catch (\Exception $e) { diff --git a/app/Models/parserSkripte/Fess.php b/app/Models/parserSkripte/Fess.php index bc64cf920d11a9bfdb650a0b1a8b3f2e62a97268..2d75fdeed8f42cab7612e6af5fd8ddeb9feffb6e 100644 --- a/app/Models/parserSkripte/Fess.php +++ b/app/Models/parserSkripte/Fess.php @@ -37,11 +37,11 @@ class Fess extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } catch (\ErrorException $e) { - } } } catch (\Exception $e) { diff --git a/app/Models/parserSkripte/Flickr.php b/app/Models/parserSkripte/Flickr.php index c04724e09dc50dcfdb9060673140b5e7ace7df02..f5a7e80905026741b51ae580ce5ccb40ee6935ca 100644 --- a/app/Models/parserSkripte/Flickr.php +++ b/app/Models/parserSkripte/Flickr.php @@ -37,7 +37,8 @@ class Flickr extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, ['image' => $image] ); diff --git a/app/Models/parserSkripte/Goyax.php b/app/Models/parserSkripte/Goyax.php index 66c74a10eb91cb86b17ad3766fe1c3d81cf512ba..8c4625d660cb34fb7655cee3bb4ea2aa0969cb75 100644 --- a/app/Models/parserSkripte/Goyax.php +++ b/app/Models/parserSkripte/Goyax.php @@ -31,10 +31,10 @@ class Goyax extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); }); - } } diff --git a/app/Models/parserSkripte/Infotiger.php b/app/Models/parserSkripte/Infotiger.php new file mode 100644 index 0000000000000000000000000000000000000000..5682080c47c5cea175296c7e040c3955e9bb8736 --- /dev/null +++ b/app/Models/parserSkripte/Infotiger.php @@ -0,0 +1,104 @@ +validateJsonResponse($results_json)) { + return; + } + + + try { + foreach ($results_json->response->docs as $result) { + + $title = $result->title; + $link = $result->url; + $anzeigeLink = $result->purl; + $descr = $result->desc; + $this->counter++; + $this->results[] = new \App\Models\Result( + $this->engine, + $title, + $link, + $anzeigeLink, + $descr, + $this->engine->infos->display_name, + $this->engine->infos->homepage, + $this->counter + ); + } + } catch (\Exception $e) { + Log::error("A problem occurred parsing results from $this->name:"); + Log::error($e->getMessage()); + return; + } + } + + public function getNext(\App\MetaGer $metager, $result) + { + $results_json = json_decode($result); + + if (!$this->validateJsonResponse($results_json)) { + // Error parsing JSON response + return; + } + $numFound = 0; + if (!empty($results_json->response->numFound)) { + $numFound = $results_json->response->numFound; + } + $current_page = intval($this->engine->{"get-parameter"}->page); + + // Currently only 20 pages are supported + // No next page if we reached that + if ($current_page >= 20) { + return; + } + + $current_max_result = (($current_page - 1) * self::RESULTS_PER_PAGE) + sizeof($results_json->response->docs); + + if ($numFound > $current_max_result) { + # Erstellen des neuen Suchmaschinenobjekts und anpassen des GetStrings: + $newEngine = unserialize(serialize($this->engine)); + $newEngine->{"get-parameter"}->page = $current_page + 1; + $next = new Infotiger($this->name, $newEngine, $metager); + $this->next = $next; + } + } + + /** + * Checks the returned object if it matches the expected format + * + * @param Object $results_json + * + * @return boolean Whether or not the object is valid + */ + private function validateJsonResponse($results_json) + { + if ( + $results_json === null || // Error parsing JSON response (json_decode returned null) + empty($results_json) || + !$results_json->response || // Unexpected JSON format (no response object) + !$results_json->response->docs || // Unexpected JSON format (no docs object) + !is_array($results_json->response->docs) // Unexpected JSON format (docs is not an array) + ) { + return false; + } else { + return true; + } + } +} diff --git a/app/Models/parserSkripte/Kelkoo.php b/app/Models/parserSkripte/Kelkoo.php index 75380f558bf80dc0fe2214b57f5dd339ed437c8b..8d231f3255dfeb3d894506337a52ac97b945f5fa 100644 --- a/app/Models/parserSkripte/Kelkoo.php +++ b/app/Models/parserSkripte/Kelkoo.php @@ -63,10 +63,13 @@ class Kelkoo extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, - ['image' => $image, - 'price' => $totalPrice * 100] + [ + 'image' => $image, + 'price' => $totalPrice * 100 + ] ); } } catch (\Exception $e) { @@ -151,6 +154,5 @@ class Kelkoo extends Searchengine $token = str_replace(array("+", "/", "="), array(".", "_", "-"), $token); $URLreturn = $URLtmp . "&" . $URL_sig . "=" . $token; return $URLreturn; - } } diff --git a/app/Models/parserSkripte/Loklak.php b/app/Models/parserSkripte/Loklak.php index 8e739a48a3c3983bd057112fdc646b2e539bdfc5..d989dff0c436cdf01018d9f714c010a3d8d44ba0 100644 --- a/app/Models/parserSkripte/Loklak.php +++ b/app/Models/parserSkripte/Loklak.php @@ -35,7 +35,8 @@ class Loklak extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } diff --git a/app/Models/parserSkripte/Mg_hochsch_de.php b/app/Models/parserSkripte/Mg_hochsch_de.php index 1d74216a4e6a09189047a79d0a64d6e9d63777e8..d7cafd3dfd8b97a8dbf77590876c4a0223dc5fb7 100644 --- a/app/Models/parserSkripte/Mg_hochsch_de.php +++ b/app/Models/parserSkripte/Mg_hochsch_de.php @@ -34,10 +34,10 @@ class Mg_hochsch_de extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } - } } diff --git a/app/Models/parserSkripte/Mg_produkt2.php b/app/Models/parserSkripte/Mg_produkt2.php index 455965c9494b60e8b6221447ecdcd10f5e724ce1..b0bdcb7877397ec6b9bad63ee89dae894279c871 100644 --- a/app/Models/parserSkripte/Mg_produkt2.php +++ b/app/Models/parserSkripte/Mg_produkt2.php @@ -42,7 +42,8 @@ class Mg_produkt2 extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, ['image' => $image] ); diff --git a/app/Models/parserSkripte/Minisucher.php b/app/Models/parserSkripte/Minisucher.php index 69a55f9dcd5e0bd5bdcc253d441c71e9a330988e..fbbb1ba347b768a3f8d8e3a89039153df3589283 100644 --- a/app/Models/parserSkripte/Minisucher.php +++ b/app/Models/parserSkripte/Minisucher.php @@ -57,7 +57,7 @@ class Minisucher extends Searchengine $additionalInformation = ['date' => $dateVal]; - $minism = $this->engine->{"display-name"}; + $minism = $this->engine->infos->display_name; $gefVon = "Minisucher: $minism"; $subcollection = $result->xpath('//doc/str[@name="subcollection"]')[0]->__toString(); @@ -71,12 +71,9 @@ class Minisucher extends Searchengine $counter, $additionalInformation ); - } catch (\ErrorException $e) { continue; } } - } - } diff --git a/app/Models/parserSkripte/Mnogosearch.php b/app/Models/parserSkripte/Mnogosearch.php index 350eff6c471e1d13524376e48e2c302fbeb08112..b6d6373de2b8fc11952d481cd12fe9bdf0e9025d 100644 --- a/app/Models/parserSkripte/Mnogosearch.php +++ b/app/Models/parserSkripte/Mnogosearch.php @@ -39,10 +39,10 @@ class Mnogosearch extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); }); - } } diff --git a/app/Models/parserSkripte/Nebel.php b/app/Models/parserSkripte/Nebel.php index 2ec701d4b0d781e09ec602485a3f8dfb5750c215..e33004b30ef37670cc9b6f68a7647bb1dcf76609 100644 --- a/app/Models/parserSkripte/Nebel.php +++ b/app/Models/parserSkripte/Nebel.php @@ -34,10 +34,10 @@ class Nebel extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } - } } diff --git a/app/Models/parserSkripte/Onenewspage.php b/app/Models/parserSkripte/Onenewspage.php index 0b9ba4bb7689c829e3b9805f20d4f97c0faf2e29..67b0b11429eee00143719ab5e823e0fa1b0ce4c7 100644 --- a/app/Models/parserSkripte/Onenewspage.php +++ b/app/Models/parserSkripte/Onenewspage.php @@ -37,7 +37,8 @@ class Onenewspage extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, $additionalInformation ); @@ -45,7 +46,6 @@ class Onenewspage extends Searchengine if (count($this->results) > $this->resultCount) { $this->resultCount += count($this->results); } - } public function getNext(\App\MetaGer $metager, $result) diff --git a/app/Models/parserSkripte/Onenewspagegermany.php b/app/Models/parserSkripte/Onenewspagegermany.php index 288f644e0047440a1a8ca3d46aea68cff5bbcf2d..03686a911d6fbb66e01320902647e72436e3cdd6 100644 --- a/app/Models/parserSkripte/Onenewspagegermany.php +++ b/app/Models/parserSkripte/Onenewspagegermany.php @@ -40,17 +40,16 @@ class Onenewspagegermany extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, $additionalInformation ); } - } if (count($this->results) > $this->resultCount) { $this->resultCount += count($this->results); } - } public function getNext(\App\MetaGer $metager, $result) diff --git a/app/Models/parserSkripte/Onenewspagevideo.php b/app/Models/parserSkripte/Onenewspagevideo.php index a83ae8ddff7123b0c63ef8b8cc3cfc0cf726b98a..f8e6411ef17694b9bd0fe77d3b2bce53d480b4d0 100644 --- a/app/Models/parserSkripte/Onenewspagevideo.php +++ b/app/Models/parserSkripte/Onenewspagevideo.php @@ -36,7 +36,8 @@ class Onenewspagevideo extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, $additionalInformation ); diff --git a/app/Models/parserSkripte/Openclipart.php b/app/Models/parserSkripte/Openclipart.php index 4f184a4976611e01718defc6e203c5f0c5d7e417..0539e923ea47fe4b9cf79bb82f9f1bfbcaf0cfdf 100644 --- a/app/Models/parserSkripte/Openclipart.php +++ b/app/Models/parserSkripte/Openclipart.php @@ -37,7 +37,8 @@ class Openclipart extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, ['image' => $image] ); diff --git a/app/Models/parserSkripte/Opencrawlastronomie.php b/app/Models/parserSkripte/Opencrawlastronomie.php index beeaa07c7fe19c49aa3cc85efe10021fe27bf1bb..bd1a5ad8ce8906e244c9bd174497492e6f4a8e83 100644 --- a/app/Models/parserSkripte/Opencrawlastronomie.php +++ b/app/Models/parserSkripte/Opencrawlastronomie.php @@ -41,7 +41,8 @@ class Opencrawlastronomie extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); $count++; diff --git a/app/Models/parserSkripte/Opencrawlpolitik.php b/app/Models/parserSkripte/Opencrawlpolitik.php index 9f2490f00ddf80bad93c93d94362e2eb1e69d0a2..ba21354dc0e0f6410a97e24bab291bdc9264fe3a 100644 --- a/app/Models/parserSkripte/Opencrawlpolitik.php +++ b/app/Models/parserSkripte/Opencrawlpolitik.php @@ -49,7 +49,8 @@ class Opencrawlpolitik extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, $additionalInformation ); diff --git a/app/Models/parserSkripte/Opencrawlregengergie.php b/app/Models/parserSkripte/Opencrawlregengergie.php index 53d232bf2bfed26b3a9b7331fa9ec2c59133397a..fb1981773c9a259fdc83d700f2d1a842b7ca7260 100644 --- a/app/Models/parserSkripte/Opencrawlregengergie.php +++ b/app/Models/parserSkripte/Opencrawlregengergie.php @@ -41,7 +41,8 @@ class Opencrawlregengergie extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); $count++; diff --git a/app/Models/parserSkripte/Overture.php b/app/Models/parserSkripte/Overture.php index 2722fef01d64d5d8f42cf4a305837bf584e7d0b6..e0b5c42041e84c87b00a9ddd7349a3cce42d4c86 100644 --- a/app/Models/parserSkripte/Overture.php +++ b/app/Models/parserSkripte/Overture.php @@ -46,8 +46,8 @@ class Overture extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, - $this->engine->{"homepage"}, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, [] ); @@ -67,8 +67,8 @@ class Overture extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, - $this->engine->{"homepage"}, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, [] ); diff --git a/app/Models/parserSkripte/OvertureAds.php b/app/Models/parserSkripte/OvertureAds.php index c27c704e91f1b03d85198906c8487674993342f2..9975a9dbce3a73119448f2d8c8123e0a654204b4 100644 --- a/app/Models/parserSkripte/OvertureAds.php +++ b/app/Models/parserSkripte/OvertureAds.php @@ -38,8 +38,8 @@ class OvertureAds extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, - $this->engine->{"homepage"}, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, [] ); @@ -113,5 +113,4 @@ class OvertureAds extends Searchengine return "&affilData=" . $affilDataValue . "&serveUrl=" . $serveUrl; } - } diff --git a/app/Models/parserSkripte/Pixabay.php b/app/Models/parserSkripte/Pixabay.php index b4d57eb8bc1c970bab864554e9e74438b6ecb671..96c040a3853a3e88f8ba45cd7df2d2f1777007ab 100644 --- a/app/Models/parserSkripte/Pixabay.php +++ b/app/Models/parserSkripte/Pixabay.php @@ -37,7 +37,8 @@ class Pixabay extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, ['image' => $image] ); diff --git a/app/Models/parserSkripte/ProdSearch.php b/app/Models/parserSkripte/ProdSearch.php index 6cdc54a244950586b751726b65e235c610cdd41d..441d84dd521bd87a18be6ab489d79e0fd69ded1c 100644 --- a/app/Models/parserSkripte/ProdSearch.php +++ b/app/Models/parserSkripte/ProdSearch.php @@ -44,11 +44,13 @@ class ProdSearch extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, [ 'price' => $price, - 'image' => $image] + 'image' => $image + ] ); } } diff --git a/app/Models/parserSkripte/Qip.php b/app/Models/parserSkripte/Qip.php index 7c3b1f0238421076b4d1649124654f93f58758bd..92a1deffd12e1ffb38e4df32d0bc764a081915e6 100644 --- a/app/Models/parserSkripte/Qip.php +++ b/app/Models/parserSkripte/Qip.php @@ -36,7 +36,8 @@ class Qip extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } diff --git a/app/Models/parserSkripte/Qualigo.php b/app/Models/parserSkripte/Qualigo.php index 229ed9fb28ad3e7b4d935cfedeb3b5823d826220..712d4645db0fbb60569d432316097aeb6834fbf2 100644 --- a/app/Models/parserSkripte/Qualigo.php +++ b/app/Models/parserSkripte/Qualigo.php @@ -15,7 +15,7 @@ class Qualigo extends XmlSearchengine protected function loadXmlResults($resultsXml) { - if(empty($resultsXml) || !$resultsXml){ + if (empty($resultsXml) || !$resultsXml) { Log::error("A problem occurred parsing results from $this->name:"); return; } @@ -33,8 +33,8 @@ class Qualigo extends XmlSearchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, - $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } diff --git a/app/Models/parserSkripte/Radiobrowser.php b/app/Models/parserSkripte/Radiobrowser.php index eafe1d1e8c8bf845b6ae6760c7b8c3979124dfbd..77414984cd6eccc66267d01174f6a5709798632a 100644 --- a/app/Models/parserSkripte/Radiobrowser.php +++ b/app/Models/parserSkripte/Radiobrowser.php @@ -25,7 +25,7 @@ class Radiobrowser extends Searchengine foreach ($content as $result) { $title = $result->name; - $link = $result->homepage; + $link = $result->infos->homepage; $anzeigeLink = $link; $descr = ""; if ($result->tags != "") { @@ -50,7 +50,8 @@ class Radiobrowser extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } diff --git a/app/Models/parserSkripte/Scopia.php b/app/Models/parserSkripte/Scopia.php index 937e03470229c7e5d783602384a149ff3ee61e25..dd95f3ebc9c9fa5812285b0478b65169527bee41 100644 --- a/app/Models/parserSkripte/Scopia.php +++ b/app/Models/parserSkripte/Scopia.php @@ -36,19 +36,18 @@ class Scopia extends Searchengine $anzeigeLink = $link; $descr = $result->description->__toString(); $this->counter++; - if(! $this->containsPornContent($title.$descr)) { //see note at filtering method + if (!$this->containsPornContent($title . $descr)) { //see note at filtering method $this->results[] = new \App\Models\Result( $this->engine, $title, $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, - $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } - } } catch (\Exception $e) { Log::error("A problem occurred parsing results from $this->name:"); @@ -57,7 +56,8 @@ class Scopia extends Searchengine } } - private function containsPornContent($text) { + private function containsPornContent($text) + { // Returns true if pornographic content is detected // We noticed scopia often serving pornographic results for non-pornographic queries. After much deliberation we decided to filter pornographic results from scopia. Those will have to be supplied by other search engines. @@ -108,8 +108,8 @@ class Scopia extends Searchengine "free" => 10, ]; $acc = 0; - foreach($words as $word => $score) { - if (stristr($text,$word)) { + foreach ($words as $word => $score) { + if (stristr($text, $word)) { $acc += $score; } } @@ -122,7 +122,6 @@ class Scopia extends Searchengine $result = str_replace("&", "&", $result); try { $content = \simplexml_load_string($result); - } catch (\Exception $e) { Log::error("A problem occurred parsing results from $this->name:"); Log::error($e->getMessage()); @@ -144,6 +143,5 @@ class Scopia extends Searchengine $next = new Scopia($this->name, $newEngine, $metager); $this->next = $next; } - } } diff --git a/app/Models/parserSkripte/Shopzilla.php b/app/Models/parserSkripte/Shopzilla.php index f0cf7cf82d423ac93603bb2d56183c838ec647a5..b89b9b796220b37e098bc120225a92dab8536ec4 100644 --- a/app/Models/parserSkripte/Shopzilla.php +++ b/app/Models/parserSkripte/Shopzilla.php @@ -47,11 +47,14 @@ class Shopzilla extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter, - ['partnershop' => true, + [ + 'partnershop' => true, 'price' => $price, - 'image' => $image] + 'image' => $image + ] ); $count++; } diff --git a/app/Models/parserSkripte/Similar_product.php b/app/Models/parserSkripte/Similar_product.php index 3dcf956a0e6394120b98a607ffcd1ca1db3ac505..55489560ffd5ce73efb959cbd2c8e69a7cc32609 100644 --- a/app/Models/parserSkripte/Similar_product.php +++ b/app/Models/parserSkripte/Similar_product.php @@ -30,7 +30,8 @@ class Similar_product extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } diff --git a/app/Models/parserSkripte/Similar_product_ads.php b/app/Models/parserSkripte/Similar_product_ads.php index 8fc6bd78681f45e52590b3b2e8595636fe334139..7c3ea9f2e50f8cc74f1bd59a6e4c2f3b57fadcbd 100644 --- a/app/Models/parserSkripte/Similar_product_ads.php +++ b/app/Models/parserSkripte/Similar_product_ads.php @@ -34,10 +34,10 @@ class Similar_product_ads extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } } - } diff --git a/app/Models/parserSkripte/Suchticker.php b/app/Models/parserSkripte/Suchticker.php index 9a147a0c09881110833ce11e4bbb49189775a974..ae07b2ac30c60da0492726176cb87c13e279efc1 100644 --- a/app/Models/parserSkripte/Suchticker.php +++ b/app/Models/parserSkripte/Suchticker.php @@ -34,10 +34,10 @@ class Suchticker extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } - } } diff --git a/app/Models/parserSkripte/Tuhh.php b/app/Models/parserSkripte/Tuhh.php index 7dfe58cc2608c72e48731da827e75b3563dc2e1e..2fa6e0fd0c46cbb1c33d983afaefd024469bf92d 100644 --- a/app/Models/parserSkripte/Tuhh.php +++ b/app/Models/parserSkripte/Tuhh.php @@ -40,7 +40,8 @@ class Tuhh extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); $count++; diff --git a/app/Models/parserSkripte/Wikipedia.php b/app/Models/parserSkripte/Wikipedia.php index c590d75dac4986e23f137eaabd6972ca5571be71..05054e3f32ecdd12e95c1003999cfe33febc2e16 100644 --- a/app/Models/parserSkripte/Wikipedia.php +++ b/app/Models/parserSkripte/Wikipedia.php @@ -24,7 +24,8 @@ class Wikipedia extends Searchengine $link, $result[3], $result[2], - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $counter ); } diff --git a/app/Models/parserSkripte/Witch.php b/app/Models/parserSkripte/Witch.php index fd47a84cdcfbec7ad86faa46d0864601c0187531..280df33d26e07320a2752fa4f27a5008b79486e9 100644 --- a/app/Models/parserSkripte/Witch.php +++ b/app/Models/parserSkripte/Witch.php @@ -37,11 +37,11 @@ class Witch extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } - } public function getNext(\App\MetaGer $metager, $result) diff --git a/app/Models/parserSkripte/Yacy.php b/app/Models/parserSkripte/Yacy.php index 838a1fa78fb59248510cd14e8e4bd13fcd9be319..43bd3dc42a004ff06d91267ea76081ffd772b4c6 100644 --- a/app/Models/parserSkripte/Yacy.php +++ b/app/Models/parserSkripte/Yacy.php @@ -36,11 +36,11 @@ class Yacy extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); - } - + } } } catch (\Exception $e) { Log::error("A problem occurred parsing results from $this->name:"); @@ -51,7 +51,7 @@ class Yacy extends Searchengine public function getNext(\App\MetaGer $metager, $result) { - try{ + try { $resultCount = 0; $content = json_decode($result, true); $content = $content["channels"]; @@ -61,7 +61,7 @@ class Yacy extends Searchengine $resultCount += sizeof($items); } - if($resultCount > 0){ + if ($resultCount > 0) { $engine = clone $this->engine; $engine->{"get-parameter"}->startRecord += 10; $next = new Yacy($this->name, $engine, $metager); diff --git a/app/Models/parserSkripte/Yacyunih.php b/app/Models/parserSkripte/Yacyunih.php index 8b357b024da23aa6f48ece5b2928f4d14a5a4342..a7e2695e9ad3ba3c3276677e79430a94fc360724 100644 --- a/app/Models/parserSkripte/Yacyunih.php +++ b/app/Models/parserSkripte/Yacyunih.php @@ -43,7 +43,8 @@ class Yacyunih extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); $count++; diff --git a/app/Models/parserSkripte/Yandex.php b/app/Models/parserSkripte/Yandex.php index 9f6e68d3b40cf1426ed69bffb4f81e33e4ccc869..0cb96753422a83d54a20e07e646c4b642608089a 100644 --- a/app/Models/parserSkripte/Yandex.php +++ b/app/Models/parserSkripte/Yandex.php @@ -47,7 +47,8 @@ class Yandex extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"}, $this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } diff --git a/app/Models/parserSkripte/Zeitde.php b/app/Models/parserSkripte/Zeitde.php index 884b007d7bf82341eda6fe603b8c25e37178fc23..3dbaa90b0afb09260482e9dc43c1cf937a65fd18 100644 --- a/app/Models/parserSkripte/Zeitde.php +++ b/app/Models/parserSkripte/Zeitde.php @@ -38,10 +38,10 @@ class Zeitde extends Searchengine $link, $anzeigeLink, $descr, - $this->engine->{"display-name"},$this->engine->homepage, + $this->engine->infos->display_name, + $this->engine->infos->homepage, $this->counter ); } - } } diff --git a/helpers/entrypoint.sh b/helpers/entrypoint.sh index 0913b951a5cfec5b99c9fe450de614dc72404f31..7ceb9d2c17bb9ad62cf11fda89f88542993e5750 100755 --- a/helpers/entrypoint.sh +++ b/helpers/entrypoint.sh @@ -36,7 +36,4 @@ fi if [ ! -d "/html/storage/logs/metager" ]; then mkdir -p /html/storage/logs/metager -fi - -php artisan optimize -php artisan route:trans:cache \ No newline at end of file +fi \ No newline at end of file diff --git a/helpers/entrypointProduction.sh b/helpers/entrypointProduction.sh index 98abbfda4b98a8c019ec3b22766c4a49d5546cc4..03ad23a3f27cca383dea96e130cd32dbd5d4861d 100755 --- a/helpers/entrypointProduction.sh +++ b/helpers/entrypointProduction.sh @@ -4,6 +4,9 @@ set -e /bin/sh -c "/html/helpers/entrypoint.sh" +php artisan optimize +php artisan route:trans:cache + php artisan spam:load php artisan load:affiliate-blacklist diff --git a/public/img/icon-content-warning.svg b/public/img/icon-content-warning.svg new file mode 100644 index 0000000000000000000000000000000000000000..6fc2d7694cb8581ccd2e20be09bbf7169ba82e59 --- /dev/null +++ b/public/img/icon-content-warning.svg @@ -0,0 +1,77 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/resources/lang/de/content-warning.php b/resources/lang/de/content-warning.php new file mode 100644 index 0000000000000000000000000000000000000000..09e29965dbf01fcce2d96d183020b4d9aac6987b --- /dev/null +++ b/resources/lang/de/content-warning.php @@ -0,0 +1,8 @@ + "Achtung: Diese Webseite könnte Fehlinformationen enthalten", + 'p1' => "In der heutigen Zeit ist es wichtiger denn je geworden, Informationen auf Webseiten nicht blind zu vertrauen. Durch die Menge der im Zusammenhang mit dem russischen Überfall auf die Ukraine gestreuten Falschinformationen sahen wir uns gezwungen, diese Vorschaltseite bei einigen Ergebnissen zu zeigen. Diese betrifft viele Webseiten, die wahrscheinlich keine Falschinformationen verbreiten. Wir möchten diese Gelegenheit trotzdem nutzen, um darauf hinzuweisen, dass es ratsam ist \"Fakten\" auf Webseiten stets auf Ihre Glaubwürdigkeit und Richtigkeit hin zu überprüfen.", + 'to_website' => 'Weiter zur Webseite', + 'back_to_search' => 'Zurück zur Ergebnisliste', +]; diff --git a/resources/lang/de/search-engine.php b/resources/lang/de/search-engine.php index 375a03d9436e13a80607b74a2029c26ac702b394..abc3958f5dae3b5fe2dbebba7d998fd179b0f886 100644 --- a/resources/lang/de/search-engine.php +++ b/resources/lang/de/search-engine.php @@ -3,91 +3,16 @@ return [ 'head.1' => 'Über unsere Suchmaschinen', 'head.2' => 'MetaGer nutzt mehrere Indexe', - 'head.3' => 'Yahoo!', - 'head.4' => 'Bing', - 'head.5' => 'Scopia', - 'head.6' => 'Netluchs', - 'head.7' => 'Yandex', - 'head.8' => 'Die ZEIT', - 'head.9' => 'OneNewspage (Deutschland)', - 'head.10' => 'OneNewspage Video (Deutschland)', - 'head.11' => 'YaCy', 'text.1' => 'MetaGer ist eine Metasuchmaschine. Deshalb nutzen wir die Indexe verschiedener anderer Suchmaschinen. Für jede dieser Suchmaschinen haben wir einen kurzen Steckbrief mit den wichtigsten Eckdaten erstellt. Da wir diese Übersicht nicht ständig aktualisieren, sind alle Angaben ohne Gewähr.', - + 'text.2.1' => 'Name: ', - 'text.2.1.1' => 'Yahoo!', 'text.2.2' => 'Verwendeter Index: ', - 'text.2.2.1' => 'Microsoft Bing', 'text.2.3' => 'Entstanden: ', - 'text.2.3.1' => '2. März 1995', 'text.2.4' => 'Hauptsitz: ', - 'text.2.4.1' => 'New York City, USA', 'text.2.5' => 'Betreiber: ', - 'text.2.5.1' => 'Altaba Inc. (ehemals Yahoo Inc.)', 'text.2.6' => 'Geschätzte Seiten im Index: ', - 'text.2.6.1' => 'vermutlich 8-14 Millarden', 'text.2.7' => 'Verwendete MetaGer-Version: ', - 'text.2.7.1' => 'deutsche Suche', - - - 'text.3.1' => 'Bing', - 'text.3.2' => 'Microsoft Bing', - 'text.3.3' => '3. Juni 2009', - 'text.3.4' => 'Redmond, Washington, USA', - 'text.3.5' => 'Microsoft Inc.', - 'text.3.6' => 'vermutlich 8-14 Millarden', - 'text.3.7' => 'englische Suche, deutsche Suche (Nur für Mitglieder)', - - 'text.4.1' => 'Scopia', - 'text.4.2' => 'Circa 2016 ', - 'text.4.3' => 'Newark, New Jersey, USA', - 'text.4.4' => 'Scopia Technologies ASPEN LLC', - 'text.4.5' => 'deutsche Suche, englische Suche', - - 'text.5.1' => 'Netluchs', - 'text.5.2' => '2005', - 'text.5.3' => 'Hamburg, Deutschland', - 'text.5.4' => 'Michael Nebel (Privatperson)', - 'text.5.5' => '6 Millionen (Stand: 2005)', - 'text.5.6' => 'deutsche Suche', - - 'text.6.1' => 'Yandex', - 'text.6.2' => '1997', - 'text.6.3' => 'Mäntsälä, Finnland (Europa)', - 'text.6.4' => 'Yandex OY (Aktiengesellschaft)', - 'text.6.5' => 'deutsche Suche', - - - 'text.7.1' => 'Die ZEIT', - 'text.7.2' => '6. September 2009', - 'text.7.3' => 'Hamburg, Deutschland', - 'text.7.4' => 'Zeit Online GmbH', - 'text.7.5' => 'deutsche Suche', - - - 'text.8.1' => 'OneNewspage (Deutschland)', - 'text.8.2' => '2008', - 'text.8.3' => 'Wales, England', - 'text.8.4' => 'One News Page Ltd.', - 'text.8.5' => 'deutsche Suche (Deutschland), englische Suche', - - - 'text.9.1' => 'OneNewspage Video (Deutschland)', - 'text.9.2' => '2008', - 'text.9.3' => 'Wales, England', - 'text.9.4' => 'One News Page Ltd.', - 'text.9.5' => 'deutsche Suche (Deutschland), englische Suche', - - - 'text.10.1' => 'YaCy', - 'text.10.2' => '2004', - 'text.10.3' => 'Frankfurt am Main, Deutschland', - 'text.10.4' => 'Dipl. Inf. Michael Christen', - 'text.10.5' => '1,7 Milliarden', - 'text.10.6' => 'deutsche Suche', - - ]; diff --git a/resources/lang/en/content-warning.php b/resources/lang/en/content-warning.php new file mode 100644 index 0000000000000000000000000000000000000000..4839af3f7f0634b74a4b64302024b7fa8ecf57d3 --- /dev/null +++ b/resources/lang/en/content-warning.php @@ -0,0 +1,8 @@ + "Attention: This website may contain misinformation", + 'p1' => "In today's world, it has become more important than ever not to blindly trust information on websites. Due to the amount of false information spread in connection with the Russian invasion of Ukraine, we were forced to publish this Show caption page for some results. This affects many websites that are unlikely to spread misinformation. Nevertheless, we would like to take this opportunity to point out that it is always advisable to check \"facts\" on websites for their credibility and correctness.", + 'to_website' => 'Continue to the website', + 'back_to_search' => 'Back to the results', +]; diff --git a/resources/lang/en/search-engine.php b/resources/lang/en/search-engine.php index 3abd61a7c916207fae4894c231955707209402ed..7fc7fc062d4fb6b93ec84d881a1363981663795b 100644 --- a/resources/lang/en/search-engine.php +++ b/resources/lang/en/search-engine.php @@ -13,7 +13,7 @@ return [ 'head.10' => 'OneNewspage (Video)', 'text.1' => 'MetaGer is a metasearch engine. Therefore, we use the indexes of various other search engines. For each of these search engines, we have created a short profile with the key information. Since we do not constantly update this overview, all information is without guarantee.', - + 'text.2.1' => 'Name: ', 'text.2.1.1' => 'Yahoo!', 'text.2.2' => 'Used index: ', @@ -36,25 +36,25 @@ return [ 'text.3.5' => 'Microsoft Inc.', 'text.3.6' => 'around 8-14 billion', 'text.3.7' => 'English search, German search (members only)', - + 'text.4.1' => 'Scopia', 'text.4.2' => 'Around 2016 ', 'text.4.3' => 'Newark, New Jersey, USA', 'text.4.4' => 'Scopia Technologies ASPEN LLC', 'text.4.5' => 'German search, English search', - + 'text.5.1' => 'Netluchs', 'text.5.2' => '2005', 'text.5.3' => 'Hamburg, Germany', 'text.5.4' => 'Michael Nebel (private person)', 'text.5.5' => '6 Million (updated: 2005)', 'text.5.6' => 'German search', - + 'text.6.1' => 'Yandex', 'text.6.2' => '1997', 'text.6.3' => 'Mäntsälä, Finland (Europe)', 'text.6.4' => 'Yandex OY (Corporation)', - 'text.6.5' => 'German search', + 'text.6.5' => 'German search', 'text.7.1' => 'Die ZEIT', @@ -62,21 +62,21 @@ return [ 'text.7.3' => 'Hamburg, Germany', 'text.7.4' => 'Zeit Online GmbH', 'text.7.5' => 'German search', - + 'text.8.1' => 'OneNewspage (Deutschland)', 'text.8.2' => '2008', 'text.8.3' => 'Wales, England', 'text.8.4' => 'One News Page Ltd.', 'text.8.5' => 'German search (Deutschland), English search', - + 'text.9.1' => 'OneNewspage Video (Deutschland)', 'text.9.2' => '2008', 'text.9.3' => 'Wales, England', 'text.9.4' => 'One News Page Ltd.', 'text.9.5' => 'German search (Deutschland), English search', - + 'text.10.1' => 'YaCy', 'text.10.2' => '2004', @@ -85,5 +85,10 @@ return [ 'text.10.5' => '1,7 billion', 'text.10.6' => 'german search', - + 'text.12.1' => 'Infotiger', + 'text.12.2' => '1998', + 'text.12.3' => 'Munich, Germany', + 'text.12.4' => 'Infotiger UG (haftungsbeschränkt)', + 'text.12.5' => '300 million', + 'text.12.6' => 'german Suche, english Suche', ]; diff --git a/resources/lang/es/content-warning.php b/resources/lang/es/content-warning.php new file mode 100644 index 0000000000000000000000000000000000000000..a45cf2362b113f467b2cafae8ddab8c2301be33b --- /dev/null +++ b/resources/lang/es/content-warning.php @@ -0,0 +1,8 @@ + "Atención: Este sitio web puede contener información errónea", + 'p1' => "En el mundo actual, se ha vuelto más importante que nunca no confiar ciegamente en la información de los sitios web. Debido a la cantidad de información falsa difundida en relación con la invasión rusa de Ucrania, nos vimos obligados a publique esta página Mostrar subtítulos para obtener algunos resultados. Esto afecta a muchos sitios web que es poco probable que difundan información errónea. Sin embargo, nos gustaría aprovechar esta oportunidad para señalar que siempre es recomendable comprobar \"hechos\" en los sitios web para comprobar su credibilidad y corrección.", + 'to_website' => 'Continuar al sitio web', + 'back_to_search' => 'Volver a los resultados', +]; diff --git a/resources/less/metager/pages/content-warning.less b/resources/less/metager/pages/content-warning.less new file mode 100644 index 0000000000000000000000000000000000000000..7a73c87b152a4a83593a0463474f7f33d812d2b6 --- /dev/null +++ b/resources/less/metager/pages/content-warning.less @@ -0,0 +1,32 @@ +.actions { + display: flex; + flex-wrap: wrap; + gap: 0.5rem 1rem; + margin-top: 2.5rem; + justify-content: center; + + @media(min-width: 400px) { + justify-content: flex-start; + } +} + + + +.actions>a.btn:nth-child(1) { + padding-left: 40px; + position: relative; +} + +.actions>a.btn:nth-child(1)::before { + content: ""; + position: absolute; + background: url('/img/angle-double-right.svg'); + background-repeat: repeat; + background-size: auto; + inset-inline-start: 10px; + width: 40px; + height: 20px; + background-size: contain; + background-repeat: no-repeat; + filter: invert(42%) sepia(93%) saturate(1352%) hue-rotate(87deg) brightness(119%) contrast(119%); +} \ No newline at end of file diff --git a/resources/less/metager/pages/resultpage/result.less b/resources/less/metager/pages/resultpage/result.less index c68a83545058d9102840d1c1d932b66a04ae5d10..607f3465d13c9443049cb9b32808a39d4f1a086c 100644 --- a/resources/less/metager/pages/resultpage/result.less +++ b/resources/less/metager/pages/resultpage/result.less @@ -4,42 +4,53 @@ @result-font-small: 12px; @result-description-color: @text-color; @result-image-border-color: @color-almost-white; + .result { // Remove the margin from the first result because it already has margin from the grid ruleset &:nth-child(1) { margin-top: 0; } + margin: @padding-small-default 0px; - @media(max-width: @screen-mobile){ + + @media(max-width: @screen-mobile) { .card; margin: @padding-small-default 0px; } - + padding: 0px 8px; width: 100%; + .result-header { max-width: 100%; overflow: hidden; + .result-headline { width: 100%; display: flex; justify-content: space-between; align-items: center; + .result-title { font-size: 22px; margin: 0px; + &>* { font-size: .8em; } + .overflow-ellipsis; + .result-price { padding: 0px 10px; color: white; background-color: #666699; border-radius: 3px; } + a { + &, &:active, &:hover, @@ -50,12 +61,14 @@ } } } + .result-hoster { cursor: pointer; font-size: .9em; margin-left: 20px; color: #808080; white-space: nowrap; + >ul { list-style-type: none; padding-left: 20px; @@ -63,30 +76,72 @@ width: fit-content; padding: 8px; display: none; + a { color: @link-color; + &:hover { color: @a-hover-color; } + margin-left: 4px; } - } - &:focus > ul { + } + + &:focus>ul { display: block; - } + } } } + .result-subheadline { width: 100%; display: flex; align-items: center; line-height: 1.3; + gap: 0 8px; + + figure.content-warning { + display: none; + + &.active { + display: block; + position: relative; + width: 20px; + height: 20px; + background: url('/img/icon-content-warning.svg'); + background-repeat: repeat; + background-size: auto; + background-size: contain; + background-repeat: no-repeat; + } + + &.active::before { + display: none; + width: max-content; + content: attr(data-title); + position: relative; + background-color: @background-color; + border: 1px solid @border-color; + white-space: nowrap; + padding: 8px; + top: -2.2rem; + left: 1rem; + } + + &.active:hover::before, + &.active:focus::before { + display: block; + } + } + .result-link { .overflow-ellipsis; display: block; font-size: .95em; width: fit-content; max-width: 100%; + &, &:active, &:hover, @@ -95,9 +150,11 @@ font-size: 1em; text-decoration: none; } + &:visited { color: #8091A2; } + span.advertisement-mark { border-color: #0d9c0d; color: #0d9c0d; @@ -111,6 +168,7 @@ top: -2px; } } + a.partnershop-info { display: block; background-color: white; @@ -125,34 +183,43 @@ } } } + .result-body { margin-top: 1px; - max-width:100%; + max-width: 100%; margin-bottom: 8px; + &.with-image { display: grid; grid-template-columns: minmax(max-content, 160px) auto; grid-column-gap: 8px; grid-row-gap: 8px; - @media(max-width: 380px){ + + @media(max-width: 380px) { grid-template-columns: 1fr; grid-template-rows: auto auto; } + .result-image { align-self: center; justify-self: center; } + .result-description { align-self: center; } } + text-align: justify; + .result-image { - + max-width: 160px; - > a{ + + >a { display: block; - > img { + + >img { display: block; max-width: 160px; max-height: 120px; @@ -161,21 +228,26 @@ } } } + .result-description { align-self: center; margin-bottom: 3px; color: @result-description-color; - font-size: .95em;; + font-size: .95em; + ; line-height: 1.3; clear: both; overflow: hidden; + .date { font-weight: bold; } + p { margin: 0; margin-bottom: 4px; } + img { margin: 5px; margin-left: 0px; @@ -188,16 +260,20 @@ } } } + .result-footer { margin-top: 2px; max-width: 100%; display: flex; flex-wrap: wrap; + &>* { margin-right: 20px; } + .result-open, .result-open-newtab { + &, &:active, &:hover, @@ -210,6 +286,7 @@ } .result-open-proxy { + &, &:active, &:hover, @@ -219,33 +296,40 @@ font-size: .7em; text-decoration: none; } + white-space: nowrap; + img { margin-bottom: 0px; margin-right: 2px; } } - .open-result-options, .close-result-options { + + .open-result-options, + .close-result-options { font-weight: normal; font-size: .7em; flex-grow: 1; text-align: right; margin-right: 0; } + .close-result-options { display: none; } } /* CSS Rules for the result options */ - .result-toggle{ - &:checked + .result-footer > .open-result-options { + .result-toggle { + &:checked+.result-footer>.open-result-options { display: none; } - &:checked + .result-footer > .close-result-options { + + &:checked+.result-footer>.close-result-options { display: initial; } - &:checked + .result-footer + .result-options > .options { + + &:checked+.result-footer+.result-options>.options { max-height: 150px; overflow: initial; opacity: 1; @@ -256,7 +340,9 @@ .result-footer * { font-size: .7em; } + &.ad .ad-label { + &, & a, & a:active, @@ -267,13 +353,16 @@ color: #808080; } } + &>.remover { cursor: pointer; text-align: right; color: #777; } + &>.result-options { max-width: 100%; + &>.options { border-top: 1px solid @border-color; width: 100%; @@ -285,36 +374,43 @@ -webkit-transition: all 1s; opacity: 0; } + ul { display: flex; flex-wrap: wrap; margin-bottom: 0; + li { font-size: .85em; margin: 8px 16px 8px 0; } - @media(max-width: @screen-mobile){ - li:nth-child(1){ + + @media(max-width: @screen-mobile) { + li:nth-child(1) { display: none; } } + li>a { color: @link-color; } } - + } } + #result-img-filter { filter: invert(1) brightness(0.4); - height:15px; + height: 15px; margin-right: 4px; } + #result-img-settings { filter: invert(1) brightness(0.4); - height:16px; + height: 16px; margin-right: 4px; } + .result-icon-floppy { filter: invert(48%) sepia(60%) saturate(5000%) hue-rotate(188deg); } \ No newline at end of file diff --git a/resources/less/metager/parts/scaffolding.less b/resources/less/metager/parts/scaffolding.less index 1d926a60700ab7423e3039dc2b4d5007a4f51522..e80bdb84c3d9231d7e3813731cd6d52450c58b73 100644 --- a/resources/less/metager/parts/scaffolding.less +++ b/resources/less/metager/parts/scaffolding.less @@ -1,39 +1,38 @@ * { - .box-sizing(border-box); - } - *:before, - *:after { - .box-sizing(border-box); - } + .box-sizing(border-box); +} + +*:before, +*:after { + .box-sizing(border-box); +} -body{ - font-family:"Helvetica Neue", Helvetica, Arial, sans-serif ; - font-size: 1em; - line-height:1.428571429 ; - color:@text-color; - background-color:@background-color; +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 1.1em; + line-height: 1.5; + color: @text-color; + background-color: @background-color; } figure { - margin: 0; + margin: 0; } img { - vertical-align: middle; - } + vertical-align: middle; +} + - hr { margin-top: 20px; - margin-bottom:20px; + margin-bottom: 20px; border: 0; border-top: 1px solid #eee; } a { text-decoration: none; -} - - +} \ No newline at end of file diff --git a/resources/less/metager/parts/type.less b/resources/less/metager/parts/type.less index 42511defc2b9818853f6173fa6945fdc68decd0b..5ca4e6c627e2f34087b5bacea97dd62cef014b4a 100644 --- a/resources/less/metager/parts/type.less +++ b/resources/less/metager/parts/type.less @@ -41,7 +41,7 @@ h6 { h1 { font-size: 1.8rem; border-bottom: 1px solid @border-color; - margin-bottom: 8px; + margin-bottom: 1.2rem; padding-bottom: 4px; } diff --git a/resources/views/content-warning.blade.php b/resources/views/content-warning.blade.php new file mode 100644 index 0000000000000000000000000000000000000000..1ed59ef8cf929702a998c2876f4a5c7566f0fffc --- /dev/null +++ b/resources/views/content-warning.blade.php @@ -0,0 +1,14 @@ +@extends('layouts.subPages') + +@section('title', $title ) + +@section('content') +
+

@lang('content-warning.title')

+

@lang('content-warning.p1', ["urlwiki" => "https://de.wikipedia.org/wiki/Russischer_%C3%9Cberfall_auf_die_Ukraine_2022", "url" => route('faktencheck')])

+
+ @lang('content-warning.to_website') + +
+
+@endsection \ No newline at end of file diff --git a/resources/views/layouts/result.blade.php b/resources/views/layouts/result.blade.php index f46b9d312f5177948ea9f12db849eca680e9436f..9bf23fcff1127765c2e5624a9cbee1dc4d9a79b6 100644 --- a/resources/views/layouts/result.blade.php +++ b/resources/views/layouts/result.blade.php @@ -24,7 +24,8 @@ @endif
- +
+
{{ $result->anzeigeLink }} @if( isset($result->partnershop) && $result->partnershop === TRUE) diff --git a/resources/views/parts/foki.blade.php b/resources/views/parts/foki.blade.php index 3905c52c9f4c503f809a5eda87bfb9027922ac01..40e9f28258e79ad72d54c0b2fbafde1818d5bb6c 100644 --- a/resources/views/parts/foki.blade.php +++ b/resources/views/parts/foki.blade.php @@ -1,7 +1,7 @@ @foreach($metager->getSumaFile()->foki as $name => $fokus) -
getFokus() === $name)class="active"@endif> - isFramed())target="_top" @else target="_self"@endif tabindex="0">@lang($fokus->{"display-name"}) -
+
getFokus() === $name)class="active"@endif> + isFramed())target="_top" @else target="_self"@endif tabindex="0">@lang($fokus->{"display-name"}) +
@endforeach @if (LaravelLocalization::getCurrentLocale() == "de")
@@ -9,4 +9,4 @@ Maps
-@endif +@endif \ No newline at end of file diff --git a/resources/views/search-engine.blade.php b/resources/views/search-engine.blade.php index 78d36438bdaaf4037020f1da329607a0425b0c02..87375a6dddff6f7c54ad5512a551c29b500e84c6 100644 --- a/resources/views/search-engine.blade.php +++ b/resources/views/search-engine.blade.php @@ -11,89 +11,31 @@

{{ trans('search-engine.head.2') }}

{!! trans('search-engine.text.1',["transparenz" => LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "transparency")]) !!}

-
-
-

{{ trans('search-engine.head.3') }}

-

{{ trans('search-engine.text.2.1') }}{{ trans('search-engine.text.2.1.1') }}

-

{{ trans('search-engine.text.2.2') }}{{ trans('search-engine.text.2.2.1') }}

-

{{ trans('search-engine.text.2.3') }}{{ trans('search-engine.text.2.3.1') }}

-

{{ trans('search-engine.text.2.4') }}{{ trans('search-engine.text.2.4.1') }}

-

{{ trans('search-engine.text.2.5') }}{{ trans('search-engine.text.2.5.1') }}

-

{{ trans('search-engine.text.2.6') }}{{ trans('search-engine.text.2.6.1') }}

-

{{ trans('search-engine.text.2.7') }}{{ trans('search-engine.text.2.7.1') }}

- - -
-
-

{{ trans('search-engine.head.4') }}

-

{{ trans('search-engine.text.2.1') }}{{ trans('search-engine.text.3.1') }}

-

{{ trans('search-engine.text.2.2') }}{{ trans('search-engine.text.3.2') }}

-

{{ trans('search-engine.text.2.3') }}{{ trans('search-engine.text.3.3') }}

-

{{ trans('search-engine.text.2.4') }}{{ trans('search-engine.text.3.4') }}

-

{{ trans('search-engine.text.2.5') }}{{ trans('search-engine.text.3.5') }}

-

{{ trans('search-engine.text.2.6') }}{{ trans('search-engine.text.3.6') }}

-

{{ trans('search-engine.text.2.7') }}{{ trans('search-engine.text.3.7') }}

- -
-
-

{{ trans('search-engine.head.5') }}

-

{{ trans('search-engine.text.2.1') }}{{ trans('search-engine.text.4.1') }}

-

{{ trans('search-engine.text.2.3') }}{{ trans('search-engine.text.4.2') }}

-

{{ trans('search-engine.text.2.4') }}{{ trans('search-engine.text.4.3') }}

-

{{ trans('search-engine.text.2.5') }}{{ trans('search-engine.text.4.4') }}

-

{{ trans('search-engine.text.2.7') }}{{ trans('search-engine.text.4.5') }}

-
-
-

{{ trans('search-engine.head.6') }}

-

{{ trans('search-engine.text.2.1') }}{{ trans('search-engine.text.5.1')}}

-

{{ trans('search-engine.text.2.3') }}{{ trans('search-engine.text.5.2') }}

-

{{ trans('search-engine.text.2.4') }}{{ trans('search-engine.text.5.3') }}

-

{{ trans('search-engine.text.2.5') }}{{ trans('search-engine.text.5.4') }}

-

{{ trans('search-engine.text.2.6') }}{{ trans('search-engine.text.5.5') }}

-

{{ trans('search-engine.text.2.7') }}{{ trans('search-engine.text.5.6') }}

- -
-
-

{{ trans('search-engine.head.7') }}

-

{{ trans('search-engine.text.2.1')}}{{ trans('search-engine.text.6.1')}}

-

{{ trans('search-engine.text.2.3') }}{{ trans('search-engine.text.6.2') }}

-

{{ trans('search-engine.text.2.4') }}{{ trans('search-engine.text.6.3') }}

-

{{ trans('search-engine.text.2.5') }}{{ trans('search-engine.text.6.4') }}

-

{{ trans('search-engine.text.2.7') }}{{ trans('search-engine.text.6.5') }}

-
-
-

{{ trans('search-engine.head.8') }}

-

{{ trans('search-engine.text.2.1')}}{{ trans('search-engine.text.7.1')}}

-

{{ trans('search-engine.text.2.3') }}{{ trans('search-engine.text.7.2') }}

-

{{ trans('search-engine.text.2.4') }}{{ trans('search-engine.text.7.3') }}

-

{{ trans('search-engine.text.2.5') }}{{ trans('search-engine.text.7.4') }}

-

{{ trans('search-engine.text.2.7') }}{{ trans('search-engine.text.7.5') }}

-
-
-

{{ trans('search-engine.head.9') }}

-

{{ trans('search-engine.text.2.1')}}{{ trans('search-engine.text.8.1')}}

-

{{ trans('search-engine.text.2.3') }}{{ trans('search-engine.text.8.2') }}

-

{{ trans('search-engine.text.2.4') }}{{ trans('search-engine.text.8.3') }}

-

{{ trans('search-engine.text.2.5') }}{{ trans('search-engine.text.8.4') }}

-

{{ trans('search-engine.text.2.7') }}{{ trans('search-engine.text.8.5') }}

-
-
-

{{ trans('search-engine.head.10') }}

-

{{ trans('search-engine.text.2.1')}}{{ trans('search-engine.text.9.1')}}

-

{{ trans('search-engine.text.2.3') }}{{ trans('search-engine.text.9.2') }}

-

{{ trans('search-engine.text.2.4') }}{{ trans('search-engine.text.9.3') }}

-

{{ trans('search-engine.text.2.5') }}{{ trans('search-engine.text.9.4') }}

-

{{ trans('search-engine.text.2.7') }}{{ trans('search-engine.text.9.5') }}

-
-
-

{{ trans('search-engine.head.11') }}

-

{{ trans('search-engine.text.2.1')}}{{ trans('search-engine.text.10.1')}}

-

{{ trans('search-engine.text.2.3') }}{{ trans('search-engine.text.10.2') }}

-

{{ trans('search-engine.text.2.4') }}{{ trans('search-engine.text.10.3') }}

-

{{ trans('search-engine.text.2.5') }}{{ trans('search-engine.text.10.4') }}

-

{{ trans('search-engine.text.2.6') }}{{ trans('search-engine.text.10.5') }}

-

{{ trans('search-engine.text.2.7') }}{{ trans('search-engine.text.10.6') }}

-
-
+ @foreach($suma_infos as $fokus_name => $suma_list) +

{{ __('index.foki.' . $fokus_name) }}

+
+ + @foreach($suma_list as $suma_name => $suma_infos) +
+

{{ $suma_infos->display_name }}

+ @if($suma_infos->index_name !== null) +

{{ trans('search-engine.text.2.2') }}{{ $suma_infos->index_name }}

+ @endif + @if($suma_infos->founded !== null) +

{{ trans('search-engine.text.2.3') }}{{ $suma_infos->founded }}

+ @endif + @if($suma_infos->headquarter !== null) +

{{ trans('search-engine.text.2.4') }}{{ $suma_infos->headquarter }}

+ @endif + @if($suma_infos->operator !== null) +

{{ trans('search-engine.text.2.5') }}{{ $suma_infos->operator }}

+ @endif + @if($suma_infos->index_size !== null) +

{{ trans('search-engine.text.2.6') }}{{ $suma_infos->index_size }}

+ @endif +
+ @endforeach +
+ @endforeach @endsection \ No newline at end of file diff --git a/resources/views/settings/allSettings.blade.php b/resources/views/settings/allSettings.blade.php index e1b126ba6cb0fdfef62383d5bdef994380597bd9..1fae45ccc7e2c2615fc23120d1022d7af6b0430e 100644 --- a/resources/views/settings/allSettings.blade.php +++ b/resources/views/settings/allSettings.blade.php @@ -23,7 +23,7 @@ {{ $key . " = " . $value }} @if(strpos($key, "_engine_") !== FALSE) - @lang('settings.engineDisabled', ["engine" => $sumaFile->sumas->{substr($key, strrpos($key, "_")+1)}->{"display-name"}, "focus" => trans('index.foki.' . substr($key, 0, strpos($key, "_")))]) + @lang('settings.engineDisabled', ["engine" => $sumaFile->sumas->{substr($key, strrpos($key, "_")+1)}->infos->display_name, "focus" => trans('index.foki.' . substr($key, 0, strpos($key, "_")))]) @elseif(strpos($key, "_setting_") !== FALSE) @foreach($sumaFile->filter->{"parameter-filter"} as $filterName => $filter) @if($filter->{"get-parameter"} === substr($key, strrpos($key, "_")+1)) diff --git a/routes/web.php b/routes/web.php index aa5a62adcb044295dc4f98bea29616d57e0f59dd..b747a08752b2ff08f509cf0b2764a3ba89ec5e8d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,6 @@ with('navbarFocus', 'dienste'); }); -Route::group(['prefix' => 'spende'], function(){ +Route::group(['prefix' => 'spende'], function () { Route::get('/', function () { return view('spende.spende') ->with('title', trans('titles.spende')) @@ -134,11 +135,7 @@ Route::get('transparency', function () { ->with('navbarFocus', 'info'); }); -Route::get('search-engine', function () { - return view('search-engine') - ->with('title', trans('titles.search-engine')) - ->with('navbarFocus', 'info'); -}); +Route::get('search-engine', [SearchEngineList::class, 'index']); Route::get('hilfe', function () { return view('help/help') ->with('title', trans('titles.help')) @@ -149,7 +146,7 @@ Route::get('hilfe/faktencheck', function () { return view('help/faktencheck') ->with('title', trans('titles.faktencheck')) ->with('navbarFocus', 'hilfe'); -}); +})->name('faktencheck'); Route::get('hilfe/hauptseiten', function () { return view('help/help-mainpages') @@ -274,6 +271,14 @@ Route::get('settings', function () { }); Route::match(['get', 'post'], 'meta/meta.ger3', 'MetaGerSearch@search')->middleware('removekey', 'browserverification', 'humanverification', 'useragentmaster')->name("resultpage"); +Route::get('meta/meta.ger3/content-warning', function (Request $request) { + if (!$request->has('url') || !$request->has('result-page') || !$request->has('pw')) { + abort(404); + } + return view('content-warning', ["title" => __('content-warning.title'), 'css' => [ + mix('/css/content-warning.css') + ]]); +})->name('content-warning'); Route::get('meta/loadMore', 'MetaGerSearch@loadMore'); Route::post('img/cat.png', 'HumanVerification@remove'); diff --git a/storage/app/public/content_warning_domains.txt b/storage/app/public/content_warning_domains.txt new file mode 100644 index 0000000000000000000000000000000000000000..d74bb8eab71e1bf307c9c9a69d9473a3e6b97dae --- /dev/null +++ b/storage/app/public/content_warning_domains.txt @@ -0,0 +1,207 @@ +// This is a public list of domains we do see the need of +// giving a content warning and thus reminding of cross checking +// the truth/validity of informations shown on given websites. +// +// Lines starting with "//" are considered comments and are being ignored +// Only domains are allowed in this file +// domains can either be a full domain name (i.e. example.com) +// or a domain including all subdomains (i.e. *.example.com) +// +// One domain per line +*.ru +*.2ch.hk +*.2ch.pm +*.advmaker.net +*.afgan-memorial.org +*.allofmp3.com +*.antijob.net +*.arabic.sputniknews.com +*.armeniasputnik.am +*.arzamas.academy +*.band.link +*.base.biathlonrus.com +*.baza.io +*.bel.sputnik.by +*.bookfi.net +*.br.sputniknews.com +*.bsrussia.com +*.career.habr.com +*.charter97.org +*.coub.com +*.credo.press +*.crimeapress.info +*.cyberleninka.org +*.cyclowiki.org +*.cz.sputniknews.com +*.dari.sputniknews.com +*.de.sputniknews.com +*.debri-dv.com +*.dissernet.org +*.fishki.net +*.flibusta.is +*.flibusta.is +*.flibusta.net +*.flisland.net +*.fr.sputniknews.com +*.free-torrents.org +*.futubra.com +*.gis-lab.info +*.gorodbryansk.info +*.grozrab.org +*.habr.com +*.iVrach.com +*.idelreal.org +*.ir.sputniknews.com +*.istories.media +*.istories.media +*.it.sputniknews.com +*.ixbt.games +*.jp.sputniknews.com +*.kanoner.com +*.kermlinrussia.com +*.khabarovsk.md +*.kosht.com +*.kr-eho.info +*.kr.sputniknews.com +*.krd.sputniknews.com +*.kroogi.com +*.letopisi.org +*.lib.rus.ec +*.limonka.nbp-info.com +*.lingualeo.com +*.linuxforum.tech +*.little-histories.org +*.looks.fm +*.lurkmo.re +*.lurkmore.co +*.lurkmore.net +*.lurkmore.to +*.magazeta.com +*.maxpark.com +*.mediazona.by +*.mediazona.ca +*.meduza.io +*.meduza.io +*.megabonus.com +*.mgazeta.com +*.mir24.tv +*.mobile-review.com +*.mundo.sputniknews.com +*.music.yandex.com +*.nadezhda.me +*.newsland.com +*.newsmuz.com +*.nmas1.org +*.onliner.by +*.oszone.net +*.ottenki-serogo.livejournal.com +*.oz.sputniknews-uz.com +*.pashto.sputniknews.com +*.piter.tatar +*.pl.sputniknews.com +*.qiwi.com +*.rbth.com +*.riotpixels.com +*.ro.sputnik.md +*.rockmusiciansmap.com +*.rs.sputniknews.com +*.ru.armeniasputnik.am +*.ru.kinorium.com +*.ru.sputnik-news.ee +*.ru.sputnik-tj.com +*.ru.sputnik.az +*.ru.sputnik.kg +*.ru.sputnik.md +*.ru.sputniknews-uz.com +*.ru.sputniknews.kz +*.ru.sputniknewslv.com +*.rusleaks.com +*.russia-insider.com +*.rutracker.org +*.sevastopol.press +*.sevastopol.su +*.sites.google.com +*.slando.com +*.spacesnet.com +*.splayn.com +*.sputnik-abkhazia.info +*.sputnik-georgia.com +*.sputnik-news.ee +*.sputnik-ossetia.com +*.sputnik-tj.com +*.sputnik.az +*.sputnik.by +*.sputnik.kg +*.sputnik.md +*.sputniknews-uz.com +*.sputniknews.cn +*.sputniknews.com +*.sputniknews.kz +*.sputniknewslv.com +*.thebell.io +*.toz.su +*.tr.sputniknews.com +*.transphoto.org +*.ua.kinorium.com +*.udmurt.info +*.unixforum.org +*.usareally.com +*.vk.com +*.vk.com +*.vn.sputniknews.com +*.100druzei.info +*.adzuna.co.uk +*.adzuna.fr +*.anywayanyday.com +*.aru.tv +*.bash.im +*.cbonds.info +*.championat.com +*.delfi.ee +*.doroga.tv +*.englishrussia.com +*.flot.com +*.game-insight.com +*.gubernia.com +*.hrono.info +*.ingushetia.org +*.irekle.org +*.ixbt.com +*.kommersant.com +*.krasrab.com +*.livejournal.com +*.mdz-moskau.eu +*.mosnews.com +*.newsru.com +*.openstat.com +*.parovoz.com +*.prisma.fi +*.proekt.media +*.proekt.media +*.putinavotstavku.org +*.rbcinfosystems.com +*.rt.com +*.rusathletics.com +*.russiajournal.com +*.subgame.pro +*.telegraf.by +*.themoscowtimes.com +*.themoscowtimes.com +*.vladivostok.com +*.vokrug.tv +*.vostlit.info +*.vtimes.io +*.севернаяправда.рф +*.xn--80aadwhm0alcx9c1e.xn--p1ai +*.yandex.com +*.yaplakal.com +*.zagraevsky.com +*.zamana.info +*.zelenyikot.com +*.zen.yandex.com +*.znak.com +*.zona.media +*.история.рф +*.листок.рф +*.мэйл.рф +*.энциклопедия-урала.рф \ No newline at end of file diff --git a/webpack.mix.js b/webpack.mix.js index 086a9585e7545805935ccee5a1821f75a7723dba..045ebae6cdf1ab7f67b342f3619aa3754fb22385 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -32,6 +32,7 @@ mix .less("resources/less/metager/pages/asso/style.less", "public/css/asso/style.css") .less("resources/less/metager/pages/spende/danke.less", "public/css/spende/danke.css") .less("resources/less/metager/pages/keychange/index.less", "public/css/keychange/index.css") + .less('resources/less/metager/pages/content-warning.less', 'public/css/content-warning.css') // js .babel( [