REDAXO-AddOn für die Integration von Flarum 2.0 Forum mit Single Sign-On (SSO), PHPBB-Migration und erweiterten User-Verwaltungsfunktionen.
- ✅ Automatische Flarum 2.0 Installation
- ✅ PHPBB → Flarum Migration (User, Tags, Discussions, Posts, Profile)
- ✅ Single Sign-On (SSO) ohne externe Dependencies
- ✅ Registrierung mit Double Opt-In via YForm
- ✅ YForm User-ID Migration Tool mit Backup/Restore
- ✅ Flarum UI Anpassungen (Login/Signup verstecken)
- ✅ PHP Helper-Klassen für Frontend-Integration
- AddOn installieren über REDAXO Backend
- Flarum installieren: Backend → Flarum Bridge → Installation
- PHPBB migrieren (optional): Backend → Flarum Bridge → PHPBB Migration
Automatische Installation von Flarum 2.0:
- Erstellt Flarum-Verzeichnis (
/var/www/html/flarum) - Installiert via Composer
- Konfiguriert Datenbank (DB-ID 2)
- Fügt PHPBB-Datenbank hinzu (DB-ID 3)
- Migriert PHPBB-User nach Flarum
- Importiert Profile-Daten (first_name, last_name, organization, country, phone, website, birthdate)
- Speichert in
rex_flarum_registrationTabelle - Erstellt User-Mapping in
rex_flarum_user_map
- Migriert PHPBB-Foren als Flarum-Tags
- Mapping:
rex_flarum_migration_map
- Migriert PHPBB-Topics als Flarum-Discussions
- Konvertiert BBCode zu Markdown
- Migriert PHPBB-Posts als Flarum-Posts
- BBCode → Markdown Konvertierung
Direkter Zugriff auf Flarum-Datenbank (DB-ID 2) ohne externe API:
Cookie-basierte Authentifizierung:
- Cookie:
flarum_remember - Token-Typ:
session_remember - Path:
/
Methoden:
use FriendsOfREDAXO\FlarumBridge\FlarumAuthenticator;
// User einloggen
$token = FlarumAuthenticator::login($userId);
// User ausloggen
FlarumAuthenticator::logout();
// Aktuellen User abrufen
$user = FlarumAuthenticator::getCurrentUser();Login: /index.php?flarum_login=1
POST data: username, password
Response: { "success": true, "user": {...} }Logout: /index.php?flarum_logout=1
Response: { "success": true }Status: /index.php?flarum_status=1
Response: { "loggedIn": true, "user": {...} }Register: /index.php?flarum_register=1
POST data: username, email, password, first_name, last_name, ...
Response: { "success": true, "message": "Aktivierungs-Email versendet" }Activate: /index.php?flarum_activate=1&token=xxx
Response: { "success": true, "message": "Account aktiviert" }Felder:
username,email,password_hashfirst_name,last_name,organization,countryphone,website,birthdatestatus(pending/activated)activation_token,flarum_user_id
- Double Opt-In aktivieren/deaktivieren
- Admin-Email für Aktivierungs-Mails
- rex_list mit allen Registrierungen
- Aktivieren/Löschen Buttons
- Status-Badges
Migriert User-IDs in beliebigen YForm-Tabellen:
Funktionen:
- Wähle YForm-Tabelle + Feld mit User-IDs
- Automatisches Backup vor Migration
- UPDATE mit CASE-Statement:
- PHPBB-IDs mit Mapping → Flarum-IDs
- Unbekannte/Leere IDs → User-ID 2
- Backup wiederherstellen/löschen
Backup-Format: tabellenname_backup_YYYYMMDD_HHMMSS
PHP-Helper für Frontend-Integration:
use FriendsOfREDAXO\FlarumBridge\FlarumUser;
// Login-Check
if (FlarumUser::isLoggedIn()) {
$user = FlarumUser::getCurrentUser();
echo 'Hallo ' . $user['username'];
}
// User per ID
$user = FlarumUser::getUserById(123);
// User per Username
$user = FlarumUser::getUserByUsername('klxm');
// Erweiterte Profil-Daten
$profile = FlarumUser::getUserProfile(123);
echo $profile['first_name'] . ' ' . $profile['last_name'];// Posts eines Users
$posts = FlarumUser::getUserPosts($userId, $limit = 10, $offset = 0);
foreach ($posts as $post) {
echo $post['discussion_title'] . ': ' . $post['content'];
}
// Discussions eines Users
$discussions = FlarumUser::getUserDiscussions($userId, 10);
// Anzahl Posts/Discussions
$postCount = FlarumUser::countUserPosts($userId);
$discussionCount = FlarumUser::countUserDiscussions($userId);
// Neueste Discussions
$latest = FlarumUser::getLatestDiscussions(10);// Gruppen eines Users
$groups = FlarumUser::getUserGroups($userId);
foreach ($groups as $group) {
echo $group['name_singular'];
}
// Gruppenzugehörigkeit prüfen
if (FlarumUser::isInGroup($userId, 'Moderator')) {
echo 'User ist Moderator';
}
// Admin/Moderator Check
if (FlarumUser::isAdmin($userId)) {
echo 'User ist Admin';
}
if (FlarumUser::isModerator($userId)) {
echo 'User ist Moderator';
}
// Alle Gruppen
$allGroups = FlarumUser::getAllGroups();// PHPBB-ID → Flarum-ID
$flarumId = FlarumUser::getFlarumIdByPhpbbId(53);
// Flarum-ID → PHPBB-ID
$phpbbId = FlarumUser::getPhpbbIdByFlarumId(3);- Login-Button verstecken
- Signup-Button verstecken (
.item-signUp) - Custom CSS in Flarum DB schreiben
allow_sign_upSetting automatisch anpassen
$fragment = new rex_fragment();
$fragment->setVar('redirect_url', rex_getUrl(5)); // Nach Login
echo $fragment->parse('uikit3/flarum_login.php');$fragment = new rex_fragment();
echo $fragment->parse('uikit3/flarum_register.php');User-ID Mapping PHPBB → Flarum:
phpbb_user_id(INT, UNIQUE)flarum_user_id(INT, UNIQUE)username(VARCHAR)created_at(DATETIME)
Tag-Mapping PHPBB-Forum → Flarum-Tag:
phpbb_forum_id(INT, UNIQUE)flarum_tag_id(INT)name(VARCHAR)created_at(DATETIME)
Migrations-Log:
migration_type(user/tag/discussion/post)phpbb_id(INT)flarum_id(INT)status(success/error)message(TEXT)created_at(DATETIME)
Registrierungen mit erweiterten Feldern:
username,email,password_hashfirst_name,last_name,organization,countryphone,website,birthdatestatus(pending/activated)activation_token,flarum_user_idcreated_at,activated_at(DATETIME)
SSO-Session-Synchronisation:
redaxo_session_id(VARCHAR, UNIQUE)flarum_user_id(INT)token(VARCHAR)expires_at,created_at(DATETIME)
Flarum-Gruppen → REDAXO-Berechtigungen:
flarum_group_id(INT)redaxo_permission(VARCHAR)created_at(DATETIME)
db:
1:
host: redaxo-redd-mysql
login: redaxo
password: 6tKgJxU8jrgs
name: redaxo
persistent: false
2:
host: redaxo-redd-mysql
login: redaxo
password: 6tKgJxU8jrgs
name: redd_flarum
persistent: false
3:
host: redaxo-redd-mysql
login: redaxo
password: 6tKgJxU8jrgs
name: redd_F0r_bb2023
persistent: false- DB-ID 1: REDAXO (Standard)
- DB-ID 2: Flarum
- DB-ID 3: PHPBB (für Migration)
Flarum Bridge
├── Übersicht (Status-Dashboard + Komplett-Reset)
├── Installation (Flarum 2.0 installieren)
├── PHPBB Migration
│ ├── User (User + Profile migrieren)
│ ├── Tags (Foren als Tags)
│ ├── Discussions (Topics)
│ ├── Posts (Posts mit BBCode→Markdown)
│ ├── YForm User-IDs (ID-Migration-Tool)
│ ├── Profile-Nachimport (hidden, einmalig)
│ └── User-Mapping (Tabelle anzeigen)
├── Registrierung
│ ├── Einstellungen (Double Opt-In)
│ └── Verwaltung (rex_list)
└── Styling (UI-Anpassungen)
Name: flarum_remember
Value: <user_id>|<token>|<lifetime_timestamp>
Path: /
- Nutzt
rex_sql,rex_file,rex_pathstatt native PHP - Folgt REDAXO Coding Standards (PSR-12)
- Kompatibel mit REXStan (strict mode)
[b]text[/b]→**text**[i]text[/i]→*text*[url]link[/url]→[link](link)[quote]text[/quote]→> text[code]code[/code]→`code`
- REDAXO 5.15+
- PHP 8.0+
- MariaDB 11.8+
- Composer (für Flarum)
# Container: coreweb (REDAXO)
docker exec -it coreweb bash
# Container: redaxo-redd-mysql (MariaDB)
docker exec -it redaxo-redd-mysql mariadb -u redaxo -p# Rexstan (REDAXO-optimized PHPStan - PREFERRED)
docker exec -it coreweb bash -c "cd /var/www/html/public && php redaxo/bin/console rexstan:analyze redaxo/src/addons/flarum_bridge/lib/"
# PHP-CS-Fixer
docker exec -it coreweb vendor/bin/php-cs-fixer fix redaxo/src/addons/flarum_bridge/
# Psalm
docker exec -it coreweb vendor/bin/psalm --no-cacheLösung: config.yml prüfen - DB-ID 2 + 3 müssen unter db: stehen
Lösung: Cookie flarum_remember im Browser prüfen, Flarum-DB prüfen
Lösung: NULL-Werte in website/birthdate Feldern - cleanUrl() und convertBirthday() geben jetzt immer Strings zurück
Lösung: CASE-Statement statt separater UPDATEs verwendet
MIT License
FriendsOfREDAXO
GitHub Issues: https://github.com/FriendsOfREDAXO/flarum_bridge