phpBB Avatar Bilder importieren
Im letzten Artikel habe ich euch gezeigt wie man SVG zu PNG konvertieren kann. Das war nötig, damit ich Avatar Bilder in mein phpBB Forum automatisch zuweisen kann. Nun, da wir ein PNG erstellt haben zeige ich euch wie man in phpBB Avatar Bilder importieren kann.
phpBB Avatar Bilder importieren
Man kann ein phpBB Forum in Kombination mit einem anderen Programm verwenden. Im einfachsten Fall passt man das Design der beiden Seiten aufeinander ab, so dass eine fließende Integration zustande kommt. Sobald man im anderen Programm ein Benutzeraccount samt Login benutz macht es Sinn, beide Programme durch eine Single Sign On Lösung zu kombinieren. Ein Abgleich von Avatar Bildern verbessert dabei zusätzlich die Integration der beiden Systeme.
Source Code
anbei mein vollständiger Code für das Problem als PHP Skript:
$new_filename = $phpbb_root_path."images/avatars/upload/".$avatar_salt."_".$forum_user_id.".png"; $img = imagecreatefrompng($filename); imagealphablending($img, true); imagesavealpha($img, true); $width = 90; $height = 90; $new_image = imagecreatetruecolor ( $width, $height ); imagealphablending($new_image , false); imagesavealpha($new_image , true); imagecopyresampled( $new_image, $img, 0, 0, 0, 0, $width, $height, imagesx ( $img ), imagesy ( $img ) ); //save image to filesystem imagepng($new_image, $new_filename, 9, PNG_ALL_FILTERS); $sql = "UPDATE phpbb_users SET user_avatar = :user_avatar, user_avatar_type = :user_avatar_type, user_avatar_width = 90, user_avatar_height = 90 WHERE user_id = :user_id"; $ps = $con->prepare($sql); $ps->bindValue('user_avatar', $forum_user_id.".png"); $ps->bindValue('user_avatar_type', 1); //avatar.driver.upload for phpbb 3.1 $ps->bindValue('user_id', $forum_user_id); $ps->execute();
In der ersten Zeile wird der vollständige relative Pfad zum Bild im phpBB Upload Ordner angegeben. Das PNG Bild liegt zu diesem Zeitpunkt dort noch nicht. In den phpBB Upload Ordner werden die Bilder kopiert, wenn sie über die Funktion in den Profileinstellungen unter phpBB hochgeladen werden. Wichtig: der Dateiname ist immer in der Form avatar_salt dann ein ‚_‘ und dann die ID des Benutzers:
- avatar_salt
jedes phpBB Forum legt bei der Installation in der Datenbank einen zufälligen avatar_salt Schlüssel an. Man findet diesen in der config Datenbanktabelle von phpBB. In meinem Fall ist dieser 1036bed3a83533b9854b6f741a3498b1. Der avatar_salt ist eine Security Funktion und verhindert, dass man den Dateinamen von Uploads erraten kann. Somit ist es nicht mehr möglich dem System Dateien unterzuschieben. - user_id
das ist die eindeutige Identifikationsnummer jedes Benutzers. Man findet diese in der Tabelle users der phpBB Datenbank.
In der Variable filename wird der absolute oder relative Pfad samt Dateiname zum originalen Bild angegeben. In meinem Fall ist dies bereits ein PNG Bild, jedoch mit der falschen Skalierung. In den folgenden Zeilen stelle ich sicher, dass auch die Transparenz des Bildes erhalten bleibt und definierte mit width und height die neue Größe. Das Bild war bereits quadratisch, wird nun aber auf das für phpBB Avatar Bild übliche Format von 90×90 Pixel skaliert. Gespeichert wird das neue Bild mit imagepng. Man beachte, dass dort bereits als Ablageort der Upload Ordner von phpBB angegeben ist.
Änderungen in der Datenbank
Das neue Avatar Bild liegt nun bereits im korrekten Ordner, wird aber im Forum noch nicht angezeigt. Das liegt daran, dass die Information darüber noch nicht in der Datenbank gespeichert wurde. Wir müssen nun noch 2 Werte der users Tabelle in der phpBB Datenbank ändern. Das SQL Statement findest du im oben angegebenen Code. Es gibt folgende 3 Variablen die wir in PHP anpassen:
- user_avatar
der Dateiname der Bilddatei im Upload Ordner - user_avatar_type
unter phpBB 3.1 muss man auch den Typ des Avatar angeben. Für ein hochgeladenes Bild ist das die 1. - user_id
die ID des Benutzers. Diese benötigen wir um zu wissen welche Zeile der users Tabelle geändert werden muss.
Fazit
Man kann über ein PHP Skript phpBB Avatar Bilder importieren. Das macht Sinn, wenn man phpBB zusammen mit externen Programmen wie WordPress oder einem anderen CMS verwendet und bereits vorhandene Profilbilder verwenden möchte.