bbPress Logo

Ein Forensystem sollte in den meisten Fällen einen recht guten Funktionsumfang haben, BB-Code unterstützen und viele Werkzeuge für eine gute Administration und Moderation besitzen. Das alles trifft auf bbPress nicht zu, es ist ein extrem schlankes Forensystem das auf Schnörkel wie das Aufteilen von Threads, ein Moderationsprotokoll, Geburtstagserinnerungen und selbst auf die allseits bekannten BB-Code-Buttons verzichtet. Wozu dann dieser Artikel? Nun, in der Einfachheit liegen auch gewisse Vorteile.

Im Grunde ging es darum, dass ich in ein bestehendes Projekt ein Forensystem integrieren wollte. Das Projekt baut auf keinem bekannten Content Management System auf, ist also eine komplette Eigenentwicklung. Die Integration von größeren Forensystemen wie etwa dem phpBB3 wäre enorm aufwendig geworden und große Ansprüche habe ich in diesem Fall nicht, das Forum ist nur eine kleine Zugabe für die Nutzer der Seite: Kategorien, Threads, Posts – mehr braucht es nicht. Natürlich könnte man ein solches System auch selbst programmieren, das wäre allerdings doch erheblicher Aufwand den ich mir sparen wollte. Also habe ich mir den Aufbau von bbPress genauer vorgenommen und habe dann angefangen eine Integration zu starten. Bitte beachtet, dass in den gezeigten Codebeispielen die Variablen an euer System angepasst werden müssen. Ich übernehme natürlich keine Haftung für Schäden an Datenbanken, Dateien oder Ausfälle eurer Seite. Die Devise lautet: Backup! Backup! Backup!

Passwortprobleme
Das erste Problem ist, dass in meiner Eigenentwicklung die Zugangsdaten als simpler md5-Hash gespeichert sind, bbPress diese allerdings mit einem eigenen System verschlüsselt. Abhilfe schafft hier das Plugin MD5 insecurity for bbPress. Dadurch ist es möglich Zugangsdaten auch als md5 zu speichern. Nun musste ich nur noch die bestehenden Benutzer meiner Seite auslesen und in die Datenbank von bbPress kopieren.

Registrierung
Nun ein neues Theme für bbPress angelegt und die Stellen gesucht, an denen auf die Registrierung verwiesen wird. Dort habe ich nun einfach den Link geändert und auf die Registrierung meiner eigentlichen Seite verwiesen. Zur Sicherheit dann noch in der register.php von bbPress eine Weiterleitung auf meine eigentliche Registrierung eingefügt.

header("Location: /meine-registrierung.php");
exit;

Nun habe ich mein Script für die Registrierung angepasst, damit beim Anlegen eines neuen Benutzers dieser auch gleich in der Datenbank des Forums angelegt wird. Da ich natürlich prüfe ob die angegebene E-Mailadresse korrekt ist wird der Benutzerstatus für das Forum zunächst auf inaktiv gesetzt. Dies wird dann später behoben.

mysql_query("INSERT INTO bb_users
	VALUES (
	'" .  $new_user_id . "',
	'" .  $_POST['username'] . "',
	'" .  md5($_POST['password']) . "',
	'" .  strtolower($_POST['username']) . "',
	'" .  strtolower($_POST['email']) . "',
	'',
	'',
	'0',
	'" .  $_POST['username'] . "')");

mysql_query("INSERT INTO bb_usermeta
	VALUES (
	'',
	'" .  $new_user_id . "',
	'bb_capabilities',
	'a:1:{s:8:"inactive";b:1;}')")

Nun noch in das Script um die E-Mailadresse zu überprüfen die Freischaltung des Benutzers im Forum einbauen. Schon sollten neue Benutzer automatisch auch im Forum registriert sein und sich mit den gleichen Zugangsdaten anmelden können.

mysql_query("UPDATE bb_usermeta
	SET meta_value = 'a:1:{s:6:"member";b:1;}'
	WHERE user_id = '" . $this_user_id . "'
	AND meta_key = 'bb_capabilities'
	LIMIT 1");

Passwort ändern
Der letzte wichtige Schritt ist bei Änderungen des Passworts auf der eigentlichen Seite. Hier muss natürlich auch das Passwort im Forum geändert werden.

mysql_query("UPDATE bb_users
	SET user_pass = '" .  md5($_POST['password']) . "'
	WHERE ID = '" . $this_user_id . "'
	LIMIT 1");

Im letzten Schritt sollte im Theme des Forums nun auch jeglicher Verweis auf die Benutzerprofile entfernt werden, denn dadurch könnte der Benutzer sein Passwort im Forum ändern und hätte dann das unerwünschte Resultat, dass die Zugangsdaten sich für die eigentliche Seite und das Forum unterscheiden. Dazu habe ich in dem Templates alle Verweise auf Benutzerprofile geändert um sie auf meine eigenen Profile umzuleiten. Hier ist etwas Handarbeit angesagt, dann um an Informationen wie den Benutzernamen ohne Link zu gelangen muss man sich durch den Code von bbPress wühlen. Dieser ist aber recht simpel aufgebaut.

Wichtig ist hier insbesondere die Anpassung der Theme-Datei “post.php”. Einige wichtige Befehle für Benutzerdaten sind:

get_post_author_id( $post_id ) /* ID des Post-Autors */
get_post_author( $post_id ) /* Name des Post-Autors */
get_post_author_title( $post_id ) /* Rang / Titel des Autors ohne Link */

Um sicher zu gehen, dass wirklich keine Änderungen an den Benutzerdaten über das Forum vorgenommen habe ich die profile.php im Hauptverzeichnis von bbPress noch dazu veranlasst Benutzer auf die Account-Seite meines Hauptsystems umzuleiten.

header("Location: /mein-account.php");
exit;

Zuletzt noch im Template login.php den Bereich Password Recovery löschen, denn sonst entstehen auch hier Probleme mit unterschiedlichen Zugangsdaten. Natürlich muss bei Passwortänderungen über ein ähnliches System auf der Hauptseite auch das Passwort im Forum geändert werden.

Das waren auch schon die wichtigsten Änderungen. Natürlich kann man über das Template-System noch allerlei Anpassungen vornehmen und selbstverständlich muss man auch in die Gestaltung des Forums noch etwas Zeit investieren. Trotzdem habe ich für die vollständige Anpassung meiner Seite (inklusive des Designs) nur drei bis vier Stunden gebraucht, schwer vorstellbar in der gleichen Zeit ein ähnlich gutes, eigenes Forensystem zu schreiben oder eines der großen Systeme so mit einer anderen Seite zu verbinden. Wer für seine Hauptseite WordPress einsetzt kann sich übrigens glücklich schätzen: WordPress und bbPress arbeiten perfekt zusammen und eine Integration ist ohne die oben genannten Änderungen möglich.

Angemerken muss ich noch, dass sich bbPress über einfach zu installierende Plugins deutlich erweitern lässt. BB-Code, Signaturen und ähnliche Dinge lassen sich nachrüsten, auch wenn ich von der Qualität einiger Plugins nicht wirklich überzeugt bin.

bbPress Deutschland

MD5 insecurity for bbPress