[Bug 4.8.x] Suche

Gesperrt
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

[Bug 4.8.x] Suche

Beitrag von Spider IT »

Hallo,

in der 4.8.x (und wahrscheinlich auch schon früher) bis einschließlich 4.8.13 (aktuelle Version) ist ein gravierender aber leicht behebbarer Fehler in der Suche:

In der Datei /contenido/classes/class.search.php ist (ab Zeile 1147) die Funtion getSubTree() falsch aufgebaut.
Bei folgendem Aufbau

Code: Alles auswählen

Cat. 34
    Cat. 2
    Cat. 3
        Cat. 13
        Cat. 26
    Cat. 8
(nur ein Beispiel) liefert diese Funktion als Unterkategorien der Kategorie 2 ALLE EBENEN unter der Kategorie 34!

Die Lösung ist denkbar einfach: Contenido hat bereits eine passende, global verfügbare Funktion DIE FUNKTIONIERT.
Ich habe das Problem gelöst indem ich eine Zeile in der nachfolgenden Funktion getSearchableArticles() "ausgetauscht" habe:

Code: Alles auswählen

	function getSearchableArticles($search_range)
	{

		$cat_range = array();
		if (array_key_exists('cat_tree', $search_range) AND is_array($search_range['cat_tree']))
		{
			if (count($search_range['cat_tree']) > 0)
			{
				foreach($search_range['cat_tree'] as $cat)
				{
#					$cat_range = array_merge($cat_range, $this->getSubTree($cat));         <-- Aufruf der fehlerhaften Funktion raus
					$cat_range = array_merge($cat_range, conDeeperCategoriesArray($cat));  <-- Aufruf der fehlerfreien Funktion rein

				}
			}
		}
		
		if (array_key_exists('categories', $search_range) AND is_array($search_range['categories']))
		{
			if (count($search_range['categories']) > 0)
			{
				$cat_range = array_merge($cat_range, $search_range['categories']);
			}
		}
	
		$cat_range = array_unique($cat_range);
		$sCatRange = implode("','", $cat_range);
Bitte korrigiert dies in der nächsten Version, denn es betrifft sicherlich eine Menge Installationen wo nachträglich die Struktur geändert wird.


Generell wäre bei der Suche eine Prüfung der Berechtigung wünschenswert.
Diese habe ich vorerst provisorisch ins Modul integriert, wobei die Liste der inkludierten Kategorien gegen die erlaubten Kategorien bereinigt wird.
Leider sind hiervon natürlich keine Unterkategorien betroffen, weshalb dies nur auf eine Ebene funktioniert.
Der Ansatz:

Code: Alles auswählen

#Settings
$oArticleProp = new Article_Property($db, $cfg);
$iArtspecReference = 2;

$cApiClient = new cApiClient($client);
$sSearchRange = $cApiClient->getProperty('searchrange', 'include');
$aSearchRange = explode(',', $sSearchRange);

# Spider IT Deutschland - Rene Mansveld :: NUR Includes fuer den User ->
$oFeNav = new Contenido_FrontendNavigation($db, $cfg, $client, $lang, $cfgClient);
$oFeNav->setAuth($auth);
$aSubCategories = $oFeNav->getSubCategories(34, false, false, 3);       <-- Hier steht die idcat aus dem Beispiel oben fest drin (nicht schoen)
$aNewSearchRange = array();
for ($i = 0; $i < count($aSearchRange); $i ++) {
    if (in_array($aSearchRange[$i], $aSubCategories)) {
        $aNewSearchRange[] = $aSearchRange[$i];
    }
}
#var_dump($aNewSearchRange);
# Spider IT Deutschland - Rene Mansveld :: NUR Includes fuer den User <-

#Multilingual settings
$sYourSearchFor = mi18n("Ihre Suche nach");
$sMore = mi18n("mehr");
Gruß
René
Gesperrt