strtolower(trim($group, '/')), array_values(array_map('strval', (array) ($currentUser['groups'] ?? []))) ); $isPartial = !empty($_GET['partial']); if (!in_array('administrators', $currentGroups, true)) { http_response_code(403); $forbidden = '

Kein Zugriff auf Admin Apps.

'; if ($isPartial) { echo $forbidden; return; } ?> Admin Apps saveGiteaConfig([ 'base_url' => (string) ($_POST['base_url'] ?? ''), 'token' => (string) ($_POST['token'] ?? ''), 'owner' => (string) ($_POST['owner'] ?? ''), 'repositories' => (string) ($_POST['repositories'] ?? ''), 'poll_idle_seconds' => (string) ($_POST['poll_idle_seconds'] ?? ''), 'poll_running_seconds' => (string) ($_POST['poll_running_seconds'] ?? ''), 'visibility' => (string) ($_POST['visibility'] ?? ''), ]); $messages[] = 'Gitea-Deploy-Status-Konfiguration gespeichert.'; $section = 'integrations'; } elseif ($action === 'save-app-access') { $service->saveAppAccess( (string) ($_POST['app_id'] ?? ''), array_values(array_map('strval', (array) ($_POST['required_groups'] ?? []))) ); $messages[] = 'LDAP-Gruppen fuer die App wurden gespeichert.'; $section = 'access'; } } catch (\Throwable $exception) { $errors[] = $exception->getMessage(); } } } $bootstrap = $service->bootstrap(true); $apps = is_array($bootstrap['apps'] ?? null) ? $bootstrap['apps'] : []; $widgets = is_array($bootstrap['widgets'] ?? null) ? $bootstrap['widgets'] : []; $stats = is_array($bootstrap['stats'] ?? null) ? $bootstrap['stats'] : []; $meta = is_array($bootstrap['meta'] ?? null) ? $bootstrap['meta'] : []; $availableGroups = is_array($meta['available_groups'] ?? null) ? $meta['available_groups'] : []; $gitea = is_array($bootstrap['gitea'] ?? null) ? $bootstrap['gitea'] : []; $giteaConfig = is_array($gitea['config'] ?? null) ? $gitea['config'] : []; $giteaDiagnostics = is_array($gitea['diagnostics'] ?? null) ? $gitea['diagnostics'] : []; $h = static fn (?string $value): string => htmlspecialchars($value ?? '', ENT_QUOTES); $sectionUrl = static fn (string $targetSection): string => '/admin/apps/?section=' . rawurlencode($targetSection); $sectionMeta = [ 'overview' => [ 'label' => 'Apps', 'title' => 'Apps und Bereitstellung', 'description' => 'Apps sind allgemeine Anwendungen. Sie koennen als Menue-App, Tray-App, Widget-Quelle oder mit optionalem Desktop-Icon auftreten.', 'nav' => 'Bestand und Installationsweg pruefen.', ], 'installation' => [ 'label' => 'Installation', 'title' => 'Installationswege fuer Apps', 'description' => 'Installierbare Fach-Apps liegen unter custom/apps/. Upload- und Importwege werden hier als naechster Ausbauschritt vorbereitet.', 'nav' => 'ZIP-, Verzeichnis- und Server-Workflow beschreiben.', ], 'access' => [ 'label' => 'Berechtigungen', 'title' => 'LDAP-Gruppen pro App', 'description' => 'Admins steuern hier, welche LDAP-Gruppen eine App benutzen duerfen. Leere Auswahl bedeutet: fuer alle sichtbaren Benutzer.', 'nav' => 'LDAP-Gruppen verwalten.', ], 'widgets' => [ 'label' => 'Widgets', 'title' => 'Widgets und Quellen', 'description' => 'Widgets sind kleine Desktop-Bereiche ohne klassische Fensterfunktionen. Sie koennen eigenstaendig oder Teil einer App sein.', 'nav' => 'Widget-Quellen und Bedeutung pruefen.', ], 'integrations' => [ 'label' => 'Integrationen', 'title' => 'Gitea-Deploy-Status', 'description' => 'Erste echte Admin-Einstellung fuer das Deploy-Status-Addon inklusive Environment-Datei und Tray-Sichtbarkeit.', 'nav' => 'Addon-Konfiguration bearbeiten.', ], ]; ob_start(); ?>

Admin Registry

Administrators only Desktop Auth Section:
Ergebnis
Bitte pruefen
Installierbare Apps
Systemtools
Core-Apps

Registry

Desktop-Apps

Titel Scope Typ LDAP-Gruppen Route Flags
Desktop Widget Tray Default Admin only

Installation

Aktueller Installationsweg

Neue Apps koennen aktuell als Modul-Verzeichnis unter custom/apps/ abgelegt werden. Ein eigener Upload-Bereich fuer ZIP-Dateien oder Verzeichnisse ist noch offen und wird als naechster Ausbauschritt vorbereitet.

Installierbare Apps
Systemtools

Installationswege

Aktueller und geplanter Ablauf

Installierbare Apps liegen im Projekt unter custom/apps/. Der Desktop erkennt neue Module automatisch ueber deren Desktop-Metadaten.

1. Manuell ueber den Server

Ein Modul-Verzeichnis wird nach custom/apps/<app>/ kopiert. Das ist der aktuell gueltige produktive Weg.

2. Verzeichnis-Upload

Ein Browser-Upload fuer ein vorbereitetes Modul-Verzeichnis ist fachlich vorgesehen, aber noch nicht implementiert.

3. ZIP-Upload

Ein ZIP-Import mit Entpacken und Validierung ist vorgesehen, benoetigt aber noch einen dedizierten Installations-Workflow.

Access Control

LDAP-Gruppen pro App

Gespeichert wird in . Die kurzen Gruppennamen entsprechen den LDAP-/Auth-Gruppen im Desktop.

Aktuell:

Keine LDAP-Gruppen aus der Registration-Konfiguration gefunden.

Widget Registry

Alle Widgets

Globale Widgets und modulbasierte Widgets werden hier gemeinsam sichtbar. Fachlich sind Widgets kleine Desktop-Elemente; technisch werden sie aktuell noch uebergangsweise im rechten Infobereich gerendert.

Widget Zone Quelle Launch-App Status-API
Modul:

Addon

Gitea-Deploy-Status

Die Werte werden in der aktuellen Environment-Datei gespeichert und beim Deploy in das gemischte `config/`-Verzeichnis uebernommen.

Aktuelle Datei

Der Tray ist fuer den aktuellen Benutzer .

Konfiguriert
Token vorhanden
Repos konfiguriert
Visibility
Admin Apps