Commit 25b6ebbd authored by Karl's avatar Karl

Die Funktion createSearchEngines der MetaGer.php ist jetzt stark aufgeteilt

parent 38e7788b
......@@ -361,19 +361,21 @@ class MetaGer
public function createSearchEngines(Request $request)
{
# Wenn es kein Suchwort gibt
if (!$request->has("eingabe")) {
return;
}
# Überprüfe, welche Sumas eingeschaltet sind
$xml = simplexml_load_file($this->sumaFile);
$sumas = $xml->xpath("suma");
$enabledSearchengines = [];
$overtureEnabled = false;
$sumaCount = 0;
$sumas = $xml->xpath("suma");
/* 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:
* Handelt es sich um spezielle Suchmaschinen die immer an sein müssen
* Wenn es Overture ist vermerken dass Overture an ist
......@@ -381,54 +383,24 @@ class MetaGer
* Zu Liste hinzufügen
*/
foreach ($sumas as $suma) {
if ($this->fokus === "angepasst") {
if ($request->has($suma["name"])
|| ($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;
}
if ($this->sumaIsSelected($suma, $request)
|| ($this->isBildersuche()
&& $this->sumaIsAdsuche($suma, $overtureEnabled))
&& (!$this->sumaIsDisabled($suma))) {
if ($this->sumaIsOverture($suma)) {
$overtureEnabled = true;
}
} else {
$types = explode(",", $suma["type"]);
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;
}
if ($this->sumaIsNotAdsuche($suma)) {
$sumaCount += 1;
}
$enabledSearchengines[] = $suma;
}
}
# Sonderregelung für alle Suchmaschinen, die zu den Minisuchern gehören. Diese können alle gemeinsam über einen Link abgefragt werden
$subcollections = [];
$tmp = [];
$tmp = [];
foreach ($enabledSearchengines as $engine) {
if (isset($engine['minismCollection'])) {
$subcollections[] = $engine['minismCollection']->__toString();
......@@ -439,91 +411,41 @@ class MetaGer
}
$enabledSearchengines = $tmp;
if (sizeof($subcollections) > 0) {
$count = sizeof($subcollections) * 10;
$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;
$enabledSearchengines[] = $this->loadMiniSucher($xml, $subcollections);
}
if ($sumaCount <= 0) {
$this->errors[] = trans('metaGer.settings.noneSelected');
}
$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);
$typeslist = [];
$counter = 0;
if ($request->has('next') && Cache::has($request->input('next')) && unserialize(Cache::get($request->input('next')))['page'] > 1) {
$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'];
}
if ($this->requestIsCached($request)) {
$engines = $this->getCachedEngines($request);
} else {
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;
}
}
$engines = $this->actuallyCreateSearchEngines($enabledSearchengines, $siteSearchFailed);
}
# Wir starten die Suche manuell:
# Wir starten alle Suchen
foreach ($engines as $engine) {
$engine->startSearch($this);
}
$this->adjustFocus($sumas, $enabledSearchengines);
/* Nun passiert ein elementarer Schritt.
* Wir warten auf die Antwort der Suchmaschinen, da wir vorher nicht weiter machen können.
* Aber natürlich nicht ewig.
* Die Verbindung steht zu diesem Zeitpunkt und auch unsere Request wurde schon gesendet.
* Wir geben der Suchmaschine nun bis zu 500ms Zeit zu antworten.
/* Wir warten auf die Antwort der Suchmaschinen
* Die Verbindung steht zu diesem Zeitpunkt und auch unsere Requests wurden schon gesendet.
* Wir zählen die Suchmaschinen, die durch den Cache beantwortet wurden:
* $enginesToLoad zählt einerseits die Suchmaschinen auf die wir warten und andererseits
* welche Suchmaschinen nicht rechtzeitig geantwortet haben.
*/
# Wir zählen die Suchmaschinen, die durch den Cache beantwortet wurden:
$enginesToLoad = [];
$canBreak = false;
foreach ($engines as $engine) {
......@@ -532,8 +454,6 @@ class MetaGer
$canBreak = true;
}
} else {
# Das Array zählt einerseits die Suchmaschinen, auf die wir warten und andererseits
# welche Suchmaschinen nicht rechtzeitig geantwortet haben.
$enginesToLoad[$engine->name] = false;
}
}
......@@ -543,6 +463,135 @@ class MetaGer
$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
public function adjustFocus($sumas, $enabledSearchengines)
{
......@@ -688,9 +737,9 @@ class MetaGer
$this->engines = $engines;
}
/*
* Ende
*/
/*
* Ende Suchmaschinenerstellung und Ergebniserhalt
*/
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