Commit 0f4775c6 authored by Karl Hasselbring's avatar Karl Hasselbring
Browse files

Merge branch...

Merge branch '263-metager-php-createsearchengines-in-mehr-unterfunktionen-zerlegen' into 'development'

Die Funktion createSearchEngines der MetaGer.php ist jetzt stark aufgeteilt

Closes #263

See merge request !433
parents 79e9fdf7 25b6ebbd
...@@ -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)
{ {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment