Skip to content
Snippets Groups Projects
Commit 64fa5dba authored by Karl's avatar Karl
Browse files

Die Funktion createSearchEngines der MetaGer.php ist jetzt stark aufgeteilt

parent 51e1011b
No related branches found
No related tags found
2 merge requests!442Development,!433Die Funktion createSearchEngines der MetaGer.php ist jetzt stark aufgeteilt
...@@ -361,19 +361,21 @@ class MetaGer ...@@ -361,19 +361,21 @@ class MetaGer
public function createSearchEngines(Request $request) public function createSearchEngines(Request $request)
{ {
# Wenn es kein Suchwort gibt
if (!$request->has("eingabe")) { if (!$request->has("eingabe")) {
return; return;
} }
# Überprüfe, welche Sumas eingeschaltet sind
$xml = simplexml_load_file($this->sumaFile); $xml = simplexml_load_file($this->sumaFile);
$sumas = $xml->xpath("suma");
$enabledSearchengines = []; $enabledSearchengines = [];
$overtureEnabled = false; $overtureEnabled = false;
$sumaCount = 0; $sumaCount = 0;
$sumas = $xml->xpath("suma");
/* Erstellt die Liste der eingestellten Sumas /* Erstellt die Liste der eingestellten Sumas
* Der einzige Unterschied bei angepasstem Suchfokus ist, dass nicht nach den Typen einer Suma, sondern den im Request mitgegebenen Typen entschieden wird * Der einzige Unterschied bei angepasstem Suchfokus ist,
* dass nicht nach den Typen einer Suma,
* sondern den im Request mitgegebenen Typen entschieden wird.
* Ansonsten wird genau das selbe geprüft und gemacht: * Ansonsten wird genau das selbe geprüft und gemacht:
* Handelt es sich um spezielle Suchmaschinen die immer an sein müssen * Handelt es sich um spezielle Suchmaschinen die immer an sein müssen
* Wenn es Overture ist vermerken dass Overture an ist * Wenn es Overture ist vermerken dass Overture an ist
...@@ -381,54 +383,24 @@ class MetaGer ...@@ -381,54 +383,24 @@ class MetaGer
* Zu Liste hinzufügen * Zu Liste hinzufügen
*/ */
foreach ($sumas as $suma) { foreach ($sumas as $suma) {
if ($this->fokus === "angepasst") { if ($this->sumaIsSelected($suma, $request)
if ($request->has($suma["name"]) || ($this->isBildersuche()
|| ($this->fokus !== "bilder" && $this->sumaIsAdsuche($suma, $overtureEnabled))
&& ($suma["name"]->__toString() === "qualigo" && (!$this->sumaIsDisabled($suma))) {
|| $suma["name"]->__toString() === "similar_product_ads" if ($this->sumaIsOverture($suma)) {
|| (!$overtureEnabled && $suma["name"]->__toString() === "overtureAds") $overtureEnabled = true;
|| $suma["name"]->__toString() == "rlvproduct"
)
)
) {
if (!(isset($suma['disabled']) && $suma['disabled']->__toString() === "1")) {
if ($suma["name"]->__toString() === "overture" || $suma["name"]->__toString() === "overtureAds") {
$overtureEnabled = true;
}
if ($suma["name"]->__toString() !== "qualigo" && $suma["name"]->__toString() !== "similar_product_ads" && $suma["name"]->__toString() !== "overtureAds") {
$sumaCount += 1;
}
$enabledSearchengines[] = $suma;
}
} }
} else { if ($this->sumaIsNotAdsuche($suma)) {
$types = explode(",", $suma["type"]); $sumaCount += 1;
if (in_array($this->fokus, $types)
|| ($this->fokus !== "bilder"
&& ($suma["name"]->__toString() === "qualigo"
|| $suma["name"]->__toString() === "similar_product_ads"
|| (!$overtureEnabled && $suma["name"]->__toString() === "overtureAds")
|| $suma["name"]->__toString() == "rlvproduct"
)
)
) {
if (!(isset($suma['disabled']) && $suma['disabled']->__toString() === "1")) {
if ($suma["name"]->__toString() === "overture" || $suma["name"]->__toString() === "overtureAds") {
$overtureEnabled = true;
}
if ($suma["name"]->__toString() !== "qualigo" && $suma["name"]->__toString() !== "similar_product_ads" && $suma["name"]->__toString() !== "overtureAds") {
$sumaCount += 1;
}
$enabledSearchengines[] = $suma;
}
} }
$enabledSearchengines[] = $suma;
} }
} }
# Sonderregelung für alle Suchmaschinen, die zu den Minisuchern gehören. Diese können alle gemeinsam über einen Link abgefragt werden # Sonderregelung für alle Suchmaschinen, die zu den Minisuchern gehören. Diese können alle gemeinsam über einen Link abgefragt werden
$subcollections = []; $subcollections = [];
$tmp = [];
$tmp = [];
foreach ($enabledSearchengines as $engine) { foreach ($enabledSearchengines as $engine) {
if (isset($engine['minismCollection'])) { if (isset($engine['minismCollection'])) {
$subcollections[] = $engine['minismCollection']->__toString(); $subcollections[] = $engine['minismCollection']->__toString();
...@@ -439,91 +411,41 @@ class MetaGer ...@@ -439,91 +411,41 @@ class MetaGer
} }
$enabledSearchengines = $tmp; $enabledSearchengines = $tmp;
if (sizeof($subcollections) > 0) { if (sizeof($subcollections) > 0) {
$count = sizeof($subcollections) * 10; $enabledSearchengines[] = $this->loadMiniSucher($xml, $subcollections);
$minisucherEngine = $xml->xpath('suma[@name="minism"]')[0];
$subcollections = urlencode("(" . implode(" OR ", $subcollections) . ")");
$minisucherEngine["formData"] = str_replace("<<SUBCOLLECTIONS>>", $subcollections, $minisucherEngine["formData"]);
$minisucherEngine["formData"] = str_replace("<<COUNT>>", $count, $minisucherEngine["formData"]);
$enabledSearchengines[] = $minisucherEngine;
} }
if ($sumaCount <= 0) { if ($sumaCount <= 0) {
$this->errors[] = trans('metaGer.settings.noneSelected'); $this->errors[] = trans('metaGer.settings.noneSelected');
} }
$engines = []; $engines = [];
# Wenn eine Sitesearch durchgeführt werden soll, überprüfen wir ob eine der Suchmaschinen überhaupt eine Sitesearch unterstützt # Wenn eine Sitesearch durchgeführt werden soll, überprüfen wir ob überhaupt eine der Suchmaschinen eine Sitesearch unterstützt
$siteSearchFailed = $this->checkCanNotSitesearch($enabledSearchengines); $siteSearchFailed = $this->checkCanNotSitesearch($enabledSearchengines);
$typeslist = []; $typeslist = [];
$counter = 0; $counter = 0;
if ($request->has('next') && Cache::has($request->input('next')) && unserialize(Cache::get($request->input('next')))['page'] > 1) { if ($this->requestIsCached($request)) {
$next = unserialize(Cache::get($request->input('next'))); $engines = $this->getCachedEngines($request);
$this->page = $next['page'];
$engines = $next['engines'];
if (isset($next['startForwards'])) {
$this->startForwards = $next['startForwards'];
}
if (isset($next['startBackwards'])) {
$this->startBackwards = $next['startBackwards'];
}
} else { } else {
foreach ($enabledSearchengines as $engine) { $engines = $this->actuallyCreateSearchEngines($enabledSearchengines, $siteSearchFailed);
# Wenn diese Suchmaschine gar nicht eingeschaltet sein soll
if (!$siteSearchFailed && strlen($this->site) > 0 && (!isset($engine['hasSiteSearch']) || $engine['hasSiteSearch']->__toString() === "0")) {
continue;
}
# Setze Pfad zu Parser
$path = "App\Models\parserSkripte\\" . ucfirst($engine["package"]->__toString());
# Prüfe ob Parser vorhanden
if (!file_exists(app_path() . "/Models/parserSkripte/" . ucfirst($engine["package"]->__toString()) . ".php")) {
Log::error(trans('metaGer.engines.noParser', ['engine' => $engine["name"]]));
continue;
}
# Es wird versucht die Suchengine zu erstellen
$time = microtime();
try {
$tmp = new $path($engine, $this);
} catch (\ErrorException $e) {
Log::error(trans('metaGer.engines.cantQuery', ['engine' => $engine["name"], 'error' => var_dump($e)]));
continue;
}
# Ausgabe bei Debug-Modus
if ($tmp->enabled && isset($this->debug)) {
$this->warnings[] = $tmp->service . " Connection_Time: " . $tmp->connection_time . " Write_Time: " . $tmp->write_time . " Insgesamt:" . ((microtime() - $time) / 1000);
}
# Wenn die neu erstellte Engine eingeschaltet ist, wird sie der Liste hinzugefügt
if ($tmp->isEnabled()) {
$engines[] = $tmp;
}
}
} }
# Wir starten die Suche manuell: # Wir starten alle Suchen
foreach ($engines as $engine) { foreach ($engines as $engine) {
$engine->startSearch($this); $engine->startSearch($this);
} }
$this->adjustFocus($sumas, $enabledSearchengines); $this->adjustFocus($sumas, $enabledSearchengines);
/* Nun passiert ein elementarer Schritt. /* Wir warten auf die Antwort der Suchmaschinen
* Wir warten auf die Antwort der Suchmaschinen, da wir vorher nicht weiter machen können. * Die Verbindung steht zu diesem Zeitpunkt und auch unsere Requests wurden schon gesendet.
* Aber natürlich nicht ewig. * Wir zählen die Suchmaschinen, die durch den Cache beantwortet wurden:
* Die Verbindung steht zu diesem Zeitpunkt und auch unsere Request wurde schon gesendet. * $enginesToLoad zählt einerseits die Suchmaschinen auf die wir warten und andererseits
* Wir geben der Suchmaschine nun bis zu 500ms Zeit zu antworten. * welche Suchmaschinen nicht rechtzeitig geantwortet haben.
*/ */
# Wir zählen die Suchmaschinen, die durch den Cache beantwortet wurden:
$enginesToLoad = []; $enginesToLoad = [];
$canBreak = false; $canBreak = false;
foreach ($engines as $engine) { foreach ($engines as $engine) {
...@@ -532,8 +454,6 @@ class MetaGer ...@@ -532,8 +454,6 @@ class MetaGer
$canBreak = true; $canBreak = true;
} }
} else { } else {
# Das Array zählt einerseits die Suchmaschinen, auf die wir warten und andererseits
# welche Suchmaschinen nicht rechtzeitig geantwortet haben.
$enginesToLoad[$engine->name] = false; $enginesToLoad[$engine->name] = false;
} }
} }
...@@ -543,6 +463,135 @@ class MetaGer ...@@ -543,6 +463,135 @@ class MetaGer
$this->retrieveResults($engines); $this->retrieveResults($engines);
} }
# Spezielle Suchen und Sumas
public function sumaIsSelected($suma, $request)
{
if ($this->fokus === "angepasst") {
if ($request->has($suma["name"])) {
return true;
}
} else {
$types = explode(",", $suma["type"]);
if (in_array($this->fokus, $types)) {
return true;
}
}
return false;
}
public function actuallyCreateSearchEngines($enabledSearchengines, $siteSearchFailed)
{
$engines = [];
foreach ($enabledSearchengines as $engine) {
# Wenn diese Suchmaschine gar nicht eingeschaltet sein soll
if (!$siteSearchFailed
&& strlen($this->site) > 0
&& (!isset($engine['hasSiteSearch'])
|| $engine['hasSiteSearch']->__toString() === "0")) {
continue;
}
# Setze Pfad zu Parser
$path = "App\Models\parserSkripte\\" . ucfirst($engine["package"]->__toString());
# Prüfe ob Parser vorhanden
if (!file_exists(app_path() . "/Models/parserSkripte/" . ucfirst($engine["package"]->__toString()) . ".php")) {
Log::error(trans('metaGer.engines.noParser', ['engine' => $engine["name"]]));
continue;
}
# Es wird versucht die Suchengine zu erstellen
$time = microtime();
try {
$tmp = new $path($engine, $this);
} catch (\ErrorException $e) {
Log::error(trans('metaGer.engines.cantQuery', ['engine' => $engine["name"], 'error' => var_dump($e)]));
continue;
}
# Ausgabe bei Debug-Modus
if ($tmp->enabled && isset($this->debug)) {
$this->warnings[] = $tmp->service . " Connection_Time: " . $tmp->connection_time . " Write_Time: " . $tmp->write_time . " Insgesamt:" . ((microtime() - $time) / 1000);
}
# Wenn die neu erstellte Engine eingeschaltet ist, wird sie der Liste hinzugefügt
if ($tmp->isEnabled()) {
$engines[] = $tmp;
}
}
return $engines;
}
public function isBildersuche()
{
return $this->fokus !== "bilder";
}
public function sumaIsAdsuche($suma, $overtureEnabled)
{
return
$suma["name"]->__toString() === "qualigo"
|| $suma["name"]->__toString() === "similar_product_ads"
|| (!$overtureEnabled
&& $suma["name"]->__toString() === "overtureAds")
|| $suma["name"]->__toString() == "rlvproduct";
}
public function sumaIsDisabled($suma)
{
return
isset($suma['disabled'])
&& $suma['disabled']->__toString() === "1";
}
public function sumaIsOverture($suma)
{
return
$suma["name"]->__toString() === "overture"
|| $suma["name"]->__toString() === "overtureAds";
}
public function sumaIsNotAdsuche($suma)
{
return
$suma["name"]->__toString() !== "qualigo"
&& $suma["name"]->__toString() !== "similar_product_ads"
&& $suma["name"]->__toString() !== "overtureAds";
}
public function requestIsCached($request)
{
return
$request->has('next')
&& Cache::has($request->input('next'))
&& unserialize(Cache::get($request->input('next')))['page'] > 1;
}
public function getCachedEngines($request)
{
$next = unserialize(Cache::get($request->input('next')));
$this->page = $next['page'];
$engines = $next['engines'];
if (isset($next['startForwards'])) {
$this->startForwards = $next['startForwards'];
}
if (isset($next['startBackwards'])) {
$this->startBackwards = $next['startBackwards'];
}
return $engines;
}
public function loadMiniSucher($xml, $subcollections)
{
$minisucherEngine = $xml->xpath('suma[@name="minism"]')[0];
$subcollections = urlencode("(" . implode(" OR ", $subcollections) . ")");
$minisucherEngine["formData"] = str_replace("<<SUBCOLLECTIONS>>", $subcollections, $minisucherEngine["formData"]);
$minisucherEngine["formData"] = str_replace("<<COUNT>>", sizeof($subcollections) * 10, $minisucherEngine["formData"]);
return $minisucherEngine;
}
# Passt den Suchfokus an, falls für einen Fokus genau alle vorhandenen Sumas eingeschaltet sind # Passt den Suchfokus an, falls für einen Fokus genau alle vorhandenen Sumas eingeschaltet sind
public function adjustFocus($sumas, $enabledSearchengines) public function adjustFocus($sumas, $enabledSearchengines)
{ {
...@@ -688,9 +737,9 @@ class MetaGer ...@@ -688,9 +737,9 @@ class MetaGer
$this->engines = $engines; $this->engines = $engines;
} }
/* /*
* Ende * Ende Suchmaschinenerstellung und Ergebniserhalt
*/ */
public function parseFormData(Request $request) public function parseFormData(Request $request)
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment