Hallo, Gast! (Registrieren)

Wir wünschen allen Besuchern frohe und besinnliche Weihnachten!

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
fixparentlists.php
#1
Wie bereits bekannt befindet sich im MyBB ein Bug, durch den beim Verschieben von Foren die Liste der übergeordneten Foren nicht aktualisiert wird. Das kann im schlimmsten Falle dazu führen, dass Foren gelöscht werden, die nicht gelöscht werden sollen.

Die angefügte Datei aktualisiert die Listen der übergeordneten Foren und sollte immer ausgeführt werden, nachdem Foren verschoben wurden. Dazu muss die Datei einfach in den Ordner des Forums kopiert und über den Browser aufgerufen werden (es erscheint nur eine weiße Seite).

Der Fehler wird mit MyBB 1.2 behoben.


Angehängte Dateien
.php   fixparentlists.php (Größe: 1,05 KB / Downloads: 38)

Gruß,
Michael
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
#2
Hallo,
kann ich diesen Code denn auch so einfügen, dass er nach jeder Änderung bei den Foren aufgerufen wird? Oder könnte das, was zerstören?

Ich habe das mal an der folgenden Stelle angefügt:
PHP-Code:
        if($pid != $forum['pid'])
        {
            
$parentlist makeparentlist($fid);
            
$db->query("UPDATE ".TABLE_PREFIX."forums SET parentlist='$parentlist' WHERE fid='$fid'");
            
// Rebuild the parentlist of all of the forums this forum was a parent of
            
$query $db->query("SELECT * FROM ".TABLE_PREFIX."forums WHERE CONCAT(',',parentlist,',') LIKE '%,$fid,%'");
            while(
$childforum $db->fetch_array($query))
            {
                
$parentlist makeparentlist($childforum['fid']);
                
$db->query("UPDATE ".TABLE_PREFIX."forums SET parentlist='$parentlist' WHERE fid='".$childforum['fid']."'");
            }
// --MODIFIZERIUNG START-- //
$query $db->query("SELECT fid FROM ".TABLE_PREFIX."forums");
$done 0;
while(
$row $db->fetch_array($query))
{
    
$newparentlist addslashes(makeparentlist($row['fid']));
    
$db->query("UPDATE ".TABLE_PREFIX."forums SET parentlist='$newparentlist' WHERE fid='$row[fid]' LIMIT 1");
    
$done++;
}
echo 
$done.' forums updated';
// --MODIFIZERIUNG ENDE-- //
        
}
        
$cache->updateforums();
        
$cache->updateforumpermissions(); 
Aber es will nicht klappen. Wobei er doch da prüft ob die gewählte pid nicht so ist wie die alte. Wenn das der Fall ist macht er irgendwas in der Datenbank und danach lass ich ihn die Parentslist neu machen. Warum geht das nicht?

Mfg
Higgins
#3
Theoretisch sollte es so funktionieren, du solltest es aber testen um wirklich sicher zu sein.

Gruß,
Michael
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
#4
Hallo,
habe ich gemacht. Das klappt aber nicht. Wo soll ich es denn sonst einfügen?
#5
Im Zweifelsfall kannst du den Code einfach an den Anfang der Datei admin/forums.php einfügen. So wird die Liste immer aktualisiert, wenn irgendetwas an den Foren bearbeitet wird.

Gruß,
Michael
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
#6
So habe das mal ausprobiert. Scheint alles zu klappen, aber man muss noch eine Änderung im Code machen:

Code:
if($mybb->input['action'] == "do_add") {
//$parentlist = makeparentlist($fid);
//$db->query("UPDATE ".TABLE_PREFIX."forums SET parentlist='$parentlist' WHERE fid='$fid'");

Und zwar in der Hinzufügen-Funktion die zwei Codezeilen auskommentieren, sonst gibt es Fehlermeldungen.

Oder führt das zu Problemen`?

Mfg
Yast
#7
So sollte es funktionieren. Da die Liste ja bereits über den eingefügten Code aktualisiert wird kannst du die Zeilen ruhig auskommentieren.

Gruß,
Michael
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.