Merge branch 'main' of https://git.kocoder.xyz/Diplomarbeit-Absolventenverein/pm
Some checks failed
Word Count / count-words (push) Failing after 32s

This commit is contained in:
2026-03-23 14:04:37 +01:00
4 changed files with 70 additions and 6012 deletions

View File

@@ -119,7 +119,28 @@ foreach (var item in PageState.Pages
Durch diesen Ansatz werden ausschließlich die für Benutzer relevanten Inhaltsseiten in der Navigation angezeigt. Gleichzeitig bleibt die Navigation vollständig dynamisch: Werden im CMS neue Seiten angelegt und als Navigationsseiten markiert, erscheinen diese automatisch im Menü, ohne dass eine Anpassung am Theme-Code notwendig ist. Durch diesen Ansatz werden ausschließlich die für Benutzer relevanten Inhaltsseiten in der Navigation angezeigt. Gleichzeitig bleibt die Navigation vollständig dynamisch: Werden im CMS neue Seiten angelegt und als Navigationsseiten markiert, erscheinen diese automatisch im Menü, ohne dass eine Anpassung am Theme-Code notwendig ist.
![Filterlogik der Oqtane-Navigation] (./images/06-Adam/navigationsfilter_v2.svg) <!-- ![Filterlogik der Oqtane-Navigation](./images/06-Adam/navigationsfilter_v2.svg) -->
``` {.mermaid width=75%}
graph TD
%%| filename: navigationsfilter_v2
%%| fig-cap: Filterlogik der Oqtane-Navigation (Theme.razor)
Start[PageState.Pages<br/>Alle CMS-Seiten ~12 Seiten] --> Filter1[Filter 1: ParentId == null<br/>Nur Root-Seiten]
Filter1 -- Unterseiten --> Rejected1[Aussortiert]
Filter1 --> Filter2[Filter 2: hiddenNames<br/>Systemseiten ausblenden]
Filter2 -- "Login, Register, Admin, Privacy, ..." --> Rejected2[Aussortiert]
Filter2 --> Result[Sichtbare Navigation<br/>~3 Inhaltsseiten im Menü]
Result -.-> Note[Neue Seiten im CMS erscheinen automatisch im Menü kein Code nötig]
style Start fill:#444441,stroke:#B4B2A9,color:#D3D1C7
style Filter1 fill:#3C3489,stroke:#AFA9EC,color:#CECBE6
style Filter2 fill:#3C3489,stroke:#AFA9EC,color:#CECBE6
style Rejected1 fill:#791F1F,stroke:#F09595,color:#F7C1C1
style Rejected2 fill:#791F1F,stroke:#F09595,color:#F7C1C1
style Result fill:#085041,stroke:#5DCAA5,color:#9FE1CF
style Note fill:none,stroke:#B4B2A9,stroke-dasharray: 5 5,color:#B4B2A9
```
Dies reduziert den Wartungsaufwand erheblich und stellt sicher, dass die Navigation stets dem aktuellen Stand der Plattform entspricht. Dies reduziert den Wartungsaufwand erheblich und stellt sicher, dass die Navigation stets dem aktuellen Stand der Plattform entspricht.
@@ -245,7 +266,33 @@ Am unteren Rand des Formulars befinden sich zwei Speicheroptionen: „Als Entwur
Der folgende Lebenszyklus zeigt die möglichen Zustände eines Eintrags und die Übergänge zwischen ihnen: Der folgende Lebenszyklus zeigt die möglichen Zustände eines Eintrags und die Übergänge zwischen ihnen:
![Lebenszyklus eines Hall-of-Fame-Eintrags] (./images/06-Adam/hall_of_fame_lebenszyklus_v4.svg) <!-- ![Lebenszyklus eines Hall-of-Fame-Eintrags](./images/06-Adam/hall_of_fame_lebenszyklus_v4.svg) -->
``` {.mermaid width=75%}
graph TD
%%| filename: hall_of_fame_lebenszyklus_v4
%%| fig-cap: Lebenszyklus eines Hall-of-Fame-Eintrags
Start([Benutzer eingeloggt]) --> Create[Eintrag erstellen<br/>Duplikat- & Eigentümerprüfung]
Create -- Fehler --> Rejected[Abgelehnt]
Create --> Draft[Draft<br/>Nur für Eigentümer sichtbar]
Draft -- Veröffentlichen --> Published[Published<br/>Öffentlich sichtbar]
Published -- Meldung --> Reported[Gemeldet<br/>IsReported = true]
Reported --> Admin[Admin-Entscheidung]
Admin -- OK --> Approved[Freigegeben]
Admin -- Verstoß --> Deleted[Gelöscht<br/>→ neuer Eintrag möglich]
%% Styling to match original SVG
style Start fill:#444441,stroke:#B4B2A9,color:#D3D1C7
style Create fill:#3C3489,stroke:#AFA9EC,color:#CECBE6
style Rejected fill:#791F1F,stroke:#F09595,color:#F7C1C1
style Draft fill:#085041,stroke:#5DCAA5,color:#9FE1CF
style Published fill:#085041,stroke:#5DCAA5,color:#9FE1CF
style Reported fill:#633806,stroke:#EF9F27,color:#FAC775
style Admin fill:#444441,stroke:#B4B2A9,color:#D3D1C7
style Approved fill:#27500A,stroke:#97C459,color:#C0DD97
style Deleted fill:#791F1F,stroke:#F09595,color:#F7C1C1
```
##### Meldefunktion ##### Meldefunktion
@@ -255,7 +302,26 @@ Die Meldefunktion ermöglicht es angemeldeten Benutzerinnen und Benutzern, einen
Die Meldefunktion ist dabei nicht direkt im Hall-of-Fame-Modul implementiert, sondern wird über eine zentrale Schnittstelle aus einem gemeinsamen Interfaces-Paket eingebunden. Dieses Konzept ermöglicht es, dieselbe Melde-Oberfläche in beliebig vielen weiteren Modulen wiederzuverwenden, ohne die Logik mehrfach implementieren zu müssen. Die Meldefunktion ist dabei nicht direkt im Hall-of-Fame-Modul implementiert, sondern wird über eine zentrale Schnittstelle aus einem gemeinsamen Interfaces-Paket eingebunden. Dieses Konzept ermöglicht es, dieselbe Melde-Oberfläche in beliebig vielen weiteren Modulen wiederzuverwenden, ohne die Logik mehrfach implementieren zu müssen.
![Ablauf des globalen Reporting-Systems] (./images/06-Adam/reporting_sequence_diagram.svg) <!--![Ablauf des globalen Reporting-Systems](./images/06-Adam/reporting_sequence_diagram.svg)-->
```mermaid
sequenceDiagram
%%| filename: reporting_sequence_diagram
%%| fig-cap: Ablauf des globalen Reporting-Systems
participant User
participant Module
participant ReportingComponent
participant ReportingHandler
User-->>+Module: View entity
Module-->>+ReportingComponent: Report current entity
ReportingComponent-->>User: Ask for reason
User-->>ReportingComponent: Enters reason
ReportingComponent-->>+ReportingHandler: New report (entity + reason)
ReportingHandler-->>-ReportingComponent: Done
ReportingComponent-->>-Module: Report saved
Module-->>-User: Report saved
```
##### PDF-Export ##### PDF-Export

View File

@@ -556,7 +556,7 @@ Daraufhin wird der Benutzer zur LinkedIn-Authentifizierungsseite weitergeleitet.
Nach erfolgreicher Authentifizierung sendet LinkedIn eine Antwort an die zuvor definierte Redirect-URL der Webanwendung. Diese Antwort enthält einen Autorisierungscode, der anschließend vom Server der Webanwendung gegen ein Zugriffstoken ausgetauscht wird. Nach erfolgreicher Authentifizierung sendet LinkedIn eine Antwort an die zuvor definierte Redirect-URL der Webanwendung. Diese Antwort enthält einen Autorisierungscode, der anschließend vom Server der Webanwendung gegen ein Zugriffstoken ausgetauscht wird.
Wie in Abschnitt 4.3.1 beschrieben, werden die abgerufenen Profildaten zur Identifikation oder Neuanlage des Benutzerkontos in der lokalen Datenbank verwendet. Wie in Abschnitt 4.4.3.1 beschrieben, werden die abgerufenen Profildaten zur Identifikation oder Neuanlage des Benutzerkontos in der lokalen Datenbank verwendet.
### Implementierung des Premium-Bereichs ### Implementierung des Premium-Bereichs

6007
debug.tex

File diff suppressed because it is too large Load Diff

View File

@@ -1 +0,0 @@
![Test Image](./images/05-Konstantin/EventRegistration-PieChart.png){ width=40% fig-pos=H }