BAB.Verwaltung – D-DOK Forschungsdokumentation BAB.Verwaltung – D-DOK: Web-Anwendung der BAB zur Erfassung von Forschungsprojekten und Publikationen. Konsolidiert die ehemals 2 Bücher (D-DOK Anwendung + D-DOK Publikationstypen) in einem Buch. Stand: 2026-05-23. Kapitel-Präfixe [Publikationstyp] zeigen den Publikationstyp-Katalog. Anwendung & Administration Bedienung, FAQ, Versionshinweise, Systemadministration. Videos D-DOK Einführung D-DOK Publikation hinzufugen Letzte Aktualisierung: 2026-05-23 · Pflege: Roland Neissl · Quelle: git.agrarforschung.at/ddok/ddok FAQ: Häufig gestellte Fragen Wie funktionieren die Kontrollkästchen „Intern sichtbar“ (Projekt), „Im Projekt sichtbar“ (Publikation) und „In Publikation sichtbar“ (PDF-Datei)? Wer Einträge in D-DOK sehen darf, ist hierarchisch auf drei Ebenen definiert. Diese Berechtigungen sind hierarchisch aufgebaut und ermöglichen es, dass Inhalte auf jeder der drei Ebenen entweder nur für einen einzelnen Benutzer privat sind, mit einem Projektteam geteilt werden oder mit allen angemeldeten Benutzern geteilt werden können. Stufe 1: PROJEKT Wenn das Kontrollkästchen „Intern sichtbar“ eines Projekts NICHT aktiviert ist, sind das Projekt, alle zugehörigen Publikationen und alle zugehörigen PDFs NUR für die Projektteammitglieder im Projekt „Benutzer“ und den „Eigentümer“ (den Benutzer, der das Projekt erstellt hat) sichtbar. Wenn das Kontrollkästchen „Intern sichtbar“ eines Projekts aktiviert ist, ist das Projekt für ALLE angemeldeten intern Benutzer sichtbar. Stufe 2: PUBLIKATION Wenn das Kontrollkästchen „Im Projekt sichtbar“ einer Publikation NICHT aktiviert ist, sind die Publikation und alle zugehörigen PDFs NUR für die Eigentümer (Ersteller/in der Publikation) sichtbar. Wenn das Kontrollkästchen „Im Projekt sichtbar“ einer Publikation aktiviert ist, ist die Publikation für ALLE angemeldeten Benutzer sichtbar, die das Projekt einsehen können. Stufe 3: PDF-Datei Wenn das Kontrollkästchen „In Publikation sichtbar“ einer PDF-Datei NICHT aktiviert ist, ist die PDF-Datei NUR für den/die Eigentümer (den Benutzer die die PDF-Datei hochgeladen hat) sichtbar. Wenn das Kontrollkästchen „In Publikation sichtbar“ einer PDF-Datei aktiviert ist, ist die Publikation für ALLE angemeldeten Benutzer sichtbar, die die Publikation sehen dürfen. HINWEIS: In Version 0.0.7 wurden die Kontrollkästchen „Intern sichtbar“ und „Im Projekt sichtbar“ durch Auswahlmenüs ersetzt, um Missverständnisse im Zusammenhang mit diesen Steuerelementen zu beheben. Die hierarchische Logik bleibt jedoch unverändert. Warum verschwindet die zum Hochladen ausgewählte PDF-Datei nach dem Speichern? Wahrscheinlich liegt das an den Sicherheitseinstellungen Ihres Browsers, die das Hochladen von Dateien von einem Netzlaufwerk per Drag & Drop verhindern. LÖSUNG: Bitte verwenden Sie die Schaltfläche „Dateien auswählen“, um PDFs auszuwählen, es sei denn, die Dateien befinden sich auf Ihrer lokalen Festplatte. Letzte Aktualisierung: 2026-05-23 · Pflege: Roland Neissl · Quelle: git.agrarforschung.at/ddok/ddok Projekte Seite Projekte Liste ansicht Auf der Projektseite wird eine Liste aller Projekte angezeigt, die der aktuell angemeldete Benutzer sehen darf. Ein Projekt ist sichtbar, wenn das Projekt "Intern sichtbar" ist oder wenn der aktuelle Benutzer Mitglied der von einem Administrator definierten „Projektbenutzer“ ist. Das "Suche" feld filtert die angezeigten Projekte anhand einer Volltextsuche nach Projekttitel und -beschreibung. Über die Checkbox „Laufend“ lässt sich die Liste auf Projekte einschränken, deren aktuelles Datum zwischen dem beim Projekt angegebenen Start- und Enddatum liegt. Das Dropdown-Menü „Projektkategorie“ filtert die Liste nach Projekten, die der angegebenen Kategorie zugeordnet sind. Darüber hinaus kann die Liste über das Kontrollkästchen „Leiter“ und das Dropdown-Menü „Teammitglied“ oder „Projektleiter“ entweder nach Projektleiter oder Teammitglied gefiltert werden. Durch Drücken der Schaltfläche "X" werden alle Filter einstellingen entfernt. Wenn Sie auf ein Projekt klicken, werden die Projektdetails angezeigt. das zuvor ausgewählte Projekt wird grau hinterlegt. Projekte Detail ansicht In der Projektdetailansicht werden alle Informationen zum ausgewählten Projekt angezeigt. Wenn der aktuell angemeldete Benutzer ein Projektadministrator mit der Berechtigung „Projekt bearbeiten“ ist, wird eine Schaltfläche „Bearbeiten“ angezeigt, und mit der Berechtigung „Projekt löschen“ wird eine Schaltfläche „Löschen“ angezeigt. Projekte können nur gelöscht werden, wenn keine zugehörigen Publikationen vorhanden sind. Wenn der Administratorbenutzer die Berechtigung „Projektbenutzer verwalten“ hat, wird eine Schaltfläche zum Öffnen der Ansicht mit den Projektbenutzerberechtigungen angezeigt. Wenn der Administratorbenutzer die Berechtigung "Projektnotifikationen verwalten" hat, wird eine Schaltfläche zum Öffnen der Ansicht mit Projektnotifikationen einstellungen angezeigt. In der Detailansicht sind zudem Links zu allen Publikationen zu diesem Projekt enthalten, mit der Anzeige von Checks, ob die Publikationen "Im Projekt sichtbar" und "auf der Website" sind, sowie dem Veröffentlichungsdatum. Projekte Detail / Projektbenutzer ansicht Über die Projektbenutzeransicht kann ein Administrator festlegen, wer das Projekt und die zugehörigen Publikationen sehen darf. Projekte, die NICHT als „Intern sichtbar“ gekennzeichnet sind (und die zugehörigen Veröffentlichungen) können nur von den Benutzern in dieser Liste gesehen werden. „Intern sichtbar“-Projekte (und deren Veröffentlichungen) können von allen internen Benutzern gesehen werden. Über den „+“-Button können Benutzer hinzugefügt werden. Bei der Verknüpfung von D-DOK mit D-ESS gibt es zusätzlich einen Button (Benutzer mit Plus-Symbol), über den alle Benutzer hinzugefügt werden, die aktuell auf den mit dem ausgewählten Projekt verknüpften Kostenträger buchen können. Für jeden Benutzer legt die Checkbox „ADMIN“ fest, ob der Benutzer administrieren darf (bearbeiten, Publikationen hinzufügen oder andere Benutzer zum Projekt hinzufügen). Zudem ist es erforderlich, dass Benutzer, die das Projekt administrieren dürfen, Mitglied einer Sicherheitsgruppe mit den erforderlichen Berechtigungen sind. Projekte Detail / Projektnotifikation ansicht In dieser Ansicht kann ein Administrator festlegen, welche Benachrichtigungen bei Aktionen in einem Projekt gesendet werden sollen. Wenn in der Server-Konfigurationsdatei „config.js“ E-Mail aktiviert und korrekt konfiguriert ist, besteht auch die Möglichkeit, E-Mail-Benachrichtigungen zu senden. Wenn eine der Aktionen ausgeführt wird, erhalten alle Projektbenutzer (mit Ausnahme desjenigen, der die Aktion abgeschlossen hat) eine Benachrichtigung. Projekte Bearbeiten ansicht Projektadministratoren mit der Erlaubnis „Projekt bearbeiten“ können die Projektdetails bearbeiten. Das Kontrollkästchen „Intern sichtbar“ bestimmt, ob das Projekt und alle zugehörigen Veröffentlichungen intern für alle Benutzer sichtbar sind. Wenn dies nicht aktiviert ist, sind das Projekt und die zugehörigen Veröffentlichungen nur für die Projektbenutzer sichtbar. Die Kontrollkästchen „Auf der Website“ bestimmt, ob das Projekt auf der Website veröffentlicht wird. Ist diese Checkbox nicht aktiviert, werden das gesamte Projekt sowie die zugehörigen Publikationen und Dateien NICHT auf der Website angezeigt. Diese Checkbox ist deaktiviert, es sei denn, der aktuelle Benutzer verfügt über die Systemberechtigung „Projekt auf der Website Checkbox ändern“. Schlagwörter, die das Projekt beschreiben, können aus einem Dropdown-Baum ausgewählt werden (von Administratoren auf der Schlagwörterseite definiert). Jedes Projekt muss einen Titel, einen zugehörigen Kostenträger, eine Projektkategorie und eine Beschreibung haben. Die anderen Felder sind optional. Es ist möglich, 3 Personen als Projektleiter zuzuordnen. Dies können interne Benutzer (in der Benutzerverwaltung) oder externe sein, in diesem Fall gibt es eine Freitexteingabe. Bei externen Benutzern formatieren Sie den Leiternamen bitte als „Nachname, Vorname“. Der Plus-Button unter den Teamleitern ermöglicht die Eingabe des Projektteams Drei Textfelder (Freitext) sind auch für die DAFNE, SAP Kostenstelle und Abteilung Kostenstelle vorgesehen. Die Beschreibung ist eine „Rich Text“-Eingabe, kann also nach Bedarf formatiert werden. Letzte Aktualisierung: 2026-05-23 · Pflege: Roland Neissl · Quelle: git.agrarforschung.at/ddok/ddok Publikationen Seite Publikationen Liste ansicht Auf der Publikationenseite wird eine Liste aller Publikationen angezeigt, die der aktuell angemeldete Benutzer sehen darf. Eine Veröffentlichung ist sichtbar, wenn eine der folgenden Bedingungen erfüllt ist: 1. Die aktuelle Benutzer ist in eine Sicherheitsgruppe, mit erlaubnis "Alle Projekte und Publikationen verwalten" 2. Die Publikation ist „privat“ (nicht „im Projekt sichtbar“) und der aktuelle Benutzer ist der Eigentümer der Veröffentlichung. 3. Die Publikation ist „im Projekt sichtbar“, das zugehörige Projekt ist NICHT „Intern sichtbar“ und der aktuelle Benutzer ist Eigentümer des Projekts, oder befindet sich auf der Liste der „Projektbenutzer“ (nur für ein Projektteam sichtbar). 3. Die Veröffentlichung ist „im Projekt sichtbar“ und das zugehörige Projekt ist „Intern sichtbar“. Das Feld „Suchen“ filtert die angezeigten Publikationen mittels Volltextsuche nach Projektname, Beschreibung, zugehörigen Dateibeschreibungen und optional (bei aktivierter Checkbox PDFs durchsuchen) nach den Textinhalten der hochgeladenen PDF-Dateien. Zusätzlich kann die Liste nach Veröffentlichungsjahr, Publikationstyp und Autor gefiltert werden. Durch Drücken der Schaltfläche "X" werden ALLE Filter entfernt. Wenn Sie auf ein Publikation klicken, werden die Publikationdetails angezeigt. das zuvor ausgewählte Publikation wird grau hinterlegt. Publikation Detail ansicht Letzte Aktualisierung: 2026-05-23 · Pflege: Roland Neissl · Quelle: git.agrarforschung.at/ddok/ddok Architektur-Überblick Diese Übersicht beschreibt die Architektur von D-DOK. Code-Stand: Version 0.0.8 (Branch master). Quelle: git.agrarforschung.at/ddok/ddok. Architektur-Diagramm flowchart LR subgraph Client["Browser-Client"] NG["Angular 21 SPA (client/)"] PDFX["PDF-Volltext-Extraktion im Browser (pdfparse)"] NG --- PDFX end subgraph Server["D-DOK Server (Node.js 22)"] API["Express 5 + Awilix (DI) TypeScript, server/"] end subgraph SQL["MySQL: eine gemeinsame Datenbank (D-DOK + D-ESS)"] MY[("ddok_*-Tabellen Projekte, Publikationen Volltext-Index (FULLTEXT)")] DESSDB[("D-ESS tbl_*-Tabellen Kostenträger, Benutzer:innen")] end MO[("MongoDB 7.0, GridFS PDF-Dateien (Bucket je Projekt)")] subgraph Auth["Authentifizierung"] AD["Active Directory (LDAPS)"] KC["Keycloak OIDC sso.agrarforschung.at"] end subgraph Web["Öffentliche BAB-Website (optionaler Publish)"] WEBMY[("MySQL WEB_DATABASE")] WEBMO[("MongoDB WEB_MONGO")] SITE["Public-Frontend"] end NG -- "HTTPS / REST" --> API PDFX -- "pdfText im Upload" --> API API -- "Metadaten + Volltext" --> MY API -- "Lookup (gleiche Verbindung)" --> DESSDB API -- "PDF-Blob" --> MO API -. OIDC .-> KC API -. LDAPS .-> AD API -- Publish --> WEBMY API -- Publish --> WEBMO WEBMY --> SITE WEBMO --> SITE Komponenten im Überblick Komponente Stack Quelle Frontend (SPA) Angular 21 · Angular Material · Wijmo (@mescius) · Quill (ngx-quill). Upgrade auf Angular 21 in 0.0.8 (zuvor Angular 20). client/ Backend-API Node.js 22 · Express 5 · Awilix / awilix-express (Dependency Injection) · TypeScript · TypeORM server/ PDF-Volltext-Extraktion Läuft im Browser (Bibliothek pdfparse, Git-Submodul modules/pdfparse); der extrahierte Text wird beim Upload an den Server mitgesendet – kein serverseitiger Parser-Worker. client/ (file-upload), modules/pdfparse/ Relationale DB MySQL (Port 3306) · ddok_*-Tabellen: Projekte, Publikationen, Stammdaten + Volltext-Index (MySQL-FULLTEXT auf file_text) · TypeORM mit synchronize:true Gemeinsame MySQL-DB mit D-ESS Dokumenten-DB MongoDB 7.0 (Port 27017) · PDF-Dateien als GridFS, ein Bucket pro Projekt ( PROJECT_). Kein Volltext-Index – der liegt in MySQL. Lokale MongoDB D-ESS-Anbindung Lese-Zugriff auf die D-ESS-Tabellen ( tbl_*) über dieselbe MySQL-Verbindung: Kostenträger/KS/KT + Benutzer:innen-/Berechtigungsdaten DESS_LINK_ENABLED (Default true) Authentifizierung Lokal · Active Directory (LDAPS, passport-ldapauth) · Keycloak OIDC ( openid-client, Realm ddok auf sso.agrarforschung.at) AD_ENABLED / OIDC_ENABLED in server/config/config.js Website-Publish (optional) Manueller Publish-Vorgang: ausgewählte Projekte/Publikationen samt Dateien werden in separate Website-Datenbanken kopiert (eigener Publish-Worker) WEB_DATABASE_* + WEB_MONGO_DATABASE_* Deployment D-DOK läuft in Produktion nicht als Container. Das im Repository vorhandene Dockerfile ist ausschließlich eine reproduzierbare Build-Umgebung für die CI – die Laufzeit ist ein klassischer Plesk-/Passenger-Node.js-Prozess. Aspekt Details Laufzeit-Host Plesk-Server mit Phusion Passenger (LXC-Container). Geteilt mit D-ESS, Datenpool und Adressdatenbank (Co-Tenancy). Node 22 via nodenv. App-Pfade Live: /var/www/vhosts/agrarforschung.at/ddok.agrarforschung.at Staging: /var/www/vhosts/agrarforschung.at/staging-ddok.agrarforschung.at SSO Keycloak-Realm ddok auf sso.agrarforschung.at Build – npm run build Führt drei Workspace-Builds nacheinander aus ( package.json): build:pdfparse – baut das PDF-Volltext-Modul ( modules/pdfparse/). build:client – Angular-Produktions-Build ( client/). build:server – bündelt den TypeScript-Server via esbuild ( node esbuild.mjs) und erzeugt das Laufzeit-Lockfile ( npm --prefix ./dist install --package-lock-only). Resultat ist der Ordner dist/ – das eigentliche Deployment-Artefakt. Rolle des Dockerfile Multi-Stage-Build: Die builder-Stage führt npm ci + npm run build aus und erzeugt dist/; die finale Stage übernimmt nur dist/, exponiert Port 3000 und definiert CMD ["npm","run","start"]. In der CI wird dieses Image jedoch nicht als Runtime ausgerollt, sondern dient als hermetische Build-Box: Nach dem Build wird ein Wegwerf-Container erzeugt und dessen /usr/src/app (= dist/) per docker cp als CI-Artefakt herauskopiert. CI/CD – .gitlab-ci.yml Drei Stages, ausschließlich auf Branch master: build – Docker-Image bauen (Docker-in-Docker, BuildKit-Registry-Cache), nach Harbor pushen und dist/ als Artefakt extrahieren. deploy:staging (automatisch) – bestehendes Verzeichnis nach backup/ sichern (außer backup/ log/ config/ config.js), dist/* per scp auf den Staging-Host kopieren, .npmrc schreiben, npm ci (nodenv Node 22), touch tmp/restart.txt → Passenger-Reload. deploy:live (manueller Trigger) – identischer Ablauf auf den Live-Host. Das Deployment ist somit ein scp-basiertes Datei-Rollout des dist/-Ordners mit anschließendem Passenger-Restart – kein docker run und kein Image-Pull auf dem Zielhost. Datenflüsse Projekt-/Publikationsanlage: Benutzer:innen erstellen Projekte und Publikationen im Angular-Frontend; die Metadaten werden über die Express-API in MySQL persistiert. PDF-Upload: Der Browser extrahiert beim Hochladen den PDF-Volltext (Bibliothek pdfparse). Die Datei wird als GridFS-Blob in MongoDB abgelegt, der extrahierte Text in der MySQL-Spalte file_text (FULLTEXT-indiziert für die Suche). D-ESS-Lookup: Kostenstellen, Kostenträger und Benutzer:innen-Stammdaten werden zur Laufzeit aus den D-ESS-Tabellen ( tbl_*) in derselben MySQL-Datenbank gelesen ( DESS_LINK_ENABLED). Website-Publish (optional): Über einen manuellen Publish-Vorgang werden freigegebene Projekte/Publikationen samt Dateien in die separaten Website-Datenbanken ( WEB_*) kopiert und auf der öffentlichen BAB-Website angezeigt. Letzte Aktualisierung: 2026-06-10 · Pflege: Roland Neissl · Quelle: git.agrarforschung.at/ddok/ddok 0.0.2 Versionshinweise 19.02.2025 Fehlerbehebungen 1. Flackern in der Liste beim langsamen Scrollen Die Projekt- und Publikationslistenseiten verwenden einen virtuellen Scroll-Mechanismus, der die Darstellung von potenziell Tausenden von Elementen auf der Liste ermöglicht, ohne die Browserleistung zu beeinträchtigen. Diese Implementierung hatte einen Fehler, der dazu führte, dass die Liste beim langsamen Scrollen flackerte. Ich habe die Implementierung ausgebessert, um dieses Flackern zu verhindern. (wird zurückgesetzt, sobald dieses Problem in der offiziellen Angular-Materialbibliothek behoben wurde 2. Publikationsbeschreibung nicht mehr erforderlich Karin Heinschink: Bei den Publikationen gibt es zwei Beschreibungsfelder. Wenn im Beschreibungsfeld neben dem Anhang etwas eingetragen ist, kann ich nicht speichern. Wenn ich die Beschreibung im Feld ganz unten eintrage, kann ich speichern. Manche Publikationen bestehen nur aus einer PDF-Datei (die bereits ein Beschreibungsfeld für die Datei enthält). In diesem Fall ist es nicht notwendig, zusätzlich eine Beschreibung der Publikation einzugeben. Um dies zu ermöglichen, ist das Beschreibungsfeld für Publikationsn kein Pflichtfeld mehr. 3. Publikation Veröffentlichungsdatum als pflichtfeld markiert Karin Heinschink: Scheinbar muss das Feld „Veröffentlichungsdatum“ ausgefüllt werden, damit der Publikationseintrag gespeichert werden kann. Daher ein * einfügen?  Umgesetzt :) 4. Projektbenutzer erklärung Karin Heinschink: Was wird hier (Projektbenutzer) gesteuert? Wo wird das Projekt angezeigt? Wo wird veröffentlicht? Ich habe den Text auf dieser Seite aktualisiert, der beschreibt, wie die Projekttbenutzerliste funktioniert, und auch die Dokumentation hier aktualisiert: https://doku.agrarforschung.at/books/d-dok-forschungsdokumentation/page/projekte-seite https://doku.agrarforschung.at/books/d-dok-forschungsdokumentation/page/publikationen-seite 5. Der Publikationseigentümer wird nicht angezeigt und kann nicht geändert werden. Der „Eigentümer“ einer Publikation ist zunächst der Uploader. Wenn eine Publikation nicht als „im Projekt verfügbar“ gekennzeichnet ist, ist sie grundsätzlich privat und kann nur vom Eigentümer angezeigt und bearbeitet werden. Der Name des Eigentümers wird jetzt in den Publikationsdetails angezeigt, was das System viel transparenter macht. Darüber hinaus können Administratoren mit der Systemberechtigung „Alle Projekte und Publikationen verwalten“ jetzt ALLE private Publikationen anzeigen, editieren, und den Eigentümer beim Bearbeiten der Publikation ändern. Dies war ein Versehen im ursprünglichen System, bei dem eine Publikation möglicherweise für niemanden mehr verfügbar war, wenn ein Benutzer das BAB verließ, ohne seine privaten Publikationen zuvor anderen Teammitgliedern im Projekt zur Verfügung zu stellen. Neue Funktionen 1. Projektteams In Version 0.0.1 waren Projekte nur Projektleitern zugeordnet. Ich habe eine neue Funktion implementiert, mit der Projekte auch Teammitgliedern zugeordnet werden können. Dies entspricht der Funktionalität, die wir auf der BAB-Website sehen. Unter den Teamleitern befindet sich eine neue Schaltfläche „+“, die eine Auswahlsteuerung für ein Teammitglied hinzufügt Ich habe alle bestehenden Projekte durchgesehen und die Teammitglieder miteinbezogen, die auf der BAB-Website sind. Darüber hinaus gibt es auf der Projektlistenseite eine Filtersteuerung, mit der die Liste entweder nach Projektleiter oder nach Projektteammitgliedern gefiltert werden kann 2. Schlagwörter Auf der BAB-Website ist es möglich, Schlagwörter sowohl Projekten als auch Publikationen zuzuordnen, sodass beide nach „Thema“ durchsucht werden können. Ich habe diese Funktion jetzt implementiert, um diese Funktion in zukünftigen Versionen von D-DOK zu ermöglichen, die die Daten auf die Website exportieren. Es gibt eine neue Administratorseite, auf der ein zweistufiger Kategorienbaum (Schlagwörter) eingegeben werden kann: Die vollständige Liste der derzeit auf der BAB-Website verfügbaren Schlagwörter wurde auf den Staging-Server übertragen und ALLE bestehenden Projekte und Publikationen wurden den entsprechenden Schlagwörtern zugeordnet. die Projekt- und Publikationsdetailseiten zeigen nun die zugehörigen Schlagwörter: Beim Bearbeiten von Projekten und Publikationen gibt es jetzt ein Dropdown-Auswahlfeld mit Mehrfachauswahl (filterbar) 3. Laufende projekte filter Karin Heinschink: Wäre es leicht umzusetzen, dass man bei den Projekten auch filtern kann nach „laufende Projekte“ (z.B. Hakerl setzen), ev. auch nach „abgeschlossene Projekte“? Oder gibt es dazu dann eine eigene Auswertung / Abfrage? Auf der Projektlistenseite gibt es jetzt ein Checkbox, mit der der Suchfilter nur „laufende“ Projekte einschließen kann. Ich habe keinen Filter für abgeschlossene Projekte implementiert. Bitte überprüfen Sie diese Funktionalität und prüfen Sie, ob dieser Filter die Anforderungen erfüllt. 4. Projektpublikationsliste Karin Heinschink: Wäre es leicht umzusetzen, dass man bei der Liste der Publikationen in der Projektbeschreibung das Publikationsdatum (oder den Publikationstyp) anzeigt? Dann sieht man gleich, was das aktuellste Dokument ist bzw. haben manchmal die Beiträge den gleichen Titel, werden aber bei unterschiedlichen Veranstaltungen präsentiert. Oder es gibt einen Beitrag bei einer Veranstaltung, aber mehrere Dateien dazu (z.B. Foliensatz, Abstract oder Beitrag im Tagungsband).  Ich habe die Liste der Publikationen auf der Projektdetailseite geändert, um dieses Problem zu beheben. Die Liste ist jetzt nach Publikationstypen unterteilt und enthält Indikatoren für den Status „im Projekt verfügbar“ und „auf der Website“ der Publikationen sowie das Veröffentlichungsdatum. 5. Publikationstyp auswahl Ich habe die Auswahl der Publikationstypen komplett neu organisiert. Zuvor gab es beim Filtern von Publikationen oder Auswählen des Publikationstyps zwei Auswahl-Dropdowns. Das erste diente zur Auswahl des Stammtyps und das zweite zur Auswahl des Untertyps aus dem Publikationstypenbaum. Dies war nicht intuitiv und machte es schwierig, ohne vorherige Kenntnis des Typenbaums bestimmte Publikationstypen zu finden (z. B. Workshops, die unter der Stammkategorie „Organisatorische Tätigkeiten“ lagen). Das neue Auswahlfeld für den Publikationstyp zeigt den gesamten Baum und ermöglicht die Anwendung eines Filters. Letzte Aktualisierung: 2026-05-23 · Pflege: Roland Neissl · Quelle: git.agrarforschung.at/ddok/ddok 0.0.5 Versionshinweise 25.09.2025 Fehlerbehebungen 1. Fehler beim Speichern der Publikation detail Bei speichern von Publikation detail war manchmal ein fehler "Can't access property toLowerCase". dieser Fehler wurde nun behoben 2. Visueller Fehler beim Hinzufügen von Schlagwörter-Einträgen Beim Hinzufügen von Schlagwörtern wurde der hinzugefügte Eintrag doppelt in der Liste angezeigt. Dies funktioniert nun wie erwartet. Neue Funktionen 1. Neuer Navigationsbutton in den Publikation detail seite für Benutzerfreundlichkeit. Oben links in den Publikationsdetails befinden sich jetzt zwei Navigationsbuttons. Der erste führt zur Publikationsliste, wobei diese Publikation hervorgehoben ist. Der zweite (neue) Button führt zum Hauptprojekt dieser Publikation. Dies entspricht dem Klicken auf das Projekt in der Projektliste. 2. Neuer Navigationsbutton in den Publikation detail seite Zählung (wie viele Einträge und wie viele gefiltert) zu allen Seiten hinzugefügt, die Listen oder Bäume von Daten anzeigen Diese Daten werden oben rechts von der Liste unter den Filtersteuerelementen angezeigt. 3. Durch Klicken auf den Benutzer in der Abteilung wird der Benutzer geöffnet Wenn Sie in der Liste „Benutzer in dieser Abteilung“ der Abteilungsdetails auf einen Benutzer klicken, wird jetzt auf der Benutzerverwaltungsseite die Schublade „Benutzerdetails bearbeiten“ geöffnet. Dies geschieht nur, wenn der aktuell angemeldete Benutzer die Berechtigung zum Bearbeiten der Benutzer hat 4. Eigentümer zum Projekt hinzugefügt Wenn das Projekt nicht „intern sichtbar“ ist, ist es nur für die Eigentümer, die Benutzer in der Liste „Projekt Benutzer“ und für Administratoren mit der Berechtigung „Alle Projekte und Publikationen verwalten“ sichtbar. Der Eigentümer ist standardmäßig die Person, die das Projekt erstellt hat. 5. neue Publikationstypeigenschaften Es gibt drei neue Publikationseigenschaften: Veröffentlicht in Empfänger Interner Link 6. Neue Projektkategorie Eigenschaften Analog zu den Eigenschaften in den Publikationstyp können Sie nun jeder Projektkategorie zusätzliche Eigenschaften hinzufügen. Sie können diese Eigenschaften so einstellen, dass sie je nach Projektkategorie verfügbar sind.   Letzte Aktualisierung: 2026-05-23 · Pflege: Roland Neissl · Quelle: git.agrarforschung.at/ddok/ddok 0.0.6 Versionshinweise 30.01.2026 Fehlerbehebungen 1. Fehler bei berichte ohne parameter Beim Auswählen eine Query Bericht ohne Parameter wurde die Fehlermeldung „Die angeforderte URL / Adresse wurde nicht gefunden.“ angezeigt. Dies funktioniert nun wie erwartet. Außerdem wurde ein Fehler behoben, der nach dem Hinzufügen eines Parameters in der Berichtsverwaltung unter „Bericht hinzufügen“ eine leere Parameterliste anzeigte. 2. Deaktivierung von Projekt- und Publikationsformularen. Beim Hinzufügen oder Speichern eines Projekts oder einer Publikation wurden die Formulare nicht korrekt deaktiviert. Die Elemente in den Formularen sind nun deaktiviert, um Änderungen zu verhindern, und wurden zudem visuell angepasst (ausgegraut), um den deaktivierten Status anzuzeigen. 3. Neue PDF-Dateien sind standardmäßig „In Publikation sichtbar“. Beim Hinzufügen einer neuen Datei zu einer Publikation ist das Kontrollkästchen „In Publikation sichtbar“ nun standardmäßig ausgewählt. Bisher war die Standardeinstellung „nicht ausgewählt“, wodurch die PDF-Datei nur für den Eigentümer sichtbar war. Dies führte zu Verwirrung, da die Datei für andere Benutzer nicht sichtbar war. 4. Publikation konnte nicht gespeichert werden Beim Hinzufügen einer Publikation mit einem Typ, der einen Pflichtparameter enthält, und anschließendem Ändern des Publikationstyps ließ sich die Schaltfläche „Speichern“ nicht aktivieren, selbst wenn alle der Pflichtparameter Text enthielt. Dieses Problem wurde behoben. Neue Funktionen 1.Projektsuche erweiterung Die Projektlistensuche findet auch Projekte anhand des Kostenträgernamens und der BKLR-ID. 2. Die Publikationsliste wird nach dem Erstellen/Speichern einer Publikation aktualisiert. Dies behebt ein häufig auftretendes Problem in der Benutzerfreundlichkeit: Änderungen an Publikationen wurden nicht sofort in der Publikationsliste angezeigt, was den Eindruck erweckte, die Änderungen seien nicht korrekt gespeichert worden. 3. neue Publikationseigenschaften Es gibt jetzt 36 Publikationseigenschaften. In dieser Version wurden folgende Elemente hinzugefügt: Standort Verlag Name Sammelband / Proceedings Name der Konferenz HerausgeberInnen Organisation Projektleitung (wer leitet? Es gibt drei sich ausschließende Kategorien: Mitarbeiter, Leitung Partner, Leitung Konsortium) Partner (Namen der Projektpartner, Organisationen, nicht Personen) Projektvolumen Gesamt Projektvolumen Eigen Externer Link 4. Projekt / Publikationseigenschaften (Autovervollständigung) Die folgenden Publikationseigenschaften verfügen nun über eine Autovervollständigungsfunktion. Die Felder sind Freitextfelder; nach der Auswahl wird eine Dropdown-Liste mit dem gesamten aktuellen Eingabetext für den ausgewählten Publikationstyp angezeigt: Art Standort Schule Universität Name des Journals Projektleitung Darüber hinaus verfügen die folgenden Projekteigenschaften ebenfalls über eine Autovervollständigung: Kooperationspartner Standort des Kooperationspartners 5. Publikationstyp: Zitat Einstellungen Bei der Auswahl eines Publikationstyps stehen nun zwei Registerkarten zur Verfügung. Die erste Registerkarte zeigt die Einstellungen des Publikationstyps an (welche Eigenschaften beim Hinzufügen oder Bearbeiten der Publikation angezeigt werden und ob die jeweilige Eigenschaft erforderlich ist). Die zweite Registerkarte bietet eine neue Benutzeroberfläche, über die Administratoren das Format des Zitats für den ausgewählten Publikationstyp festlegen können. Klicken Sie auf die Schaltfläche „+“, um einen neuen Eintrag zur Liste hinzuzufügen. Klicken Sie auf die Schaltfläche „-“, um eine Zeile aus der Liste zu löschen (Bestätigung erforderlich). Klicken Sie auf das Stiftsymbol, um einen Eintrag in der Liste zu bearbeiten. Verwenden Sie den drag handle links neben einer Zeile, um die Zeilen per Drag & Drop neu anzuordnen. Jede Zeile enthält die folgenden Eigenschaften: Parameter: Wählen Sie die Eigenschaft aus, die im Zitat angezeigt werden soll. Fett: Aktivieren Sie dieses Kontrollkästchen, um festzulegen, ob diese Eigenschaft fett dargestellt werden soll. Präfix: Wenn eine Eigenschaft vorhanden ist, wird das Präfix immer vor dem Wert eingefügt. Suffix: Wenn eine Eigenschaft vorhanden ist, wird das Suffix nach dem Wert eingefügt. Trennzeichen: Wird nur für die Autorenliste verwendet. Dies ist das Trennzeichen zwischen den Einträgen. Hinweis: Einträge werden nicht sofort nach dem Hinzufügen gespeichert. Erstellen Sie stattdessen die gesamte Liste und klicken Sie dann auf die Schaltfläche „Speichern“, um die gesamte Liste zu speichern. Alle Zitaten für den ausgewählten Publikationstyp werden beim Speichern der Einstellungen generiert. Beim Hinzufügen oder Bearbeiten einer Publikation wird das Zitat für diese Publikation generiert. Zitat werden nun auch in den Publikationsdetails angezeigt. 6. Projektleiter, Teammitglied und Autor „Zurucksetzung“ Beim Hinzufügen oder Bearbeiten eines Projekts oder einer Publikation verfügt das Namensfeld nun über eine Schaltfläche „Zurücksetzen“. Dadurch wird der Namenseintrag für interne oder externe Namen entfernt. 7. Die Dropdown-Menüs für Auswahl und Autovervollständigung sind höher. Diese Änderung betrifft die gesamte Anwendung und verbessert die Benutzerfreundlichkeit. Zuvor waren die Dropdown-Menüs in ihrer Höhe begrenzt. Jetzt nutzen sie alle die verfügbare Bildschirmhöhe optimal aus, wodurch die Auswahlmöglichkeiten deutlich besser dargestellt werden. Letzte Aktualisierung: 2026-05-23 · Pflege: Roland Neissl · Quelle: git.agrarforschung.at/ddok/ddok 0.0.7 Versionshinweise 02.03.2026 Fehlerbehebungen 1. Leere Projekteigenschaften werden in der Datenbank als leere string gespeichert und sollten null sein. Die beiden Projekteigenschaften „Standort des Kooperationspartners“ und „Kooperationspartner“ wurden, wenn sie leer gelassen wurden, als leere string in die Datenbank geschrieben. Dies wurde geändert, um das Verhalten an die Publikationseigenschaften anzugleichen, bei denen leere Werte als „Null“ in der Datenbank gespeichert werden. 2. Konnte eine Publikation nicht gespeichert werden? Wenn in der Datenbank für eine Publikation ein ungültiger Wert in einer Eigenschaft vorhanden ist, und diese Eigenschaft nicht mehr verwendet wird (z. B. aufgrund einer Änderung des Publikationstyps), kann die Publikation nicht gespeichert werden, da beispielsweise die Zahlenprüfung (eingabe validierung) einen ungültigen Wert zurückgibt. Dieses Problem wurde nun behoben. Beim Bearbeiten einer solchen Publikation werden nun die Werte in nicht mehr verwendeten Eigenschaften zurückgesetzt. Neue Funktionen 1. Die Kontrollkästchen „Intern sichtbar“ und „Im Projekt sichtbar“ wurden durch Auswahllisten ersetzt, die den Zustand besser beschreiben. Es gab viele Fragen zur Funktionsweise der Berechtigungen (wer kann das Projekt/die Publikation sehen?). Ich habe versucht, dieses Problem zu lösen, indem ich die Kontrollkästchen durch ein Auswahlmenü ersetzt habe, das die Einstellung besser erklärt. Auf der Projektseite stehen folgende Optionen zur Verfügung: und auf der Veröffentlichungsseite diese Optionen: Die Kontrollkästchen für PDF Dateien und die Informations-Kontrollkästchen für Publikationen auf der Projektseite bleiben unverändert. Zusätzlich werden nun auch auf der Detailseite der Publikation Informations-Kontrollkästchen angezeigt, die den Veröffentlichungsstatus des Hauptprojekts und verknüpfter Projekte anzeigen. 2.Globale Eintragsfilterung Oben in der linken Navigation befindet sich nun eine neue Option, mit der Sie zwischen „ALLES“, „WEBSITE“ und „INTERN“ wählen können. Diese Auswahl filtert alle Projekte, Publikationen und PDF-Dateien in Listen- und Detailansichten entsprechend ihrem Veröffentlichungsstatus. „ALLES“ filtert keine Elemente. „WEBSITE“ zeigt nur Einträge und PDFs an, die sowohl intern sichtbar als auch auf der Website veröffentlicht sind. „INTERN“ zeigt nur Einträge an, die nicht auf der Website veröffentlicht sind. Die Veröffentlichungslogik der Website ist hierarchisch: Damit ein Projekt auf der Website veröffentlicht wird, muss die Sichtbarkeit auf „Intern sichtbar für alle Benutzer“ eingestellt und das Kontrollkästchen „Auf der Website“ aktiviert sein. Damit eine Publikation auf der Website veröffentlicht wird, muss die Sichtbarkeit auf „Im Projekt sichtbar“ eingestellt sein (das zugehörige Projekt muss ebenfalls auf der Website vorhanden sein) und das Kontrollkästchen „Auf der Website“ aktiviert sein. Damit eine PDF-Datei auf einer Website veröffentlicht werden kann, muss die zugehörige Publikation auf der Website vorhanden sein und die Kontrollkästchen „In Publikation sichtbar“ und „Auf der Website“ müssen aktiviert sein. 3. Projectfilterung Es gibt jetzt einen neuen Filtermechanismus für Projekte. Die zweite Kopfzeile der Steuerelemente wurde entfernt und durch eine Filterschaltfläche ersetzt, die ein Menü mit den Filteroptionen öffnet. 4. Publikationsfilterung Es gibt jetzt einen neuen Filtermechanismus für Publikationen. Die zweite Kopfzeile der Steuerelemente wurde entfernt und durch eine Filterschaltfläche ersetzt, die ein Menü mit den Filteroptionen öffnet. 5. Format der Publikationsliste Für die Publikationslistenseite gibt es zwei neue Steuerelemente. Diese steuern die Formatierung und Sortierung der list Einträge. Die Formatierungsoptionen befinden sich in einem Popup, das über das Chevron-Symbol kontrol aufgerufen wird. Wenn „Datum anzeigen“ aktiviert ist, wird das Publikationsdatum angezeigt. In diesem Fall ist die Liste innerhalb der Kategorie zunächst absteigend nach Datum und anschließend alphabetisch nach Publikationsname/Zitat sortiert. Wenn „Datum anzeigen“ nicht aktiviert ist, werden die Einträge innerhalb der Kategorie alphabetisch sortiert. Mit dem zweiten Steuerelement kann entweder „Titel“ oder „Zitat“ als Listentext auswählen. Hiermit wird zwischen Titeltext und Zitat umgeschaltet. Die Druckfunktion gibt nun eine Liste gemäß den Einstellungen dieser Steuerelemente aus. Letzte Aktualisierung: 2026-05-23 · Pflege: Roland Neissl · Quelle: git.agrarforschung.at/ddok/ddok 1.0.0 Versionshinweise 19.10.2026 Fehlerbehebungen 1. Beim Ändern des Publikationstyps lässt sich die Publikation nicht speichern, obwohl alle Pflichtfelder ausgefüllt sind. Wenn in der Datenbank für eine Publikation ein ungültiger Wert in einer Eigenschaft vorhanden ist, und diese Eigenschaft nicht mehr verwendet wird (z. B. aufgrund einer Änderung des Publikationstyps), kann die Publikation nicht gespeichert werden, da beispielsweise die Zahlenprüfung (eingabe validierung) einen ungültigen Wert zurückgibt. Dieses Problem wurde nun behoben. Beim Bearbeiten einer solchen Publikation werden nun die Werte in nicht mehr verwendeten Eigenschaften zurückgesetzt. Neue Funktionen 1. Client auf Angular 22 aktualisiert, und nodejs Server auf den neuesten Stand der Sicherheitsupdates gebracht. Vorteile mit angular 22: Schnellere Ladezeiten: Die Website öffnet sich beim ersten Aufruf spürbar schneller, da modernere Ladetechniken im Hintergrund aktiv sind. Flüssigere Bedienung: Die Seiten reagieren sofort auf Klicks und Eingaben, wodurch störende Ruckler oder kurze Verzögerungen minimiert werden. Höhere Zuverlässigkeit: Formulare und Daten werden stabiler verarbeitet, sodass es seltener zu Fehlern oder hängenden Lade-Animationen kommt. Optimiert für neue Geräte: Die Website ist zukunftssicher und läuft auf den neuesten Smartphones, Tablets und Browser-Versionen absolut flüssig. Vorteile nodejs server updates: Schnellere Ladezeiten: Die neueste Version verarbeitet Daten deutlich effizienter. Dadurch lädt die Website schneller und reagiert zügiger, wenn Besucher darauf klicken. Geringere Serverkosten: Das Update sorgt dafür, dass der Server weniger Arbeitsspeicher und Rechenleistung benötigt. Er kann mehr Besucher gleichzeitig bedienen, ohne dass teure Hardware-Upgrades nötig sind. Stärkerer Schutz vor Hackern: Cyberbedrohungen ändern sich ständig. Das Update schließt die neuesten Sicherheitslücken und schützt Ihre Unternehmens- und Kundendaten vor modernen Angriffen.2.  2. PDF Link zur Publikationsliste hinzugefügt In der Publikationsliste findet sich nun ein Link zur zuletzt hochgeladenen PDF-Datei der jeweiligen Publikation. Dies verbessert die Benutzerfreundlichkeit, da Publikationen mit PDF-Datei hervorgehoben werden und dem Nutzer ein Klick erspart wird, wenn er lediglich die neueste PDF-Datei einsehen möchte. 3. Druckfunktion für Projekte Analog zur Publikationsliste gibt es nun auch für Projekte eine Druckfunktion. Diese ermöglicht es dem Nutzer, die Projekte zu filtern und anschließend die gefilterte Projektliste als PDF zu exportieren („Drucken als PDF“). 4. Externe Links sind jetzt anklickbar Wird in einer Publikation ein externer Link bereitgestellt, so wird dieser in der Detailansicht nun als Link angezeigt, der beim Anklicken in einem neuen Tab den verlinkten Inhalt öffnet. 5. Option zur D-ESS-Verknüpfung entfernt Ich habe die Unterstützung für den Betrieb von D-DOK ohne eine Verbindung zu D-ESS entfernt. Dies war eine ursprüngliche Anforderung, die dazu führte, dass zahlreiche Teile der D-DOK-Schnittstelle sowie der Server-API doppelt implementiert werden mussten. Die „Verknüpfung mit D-ESS“ ist nun zwingend erforderlich; dies vereinfacht die zukünftige Entwicklung und reduziert den Testaufwand. Die Konfigurationsoption DESS_LINK_ENABLED  in config.js wird nun ignoriert und kann entfernt werden. 6. Neue Eigenschaft für Publikationstypen hinzugefügt „Projektcode“ kann bei Bedarf Publikationstypen zugewiesen werden. 7. PDF-Textextraktion optimiert und erweitert Der Code, der Text aus PDFs extrahiert, um diese durchsuchbar zu machen, wurde optimiert (30–40 % schnellere Textextraktion) und mithilfe von KI (Claude) weiter verbessert. Bei problematischen PDFs, aus denen die vorherige Version keinen lesbaren Text extrahieren konnte, gelingt der neuen Version die Verarbeitung nun erfolgreich; zudem lässt sich – je nach Inhalt – etwa 10 % mehr lesbarer Text aus den vorhandenen PDFs gewinnen. 8. Website-Export Die wichtigste Neuerung in Version 1.0.0 ist die Funktion zum Website-Export. Diese Funktion hat Auswirkungen auf sämtliche Seiten in D-DOK. Der Website-Export ermöglicht es, die Inhalte der beiden von D-DOK verwendeten Datenbanken zu exportieren. Alle öffentlich zugänglichen Inhalte, die über die D-DOK-Benutzeroberfläche definiert wurden, lassen sich per Knopfdruck in zwei separate Datenbanken übertragen. Diese sind dafür vorgesehen, auf dem Webserver gehostet zu werden, auf dem auch Ihre öffentliche Website betrieben wird. D-DOK stellt eine direkte Verbindung zu diesen extern (web) Datenbanken her, synchronisiert die MariaDB/mySQL-Daten und überträgt die MongoDB-Dateien (PDF und bilder). Die konkrete Umsetzung der öffentlichen Website liegt in der Verantwortung der jeweiligen Dienststelle. Die von D-DOK in die Website-Datenbanken exportierten Informationen können beliebig strukturiert und dargestellt werden. So lassen sich beispielsweise Webseiten nach Schlagwörtern organisieren oder die Navigation so gestalten, dass Publikationen nach Mitarbeitenden oder Abteilungen gegliedert sind. Dies ist eine Entscheidung, die jede Dienststelle für sich treffen sollte. Um die Webentwicklung zu unterstützen, stelle ich den Quellcode für eine Beispiel-Webseite bereit. Diese ist nicht vollständig und wird vom BAB nicht offiziell unterstützt; sie dient lediglich als Hilfestellung für Webentwickler, um die exportierte Datenbankstruktur besser zu verstehen und zu erfahren, wie die Daten effizient ausgelesen und für die Darstellung auf der Website strukturiert werden können. Zudem unterstützt die D-DOK-Benutzeroberfläche nun neben deutschen auch englische Texte, sodass die gesamten Inhalte der Webseite in beiden Sprachen bereitgestellt werden können. 8.1 Einrichtung der Konfiguration für den Website-Export Um die Website-Export-Funktion zu aktivieren, müssen zunächst neue Einträge in der server Datei `config.js` vorgenommen werden. Hier sind die „NEUEN“ Konfigurationseigenschaften, die erforderlich sind:     /////////////////////////////////////     // WEB Database (for Website database export) added in version 1.0.0     /////////////////////////////////////     // WEB_DATABASE_USERNAME: (required)     WEB_DATABASE_USERNAME: 'xxxxx',     // WEB_DATABASE_PASSWORD: (required)     WEB_DATABASE_PASSWORD: 'xxxxx',     // WEB_DATABASE_HOST: hostname or IP address of the database server (required)   WEB_DATABASE_HOST: 'xxxxx',     // WEB_DATABASE_PORT: port to which the database server is bound (required)     WEB_DATABASE_PORT: 3306,     // WEB_DATABASE_NAME: name of the database (required)     WEB_DATABASE_NAME: 'xxxxx',     // WEB_MONGO_DATABASE_USERNAME: (required)     WEB_MONGO_DATABASE_USERNAME: 'xxxxx',     // WEB_MONGO_DATABASE_PASSWORD: (required)     WEB_MONGO_DATABASE_PASSWORD: 'xxxxx',     // WEB_MONGO_DATABASE_HOST hostname or IP address of the database server (required)     WEB_MONGO_DATABASE_HOST: 'xxxxx',     // WEB_MONGO_DATABASE_PORT: port to which the database server is bound (required)     WEB_MONGO_DATABASE_PORT: 27017,     // WEB_MONGO_DATABASE_NAME: name of the database (required)     WEB_MONGO_DATABASE_NAME: 'xxxxx',     /////////////////////////////////////     // Content management for website     /////////////////////////////////////     // CMS_IMAGE_MAXIMUM_FILE_SIZE: maximum file size for uploaded images in bytes (default 512000 bytes = 500k)     CMS_IMAGE_MAXIMUM_FILE_SIZE: 512000, 8.2 Eine neue Systemberechtigungsgruppe für den Website-Administrator einrichten Weisen Sie die entsprechenden Berechtigungen für die Website-Seiten jenen Administratoren zu, die für die Überprüfung der auf der öffentlichen Website veröffentlichten Informationen zuständig sind. Hier ist ein Beispiel dafür, wie die Sicherheitsgruppe konfiguriert werden kann: Weisen Sie Ihren Website-Administrator in der Benutzerverwaltung dieser Sicherheitsgruppe zu. 8.3 Legen Sie fest, welche Eingabefelder in D-DOK verfügbar sein sollen. Je nach Struktur der externen Website können Sie D-DOK so konfigurieren, dass nur die jeweils relevanten Eingabefelder angezeigt werden. Dafür steht eine Konfigurationsseite zur Verfügung, auf der Sie die einzelnen Eingabefelder in D-DOK ein- oder ausschalten können. Dies dient dazu, die Benutzeroberfläche von D-DOK übersichtlicher zu gestalten. Das Deaktivieren eines Eingabefelds hat KEINEN Einfluss auf die exportierte Datenbankstruktur! Sämtliche Inhalte – auch die aus deaktivierten Feldern – werden weiterhin in die Web-Datenbank übertragen. Die hier gezeigten Einstellungen sind diejenigen, die für die von mir erstellte Beispiel-Website verwendet wurden. Im Bereich „Webseite“ von D-DOK können Sie bei Bedarf weitere Seiten hinzufügen (etwa für die Startseite, das Impressum, Kontaktinformationen usw.). Diese Seiten umfassen jeweils ein Bild sowie eine kurze und eine ausführliche Beschreibung (wahlweise mit Eingabemöglichkeiten für deutsche und englische Texte). Sobald die D-DOK-Eingabemöglichkeiten für die Website freigeschaltet sind, können Sie mit der Eingabe der für Ihre Webseite erforderlichen Texte und Bilder beginnen. In den Bereichen Projekte, Publikationen, Benutzerverwaltung, Abteilungen, Projektkategorien, Publikationstypen und Schlagwörter wurden neue Eingabefelder implementiert. Für eine zukünftige Versionist zudem die Unterstützung eines Blog-Bereichs möglich, sodass sich ALLE Inhalte der externen Website bequem direkt aus D-DOK heraus verwalten lassen. Letzte Aktualisierung: 2026-05-23 · Pflege: Roland Neissl · Quelle: git.agrarforschung.at/ddok/ddok 1.0.1 Versionshinweise 21.10.2026 Fehlerbehebungen 1. NG0951 Fehler bei speichern. Beim Speichern von Schlusselworter, Abteilung, Projektkategorie oder Publikationstyp oder Benutzerdetails wurde der Fehler NG0951 angezeigt, sofern der Bild-Upload in den Website-Einstellungen deaktiviert war. Dies wurde nun behoben. 2. Problemen bei Webseite bearbeiten. Beim Bearbeiten einer Webseite wurde das Bild nicht korrekt geladen, und die Bild-Metadaten (Alternativtext und Herkunft) wurden nicht ordnungsgemäß gespeichert. 3. Der Web-Export berücksichtigt nun inaktive Abteilungen. Wenn eine Abteilung in ddok als inaktiv markiert ist, werden die in dieser Abteilung tätigen Personen nicht mehr in der Liste aller Mitarbeitenden aufgeführt; zudem werden diese Personen als „extern“ behandelt, wenn sie als Teammitglieder für ein Projekt oder als Autoren für eine Publikation angegeben werden. 4. E-Mail-Adresse und Telefonnummer werden für inaktive Mitarbeiter nicht mehr exportiert Das Export-Skript wurde aktualisiert, um sicherzustellen, dass für inaktive Mitarbeiter (ehemalige Mitarbeiter) keine Kontaktdaten exportiert werden. 1.0.2 Versionshinweise 03.11.2026 Fehlerbehebungen 1. Website seiten bilder war nicht synchronisiert. Bei der Veröffentlichung der Website (Seite „Webseite“ in D-DOK) wurden die Bilder für die Webseiten nicht in die Web-Datenbank hochgeladen. Dies funktioniert nun wie erwartet. 2. Anpassung des Stylings auf der Beispiel-Webseite. Eingebettete Bilder wurden in den Styles nicht korrekt behandelt. Bei einem schmalen Browserfenster (etwa auf einem Mobilgerät) ragten die Bilder über den Container hinaus. Sie verfügen nun über eine „max-width“-Eigenschaft, sodass sie in einem solchen Fall automatisch an den verfügbaren Platz angepasst werden – unter Beibehaltung ihres Seitenverhältnisses. Listen mit Aufzählungspunkten wurden nicht korrekt dargestellt; sie erschienen stets nummeriert, unabhängig davon, welcher Listenstil in D-DOK ausgewählt wurde. Dies wurde behoben. Die Listen unterstützen nun sämtliche Formate, die auch im Rich-Text-Editor von D-DOK verfügbar sind. Neu entwicklung 1. Blog und Newsletter. In D-DOK gibt es nun Unterstützung für „Blog“ und „Newsletter“. Diese wurden nach dem Navigationspunkt „Publikationen“ hinzugefügt und können über die Systemberechtigungen aktiviert bzw. deaktiviert werden. Die Systemberechtigungen wurden neu strukturiert: Die Berechtigungen sind nun nach Seiten gruppiert, anstatt nach Admin-Gruppen. Die Benutzeroberflächen ermöglichen es autorisierten Nutzern, Inhalte für die öffentliche Webseite zu erstellen. Im Beispiel sind diese unter „Medien“ zu finden; dort können Nachrichten- und Blogbeiträge hinzugefügt werden. Zudem gibt es entsprechende Optionen in den „Veröffentlichungseinstellungen“. Hier lässt sich festlegen, ob in D-DOK Eingabefelder für Bilder, Kurzbeschreibungen und ausführliche Beschreibungen für diese neuen Kategorien bereitgestellt werden sollen. Blogbeiträge umfassen: Bilder (inklusive ALT-Text und Quellenangabe) Mehrsprachigkeitsunterstützung (Englisch) für alle Eingabefelder Schlagwörter Verknüpfte Projekte (beliebige Anzahl) Autoren (beliebige Anzahl) Veröffentlichungsdatum PDF-Dateien (beliebige Anzahl) Kurz- und ausführliche Beschreibungen Newsletter umfassen: Bilder (inklusive ALT-Text und Quellenangabe) Mehrsprachigkeitsunterstützung (Englisch) für alle Eingabefelder Veröffentlichungsdatum PDF-Dateien (beliebige Anzahl) Kurz- und ausführliche Beschreibungen Im Zuge dieser Änderung gibt es nun 7 neue Tabellen in der Datenbank der Website: web_blog web_blog_author web_blog_file web_blog_keyword web_blog_project web_news web_news_file Die vollständige Datenbankstruktur für die exportierte Webdatenbank lautet nun: (Die Struktur bestehender Tabellen wurde nicht verändert. Es wurden lediglich neue Tabellen hinzugefügt.) /*  Navicat Premium Data Transfer  Source Server         : dess local  Source Server Type    : MySQL  Source Server Version : 110412  Source Host           : localhost:3306  Source Schema         : ddok-web  Target Server Type    : MySQL  Target Server Version : 110412  File Encoding         : 65001  Date: 03/11/2026 10:48:30 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for web_blog -- ---------------------------- DROP TABLE IF EXISTS `web_blog`; CREATE TABLE `web_blog`  (   `blog_id` int NOT NULL,   `blog_date` bigint NOT NULL,   `blog_has_english` tinyint NOT NULL DEFAULT 0,   `blog_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `blog_name_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `blog_description_short` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `blog_description_short_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `blog_description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `blog_description_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `blog_description_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `blog_description_text_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `blog_image_uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `blog_image_alt_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `blog_image_alt_text_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `blog_image_source_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   PRIMARY KEY (`blog_id`) USING BTREE,   INDEX `IDX_acae69f9741b2f360e8d490321`(`blog_id`) USING BTREE,   FULLTEXT INDEX `IDX_7e2897643a4f40419c9bfcb9ef`(`blog_description_short`),   FULLTEXT INDEX `IDX_82a0d4a36b8875d1872a2ae3aa`(`blog_description_short_en`),   FULLTEXT INDEX `IDX_de86618fbb60bb5b7bbe2aa770`(`blog_description_text`),   FULLTEXT INDEX `IDX_9932f1446e9e87457ac8031dd0`(`blog_description_text_en`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_blog_author -- ---------------------------- DROP TABLE IF EXISTS `web_blog_author`; CREATE TABLE `web_blog_author`  (   `blog_author_id` int NOT NULL,   `blog_author_blog_id` int NOT NULL,   `blog_author_author_id` int NOT NULL,   `blog_author_author_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `blog_author_internal` tinyint NOT NULL,   PRIMARY KEY (`blog_author_id`) USING BTREE,   INDEX `IDX_3fef8597208e3c8cca6ac032f0`(`blog_author_id`) USING BTREE,   INDEX `IDX_d54ded43c2154220486c648a2c`(`blog_author_blog_id`) USING BTREE,   INDEX `IDX_2050e5dc28acba0c4866f9c439`(`blog_author_author_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_blog_file -- ---------------------------- DROP TABLE IF EXISTS `web_blog_file`; CREATE TABLE `web_blog_file`  (   `blog_file_id` int NOT NULL,   `blog_file_blog_id` int NOT NULL,   `blog_file_bucket` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `blog_file_uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `blog_file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `blog_file_encoding` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `blog_file_mime_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `blog_file_description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `blog_file_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `blog_file_length` int NOT NULL,   PRIMARY KEY (`blog_file_id`) USING BTREE,   INDEX `IDX_49da2f74a541ae1932206d6385`(`blog_file_id`) USING BTREE,   INDEX `IDX_d916d4e469a953386d558e09e7`(`blog_file_blog_id`) USING BTREE,   FULLTEXT INDEX `IDX_12860b3d3fdd816dc24aab6eb9`(`blog_file_description`),   FULLTEXT INDEX `IDX_df21621b1db66c9590c8569ca6`(`blog_file_text`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_blog_keyword -- ---------------------------- DROP TABLE IF EXISTS `web_blog_keyword`; CREATE TABLE `web_blog_keyword`  (   `blog_keyword_id` int NOT NULL,   `blog_keyword_blog_id` int NOT NULL,   `blog_keyword_keyword_id` int NOT NULL,   PRIMARY KEY (`blog_keyword_id`) USING BTREE,   INDEX `IDX_3373b0902257aa8713dbf99b1f`(`blog_keyword_id`) USING BTREE,   INDEX `IDX_86cfa9dde48f84e935055e290f`(`blog_keyword_blog_id`) USING BTREE,   INDEX `IDX_7990d8c95478ea2788c6567732`(`blog_keyword_keyword_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_blog_project -- ---------------------------- DROP TABLE IF EXISTS `web_blog_project`; CREATE TABLE `web_blog_project`  (   `blog_project_id` int NOT NULL,   `blog_project_blog_id` int NOT NULL,   `blog_project_project_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   PRIMARY KEY (`blog_project_id`) USING BTREE,   INDEX `IDX_9f7f5ebc15717b58330041cfdc`(`blog_project_id`) USING BTREE,   INDEX `IDX_cda14b931cbe4def18f1ad475f`(`blog_project_blog_id`) USING BTREE,   INDEX `IDX_3e756cb94f979e5de70d995276`(`blog_project_project_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_department -- ---------------------------- DROP TABLE IF EXISTS `web_department`; CREATE TABLE `web_department`  (   `department_id` int NOT NULL,   `department_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `department_description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `department_leader_id` int NULL DEFAULT NULL,   `department_deputy_id` int NULL DEFAULT NULL,   `department_nsleft` int NOT NULL,   `department_nsright` int NOT NULL,   `department_parent_id` int NULL DEFAULT NULL,   `department_image_uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `department_description_short` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `department_description_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `department_name_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `department_description_short_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `department_description_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `department_description_text_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `department_active` tinyint NOT NULL DEFAULT 0,   `department_image_alt_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `department_image_alt_text_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `department_image_source_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   PRIMARY KEY (`department_id`) USING BTREE,   INDEX `IDX_b6a23c51b5f9522044f599c225`(`department_id`) USING BTREE,   INDEX `IDX_3d72b848a2d10945c300ba7a32`(`department_leader_id`) USING BTREE,   INDEX `IDX_8c97d61c0fceb7d355648c53e5`(`department_deputy_id`) USING BTREE,   INDEX `IDX_911da74dfec04730bdc497e03e`(`department_parent_id`) USING BTREE,   FULLTEXT INDEX `IDX_ebe001c9580693d6eac732a245`(`department_description_short`),   FULLTEXT INDEX `IDX_b05832c0f24e34dfa1965eb1ee`(`department_description_text`),   FULLTEXT INDEX `IDX_53b205b750dccad75bbdbc7952`(`department_description_short_en`),   FULLTEXT INDEX `IDX_ebefe54ef2457b4bfae8ab96da`(`department_description_text_en`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_employee -- ---------------------------- DROP TABLE IF EXISTS `web_employee`; CREATE TABLE `web_employee`  (   `employee_id` int NOT NULL,   `employee_department_id` int NULL DEFAULT NULL,   `employee_active` tinyint NOT NULL,   `employee_firstname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `employee_surname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `employee_email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `employee_telephone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `employee_description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `employee_image_uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `employee_position` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `employee_description_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `employee_description_short` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `employee_position_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `employee_description_short_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `employee_description_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `employee_description_text_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `employee_image_alt_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `employee_image_alt_text_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `employee_image_source_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `employee_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   PRIMARY KEY (`employee_id`) USING BTREE,   INDEX `IDX_bb4354118acf558590ecfa3cb0`(`employee_id`) USING BTREE,   INDEX `IDX_ed2d77671613adc63acbc03f4a`(`employee_department_id`) USING BTREE,   FULLTEXT INDEX `IDX_6a3a0ddaeb8209e465da679eb8`(`employee_description_text`),   FULLTEXT INDEX `IDX_42ffe6bdd195ee56e4e6a93593`(`employee_description_short`),   FULLTEXT INDEX `IDX_98796a3c6fb7ba2895f2ee77e7`(`employee_description_short_en`),   FULLTEXT INDEX `IDX_b8c3924ae383b6158588f5f864`(`employee_description_text_en`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_file -- ---------------------------- DROP TABLE IF EXISTS `web_file`; CREATE TABLE `web_file`  (   `file_id` int NOT NULL,   `file_publication_id` int NOT NULL,   `file_bucket` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `file_uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `file_encoding` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `file_mime_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `file_description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `file_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `file_length` int NOT NULL,   PRIMARY KEY (`file_id`) USING BTREE,   INDEX `IDX_8431cafb7575c4dc2a8031720c`(`file_id`) USING BTREE,   INDEX `IDX_43ee1bd3b345c49491c2b1f91b`(`file_publication_id`) USING BTREE,   FULLTEXT INDEX `IDX_b71e6045519b3351667b84491d`(`file_text`),   FULLTEXT INDEX `IDX_d9ec07b95614b0b256bed76282`(`file_description`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_keyword -- ---------------------------- DROP TABLE IF EXISTS `web_keyword`; CREATE TABLE `web_keyword`  (   `keyword_id` int NOT NULL,   `keyword_parent_id` int NOT NULL,   `keyword_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `keyword_name_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `keyword_description_short` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `keyword_description_short_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `keyword_description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `keyword_description_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `keyword_description_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `keyword_description_text_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `keyword_image_uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `keyword_image_alt_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `keyword_image_alt_text_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `keyword_image_source_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   PRIMARY KEY (`keyword_id`) USING BTREE,   INDEX `IDX_0b53eeaae5f13ead7bfc8ae54d`(`keyword_id`) USING BTREE,   INDEX `IDX_4c79f22c01dcfa9707d7ec4c49`(`keyword_parent_id`) USING BTREE,   FULLTEXT INDEX `IDX_901d0a57af682e825d9e345b05`(`keyword_description_short`),   FULLTEXT INDEX `IDX_b7f86de1af38160e96a0b64ce8`(`keyword_description_short_en`),   FULLTEXT INDEX `IDX_0241ccb2e16eef39b4e21f364a`(`keyword_description_text`),   FULLTEXT INDEX `IDX_c589fb21e27b5469ed4a63717b`(`keyword_description_text_en`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_link -- ---------------------------- DROP TABLE IF EXISTS `web_link`; CREATE TABLE `web_link`  (   `link_id` int NOT NULL,   `link_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `link_url` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   PRIMARY KEY (`link_id`) USING BTREE,   INDEX `IDX_5f96b3b473f2a4faf181b4a441`(`link_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_news -- ---------------------------- DROP TABLE IF EXISTS `web_news`; CREATE TABLE `web_news`  (   `news_id` int NOT NULL,   `news_date` bigint NOT NULL,   `news_has_english` tinyint NOT NULL DEFAULT 0,   `news_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `news_name_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `news_description_short` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `news_description_short_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `news_description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `news_description_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `news_description_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `news_description_text_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `news_image_uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `news_image_alt_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `news_image_alt_text_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `news_image_source_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   PRIMARY KEY (`news_id`) USING BTREE,   INDEX `IDX_d5ed02a99afdd51dd0c535f033`(`news_id`) USING BTREE,   FULLTEXT INDEX `IDX_645de086b0d457bb2a03f0efa3`(`news_description_short`),   FULLTEXT INDEX `IDX_9b526513de52f6c93d5cffb0a1`(`news_description_short_en`),   FULLTEXT INDEX `IDX_2401567a2069147d122531353c`(`news_description_text`),   FULLTEXT INDEX `IDX_a4007758f626b05cbd8534075d`(`news_description_text_en`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_news_file -- ---------------------------- DROP TABLE IF EXISTS `web_news_file`; CREATE TABLE `web_news_file`  (   `news_file_id` int NOT NULL,   `news_file_news_id` int NOT NULL,   `news_file_bucket` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `news_file_uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `news_file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `news_file_encoding` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `news_file_mime_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `news_file_description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `news_file_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `news_file_length` int NOT NULL,   PRIMARY KEY (`news_file_id`) USING BTREE,   INDEX `IDX_83faca6099f82cf0eae754e63e`(`news_file_id`) USING BTREE,   INDEX `IDX_af98395ac6bdd0bd9f7ec832b0`(`news_file_news_id`) USING BTREE,   FULLTEXT INDEX `IDX_68b7c3b4e1f600de5cb694b03f`(`news_file_description`),   FULLTEXT INDEX `IDX_3ac6e8c7e42f42b9da27aede2b`(`news_file_text`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_page -- ---------------------------- DROP TABLE IF EXISTS `web_page`; CREATE TABLE `web_page`  (   `page_id` int NOT NULL,   `page_description_short` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `page_description` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `page_description_text` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `page_image_uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `page_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `page_name_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `page_description_short_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `page_description_en` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `page_description_text_en` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `page_image_alt_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `page_image_alt_text_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `page_image_source_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   PRIMARY KEY (`page_id`) USING BTREE,   INDEX `IDX_d0e22bed39c0d29b1079643a61`(`page_id`) USING BTREE,   FULLTEXT INDEX `IDX_90c8a4be3da0b0d748789c1749`(`page_description_short`),   FULLTEXT INDEX `IDX_d6cef9b6c236f74b9e874a2d13`(`page_description_text`),   FULLTEXT INDEX `IDX_624d72e4d8be4ab939a3b08a3f`(`page_description_short_en`),   FULLTEXT INDEX `IDX_e4c426c1e625614b8c3f39c720`(`page_description_text_en`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_project -- ---------------------------- DROP TABLE IF EXISTS `web_project`; CREATE TABLE `web_project`  (   `project_id` int NOT NULL,   `project_category_id` int NOT NULL,   `project_department_id` int NULL DEFAULT NULL,   `project_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `project_description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `project_description_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `project_start` bigint NULL DEFAULT NULL,   `project_end` bigint NULL DEFAULT NULL,   `project_first_leader_id` int NULL DEFAULT NULL,   `project_first_leader_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `project_second_leader_id` int NULL DEFAULT NULL,   `project_second_leader_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `project_third_leader_id` int NULL DEFAULT NULL,   `project_third_leader_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `project_dafne` int NULL DEFAULT NULL,   `project_sap_kostenstelle` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `project_image_uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `project_has_english` tinyint NOT NULL DEFAULT 0,   `project_name_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `project_description_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `project_description_text_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `project_image_alt_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `project_image_alt_text_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `project_image_source_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `project_description_short` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `project_description_short_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   PRIMARY KEY (`project_id`) USING BTREE,   INDEX `IDX_4ecc64a40265110f92b44170c2`(`project_id`) USING BTREE,   INDEX `IDX_bfa30604ef62bd5cb530e95dd4`(`project_category_id`) USING BTREE,   INDEX `IDX_fa87d7e34447c6b08178917b08`(`project_department_id`) USING BTREE,   FULLTEXT INDEX `IDX_caa06feb4365eb792242399fb8`(`project_description_text`),   FULLTEXT INDEX `IDX_08ab5a6239ac3b46122b1e0298`(`project_description_text_en`),   FULLTEXT INDEX `IDX_918c44fc3ca0834278da06713f`(`project_description_short`),   FULLTEXT INDEX `IDX_c1bbd1d93dc8c7d3b72957d058`(`project_description_short_en`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_project_category -- ---------------------------- DROP TABLE IF EXISTS `web_project_category`; CREATE TABLE `web_project_category`  (   `project_category_id` int NOT NULL,   `project_category_order` int NOT NULL,   `project_category_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `project_category_name_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `project_category_description_short` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `project_category_description_short_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `project_category_description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `project_category_description_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `project_category_description_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `project_category_description_text_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `project_category_image_uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `project_category_image_alt_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `project_category_image_alt_text_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `project_category_image_source_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   PRIMARY KEY (`project_category_id`) USING BTREE,   INDEX `IDX_cf6de50f0f7fb43631301ee737`(`project_category_id`) USING BTREE,   FULLTEXT INDEX `IDX_c02e8742af398eda0f523d8980`(`project_category_description_short`),   FULLTEXT INDEX `IDX_1c98d1b98f0643558797e420be`(`project_category_description_short_en`),   FULLTEXT INDEX `IDX_722c49c824e0cb5238042b9f30`(`project_category_description_text`),   FULLTEXT INDEX `IDX_e859acd40a1d435453ea92ddb9`(`project_category_description_text_en`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_project_keyword -- ---------------------------- DROP TABLE IF EXISTS `web_project_keyword`; CREATE TABLE `web_project_keyword`  (   `project_keyword_id` int NOT NULL,   `project_keyword_project_id` int NOT NULL,   `project_keyword_keyword_id` int NOT NULL,   PRIMARY KEY (`project_keyword_id`) USING BTREE,   INDEX `IDX_9c81d744003090539a799dbda0`(`project_keyword_id`) USING BTREE,   INDEX `IDX_1da0e7cdbf17c80155da1e952b`(`project_keyword_project_id`) USING BTREE,   INDEX `IDX_97e385ac3a0de60a674f2ee441`(`project_keyword_keyword_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_project_team -- ---------------------------- DROP TABLE IF EXISTS `web_project_team`; CREATE TABLE `web_project_team`  (   `project_team_id` int NOT NULL,   `project_team_project_id` int NOT NULL,   `project_team_member_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `project_team_member_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `project_team_internal` tinyint NOT NULL,   PRIMARY KEY (`project_team_id`) USING BTREE,   INDEX `IDX_ba8242702b7d0fe7e2a79e04a8`(`project_team_id`) USING BTREE,   INDEX `IDX_2293614bf3395ab89cdd997618`(`project_team_project_id`) USING BTREE,   INDEX `IDX_87eae0830cf480cb7de664777a`(`project_team_member_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_publication -- ---------------------------- DROP TABLE IF EXISTS `web_publication`; CREATE TABLE `web_publication`  (   `publication_id` int NOT NULL,   `publication_project_id` int NOT NULL,   `publication_type_id` int NOT NULL,   `publication_date` bigint NOT NULL,   `publication_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `publication_quote` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `publication_description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `publication_description_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `publication_first_author_id` int NULL DEFAULT NULL,   `publication_first_author_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `publication_second_author_id` int NULL DEFAULT NULL,   `publication_second_author_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `publication_third_author_id` int NULL DEFAULT NULL,   `publication_third_author_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `publication_image_uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `publication_extra_properties` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `publication_has_english` tinyint NOT NULL DEFAULT 0,   `publication_name_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `publication_description_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `publication_description_text_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `publication_image_alt_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `publication_image_alt_text_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `publication_image_source_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `publication_description_short` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `publication_description_short_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   PRIMARY KEY (`publication_id`) USING BTREE,   INDEX `IDX_4a365fb077536f666bc5f1ec80`(`publication_id`) USING BTREE,   INDEX `IDX_a1caed3a21d8fcaaf4b1082159`(`publication_project_id`) USING BTREE,   INDEX `IDX_dd6776c573277a3513c35824e0`(`publication_type_id`) USING BTREE,   FULLTEXT INDEX `IDX_de7de5ec277b678324ec6c729d`(`publication_description_text`),   FULLTEXT INDEX `IDX_d2e82dac139edbcff8156c2ebe`(`publication_description_text_en`),   FULLTEXT INDEX `IDX_a1a4e0256894744bfea27f5e27`(`publication_description_short`),   FULLTEXT INDEX `IDX_8f5963ddf4437ace7bc7a99cc4`(`publication_description_short_en`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_publication_author -- ---------------------------- DROP TABLE IF EXISTS `web_publication_author`; CREATE TABLE `web_publication_author`  (   `publication_author_id` int NOT NULL,   `publication_author_publication_id` int NOT NULL,   `publication_author_author_id` int NOT NULL,   `publication_author_author_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `publication_author_internal` tinyint NOT NULL,   PRIMARY KEY (`publication_author_id`) USING BTREE,   INDEX `IDX_7abafad1dc7b9d8fda469a64a6`(`publication_author_id`) USING BTREE,   INDEX `IDX_026110932f6e4f1a7adf7c76de`(`publication_author_publication_id`) USING BTREE,   INDEX `IDX_03fa2d636d2dd787e70c35d986`(`publication_author_author_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_publication_keyword -- ---------------------------- DROP TABLE IF EXISTS `web_publication_keyword`; CREATE TABLE `web_publication_keyword`  (   `publication_keyword_id` int NOT NULL,   `publication_keyword_publication_id` int NOT NULL,   `publication_keyword_keyword_id` int NOT NULL,   PRIMARY KEY (`publication_keyword_id`) USING BTREE,   INDEX `IDX_9edf99a3274de2c4b3448e1095`(`publication_keyword_id`) USING BTREE,   INDEX `IDX_2eef163cab3f84854a11b0ab77`(`publication_keyword_publication_id`) USING BTREE,   INDEX `IDX_132665b0bcbfa042619859b842`(`publication_keyword_keyword_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_publication_project -- ---------------------------- DROP TABLE IF EXISTS `web_publication_project`; CREATE TABLE `web_publication_project`  (   `publication_project_id` int NOT NULL,   `publication_project_publication_id` int NOT NULL,   `publication_project_project_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   PRIMARY KEY (`publication_project_id`) USING BTREE,   INDEX `IDX_859739adfe40d0731117cb0cc0`(`publication_project_id`) USING BTREE,   INDEX `IDX_fa29a5d9d2dca4093024d25640`(`publication_project_publication_id`) USING BTREE,   INDEX `IDX_887866875b25390a299607e466`(`publication_project_project_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for web_publication_type -- ---------------------------- DROP TABLE IF EXISTS `web_publication_type`; CREATE TABLE `web_publication_type`  (   `publication_type_id` int NOT NULL,   `publication_type_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,   `publication_type_order` int NOT NULL,   `publication_type_parent_id` int NOT NULL,   `publication_type_name_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `publication_type_description_short` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `publication_type_description_short_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `publication_type_description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `publication_type_description_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `publication_type_description_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `publication_type_description_text_en` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,   `publication_type_image_uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',   `publication_type_image_alt_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `publication_type_image_alt_text_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   `publication_type_image_source_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,   PRIMARY KEY (`publication_type_id`) USING BTREE,   INDEX `IDX_c5eccec7eb91115ce18f6693ec`(`publication_type_id`) USING BTREE,   FULLTEXT INDEX `IDX_1fb849a65a095959039a05c80d`(`publication_type_description_short`),   FULLTEXT INDEX `IDX_544fbfc52e86dc0aea19b63b83`(`publication_type_description_short_en`),   FULLTEXT INDEX `IDX_c8274e53d98b0030ad10d477a9`(`publication_type_description_text`),   FULLTEXT INDEX `IDX_277914cf6fea00f73ad4383bb4`(`publication_type_description_text_en`) ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1; Systemadministration Hinweis (0.0.8-Erweiterungen): Mit Version 0.0.8 kommen zwei zusaetzliche Datenbank-Verbindungen für den Website-Sync hinzu ( WEB_DATABASE_* und WEB_MONGO_DATABASE_*). Siehe Seite 0.0.8 Versionshinweise und Architektur-Überblick. Installieren und Konfigurieren von MongoDB Befehlszeile für Debian: apt update apt-get install curl gnupg2 wget -y curl -fsSL https://pgp.mongodb.com/server-7.0.asc | gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] http://repo.mongodb.org/apt/debian bullseye/mongodb-org/7.0 main" | tee /etc/apt/sources.list.d/mongodb-org-7.0.list apt update apt install mongodb-org -y mongod --version systemctl start mongod systemctl enable mongod # create admin user mongosh     use admin     db.createUser( {user: "admin", pwd: "xxxxxxxx", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });     exit; # switch on authentication vi /etc/mongod.conf     security:     authorization: enabled     net:     bindIp:192.168.xxx.xxx (or leave as 127.0.0.1 or hostname as required) systemctl restart mongod systemctl status mongod # Optional: if Status is not running (error 14) it may be that you need to remove socket lock (permissions are now incorrect) cd /tmp rm -rf mongodb*.sock # log in and create database user mongosh "mongodb://admin:xxxxxxxx@192.168.xxx.xxx:27017/ddok" --authenticationDatabase admin     db.createUser( {user: "ddok", pwd: "xxxxxxxx", roles: [ { role: "readWrite", db: "ddok" } ] }) Unpack mongodb Dies ist erforderlich, wenn wir Ihnen einen MongoDB-Dump gesendet haben. mongorestore --host=192.168.xxx.xxx --port=27017 --username=ddok --password=xxxxxxxx --db=ddok --archive=mongodump node server config.js (für version 1.0.0) module.exports = {     /////////////////////////////////////     //  Configuration for D-DOK server     //  All of these values may be overridden by setting environment variables     /////////////////////////////////////       // NODE_ENV: 'development' | 'production' (default)     NODE_ENV: 'production',     // PORT: web server port (default 80)     PORT: 3000,     // PROXY: trust reverse proxy when setting secure cookies (via the "X-Forwarded-Proto" header) (default false)     PROXY: false,       /////////////////////////////////////     // Logging     /////////////////////////////////////       // LOG_ENABLED: true (default) | false     LOG_ENABLED: true,     // LOG_LEVEL: 'error' | 'warn' | 'info' (default) | 'verbose' | 'debug' | 'silly'     LOG_LEVEL: 'verbose',       /////////////////////////////////////     // D-DOK Database     /////////////////////////////////////       // DATABASE_TYPE: 'mysql' (required)     DATABASE_TYPE: 'mysql',     // DATABASE_USERNAME: (required)     DATABASE_USERNAME: 'xxxxx',     // DATABASE_PASSWORD: (required)     DATABASE_PASSWORD: 'xxxxx',     // DATABASE_HOST: hostname or IP address of the database server (required)     DATABASE_HOST: 'localhost',     // DATABASE_PORT: port to which the database server is bound (required)     DATABASE_PORT: 3306,     // DATABASE_NAME: name of the database (required)     DATABASE_NAME: 'xxxxx',       /////////////////////////////////////     // Mongo Database     /////////////////////////////////////       // MONGO_DATABASE_USERNAME: (required)     MONGO_DATABASE_USERNAME: 'xxxxx',      // MONGO_DATABASE_PASSWORD: (required)     MONGO_DATABASE_PASSWORD: 'xxxxx',     // MONGO_DATABASE_HOST hostname or IP address of the database server (required)     MONGO_DATABASE_HOST: '127.0.0.1',     // MONGO_DATABASE_PORT: port to which the database server is bound (required)     MONGO_DATABASE_PORT: 27017,     // MONGO_DATABASE_NAME: name of the database (required)     MONGO_DATABASE_NAME: 'xxxxx',       /////////////////////////////////////     // Active Directory (LDAP) Authentication     /////////////////////////////////////       // AD_ENABLED: Active Directory auth enabled     AD_ENABLED: false,     // AD_URL: URL of the ldap server (required)     AD_URL: 'ldaps://DC1.xxxxx.network',     // AD_BIND_DN: username that will be used to do the searching and request (required)     AD_BIND_DN: 'DC=xxxxx,DC=network',     // AD_BIND_USER: username for LDAP bind (required)     AD_BIND_USER: 'xxxxx@xxxxx.network',     // AD_BIND_PASSWORD: password for LDAP bind (required)     AD_BIND_PASSWORD: 'xxxxx',     // AD_USERNAME_ATTRIBUTE: Username attribute     AD_USERNAME_ATTRIBUTE: 'sAMAccountName',     // AD_SEARCH_FILTER: search filter for user nodes. {{username}} is posted to LDAP (required)     AD_SEARCH_FILTER: '(sAMAccountName={{username}})',      // AD_GROUP_FILTER: search filter for group nodes.     AD_GROUP_FILTER: 'OU=Guest,DC=xxxxx,DC=network',       /////////////////////////////////////     // OpenID Connect (OIDC) Authentication     /////////////////////////////////////       // OIDC_ENABLED: OIDC auth enabled     OIDC_ENABLED: false,     // OIDC_BUTTON_SHOW: Show button on login page     OIDC_BUTTON_SHOW: false,     // OIDC_BUTTON_TEXT: Text to show on login page button     OIDC_BUTTON_TEXT: 'Mit Keycloak Anmelden',     // OIDC_CLIENT_SECRET: secret application password in OIDC server     OIDC_CLIENT_SECRET: 'xxxxx',     // OIDC_CLIENT_ID: public client id in OIDC server     OIDC_CLIENT_ID: 'xxxxx',     // OIDC_ISSUER: OIDC Issuer URL     OIDC_ISSUER: 'https://sso.xxxxx.at/realms/xxxxx',       /////////////////////////////////////     // SMTP Email server (optional)     /////////////////////////////////////       // EMAIL_ENABLED: Email enabled     EMAIL_ENABLED: false, // true     // EMAIL_USERNAME: SMTP server username     EMAIL_USERNAME: 'xxxxx@xxxxx.network',     // EMAIL_PASSWORD: SMTP server password     EMAIL_PASSWORD: 'xxxxx',     // EMAIL_FROM: Email address     EMAIL_FROM: 'noreply@xxxxx.network',     // EMAIL_HOST: hostname or IP address of the SMTP server     EMAIL_HOST: 'mail.xxxxx.network',     // EMAIL_PORT: port to which the SMTP server is bound      EMAIL_PORT: 587,     // EMAIL_SECURE: if true the connection will use TLS when connecting to server.     // If false (the default) then TLS is used if server supports the STARTTLS extension.     // In most cases set this value to true if you are connecting to port 465.     // For port 587 or 25 keep it false     EMAIL_SECURE: false,     // TEXT and HTML templates for email notifications     // {administrator} - substituted with name of user who has triggered the notification "Surname, Firstname"     // {dateTime} - substituted with formatted datetime of the event "DD.MM.YYYY HH:mm:ss"     // {projectName} - substituted with name of the project     // {publicationName} - substituted with name of the publication     // {fileNames} - substituted with comma separated list of added file names          EMAIL_ADD_PUBLICATION_NOTIFICATION_SUBJECT: 'D-DOK Notifikation: Neue Publikation',     EMAIL_ADD_PUBLICATION_NOTIFICATION_TEXT: 'Eine neue Publikation wurde von {administrator} am {dateTime} erstellt.',     EMAIL_ADD_PUBLICATION_NOTIFICATION_HTML: '{projectName}
Eine neue Publikation wurde von {administrator} am {dateTime} erstellt.
{publicationName}',     EMAIL_ADD_PUBLICATION_PDF_NOTIFICATION_SUBJECT: 'D-DOK Notifikation: Neue Publikation PDF',     EMAIL_ADD_PUBLICATION_PDF_NOTIFICATION_TEXT: 'Eine neue Publikation PDF wurde von {administrator} am {dateTime} hochgeladen.',     EMAIL_ADD_PUBLICATION_PDF_NOTIFICATION_HTML: '{projectName}
Eine neue Publikation PDF wurde von {administrator} am {dateTime} hochgeladen.
{publicationName}',     EMAIL_USER_ADD_PROJECT_ADMIN_NOTIFICATION_SUBJECT: 'D-DOK Notifikation: Ihnen wurde die Berechtigung eines Projektadministrators erteilt',     EMAIL_USER_ADD_PROJECT_ADMIN_NOTIFICATION_TEXT: 'Sie wurden von {administrator} am {dateTime} zum Projektadministrator für das Projekt {projectName} ernannt.',     EMAIL_USER_ADD_PROJECT_ADMIN_NOTIFICATION_HTML: '{projectName}
Sie wurden von {administrator} am {dateTime} zum Projektadministrator ernannt.',       /////////////////////////////////////     // WEB Database (for Website database export) added in version 1.0.0     /////////////////////////////////////       // WEB_DATABASE_USERNAME: (required)     WEB_DATABASE_USERNAME: 'xxxxx',     // WEB_DATABASE_PASSWORD: (required)     WEB_DATABASE_PASSWORD: 'xxxxx',     // WEB_DATABASE_HOST: hostname or IP address of the database server (required)     WEB_DATABASE_HOST: '192.168.xx.xx',     // WEB_DATABASE_PORT: port to which the database server is bound (required)     WEB_DATABASE_PORT: 3306,     // WEB_DATABASE_NAME: name of the database (required)     WEB_DATABASE_NAME: 'xxxxx',       // WEB_MONGO_DATABASE_USERNAME: (required)     WEB_MONGO_DATABASE_USERNAME: 'xxxxx',      // WEB_MONGO_DATABASE_PASSWORD: (required)     WEB_MONGO_DATABASE_PASSWORD: 'xxxxx',     // WEB_MONGO_DATABASE_HOST hostname or IP address of the database server (required)     WEB_MONGO_DATABASE_HOST: '192.268.xx.xx',     // WEB_MONGO_DATABASE_PORT: port to which the database server is bound (required)     WEB_MONGO_DATABASE_PORT: 27017,     // WEB_MONGO_DATABASE_NAME: name of the database (required)     WEB_MONGO_DATABASE_NAME: 'xxxxx',     /////////////////////////////////////     // Content management for website     /////////////////////////////////////     // CMS_IMAGE_MAXIMUM_FILE_SIZE: maximum file size for uploaded images in bytes (default 512000 bytes = 500k)     CMS_IMAGE_MAXIMUM_FILE_SIZE: 512000,       /////////////////////////////////////     // System settings     /////////////////////////////////////       // SYSTEM_PUBLICATION_TYPE_SHOW_AUTHOR_POINTS: show author points on publication type page     SYSTEM_PUBLICATION_TYPE_SHOW_AUTHOR_POINTS : false,     // SYSTEM_WIJMO_LICENSE_KEY: wijmo license     SYSTEM_WIJMO_LICENSE_KEY: 'xxxxx' }; Letzte Aktualisierung: 2026-05-23 · Pflege: Roland Neissl · Quelle: git.agrarforschung.at/ddok/ddok 1.0.3 Versionshinweise 04.11.2026 (in progress) 1. Mögliches Sicherheitsproblem behoben Einige der D-DOK-API-Endpunkte waren anfällig für SQL-Injection. Dies stellte zwar kein gravierendes Problem dar, da die API-Parameter bereits vor der Einbindung in SQL-Abfragen auf ihren Typ und ihre Gültigkeit geprüft wurden. Dennoch habe ich im Sinne bewährter Sicherheitsstandards alle API-Endpunkte überprüft und sichergestellt, dass Parameter ausschließlich über TypeORM-Parameter in SQL-Abfragen eingebunden werden. Dadurch werden potenzielle Schwachstellen durch entsprechendes Escaping oder Entfernen kritischer Zeichen wirksam unterbunden. 2. Problem mit Blogeinträgen behoben. Der Blog ermöglicht die Verknüpfung von Projekten. Beim Abrufen der Projekt-IDs vom Server lieferte die API jedoch fälschlicherweise die Blog-ID anstelle der Projekt-ID. Die korrekten IDs wurden zwar in der Datenbank gespeichert, aber beim Aufruf des Blogeintrags wurde das falsche Projekt angezeigt. Es handelte sich um einen Tipp-/Kopier-/Einfügefehler.