diff --git a/app/DynamicEngineParameters.php b/app/DynamicEngineParameters.php new file mode 100644 index 0000000000000000000000000000000000000000..558d1734be76f8851231920b6eadb3507e250eaf --- /dev/null +++ b/app/DynamicEngineParameters.php @@ -0,0 +1,26 @@ +<?php + +namespace App; +use Carbon; + +class DynamicEngineParameters { + + // Returns a string notating the Date Range of the last year + // The value is used as Parameter for the Bing search engine + // freshness Parameter + public static function FreshnessYearBing() { + $now = \Carbon::now()->format("Y-m-d"); + $lastYear = \Carbon::now()->subYear()->format("Y-m-d"); + return $lastYear . ".." . $now; + } + + public static function FreshnessCustomBing(){ + // Bings custom date filter uses YYYY-mm-dd..YYYY-mm-dd + // From and two dates are supplied by parameters ff and ft + // They already have been checked if they match above pattern in parseFormData function + $from = \Request::input("ff"); + $to = \Request::input("ft"); + + return $from . ".." . $to; + } +} \ No newline at end of file diff --git a/app/MetaGer.php b/app/MetaGer.php index ccfcd3520884c2dff6fb34dc14f9f2bbd77ac5a3..9954a0bffede405b3baa76bba86391c7fff527e4 100644 --- a/app/MetaGer.php +++ b/app/MetaGer.php @@ -717,19 +717,23 @@ class MetaGer $availableFilter = []; foreach ($parameterFilter as $filterName => $filter) { - $values = $filter->values; + $values = clone $filter->values; # Check if any of the enabled search engines provide this filter foreach ($this->enabledSearchengines as $engineName => $engine) { if (!empty($filter->sumas->$engineName)) { if (empty($availableFilter[$filterName])) { $availableFilter[$filterName] = $filter; - unset($availableFilter[$filterName]->values); + foreach($availableFilter[$filterName]->values as $key => $value){ + if($key !== "nofilter"){ + unset($availableFilter[$filterName]->values->{$key}); + } + } } if (empty($availableFilter[$filterName]->values)) { - $availableFilter[$filterName]->values = (object) ["" => $values->{""}]; + $availableFilter[$filterName]->values = new \stdClass(); } foreach ($filter->sumas->{$engineName}->values as $key => $value) { - $availableFilter[$filterName]->values->$key = $values->$key; + $availableFilter[$filterName]->values->{$key} = $values->$key; } } } @@ -745,13 +749,17 @@ class MetaGer } if (empty($availableFilter[$filterName])) { $availableFilter[$filterName] = $filter; - unset($availableFilter[$filterName]->values); + foreach($availableFilter[$filterName]->values as $key => $value){ + if($key !== "nofilter"){ + unset($availableFilter[$filterName]->values->{$key}); + } + } } if (empty($availableFilter[$filterName]->values)) { - $availableFilter[$filterName]->values = (object) ["" => $values->{""}]; + $availableFilter[$filterName]->values = new \stdClass(); } foreach ($filter->sumas->{$suma}->values as $key => $value) { - $availableFilter[$filterName]->values->$key = $values->$key; + $availableFilter[$filterName]->values->{$key} = $values->$key; } } } @@ -1011,6 +1019,53 @@ class MetaGer // Remove Inputs that are not used $this->request = $request->replace($request->except(['verification_id', 'uid', 'verification_count'])); + // Disable freshness filter if custom freshness filter isset + if($this->request->filled("ff") && $this->request->filled("f")){ + $this->request = $this->request->replace($this->request->except(["f"])); + } + // Remove custom time filter if either of the dates isn't set or is not a date + if($this->request->input("fc") === "on"){ + if(!$this->request->filled("ff") || !$this->request->filled("ft")){ + $this->request = $this->request->replace($this->request->except(["fc", "ff", "ft"])); + }else{ + $ff = $this->request->input("ff"); + $ft = $this->request->input("ft"); + if(!preg_match("/^\d{4}-\d{2}-\d{2}$/", $ff) || !preg_match("/^\d{4}-\d{2}-\d{2}$/", $ft)){ + $this->request = $this->request->replace($this->request->except(["fc", "ff", "ft"])); + }else{ + // Now Check if there is something wrong with the dates + $from = $this->request->input("ff"); + $to = $this->request->input("ft"); + $changed = false; + $from = Carbon::createFromFormat("Y-m-d H:i:s", $from . " 00:00:00"); + $to = Carbon::createFromFormat("Y-m-d H:i:s", $to . " 00:00:00"); + + if($from > Carbon::now()){ + $from = Carbon::now(); + $changed = true; + } + if($to > Carbon::now()){ + $to = Carbon::now(); + $changed = true; + } + if($from > $to){ + $tmp = $to; + $to = $from; + $from = $tmp; + $changed = true; + } + if($changed){ + $oldParameters = $this->request->all(); + $oldParameters["ff"] = $from->format("Y-m-d"); + $oldParameters["ft"] = $to->format("Y-m-d"); + $this->request = $this->request->replace($oldParameters); + } + } + } + }else if($this->request->filled("ff") || $this->request->filled("ft")){ + $this->request = $this->request->replace($this->request->except(["fc", "ff", "ft"])); + } + $this->out = $request->input('out', "html"); # Standard output format html if ($this->out !== "html" && $this->out !== "json" && $this->out !== "results" && $this->out !== "results-with-style" && $this->out !== "result-count" && $this->out !== "rss20" && $this->out !== "atom10" && $this->out !== "rich" && $this->out !== "api") { @@ -1078,7 +1133,6 @@ class MetaGer # IPv4 return preg_replace("/(\d+)\.(\d+)\.\d+.\d+/s", "$1.$2.0.0", $ip); } - die(var_dump($ip)); } public function checkSpecialSearches(Request $request) @@ -1116,7 +1170,7 @@ class MetaGer if (($request->filled($filter->{"get-parameter"}) && $request->input($filter->{"get-parameter"}) !== "off") || \Cookie::get($this->getFokus() . "_setting_" . $filter->{"get-parameter"}) !== null ) { # If the filter is set via Cookie - $this->parameterFilter[$filterName] = $filter; + $this->parameterFilter[$filterName] = $filter; $this->parameterFilter[$filterName]->value = $request->input($filter->{"get-parameter"}, ''); if (empty($this->parameterFilter[$filterName]->value)) { $this->parameterFilter[$filterName]->value = \Cookie::get($this->getFokus() . "_setting_" . $filter->{"get-parameter"}); diff --git a/app/Models/Searchengine.php b/app/Models/Searchengine.php index 59e758fca5d025fdf20d80ae3bbc93c0353e5285..8b612d551b0a19111875b2ce51643cc9483ffee0 100644 --- a/app/Models/Searchengine.php +++ b/app/Models/Searchengine.php @@ -81,6 +81,7 @@ abstract class Searchengine $q = $query . " " . $q; } + $tmpPara = false; # Parse enabled Parameter-Filter foreach ($metager->getParameterFilter() as $filterName => $filter) { $inputParameter = $filter->value; @@ -88,8 +89,13 @@ abstract class Searchengine if (empty($inputParameter) || empty($filter->sumas->{$name}->values->{$inputParameter})) { continue; } + $tmpPara = true; $engineParameterKey = $filter->sumas->{$name}->{"get-parameter"}; $engineParameterValue = $filter->sumas->{$name}->values->{$inputParameter}; + if(stripos($engineParameterValue, "dyn-") === 0){ + $functionname = substr($engineParameterValue, stripos($engineParameterValue, "dyn-") + 4); + $engineParameterValue = \App\DynamicEngineParameters::$functionname(); + } $this->engine->{"get-parameter"}->{$engineParameterKey} = $engineParameterValue; } diff --git a/resources/lang/de/metaGer.php b/resources/lang/de/metaGer.php index 7c0194921ea873a7dd9ee1c57ce47ff2a5cc7aad..549fb420085adf703ddbed7a66adc4c1f25f43a6 100644 --- a/resources/lang/de/metaGer.php +++ b/resources/lang/de/metaGer.php @@ -81,6 +81,9 @@ return [ "filter.freshness.day" => "Letzte 24h", "filter.freshness.week" => "Letzte Woche", "filter.freshness.month" => "Letzter Monat", + "filter.freshness.year" => "Letztes Jahr", + "filter.freshness.custom" => "Benutzerdefiniert", + "filter.customdatetitle" => "Benutzerdefiniertes Datum auswählen", "filter.market" => "Sprache", "filter.market.ga" => "Deutsch (Österreich)", diff --git a/resources/lang/de/plugin-page.php b/resources/lang/de/plugin-page.php index c6b3a38f01d92aa42cbc852b9a8b7dd322043aae..8890a276f35b1dbf93469b90bb89dbb0898a0053 100644 --- a/resources/lang/de/plugin-page.php +++ b/resources/lang/de/plugin-page.php @@ -69,10 +69,8 @@ return [ 'edge.10' => 'Im Bereich darunter tragen Sie "https://metager.de" in das Feld "Webadresse eingeben" ein und klicken auf das "+" Symbol', 'edge.11' => 'Entfernen Sie alle Einträge, die beim Start nicht geöffnet werden sollen (z.B. about:start), indem Sie rechts auf das kleine "x" klicken.', - 'safari.1' => 'Installieren Sie das Safari-PlugIn <a href="http://www.opensearchforsafari.com/" target="_blank" rel="noopener">OpenSearchforSafari</a>.', - 'safari.2' => 'Rufen Sie MetaGer auf und fügen Sie MetaGer mit dem OpenSearch-Knopf(Lupen-Symbol) in der Safari-Menüleiste hinzu.', - 'safari.3' => 'Löschen Sie (nach Bedarf) die anderen Suchmaschinen aus dem OpenSearch-PlugIn, indem Sie das "X" neben diesen betätigen.', - 'safari.4' => 'Sie können nun über den OpenSearch-Knopf(Lupe) mit MetaGer suchen.', + 'safari.1' => 'Leider können Sie MetaGer nicht zum Safari hinzufügen, weil alle Plugins, die dem Hinzufügen alternativer Suchmaschinen dienten, nicht mehr akzeptiert werden.', + 'vivaldi.1' => 'Klicken Sie in Ihrem Browser oben links auf das rote Vivaldi Logo und wählen Sie zuerst "Werkzeuge", dann im Untermenü "Einstellungen".', 'vivaldi.2' => 'In dem dann erscheinenden Menu wählen Sie bitte "Suche".', diff --git a/resources/lang/en/plugin-page.php b/resources/lang/en/plugin-page.php index b60f2577bfb50c81c66f0212e299b15539eb27df..bb0699b85527bd792fc70e24f7c60389ed3b2157 100644 --- a/resources/lang/en/plugin-page.php +++ b/resources/lang/en/plugin-page.php @@ -67,10 +67,7 @@ return [ "edge.10" => "Type \"https://metager.org\" in field \"Webaddress\" and click on \"+\"", "edge.11" => "Delete all entries which should not be opened at start (for example \"about:start\") by click on \"x\"", - "safari.1" => "Install the Safari-PlugIn <a href=\"http://www.opensearchforsafari.com/\" target=\"_blank\" rel=\"noopener\">OpenSearchforSafari</a>.", - "safari.2" => "Open MetaGer and add MetaGer by the OpenSearch-button within the Safari menu", - "safari.3" => "Delete (if you want) other search engines by clicking on \"X\"", - "safari.4" => "Now you might search with MetaGer via the OpenSearch-button (magnifying glass symbol)", + 'safari.1' => 'We are sorry. Safari doesn´t accept neither the "Glims plugin" nor the "OpenSearch for Safari plugin" anymore. At this time there is no way to install alternative search engines for Safari webbrowser.', "vivaldi.1" => "Click the red logo \"Vivaldi\" at the top left of your web browser. Then select \"Tools / Preferences\"", "vivaldi.2" => "Within the new menu choose \"search\"", diff --git a/resources/lang/es/plugin-page.php b/resources/lang/es/plugin-page.php index d152ecff499b65c6b969d5c5b1ba4ac8eeb3130f..42b0c7b3bf7e2eed95b801bdd60a2f8386ee91a9 100644 --- a/resources/lang/es/plugin-page.php +++ b/resources/lang/es/plugin-page.php @@ -51,8 +51,5 @@ return [ "edge.9" => "En el menú de cascada selecciona \"Definido por el usuario\"", "edge.10" => "En la área abajo ponga \"https://metager.de\" en el campo \"Introducir URL\" y haga click en el sÃmbolo \"+\"", "edge.11" => "Borra todas las entradas, que no quiere abrir al inicio (p.ej. about:start), haciendo click en el pequeño \"x\" a la derecha.", - "safari.1" => "Instala la extensión de Safari <a href=\"http://www.opensearchforsafari.com/\" target=\"_blank\" rel=\"noopener\">OpenSearchforSafari</a>.", - "safari.2" => "Busca MetaGer y añade MetaGer con el botón OpenSearch (sÃmbolo de na lupa) en la barra de menú de Safari.", - "safari.3" => "Borra (según necesidad) los demás buscadores de la extension OpenSearch, haciendo click en el \"X\" a la par y confirma.", - "safari.4" => "Ahora puede buscar con MetaGer usando el botón de OpenSearch (la lupa).", + 'safari.1" => "No pueden añadir otras motores de busqueda alternativas en Safari. "OpenSearch for Safari" y "Glims" soy terminado.', ]; diff --git a/resources/less/metager/pages/resultpage/result-page.less b/resources/less/metager/pages/resultpage/result-page.less index 7e70f86be684ab115cc272a7bd7e1b16ac515ffd..f867141111d0f77f06aa88e65bc8a331cf6adf42 100644 --- a/resources/less/metager/pages/resultpage/result-page.less +++ b/resources/less/metager/pages/resultpage/result-page.less @@ -604,6 +604,21 @@ a { padding: 3px; border-radius: 5px; } + label[for="custom-date"] { + cursor: pointer; + &:hover { + color: red; + } + } + #bing-from-to { + display: none; + } + #custom-date:checked + select { + display: none; + } + #custom-date:checked + select + #bing-from-to { + display: flex; + } } .option-selector:nth-child(1){ margin-left: 0; diff --git a/resources/views/parts/custom-daterange.blade.php b/resources/views/parts/custom-daterange.blade.php new file mode 100644 index 0000000000000000000000000000000000000000..6f3670925eb457023e47987b626785f64e204568 --- /dev/null +++ b/resources/views/parts/custom-daterange.blade.php @@ -0,0 +1,5 @@ +<div id="bing-from-to"> + <input type="date" form="searchForm" @if(Request::filled("ff")) value="{{ Request::input("ff", "") }}" @endif name="ff" onchange="if(document.querySelector('input[name=ff]').value != '' && document.querySelector('input[name=ft]').value != ''){this.form.submit();}"> + <div> - </div> + <input type="date" form="searchForm" @if(Request::filled("ft")) value="{{ Request::input("ft", "") }}" @endif name="ft" onchange="if(document.querySelector('input[name=ff]').value != '' && document.querySelector('input[name=ft]').value != ''){this.form.submit();}"> +</div> \ No newline at end of file diff --git a/resources/views/parts/filter.blade.php b/resources/views/parts/filter.blade.php index 77aa483b798110497c19fb20fe9ddd654c7314e3..9eec9fc6bbcb6dae976e73ddc911ab923ec73d69 100644 --- a/resources/views/parts/filter.blade.php +++ b/resources/views/parts/filter.blade.php @@ -33,18 +33,37 @@ <div id="options-box"> <div id="options-items"> @foreach($metager->getAvailableParameterFilter() as $filterName => $filter) + @if(empty($filter->hidden) || $filter->hidden === false) <div class="option-selector"> - <label for="{{$filterName}}">@lang($filter->name)</label> - <select name="{{$filter->{'get-parameter'} }}" class="custom-select custom-select-sm" form="searchForm" onchange="this.form.submit()"> + <div> + <label for="{{$filterName}}"> + @lang($filter->name) + </label> + @if($filter->{'get-parameter'} === "f") + <label for="custom-date" title="@lang('metaGer.filter.customdatetitle')"> + <i class="fas fa-cogs"></i> + </label> + </div> + <input id="custom-date" type="checkbox" form="searchForm" @if(Request::input('fc', "off") === "on")checked @endif name="fc" onchange="if(!this.checked){this.form.submit()}"/> + @else + </div> + @endif + <select name="{{$filter->{'get-parameter'} }}" class="custom-select custom-select-sm" form="searchForm" onchange="this.form.submit()"> @foreach($filter->values as $value => $text) - @if($value === "" && Cookie::get($metager->getFokus() . "_setting_" . $filter->{"get-parameter"}) !== null) + @if($value === "nofilter" && Cookie::get($metager->getFokus() . "_setting_" . $filter->{"get-parameter"}) !== null) <option value="off" @if(empty($filter->value) || $filter->value === "off")selected @endif>{{trans($text)}}</option> + @elseif($value === "nofilter") + <option value="" @if(!empty($filter->value) && $filter->value === $value)selected @endif>{{trans($text)}}</option> @else <option value="{{$value}}" @if(!empty($filter->value) && $filter->value === $value)selected @endif>{{trans($text)}}</option> @endif @endforeach </select> + @if(!empty($filter->htmlbelow)) + @include($filter->htmlbelow) + @endif </div> + @endif @endforeach </div> diff --git a/resources/views/plugin-page.blade.php b/resources/views/plugin-page.blade.php index 5e8ba1314af3c59763e9e9445456d05bdc5098c2..61e51fce94b3c04f1ca5ef1965bcacba8c0f6680 100644 --- a/resources/views/plugin-page.blade.php +++ b/resources/views/plugin-page.blade.php @@ -149,9 +149,6 @@ <h3>{!! trans('plugin-page.default-search') !!}</h3> <ol> <li>{!! trans('plugin-page.safari.1') !!}</li> - <li>{!! trans('plugin-page.safari.2') !!}</li> - <li>{!! trans('plugin-page.safari.3') !!}</li> - <li>{!! trans('plugin-page.safari.4') !!}</li> </ol> </div> @elseif ($browser === 'Vivaldi') diff --git a/resources/views/settings/index.blade.php b/resources/views/settings/index.blade.php index 03e52845d590838ef017aabf0a8745c6be23b52b..401246309884997e2f820e476d96fd708566a0c5 100644 --- a/resources/views/settings/index.blade.php +++ b/resources/views/settings/index.blade.php @@ -65,6 +65,7 @@ <input type="hidden" name="url" value="{{ $url }}"> <div id="filter-options"> @foreach($filter as $name => $filterInfo) + @if(empty($filterInfo->hidden) || $filterInfo->hidden === false) <div class="form-group"> <label for="{{ $filterInfo->{"get-parameter"} }}">@lang($filterInfo->name)</label> <select name="{{ $filterInfo->{"get-parameter"} }}" id="{{ $filterInfo->{"get-parameter"} }}" class="form-control"> @@ -76,6 +77,7 @@ @endforeach </select> </div> + @endif @endforeach </div> <button type="submit" class="btn btn-default">@lang('settings.save')</button>