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.
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
Theoretisch sollte es so funktionieren, du solltest es aber testen um wirklich sicher zu sein.
Hallo,
habe ich gemacht. Das klappt aber nicht. Wo soll ich es denn sonst einfügen?
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.
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
So sollte es funktionieren. Da die Liste ja bereits über den eingefügten Code aktualisiert wird kannst du die Zeilen ruhig auskommentieren.