From 33ef3f93aea40f94590961210a5e121da3ddc3cc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Phil=20H=C3=B6fer?= <phil@suma-ev.de>
Date: Fri, 16 Oct 2020 11:55:14 +0000
Subject: [PATCH] Reintroduce quicktips into resultpage

---
 app/Http/Controllers/MetaGerSearch.php        | 13 +++-
 app/MetaGer.php                               | 15 ++++-
 app/Models/Quicktips/Quicktips.php            | 63 ++++++++++---------
 resources/less/metager/pages/resultpage.less  |  1 +
 .../metager/pages/resultpage/quicktips.less   |  6 +-
 .../views/layouts/researchandtabs.blade.php   |  6 +-
 resources/views/quicktips.blade.php           | 16 +----
 7 files changed, 64 insertions(+), 56 deletions(-)

diff --git a/app/Http/Controllers/MetaGerSearch.php b/app/Http/Controllers/MetaGerSearch.php
index 22289cad8..025be641d 100644
--- a/app/Http/Controllers/MetaGerSearch.php
+++ b/app/Http/Controllers/MetaGerSearch.php
@@ -76,10 +76,21 @@ class MetaGerSearch extends Controller
             return response($responseContent);
         }
 
+        $quicktips = $metager->createQuicktips();
+        if (!empty($timings)) {
+            $timings["createQuicktips"] = microtime(true) - $time;
+        }
+
         # Suche für alle zu verwendenden Suchmaschinen als Job erstellen,
         # auf Ergebnisse warten und die Ergebnisse laden
         $metager->createSearchEngines($request, $timings);
 
+        # Versuchen die Ergebnisse der Quicktips zu laden
+        $quicktipResults = $quicktips->loadResults();
+        if (!empty($timings)) {
+            $timings["loadResults"] = microtime(true) - $time;
+        }
+
         $metager->startSearch($timings);
 
         $metager->waitForMainResults();
@@ -128,7 +139,7 @@ class MetaGerSearch extends Controller
         }
 
         # Die Ausgabe erstellen:
-        $resultpage = $metager->createView();
+        $resultpage = $metager->createView($quicktipResults);
         if ($spamEntry !== null) {
             try {
                 Cache::put('spam.' . $metager->getFokus() . "." . md5($spamEntry), $resultpage->render(), 604800);
diff --git a/app/MetaGer.php b/app/MetaGer.php
index 0a3be40d6..5834d96df 100644
--- a/app/MetaGer.php
+++ b/app/MetaGer.php
@@ -135,7 +135,7 @@ class MetaGer
     }
 
     # Erstellt aus den gesammelten Ergebnissen den View
-    public function createView()
+    public function createView($quicktipResults = [])
     {
         # Hiermit werden die evtl. ausgewählten SuMas extrahiert, damit die Input-Boxen richtig gesetzt werden können
         $focusPages = [];
@@ -175,7 +175,7 @@ class MetaGer
                         ->with('apiAuthorized', $this->apiAuthorized)
                         ->with('metager', $this)
                         ->with('browser', (new Agent())->browser())
-                        ->with('quicktips', action('MetaGerSearch@quicktips', ["search" => $this->eingabe]))
+                        ->with('quicktips', $quicktipResults)
                         ->with('focus', $this->fokus)
                         ->with('resultcount', count($this->results));
             }
@@ -248,7 +248,7 @@ class MetaGer
                         ->with('apiAuthorized', $this->apiAuthorized)
                         ->with('metager', $this)
                         ->with('browser', (new Agent())->browser())
-                        ->with('quicktips', action('MetaGerSearch@quicktips', ["search" => $this->eingabe, "quotes" => $this->sprueche]))
+                        ->with('quicktips', $quicktipResults)
                         ->with('resultcount', count($this->results))
                         ->with('focus', $this->fokus);
                     break;
@@ -1213,6 +1213,15 @@ class MetaGer
         }
     }
 
+     public function createQuicktips()
+    {
+        # Die quicktips werden als job erstellt und zur Abarbeitung freigegeben
+        $quicktips = new \App\Models\Quicktips\Quicktips($this->q, LaravelLocalization::getCurrentLocale(), $this->getTime());
+        return $quicktips;
+    }
+
+
+
     private function anonymizeIp($ip)
     {
         if (str_contains($ip, ":")) {
diff --git a/app/Models/Quicktips/Quicktips.php b/app/Models/Quicktips/Quicktips.php
index 1210568fe..073c094de 100644
--- a/app/Models/Quicktips/Quicktips.php
+++ b/app/Models/Quicktips/Quicktips.php
@@ -3,53 +3,54 @@
 namespace App\Models\Quicktips;
 
 use Cache;
-use LaravelLocalization;
+use Illuminate\Foundation\Bus\DispatchesJobs;
+use Illuminate\Support\Facades\Redis;
 use Log;
 
 class Quicktips
 {
+    use DispatchesJobs;
 
     private $quicktipUrl = "/1.1/quicktips.xml";
-    private $results = [];
     const QUICKTIP_NAME = "quicktips";
-    const CACHE_DURATION = 60 * 60;
+    const CACHE_DURATION = 60;
 
     private $hash;
 
-    public function __construct($search, $quotes)
+    public function __construct($search, $locale, $max_time)
     {
-        $locale = LaravelLocalization::getCurrentLocale();
         if (env("APP_ENV") === "production") {
             $this->quicktipUrl = "https://quicktips.metager.de" . $this->quicktipUrl;
         } else {
             $this->quicktipUrl = "https://dev.quicktips.metager.de" . $this->quicktipUrl;
         }
-        $this->startSearch($search, $quotes, $locale);
+        $this->startSearch($search, $locale, $max_time);
     }
 
-    public function startSearch($search, $quotes, $locale)
+    public function startSearch($search, $locale, $max_time)
     {
-        $url = $this->quicktipUrl . "?search=" . $this->normalize_search($search) . "&locale=" . $locale . "&quotes=" . $quotes;
+        $url = $this->quicktipUrl . "?search=" . $this->normalize_search($search) . "&locale=" . $locale;
         $this->hash = md5($url);
 
-        $results = null;
 
-        try {
-            if (!Cache::has($this->hash)) {
-                $results = file_get_contents($url);
-                Cache::put($this->hash, $results, Quicktips::CACHE_DURATION);
-            } else {
-                $results = Cache::get($this->hash);
-            }
-        } catch (\Exception $e) {
-            Log::error($e->getMessage());
-        }
+        if (!Cache::has($this->hash)) {
 
-        if ($results === null) {
-            $results = file_get_contents($url);
-        }
+            // Queue this search
+            $mission = [
+                "resulthash" => $this->hash,
+                "url" => $url,
+                "useragent" => "",
+                "username" => null,
+                "password" => null,
+                "headers" => [],
+                "cacheDuration" => self::CACHE_DURATION,
+                "name" => "Quicktips",
+            ];
+
+            $mission = json_encode($mission);
 
-        $this->results = $this->loadResults($results);
+            Redis::rpush(\App\MetaGer::FETCHQUEUE_KEY, $mission);
+        }
     }
 
     /**
@@ -58,8 +59,9 @@ class Quicktips
      * 2. Parse the results
      * Returns an empty array if no results are found
      */
-    public function loadResults($resultsRaw)
+    public function loadResults()
     {
+        $resultsRaw = $this->retrieveResults($this->hash);
         if ($resultsRaw) {
             $results = $this->parseResults($resultsRaw);
             return $results;
@@ -71,9 +73,13 @@ class Quicktips
     public function retrieveResults($hash)
     {
         $body = null;
+        $body = Redis::brpoplpush($this->hash, $this->hash,1);
+        if ($body === false) {
+            return false;
+        }
 
-        if (Cache::has($this->hash)) {
-            $body = Cache::get($this->hash);
+        if ($body === "no-result") {
+            return false;
         }
 
         if ($body !== null) {
@@ -176,9 +182,4 @@ class Quicktips
     {
         return urlencode($search);
     }
-
-    public function getResults()
-    {
-        return $this->results;
-    }
 }
diff --git a/resources/less/metager/pages/resultpage.less b/resources/less/metager/pages/resultpage.less
index a2a703ea1..a7b8077d7 100644
--- a/resources/less/metager/pages/resultpage.less
+++ b/resources/less/metager/pages/resultpage.less
@@ -1,5 +1,6 @@
 @import "./resultpage/result-page.less";
 @import "./resultpage/result.less";
+@import "./resultpage/quicktips.less";
 @import "./resultpage/product.less";
 @import "./resultpage/result-saver.less";
 @import "./resultpage/keyboard-nav.less";
\ No newline at end of file
diff --git a/resources/less/metager/pages/resultpage/quicktips.less b/resources/less/metager/pages/resultpage/quicktips.less
index f7f3eb879..1627559d9 100644
--- a/resources/less/metager/pages/resultpage/quicktips.less
+++ b/resources/less/metager/pages/resultpage/quicktips.less
@@ -1,7 +1,7 @@
 /* Quicktips */
-@import "../../variables.less";
-@import "../../general/cards.less";
-@import "../../general/general.less";
+// @import "../../variables.less";
+// @import "../../general/cards.less";
+// @import "../../general/general.less";
 @quicktip-font-large: @result-font-large;
 @quicktip-font-medium: @result-font-medium;
 @quicktip-font-small: @result-font-small;
diff --git a/resources/views/layouts/researchandtabs.blade.php b/resources/views/layouts/researchandtabs.blade.php
index 17a26ccd3..b0c59b3a9 100644
--- a/resources/views/layouts/researchandtabs.blade.php
+++ b/resources/views/layouts/researchandtabs.blade.php
@@ -34,11 +34,11 @@
 	</div>
 	<div id="additions-container">
 		@include('layouts.keyboardNavBox')
+		<div id="quicktips">
 		@if( $metager->showQuicktips() )
-			<div id="quicktips">
-				<iframe src="{{ $quicktips }}" frameborder="0"></iframe>
-			</div>
+			@include('quicktips', ['quicktips', $quicktips])
 		@endif
+		</div>
 	</div>
 	@include('parts.footer', ['type' => 'resultpage', 'id' => 'resultPageFooter'])
 </div>
diff --git a/resources/views/quicktips.blade.php b/resources/views/quicktips.blade.php
index 6fa679cf6..f354bda8b 100644
--- a/resources/views/quicktips.blade.php
+++ b/resources/views/quicktips.blade.php
@@ -1,19 +1,5 @@
-<!DOCTYPE html>
-<html lang="{{ LaravelLocalization::getCurrentLocale() }}">
-<head>
-  <meta charset="UTF-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  <title>{{ $search }} - MetaGer Quicktips</title>
-  <link type="text/css" rel="stylesheet" href="{{ mix('css/quicktips.css') }}" />
-  <link href="/fonts/liberationsans/stylesheet.css" rel="stylesheet">
-	<link type="text/css" rel="stylesheet" href="{{ mix('css/fontawesome.css') }}" />
-	<link type="text/css" rel="stylesheet" href="{{ mix('css/fontawesome-solid.css') }}" />
-</head>
-<body id="quicktips">
 @foreach($quicktips as $quicktip)
   <div class="quicktip" type="{{ $quicktip->type }}">
     @include('parts.quicktip', ['quicktip' => $quicktip])
   </div>
-@endforeach
-</body>
-</html>
+@endforeach
\ No newline at end of file
-- 
GitLab