MetaGerSearch.php 2.87 KB
Newer Older
Dominik Hebeler's avatar
Dominik Hebeler committed
1
2
3
4
<?php

namespace App\Http\Controllers;

5
use App;
6
use App\MetaGer;
7
use Illuminate\Http\Request;
Dominik Hebeler's avatar
Dominik Hebeler committed
8

9
const TIP_SERVER = 'http://localhost:63825/tips.xml';
10

Dominik Hebeler's avatar
Dominik Hebeler committed
11
12
class MetaGerSearch extends Controller
{
13
    public function search(Request $request, MetaGer $metager)
14
    {
15

16
        $focus = $request->input("focus", "web");
17

18
19
20
21
22
        if ($focus === "maps") {
            $searchinput = $request->input('eingabe', '');
            return redirect()->to('https://maps.metager.de/map/' . $searchinput . '/1240908.5493525574,6638783.2192695495,6');
        }

23
        /*if ($focus !== "angepasst" && $this->startsWith($focus, "focus_")) {
24
25
        $metager->parseFormData($request);
        return $metager->createView();
26
27
        }*/

28
        #die($request->header('User-Agent'));
29
        $time = microtime();
30
31
        # Mit gelieferte Formulardaten parsen und abspeichern:
        $metager->parseFormData($request);
32

33
34
        # Nach Spezialsuchen überprüfen:
        $metager->checkSpecialSearches($request);
35

36
37
38
        # Die Quicktips als Job erstellen
        $quicktips = $metager->createQuicktips();

39
        # Suche für alle zu verwendenden Suchmaschinen als Job erstellen,
40
        # auf Ergebnisse warten und die Ergebnisse laden
41
        $metager->createSearchEngines($request);
42

43
44
45
        # Versuchen die Ergebnisse der Quicktips zu laden
        $quicktipResults = $quicktips->loadResults();

46
47
48
        # Alle Ergebnisse vor der Zusammenführung ranken:
        $metager->rankAll();

49
        # Ergebnisse der Suchmaschinen kombinieren:
Phil Höfer's avatar
Phil Höfer committed
50
        $metager->prepareResults();
51

52
        # Die Ausgabe erstellen:
53
        return $metager->createView($quicktipResults);
Dominik Hebeler's avatar
Dominik Hebeler committed
54
55
    }

56
57
58
59
60
61
62
63
    public function botProtection($redirect)
    {
        $hash = md5(date('YmdHi'));
        return view('botProtection')
            ->with('hash', $hash)
            ->with('r', $redirect);
    }

64
65
    public function get($url)
    {
66
        $ctx = stream_context_create(array('http' => array('timeout' => 2)));
67
        return file_get_contents($url, false, $ctx);
68
    }
69
70
71
72
73
74

    private function startsWith($haystack, $needle)
    {
        $length = strlen($needle);
        return (substr($haystack, 0, $length) === $needle);
    }
75
76
77
78

    public function tips(Request $request)
    {
        $tips_text = file_get_contents(TIP_SERVER);
79
        $tips      = [];
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
        try {
            $tips_xml = simplexml_load_string($tips_text);

            $tips_xml->registerXPathNamespace('mg', 'http://metager.de/tips/');
            $tips_xml = $tips_xml->xpath('mg:tip');
            foreach ($tips_xml as $tip_xml) {
                $tips[] = $tip_xml->__toString();
            }
        } catch (\Exception $e) {
            Log::error("A problem occurred loading tips from the tip server.");
            Log::error($e->getMessage());
            abort(500);
        }
        return view('tips')
            ->with('title', trans('tips.title'))
            ->with('tips', $tips);
    }
97
}