Skip to content

KLXM/flarum_bridge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flarum Bridge AddOn

REDAXO-AddOn für die Integration von Flarum 2.0 Forum mit Single Sign-On (SSO), PHPBB-Migration und erweiterten User-Verwaltungsfunktionen.

Features

  • 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

Installation

  1. AddOn installieren über REDAXO Backend
  2. Flarum installieren: Backend → Flarum Bridge → Installation
  3. PHPBB migrieren (optional): Backend → Flarum Bridge → PHPBB Migration

Komponenten

1. Flarum Installation (pages/installation.php)

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)

2. PHPBB Migration

User-Migration (lib/Migration/UserMigration.php)

  • Migriert PHPBB-User nach Flarum
  • Importiert Profile-Daten (first_name, last_name, organization, country, phone, website, birthdate)
  • Speichert in rex_flarum_registration Tabelle
  • Erstellt User-Mapping in rex_flarum_user_map

Tag-Migration (lib/Migration/TagMigration.php)

  • Migriert PHPBB-Foren als Flarum-Tags
  • Mapping: rex_flarum_migration_map

Discussion-Migration (lib/Migration/DiscussionMigration.php)

  • Migriert PHPBB-Topics als Flarum-Discussions
  • Konvertiert BBCode zu Markdown

Post-Migration (lib/Migration/PostMigration.php)

  • Migriert PHPBB-Posts als Flarum-Posts
  • BBCode → Markdown Konvertierung

3. Single Sign-On (SSO)

FlarumAuthenticator (lib/FlarumAuthenticator.php)

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();

API Endpoints

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" }

4. Registrierung mit Double Opt-In

YForm-Tabelle: rex_flarum_registration

Felder:

  • username, email, password_hash
  • first_name, last_name, organization, country
  • phone, website, birthdate
  • status (pending/activated)
  • activation_token, flarum_user_id

Einstellungen (pages/registration.settings.php)

  • Double Opt-In aktivieren/deaktivieren
  • Admin-Email für Aktivierungs-Mails

Verwaltung (pages/registration.list.php)

  • rex_list mit allen Registrierungen
  • Aktivieren/Löschen Buttons
  • Status-Badges

5. YForm User-ID Migration Tool (pages/migration.yform_userids.php)

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

6. FlarumUser Helper-Klasse (lib/FlarumUser.php)

PHP-Helper für Frontend-Integration:

Login & User-Abfragen

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 & Discussions

// 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 & Berechtigungen

// 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();

ID-Mappings

// PHPBB-ID → Flarum-ID
$flarumId = FlarumUser::getFlarumIdByPhpbbId(53);

// Flarum-ID → PHPBB-ID
$phpbbId = FlarumUser::getPhpbbIdByFlarumId(3);

7. Flarum UI Anpassungen (pages/styling.php)

  • Login-Button verstecken
  • Signup-Button verstecken (.item-signUp)
  • Custom CSS in Flarum DB schreiben
  • allow_sign_up Setting automatisch anpassen

8. UIkit3 Fragments

Login-Fragment (fragments/uikit3/flarum_login.php)

$fragment = new rex_fragment();
$fragment->setVar('redirect_url', rex_getUrl(5)); // Nach Login
echo $fragment->parse('uikit3/flarum_login.php');

Register-Fragment (fragments/uikit3/flarum_register.php)

$fragment = new rex_fragment();
echo $fragment->parse('uikit3/flarum_register.php');

Datenbankstruktur

AddOn-Tabellen

rex_flarum_user_map

User-ID Mapping PHPBB → Flarum:

  • phpbb_user_id (INT, UNIQUE)
  • flarum_user_id (INT, UNIQUE)
  • username (VARCHAR)
  • created_at (DATETIME)

rex_flarum_migration_map

Tag-Mapping PHPBB-Forum → Flarum-Tag:

  • phpbb_forum_id (INT, UNIQUE)
  • flarum_tag_id (INT)
  • name (VARCHAR)
  • created_at (DATETIME)

rex_flarum_migration_log

Migrations-Log:

  • migration_type (user/tag/discussion/post)
  • phpbb_id (INT)
  • flarum_id (INT)
  • status (success/error)
  • message (TEXT)
  • created_at (DATETIME)

rex_flarum_registration

Registrierungen mit erweiterten Feldern:

  • username, email, password_hash
  • first_name, last_name, organization, country
  • phone, website, birthdate
  • status (pending/activated)
  • activation_token, flarum_user_id
  • created_at, activated_at (DATETIME)

rex_flarum_session_sync

SSO-Session-Synchronisation:

  • redaxo_session_id (VARCHAR, UNIQUE)
  • flarum_user_id (INT)
  • token (VARCHAR)
  • expires_at, created_at (DATETIME)

rex_flarum_permission_map

Flarum-Gruppen → REDAXO-Berechtigungen:

  • flarum_group_id (INT)
  • redaxo_permission (VARCHAR)
  • created_at (DATETIME)

Datenbank-Konfiguration (config.yml)

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)

Backend-Navigation

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)

Technische Details

Flarum Cookie-Struktur

Name: flarum_remember
Value: <user_id>|<token>|<lifetime_timestamp>
Path: /

REDAXO Core Integration

  • Nutzt rex_sql, rex_file, rex_path statt native PHP
  • Folgt REDAXO Coding Standards (PSR-12)
  • Kompatibel mit REXStan (strict mode)

BBCode → Markdown Konvertierung

  • [b]text[/b]**text**
  • [i]text[/i]*text*
  • [url]link[/url][link](link)
  • [quote]text[/quote]> text
  • [code]code[/code]`code`

Entwicklung

Requirements

  • REDAXO 5.15+
  • PHP 8.0+
  • MariaDB 11.8+
  • Composer (für Flarum)

Docker-Setup

# Container: coreweb (REDAXO)
docker exec -it coreweb bash

# Container: redaxo-redd-mysql (MariaDB)
docker exec -it redaxo-redd-mysql mariadb -u redaxo -p

Static Analysis

# 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-cache

Troubleshooting

Problem: Backend nicht erreichbar nach Installation

Lösung: config.yml prüfen - DB-ID 2 + 3 müssen unter db: stehen

Problem: Login funktioniert nicht

Lösung: Cookie flarum_remember im Browser prüfen, Flarum-DB prüfen

Problem: Profile-Import nur 9 statt 627

Lösung: NULL-Werte in website/birthdate Feldern - cleanUrl() und convertBirthday() geben jetzt immer Strings zurück

Problem: YForm User-ID Migration setzt alle auf 2

Lösung: CASE-Statement statt separater UPDATEs verwendet

Lizenz

MIT License

Autor

FriendsOfREDAXO

Support

GitHub Issues: https://github.com/FriendsOfREDAXO/flarum_bridge

About

Flarum for REDAXO

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages