# MOSAIC show_forum Entwicklerdokumentation

## Zweck

`_pgm/show_forum.php` ist der MOSAIC-Runner fuer Forum-Module.

Er laedt:

- eine `*_forum.cfg`
- optional eine `*_forum_function.php`
- optional eine projektspezifische Bibliothek ueber `bootstrap_file`

und spielt danach die in der Konfiguration definierte Forumsicht ueber `view` aus.

## Runner-Zuordnung

- `main_forum.cfg` oder `*_forum.cfg` -> `show_forum.php`

## URL-Schema

Beispiel:

```text
/_pgm/show_forum.php?iss_program=mo_user&modul=main&modul_path=forum&view=start
```

Wichtige Parameter:

- `iss_program`
- `modul`
- `modul_path`
- `view`

Weitere Parameter sind forumfachlich frei, zum Beispiel:

- `id`
- `slug`
- `q`

## Pflichtaufbau einer `_forum.cfg`

Mindestens sinnvoll sind:

- `title`
- `project`
- `database`
- `module`
- `module_path`
- `config_relative_path`
- `bootstrap_file`
- `assets_relative_path`
- `storage_relative_path`
- `setup_sql_relative_path`
- `routing.default_view`
- `views`

## Beispielkonfiguration

```php
<?php

return [
    'title' => 'MOSAIC Forum',
    'project' => 'mo_user',
    'database' => 'mo_user',
    'module' => 'main',
    'module_path' => 'forum',
    'config_relative_path' => 'forum/main_forum.cfg',
    'bootstrap_file' => 'forum/forum_lib.php',
    'assets_relative_path' => 'forum/assets',
    'storage_relative_path' => 'forum/forum_anlagen',
    'setup_sql_relative_path' => 'forum/setup_forum.sql',
    'routing' => [
        'default_view' => 'start',
    ],
    'views' => [
        'start' => [
            'label' => 'Start',
            'script' => 'start.php',
        ],
        'overview' => [
            'label' => 'Uebersicht',
            'script' => 'index.php',
        ],
        'topic' => [
            'label' => 'Thema',
            'script' => 'topic.php',
        ],
    ],
];
```

## Sichtsteuerung

`show_forum.php` kennt die in `views` konfigurierten Namen nicht fest.

Der Runner macht nur:

1. Konfiguration laden
2. Runtime-Kontext setzen
3. `view` auf eine Skriptdatei aufloesen
4. diese Skriptdatei im Modulkontext ausfuehren

Dadurch bleibt das Forum-Modul flexibel, ohne dass ein `create_forum.php`-Generator noetig ist.

## Runtime-Kontext

Die projektspezifische Bibliothek kann ueber `forum_set_runtime_config()` folgende Dinge zentral nutzen:

- Projektname
- Datenbankname
- Modulpfad
- Pfad zur `*_forum.cfg`
- Asset-Pfad
- physischer Anlagenpfad
- SQL-Setup-Datei
- Menuemodul

## Dateianlagen

Dateianlagen werden nicht im Kernpfad `_pgm` gespeichert.

Sie liegen im Projekt unter:

- `storage_relative_path`

Beispiel:

- `forum/forum_anlagen`

## SQL-Setup

`setup_sql_relative_path` verweist auf eine SQL-Datei, die auf Erstinstallation mindestens enthalten soll:

- `CREATE TABLE`
- sinnvolle Indizes
- optional Default-Inhalte

Beim aktuellen `mo_user`-Forum enthaelt diese SQL-Datei bereits:

- Tabellenstruktur
- Seed-Kategorien
- Seed-Boards
- erste offizielle Themen
- erste Startbeitraege

## Interne Link-Regel

Innerhalb eines Forum-Moduls sollen Links nicht auf freie PHP-Seiten zeigen, sondern auf `show_forum.php`.

Beispiele:

- `view=start`
- `view=overview`
- `view=board&id=...`
- `view=topic&id=...`
- `view=topic_create`
- `view=attachment&id=...`

## Entwicklerhinweis

Wenn zur `*_forum.cfg` eine `*_forum_function.php` existiert, kann sie fuer modulbezogene Zusatzlogik verwendet werden.

Der MOSAIC-Entwicklermodus kann dann wie bei anderen Runnern zwischen:

- `config`
- `function`

unterscheiden.