WBBLite 1.0.2 to phpbb 2.0.22 Converter

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12178
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Beitrag von Mahony »

Hallo
Nein der Fehler trat bei mir nicht auf. Der Befehl

Code: Alles auswählen

$sql->query("UPDATE phpbb_users SET user_id = user_id + 1 ORDER BY user_id DESC");
am Ende des Scripts, sorgt ja schon dafür dass die ID um eins erhöht wird.


Im WBB ist die ID 0 (also Null) für den Gast (also Anonymous) reserviert und der Admin erhält die ID 1 (eins), während im phpBB die ID -1 (minus Eins) für den Anonymous reserviert wird und die 1 (eins) und die 0 (Null) nicht genutzt werden.

Beim Konvertieren des WBB, wird die ID 0 nicht automatisch in die ID -1 umgewandelt sondern erst am Schluss des Scripts erstellt.

Also bekommt beim Umwandeln der erste User die ID 2 (zwei) im phpBB (was ja auch richtig ist - ist ja der Admin) und jeder weitere User bekommt ebenfalls eine ID die um eins höher ist (ebenfalls richtig).

P.S. Hast du die Überprüfung im ACP gestartet?
readme.txt hat geschrieben:Wichtig sind hier die folgenden Optionen:
1.Prüfe Benutzer- und Gruppen-Tabellen
2.Prüfe Beitrags- und Themen-Tabellen
3.Synchronisiere Foren und Themen
4.Synchronisiere Beitragszähler der Benutzer
5.Synchronisiere Moderatoren-Status
6.Suchindex neu aufbauen
P.P.S. Schau mal in die Datenbank, welche ID der erste User bei dir im WBB-Board hat.



Grüße: Mahony
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Masta85
Mitglied
Beiträge: 21
Registriert: 01.02.2007 02:46
Kontaktdaten:

Beitrag von Masta85 »

Die erste ID ist -1 für Anonymous, die zweite 2 für den Admin. Also in der phpbb_users Tabelle sind schon alle korrekt um 1 erhöht worden. Nur eben in der phpbb_topics Tabelle im Feld topic_poster is die ID jeweils um 1 zu niedrig, so dass es dann nimmer passt...

P.S.: Datenbankprüfung ändert nichts daran.

Edit: Ich bin mir nun ziemlich sicher, dass dieser Fehler generell auftritt. Statt die Variable um eins hochzuzählen, hab ich nun angeregt durch Deinen oben geposteten SQL Befehl folgendes am Schluss der wbb2phpbb.php geaddet:

Code: Alles auswählen

$sql->query("UPDATE phpbb_topics SET topic_poster = topic_poster + 1 ORDER BY topic_poster DESC");
Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12178
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Beitrag von Mahony »

Hallo
Ja du hattest Recht. Nach einem nochmaligen Test hatte ich das gleiche Problem. Es viel mir vorher nur nicht auf, da die Backups ja nicht von mir waren (hatte mir ein User zugeschickt). Die user ID stimmt aber die topic_poster ID muss natürlich auch um eins erhöht werden (ist ja logisch).


Also Danke nochmals für den Tipp.

P.S. Ich habe nun die wbb2phpbb.php entsprechend angepasst und den Download aktualisiert.



Grüße: Mahony
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Masta85
Mitglied
Beiträge: 21
Registriert: 01.02.2007 02:46
Kontaktdaten:

Beitrag von Masta85 »

Super, wäre das auch gelöst.

Wärst Du eigentlich an Erweiterungen für das Skript interessiert? Momentan arbeite ich daran, dass die Useravatare mitkopiert werden. Funktioniert auch schon, aber ich will natürlich auf Nummer sicher gehen, dass es korrekt läuft, und mit der Materie kenn ich mich eigentlich nicht aus, basiert auf Schnellaneignung...:D

Und da es Dein Code ist, kennst Du Dich ja am besten damit aus...

Also falls Du Interesse hättest, würde ich dann den hinzugefügten Code hier posten und es wäre schön, wenn Du den dann auf mögliche Fehler/Ergänzungen durchchecken würdest.

Ich ziehe auch in Erwägung noch die privaten Nachrichten mitzukopieren, falls mir das nicht zu aufwendig wird.
Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12178
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Beitrag von Mahony »

Hallo
Masta85 hat geschrieben:Wärst Du eigentlich an Erweiterungen für das Skript interessiert? Momentan arbeite ich daran, dass die Useravatare mitkopiert werden.
Ja Erweiterungen sind eine gute Sache. :P
Du kannst ja deine Anpassungen hier posten und ich schaue mir das an und teste das dann mal durch.



Grüße: Mahony
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Masta85
Mitglied
Beiträge: 21
Registriert: 01.02.2007 02:46
Kontaktdaten:

Beitrag von Masta85 »

Ok, hier nun meine Änderungen, um die Avatare mitzukopieren.

Config:

Code: Alles auswählen

#avatar paths
#you can use relative or full paths
#note: don't add slashes on the end
$wbb_path = '../forum/wbblite/images/avatars';
$phpbb_path = './images/avatars';

$rows = 50; // Anzahl der Zeilen, die pro Selbstaufruf bearbeitet werden
Da die Dateinamen der Avatare sich bei jeder Ausführung des Scripts ändern (gleiche Methode wie es das phpBB macht), lösche ich alle Bilder im Avatarpfad des phpBBs. Also bei step 0 bzw. 1 hinzufügen:

Code: Alles auswählen

  if (is_writeable($phpbb_path)){
  $exts = array('jpg', 'gif', 'png');
  $d = dir($phpbb_path);
  while (false !== ($entry = $d->read())){
   $file = $phpbb_path.'/'.$entry;
   $ext = ext($entry);
   if (is_file($file) && in_array($ext, $exts)) unlink($file);
  }
  $d->close();
 }else{
  $die  = 'Can\'t write in '.$phpbb_path."\n";
  $die .= 'Please check if the path is correct and that the permissions are set to 777';
  die($die);
 }

#get the file extension of filename
function ext($filename){
 return strtolower(substr(strrchr($filename, '.'), 1));
}
Nun der Teil mit dem Kopieren:

Code: Alles auswählen

}elseif ($step == 8){
#step 8
#copy avatars
 $pos = ($p*$rows)-$rows;
 $res = $sql->query("SELECT * FROM bb".$wbbn."_avatars LIMIT ".$pos.",".$rows);
 while ($row = $sql->fetch($res)){
  $old_avatar = $wbb_path.'/avatar-'.$row['avatarid'].'.'.$row['avatarextension'];
  $new_avatar = $phpbb_path.'/'.uniqid(rand()).'.'.$row['avatarextension'];
  // $new_avatar = $phpbb_path.'/avatar-'.$row['avatarid'].'.'.$row['avatarextension'];
  if (is_readable($old_avatar)){
   if (copy($old_avatar, $new_avatar)){
    @chmod($new_avatar, 0777);
    $sql->query("UPDATE `".$phpbb_prefix."users` SET `user_avatar` = '".basename($new_avatar)."', `user_avatar_type` = 1 WHERE `user_id` = ".$row['userid']);
   }
  }
 }
 $p++;
 $pos = ($p*$rows)-$rows;
 $countres = $sql->query("SELECT * FROM bb".$wbbn."_avatars LIMIT ".$pos.",".$rows);
 $countres = mysql_num_rows($countres);
 if ($countres == 0) nextstep('9');
 else nextstep('8&p='.$p);
}elseif ($step == 9){

}
Und am Schluss noch folgendes adden, um die Avatare anzuschalten:

Code: Alles auswählen

$sql->query("UPDATE phpbb_config SET config_value = 1 WHERE config_name = 'allow_avatar_upload'");
Ansonsten ist mir noch aufgefallen, dass am Schluss der Datei einige SQL Befehle mit statischem Präfix ausgeführt werden. Sollte man noch Variabel machen.

Und die Funktion nextstep() fände ich besser, wenn der Dateiname des Skriptes selbst variabel wäre:

Code: Alles auswählen

function nextstep($nextstep){
 echo '<script language="Javascript">window.location.href = "'.$_SERVER['PHP_SELF'].'?step='.$nextstep.'"</script>';
 #echo '<a href="'.$_SERVER['PHP_SELF'].'?step='.$nextstep.'">click</a>';
 exit;
}
Edit: Übernehme das mal noch nicht so. Ich glaube da befindet sich noch ein Fehler beim Kopiervorgang, muss ich noch prüfen....

Nochmal Edit: Ich habe den Code hier aktualisiert, und er ist nun ok, denke ich.
Zuletzt geändert von Masta85 am 10.02.2007 17:32, insgesamt 3-mal geändert.
Masta85
Mitglied
Beiträge: 21
Registriert: 01.02.2007 02:46
Kontaktdaten:

Beitrag von Masta85 »

Mal ne Frage...wie ist beim folgenden Bereich gedacht, wie er laufen soll? Ich dachte erst, die SQL Abfrage holt bei jedem Neuaufruf immer die nächsten 50 Datensätze.

Code: Alles auswählen

 $pos1 = ($p-1)*50;
 $pos2 = $p*50;
 $res = $sql->query("SELECT * FROM bb".$wbbn."_users ORDER BY userid DESC LIMIT ".$pos1.",".$pos2);

 while ($row = $sql->fetch($res)){
	// some code
 }#end while

 $p++;
 $pos1 = ($p-1)*50;
 $pos2 = $p*50;
 $countres = $sql->query("SELECT * FROM bb".$wbbn."_users LIMIT ".$pos1.",".$pos2);
 $countres = mysql_num_rows($countres);
// exit;
 if ($countres == 0) nextstep('3');
 else nextstep('2&p='.$p);
Sagen wir $p=1:
Dann werden 50 Datensätze ab 0 geholt. Der Fall ist OK, aber eben der einzige...

$p=2
Es werden nun 100 Datensätze ab 0 geholt. Nun werden 0-50 nochmal geholt und entsprechend verarbeitet.

$p=3
Geholt werden 150 Datensätze ab 0. 0-100 wieder umsonst bearbeitet.

Ist sicher nicht Deine Absicht gewesen. Aufgefallen war wir das bei den Avataren...Es wurden mehr Bilder kopiert, als im WBBLite Ordner drin waren, da die Schleife zu oft durchlaufen wurde. Btw, in meinem letzten Posting beim Kopiervorgang der Avatare ist drin, dass immer nur die nächsten 50 geholt werden.

Edit: Die Umwandlung meines Forums dauert nun statt 8 Stunden nur noch 10 Minuten :)
Zuletzt geändert von Masta85 am 16.02.2007 00:41, insgesamt 1-mal geändert.
Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12178
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Beitrag von Mahony »

Hallo
Mal ne Frage...wie ist beim folgenden Bereich gedacht, wie er laufen soll? Ich dachte erst, die SQL Abfrage holt bei jedem Neuaufruf immer die nächsten 50 Datensätze.
Das war eigentlich auch die Absicht dahinter. Da muss mir wohl ein Fehler unterlaufen sein :oops:
Wie ich sehe, hast du die Anzahl der Zeilen, die pro Selbstaufruf aus der Datenbank geholt und verarbeitet werden auf 200 hoch gesetzt (das könnte auf langsamen Servern zu Problemen führen - hast du das mal Online getestet? - ich wäre da eher für etwa 100 Zeilen, denn es soll ja möglichst überall laufen).

Ansonsten sind deine Anpassungen super. Danke für deine Mithilfe. Ich teste das ganze jetzt noch einmal auf meinem lokalen Server mit verschiedenen Konfigurationen und wenn alles zufriedenstellend funktioniert, werde ich deine Anpassungen (mit deiner Erlaubniss) übernehmen und die Anleitung noch entsprechend abändern (da ja der Pfad für die Avatare in dem Script, vom User, korrekt angegeben werden muss).

P.S. Ich werde nach Abschluss der Tests die Ergebnisse dann hier (per Edit) veröffentlichen.

Edit: Die Tests sind nun abgeschlossen und es hat alles perfekt funktioniert. Die readme.txt wurde um die nötigen Hinweise zur Pfadangabe erweitert. Ich habe sicherheitshalber den Standartwert für die Anzahl der Zeilen, die pro Selbstaufruf aus der Datenbank geholt und verarbeitet werden auf 100 herunter gesetzt. Somit sollte das Script auf allen Servern funktionieren. Ich habe mir außerdem mal erlaubt Masta85 in der readme.txt als Mitwirkenden bei der Optimierung des Scripts zu erwähnen (Danke nochmals an dieser Stelle an Masta85).

Die Download-Links zum Converter wurden im Eingangsposting editiert auf die neueste Version.






Grüße: Mahony
Zuletzt geändert von Mahony am 11.02.2007 01:09, insgesamt 1-mal geändert.
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Masta85
Mitglied
Beiträge: 21
Registriert: 01.02.2007 02:46
Kontaktdaten:

Beitrag von Masta85 »

Klar hast Du die Erlaubnis. Und wegen den Zeilen...kann man ja selbst einstellen, und rumporbieren. Auf meinem lokalen Rechner war die Ausführungszeit immer kleiner als 10 Sekunden, auf dem Webserver habe ich es (noch) nicht getestet. Ein Standardwert von 50 oder 100 wäre denke ich auf jeden Fall zu verkraften.
Masta85
Mitglied
Beiträge: 21
Registriert: 01.02.2007 02:46
Kontaktdaten:

Beitrag von Masta85 »

So, ich habe nun noch eingebaut, dass private Nachrichten mitkopiert werden. Man hat dann allerdings auf jeden Fall mehr private Nachrichten in der phpBB Datenbank, als in der vom WBB.

Grund:
Wenn man im WBB eine PN verschickt, und sie dann aus seinem Postausgang löscht, kommt sie trotzdem beim Empfänger an. Wenn man im phpBB eine PN verschickt, landet sie erst einmal unter "Gesendete Nachrichten". Wenn man sie nun löscht, und der Empfänger hat sie noch nicht gelesen, verschwindet sie komplett aus der Datenbank, und der Empfänger bekommt nichts. Wenn der Empfänger sie aber liest, wird die PN dupliziert, sie kommt dann also doppelt in der Datenbank vor. So habe ich das ganze jedenfalls verstanden :D

Ansonsten hab ich nur noch kleine Änderungen am Skript vorgenommen, eher Schönheitskorrekturen, also nicht der Rede Wert.

Hier das geänderte Skript: http://kickmeto.gellar.net/phpbb/index.php?download=0

Ich hoffe, dass sich keine Fehler eingeschlichen haben. Bei meinen Tests lief jedenfalls alles wunderbar.

Was mir noch aufgefallen ist: prinzipiell ist das Skript ja so konzipiert, dass man jeden Schritt mehrfach ausführen kann, ohne dass Doppeleinträge in die DB gehen. Das geht aber nicht bei den Schritten, bei denen etwas mit der User ID gemacht wird, da sie am Schluss ja immer um 1 hochgezählt werden. Naja, ist ja nicht schlimm, es sollte ja alles beim ersten Durchlauf funktionieren...

Nun wird denke ich alles Wesentliche mitkopiert, und das dürfte die final version sein :D

Btw: Wieso warnst Du in der readme eigentlich davor, es bei mehreren Forumkategorien anzuwenden? Also ich habs mit vier Kategorien getestet, und es scheint problemlos zu laufen...
Zuletzt geändert von Masta85 am 16.02.2007 00:40, insgesamt 1-mal geändert.
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“