Skip to main content

Gantt Projects - Releases

← App details

Nextcloud 34

Gantt Projects 1.4.2
Release Details
UpdatedAug. 20, 2026, 4:41 a.m.
Changelog

Changed

  • release.sh fragt die Versionsnummer jetzt interaktiv ab, statt sie nur aus appinfo/info.xml zu lesen: zu Beginn werden die aktuelle Version und das letzte Release-Tag angezeigt und es wird gefragt, ob eine neue Nummer vergeben werden soll (Vorschlag: nächster Patch-Level). Die Eingabe wird auf das Format X.Y.Z, auf einen echten Versionssprung und auf ein noch nicht vergebenes Tag geprüft und dann nach appinfo/info.xml, package.json und package-lock.json geschrieben. Fehlt ein Changelog-Abschnitt zur neuen Version, warnt das Skript; anschließend bietet es an, den Bump als chore: Version X.Y.Z zu committen — nötig, weil der Tag-Name den Commit-Hash enthält. Für nicht-interaktive Läufe gibt es --version=X.Y.Z und --no-bump; ohne TTY wird nie gefragt, make release bleibt also unverändert nutzbar
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturepoVHZxteU3AR2cpRRV98jNfv4j7rWnLEd3kbpn5Dp4T1ubAI+0QlRf9jxi0BaYz1
+1dg+3Yt25uN6Slp1FHiw7kyqt5HJ60XgnOWo+Zt0YBHSnWqLDhF8zxPEnQCkF+v
nUvscpcoQY2bRiIBZhVWVgeAD592uvOA4gfRDrUyLVDKjOrzBu3ScbNvCqTqE9IC
vs8qZkRLIcaD6tKoSLT2pZqmwBoCdClvEw5D5v40WSvLq232BZnXpQ4ogG3QvJdL
mYO8HlPZKVOxANp0MGnWle4IFRMbMt22Ebpkjc18Q9Q4AIv/Sd3zTsc+uMONTM95
s0GXvLSm95o0UCFZ1CL7fCEq7NwlprjVrTeWGmlJNVjHJuIyRKHEz5DR12s0lAGm
/rKGWjoVP+Wvk3upRizR/5y2fpWoiwuDqCtz9gQN6+HHYLaqLvYqsAJ/SxmtLtP7
8B2rK61ClKowz4phbTZdrCaF8w3IWnFFBTFquIVFuN2jUoHvdCMtd0910sLAMY5M
Xs9nk0FVsP23zKXlQpOojq7ouCQagRhsnBJDLxWRR+NIq582f7SDgcrkBqxlGJX4
/Ql9V+2iFx61QANCTjdJIO3LbvbK60vGos+ency0GfvSDbPovDAVyJzt8ZUh5BNw
UXQ4XOHJZAagAr36rKttk1DQbZZ/2bUEq231c96m83g=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.4.1
Release Details
UpdatedAug. 17, 2026, 7:43 p.m.
Changelog

Fixed

  • Die Meilenstein-Raute hatte eine fest verdrahtete Farbe (#fbbf24) statt der Projektfarbe zu folgen, obwohl Balken für Aufgaben und Teilprojekte bereits korrekt eingefärbt wurden (Issue #102). Zusätzlich wurden die separaten – und wirkungslosen – Farbwähler bei Teilprojekt und Aufgabe entfernt, da deren Anzeige ohnehin immer der Projektfarbe folgt
  • „Meilenstein hinzufügen" im Drei-Punkte-Menü der Projektliste nutzte zwei aufeinanderfolgende window.prompt()-Dialoge (Name, dann Datum als Freitext) statt des regulären Detail-Dialogs (Issue #101). Der Klick emittiert jetzt add-milestone analog zu „Aufgabe hinzufügen" (Issue #91) und öffnet denselben Meilenstein-Dialog wie beim Bearbeiten, mit vorbelegtem Projekt
  • Im festen Datumsmodus des Aufgaben-Detaildialogs konnte ein Enddatum vor dem Startdatum eingegeben und gespeichert werden (Issue #100). Jetzt zieht ein über das Enddatum hinaus verschobenes Startdatum das Enddatum mit; ein zu frühes Enddatum erzeugt ein rotes Fehler-Icon am Feld, hält den Fokus dort und deaktiviert den Speichern-Button, bis ein gültiges Datum eingetragen ist (dateField() in fields.js mit neuer setError()-Methode)
  • Eine Aufgabe mit Abhängigkeit behielt trotzdem die manuell eingegebenen Start-/Enddatumsfelder, die beim Speichern durch die Abhängigkeitsberechnung überschrieben wurden – für Nutzer nicht nachvollziehbar (Issue #99). Der Aufgaben-Detaildialog hat jetzt denselben Fixed-date/Dependency-Umschalter wie Meilensteine (Issue #90): im Dependency-Modus ersetzt eine Dauer (Tage) die Datumsfelder, die Abhängigkeit bestimmt den Termin. Serverseitig wendet TaskService::create() neu hinzugefügte Abhängigkeiten sofort an (bisher nur update()), damit auch neu angelegte Aufgaben keinen die Abhängigkeit ignorierenden Platzhaltertermin behalten
  • Der Speichern-Button des Detail-Dialogs blieb nach dem Hinzufügen einer Abhängigkeit deaktiviert: die Gültigkeitsprüfung hing allein am input-Event, das bei einem <select> vor dem change-Event feuert – zu diesem Zeitpunkt war die Abhängigkeit noch nicht in der Liste. detailModal.js wertet jetzt zusätzlich change aus, der Abhängigkeits-Editor (fields.js) meldet jede Mutation (Hinzufügen, Entfernen, Typwechsel) und der Fixed-date/Dependency-Umschalter in taskForm.js den Moduswechsel über ein eigenes bubbelndes change-Event

Added

  • CONTRIBUTE.md und setup-dev.sh für neue Mitwirkende (Issue #98): Projekt-Leitlinien (FOSS, Datensparsamkeit, Security), VIBE Coding ausdrücklich erlaubt, sowie der komplette lokale Dev-Setup-Weg (Docker-only, Nextcloud + MariaDB unter localhost:8088, optionales E2E-Setup, Git-/Bot-Auth). setup-dev.sh automatisiert diese Schritte, konfigurierbar über --workdir/--no-e2e/--no-docker-install
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturetYcUvVtDEQrAakG32EQF1atSOmz91/8XudCUh60A9r/AxMv+AA5AX2rIvNYDkEn0
OuTmXA6Iz0DoVkdij11MPDhfLaUy0mXeLbwB5fj/xF/cFYcNeCFGKD3k2jyRwOTo
2n1sEp0r8sn0fitHzLfhcB/By0VJkZyhaO/NctP01XfcSQM7lGEOeY/uagtGaDTI
JnPLoQTHo0nUOv4y7jUMZuurEgBOc4yeUxTKv4A/m642hvNQIS0q6K9ON41JHKIO
UtI7DbDWSboVhct1Go3zoj5XcaAGG9ZiwSkJDt/BXT5tWH4SOnSn7mys0j1F6Y0g
vIJWjz6S2RlekwIrIxgyaeEVBOeQ4OM1ilJGWKXDyYJM/0IBxqnqRXDkAFlOopDo
xezlcFdWTkYL5OBKMFJhKuTy7dEQ9hxx5Nz4+vLbNV8gDJZBI+5yI5m8W+809WIH
iKUpIda1ShOblvYH6Ek5AzBdTmoFQ6T4f7iWT7j1i4uUP2DsgehjGVl8yDIT/wyx
nV9t7koXapu1WeXrunSa++mXsi3lceNpthdz5/cUEOe9yWvc1rrulRhiWzePga8H
zjVQYGAIPvwYkWa47U6Zh7HBsQaS+9yQ8NDnD49SS4jUWTGlwNqfM+q9fZ16/G9d
7l4chZUPPbBv+xWfdxmFw+MC5zdkAq27isHToTqnm+w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.4.0
Release Details
UpdatedAug. 13, 2026, 6:41 a.m.
Changelog

Added

  • Meilensteine werden jetzt immer direkt unter ihrem übergeordneten Objekt angezeigt statt gesammelt am Projektende (Issue #90): Meilensteine lassen sich neu auch einer Aufgabe zuordnen (bisher nur Projekt/Teilprojekt, Spalte task_id war bereits vorhanden, es fehlte nur die UI), das Auswahlfeld im Detail-Dialog heißt entsprechend „Übergeordnetes Objekt" statt „Teilprojekt". Zusätzlich können Meilensteine ihr Datum jetzt statt eines fixen Werts aus einer Abhängigkeit zum übergeordneten Objekt beziehen (EA/AA/EE/AE, analog zu Aufgaben-Abhängigkeiten; neue Spalte dependency_type, Migration Version1028) – da ein Meilenstein keine Dauer hat, bestimmen EA/EE das Ende und AA/AE den Start des Zielobjekts. Die Berechnung übernimmt der neue MilestoneDateService (serverseitig live bei jedem Abruf sowie im ICS-Feed neu aufgelöst, nicht persistiert propagiert) sowie clientseitig in frappeRows.js für sofortige Reaktivität ohne Neuladen
  • Undo für Drag-&-Drop-Verschiebungen inkl. Propagationskette (Issue #85, Umsetzung der einstufigen Empfehlung: letzte eigene Operation, kein Redo, zunächst nur Drag & Drop): Migration Version1027Date20260810020000 ergänzt nc_gantt_change_events um op_id (UUID) – alle Change-Events einer zusammenhängenden Operation (Drag + gesamte Propagationskette B→C→D) erhalten dieselbe op_id, erzeugt in TaskService::update()/propagateDates() und über ChangeEventService::log() protokolliert (dieses Change-Tracking war bisher tote Scaffolding-Logik ohne Aufrufer). Neuer Endpoint POST /api/v1/changes/{opId}/revert (ChangeEventController::revert, ChangeEventService::revertOperation) wendet alle Change-Events der Operation invers an, in einer DB-Transaktion mit Rechteprüfung über AccessService::canEditOrOwn(). Konfliktschutz: Revert wird mit HTTP 409 abgelehnt, sobald der aktuelle Feldwert nicht mehr dem protokollierten new_value entspricht (jemand hat zwischenzeitlich erneut geändert); der Revert selbst erzeugt wiederum neue Change-Events, die Audit-Historie bleibt lückenlos. Frontend: nach jedem gespeicherten Drag zeigt GanttChart.vue einen Toast „N Termine verschoben — Rückgängig" (showUndo aus @nextcloud/dialogs, 10 s sichtbar) sowie ein globales Ctrl+Z für die letzte eigene Operation der Session (stores/projects.js: lastOperation, revertOperation(), undoLastOperation())
  • Kalender-Export als abonnierbarer ICS-Feed pro Projekt (Issue #83, Variante A aus dem Umsetzungsvorschlag): neue öffentliche Route GET /apps/nc_gantt/projects/{id}/calendar.ics?token=… (regulärer, unauthentifizierter CalendarFeedController, damit externe Clients wie Thunderbird, Nextcloud Kalender oder mobile Apps ohne Nextcloud-Login abonnieren können) liefert Meilensteine als ganztägige VEVENTs (◆-Präfix), den aus den Aufgaben abgeleiteten Projektzeitraum sowie optional Teilprojekt-Zeiträume (Schalter „Auch Teilprojekt-Zeiträume einschließen", standardmäßig aus, um den Feed bei großen Projekten nicht zu überladen). Zugriff erfolgt über einen pro Projekt generierten, 256-Bit-zufälligen Token in der URL (CalendarFeedService, neue Spalte calendar_token auf nc_gantt_projects, Migration Version1026), der über einen neuen „Kalender-Feed"-Bereich im Freigabe-Dialog angezeigt, kopiert und jederzeit widerrufen/neu generiert werden kann (CalendarTokenController, nur für Projekt-Admins/-Eigentümer). ICS-Generierung ohne neue Abhängigkeit, RFC-5545-konform (Escaping, Zeilenfaltung)
  • What-if-Simulationsmodus für Terminverschiebungen (Issue #84): neuer Endpunkt POST /api/v1/projects/{id}/simulate führt Terminpropagation und CPM rein im Speicher aus (kein DB-Schreibzugriff) – TaskService::simulate() nutzt die neu extrahierte, stateless propagateDatesCore()-Kernlogik, die auch der persistierende update()-Pfad verwendet, CriticalPathService::computeFromTasks() erlaubt CPM auf einem hypothetisch veränderten Task-Datensatz. Frontend: „Simulation"-Toggle in der Gantt-Toolbar mit Banner inkl. Projektende-Delta in Arbeitstagen, Geisterbalken für die Ist-Termine (analog Baseline-Overlay) sowie Verwerfen/Übernehmen. Drag & Drop ruft im Simulationsmodus simulate() statt einer echten Speicherung auf. Szenarien bleiben bewusst flüchtig (kein Speichern benannter Szenarien), „Übernehmen" wendet die Änderungen als einzelne Task-Updates an, Simulation läuft pro Projekt
  • Neuer Eintrag „Aufgabe hinzufügen" im Drei-Punkte-Menü der Projektliste (Issue #91): legt wie der „Neu"-Button eine Aufgabe an, belegt dabei aber das gewählte Projekt direkt vor, sodass der Projekt-Auswahlschritt in der Maske entfällt
  • Such-/Filterleiste für Projekte, Teilprojekte und Aufgaben (Issue #81, Stufe 1: rein clientseitig auf Basis der bereits geladenen Daten aktivierter Projekte): Freitextsuche im Titel, Risiko, „überfällig" (Ende < heute und Fortschritt < 100 %), „über Budget" (Ist-Kosten > geplantes Budget), Ressource und „ohne Deck-Verknüpfung". Neuer Pinia-Store stores/filters.js (Zustand pro Nutzer in localStorage persistiert) und reine Matching-Logik in gantt/filterMatch.js. Nicht passende Balken werden in GanttChart.vue gedimmt statt ausgeblendet (Abhängigkeitspfeile und Zeitkontext bleiben lesbar), Projekte/Teilprojekte gelten als Treffer, sobald ein Nachfahre passt. Dieselbe Filterleiste (components/FilterBar.vue) dimmt in ProjectList.vue nicht passende Projekte; für nicht aktivierte Projekte sind nur Titel-Treffer zuverlässig auswertbar, da deren Aufgaben/Teilprojekte nicht geladen sind

Changed

  • Freigabe für Nextcloud 34 (Issue #94): max-version in appinfo/info.xml von 33 auf 34 angehoben, unterstützter Bereich damit NC 28–34. Verifiziert gegen Nextcloud 34.0.2 mit PHP 8.5 und MariaDB 11.4 (148 Unit-Tests, 39 E2E-Tests)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturerdYQI+Semnk0cWtKqUZinVDHk0KpxyqB5Ox4NBL9pyf5nrpK8xZpe9lBxc6zhDfW
8adLfVIwQtX+bI7S1O05xm0hwrUHQQ2ii6ADD8mlAxnZjdhKSCAhZ0NcaqT7Em0X
nD7yRP2B8zAAQMJNjzeBsLbzveNrXMoGzFrvm/jFxskUIUS01ykfWEg2C5+5/IAf
7jBAM8x2Qj92b8zyBFpLjfJQw9aTE/trtCsmZXQFmkJjGS0anrJc9dXKfqnHxknX
8jmLOv4Yq4Qtk3UF35HTiIGcA2W0UKfVyFb4XcrIMeSmLXXcagJWjeH5nB18UUNn
JyCgE/qY4v/SnrNQU92mIdMOQGuvYg7xbaz226lgNdwM2HuM9U8nc2juqJxAO+Wp
xs85yl82qIviZ5YY39HK371MZ/ufMsaVsVy3Nfn3PjqqkzGLmtAL6KJDcKHZWdDw
ugEPwO61DxnERZsNGeFpXfzCxjMpZc/qwUIfGw85idmU2vdedtrxHBkDGoqu1IP7
xZOO8uSYrzbXM6g1gs3WPBOY51CmZLs5pIQTN1tVl5ifGw4uOuzDBUCKiR5oA2MI
352HbA7wwWFgwoN9W5t4MRTowmaYpM8AB+nh9f1A5q9S8SelfMpXOqGew9VZb2jd
AuiJK/LEPjRgs5s3/FfC4Sb1MSsXDr1N1jziaF4MomM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32

Nextcloud 33

Gantt Projects 1.4.2
Release Details
UpdatedAug. 20, 2026, 4:41 a.m.
Changelog

Changed

  • release.sh fragt die Versionsnummer jetzt interaktiv ab, statt sie nur aus appinfo/info.xml zu lesen: zu Beginn werden die aktuelle Version und das letzte Release-Tag angezeigt und es wird gefragt, ob eine neue Nummer vergeben werden soll (Vorschlag: nächster Patch-Level). Die Eingabe wird auf das Format X.Y.Z, auf einen echten Versionssprung und auf ein noch nicht vergebenes Tag geprüft und dann nach appinfo/info.xml, package.json und package-lock.json geschrieben. Fehlt ein Changelog-Abschnitt zur neuen Version, warnt das Skript; anschließend bietet es an, den Bump als chore: Version X.Y.Z zu committen — nötig, weil der Tag-Name den Commit-Hash enthält. Für nicht-interaktive Läufe gibt es --version=X.Y.Z und --no-bump; ohne TTY wird nie gefragt, make release bleibt also unverändert nutzbar
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturepoVHZxteU3AR2cpRRV98jNfv4j7rWnLEd3kbpn5Dp4T1ubAI+0QlRf9jxi0BaYz1
+1dg+3Yt25uN6Slp1FHiw7kyqt5HJ60XgnOWo+Zt0YBHSnWqLDhF8zxPEnQCkF+v
nUvscpcoQY2bRiIBZhVWVgeAD592uvOA4gfRDrUyLVDKjOrzBu3ScbNvCqTqE9IC
vs8qZkRLIcaD6tKoSLT2pZqmwBoCdClvEw5D5v40WSvLq232BZnXpQ4ogG3QvJdL
mYO8HlPZKVOxANp0MGnWle4IFRMbMt22Ebpkjc18Q9Q4AIv/Sd3zTsc+uMONTM95
s0GXvLSm95o0UCFZ1CL7fCEq7NwlprjVrTeWGmlJNVjHJuIyRKHEz5DR12s0lAGm
/rKGWjoVP+Wvk3upRizR/5y2fpWoiwuDqCtz9gQN6+HHYLaqLvYqsAJ/SxmtLtP7
8B2rK61ClKowz4phbTZdrCaF8w3IWnFFBTFquIVFuN2jUoHvdCMtd0910sLAMY5M
Xs9nk0FVsP23zKXlQpOojq7ouCQagRhsnBJDLxWRR+NIq582f7SDgcrkBqxlGJX4
/Ql9V+2iFx61QANCTjdJIO3LbvbK60vGos+ency0GfvSDbPovDAVyJzt8ZUh5BNw
UXQ4XOHJZAagAr36rKttk1DQbZZ/2bUEq231c96m83g=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.4.1
Release Details
UpdatedAug. 17, 2026, 7:43 p.m.
Changelog

Fixed

  • Die Meilenstein-Raute hatte eine fest verdrahtete Farbe (#fbbf24) statt der Projektfarbe zu folgen, obwohl Balken für Aufgaben und Teilprojekte bereits korrekt eingefärbt wurden (Issue #102). Zusätzlich wurden die separaten – und wirkungslosen – Farbwähler bei Teilprojekt und Aufgabe entfernt, da deren Anzeige ohnehin immer der Projektfarbe folgt
  • „Meilenstein hinzufügen" im Drei-Punkte-Menü der Projektliste nutzte zwei aufeinanderfolgende window.prompt()-Dialoge (Name, dann Datum als Freitext) statt des regulären Detail-Dialogs (Issue #101). Der Klick emittiert jetzt add-milestone analog zu „Aufgabe hinzufügen" (Issue #91) und öffnet denselben Meilenstein-Dialog wie beim Bearbeiten, mit vorbelegtem Projekt
  • Im festen Datumsmodus des Aufgaben-Detaildialogs konnte ein Enddatum vor dem Startdatum eingegeben und gespeichert werden (Issue #100). Jetzt zieht ein über das Enddatum hinaus verschobenes Startdatum das Enddatum mit; ein zu frühes Enddatum erzeugt ein rotes Fehler-Icon am Feld, hält den Fokus dort und deaktiviert den Speichern-Button, bis ein gültiges Datum eingetragen ist (dateField() in fields.js mit neuer setError()-Methode)
  • Eine Aufgabe mit Abhängigkeit behielt trotzdem die manuell eingegebenen Start-/Enddatumsfelder, die beim Speichern durch die Abhängigkeitsberechnung überschrieben wurden – für Nutzer nicht nachvollziehbar (Issue #99). Der Aufgaben-Detaildialog hat jetzt denselben Fixed-date/Dependency-Umschalter wie Meilensteine (Issue #90): im Dependency-Modus ersetzt eine Dauer (Tage) die Datumsfelder, die Abhängigkeit bestimmt den Termin. Serverseitig wendet TaskService::create() neu hinzugefügte Abhängigkeiten sofort an (bisher nur update()), damit auch neu angelegte Aufgaben keinen die Abhängigkeit ignorierenden Platzhaltertermin behalten
  • Der Speichern-Button des Detail-Dialogs blieb nach dem Hinzufügen einer Abhängigkeit deaktiviert: die Gültigkeitsprüfung hing allein am input-Event, das bei einem <select> vor dem change-Event feuert – zu diesem Zeitpunkt war die Abhängigkeit noch nicht in der Liste. detailModal.js wertet jetzt zusätzlich change aus, der Abhängigkeits-Editor (fields.js) meldet jede Mutation (Hinzufügen, Entfernen, Typwechsel) und der Fixed-date/Dependency-Umschalter in taskForm.js den Moduswechsel über ein eigenes bubbelndes change-Event

Added

  • CONTRIBUTE.md und setup-dev.sh für neue Mitwirkende (Issue #98): Projekt-Leitlinien (FOSS, Datensparsamkeit, Security), VIBE Coding ausdrücklich erlaubt, sowie der komplette lokale Dev-Setup-Weg (Docker-only, Nextcloud + MariaDB unter localhost:8088, optionales E2E-Setup, Git-/Bot-Auth). setup-dev.sh automatisiert diese Schritte, konfigurierbar über --workdir/--no-e2e/--no-docker-install
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturetYcUvVtDEQrAakG32EQF1atSOmz91/8XudCUh60A9r/AxMv+AA5AX2rIvNYDkEn0
OuTmXA6Iz0DoVkdij11MPDhfLaUy0mXeLbwB5fj/xF/cFYcNeCFGKD3k2jyRwOTo
2n1sEp0r8sn0fitHzLfhcB/By0VJkZyhaO/NctP01XfcSQM7lGEOeY/uagtGaDTI
JnPLoQTHo0nUOv4y7jUMZuurEgBOc4yeUxTKv4A/m642hvNQIS0q6K9ON41JHKIO
UtI7DbDWSboVhct1Go3zoj5XcaAGG9ZiwSkJDt/BXT5tWH4SOnSn7mys0j1F6Y0g
vIJWjz6S2RlekwIrIxgyaeEVBOeQ4OM1ilJGWKXDyYJM/0IBxqnqRXDkAFlOopDo
xezlcFdWTkYL5OBKMFJhKuTy7dEQ9hxx5Nz4+vLbNV8gDJZBI+5yI5m8W+809WIH
iKUpIda1ShOblvYH6Ek5AzBdTmoFQ6T4f7iWT7j1i4uUP2DsgehjGVl8yDIT/wyx
nV9t7koXapu1WeXrunSa++mXsi3lceNpthdz5/cUEOe9yWvc1rrulRhiWzePga8H
zjVQYGAIPvwYkWa47U6Zh7HBsQaS+9yQ8NDnD49SS4jUWTGlwNqfM+q9fZ16/G9d
7l4chZUPPbBv+xWfdxmFw+MC5zdkAq27isHToTqnm+w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.4.0
Release Details
UpdatedAug. 13, 2026, 6:41 a.m.
Changelog

Added

  • Meilensteine werden jetzt immer direkt unter ihrem übergeordneten Objekt angezeigt statt gesammelt am Projektende (Issue #90): Meilensteine lassen sich neu auch einer Aufgabe zuordnen (bisher nur Projekt/Teilprojekt, Spalte task_id war bereits vorhanden, es fehlte nur die UI), das Auswahlfeld im Detail-Dialog heißt entsprechend „Übergeordnetes Objekt" statt „Teilprojekt". Zusätzlich können Meilensteine ihr Datum jetzt statt eines fixen Werts aus einer Abhängigkeit zum übergeordneten Objekt beziehen (EA/AA/EE/AE, analog zu Aufgaben-Abhängigkeiten; neue Spalte dependency_type, Migration Version1028) – da ein Meilenstein keine Dauer hat, bestimmen EA/EE das Ende und AA/AE den Start des Zielobjekts. Die Berechnung übernimmt der neue MilestoneDateService (serverseitig live bei jedem Abruf sowie im ICS-Feed neu aufgelöst, nicht persistiert propagiert) sowie clientseitig in frappeRows.js für sofortige Reaktivität ohne Neuladen
  • Undo für Drag-&-Drop-Verschiebungen inkl. Propagationskette (Issue #85, Umsetzung der einstufigen Empfehlung: letzte eigene Operation, kein Redo, zunächst nur Drag & Drop): Migration Version1027Date20260810020000 ergänzt nc_gantt_change_events um op_id (UUID) – alle Change-Events einer zusammenhängenden Operation (Drag + gesamte Propagationskette B→C→D) erhalten dieselbe op_id, erzeugt in TaskService::update()/propagateDates() und über ChangeEventService::log() protokolliert (dieses Change-Tracking war bisher tote Scaffolding-Logik ohne Aufrufer). Neuer Endpoint POST /api/v1/changes/{opId}/revert (ChangeEventController::revert, ChangeEventService::revertOperation) wendet alle Change-Events der Operation invers an, in einer DB-Transaktion mit Rechteprüfung über AccessService::canEditOrOwn(). Konfliktschutz: Revert wird mit HTTP 409 abgelehnt, sobald der aktuelle Feldwert nicht mehr dem protokollierten new_value entspricht (jemand hat zwischenzeitlich erneut geändert); der Revert selbst erzeugt wiederum neue Change-Events, die Audit-Historie bleibt lückenlos. Frontend: nach jedem gespeicherten Drag zeigt GanttChart.vue einen Toast „N Termine verschoben — Rückgängig" (showUndo aus @nextcloud/dialogs, 10 s sichtbar) sowie ein globales Ctrl+Z für die letzte eigene Operation der Session (stores/projects.js: lastOperation, revertOperation(), undoLastOperation())
  • Kalender-Export als abonnierbarer ICS-Feed pro Projekt (Issue #83, Variante A aus dem Umsetzungsvorschlag): neue öffentliche Route GET /apps/nc_gantt/projects/{id}/calendar.ics?token=… (regulärer, unauthentifizierter CalendarFeedController, damit externe Clients wie Thunderbird, Nextcloud Kalender oder mobile Apps ohne Nextcloud-Login abonnieren können) liefert Meilensteine als ganztägige VEVENTs (◆-Präfix), den aus den Aufgaben abgeleiteten Projektzeitraum sowie optional Teilprojekt-Zeiträume (Schalter „Auch Teilprojekt-Zeiträume einschließen", standardmäßig aus, um den Feed bei großen Projekten nicht zu überladen). Zugriff erfolgt über einen pro Projekt generierten, 256-Bit-zufälligen Token in der URL (CalendarFeedService, neue Spalte calendar_token auf nc_gantt_projects, Migration Version1026), der über einen neuen „Kalender-Feed"-Bereich im Freigabe-Dialog angezeigt, kopiert und jederzeit widerrufen/neu generiert werden kann (CalendarTokenController, nur für Projekt-Admins/-Eigentümer). ICS-Generierung ohne neue Abhängigkeit, RFC-5545-konform (Escaping, Zeilenfaltung)
  • What-if-Simulationsmodus für Terminverschiebungen (Issue #84): neuer Endpunkt POST /api/v1/projects/{id}/simulate führt Terminpropagation und CPM rein im Speicher aus (kein DB-Schreibzugriff) – TaskService::simulate() nutzt die neu extrahierte, stateless propagateDatesCore()-Kernlogik, die auch der persistierende update()-Pfad verwendet, CriticalPathService::computeFromTasks() erlaubt CPM auf einem hypothetisch veränderten Task-Datensatz. Frontend: „Simulation"-Toggle in der Gantt-Toolbar mit Banner inkl. Projektende-Delta in Arbeitstagen, Geisterbalken für die Ist-Termine (analog Baseline-Overlay) sowie Verwerfen/Übernehmen. Drag & Drop ruft im Simulationsmodus simulate() statt einer echten Speicherung auf. Szenarien bleiben bewusst flüchtig (kein Speichern benannter Szenarien), „Übernehmen" wendet die Änderungen als einzelne Task-Updates an, Simulation läuft pro Projekt
  • Neuer Eintrag „Aufgabe hinzufügen" im Drei-Punkte-Menü der Projektliste (Issue #91): legt wie der „Neu"-Button eine Aufgabe an, belegt dabei aber das gewählte Projekt direkt vor, sodass der Projekt-Auswahlschritt in der Maske entfällt
  • Such-/Filterleiste für Projekte, Teilprojekte und Aufgaben (Issue #81, Stufe 1: rein clientseitig auf Basis der bereits geladenen Daten aktivierter Projekte): Freitextsuche im Titel, Risiko, „überfällig" (Ende < heute und Fortschritt < 100 %), „über Budget" (Ist-Kosten > geplantes Budget), Ressource und „ohne Deck-Verknüpfung". Neuer Pinia-Store stores/filters.js (Zustand pro Nutzer in localStorage persistiert) und reine Matching-Logik in gantt/filterMatch.js. Nicht passende Balken werden in GanttChart.vue gedimmt statt ausgeblendet (Abhängigkeitspfeile und Zeitkontext bleiben lesbar), Projekte/Teilprojekte gelten als Treffer, sobald ein Nachfahre passt. Dieselbe Filterleiste (components/FilterBar.vue) dimmt in ProjectList.vue nicht passende Projekte; für nicht aktivierte Projekte sind nur Titel-Treffer zuverlässig auswertbar, da deren Aufgaben/Teilprojekte nicht geladen sind

Changed

  • Freigabe für Nextcloud 34 (Issue #94): max-version in appinfo/info.xml von 33 auf 34 angehoben, unterstützter Bereich damit NC 28–34. Verifiziert gegen Nextcloud 34.0.2 mit PHP 8.5 und MariaDB 11.4 (148 Unit-Tests, 39 E2E-Tests)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturerdYQI+Semnk0cWtKqUZinVDHk0KpxyqB5Ox4NBL9pyf5nrpK8xZpe9lBxc6zhDfW
8adLfVIwQtX+bI7S1O05xm0hwrUHQQ2ii6ADD8mlAxnZjdhKSCAhZ0NcaqT7Em0X
nD7yRP2B8zAAQMJNjzeBsLbzveNrXMoGzFrvm/jFxskUIUS01ykfWEg2C5+5/IAf
7jBAM8x2Qj92b8zyBFpLjfJQw9aTE/trtCsmZXQFmkJjGS0anrJc9dXKfqnHxknX
8jmLOv4Yq4Qtk3UF35HTiIGcA2W0UKfVyFb4XcrIMeSmLXXcagJWjeH5nB18UUNn
JyCgE/qY4v/SnrNQU92mIdMOQGuvYg7xbaz226lgNdwM2HuM9U8nc2juqJxAO+Wp
xs85yl82qIviZ5YY39HK371MZ/ufMsaVsVy3Nfn3PjqqkzGLmtAL6KJDcKHZWdDw
ugEPwO61DxnERZsNGeFpXfzCxjMpZc/qwUIfGw85idmU2vdedtrxHBkDGoqu1IP7
xZOO8uSYrzbXM6g1gs3WPBOY51CmZLs5pIQTN1tVl5ifGw4uOuzDBUCKiR5oA2MI
352HbA7wwWFgwoN9W5t4MRTowmaYpM8AB+nh9f1A5q9S8SelfMpXOqGew9VZb2jd
AuiJK/LEPjRgs5s3/FfC4Sb1MSsXDr1N1jziaF4MomM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.3.1
Release Details
UpdatedAug. 6, 2026, 12:57 p.m.
Changelog

Added

  • Regressionstests für die Rollentrennung Viewer/Editor/Admin: ForbiddenException-Tests für TaskService::create/update/delete/syncProgress und ProjectService::updateProject/deleteProject (inkl. „Editor darf nicht löschen") sowie erstmalige Testabdeckung für SubProjectService und MilestoneService

Fixed

  • CSV-/Formel-Injection im Aufgaben-Export (detail/io.js exportCsv): Task-Felder wie Titel oder Beschreibung, die mit =, +, - oder @ beginnen, wurden unverändert übernommen und von Excel/LibreOffice/Google Sheets als Formel ausgewertet. Die Absicherung aus ReportView.vue liegt jetzt in einer gemeinsamen Utility (src/utils/csv.js, escCsvCell) und wird an beiden Export-Stellen verwendet
  • Viewer sahen im Frontend dieselbe Oberfläche wie Editor/Admin (Add Task/Subproject/Milestone, Share, Delete Project, Drag/Resize im Gantt-Chart, volle Bearbeitungsformulare), obwohl das Backend Schreibversuche ohnehin korrekt ablehnte – kein Least-Privilege an der UI. ProjectService::getAccessibleProjects()/getProject()/createProject()/updateProject() liefern jetzt das effektive permission-Feld (AccessService::getEffectivePermission()) mit; ProjectList.vue, GanttChart.vue (inkl. Drag/Resize-Sperre je Projekt) und das Detail-Modal (detail/detailModal.js) blenden Schreib-Aktionen für Viewer aus bzw. schalten Formulare read-only
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureBUyDeI9y7iKD1wQJLHrW6IFq0zuXOJQ1Zv/x+0RryIIQ0fAGAUjwQyLDYLYpRzPg
6ITDPfY9bftVlwkB8w9LqZiFETkH8mgc6l5XB7F6NKzFrdaSnNw21CIVJjWyHpkR
mxDq+vQepZd+YtB9jMz39kbFk9BNHrpKIwIXXZVqEqj1U54NmT+5XnT892m9mY6o
RWQNf3Mn5WcH3vmoDi/UAOgDaO30GFCRJePryurVpK7stkub8K6fYsWIkS5NeJlP
YHdb4nBlkhUzQFjo0ZDSkCSiWjMdyCrtEanX6m6Ffhr+j0jpd+J9soMSjrzdzt4T
5mETo8xc61IQIVFWMD6fZ3/oCmbx2TFDZsJjRpFKxoPA08AkdC7xjxHoaKYZHvi4
+tzowxPzMfyjQ/hEj2dwq22doM2lXK1Y13VvV8kkaomrAQjB97gf+ODrYZNDgNvc
2ijU08B4cAB0HbEveDpDRjCJj8D5OwCMafRMa4Ul/nm0+RiBFOhIjDYdVAnCp7Ql
IEc4UQZM9WYLQlouwGPk83POpbqkbc8vKAucGBXvHAbxNpUSOGbssMYFGU/e9pOg
+oT2gcJrC3MYPGIWnS8iLn75PK1H063KFJv5yqC+h/rqwX/FxyTzKvofJi68GpLs
WtG3y67W8Ju4y1I9iQ9raJxxhFUJrStibGy9gc7L0DM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.3.0
Release Details
UpdatedJuly 9, 2026, 5:23 a.m.
Changelog

Fixed

  • Baseline-Toggle im Gantt-Toolbar zeigte nie Baseline-Balken und PUT baseline/active warf einen SQL-Fehler: baseline_id auf nc_gantt_projects wurde mit der 3-Ebenen-Migration versehentlich zusammen mit den tatsächlich berechneten Spalten entfernt (Migration Version1025 stellt die Spalte wieder her). BaselineService::create() aktiviert eine frisch eingefrorene Baseline jetzt automatisch fürs Projekt; renderBaselineBars() (GanttChart.vue) und baselineOverlay.js lesen Baseline-Items dafür über task_id statt des seit der Umstellung auf das 3-Ebenen-Modell nicht mehr existierenden subproject_id-Felds
  • OCS-API-Fehlerantworten (400/404/500 …) lieferten für alle OCSController-Endpunkte einen leeren text/html-Body statt des erwarteten JSON-Envelopes mit message; ExceptionMiddleware wirft jetzt passende OCP\AppFramework\OCS\OCSException-Subklassen statt einer rohen DataResponse, die Nextcloud-Core nur für 401/403 automatisch formatiert. Betroffene Controller (ProjectController, ReportController, ShareController, ChangeEventController, WorkScheduleController, WorkCalendarController, HolidayAdminController, SettingsController) wurden zusätzlich auf die bestehende ApiException-Hierarchie umgestellt

Removed

  • Nie ausgewertete Gruppen-Freigabe-Option entfernt: Share::TYPE_GROUP, principal_type-Parameter in ShareController sowie die DB-Spalte principal_type (Migration Version1024) wurden gestrichen; Freigaben sind jetzt ausschließlich benutzerbezogen

Changed

  • Dashboard-Summary (DashboardController::summary) lädt Baselines und Aufgaben-KPIs jetzt über gruppierte SQL-Aggregat-Queries statt pro Projekt einzeln (N+1-Fix, gilt auch für den Admin-Fall mit allen Instanz-Projekten)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureNJfbRJEXzKGipUjUW9tUKayHoY6ltSU0ZeCQXcDx6XVDY/naLK0dVY9ciofXU7oy
40sJIOsjxcUZbalDwqncPn0vjGoqmk3BFUT7KotEpLLf8/ZmIjdHEbQbJHzEpdQV
y5YedjqRLKB7/Ul35JWVFxY8eutCsYkonfof7v6AGMGB/RjQ7GDB6jWunEEwqUGV
3Y1isvdq5N3oo9NDY/QR0C2C7jiMnB9Kon0KzZ2yp0oF5euOpA/qrtmqxG3L9PoZ
DW1ppwAuARWtRDu4tcDAAQAkF1Mrg5YyYgRoKm7uVazlKEP7DxX56g/g4RS2otEE
rKsA/ER9yYiHnNyGcZuK9Jkfe2Ua6/R7gzJilRvHZ7CBPkhY+XNPcrjlsHbCJEJJ
cX/b0B56p7FyAFy6XjMY9PYFhxy/ubHE7Sk8ixX88uxgM4vf/sSFQaN84CcG/qqA
Nq/OEytBjZP82TsFFYBRcPKEPskF4ejjhNVC4bJpiuCIpo51nIxjeFGtDpeQiDG7
0OWc/GCvsz5W3eG7ShmQsRf0DoivL8tjgDUlMWO9boTpUy2Vnm1rDMKu6nFGKZ8o
TWTZR6u4zGZW1OBERdlU5NQmqxqXrsuGlT6r6DuQnWsWiscjXOyIFeHz+EOKhQOk
wUuN6xN8QES1CDFB27PYV0Sz2KhYhM78GKLCc9B10Ic=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.2.0
Release Details
UpdatedJuly 5, 2026, 9:21 a.m.
Changelog

Added

  • Löschen-Buttons im Detail-Modal für Teilprojekt, Aufgabe und Meilenstein
  • Deutsche App-Beschreibung in info.xml ergänzt

Fixed

  • Baseline-Datum und Kommentar im Report werden untereinander angezeigt
  • Dashboard-Widget zeigt Baseline-Datum und KPI-Werte korrekt an
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureXuYTZMxTlGNJVrGvU/GcIjSlBTYreXdvF5FilCmsi+l7MBvFlyeW1DsnxAsao3pu
HyhvaKXRnkraVQNT2ULgX4BmjUnhsELROrK03gtY88Odzqzh7RIXYkNkRcy92ara
56HIP8BBRD3m1c8pYPfpZfLAzkuurAzVqbJ6qbxw1AebdlPCFEq2g6C+IOcTon0T
q9ZD2I2XJmWd42EXXqva+NMrcx1jfjmHWVtl7xHKhwPndFCtHPMMAdoDS0Xpbh1V
3Ns4h/DphDpC8/ZYZ5sbpMCBekHw4VTZDGxNAuXJ5DMPhkqg2MxVplkS19PuBHLx
r74sgsz611Gjg55gjKOqCb5ZZEvqZTrwKTEYIbu8HicWtq/HxKRZS3FZN9MThTTX
Hesv65vsq9fH0UhEM6MVJjE5Phnw8Wb5ivtAiaUA+NzPrDfrHZAsSfR9NFL3rhFC
7wOmnXtzK40NjmqyMWJu/UP9UVbz3SeEiHiQO9GwBc2krzmXzcmLZFgEjty4CGoJ
SzXAA1QGpUGO4n0b3Y/5zSY4UxogGWybW+mOs27KDLytI915wNYGvBtcdAKCj6Ws
1uVA98npwMid/WSJJ04BXHX8LbowrDeTezSFJyGh+u/KnhlzkA7fqEuu3nQGT5rA
a9qeMmd5kmLBIVcG9RVVmw1kc0AK0qIqZDmlk9dWGJs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.1.1
Release Details
UpdatedMay 27, 2026, 6:43 p.m.
Changelog

Added

  • Glossar-Button in der Navigation (über den Einstellungen) mit interaktivem Nachschlagewerk
  • Dreispaltige Glossar-Tabelle: Begriff/Abkürzung, Bedeutung/Englisch, Erklärung mit Berechnungsformeln
  • 30 Einträge in 6 Abschnitten: Allgemein, Terminplanung, Baseline & Berichtswesen, Earned Value Management, Ressourcen & Kapazität, Budget

Fixed

  • Fehlende deutsche Übersetzungen für englische UI-Strings ergänzt (Add dependency, Baseline, Dependencies, Remove, Work, No projects yet, Open Gantt Projects, u.a.)
  • Leere Übersetzung für Deck-Fortschritt-Hinweis befüllt
  • de.js vollständig mit de.json synchronisiert (war ~70 Einträge veraltet)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureF1RHJx15J/N8tWNrDlAX1MFE/9tsct4PViEcBDeo8U/V2qJ/tezL7Xk0BVmYxjWw
pB+J685mcHjikh93/aZUqG8C6y0mR3TTJfaa7dLCIRMc1034x6Xj9Nd7Q9YVH4yi
RLTcRhrG2pN1Iqc23kwId995GJXHnCBEyuQuzo9m1VtA7GoFa8W2nqhXVT94khDS
8ZHQrixDfv63d4GfA5N2x4+phaiyObdskvCmVSuKrmouYvCGpPevtKG5YxzOrHid
aL48Kod0YgOCAD8nAqOhEmioP0m+wP2e/NC4Z5svSKT3vdlE67W1M68ipQQfnhPI
txui+2X8zFvoe/M5sE3DaXbLnOVNGQ7YRpyXFI5GsQmQ0cPSSO/94Mw15hLZfwMf
TDOrrvzf+Vu05sUTZ6CFh4FrSl4e5Q6Xjv6uH4BZtyOpPxl+ajgW4OkZvQDbt4KC
8aTZodMcDpXlRMDdBSxT1bT9tD05KUKmEZYtpxHiARrHDuQQCRSuxtjitQD9lbla
CMxKrBiO0YgdUb3FuczYkWEH+y8gW5egU6TDMnjAVbuUecGuGZN1Cc6tarcFWRu2
+V7Qn+aNoXEwP5e/0TM4Ig8ETAYseZRiTPHxeWiSg3RnU3HuT6kPVWw8LERACDT4
6F4WU9t2+4kESMLMjeV0/2UBQSykR/42Idsg0PtvpyQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.1.1 (nightly)
Release Details
UpdatedMay 27, 2026, 5:24 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureF4W7QJB8rVJ2xARdnhUbEouzRZMKcowz/ToDwr0oVFrVUbInFvHAMqXFTOVD1a5N
kDTb0pOhv+hCStTh70bN+aapjbdtp7SdQ3SbP5VoXBKLhUii41OqN/i4yM7itdSs
M8d5PVo9TJYVnfaij2xwWghMqZEyzxgOw4Q98dYIysf2BxsjjCtxGEMo/pISS90G
OE2RaVEFbwUcvu1XKszLP5X/k/onOchengURYVuzHP7VgVuomZpPSZ9VEIRKITyL
GpgSDrdqm5AXdQc7l/2OqprW6G+MxsuVzChbyPGslIYYXYsP9HLc/FfwVxaCJjh2
Nsiqfd+dMwnf7f9yrrBuZjbNwNa5x++IynrwaU01jVISkl9pgkbUYRaPSMTGFDAd
lsEEqlgs9KdzGoTFjDXNdTwDOsUMiu/ag8tPo7YxsxLFbVGa7laRAUhlGUT9QGPr
IOAAWvKqivsYnU5iwTCY/5HGza3SDfZc/e5upPfB+lTQTYijp1aAYRBAsoOLmuga
f0aP45pnfnYBJkT1kMsthjbGMdlL46wLiNHKRct9OlFwx74IRIyZdcs5Q3pC0aNN
DSLvsCSmY8/9PtTLzcOJKXTqqDVupCqq82bUlGRn7NR6xsinzv74MuOVnGY21tBm
iB5ceYpgiEukUz6YtS2quIIiMTnYmM+HBFnkXgBV0/Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32

Nextcloud 32

Gantt Projects 1.4.2
Release Details
UpdatedAug. 20, 2026, 4:41 a.m.
Changelog

Changed

  • release.sh fragt die Versionsnummer jetzt interaktiv ab, statt sie nur aus appinfo/info.xml zu lesen: zu Beginn werden die aktuelle Version und das letzte Release-Tag angezeigt und es wird gefragt, ob eine neue Nummer vergeben werden soll (Vorschlag: nächster Patch-Level). Die Eingabe wird auf das Format X.Y.Z, auf einen echten Versionssprung und auf ein noch nicht vergebenes Tag geprüft und dann nach appinfo/info.xml, package.json und package-lock.json geschrieben. Fehlt ein Changelog-Abschnitt zur neuen Version, warnt das Skript; anschließend bietet es an, den Bump als chore: Version X.Y.Z zu committen — nötig, weil der Tag-Name den Commit-Hash enthält. Für nicht-interaktive Läufe gibt es --version=X.Y.Z und --no-bump; ohne TTY wird nie gefragt, make release bleibt also unverändert nutzbar
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturepoVHZxteU3AR2cpRRV98jNfv4j7rWnLEd3kbpn5Dp4T1ubAI+0QlRf9jxi0BaYz1
+1dg+3Yt25uN6Slp1FHiw7kyqt5HJ60XgnOWo+Zt0YBHSnWqLDhF8zxPEnQCkF+v
nUvscpcoQY2bRiIBZhVWVgeAD592uvOA4gfRDrUyLVDKjOrzBu3ScbNvCqTqE9IC
vs8qZkRLIcaD6tKoSLT2pZqmwBoCdClvEw5D5v40WSvLq232BZnXpQ4ogG3QvJdL
mYO8HlPZKVOxANp0MGnWle4IFRMbMt22Ebpkjc18Q9Q4AIv/Sd3zTsc+uMONTM95
s0GXvLSm95o0UCFZ1CL7fCEq7NwlprjVrTeWGmlJNVjHJuIyRKHEz5DR12s0lAGm
/rKGWjoVP+Wvk3upRizR/5y2fpWoiwuDqCtz9gQN6+HHYLaqLvYqsAJ/SxmtLtP7
8B2rK61ClKowz4phbTZdrCaF8w3IWnFFBTFquIVFuN2jUoHvdCMtd0910sLAMY5M
Xs9nk0FVsP23zKXlQpOojq7ouCQagRhsnBJDLxWRR+NIq582f7SDgcrkBqxlGJX4
/Ql9V+2iFx61QANCTjdJIO3LbvbK60vGos+ency0GfvSDbPovDAVyJzt8ZUh5BNw
UXQ4XOHJZAagAr36rKttk1DQbZZ/2bUEq231c96m83g=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.4.1
Release Details
UpdatedAug. 17, 2026, 7:43 p.m.
Changelog

Fixed

  • Die Meilenstein-Raute hatte eine fest verdrahtete Farbe (#fbbf24) statt der Projektfarbe zu folgen, obwohl Balken für Aufgaben und Teilprojekte bereits korrekt eingefärbt wurden (Issue #102). Zusätzlich wurden die separaten – und wirkungslosen – Farbwähler bei Teilprojekt und Aufgabe entfernt, da deren Anzeige ohnehin immer der Projektfarbe folgt
  • „Meilenstein hinzufügen" im Drei-Punkte-Menü der Projektliste nutzte zwei aufeinanderfolgende window.prompt()-Dialoge (Name, dann Datum als Freitext) statt des regulären Detail-Dialogs (Issue #101). Der Klick emittiert jetzt add-milestone analog zu „Aufgabe hinzufügen" (Issue #91) und öffnet denselben Meilenstein-Dialog wie beim Bearbeiten, mit vorbelegtem Projekt
  • Im festen Datumsmodus des Aufgaben-Detaildialogs konnte ein Enddatum vor dem Startdatum eingegeben und gespeichert werden (Issue #100). Jetzt zieht ein über das Enddatum hinaus verschobenes Startdatum das Enddatum mit; ein zu frühes Enddatum erzeugt ein rotes Fehler-Icon am Feld, hält den Fokus dort und deaktiviert den Speichern-Button, bis ein gültiges Datum eingetragen ist (dateField() in fields.js mit neuer setError()-Methode)
  • Eine Aufgabe mit Abhängigkeit behielt trotzdem die manuell eingegebenen Start-/Enddatumsfelder, die beim Speichern durch die Abhängigkeitsberechnung überschrieben wurden – für Nutzer nicht nachvollziehbar (Issue #99). Der Aufgaben-Detaildialog hat jetzt denselben Fixed-date/Dependency-Umschalter wie Meilensteine (Issue #90): im Dependency-Modus ersetzt eine Dauer (Tage) die Datumsfelder, die Abhängigkeit bestimmt den Termin. Serverseitig wendet TaskService::create() neu hinzugefügte Abhängigkeiten sofort an (bisher nur update()), damit auch neu angelegte Aufgaben keinen die Abhängigkeit ignorierenden Platzhaltertermin behalten
  • Der Speichern-Button des Detail-Dialogs blieb nach dem Hinzufügen einer Abhängigkeit deaktiviert: die Gültigkeitsprüfung hing allein am input-Event, das bei einem <select> vor dem change-Event feuert – zu diesem Zeitpunkt war die Abhängigkeit noch nicht in der Liste. detailModal.js wertet jetzt zusätzlich change aus, der Abhängigkeits-Editor (fields.js) meldet jede Mutation (Hinzufügen, Entfernen, Typwechsel) und der Fixed-date/Dependency-Umschalter in taskForm.js den Moduswechsel über ein eigenes bubbelndes change-Event

Added

  • CONTRIBUTE.md und setup-dev.sh für neue Mitwirkende (Issue #98): Projekt-Leitlinien (FOSS, Datensparsamkeit, Security), VIBE Coding ausdrücklich erlaubt, sowie der komplette lokale Dev-Setup-Weg (Docker-only, Nextcloud + MariaDB unter localhost:8088, optionales E2E-Setup, Git-/Bot-Auth). setup-dev.sh automatisiert diese Schritte, konfigurierbar über --workdir/--no-e2e/--no-docker-install
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturetYcUvVtDEQrAakG32EQF1atSOmz91/8XudCUh60A9r/AxMv+AA5AX2rIvNYDkEn0
OuTmXA6Iz0DoVkdij11MPDhfLaUy0mXeLbwB5fj/xF/cFYcNeCFGKD3k2jyRwOTo
2n1sEp0r8sn0fitHzLfhcB/By0VJkZyhaO/NctP01XfcSQM7lGEOeY/uagtGaDTI
JnPLoQTHo0nUOv4y7jUMZuurEgBOc4yeUxTKv4A/m642hvNQIS0q6K9ON41JHKIO
UtI7DbDWSboVhct1Go3zoj5XcaAGG9ZiwSkJDt/BXT5tWH4SOnSn7mys0j1F6Y0g
vIJWjz6S2RlekwIrIxgyaeEVBOeQ4OM1ilJGWKXDyYJM/0IBxqnqRXDkAFlOopDo
xezlcFdWTkYL5OBKMFJhKuTy7dEQ9hxx5Nz4+vLbNV8gDJZBI+5yI5m8W+809WIH
iKUpIda1ShOblvYH6Ek5AzBdTmoFQ6T4f7iWT7j1i4uUP2DsgehjGVl8yDIT/wyx
nV9t7koXapu1WeXrunSa++mXsi3lceNpthdz5/cUEOe9yWvc1rrulRhiWzePga8H
zjVQYGAIPvwYkWa47U6Zh7HBsQaS+9yQ8NDnD49SS4jUWTGlwNqfM+q9fZ16/G9d
7l4chZUPPbBv+xWfdxmFw+MC5zdkAq27isHToTqnm+w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.4.0
Release Details
UpdatedAug. 13, 2026, 6:41 a.m.
Changelog

Added

  • Meilensteine werden jetzt immer direkt unter ihrem übergeordneten Objekt angezeigt statt gesammelt am Projektende (Issue #90): Meilensteine lassen sich neu auch einer Aufgabe zuordnen (bisher nur Projekt/Teilprojekt, Spalte task_id war bereits vorhanden, es fehlte nur die UI), das Auswahlfeld im Detail-Dialog heißt entsprechend „Übergeordnetes Objekt" statt „Teilprojekt". Zusätzlich können Meilensteine ihr Datum jetzt statt eines fixen Werts aus einer Abhängigkeit zum übergeordneten Objekt beziehen (EA/AA/EE/AE, analog zu Aufgaben-Abhängigkeiten; neue Spalte dependency_type, Migration Version1028) – da ein Meilenstein keine Dauer hat, bestimmen EA/EE das Ende und AA/AE den Start des Zielobjekts. Die Berechnung übernimmt der neue MilestoneDateService (serverseitig live bei jedem Abruf sowie im ICS-Feed neu aufgelöst, nicht persistiert propagiert) sowie clientseitig in frappeRows.js für sofortige Reaktivität ohne Neuladen
  • Undo für Drag-&-Drop-Verschiebungen inkl. Propagationskette (Issue #85, Umsetzung der einstufigen Empfehlung: letzte eigene Operation, kein Redo, zunächst nur Drag & Drop): Migration Version1027Date20260810020000 ergänzt nc_gantt_change_events um op_id (UUID) – alle Change-Events einer zusammenhängenden Operation (Drag + gesamte Propagationskette B→C→D) erhalten dieselbe op_id, erzeugt in TaskService::update()/propagateDates() und über ChangeEventService::log() protokolliert (dieses Change-Tracking war bisher tote Scaffolding-Logik ohne Aufrufer). Neuer Endpoint POST /api/v1/changes/{opId}/revert (ChangeEventController::revert, ChangeEventService::revertOperation) wendet alle Change-Events der Operation invers an, in einer DB-Transaktion mit Rechteprüfung über AccessService::canEditOrOwn(). Konfliktschutz: Revert wird mit HTTP 409 abgelehnt, sobald der aktuelle Feldwert nicht mehr dem protokollierten new_value entspricht (jemand hat zwischenzeitlich erneut geändert); der Revert selbst erzeugt wiederum neue Change-Events, die Audit-Historie bleibt lückenlos. Frontend: nach jedem gespeicherten Drag zeigt GanttChart.vue einen Toast „N Termine verschoben — Rückgängig" (showUndo aus @nextcloud/dialogs, 10 s sichtbar) sowie ein globales Ctrl+Z für die letzte eigene Operation der Session (stores/projects.js: lastOperation, revertOperation(), undoLastOperation())
  • Kalender-Export als abonnierbarer ICS-Feed pro Projekt (Issue #83, Variante A aus dem Umsetzungsvorschlag): neue öffentliche Route GET /apps/nc_gantt/projects/{id}/calendar.ics?token=… (regulärer, unauthentifizierter CalendarFeedController, damit externe Clients wie Thunderbird, Nextcloud Kalender oder mobile Apps ohne Nextcloud-Login abonnieren können) liefert Meilensteine als ganztägige VEVENTs (◆-Präfix), den aus den Aufgaben abgeleiteten Projektzeitraum sowie optional Teilprojekt-Zeiträume (Schalter „Auch Teilprojekt-Zeiträume einschließen", standardmäßig aus, um den Feed bei großen Projekten nicht zu überladen). Zugriff erfolgt über einen pro Projekt generierten, 256-Bit-zufälligen Token in der URL (CalendarFeedService, neue Spalte calendar_token auf nc_gantt_projects, Migration Version1026), der über einen neuen „Kalender-Feed"-Bereich im Freigabe-Dialog angezeigt, kopiert und jederzeit widerrufen/neu generiert werden kann (CalendarTokenController, nur für Projekt-Admins/-Eigentümer). ICS-Generierung ohne neue Abhängigkeit, RFC-5545-konform (Escaping, Zeilenfaltung)
  • What-if-Simulationsmodus für Terminverschiebungen (Issue #84): neuer Endpunkt POST /api/v1/projects/{id}/simulate führt Terminpropagation und CPM rein im Speicher aus (kein DB-Schreibzugriff) – TaskService::simulate() nutzt die neu extrahierte, stateless propagateDatesCore()-Kernlogik, die auch der persistierende update()-Pfad verwendet, CriticalPathService::computeFromTasks() erlaubt CPM auf einem hypothetisch veränderten Task-Datensatz. Frontend: „Simulation"-Toggle in der Gantt-Toolbar mit Banner inkl. Projektende-Delta in Arbeitstagen, Geisterbalken für die Ist-Termine (analog Baseline-Overlay) sowie Verwerfen/Übernehmen. Drag & Drop ruft im Simulationsmodus simulate() statt einer echten Speicherung auf. Szenarien bleiben bewusst flüchtig (kein Speichern benannter Szenarien), „Übernehmen" wendet die Änderungen als einzelne Task-Updates an, Simulation läuft pro Projekt
  • Neuer Eintrag „Aufgabe hinzufügen" im Drei-Punkte-Menü der Projektliste (Issue #91): legt wie der „Neu"-Button eine Aufgabe an, belegt dabei aber das gewählte Projekt direkt vor, sodass der Projekt-Auswahlschritt in der Maske entfällt
  • Such-/Filterleiste für Projekte, Teilprojekte und Aufgaben (Issue #81, Stufe 1: rein clientseitig auf Basis der bereits geladenen Daten aktivierter Projekte): Freitextsuche im Titel, Risiko, „überfällig" (Ende < heute und Fortschritt < 100 %), „über Budget" (Ist-Kosten > geplantes Budget), Ressource und „ohne Deck-Verknüpfung". Neuer Pinia-Store stores/filters.js (Zustand pro Nutzer in localStorage persistiert) und reine Matching-Logik in gantt/filterMatch.js. Nicht passende Balken werden in GanttChart.vue gedimmt statt ausgeblendet (Abhängigkeitspfeile und Zeitkontext bleiben lesbar), Projekte/Teilprojekte gelten als Treffer, sobald ein Nachfahre passt. Dieselbe Filterleiste (components/FilterBar.vue) dimmt in ProjectList.vue nicht passende Projekte; für nicht aktivierte Projekte sind nur Titel-Treffer zuverlässig auswertbar, da deren Aufgaben/Teilprojekte nicht geladen sind

Changed

  • Freigabe für Nextcloud 34 (Issue #94): max-version in appinfo/info.xml von 33 auf 34 angehoben, unterstützter Bereich damit NC 28–34. Verifiziert gegen Nextcloud 34.0.2 mit PHP 8.5 und MariaDB 11.4 (148 Unit-Tests, 39 E2E-Tests)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturerdYQI+Semnk0cWtKqUZinVDHk0KpxyqB5Ox4NBL9pyf5nrpK8xZpe9lBxc6zhDfW
8adLfVIwQtX+bI7S1O05xm0hwrUHQQ2ii6ADD8mlAxnZjdhKSCAhZ0NcaqT7Em0X
nD7yRP2B8zAAQMJNjzeBsLbzveNrXMoGzFrvm/jFxskUIUS01ykfWEg2C5+5/IAf
7jBAM8x2Qj92b8zyBFpLjfJQw9aTE/trtCsmZXQFmkJjGS0anrJc9dXKfqnHxknX
8jmLOv4Yq4Qtk3UF35HTiIGcA2W0UKfVyFb4XcrIMeSmLXXcagJWjeH5nB18UUNn
JyCgE/qY4v/SnrNQU92mIdMOQGuvYg7xbaz226lgNdwM2HuM9U8nc2juqJxAO+Wp
xs85yl82qIviZ5YY39HK371MZ/ufMsaVsVy3Nfn3PjqqkzGLmtAL6KJDcKHZWdDw
ugEPwO61DxnERZsNGeFpXfzCxjMpZc/qwUIfGw85idmU2vdedtrxHBkDGoqu1IP7
xZOO8uSYrzbXM6g1gs3WPBOY51CmZLs5pIQTN1tVl5ifGw4uOuzDBUCKiR5oA2MI
352HbA7wwWFgwoN9W5t4MRTowmaYpM8AB+nh9f1A5q9S8SelfMpXOqGew9VZb2jd
AuiJK/LEPjRgs5s3/FfC4Sb1MSsXDr1N1jziaF4MomM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.3.1
Release Details
UpdatedAug. 6, 2026, 12:57 p.m.
Changelog

Added

  • Regressionstests für die Rollentrennung Viewer/Editor/Admin: ForbiddenException-Tests für TaskService::create/update/delete/syncProgress und ProjectService::updateProject/deleteProject (inkl. „Editor darf nicht löschen") sowie erstmalige Testabdeckung für SubProjectService und MilestoneService

Fixed

  • CSV-/Formel-Injection im Aufgaben-Export (detail/io.js exportCsv): Task-Felder wie Titel oder Beschreibung, die mit =, +, - oder @ beginnen, wurden unverändert übernommen und von Excel/LibreOffice/Google Sheets als Formel ausgewertet. Die Absicherung aus ReportView.vue liegt jetzt in einer gemeinsamen Utility (src/utils/csv.js, escCsvCell) und wird an beiden Export-Stellen verwendet
  • Viewer sahen im Frontend dieselbe Oberfläche wie Editor/Admin (Add Task/Subproject/Milestone, Share, Delete Project, Drag/Resize im Gantt-Chart, volle Bearbeitungsformulare), obwohl das Backend Schreibversuche ohnehin korrekt ablehnte – kein Least-Privilege an der UI. ProjectService::getAccessibleProjects()/getProject()/createProject()/updateProject() liefern jetzt das effektive permission-Feld (AccessService::getEffectivePermission()) mit; ProjectList.vue, GanttChart.vue (inkl. Drag/Resize-Sperre je Projekt) und das Detail-Modal (detail/detailModal.js) blenden Schreib-Aktionen für Viewer aus bzw. schalten Formulare read-only
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureBUyDeI9y7iKD1wQJLHrW6IFq0zuXOJQ1Zv/x+0RryIIQ0fAGAUjwQyLDYLYpRzPg
6ITDPfY9bftVlwkB8w9LqZiFETkH8mgc6l5XB7F6NKzFrdaSnNw21CIVJjWyHpkR
mxDq+vQepZd+YtB9jMz39kbFk9BNHrpKIwIXXZVqEqj1U54NmT+5XnT892m9mY6o
RWQNf3Mn5WcH3vmoDi/UAOgDaO30GFCRJePryurVpK7stkub8K6fYsWIkS5NeJlP
YHdb4nBlkhUzQFjo0ZDSkCSiWjMdyCrtEanX6m6Ffhr+j0jpd+J9soMSjrzdzt4T
5mETo8xc61IQIVFWMD6fZ3/oCmbx2TFDZsJjRpFKxoPA08AkdC7xjxHoaKYZHvi4
+tzowxPzMfyjQ/hEj2dwq22doM2lXK1Y13VvV8kkaomrAQjB97gf+ODrYZNDgNvc
2ijU08B4cAB0HbEveDpDRjCJj8D5OwCMafRMa4Ul/nm0+RiBFOhIjDYdVAnCp7Ql
IEc4UQZM9WYLQlouwGPk83POpbqkbc8vKAucGBXvHAbxNpUSOGbssMYFGU/e9pOg
+oT2gcJrC3MYPGIWnS8iLn75PK1H063KFJv5yqC+h/rqwX/FxyTzKvofJi68GpLs
WtG3y67W8Ju4y1I9iQ9raJxxhFUJrStibGy9gc7L0DM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.3.0
Release Details
UpdatedJuly 9, 2026, 5:23 a.m.
Changelog

Fixed

  • Baseline-Toggle im Gantt-Toolbar zeigte nie Baseline-Balken und PUT baseline/active warf einen SQL-Fehler: baseline_id auf nc_gantt_projects wurde mit der 3-Ebenen-Migration versehentlich zusammen mit den tatsächlich berechneten Spalten entfernt (Migration Version1025 stellt die Spalte wieder her). BaselineService::create() aktiviert eine frisch eingefrorene Baseline jetzt automatisch fürs Projekt; renderBaselineBars() (GanttChart.vue) und baselineOverlay.js lesen Baseline-Items dafür über task_id statt des seit der Umstellung auf das 3-Ebenen-Modell nicht mehr existierenden subproject_id-Felds
  • OCS-API-Fehlerantworten (400/404/500 …) lieferten für alle OCSController-Endpunkte einen leeren text/html-Body statt des erwarteten JSON-Envelopes mit message; ExceptionMiddleware wirft jetzt passende OCP\AppFramework\OCS\OCSException-Subklassen statt einer rohen DataResponse, die Nextcloud-Core nur für 401/403 automatisch formatiert. Betroffene Controller (ProjectController, ReportController, ShareController, ChangeEventController, WorkScheduleController, WorkCalendarController, HolidayAdminController, SettingsController) wurden zusätzlich auf die bestehende ApiException-Hierarchie umgestellt

Removed

  • Nie ausgewertete Gruppen-Freigabe-Option entfernt: Share::TYPE_GROUP, principal_type-Parameter in ShareController sowie die DB-Spalte principal_type (Migration Version1024) wurden gestrichen; Freigaben sind jetzt ausschließlich benutzerbezogen

Changed

  • Dashboard-Summary (DashboardController::summary) lädt Baselines und Aufgaben-KPIs jetzt über gruppierte SQL-Aggregat-Queries statt pro Projekt einzeln (N+1-Fix, gilt auch für den Admin-Fall mit allen Instanz-Projekten)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureNJfbRJEXzKGipUjUW9tUKayHoY6ltSU0ZeCQXcDx6XVDY/naLK0dVY9ciofXU7oy
40sJIOsjxcUZbalDwqncPn0vjGoqmk3BFUT7KotEpLLf8/ZmIjdHEbQbJHzEpdQV
y5YedjqRLKB7/Ul35JWVFxY8eutCsYkonfof7v6AGMGB/RjQ7GDB6jWunEEwqUGV
3Y1isvdq5N3oo9NDY/QR0C2C7jiMnB9Kon0KzZ2yp0oF5euOpA/qrtmqxG3L9PoZ
DW1ppwAuARWtRDu4tcDAAQAkF1Mrg5YyYgRoKm7uVazlKEP7DxX56g/g4RS2otEE
rKsA/ER9yYiHnNyGcZuK9Jkfe2Ua6/R7gzJilRvHZ7CBPkhY+XNPcrjlsHbCJEJJ
cX/b0B56p7FyAFy6XjMY9PYFhxy/ubHE7Sk8ixX88uxgM4vf/sSFQaN84CcG/qqA
Nq/OEytBjZP82TsFFYBRcPKEPskF4ejjhNVC4bJpiuCIpo51nIxjeFGtDpeQiDG7
0OWc/GCvsz5W3eG7ShmQsRf0DoivL8tjgDUlMWO9boTpUy2Vnm1rDMKu6nFGKZ8o
TWTZR6u4zGZW1OBERdlU5NQmqxqXrsuGlT6r6DuQnWsWiscjXOyIFeHz+EOKhQOk
wUuN6xN8QES1CDFB27PYV0Sz2KhYhM78GKLCc9B10Ic=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.2.0
Release Details
UpdatedJuly 5, 2026, 9:21 a.m.
Changelog

Added

  • Löschen-Buttons im Detail-Modal für Teilprojekt, Aufgabe und Meilenstein
  • Deutsche App-Beschreibung in info.xml ergänzt

Fixed

  • Baseline-Datum und Kommentar im Report werden untereinander angezeigt
  • Dashboard-Widget zeigt Baseline-Datum und KPI-Werte korrekt an
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureXuYTZMxTlGNJVrGvU/GcIjSlBTYreXdvF5FilCmsi+l7MBvFlyeW1DsnxAsao3pu
HyhvaKXRnkraVQNT2ULgX4BmjUnhsELROrK03gtY88Odzqzh7RIXYkNkRcy92ara
56HIP8BBRD3m1c8pYPfpZfLAzkuurAzVqbJ6qbxw1AebdlPCFEq2g6C+IOcTon0T
q9ZD2I2XJmWd42EXXqva+NMrcx1jfjmHWVtl7xHKhwPndFCtHPMMAdoDS0Xpbh1V
3Ns4h/DphDpC8/ZYZ5sbpMCBekHw4VTZDGxNAuXJ5DMPhkqg2MxVplkS19PuBHLx
r74sgsz611Gjg55gjKOqCb5ZZEvqZTrwKTEYIbu8HicWtq/HxKRZS3FZN9MThTTX
Hesv65vsq9fH0UhEM6MVJjE5Phnw8Wb5ivtAiaUA+NzPrDfrHZAsSfR9NFL3rhFC
7wOmnXtzK40NjmqyMWJu/UP9UVbz3SeEiHiQO9GwBc2krzmXzcmLZFgEjty4CGoJ
SzXAA1QGpUGO4n0b3Y/5zSY4UxogGWybW+mOs27KDLytI915wNYGvBtcdAKCj6Ws
1uVA98npwMid/WSJJ04BXHX8LbowrDeTezSFJyGh+u/KnhlzkA7fqEuu3nQGT5rA
a9qeMmd5kmLBIVcG9RVVmw1kc0AK0qIqZDmlk9dWGJs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.1.1
Release Details
UpdatedMay 27, 2026, 6:43 p.m.
Changelog

Added

  • Glossar-Button in der Navigation (über den Einstellungen) mit interaktivem Nachschlagewerk
  • Dreispaltige Glossar-Tabelle: Begriff/Abkürzung, Bedeutung/Englisch, Erklärung mit Berechnungsformeln
  • 30 Einträge in 6 Abschnitten: Allgemein, Terminplanung, Baseline & Berichtswesen, Earned Value Management, Ressourcen & Kapazität, Budget

Fixed

  • Fehlende deutsche Übersetzungen für englische UI-Strings ergänzt (Add dependency, Baseline, Dependencies, Remove, Work, No projects yet, Open Gantt Projects, u.a.)
  • Leere Übersetzung für Deck-Fortschritt-Hinweis befüllt
  • de.js vollständig mit de.json synchronisiert (war ~70 Einträge veraltet)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureF1RHJx15J/N8tWNrDlAX1MFE/9tsct4PViEcBDeo8U/V2qJ/tezL7Xk0BVmYxjWw
pB+J685mcHjikh93/aZUqG8C6y0mR3TTJfaa7dLCIRMc1034x6Xj9Nd7Q9YVH4yi
RLTcRhrG2pN1Iqc23kwId995GJXHnCBEyuQuzo9m1VtA7GoFa8W2nqhXVT94khDS
8ZHQrixDfv63d4GfA5N2x4+phaiyObdskvCmVSuKrmouYvCGpPevtKG5YxzOrHid
aL48Kod0YgOCAD8nAqOhEmioP0m+wP2e/NC4Z5svSKT3vdlE67W1M68ipQQfnhPI
txui+2X8zFvoe/M5sE3DaXbLnOVNGQ7YRpyXFI5GsQmQ0cPSSO/94Mw15hLZfwMf
TDOrrvzf+Vu05sUTZ6CFh4FrSl4e5Q6Xjv6uH4BZtyOpPxl+ajgW4OkZvQDbt4KC
8aTZodMcDpXlRMDdBSxT1bT9tD05KUKmEZYtpxHiARrHDuQQCRSuxtjitQD9lbla
CMxKrBiO0YgdUb3FuczYkWEH+y8gW5egU6TDMnjAVbuUecGuGZN1Cc6tarcFWRu2
+V7Qn+aNoXEwP5e/0TM4Ig8ETAYseZRiTPHxeWiSg3RnU3HuT6kPVWw8LERACDT4
6F4WU9t2+4kESMLMjeV0/2UBQSykR/42Idsg0PtvpyQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.1.1 (nightly)
Release Details
UpdatedMay 27, 2026, 5:24 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureF4W7QJB8rVJ2xARdnhUbEouzRZMKcowz/ToDwr0oVFrVUbInFvHAMqXFTOVD1a5N
kDTb0pOhv+hCStTh70bN+aapjbdtp7SdQ3SbP5VoXBKLhUii41OqN/i4yM7itdSs
M8d5PVo9TJYVnfaij2xwWghMqZEyzxgOw4Q98dYIysf2BxsjjCtxGEMo/pISS90G
OE2RaVEFbwUcvu1XKszLP5X/k/onOchengURYVuzHP7VgVuomZpPSZ9VEIRKITyL
GpgSDrdqm5AXdQc7l/2OqprW6G+MxsuVzChbyPGslIYYXYsP9HLc/FfwVxaCJjh2
Nsiqfd+dMwnf7f9yrrBuZjbNwNa5x++IynrwaU01jVISkl9pgkbUYRaPSMTGFDAd
lsEEqlgs9KdzGoTFjDXNdTwDOsUMiu/ag8tPo7YxsxLFbVGa7laRAUhlGUT9QGPr
IOAAWvKqivsYnU5iwTCY/5HGza3SDfZc/e5upPfB+lTQTYijp1aAYRBAsoOLmuga
f0aP45pnfnYBJkT1kMsthjbGMdlL46wLiNHKRct9OlFwx74IRIyZdcs5Q3pC0aNN
DSLvsCSmY8/9PtTLzcOJKXTqqDVupCqq82bUlGRn7NR6xsinzv74MuOVnGY21tBm
iB5ceYpgiEukUz6YtS2quIIiMTnYmM+HBFnkXgBV0/Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32

Nextcloud 31

Gantt Projects 1.4.2
Release Details
UpdatedAug. 20, 2026, 4:41 a.m.
Changelog

Changed

  • release.sh fragt die Versionsnummer jetzt interaktiv ab, statt sie nur aus appinfo/info.xml zu lesen: zu Beginn werden die aktuelle Version und das letzte Release-Tag angezeigt und es wird gefragt, ob eine neue Nummer vergeben werden soll (Vorschlag: nächster Patch-Level). Die Eingabe wird auf das Format X.Y.Z, auf einen echten Versionssprung und auf ein noch nicht vergebenes Tag geprüft und dann nach appinfo/info.xml, package.json und package-lock.json geschrieben. Fehlt ein Changelog-Abschnitt zur neuen Version, warnt das Skript; anschließend bietet es an, den Bump als chore: Version X.Y.Z zu committen — nötig, weil der Tag-Name den Commit-Hash enthält. Für nicht-interaktive Läufe gibt es --version=X.Y.Z und --no-bump; ohne TTY wird nie gefragt, make release bleibt also unverändert nutzbar
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturepoVHZxteU3AR2cpRRV98jNfv4j7rWnLEd3kbpn5Dp4T1ubAI+0QlRf9jxi0BaYz1
+1dg+3Yt25uN6Slp1FHiw7kyqt5HJ60XgnOWo+Zt0YBHSnWqLDhF8zxPEnQCkF+v
nUvscpcoQY2bRiIBZhVWVgeAD592uvOA4gfRDrUyLVDKjOrzBu3ScbNvCqTqE9IC
vs8qZkRLIcaD6tKoSLT2pZqmwBoCdClvEw5D5v40WSvLq232BZnXpQ4ogG3QvJdL
mYO8HlPZKVOxANp0MGnWle4IFRMbMt22Ebpkjc18Q9Q4AIv/Sd3zTsc+uMONTM95
s0GXvLSm95o0UCFZ1CL7fCEq7NwlprjVrTeWGmlJNVjHJuIyRKHEz5DR12s0lAGm
/rKGWjoVP+Wvk3upRizR/5y2fpWoiwuDqCtz9gQN6+HHYLaqLvYqsAJ/SxmtLtP7
8B2rK61ClKowz4phbTZdrCaF8w3IWnFFBTFquIVFuN2jUoHvdCMtd0910sLAMY5M
Xs9nk0FVsP23zKXlQpOojq7ouCQagRhsnBJDLxWRR+NIq582f7SDgcrkBqxlGJX4
/Ql9V+2iFx61QANCTjdJIO3LbvbK60vGos+ency0GfvSDbPovDAVyJzt8ZUh5BNw
UXQ4XOHJZAagAr36rKttk1DQbZZ/2bUEq231c96m83g=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.4.1
Release Details
UpdatedAug. 17, 2026, 7:43 p.m.
Changelog

Fixed

  • Die Meilenstein-Raute hatte eine fest verdrahtete Farbe (#fbbf24) statt der Projektfarbe zu folgen, obwohl Balken für Aufgaben und Teilprojekte bereits korrekt eingefärbt wurden (Issue #102). Zusätzlich wurden die separaten – und wirkungslosen – Farbwähler bei Teilprojekt und Aufgabe entfernt, da deren Anzeige ohnehin immer der Projektfarbe folgt
  • „Meilenstein hinzufügen" im Drei-Punkte-Menü der Projektliste nutzte zwei aufeinanderfolgende window.prompt()-Dialoge (Name, dann Datum als Freitext) statt des regulären Detail-Dialogs (Issue #101). Der Klick emittiert jetzt add-milestone analog zu „Aufgabe hinzufügen" (Issue #91) und öffnet denselben Meilenstein-Dialog wie beim Bearbeiten, mit vorbelegtem Projekt
  • Im festen Datumsmodus des Aufgaben-Detaildialogs konnte ein Enddatum vor dem Startdatum eingegeben und gespeichert werden (Issue #100). Jetzt zieht ein über das Enddatum hinaus verschobenes Startdatum das Enddatum mit; ein zu frühes Enddatum erzeugt ein rotes Fehler-Icon am Feld, hält den Fokus dort und deaktiviert den Speichern-Button, bis ein gültiges Datum eingetragen ist (dateField() in fields.js mit neuer setError()-Methode)
  • Eine Aufgabe mit Abhängigkeit behielt trotzdem die manuell eingegebenen Start-/Enddatumsfelder, die beim Speichern durch die Abhängigkeitsberechnung überschrieben wurden – für Nutzer nicht nachvollziehbar (Issue #99). Der Aufgaben-Detaildialog hat jetzt denselben Fixed-date/Dependency-Umschalter wie Meilensteine (Issue #90): im Dependency-Modus ersetzt eine Dauer (Tage) die Datumsfelder, die Abhängigkeit bestimmt den Termin. Serverseitig wendet TaskService::create() neu hinzugefügte Abhängigkeiten sofort an (bisher nur update()), damit auch neu angelegte Aufgaben keinen die Abhängigkeit ignorierenden Platzhaltertermin behalten
  • Der Speichern-Button des Detail-Dialogs blieb nach dem Hinzufügen einer Abhängigkeit deaktiviert: die Gültigkeitsprüfung hing allein am input-Event, das bei einem <select> vor dem change-Event feuert – zu diesem Zeitpunkt war die Abhängigkeit noch nicht in der Liste. detailModal.js wertet jetzt zusätzlich change aus, der Abhängigkeits-Editor (fields.js) meldet jede Mutation (Hinzufügen, Entfernen, Typwechsel) und der Fixed-date/Dependency-Umschalter in taskForm.js den Moduswechsel über ein eigenes bubbelndes change-Event

Added

  • CONTRIBUTE.md und setup-dev.sh für neue Mitwirkende (Issue #98): Projekt-Leitlinien (FOSS, Datensparsamkeit, Security), VIBE Coding ausdrücklich erlaubt, sowie der komplette lokale Dev-Setup-Weg (Docker-only, Nextcloud + MariaDB unter localhost:8088, optionales E2E-Setup, Git-/Bot-Auth). setup-dev.sh automatisiert diese Schritte, konfigurierbar über --workdir/--no-e2e/--no-docker-install
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturetYcUvVtDEQrAakG32EQF1atSOmz91/8XudCUh60A9r/AxMv+AA5AX2rIvNYDkEn0
OuTmXA6Iz0DoVkdij11MPDhfLaUy0mXeLbwB5fj/xF/cFYcNeCFGKD3k2jyRwOTo
2n1sEp0r8sn0fitHzLfhcB/By0VJkZyhaO/NctP01XfcSQM7lGEOeY/uagtGaDTI
JnPLoQTHo0nUOv4y7jUMZuurEgBOc4yeUxTKv4A/m642hvNQIS0q6K9ON41JHKIO
UtI7DbDWSboVhct1Go3zoj5XcaAGG9ZiwSkJDt/BXT5tWH4SOnSn7mys0j1F6Y0g
vIJWjz6S2RlekwIrIxgyaeEVBOeQ4OM1ilJGWKXDyYJM/0IBxqnqRXDkAFlOopDo
xezlcFdWTkYL5OBKMFJhKuTy7dEQ9hxx5Nz4+vLbNV8gDJZBI+5yI5m8W+809WIH
iKUpIda1ShOblvYH6Ek5AzBdTmoFQ6T4f7iWT7j1i4uUP2DsgehjGVl8yDIT/wyx
nV9t7koXapu1WeXrunSa++mXsi3lceNpthdz5/cUEOe9yWvc1rrulRhiWzePga8H
zjVQYGAIPvwYkWa47U6Zh7HBsQaS+9yQ8NDnD49SS4jUWTGlwNqfM+q9fZ16/G9d
7l4chZUPPbBv+xWfdxmFw+MC5zdkAq27isHToTqnm+w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.4.0
Release Details
UpdatedAug. 13, 2026, 6:41 a.m.
Changelog

Added

  • Meilensteine werden jetzt immer direkt unter ihrem übergeordneten Objekt angezeigt statt gesammelt am Projektende (Issue #90): Meilensteine lassen sich neu auch einer Aufgabe zuordnen (bisher nur Projekt/Teilprojekt, Spalte task_id war bereits vorhanden, es fehlte nur die UI), das Auswahlfeld im Detail-Dialog heißt entsprechend „Übergeordnetes Objekt" statt „Teilprojekt". Zusätzlich können Meilensteine ihr Datum jetzt statt eines fixen Werts aus einer Abhängigkeit zum übergeordneten Objekt beziehen (EA/AA/EE/AE, analog zu Aufgaben-Abhängigkeiten; neue Spalte dependency_type, Migration Version1028) – da ein Meilenstein keine Dauer hat, bestimmen EA/EE das Ende und AA/AE den Start des Zielobjekts. Die Berechnung übernimmt der neue MilestoneDateService (serverseitig live bei jedem Abruf sowie im ICS-Feed neu aufgelöst, nicht persistiert propagiert) sowie clientseitig in frappeRows.js für sofortige Reaktivität ohne Neuladen
  • Undo für Drag-&-Drop-Verschiebungen inkl. Propagationskette (Issue #85, Umsetzung der einstufigen Empfehlung: letzte eigene Operation, kein Redo, zunächst nur Drag & Drop): Migration Version1027Date20260810020000 ergänzt nc_gantt_change_events um op_id (UUID) – alle Change-Events einer zusammenhängenden Operation (Drag + gesamte Propagationskette B→C→D) erhalten dieselbe op_id, erzeugt in TaskService::update()/propagateDates() und über ChangeEventService::log() protokolliert (dieses Change-Tracking war bisher tote Scaffolding-Logik ohne Aufrufer). Neuer Endpoint POST /api/v1/changes/{opId}/revert (ChangeEventController::revert, ChangeEventService::revertOperation) wendet alle Change-Events der Operation invers an, in einer DB-Transaktion mit Rechteprüfung über AccessService::canEditOrOwn(). Konfliktschutz: Revert wird mit HTTP 409 abgelehnt, sobald der aktuelle Feldwert nicht mehr dem protokollierten new_value entspricht (jemand hat zwischenzeitlich erneut geändert); der Revert selbst erzeugt wiederum neue Change-Events, die Audit-Historie bleibt lückenlos. Frontend: nach jedem gespeicherten Drag zeigt GanttChart.vue einen Toast „N Termine verschoben — Rückgängig" (showUndo aus @nextcloud/dialogs, 10 s sichtbar) sowie ein globales Ctrl+Z für die letzte eigene Operation der Session (stores/projects.js: lastOperation, revertOperation(), undoLastOperation())
  • Kalender-Export als abonnierbarer ICS-Feed pro Projekt (Issue #83, Variante A aus dem Umsetzungsvorschlag): neue öffentliche Route GET /apps/nc_gantt/projects/{id}/calendar.ics?token=… (regulärer, unauthentifizierter CalendarFeedController, damit externe Clients wie Thunderbird, Nextcloud Kalender oder mobile Apps ohne Nextcloud-Login abonnieren können) liefert Meilensteine als ganztägige VEVENTs (◆-Präfix), den aus den Aufgaben abgeleiteten Projektzeitraum sowie optional Teilprojekt-Zeiträume (Schalter „Auch Teilprojekt-Zeiträume einschließen", standardmäßig aus, um den Feed bei großen Projekten nicht zu überladen). Zugriff erfolgt über einen pro Projekt generierten, 256-Bit-zufälligen Token in der URL (CalendarFeedService, neue Spalte calendar_token auf nc_gantt_projects, Migration Version1026), der über einen neuen „Kalender-Feed"-Bereich im Freigabe-Dialog angezeigt, kopiert und jederzeit widerrufen/neu generiert werden kann (CalendarTokenController, nur für Projekt-Admins/-Eigentümer). ICS-Generierung ohne neue Abhängigkeit, RFC-5545-konform (Escaping, Zeilenfaltung)
  • What-if-Simulationsmodus für Terminverschiebungen (Issue #84): neuer Endpunkt POST /api/v1/projects/{id}/simulate führt Terminpropagation und CPM rein im Speicher aus (kein DB-Schreibzugriff) – TaskService::simulate() nutzt die neu extrahierte, stateless propagateDatesCore()-Kernlogik, die auch der persistierende update()-Pfad verwendet, CriticalPathService::computeFromTasks() erlaubt CPM auf einem hypothetisch veränderten Task-Datensatz. Frontend: „Simulation"-Toggle in der Gantt-Toolbar mit Banner inkl. Projektende-Delta in Arbeitstagen, Geisterbalken für die Ist-Termine (analog Baseline-Overlay) sowie Verwerfen/Übernehmen. Drag & Drop ruft im Simulationsmodus simulate() statt einer echten Speicherung auf. Szenarien bleiben bewusst flüchtig (kein Speichern benannter Szenarien), „Übernehmen" wendet die Änderungen als einzelne Task-Updates an, Simulation läuft pro Projekt
  • Neuer Eintrag „Aufgabe hinzufügen" im Drei-Punkte-Menü der Projektliste (Issue #91): legt wie der „Neu"-Button eine Aufgabe an, belegt dabei aber das gewählte Projekt direkt vor, sodass der Projekt-Auswahlschritt in der Maske entfällt
  • Such-/Filterleiste für Projekte, Teilprojekte und Aufgaben (Issue #81, Stufe 1: rein clientseitig auf Basis der bereits geladenen Daten aktivierter Projekte): Freitextsuche im Titel, Risiko, „überfällig" (Ende < heute und Fortschritt < 100 %), „über Budget" (Ist-Kosten > geplantes Budget), Ressource und „ohne Deck-Verknüpfung". Neuer Pinia-Store stores/filters.js (Zustand pro Nutzer in localStorage persistiert) und reine Matching-Logik in gantt/filterMatch.js. Nicht passende Balken werden in GanttChart.vue gedimmt statt ausgeblendet (Abhängigkeitspfeile und Zeitkontext bleiben lesbar), Projekte/Teilprojekte gelten als Treffer, sobald ein Nachfahre passt. Dieselbe Filterleiste (components/FilterBar.vue) dimmt in ProjectList.vue nicht passende Projekte; für nicht aktivierte Projekte sind nur Titel-Treffer zuverlässig auswertbar, da deren Aufgaben/Teilprojekte nicht geladen sind

Changed

  • Freigabe für Nextcloud 34 (Issue #94): max-version in appinfo/info.xml von 33 auf 34 angehoben, unterstützter Bereich damit NC 28–34. Verifiziert gegen Nextcloud 34.0.2 mit PHP 8.5 und MariaDB 11.4 (148 Unit-Tests, 39 E2E-Tests)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturerdYQI+Semnk0cWtKqUZinVDHk0KpxyqB5Ox4NBL9pyf5nrpK8xZpe9lBxc6zhDfW
8adLfVIwQtX+bI7S1O05xm0hwrUHQQ2ii6ADD8mlAxnZjdhKSCAhZ0NcaqT7Em0X
nD7yRP2B8zAAQMJNjzeBsLbzveNrXMoGzFrvm/jFxskUIUS01ykfWEg2C5+5/IAf
7jBAM8x2Qj92b8zyBFpLjfJQw9aTE/trtCsmZXQFmkJjGS0anrJc9dXKfqnHxknX
8jmLOv4Yq4Qtk3UF35HTiIGcA2W0UKfVyFb4XcrIMeSmLXXcagJWjeH5nB18UUNn
JyCgE/qY4v/SnrNQU92mIdMOQGuvYg7xbaz226lgNdwM2HuM9U8nc2juqJxAO+Wp
xs85yl82qIviZ5YY39HK371MZ/ufMsaVsVy3Nfn3PjqqkzGLmtAL6KJDcKHZWdDw
ugEPwO61DxnERZsNGeFpXfzCxjMpZc/qwUIfGw85idmU2vdedtrxHBkDGoqu1IP7
xZOO8uSYrzbXM6g1gs3WPBOY51CmZLs5pIQTN1tVl5ifGw4uOuzDBUCKiR5oA2MI
352HbA7wwWFgwoN9W5t4MRTowmaYpM8AB+nh9f1A5q9S8SelfMpXOqGew9VZb2jd
AuiJK/LEPjRgs5s3/FfC4Sb1MSsXDr1N1jziaF4MomM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.3.1
Release Details
UpdatedAug. 6, 2026, 12:57 p.m.
Changelog

Added

  • Regressionstests für die Rollentrennung Viewer/Editor/Admin: ForbiddenException-Tests für TaskService::create/update/delete/syncProgress und ProjectService::updateProject/deleteProject (inkl. „Editor darf nicht löschen") sowie erstmalige Testabdeckung für SubProjectService und MilestoneService

Fixed

  • CSV-/Formel-Injection im Aufgaben-Export (detail/io.js exportCsv): Task-Felder wie Titel oder Beschreibung, die mit =, +, - oder @ beginnen, wurden unverändert übernommen und von Excel/LibreOffice/Google Sheets als Formel ausgewertet. Die Absicherung aus ReportView.vue liegt jetzt in einer gemeinsamen Utility (src/utils/csv.js, escCsvCell) und wird an beiden Export-Stellen verwendet
  • Viewer sahen im Frontend dieselbe Oberfläche wie Editor/Admin (Add Task/Subproject/Milestone, Share, Delete Project, Drag/Resize im Gantt-Chart, volle Bearbeitungsformulare), obwohl das Backend Schreibversuche ohnehin korrekt ablehnte – kein Least-Privilege an der UI. ProjectService::getAccessibleProjects()/getProject()/createProject()/updateProject() liefern jetzt das effektive permission-Feld (AccessService::getEffectivePermission()) mit; ProjectList.vue, GanttChart.vue (inkl. Drag/Resize-Sperre je Projekt) und das Detail-Modal (detail/detailModal.js) blenden Schreib-Aktionen für Viewer aus bzw. schalten Formulare read-only
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureBUyDeI9y7iKD1wQJLHrW6IFq0zuXOJQ1Zv/x+0RryIIQ0fAGAUjwQyLDYLYpRzPg
6ITDPfY9bftVlwkB8w9LqZiFETkH8mgc6l5XB7F6NKzFrdaSnNw21CIVJjWyHpkR
mxDq+vQepZd+YtB9jMz39kbFk9BNHrpKIwIXXZVqEqj1U54NmT+5XnT892m9mY6o
RWQNf3Mn5WcH3vmoDi/UAOgDaO30GFCRJePryurVpK7stkub8K6fYsWIkS5NeJlP
YHdb4nBlkhUzQFjo0ZDSkCSiWjMdyCrtEanX6m6Ffhr+j0jpd+J9soMSjrzdzt4T
5mETo8xc61IQIVFWMD6fZ3/oCmbx2TFDZsJjRpFKxoPA08AkdC7xjxHoaKYZHvi4
+tzowxPzMfyjQ/hEj2dwq22doM2lXK1Y13VvV8kkaomrAQjB97gf+ODrYZNDgNvc
2ijU08B4cAB0HbEveDpDRjCJj8D5OwCMafRMa4Ul/nm0+RiBFOhIjDYdVAnCp7Ql
IEc4UQZM9WYLQlouwGPk83POpbqkbc8vKAucGBXvHAbxNpUSOGbssMYFGU/e9pOg
+oT2gcJrC3MYPGIWnS8iLn75PK1H063KFJv5yqC+h/rqwX/FxyTzKvofJi68GpLs
WtG3y67W8Ju4y1I9iQ9raJxxhFUJrStibGy9gc7L0DM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.3.0
Release Details
UpdatedJuly 9, 2026, 5:23 a.m.
Changelog

Fixed

  • Baseline-Toggle im Gantt-Toolbar zeigte nie Baseline-Balken und PUT baseline/active warf einen SQL-Fehler: baseline_id auf nc_gantt_projects wurde mit der 3-Ebenen-Migration versehentlich zusammen mit den tatsächlich berechneten Spalten entfernt (Migration Version1025 stellt die Spalte wieder her). BaselineService::create() aktiviert eine frisch eingefrorene Baseline jetzt automatisch fürs Projekt; renderBaselineBars() (GanttChart.vue) und baselineOverlay.js lesen Baseline-Items dafür über task_id statt des seit der Umstellung auf das 3-Ebenen-Modell nicht mehr existierenden subproject_id-Felds
  • OCS-API-Fehlerantworten (400/404/500 …) lieferten für alle OCSController-Endpunkte einen leeren text/html-Body statt des erwarteten JSON-Envelopes mit message; ExceptionMiddleware wirft jetzt passende OCP\AppFramework\OCS\OCSException-Subklassen statt einer rohen DataResponse, die Nextcloud-Core nur für 401/403 automatisch formatiert. Betroffene Controller (ProjectController, ReportController, ShareController, ChangeEventController, WorkScheduleController, WorkCalendarController, HolidayAdminController, SettingsController) wurden zusätzlich auf die bestehende ApiException-Hierarchie umgestellt

Removed

  • Nie ausgewertete Gruppen-Freigabe-Option entfernt: Share::TYPE_GROUP, principal_type-Parameter in ShareController sowie die DB-Spalte principal_type (Migration Version1024) wurden gestrichen; Freigaben sind jetzt ausschließlich benutzerbezogen

Changed

  • Dashboard-Summary (DashboardController::summary) lädt Baselines und Aufgaben-KPIs jetzt über gruppierte SQL-Aggregat-Queries statt pro Projekt einzeln (N+1-Fix, gilt auch für den Admin-Fall mit allen Instanz-Projekten)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureNJfbRJEXzKGipUjUW9tUKayHoY6ltSU0ZeCQXcDx6XVDY/naLK0dVY9ciofXU7oy
40sJIOsjxcUZbalDwqncPn0vjGoqmk3BFUT7KotEpLLf8/ZmIjdHEbQbJHzEpdQV
y5YedjqRLKB7/Ul35JWVFxY8eutCsYkonfof7v6AGMGB/RjQ7GDB6jWunEEwqUGV
3Y1isvdq5N3oo9NDY/QR0C2C7jiMnB9Kon0KzZ2yp0oF5euOpA/qrtmqxG3L9PoZ
DW1ppwAuARWtRDu4tcDAAQAkF1Mrg5YyYgRoKm7uVazlKEP7DxX56g/g4RS2otEE
rKsA/ER9yYiHnNyGcZuK9Jkfe2Ua6/R7gzJilRvHZ7CBPkhY+XNPcrjlsHbCJEJJ
cX/b0B56p7FyAFy6XjMY9PYFhxy/ubHE7Sk8ixX88uxgM4vf/sSFQaN84CcG/qqA
Nq/OEytBjZP82TsFFYBRcPKEPskF4ejjhNVC4bJpiuCIpo51nIxjeFGtDpeQiDG7
0OWc/GCvsz5W3eG7ShmQsRf0DoivL8tjgDUlMWO9boTpUy2Vnm1rDMKu6nFGKZ8o
TWTZR6u4zGZW1OBERdlU5NQmqxqXrsuGlT6r6DuQnWsWiscjXOyIFeHz+EOKhQOk
wUuN6xN8QES1CDFB27PYV0Sz2KhYhM78GKLCc9B10Ic=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.2.0
Release Details
UpdatedJuly 5, 2026, 9:21 a.m.
Changelog

Added

  • Löschen-Buttons im Detail-Modal für Teilprojekt, Aufgabe und Meilenstein
  • Deutsche App-Beschreibung in info.xml ergänzt

Fixed

  • Baseline-Datum und Kommentar im Report werden untereinander angezeigt
  • Dashboard-Widget zeigt Baseline-Datum und KPI-Werte korrekt an
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureXuYTZMxTlGNJVrGvU/GcIjSlBTYreXdvF5FilCmsi+l7MBvFlyeW1DsnxAsao3pu
HyhvaKXRnkraVQNT2ULgX4BmjUnhsELROrK03gtY88Odzqzh7RIXYkNkRcy92ara
56HIP8BBRD3m1c8pYPfpZfLAzkuurAzVqbJ6qbxw1AebdlPCFEq2g6C+IOcTon0T
q9ZD2I2XJmWd42EXXqva+NMrcx1jfjmHWVtl7xHKhwPndFCtHPMMAdoDS0Xpbh1V
3Ns4h/DphDpC8/ZYZ5sbpMCBekHw4VTZDGxNAuXJ5DMPhkqg2MxVplkS19PuBHLx
r74sgsz611Gjg55gjKOqCb5ZZEvqZTrwKTEYIbu8HicWtq/HxKRZS3FZN9MThTTX
Hesv65vsq9fH0UhEM6MVJjE5Phnw8Wb5ivtAiaUA+NzPrDfrHZAsSfR9NFL3rhFC
7wOmnXtzK40NjmqyMWJu/UP9UVbz3SeEiHiQO9GwBc2krzmXzcmLZFgEjty4CGoJ
SzXAA1QGpUGO4n0b3Y/5zSY4UxogGWybW+mOs27KDLytI915wNYGvBtcdAKCj6Ws
1uVA98npwMid/WSJJ04BXHX8LbowrDeTezSFJyGh+u/KnhlzkA7fqEuu3nQGT5rA
a9qeMmd5kmLBIVcG9RVVmw1kc0AK0qIqZDmlk9dWGJs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.1.1
Release Details
UpdatedMay 27, 2026, 6:43 p.m.
Changelog

Added

  • Glossar-Button in der Navigation (über den Einstellungen) mit interaktivem Nachschlagewerk
  • Dreispaltige Glossar-Tabelle: Begriff/Abkürzung, Bedeutung/Englisch, Erklärung mit Berechnungsformeln
  • 30 Einträge in 6 Abschnitten: Allgemein, Terminplanung, Baseline & Berichtswesen, Earned Value Management, Ressourcen & Kapazität, Budget

Fixed

  • Fehlende deutsche Übersetzungen für englische UI-Strings ergänzt (Add dependency, Baseline, Dependencies, Remove, Work, No projects yet, Open Gantt Projects, u.a.)
  • Leere Übersetzung für Deck-Fortschritt-Hinweis befüllt
  • de.js vollständig mit de.json synchronisiert (war ~70 Einträge veraltet)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureF1RHJx15J/N8tWNrDlAX1MFE/9tsct4PViEcBDeo8U/V2qJ/tezL7Xk0BVmYxjWw
pB+J685mcHjikh93/aZUqG8C6y0mR3TTJfaa7dLCIRMc1034x6Xj9Nd7Q9YVH4yi
RLTcRhrG2pN1Iqc23kwId995GJXHnCBEyuQuzo9m1VtA7GoFa8W2nqhXVT94khDS
8ZHQrixDfv63d4GfA5N2x4+phaiyObdskvCmVSuKrmouYvCGpPevtKG5YxzOrHid
aL48Kod0YgOCAD8nAqOhEmioP0m+wP2e/NC4Z5svSKT3vdlE67W1M68ipQQfnhPI
txui+2X8zFvoe/M5sE3DaXbLnOVNGQ7YRpyXFI5GsQmQ0cPSSO/94Mw15hLZfwMf
TDOrrvzf+Vu05sUTZ6CFh4FrSl4e5Q6Xjv6uH4BZtyOpPxl+ajgW4OkZvQDbt4KC
8aTZodMcDpXlRMDdBSxT1bT9tD05KUKmEZYtpxHiARrHDuQQCRSuxtjitQD9lbla
CMxKrBiO0YgdUb3FuczYkWEH+y8gW5egU6TDMnjAVbuUecGuGZN1Cc6tarcFWRu2
+V7Qn+aNoXEwP5e/0TM4Ig8ETAYseZRiTPHxeWiSg3RnU3HuT6kPVWw8LERACDT4
6F4WU9t2+4kESMLMjeV0/2UBQSykR/42Idsg0PtvpyQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.1.1 (nightly)
Release Details
UpdatedMay 27, 2026, 5:24 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureF4W7QJB8rVJ2xARdnhUbEouzRZMKcowz/ToDwr0oVFrVUbInFvHAMqXFTOVD1a5N
kDTb0pOhv+hCStTh70bN+aapjbdtp7SdQ3SbP5VoXBKLhUii41OqN/i4yM7itdSs
M8d5PVo9TJYVnfaij2xwWghMqZEyzxgOw4Q98dYIysf2BxsjjCtxGEMo/pISS90G
OE2RaVEFbwUcvu1XKszLP5X/k/onOchengURYVuzHP7VgVuomZpPSZ9VEIRKITyL
GpgSDrdqm5AXdQc7l/2OqprW6G+MxsuVzChbyPGslIYYXYsP9HLc/FfwVxaCJjh2
Nsiqfd+dMwnf7f9yrrBuZjbNwNa5x++IynrwaU01jVISkl9pgkbUYRaPSMTGFDAd
lsEEqlgs9KdzGoTFjDXNdTwDOsUMiu/ag8tPo7YxsxLFbVGa7laRAUhlGUT9QGPr
IOAAWvKqivsYnU5iwTCY/5HGza3SDfZc/e5upPfB+lTQTYijp1aAYRBAsoOLmuga
f0aP45pnfnYBJkT1kMsthjbGMdlL46wLiNHKRct9OlFwx74IRIyZdcs5Q3pC0aNN
DSLvsCSmY8/9PtTLzcOJKXTqqDVupCqq82bUlGRn7NR6xsinzv74MuOVnGY21tBm
iB5ceYpgiEukUz6YtS2quIIiMTnYmM+HBFnkXgBV0/Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32

Nextcloud 30

Gantt Projects 1.4.2
Release Details
UpdatedAug. 20, 2026, 4:41 a.m.
Changelog

Changed

  • release.sh fragt die Versionsnummer jetzt interaktiv ab, statt sie nur aus appinfo/info.xml zu lesen: zu Beginn werden die aktuelle Version und das letzte Release-Tag angezeigt und es wird gefragt, ob eine neue Nummer vergeben werden soll (Vorschlag: nächster Patch-Level). Die Eingabe wird auf das Format X.Y.Z, auf einen echten Versionssprung und auf ein noch nicht vergebenes Tag geprüft und dann nach appinfo/info.xml, package.json und package-lock.json geschrieben. Fehlt ein Changelog-Abschnitt zur neuen Version, warnt das Skript; anschließend bietet es an, den Bump als chore: Version X.Y.Z zu committen — nötig, weil der Tag-Name den Commit-Hash enthält. Für nicht-interaktive Läufe gibt es --version=X.Y.Z und --no-bump; ohne TTY wird nie gefragt, make release bleibt also unverändert nutzbar
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturepoVHZxteU3AR2cpRRV98jNfv4j7rWnLEd3kbpn5Dp4T1ubAI+0QlRf9jxi0BaYz1
+1dg+3Yt25uN6Slp1FHiw7kyqt5HJ60XgnOWo+Zt0YBHSnWqLDhF8zxPEnQCkF+v
nUvscpcoQY2bRiIBZhVWVgeAD592uvOA4gfRDrUyLVDKjOrzBu3ScbNvCqTqE9IC
vs8qZkRLIcaD6tKoSLT2pZqmwBoCdClvEw5D5v40WSvLq232BZnXpQ4ogG3QvJdL
mYO8HlPZKVOxANp0MGnWle4IFRMbMt22Ebpkjc18Q9Q4AIv/Sd3zTsc+uMONTM95
s0GXvLSm95o0UCFZ1CL7fCEq7NwlprjVrTeWGmlJNVjHJuIyRKHEz5DR12s0lAGm
/rKGWjoVP+Wvk3upRizR/5y2fpWoiwuDqCtz9gQN6+HHYLaqLvYqsAJ/SxmtLtP7
8B2rK61ClKowz4phbTZdrCaF8w3IWnFFBTFquIVFuN2jUoHvdCMtd0910sLAMY5M
Xs9nk0FVsP23zKXlQpOojq7ouCQagRhsnBJDLxWRR+NIq582f7SDgcrkBqxlGJX4
/Ql9V+2iFx61QANCTjdJIO3LbvbK60vGos+ency0GfvSDbPovDAVyJzt8ZUh5BNw
UXQ4XOHJZAagAr36rKttk1DQbZZ/2bUEq231c96m83g=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.4.1
Release Details
UpdatedAug. 17, 2026, 7:43 p.m.
Changelog

Fixed

  • Die Meilenstein-Raute hatte eine fest verdrahtete Farbe (#fbbf24) statt der Projektfarbe zu folgen, obwohl Balken für Aufgaben und Teilprojekte bereits korrekt eingefärbt wurden (Issue #102). Zusätzlich wurden die separaten – und wirkungslosen – Farbwähler bei Teilprojekt und Aufgabe entfernt, da deren Anzeige ohnehin immer der Projektfarbe folgt
  • „Meilenstein hinzufügen" im Drei-Punkte-Menü der Projektliste nutzte zwei aufeinanderfolgende window.prompt()-Dialoge (Name, dann Datum als Freitext) statt des regulären Detail-Dialogs (Issue #101). Der Klick emittiert jetzt add-milestone analog zu „Aufgabe hinzufügen" (Issue #91) und öffnet denselben Meilenstein-Dialog wie beim Bearbeiten, mit vorbelegtem Projekt
  • Im festen Datumsmodus des Aufgaben-Detaildialogs konnte ein Enddatum vor dem Startdatum eingegeben und gespeichert werden (Issue #100). Jetzt zieht ein über das Enddatum hinaus verschobenes Startdatum das Enddatum mit; ein zu frühes Enddatum erzeugt ein rotes Fehler-Icon am Feld, hält den Fokus dort und deaktiviert den Speichern-Button, bis ein gültiges Datum eingetragen ist (dateField() in fields.js mit neuer setError()-Methode)
  • Eine Aufgabe mit Abhängigkeit behielt trotzdem die manuell eingegebenen Start-/Enddatumsfelder, die beim Speichern durch die Abhängigkeitsberechnung überschrieben wurden – für Nutzer nicht nachvollziehbar (Issue #99). Der Aufgaben-Detaildialog hat jetzt denselben Fixed-date/Dependency-Umschalter wie Meilensteine (Issue #90): im Dependency-Modus ersetzt eine Dauer (Tage) die Datumsfelder, die Abhängigkeit bestimmt den Termin. Serverseitig wendet TaskService::create() neu hinzugefügte Abhängigkeiten sofort an (bisher nur update()), damit auch neu angelegte Aufgaben keinen die Abhängigkeit ignorierenden Platzhaltertermin behalten
  • Der Speichern-Button des Detail-Dialogs blieb nach dem Hinzufügen einer Abhängigkeit deaktiviert: die Gültigkeitsprüfung hing allein am input-Event, das bei einem <select> vor dem change-Event feuert – zu diesem Zeitpunkt war die Abhängigkeit noch nicht in der Liste. detailModal.js wertet jetzt zusätzlich change aus, der Abhängigkeits-Editor (fields.js) meldet jede Mutation (Hinzufügen, Entfernen, Typwechsel) und der Fixed-date/Dependency-Umschalter in taskForm.js den Moduswechsel über ein eigenes bubbelndes change-Event

Added

  • CONTRIBUTE.md und setup-dev.sh für neue Mitwirkende (Issue #98): Projekt-Leitlinien (FOSS, Datensparsamkeit, Security), VIBE Coding ausdrücklich erlaubt, sowie der komplette lokale Dev-Setup-Weg (Docker-only, Nextcloud + MariaDB unter localhost:8088, optionales E2E-Setup, Git-/Bot-Auth). setup-dev.sh automatisiert diese Schritte, konfigurierbar über --workdir/--no-e2e/--no-docker-install
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturetYcUvVtDEQrAakG32EQF1atSOmz91/8XudCUh60A9r/AxMv+AA5AX2rIvNYDkEn0
OuTmXA6Iz0DoVkdij11MPDhfLaUy0mXeLbwB5fj/xF/cFYcNeCFGKD3k2jyRwOTo
2n1sEp0r8sn0fitHzLfhcB/By0VJkZyhaO/NctP01XfcSQM7lGEOeY/uagtGaDTI
JnPLoQTHo0nUOv4y7jUMZuurEgBOc4yeUxTKv4A/m642hvNQIS0q6K9ON41JHKIO
UtI7DbDWSboVhct1Go3zoj5XcaAGG9ZiwSkJDt/BXT5tWH4SOnSn7mys0j1F6Y0g
vIJWjz6S2RlekwIrIxgyaeEVBOeQ4OM1ilJGWKXDyYJM/0IBxqnqRXDkAFlOopDo
xezlcFdWTkYL5OBKMFJhKuTy7dEQ9hxx5Nz4+vLbNV8gDJZBI+5yI5m8W+809WIH
iKUpIda1ShOblvYH6Ek5AzBdTmoFQ6T4f7iWT7j1i4uUP2DsgehjGVl8yDIT/wyx
nV9t7koXapu1WeXrunSa++mXsi3lceNpthdz5/cUEOe9yWvc1rrulRhiWzePga8H
zjVQYGAIPvwYkWa47U6Zh7HBsQaS+9yQ8NDnD49SS4jUWTGlwNqfM+q9fZ16/G9d
7l4chZUPPbBv+xWfdxmFw+MC5zdkAq27isHToTqnm+w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.4.0
Release Details
UpdatedAug. 13, 2026, 6:41 a.m.
Changelog

Added

  • Meilensteine werden jetzt immer direkt unter ihrem übergeordneten Objekt angezeigt statt gesammelt am Projektende (Issue #90): Meilensteine lassen sich neu auch einer Aufgabe zuordnen (bisher nur Projekt/Teilprojekt, Spalte task_id war bereits vorhanden, es fehlte nur die UI), das Auswahlfeld im Detail-Dialog heißt entsprechend „Übergeordnetes Objekt" statt „Teilprojekt". Zusätzlich können Meilensteine ihr Datum jetzt statt eines fixen Werts aus einer Abhängigkeit zum übergeordneten Objekt beziehen (EA/AA/EE/AE, analog zu Aufgaben-Abhängigkeiten; neue Spalte dependency_type, Migration Version1028) – da ein Meilenstein keine Dauer hat, bestimmen EA/EE das Ende und AA/AE den Start des Zielobjekts. Die Berechnung übernimmt der neue MilestoneDateService (serverseitig live bei jedem Abruf sowie im ICS-Feed neu aufgelöst, nicht persistiert propagiert) sowie clientseitig in frappeRows.js für sofortige Reaktivität ohne Neuladen
  • Undo für Drag-&-Drop-Verschiebungen inkl. Propagationskette (Issue #85, Umsetzung der einstufigen Empfehlung: letzte eigene Operation, kein Redo, zunächst nur Drag & Drop): Migration Version1027Date20260810020000 ergänzt nc_gantt_change_events um op_id (UUID) – alle Change-Events einer zusammenhängenden Operation (Drag + gesamte Propagationskette B→C→D) erhalten dieselbe op_id, erzeugt in TaskService::update()/propagateDates() und über ChangeEventService::log() protokolliert (dieses Change-Tracking war bisher tote Scaffolding-Logik ohne Aufrufer). Neuer Endpoint POST /api/v1/changes/{opId}/revert (ChangeEventController::revert, ChangeEventService::revertOperation) wendet alle Change-Events der Operation invers an, in einer DB-Transaktion mit Rechteprüfung über AccessService::canEditOrOwn(). Konfliktschutz: Revert wird mit HTTP 409 abgelehnt, sobald der aktuelle Feldwert nicht mehr dem protokollierten new_value entspricht (jemand hat zwischenzeitlich erneut geändert); der Revert selbst erzeugt wiederum neue Change-Events, die Audit-Historie bleibt lückenlos. Frontend: nach jedem gespeicherten Drag zeigt GanttChart.vue einen Toast „N Termine verschoben — Rückgängig" (showUndo aus @nextcloud/dialogs, 10 s sichtbar) sowie ein globales Ctrl+Z für die letzte eigene Operation der Session (stores/projects.js: lastOperation, revertOperation(), undoLastOperation())
  • Kalender-Export als abonnierbarer ICS-Feed pro Projekt (Issue #83, Variante A aus dem Umsetzungsvorschlag): neue öffentliche Route GET /apps/nc_gantt/projects/{id}/calendar.ics?token=… (regulärer, unauthentifizierter CalendarFeedController, damit externe Clients wie Thunderbird, Nextcloud Kalender oder mobile Apps ohne Nextcloud-Login abonnieren können) liefert Meilensteine als ganztägige VEVENTs (◆-Präfix), den aus den Aufgaben abgeleiteten Projektzeitraum sowie optional Teilprojekt-Zeiträume (Schalter „Auch Teilprojekt-Zeiträume einschließen", standardmäßig aus, um den Feed bei großen Projekten nicht zu überladen). Zugriff erfolgt über einen pro Projekt generierten, 256-Bit-zufälligen Token in der URL (CalendarFeedService, neue Spalte calendar_token auf nc_gantt_projects, Migration Version1026), der über einen neuen „Kalender-Feed"-Bereich im Freigabe-Dialog angezeigt, kopiert und jederzeit widerrufen/neu generiert werden kann (CalendarTokenController, nur für Projekt-Admins/-Eigentümer). ICS-Generierung ohne neue Abhängigkeit, RFC-5545-konform (Escaping, Zeilenfaltung)
  • What-if-Simulationsmodus für Terminverschiebungen (Issue #84): neuer Endpunkt POST /api/v1/projects/{id}/simulate führt Terminpropagation und CPM rein im Speicher aus (kein DB-Schreibzugriff) – TaskService::simulate() nutzt die neu extrahierte, stateless propagateDatesCore()-Kernlogik, die auch der persistierende update()-Pfad verwendet, CriticalPathService::computeFromTasks() erlaubt CPM auf einem hypothetisch veränderten Task-Datensatz. Frontend: „Simulation"-Toggle in der Gantt-Toolbar mit Banner inkl. Projektende-Delta in Arbeitstagen, Geisterbalken für die Ist-Termine (analog Baseline-Overlay) sowie Verwerfen/Übernehmen. Drag & Drop ruft im Simulationsmodus simulate() statt einer echten Speicherung auf. Szenarien bleiben bewusst flüchtig (kein Speichern benannter Szenarien), „Übernehmen" wendet die Änderungen als einzelne Task-Updates an, Simulation läuft pro Projekt
  • Neuer Eintrag „Aufgabe hinzufügen" im Drei-Punkte-Menü der Projektliste (Issue #91): legt wie der „Neu"-Button eine Aufgabe an, belegt dabei aber das gewählte Projekt direkt vor, sodass der Projekt-Auswahlschritt in der Maske entfällt
  • Such-/Filterleiste für Projekte, Teilprojekte und Aufgaben (Issue #81, Stufe 1: rein clientseitig auf Basis der bereits geladenen Daten aktivierter Projekte): Freitextsuche im Titel, Risiko, „überfällig" (Ende < heute und Fortschritt < 100 %), „über Budget" (Ist-Kosten > geplantes Budget), Ressource und „ohne Deck-Verknüpfung". Neuer Pinia-Store stores/filters.js (Zustand pro Nutzer in localStorage persistiert) und reine Matching-Logik in gantt/filterMatch.js. Nicht passende Balken werden in GanttChart.vue gedimmt statt ausgeblendet (Abhängigkeitspfeile und Zeitkontext bleiben lesbar), Projekte/Teilprojekte gelten als Treffer, sobald ein Nachfahre passt. Dieselbe Filterleiste (components/FilterBar.vue) dimmt in ProjectList.vue nicht passende Projekte; für nicht aktivierte Projekte sind nur Titel-Treffer zuverlässig auswertbar, da deren Aufgaben/Teilprojekte nicht geladen sind

Changed

  • Freigabe für Nextcloud 34 (Issue #94): max-version in appinfo/info.xml von 33 auf 34 angehoben, unterstützter Bereich damit NC 28–34. Verifiziert gegen Nextcloud 34.0.2 mit PHP 8.5 und MariaDB 11.4 (148 Unit-Tests, 39 E2E-Tests)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturerdYQI+Semnk0cWtKqUZinVDHk0KpxyqB5Ox4NBL9pyf5nrpK8xZpe9lBxc6zhDfW
8adLfVIwQtX+bI7S1O05xm0hwrUHQQ2ii6ADD8mlAxnZjdhKSCAhZ0NcaqT7Em0X
nD7yRP2B8zAAQMJNjzeBsLbzveNrXMoGzFrvm/jFxskUIUS01ykfWEg2C5+5/IAf
7jBAM8x2Qj92b8zyBFpLjfJQw9aTE/trtCsmZXQFmkJjGS0anrJc9dXKfqnHxknX
8jmLOv4Yq4Qtk3UF35HTiIGcA2W0UKfVyFb4XcrIMeSmLXXcagJWjeH5nB18UUNn
JyCgE/qY4v/SnrNQU92mIdMOQGuvYg7xbaz226lgNdwM2HuM9U8nc2juqJxAO+Wp
xs85yl82qIviZ5YY39HK371MZ/ufMsaVsVy3Nfn3PjqqkzGLmtAL6KJDcKHZWdDw
ugEPwO61DxnERZsNGeFpXfzCxjMpZc/qwUIfGw85idmU2vdedtrxHBkDGoqu1IP7
xZOO8uSYrzbXM6g1gs3WPBOY51CmZLs5pIQTN1tVl5ifGw4uOuzDBUCKiR5oA2MI
352HbA7wwWFgwoN9W5t4MRTowmaYpM8AB+nh9f1A5q9S8SelfMpXOqGew9VZb2jd
AuiJK/LEPjRgs5s3/FfC4Sb1MSsXDr1N1jziaF4MomM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.3.1
Release Details
UpdatedAug. 6, 2026, 12:57 p.m.
Changelog

Added

  • Regressionstests für die Rollentrennung Viewer/Editor/Admin: ForbiddenException-Tests für TaskService::create/update/delete/syncProgress und ProjectService::updateProject/deleteProject (inkl. „Editor darf nicht löschen") sowie erstmalige Testabdeckung für SubProjectService und MilestoneService

Fixed

  • CSV-/Formel-Injection im Aufgaben-Export (detail/io.js exportCsv): Task-Felder wie Titel oder Beschreibung, die mit =, +, - oder @ beginnen, wurden unverändert übernommen und von Excel/LibreOffice/Google Sheets als Formel ausgewertet. Die Absicherung aus ReportView.vue liegt jetzt in einer gemeinsamen Utility (src/utils/csv.js, escCsvCell) und wird an beiden Export-Stellen verwendet
  • Viewer sahen im Frontend dieselbe Oberfläche wie Editor/Admin (Add Task/Subproject/Milestone, Share, Delete Project, Drag/Resize im Gantt-Chart, volle Bearbeitungsformulare), obwohl das Backend Schreibversuche ohnehin korrekt ablehnte – kein Least-Privilege an der UI. ProjectService::getAccessibleProjects()/getProject()/createProject()/updateProject() liefern jetzt das effektive permission-Feld (AccessService::getEffectivePermission()) mit; ProjectList.vue, GanttChart.vue (inkl. Drag/Resize-Sperre je Projekt) und das Detail-Modal (detail/detailModal.js) blenden Schreib-Aktionen für Viewer aus bzw. schalten Formulare read-only
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureBUyDeI9y7iKD1wQJLHrW6IFq0zuXOJQ1Zv/x+0RryIIQ0fAGAUjwQyLDYLYpRzPg
6ITDPfY9bftVlwkB8w9LqZiFETkH8mgc6l5XB7F6NKzFrdaSnNw21CIVJjWyHpkR
mxDq+vQepZd+YtB9jMz39kbFk9BNHrpKIwIXXZVqEqj1U54NmT+5XnT892m9mY6o
RWQNf3Mn5WcH3vmoDi/UAOgDaO30GFCRJePryurVpK7stkub8K6fYsWIkS5NeJlP
YHdb4nBlkhUzQFjo0ZDSkCSiWjMdyCrtEanX6m6Ffhr+j0jpd+J9soMSjrzdzt4T
5mETo8xc61IQIVFWMD6fZ3/oCmbx2TFDZsJjRpFKxoPA08AkdC7xjxHoaKYZHvi4
+tzowxPzMfyjQ/hEj2dwq22doM2lXK1Y13VvV8kkaomrAQjB97gf+ODrYZNDgNvc
2ijU08B4cAB0HbEveDpDRjCJj8D5OwCMafRMa4Ul/nm0+RiBFOhIjDYdVAnCp7Ql
IEc4UQZM9WYLQlouwGPk83POpbqkbc8vKAucGBXvHAbxNpUSOGbssMYFGU/e9pOg
+oT2gcJrC3MYPGIWnS8iLn75PK1H063KFJv5yqC+h/rqwX/FxyTzKvofJi68GpLs
WtG3y67W8Ju4y1I9iQ9raJxxhFUJrStibGy9gc7L0DM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.3.0
Release Details
UpdatedJuly 9, 2026, 5:23 a.m.
Changelog

Fixed

  • Baseline-Toggle im Gantt-Toolbar zeigte nie Baseline-Balken und PUT baseline/active warf einen SQL-Fehler: baseline_id auf nc_gantt_projects wurde mit der 3-Ebenen-Migration versehentlich zusammen mit den tatsächlich berechneten Spalten entfernt (Migration Version1025 stellt die Spalte wieder her). BaselineService::create() aktiviert eine frisch eingefrorene Baseline jetzt automatisch fürs Projekt; renderBaselineBars() (GanttChart.vue) und baselineOverlay.js lesen Baseline-Items dafür über task_id statt des seit der Umstellung auf das 3-Ebenen-Modell nicht mehr existierenden subproject_id-Felds
  • OCS-API-Fehlerantworten (400/404/500 …) lieferten für alle OCSController-Endpunkte einen leeren text/html-Body statt des erwarteten JSON-Envelopes mit message; ExceptionMiddleware wirft jetzt passende OCP\AppFramework\OCS\OCSException-Subklassen statt einer rohen DataResponse, die Nextcloud-Core nur für 401/403 automatisch formatiert. Betroffene Controller (ProjectController, ReportController, ShareController, ChangeEventController, WorkScheduleController, WorkCalendarController, HolidayAdminController, SettingsController) wurden zusätzlich auf die bestehende ApiException-Hierarchie umgestellt

Removed

  • Nie ausgewertete Gruppen-Freigabe-Option entfernt: Share::TYPE_GROUP, principal_type-Parameter in ShareController sowie die DB-Spalte principal_type (Migration Version1024) wurden gestrichen; Freigaben sind jetzt ausschließlich benutzerbezogen

Changed

  • Dashboard-Summary (DashboardController::summary) lädt Baselines und Aufgaben-KPIs jetzt über gruppierte SQL-Aggregat-Queries statt pro Projekt einzeln (N+1-Fix, gilt auch für den Admin-Fall mit allen Instanz-Projekten)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureNJfbRJEXzKGipUjUW9tUKayHoY6ltSU0ZeCQXcDx6XVDY/naLK0dVY9ciofXU7oy
40sJIOsjxcUZbalDwqncPn0vjGoqmk3BFUT7KotEpLLf8/ZmIjdHEbQbJHzEpdQV
y5YedjqRLKB7/Ul35JWVFxY8eutCsYkonfof7v6AGMGB/RjQ7GDB6jWunEEwqUGV
3Y1isvdq5N3oo9NDY/QR0C2C7jiMnB9Kon0KzZ2yp0oF5euOpA/qrtmqxG3L9PoZ
DW1ppwAuARWtRDu4tcDAAQAkF1Mrg5YyYgRoKm7uVazlKEP7DxX56g/g4RS2otEE
rKsA/ER9yYiHnNyGcZuK9Jkfe2Ua6/R7gzJilRvHZ7CBPkhY+XNPcrjlsHbCJEJJ
cX/b0B56p7FyAFy6XjMY9PYFhxy/ubHE7Sk8ixX88uxgM4vf/sSFQaN84CcG/qqA
Nq/OEytBjZP82TsFFYBRcPKEPskF4ejjhNVC4bJpiuCIpo51nIxjeFGtDpeQiDG7
0OWc/GCvsz5W3eG7ShmQsRf0DoivL8tjgDUlMWO9boTpUy2Vnm1rDMKu6nFGKZ8o
TWTZR6u4zGZW1OBERdlU5NQmqxqXrsuGlT6r6DuQnWsWiscjXOyIFeHz+EOKhQOk
wUuN6xN8QES1CDFB27PYV0Sz2KhYhM78GKLCc9B10Ic=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.2.0
Release Details
UpdatedJuly 5, 2026, 9:21 a.m.
Changelog

Added

  • Löschen-Buttons im Detail-Modal für Teilprojekt, Aufgabe und Meilenstein
  • Deutsche App-Beschreibung in info.xml ergänzt

Fixed

  • Baseline-Datum und Kommentar im Report werden untereinander angezeigt
  • Dashboard-Widget zeigt Baseline-Datum und KPI-Werte korrekt an
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureXuYTZMxTlGNJVrGvU/GcIjSlBTYreXdvF5FilCmsi+l7MBvFlyeW1DsnxAsao3pu
HyhvaKXRnkraVQNT2ULgX4BmjUnhsELROrK03gtY88Odzqzh7RIXYkNkRcy92ara
56HIP8BBRD3m1c8pYPfpZfLAzkuurAzVqbJ6qbxw1AebdlPCFEq2g6C+IOcTon0T
q9ZD2I2XJmWd42EXXqva+NMrcx1jfjmHWVtl7xHKhwPndFCtHPMMAdoDS0Xpbh1V
3Ns4h/DphDpC8/ZYZ5sbpMCBekHw4VTZDGxNAuXJ5DMPhkqg2MxVplkS19PuBHLx
r74sgsz611Gjg55gjKOqCb5ZZEvqZTrwKTEYIbu8HicWtq/HxKRZS3FZN9MThTTX
Hesv65vsq9fH0UhEM6MVJjE5Phnw8Wb5ivtAiaUA+NzPrDfrHZAsSfR9NFL3rhFC
7wOmnXtzK40NjmqyMWJu/UP9UVbz3SeEiHiQO9GwBc2krzmXzcmLZFgEjty4CGoJ
SzXAA1QGpUGO4n0b3Y/5zSY4UxogGWybW+mOs27KDLytI915wNYGvBtcdAKCj6Ws
1uVA98npwMid/WSJJ04BXHX8LbowrDeTezSFJyGh+u/KnhlzkA7fqEuu3nQGT5rA
a9qeMmd5kmLBIVcG9RVVmw1kc0AK0qIqZDmlk9dWGJs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.1.1
Release Details
UpdatedMay 27, 2026, 6:43 p.m.
Changelog

Added

  • Glossar-Button in der Navigation (über den Einstellungen) mit interaktivem Nachschlagewerk
  • Dreispaltige Glossar-Tabelle: Begriff/Abkürzung, Bedeutung/Englisch, Erklärung mit Berechnungsformeln
  • 30 Einträge in 6 Abschnitten: Allgemein, Terminplanung, Baseline & Berichtswesen, Earned Value Management, Ressourcen & Kapazität, Budget

Fixed

  • Fehlende deutsche Übersetzungen für englische UI-Strings ergänzt (Add dependency, Baseline, Dependencies, Remove, Work, No projects yet, Open Gantt Projects, u.a.)
  • Leere Übersetzung für Deck-Fortschritt-Hinweis befüllt
  • de.js vollständig mit de.json synchronisiert (war ~70 Einträge veraltet)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureF1RHJx15J/N8tWNrDlAX1MFE/9tsct4PViEcBDeo8U/V2qJ/tezL7Xk0BVmYxjWw
pB+J685mcHjikh93/aZUqG8C6y0mR3TTJfaa7dLCIRMc1034x6Xj9Nd7Q9YVH4yi
RLTcRhrG2pN1Iqc23kwId995GJXHnCBEyuQuzo9m1VtA7GoFa8W2nqhXVT94khDS
8ZHQrixDfv63d4GfA5N2x4+phaiyObdskvCmVSuKrmouYvCGpPevtKG5YxzOrHid
aL48Kod0YgOCAD8nAqOhEmioP0m+wP2e/NC4Z5svSKT3vdlE67W1M68ipQQfnhPI
txui+2X8zFvoe/M5sE3DaXbLnOVNGQ7YRpyXFI5GsQmQ0cPSSO/94Mw15hLZfwMf
TDOrrvzf+Vu05sUTZ6CFh4FrSl4e5Q6Xjv6uH4BZtyOpPxl+ajgW4OkZvQDbt4KC
8aTZodMcDpXlRMDdBSxT1bT9tD05KUKmEZYtpxHiARrHDuQQCRSuxtjitQD9lbla
CMxKrBiO0YgdUb3FuczYkWEH+y8gW5egU6TDMnjAVbuUecGuGZN1Cc6tarcFWRu2
+V7Qn+aNoXEwP5e/0TM4Ig8ETAYseZRiTPHxeWiSg3RnU3HuT6kPVWw8LERACDT4
6F4WU9t2+4kESMLMjeV0/2UBQSykR/42Idsg0PtvpyQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.1.1 (nightly)
Release Details
UpdatedMay 27, 2026, 5:24 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureF4W7QJB8rVJ2xARdnhUbEouzRZMKcowz/ToDwr0oVFrVUbInFvHAMqXFTOVD1a5N
kDTb0pOhv+hCStTh70bN+aapjbdtp7SdQ3SbP5VoXBKLhUii41OqN/i4yM7itdSs
M8d5PVo9TJYVnfaij2xwWghMqZEyzxgOw4Q98dYIysf2BxsjjCtxGEMo/pISS90G
OE2RaVEFbwUcvu1XKszLP5X/k/onOchengURYVuzHP7VgVuomZpPSZ9VEIRKITyL
GpgSDrdqm5AXdQc7l/2OqprW6G+MxsuVzChbyPGslIYYXYsP9HLc/FfwVxaCJjh2
Nsiqfd+dMwnf7f9yrrBuZjbNwNa5x++IynrwaU01jVISkl9pgkbUYRaPSMTGFDAd
lsEEqlgs9KdzGoTFjDXNdTwDOsUMiu/ag8tPo7YxsxLFbVGa7laRAUhlGUT9QGPr
IOAAWvKqivsYnU5iwTCY/5HGza3SDfZc/e5upPfB+lTQTYijp1aAYRBAsoOLmuga
f0aP45pnfnYBJkT1kMsthjbGMdlL46wLiNHKRct9OlFwx74IRIyZdcs5Q3pC0aNN
DSLvsCSmY8/9PtTLzcOJKXTqqDVupCqq82bUlGRn7NR6xsinzv74MuOVnGY21tBm
iB5ceYpgiEukUz6YtS2quIIiMTnYmM+HBFnkXgBV0/Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32

Nextcloud 29

Gantt Projects 1.4.2
Release Details
UpdatedAug. 20, 2026, 4:41 a.m.
Changelog

Changed

  • release.sh fragt die Versionsnummer jetzt interaktiv ab, statt sie nur aus appinfo/info.xml zu lesen: zu Beginn werden die aktuelle Version und das letzte Release-Tag angezeigt und es wird gefragt, ob eine neue Nummer vergeben werden soll (Vorschlag: nächster Patch-Level). Die Eingabe wird auf das Format X.Y.Z, auf einen echten Versionssprung und auf ein noch nicht vergebenes Tag geprüft und dann nach appinfo/info.xml, package.json und package-lock.json geschrieben. Fehlt ein Changelog-Abschnitt zur neuen Version, warnt das Skript; anschließend bietet es an, den Bump als chore: Version X.Y.Z zu committen — nötig, weil der Tag-Name den Commit-Hash enthält. Für nicht-interaktive Läufe gibt es --version=X.Y.Z und --no-bump; ohne TTY wird nie gefragt, make release bleibt also unverändert nutzbar
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturepoVHZxteU3AR2cpRRV98jNfv4j7rWnLEd3kbpn5Dp4T1ubAI+0QlRf9jxi0BaYz1
+1dg+3Yt25uN6Slp1FHiw7kyqt5HJ60XgnOWo+Zt0YBHSnWqLDhF8zxPEnQCkF+v
nUvscpcoQY2bRiIBZhVWVgeAD592uvOA4gfRDrUyLVDKjOrzBu3ScbNvCqTqE9IC
vs8qZkRLIcaD6tKoSLT2pZqmwBoCdClvEw5D5v40WSvLq232BZnXpQ4ogG3QvJdL
mYO8HlPZKVOxANp0MGnWle4IFRMbMt22Ebpkjc18Q9Q4AIv/Sd3zTsc+uMONTM95
s0GXvLSm95o0UCFZ1CL7fCEq7NwlprjVrTeWGmlJNVjHJuIyRKHEz5DR12s0lAGm
/rKGWjoVP+Wvk3upRizR/5y2fpWoiwuDqCtz9gQN6+HHYLaqLvYqsAJ/SxmtLtP7
8B2rK61ClKowz4phbTZdrCaF8w3IWnFFBTFquIVFuN2jUoHvdCMtd0910sLAMY5M
Xs9nk0FVsP23zKXlQpOojq7ouCQagRhsnBJDLxWRR+NIq582f7SDgcrkBqxlGJX4
/Ql9V+2iFx61QANCTjdJIO3LbvbK60vGos+ency0GfvSDbPovDAVyJzt8ZUh5BNw
UXQ4XOHJZAagAr36rKttk1DQbZZ/2bUEq231c96m83g=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.4.1
Release Details
UpdatedAug. 17, 2026, 7:43 p.m.
Changelog

Fixed

  • Die Meilenstein-Raute hatte eine fest verdrahtete Farbe (#fbbf24) statt der Projektfarbe zu folgen, obwohl Balken für Aufgaben und Teilprojekte bereits korrekt eingefärbt wurden (Issue #102). Zusätzlich wurden die separaten – und wirkungslosen – Farbwähler bei Teilprojekt und Aufgabe entfernt, da deren Anzeige ohnehin immer der Projektfarbe folgt
  • „Meilenstein hinzufügen" im Drei-Punkte-Menü der Projektliste nutzte zwei aufeinanderfolgende window.prompt()-Dialoge (Name, dann Datum als Freitext) statt des regulären Detail-Dialogs (Issue #101). Der Klick emittiert jetzt add-milestone analog zu „Aufgabe hinzufügen" (Issue #91) und öffnet denselben Meilenstein-Dialog wie beim Bearbeiten, mit vorbelegtem Projekt
  • Im festen Datumsmodus des Aufgaben-Detaildialogs konnte ein Enddatum vor dem Startdatum eingegeben und gespeichert werden (Issue #100). Jetzt zieht ein über das Enddatum hinaus verschobenes Startdatum das Enddatum mit; ein zu frühes Enddatum erzeugt ein rotes Fehler-Icon am Feld, hält den Fokus dort und deaktiviert den Speichern-Button, bis ein gültiges Datum eingetragen ist (dateField() in fields.js mit neuer setError()-Methode)
  • Eine Aufgabe mit Abhängigkeit behielt trotzdem die manuell eingegebenen Start-/Enddatumsfelder, die beim Speichern durch die Abhängigkeitsberechnung überschrieben wurden – für Nutzer nicht nachvollziehbar (Issue #99). Der Aufgaben-Detaildialog hat jetzt denselben Fixed-date/Dependency-Umschalter wie Meilensteine (Issue #90): im Dependency-Modus ersetzt eine Dauer (Tage) die Datumsfelder, die Abhängigkeit bestimmt den Termin. Serverseitig wendet TaskService::create() neu hinzugefügte Abhängigkeiten sofort an (bisher nur update()), damit auch neu angelegte Aufgaben keinen die Abhängigkeit ignorierenden Platzhaltertermin behalten
  • Der Speichern-Button des Detail-Dialogs blieb nach dem Hinzufügen einer Abhängigkeit deaktiviert: die Gültigkeitsprüfung hing allein am input-Event, das bei einem <select> vor dem change-Event feuert – zu diesem Zeitpunkt war die Abhängigkeit noch nicht in der Liste. detailModal.js wertet jetzt zusätzlich change aus, der Abhängigkeits-Editor (fields.js) meldet jede Mutation (Hinzufügen, Entfernen, Typwechsel) und der Fixed-date/Dependency-Umschalter in taskForm.js den Moduswechsel über ein eigenes bubbelndes change-Event

Added

  • CONTRIBUTE.md und setup-dev.sh für neue Mitwirkende (Issue #98): Projekt-Leitlinien (FOSS, Datensparsamkeit, Security), VIBE Coding ausdrücklich erlaubt, sowie der komplette lokale Dev-Setup-Weg (Docker-only, Nextcloud + MariaDB unter localhost:8088, optionales E2E-Setup, Git-/Bot-Auth). setup-dev.sh automatisiert diese Schritte, konfigurierbar über --workdir/--no-e2e/--no-docker-install
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturetYcUvVtDEQrAakG32EQF1atSOmz91/8XudCUh60A9r/AxMv+AA5AX2rIvNYDkEn0
OuTmXA6Iz0DoVkdij11MPDhfLaUy0mXeLbwB5fj/xF/cFYcNeCFGKD3k2jyRwOTo
2n1sEp0r8sn0fitHzLfhcB/By0VJkZyhaO/NctP01XfcSQM7lGEOeY/uagtGaDTI
JnPLoQTHo0nUOv4y7jUMZuurEgBOc4yeUxTKv4A/m642hvNQIS0q6K9ON41JHKIO
UtI7DbDWSboVhct1Go3zoj5XcaAGG9ZiwSkJDt/BXT5tWH4SOnSn7mys0j1F6Y0g
vIJWjz6S2RlekwIrIxgyaeEVBOeQ4OM1ilJGWKXDyYJM/0IBxqnqRXDkAFlOopDo
xezlcFdWTkYL5OBKMFJhKuTy7dEQ9hxx5Nz4+vLbNV8gDJZBI+5yI5m8W+809WIH
iKUpIda1ShOblvYH6Ek5AzBdTmoFQ6T4f7iWT7j1i4uUP2DsgehjGVl8yDIT/wyx
nV9t7koXapu1WeXrunSa++mXsi3lceNpthdz5/cUEOe9yWvc1rrulRhiWzePga8H
zjVQYGAIPvwYkWa47U6Zh7HBsQaS+9yQ8NDnD49SS4jUWTGlwNqfM+q9fZ16/G9d
7l4chZUPPbBv+xWfdxmFw+MC5zdkAq27isHToTqnm+w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.4.0
Release Details
UpdatedAug. 13, 2026, 6:41 a.m.
Changelog

Added

  • Meilensteine werden jetzt immer direkt unter ihrem übergeordneten Objekt angezeigt statt gesammelt am Projektende (Issue #90): Meilensteine lassen sich neu auch einer Aufgabe zuordnen (bisher nur Projekt/Teilprojekt, Spalte task_id war bereits vorhanden, es fehlte nur die UI), das Auswahlfeld im Detail-Dialog heißt entsprechend „Übergeordnetes Objekt" statt „Teilprojekt". Zusätzlich können Meilensteine ihr Datum jetzt statt eines fixen Werts aus einer Abhängigkeit zum übergeordneten Objekt beziehen (EA/AA/EE/AE, analog zu Aufgaben-Abhängigkeiten; neue Spalte dependency_type, Migration Version1028) – da ein Meilenstein keine Dauer hat, bestimmen EA/EE das Ende und AA/AE den Start des Zielobjekts. Die Berechnung übernimmt der neue MilestoneDateService (serverseitig live bei jedem Abruf sowie im ICS-Feed neu aufgelöst, nicht persistiert propagiert) sowie clientseitig in frappeRows.js für sofortige Reaktivität ohne Neuladen
  • Undo für Drag-&-Drop-Verschiebungen inkl. Propagationskette (Issue #85, Umsetzung der einstufigen Empfehlung: letzte eigene Operation, kein Redo, zunächst nur Drag & Drop): Migration Version1027Date20260810020000 ergänzt nc_gantt_change_events um op_id (UUID) – alle Change-Events einer zusammenhängenden Operation (Drag + gesamte Propagationskette B→C→D) erhalten dieselbe op_id, erzeugt in TaskService::update()/propagateDates() und über ChangeEventService::log() protokolliert (dieses Change-Tracking war bisher tote Scaffolding-Logik ohne Aufrufer). Neuer Endpoint POST /api/v1/changes/{opId}/revert (ChangeEventController::revert, ChangeEventService::revertOperation) wendet alle Change-Events der Operation invers an, in einer DB-Transaktion mit Rechteprüfung über AccessService::canEditOrOwn(). Konfliktschutz: Revert wird mit HTTP 409 abgelehnt, sobald der aktuelle Feldwert nicht mehr dem protokollierten new_value entspricht (jemand hat zwischenzeitlich erneut geändert); der Revert selbst erzeugt wiederum neue Change-Events, die Audit-Historie bleibt lückenlos. Frontend: nach jedem gespeicherten Drag zeigt GanttChart.vue einen Toast „N Termine verschoben — Rückgängig" (showUndo aus @nextcloud/dialogs, 10 s sichtbar) sowie ein globales Ctrl+Z für die letzte eigene Operation der Session (stores/projects.js: lastOperation, revertOperation(), undoLastOperation())
  • Kalender-Export als abonnierbarer ICS-Feed pro Projekt (Issue #83, Variante A aus dem Umsetzungsvorschlag): neue öffentliche Route GET /apps/nc_gantt/projects/{id}/calendar.ics?token=… (regulärer, unauthentifizierter CalendarFeedController, damit externe Clients wie Thunderbird, Nextcloud Kalender oder mobile Apps ohne Nextcloud-Login abonnieren können) liefert Meilensteine als ganztägige VEVENTs (◆-Präfix), den aus den Aufgaben abgeleiteten Projektzeitraum sowie optional Teilprojekt-Zeiträume (Schalter „Auch Teilprojekt-Zeiträume einschließen", standardmäßig aus, um den Feed bei großen Projekten nicht zu überladen). Zugriff erfolgt über einen pro Projekt generierten, 256-Bit-zufälligen Token in der URL (CalendarFeedService, neue Spalte calendar_token auf nc_gantt_projects, Migration Version1026), der über einen neuen „Kalender-Feed"-Bereich im Freigabe-Dialog angezeigt, kopiert und jederzeit widerrufen/neu generiert werden kann (CalendarTokenController, nur für Projekt-Admins/-Eigentümer). ICS-Generierung ohne neue Abhängigkeit, RFC-5545-konform (Escaping, Zeilenfaltung)
  • What-if-Simulationsmodus für Terminverschiebungen (Issue #84): neuer Endpunkt POST /api/v1/projects/{id}/simulate führt Terminpropagation und CPM rein im Speicher aus (kein DB-Schreibzugriff) – TaskService::simulate() nutzt die neu extrahierte, stateless propagateDatesCore()-Kernlogik, die auch der persistierende update()-Pfad verwendet, CriticalPathService::computeFromTasks() erlaubt CPM auf einem hypothetisch veränderten Task-Datensatz. Frontend: „Simulation"-Toggle in der Gantt-Toolbar mit Banner inkl. Projektende-Delta in Arbeitstagen, Geisterbalken für die Ist-Termine (analog Baseline-Overlay) sowie Verwerfen/Übernehmen. Drag & Drop ruft im Simulationsmodus simulate() statt einer echten Speicherung auf. Szenarien bleiben bewusst flüchtig (kein Speichern benannter Szenarien), „Übernehmen" wendet die Änderungen als einzelne Task-Updates an, Simulation läuft pro Projekt
  • Neuer Eintrag „Aufgabe hinzufügen" im Drei-Punkte-Menü der Projektliste (Issue #91): legt wie der „Neu"-Button eine Aufgabe an, belegt dabei aber das gewählte Projekt direkt vor, sodass der Projekt-Auswahlschritt in der Maske entfällt
  • Such-/Filterleiste für Projekte, Teilprojekte und Aufgaben (Issue #81, Stufe 1: rein clientseitig auf Basis der bereits geladenen Daten aktivierter Projekte): Freitextsuche im Titel, Risiko, „überfällig" (Ende < heute und Fortschritt < 100 %), „über Budget" (Ist-Kosten > geplantes Budget), Ressource und „ohne Deck-Verknüpfung". Neuer Pinia-Store stores/filters.js (Zustand pro Nutzer in localStorage persistiert) und reine Matching-Logik in gantt/filterMatch.js. Nicht passende Balken werden in GanttChart.vue gedimmt statt ausgeblendet (Abhängigkeitspfeile und Zeitkontext bleiben lesbar), Projekte/Teilprojekte gelten als Treffer, sobald ein Nachfahre passt. Dieselbe Filterleiste (components/FilterBar.vue) dimmt in ProjectList.vue nicht passende Projekte; für nicht aktivierte Projekte sind nur Titel-Treffer zuverlässig auswertbar, da deren Aufgaben/Teilprojekte nicht geladen sind

Changed

  • Freigabe für Nextcloud 34 (Issue #94): max-version in appinfo/info.xml von 33 auf 34 angehoben, unterstützter Bereich damit NC 28–34. Verifiziert gegen Nextcloud 34.0.2 mit PHP 8.5 und MariaDB 11.4 (148 Unit-Tests, 39 E2E-Tests)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturerdYQI+Semnk0cWtKqUZinVDHk0KpxyqB5Ox4NBL9pyf5nrpK8xZpe9lBxc6zhDfW
8adLfVIwQtX+bI7S1O05xm0hwrUHQQ2ii6ADD8mlAxnZjdhKSCAhZ0NcaqT7Em0X
nD7yRP2B8zAAQMJNjzeBsLbzveNrXMoGzFrvm/jFxskUIUS01ykfWEg2C5+5/IAf
7jBAM8x2Qj92b8zyBFpLjfJQw9aTE/trtCsmZXQFmkJjGS0anrJc9dXKfqnHxknX
8jmLOv4Yq4Qtk3UF35HTiIGcA2W0UKfVyFb4XcrIMeSmLXXcagJWjeH5nB18UUNn
JyCgE/qY4v/SnrNQU92mIdMOQGuvYg7xbaz226lgNdwM2HuM9U8nc2juqJxAO+Wp
xs85yl82qIviZ5YY39HK371MZ/ufMsaVsVy3Nfn3PjqqkzGLmtAL6KJDcKHZWdDw
ugEPwO61DxnERZsNGeFpXfzCxjMpZc/qwUIfGw85idmU2vdedtrxHBkDGoqu1IP7
xZOO8uSYrzbXM6g1gs3WPBOY51CmZLs5pIQTN1tVl5ifGw4uOuzDBUCKiR5oA2MI
352HbA7wwWFgwoN9W5t4MRTowmaYpM8AB+nh9f1A5q9S8SelfMpXOqGew9VZb2jd
AuiJK/LEPjRgs5s3/FfC4Sb1MSsXDr1N1jziaF4MomM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.3.1
Release Details
UpdatedAug. 6, 2026, 12:57 p.m.
Changelog

Added

  • Regressionstests für die Rollentrennung Viewer/Editor/Admin: ForbiddenException-Tests für TaskService::create/update/delete/syncProgress und ProjectService::updateProject/deleteProject (inkl. „Editor darf nicht löschen") sowie erstmalige Testabdeckung für SubProjectService und MilestoneService

Fixed

  • CSV-/Formel-Injection im Aufgaben-Export (detail/io.js exportCsv): Task-Felder wie Titel oder Beschreibung, die mit =, +, - oder @ beginnen, wurden unverändert übernommen und von Excel/LibreOffice/Google Sheets als Formel ausgewertet. Die Absicherung aus ReportView.vue liegt jetzt in einer gemeinsamen Utility (src/utils/csv.js, escCsvCell) und wird an beiden Export-Stellen verwendet
  • Viewer sahen im Frontend dieselbe Oberfläche wie Editor/Admin (Add Task/Subproject/Milestone, Share, Delete Project, Drag/Resize im Gantt-Chart, volle Bearbeitungsformulare), obwohl das Backend Schreibversuche ohnehin korrekt ablehnte – kein Least-Privilege an der UI. ProjectService::getAccessibleProjects()/getProject()/createProject()/updateProject() liefern jetzt das effektive permission-Feld (AccessService::getEffectivePermission()) mit; ProjectList.vue, GanttChart.vue (inkl. Drag/Resize-Sperre je Projekt) und das Detail-Modal (detail/detailModal.js) blenden Schreib-Aktionen für Viewer aus bzw. schalten Formulare read-only
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureBUyDeI9y7iKD1wQJLHrW6IFq0zuXOJQ1Zv/x+0RryIIQ0fAGAUjwQyLDYLYpRzPg
6ITDPfY9bftVlwkB8w9LqZiFETkH8mgc6l5XB7F6NKzFrdaSnNw21CIVJjWyHpkR
mxDq+vQepZd+YtB9jMz39kbFk9BNHrpKIwIXXZVqEqj1U54NmT+5XnT892m9mY6o
RWQNf3Mn5WcH3vmoDi/UAOgDaO30GFCRJePryurVpK7stkub8K6fYsWIkS5NeJlP
YHdb4nBlkhUzQFjo0ZDSkCSiWjMdyCrtEanX6m6Ffhr+j0jpd+J9soMSjrzdzt4T
5mETo8xc61IQIVFWMD6fZ3/oCmbx2TFDZsJjRpFKxoPA08AkdC7xjxHoaKYZHvi4
+tzowxPzMfyjQ/hEj2dwq22doM2lXK1Y13VvV8kkaomrAQjB97gf+ODrYZNDgNvc
2ijU08B4cAB0HbEveDpDRjCJj8D5OwCMafRMa4Ul/nm0+RiBFOhIjDYdVAnCp7Ql
IEc4UQZM9WYLQlouwGPk83POpbqkbc8vKAucGBXvHAbxNpUSOGbssMYFGU/e9pOg
+oT2gcJrC3MYPGIWnS8iLn75PK1H063KFJv5yqC+h/rqwX/FxyTzKvofJi68GpLs
WtG3y67W8Ju4y1I9iQ9raJxxhFUJrStibGy9gc7L0DM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.3.0
Release Details
UpdatedJuly 9, 2026, 5:23 a.m.
Changelog

Fixed

  • Baseline-Toggle im Gantt-Toolbar zeigte nie Baseline-Balken und PUT baseline/active warf einen SQL-Fehler: baseline_id auf nc_gantt_projects wurde mit der 3-Ebenen-Migration versehentlich zusammen mit den tatsächlich berechneten Spalten entfernt (Migration Version1025 stellt die Spalte wieder her). BaselineService::create() aktiviert eine frisch eingefrorene Baseline jetzt automatisch fürs Projekt; renderBaselineBars() (GanttChart.vue) und baselineOverlay.js lesen Baseline-Items dafür über task_id statt des seit der Umstellung auf das 3-Ebenen-Modell nicht mehr existierenden subproject_id-Felds
  • OCS-API-Fehlerantworten (400/404/500 …) lieferten für alle OCSController-Endpunkte einen leeren text/html-Body statt des erwarteten JSON-Envelopes mit message; ExceptionMiddleware wirft jetzt passende OCP\AppFramework\OCS\OCSException-Subklassen statt einer rohen DataResponse, die Nextcloud-Core nur für 401/403 automatisch formatiert. Betroffene Controller (ProjectController, ReportController, ShareController, ChangeEventController, WorkScheduleController, WorkCalendarController, HolidayAdminController, SettingsController) wurden zusätzlich auf die bestehende ApiException-Hierarchie umgestellt

Removed

  • Nie ausgewertete Gruppen-Freigabe-Option entfernt: Share::TYPE_GROUP, principal_type-Parameter in ShareController sowie die DB-Spalte principal_type (Migration Version1024) wurden gestrichen; Freigaben sind jetzt ausschließlich benutzerbezogen

Changed

  • Dashboard-Summary (DashboardController::summary) lädt Baselines und Aufgaben-KPIs jetzt über gruppierte SQL-Aggregat-Queries statt pro Projekt einzeln (N+1-Fix, gilt auch für den Admin-Fall mit allen Instanz-Projekten)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureNJfbRJEXzKGipUjUW9tUKayHoY6ltSU0ZeCQXcDx6XVDY/naLK0dVY9ciofXU7oy
40sJIOsjxcUZbalDwqncPn0vjGoqmk3BFUT7KotEpLLf8/ZmIjdHEbQbJHzEpdQV
y5YedjqRLKB7/Ul35JWVFxY8eutCsYkonfof7v6AGMGB/RjQ7GDB6jWunEEwqUGV
3Y1isvdq5N3oo9NDY/QR0C2C7jiMnB9Kon0KzZ2yp0oF5euOpA/qrtmqxG3L9PoZ
DW1ppwAuARWtRDu4tcDAAQAkF1Mrg5YyYgRoKm7uVazlKEP7DxX56g/g4RS2otEE
rKsA/ER9yYiHnNyGcZuK9Jkfe2Ua6/R7gzJilRvHZ7CBPkhY+XNPcrjlsHbCJEJJ
cX/b0B56p7FyAFy6XjMY9PYFhxy/ubHE7Sk8ixX88uxgM4vf/sSFQaN84CcG/qqA
Nq/OEytBjZP82TsFFYBRcPKEPskF4ejjhNVC4bJpiuCIpo51nIxjeFGtDpeQiDG7
0OWc/GCvsz5W3eG7ShmQsRf0DoivL8tjgDUlMWO9boTpUy2Vnm1rDMKu6nFGKZ8o
TWTZR6u4zGZW1OBERdlU5NQmqxqXrsuGlT6r6DuQnWsWiscjXOyIFeHz+EOKhQOk
wUuN6xN8QES1CDFB27PYV0Sz2KhYhM78GKLCc9B10Ic=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.2.0
Release Details
UpdatedJuly 5, 2026, 9:21 a.m.
Changelog

Added

  • Löschen-Buttons im Detail-Modal für Teilprojekt, Aufgabe und Meilenstein
  • Deutsche App-Beschreibung in info.xml ergänzt

Fixed

  • Baseline-Datum und Kommentar im Report werden untereinander angezeigt
  • Dashboard-Widget zeigt Baseline-Datum und KPI-Werte korrekt an
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureXuYTZMxTlGNJVrGvU/GcIjSlBTYreXdvF5FilCmsi+l7MBvFlyeW1DsnxAsao3pu
HyhvaKXRnkraVQNT2ULgX4BmjUnhsELROrK03gtY88Odzqzh7RIXYkNkRcy92ara
56HIP8BBRD3m1c8pYPfpZfLAzkuurAzVqbJ6qbxw1AebdlPCFEq2g6C+IOcTon0T
q9ZD2I2XJmWd42EXXqva+NMrcx1jfjmHWVtl7xHKhwPndFCtHPMMAdoDS0Xpbh1V
3Ns4h/DphDpC8/ZYZ5sbpMCBekHw4VTZDGxNAuXJ5DMPhkqg2MxVplkS19PuBHLx
r74sgsz611Gjg55gjKOqCb5ZZEvqZTrwKTEYIbu8HicWtq/HxKRZS3FZN9MThTTX
Hesv65vsq9fH0UhEM6MVJjE5Phnw8Wb5ivtAiaUA+NzPrDfrHZAsSfR9NFL3rhFC
7wOmnXtzK40NjmqyMWJu/UP9UVbz3SeEiHiQO9GwBc2krzmXzcmLZFgEjty4CGoJ
SzXAA1QGpUGO4n0b3Y/5zSY4UxogGWybW+mOs27KDLytI915wNYGvBtcdAKCj6Ws
1uVA98npwMid/WSJJ04BXHX8LbowrDeTezSFJyGh+u/KnhlzkA7fqEuu3nQGT5rA
a9qeMmd5kmLBIVcG9RVVmw1kc0AK0qIqZDmlk9dWGJs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.1.1
Release Details
UpdatedMay 27, 2026, 6:43 p.m.
Changelog

Added

  • Glossar-Button in der Navigation (über den Einstellungen) mit interaktivem Nachschlagewerk
  • Dreispaltige Glossar-Tabelle: Begriff/Abkürzung, Bedeutung/Englisch, Erklärung mit Berechnungsformeln
  • 30 Einträge in 6 Abschnitten: Allgemein, Terminplanung, Baseline & Berichtswesen, Earned Value Management, Ressourcen & Kapazität, Budget

Fixed

  • Fehlende deutsche Übersetzungen für englische UI-Strings ergänzt (Add dependency, Baseline, Dependencies, Remove, Work, No projects yet, Open Gantt Projects, u.a.)
  • Leere Übersetzung für Deck-Fortschritt-Hinweis befüllt
  • de.js vollständig mit de.json synchronisiert (war ~70 Einträge veraltet)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureF1RHJx15J/N8tWNrDlAX1MFE/9tsct4PViEcBDeo8U/V2qJ/tezL7Xk0BVmYxjWw
pB+J685mcHjikh93/aZUqG8C6y0mR3TTJfaa7dLCIRMc1034x6Xj9Nd7Q9YVH4yi
RLTcRhrG2pN1Iqc23kwId995GJXHnCBEyuQuzo9m1VtA7GoFa8W2nqhXVT94khDS
8ZHQrixDfv63d4GfA5N2x4+phaiyObdskvCmVSuKrmouYvCGpPevtKG5YxzOrHid
aL48Kod0YgOCAD8nAqOhEmioP0m+wP2e/NC4Z5svSKT3vdlE67W1M68ipQQfnhPI
txui+2X8zFvoe/M5sE3DaXbLnOVNGQ7YRpyXFI5GsQmQ0cPSSO/94Mw15hLZfwMf
TDOrrvzf+Vu05sUTZ6CFh4FrSl4e5Q6Xjv6uH4BZtyOpPxl+ajgW4OkZvQDbt4KC
8aTZodMcDpXlRMDdBSxT1bT9tD05KUKmEZYtpxHiARrHDuQQCRSuxtjitQD9lbla
CMxKrBiO0YgdUb3FuczYkWEH+y8gW5egU6TDMnjAVbuUecGuGZN1Cc6tarcFWRu2
+V7Qn+aNoXEwP5e/0TM4Ig8ETAYseZRiTPHxeWiSg3RnU3HuT6kPVWw8LERACDT4
6F4WU9t2+4kESMLMjeV0/2UBQSykR/42Idsg0PtvpyQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.1.1 (nightly)
Release Details
UpdatedMay 27, 2026, 5:24 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureF4W7QJB8rVJ2xARdnhUbEouzRZMKcowz/ToDwr0oVFrVUbInFvHAMqXFTOVD1a5N
kDTb0pOhv+hCStTh70bN+aapjbdtp7SdQ3SbP5VoXBKLhUii41OqN/i4yM7itdSs
M8d5PVo9TJYVnfaij2xwWghMqZEyzxgOw4Q98dYIysf2BxsjjCtxGEMo/pISS90G
OE2RaVEFbwUcvu1XKszLP5X/k/onOchengURYVuzHP7VgVuomZpPSZ9VEIRKITyL
GpgSDrdqm5AXdQc7l/2OqprW6G+MxsuVzChbyPGslIYYXYsP9HLc/FfwVxaCJjh2
Nsiqfd+dMwnf7f9yrrBuZjbNwNa5x++IynrwaU01jVISkl9pgkbUYRaPSMTGFDAd
lsEEqlgs9KdzGoTFjDXNdTwDOsUMiu/ag8tPo7YxsxLFbVGa7laRAUhlGUT9QGPr
IOAAWvKqivsYnU5iwTCY/5HGza3SDfZc/e5upPfB+lTQTYijp1aAYRBAsoOLmuga
f0aP45pnfnYBJkT1kMsthjbGMdlL46wLiNHKRct9OlFwx74IRIyZdcs5Q3pC0aNN
DSLvsCSmY8/9PtTLzcOJKXTqqDVupCqq82bUlGRn7NR6xsinzv74MuOVnGY21tBm
iB5ceYpgiEukUz6YtS2quIIiMTnYmM+HBFnkXgBV0/Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32

Nextcloud 28

Gantt Projects 1.4.2
Release Details
UpdatedAug. 20, 2026, 4:41 a.m.
Changelog

Changed

  • release.sh fragt die Versionsnummer jetzt interaktiv ab, statt sie nur aus appinfo/info.xml zu lesen: zu Beginn werden die aktuelle Version und das letzte Release-Tag angezeigt und es wird gefragt, ob eine neue Nummer vergeben werden soll (Vorschlag: nächster Patch-Level). Die Eingabe wird auf das Format X.Y.Z, auf einen echten Versionssprung und auf ein noch nicht vergebenes Tag geprüft und dann nach appinfo/info.xml, package.json und package-lock.json geschrieben. Fehlt ein Changelog-Abschnitt zur neuen Version, warnt das Skript; anschließend bietet es an, den Bump als chore: Version X.Y.Z zu committen — nötig, weil der Tag-Name den Commit-Hash enthält. Für nicht-interaktive Läufe gibt es --version=X.Y.Z und --no-bump; ohne TTY wird nie gefragt, make release bleibt also unverändert nutzbar
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturepoVHZxteU3AR2cpRRV98jNfv4j7rWnLEd3kbpn5Dp4T1ubAI+0QlRf9jxi0BaYz1
+1dg+3Yt25uN6Slp1FHiw7kyqt5HJ60XgnOWo+Zt0YBHSnWqLDhF8zxPEnQCkF+v
nUvscpcoQY2bRiIBZhVWVgeAD592uvOA4gfRDrUyLVDKjOrzBu3ScbNvCqTqE9IC
vs8qZkRLIcaD6tKoSLT2pZqmwBoCdClvEw5D5v40WSvLq232BZnXpQ4ogG3QvJdL
mYO8HlPZKVOxANp0MGnWle4IFRMbMt22Ebpkjc18Q9Q4AIv/Sd3zTsc+uMONTM95
s0GXvLSm95o0UCFZ1CL7fCEq7NwlprjVrTeWGmlJNVjHJuIyRKHEz5DR12s0lAGm
/rKGWjoVP+Wvk3upRizR/5y2fpWoiwuDqCtz9gQN6+HHYLaqLvYqsAJ/SxmtLtP7
8B2rK61ClKowz4phbTZdrCaF8w3IWnFFBTFquIVFuN2jUoHvdCMtd0910sLAMY5M
Xs9nk0FVsP23zKXlQpOojq7ouCQagRhsnBJDLxWRR+NIq582f7SDgcrkBqxlGJX4
/Ql9V+2iFx61QANCTjdJIO3LbvbK60vGos+ency0GfvSDbPovDAVyJzt8ZUh5BNw
UXQ4XOHJZAagAr36rKttk1DQbZZ/2bUEq231c96m83g=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.4.1
Release Details
UpdatedAug. 17, 2026, 7:43 p.m.
Changelog

Fixed

  • Die Meilenstein-Raute hatte eine fest verdrahtete Farbe (#fbbf24) statt der Projektfarbe zu folgen, obwohl Balken für Aufgaben und Teilprojekte bereits korrekt eingefärbt wurden (Issue #102). Zusätzlich wurden die separaten – und wirkungslosen – Farbwähler bei Teilprojekt und Aufgabe entfernt, da deren Anzeige ohnehin immer der Projektfarbe folgt
  • „Meilenstein hinzufügen" im Drei-Punkte-Menü der Projektliste nutzte zwei aufeinanderfolgende window.prompt()-Dialoge (Name, dann Datum als Freitext) statt des regulären Detail-Dialogs (Issue #101). Der Klick emittiert jetzt add-milestone analog zu „Aufgabe hinzufügen" (Issue #91) und öffnet denselben Meilenstein-Dialog wie beim Bearbeiten, mit vorbelegtem Projekt
  • Im festen Datumsmodus des Aufgaben-Detaildialogs konnte ein Enddatum vor dem Startdatum eingegeben und gespeichert werden (Issue #100). Jetzt zieht ein über das Enddatum hinaus verschobenes Startdatum das Enddatum mit; ein zu frühes Enddatum erzeugt ein rotes Fehler-Icon am Feld, hält den Fokus dort und deaktiviert den Speichern-Button, bis ein gültiges Datum eingetragen ist (dateField() in fields.js mit neuer setError()-Methode)
  • Eine Aufgabe mit Abhängigkeit behielt trotzdem die manuell eingegebenen Start-/Enddatumsfelder, die beim Speichern durch die Abhängigkeitsberechnung überschrieben wurden – für Nutzer nicht nachvollziehbar (Issue #99). Der Aufgaben-Detaildialog hat jetzt denselben Fixed-date/Dependency-Umschalter wie Meilensteine (Issue #90): im Dependency-Modus ersetzt eine Dauer (Tage) die Datumsfelder, die Abhängigkeit bestimmt den Termin. Serverseitig wendet TaskService::create() neu hinzugefügte Abhängigkeiten sofort an (bisher nur update()), damit auch neu angelegte Aufgaben keinen die Abhängigkeit ignorierenden Platzhaltertermin behalten
  • Der Speichern-Button des Detail-Dialogs blieb nach dem Hinzufügen einer Abhängigkeit deaktiviert: die Gültigkeitsprüfung hing allein am input-Event, das bei einem <select> vor dem change-Event feuert – zu diesem Zeitpunkt war die Abhängigkeit noch nicht in der Liste. detailModal.js wertet jetzt zusätzlich change aus, der Abhängigkeits-Editor (fields.js) meldet jede Mutation (Hinzufügen, Entfernen, Typwechsel) und der Fixed-date/Dependency-Umschalter in taskForm.js den Moduswechsel über ein eigenes bubbelndes change-Event

Added

  • CONTRIBUTE.md und setup-dev.sh für neue Mitwirkende (Issue #98): Projekt-Leitlinien (FOSS, Datensparsamkeit, Security), VIBE Coding ausdrücklich erlaubt, sowie der komplette lokale Dev-Setup-Weg (Docker-only, Nextcloud + MariaDB unter localhost:8088, optionales E2E-Setup, Git-/Bot-Auth). setup-dev.sh automatisiert diese Schritte, konfigurierbar über --workdir/--no-e2e/--no-docker-install
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturetYcUvVtDEQrAakG32EQF1atSOmz91/8XudCUh60A9r/AxMv+AA5AX2rIvNYDkEn0
OuTmXA6Iz0DoVkdij11MPDhfLaUy0mXeLbwB5fj/xF/cFYcNeCFGKD3k2jyRwOTo
2n1sEp0r8sn0fitHzLfhcB/By0VJkZyhaO/NctP01XfcSQM7lGEOeY/uagtGaDTI
JnPLoQTHo0nUOv4y7jUMZuurEgBOc4yeUxTKv4A/m642hvNQIS0q6K9ON41JHKIO
UtI7DbDWSboVhct1Go3zoj5XcaAGG9ZiwSkJDt/BXT5tWH4SOnSn7mys0j1F6Y0g
vIJWjz6S2RlekwIrIxgyaeEVBOeQ4OM1ilJGWKXDyYJM/0IBxqnqRXDkAFlOopDo
xezlcFdWTkYL5OBKMFJhKuTy7dEQ9hxx5Nz4+vLbNV8gDJZBI+5yI5m8W+809WIH
iKUpIda1ShOblvYH6Ek5AzBdTmoFQ6T4f7iWT7j1i4uUP2DsgehjGVl8yDIT/wyx
nV9t7koXapu1WeXrunSa++mXsi3lceNpthdz5/cUEOe9yWvc1rrulRhiWzePga8H
zjVQYGAIPvwYkWa47U6Zh7HBsQaS+9yQ8NDnD49SS4jUWTGlwNqfM+q9fZ16/G9d
7l4chZUPPbBv+xWfdxmFw+MC5zdkAq27isHToTqnm+w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.4.0
Release Details
UpdatedAug. 13, 2026, 6:41 a.m.
Changelog

Added

  • Meilensteine werden jetzt immer direkt unter ihrem übergeordneten Objekt angezeigt statt gesammelt am Projektende (Issue #90): Meilensteine lassen sich neu auch einer Aufgabe zuordnen (bisher nur Projekt/Teilprojekt, Spalte task_id war bereits vorhanden, es fehlte nur die UI), das Auswahlfeld im Detail-Dialog heißt entsprechend „Übergeordnetes Objekt" statt „Teilprojekt". Zusätzlich können Meilensteine ihr Datum jetzt statt eines fixen Werts aus einer Abhängigkeit zum übergeordneten Objekt beziehen (EA/AA/EE/AE, analog zu Aufgaben-Abhängigkeiten; neue Spalte dependency_type, Migration Version1028) – da ein Meilenstein keine Dauer hat, bestimmen EA/EE das Ende und AA/AE den Start des Zielobjekts. Die Berechnung übernimmt der neue MilestoneDateService (serverseitig live bei jedem Abruf sowie im ICS-Feed neu aufgelöst, nicht persistiert propagiert) sowie clientseitig in frappeRows.js für sofortige Reaktivität ohne Neuladen
  • Undo für Drag-&-Drop-Verschiebungen inkl. Propagationskette (Issue #85, Umsetzung der einstufigen Empfehlung: letzte eigene Operation, kein Redo, zunächst nur Drag & Drop): Migration Version1027Date20260810020000 ergänzt nc_gantt_change_events um op_id (UUID) – alle Change-Events einer zusammenhängenden Operation (Drag + gesamte Propagationskette B→C→D) erhalten dieselbe op_id, erzeugt in TaskService::update()/propagateDates() und über ChangeEventService::log() protokolliert (dieses Change-Tracking war bisher tote Scaffolding-Logik ohne Aufrufer). Neuer Endpoint POST /api/v1/changes/{opId}/revert (ChangeEventController::revert, ChangeEventService::revertOperation) wendet alle Change-Events der Operation invers an, in einer DB-Transaktion mit Rechteprüfung über AccessService::canEditOrOwn(). Konfliktschutz: Revert wird mit HTTP 409 abgelehnt, sobald der aktuelle Feldwert nicht mehr dem protokollierten new_value entspricht (jemand hat zwischenzeitlich erneut geändert); der Revert selbst erzeugt wiederum neue Change-Events, die Audit-Historie bleibt lückenlos. Frontend: nach jedem gespeicherten Drag zeigt GanttChart.vue einen Toast „N Termine verschoben — Rückgängig" (showUndo aus @nextcloud/dialogs, 10 s sichtbar) sowie ein globales Ctrl+Z für die letzte eigene Operation der Session (stores/projects.js: lastOperation, revertOperation(), undoLastOperation())
  • Kalender-Export als abonnierbarer ICS-Feed pro Projekt (Issue #83, Variante A aus dem Umsetzungsvorschlag): neue öffentliche Route GET /apps/nc_gantt/projects/{id}/calendar.ics?token=… (regulärer, unauthentifizierter CalendarFeedController, damit externe Clients wie Thunderbird, Nextcloud Kalender oder mobile Apps ohne Nextcloud-Login abonnieren können) liefert Meilensteine als ganztägige VEVENTs (◆-Präfix), den aus den Aufgaben abgeleiteten Projektzeitraum sowie optional Teilprojekt-Zeiträume (Schalter „Auch Teilprojekt-Zeiträume einschließen", standardmäßig aus, um den Feed bei großen Projekten nicht zu überladen). Zugriff erfolgt über einen pro Projekt generierten, 256-Bit-zufälligen Token in der URL (CalendarFeedService, neue Spalte calendar_token auf nc_gantt_projects, Migration Version1026), der über einen neuen „Kalender-Feed"-Bereich im Freigabe-Dialog angezeigt, kopiert und jederzeit widerrufen/neu generiert werden kann (CalendarTokenController, nur für Projekt-Admins/-Eigentümer). ICS-Generierung ohne neue Abhängigkeit, RFC-5545-konform (Escaping, Zeilenfaltung)
  • What-if-Simulationsmodus für Terminverschiebungen (Issue #84): neuer Endpunkt POST /api/v1/projects/{id}/simulate führt Terminpropagation und CPM rein im Speicher aus (kein DB-Schreibzugriff) – TaskService::simulate() nutzt die neu extrahierte, stateless propagateDatesCore()-Kernlogik, die auch der persistierende update()-Pfad verwendet, CriticalPathService::computeFromTasks() erlaubt CPM auf einem hypothetisch veränderten Task-Datensatz. Frontend: „Simulation"-Toggle in der Gantt-Toolbar mit Banner inkl. Projektende-Delta in Arbeitstagen, Geisterbalken für die Ist-Termine (analog Baseline-Overlay) sowie Verwerfen/Übernehmen. Drag & Drop ruft im Simulationsmodus simulate() statt einer echten Speicherung auf. Szenarien bleiben bewusst flüchtig (kein Speichern benannter Szenarien), „Übernehmen" wendet die Änderungen als einzelne Task-Updates an, Simulation läuft pro Projekt
  • Neuer Eintrag „Aufgabe hinzufügen" im Drei-Punkte-Menü der Projektliste (Issue #91): legt wie der „Neu"-Button eine Aufgabe an, belegt dabei aber das gewählte Projekt direkt vor, sodass der Projekt-Auswahlschritt in der Maske entfällt
  • Such-/Filterleiste für Projekte, Teilprojekte und Aufgaben (Issue #81, Stufe 1: rein clientseitig auf Basis der bereits geladenen Daten aktivierter Projekte): Freitextsuche im Titel, Risiko, „überfällig" (Ende < heute und Fortschritt < 100 %), „über Budget" (Ist-Kosten > geplantes Budget), Ressource und „ohne Deck-Verknüpfung". Neuer Pinia-Store stores/filters.js (Zustand pro Nutzer in localStorage persistiert) und reine Matching-Logik in gantt/filterMatch.js. Nicht passende Balken werden in GanttChart.vue gedimmt statt ausgeblendet (Abhängigkeitspfeile und Zeitkontext bleiben lesbar), Projekte/Teilprojekte gelten als Treffer, sobald ein Nachfahre passt. Dieselbe Filterleiste (components/FilterBar.vue) dimmt in ProjectList.vue nicht passende Projekte; für nicht aktivierte Projekte sind nur Titel-Treffer zuverlässig auswertbar, da deren Aufgaben/Teilprojekte nicht geladen sind

Changed

  • Freigabe für Nextcloud 34 (Issue #94): max-version in appinfo/info.xml von 33 auf 34 angehoben, unterstützter Bereich damit NC 28–34. Verifiziert gegen Nextcloud 34.0.2 mit PHP 8.5 und MariaDB 11.4 (148 Unit-Tests, 39 E2E-Tests)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignaturerdYQI+Semnk0cWtKqUZinVDHk0KpxyqB5Ox4NBL9pyf5nrpK8xZpe9lBxc6zhDfW
8adLfVIwQtX+bI7S1O05xm0hwrUHQQ2ii6ADD8mlAxnZjdhKSCAhZ0NcaqT7Em0X
nD7yRP2B8zAAQMJNjzeBsLbzveNrXMoGzFrvm/jFxskUIUS01ykfWEg2C5+5/IAf
7jBAM8x2Qj92b8zyBFpLjfJQw9aTE/trtCsmZXQFmkJjGS0anrJc9dXKfqnHxknX
8jmLOv4Yq4Qtk3UF35HTiIGcA2W0UKfVyFb4XcrIMeSmLXXcagJWjeH5nB18UUNn
JyCgE/qY4v/SnrNQU92mIdMOQGuvYg7xbaz226lgNdwM2HuM9U8nc2juqJxAO+Wp
xs85yl82qIviZ5YY39HK371MZ/ufMsaVsVy3Nfn3PjqqkzGLmtAL6KJDcKHZWdDw
ugEPwO61DxnERZsNGeFpXfzCxjMpZc/qwUIfGw85idmU2vdedtrxHBkDGoqu1IP7
xZOO8uSYrzbXM6g1gs3WPBOY51CmZLs5pIQTN1tVl5ifGw4uOuzDBUCKiR5oA2MI
352HbA7wwWFgwoN9W5t4MRTowmaYpM8AB+nh9f1A5q9S8SelfMpXOqGew9VZb2jd
AuiJK/LEPjRgs5s3/FfC4Sb1MSsXDr1N1jziaF4MomM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<35.0.0
Minimum Integer bits32
Gantt Projects 1.3.1
Release Details
UpdatedAug. 6, 2026, 12:57 p.m.
Changelog

Added

  • Regressionstests für die Rollentrennung Viewer/Editor/Admin: ForbiddenException-Tests für TaskService::create/update/delete/syncProgress und ProjectService::updateProject/deleteProject (inkl. „Editor darf nicht löschen") sowie erstmalige Testabdeckung für SubProjectService und MilestoneService

Fixed

  • CSV-/Formel-Injection im Aufgaben-Export (detail/io.js exportCsv): Task-Felder wie Titel oder Beschreibung, die mit =, +, - oder @ beginnen, wurden unverändert übernommen und von Excel/LibreOffice/Google Sheets als Formel ausgewertet. Die Absicherung aus ReportView.vue liegt jetzt in einer gemeinsamen Utility (src/utils/csv.js, escCsvCell) und wird an beiden Export-Stellen verwendet
  • Viewer sahen im Frontend dieselbe Oberfläche wie Editor/Admin (Add Task/Subproject/Milestone, Share, Delete Project, Drag/Resize im Gantt-Chart, volle Bearbeitungsformulare), obwohl das Backend Schreibversuche ohnehin korrekt ablehnte – kein Least-Privilege an der UI. ProjectService::getAccessibleProjects()/getProject()/createProject()/updateProject() liefern jetzt das effektive permission-Feld (AccessService::getEffectivePermission()) mit; ProjectList.vue, GanttChart.vue (inkl. Drag/Resize-Sperre je Projekt) und das Detail-Modal (detail/detailModal.js) blenden Schreib-Aktionen für Viewer aus bzw. schalten Formulare read-only
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureBUyDeI9y7iKD1wQJLHrW6IFq0zuXOJQ1Zv/x+0RryIIQ0fAGAUjwQyLDYLYpRzPg
6ITDPfY9bftVlwkB8w9LqZiFETkH8mgc6l5XB7F6NKzFrdaSnNw21CIVJjWyHpkR
mxDq+vQepZd+YtB9jMz39kbFk9BNHrpKIwIXXZVqEqj1U54NmT+5XnT892m9mY6o
RWQNf3Mn5WcH3vmoDi/UAOgDaO30GFCRJePryurVpK7stkub8K6fYsWIkS5NeJlP
YHdb4nBlkhUzQFjo0ZDSkCSiWjMdyCrtEanX6m6Ffhr+j0jpd+J9soMSjrzdzt4T
5mETo8xc61IQIVFWMD6fZ3/oCmbx2TFDZsJjRpFKxoPA08AkdC7xjxHoaKYZHvi4
+tzowxPzMfyjQ/hEj2dwq22doM2lXK1Y13VvV8kkaomrAQjB97gf+ODrYZNDgNvc
2ijU08B4cAB0HbEveDpDRjCJj8D5OwCMafRMa4Ul/nm0+RiBFOhIjDYdVAnCp7Ql
IEc4UQZM9WYLQlouwGPk83POpbqkbc8vKAucGBXvHAbxNpUSOGbssMYFGU/e9pOg
+oT2gcJrC3MYPGIWnS8iLn75PK1H063KFJv5yqC+h/rqwX/FxyTzKvofJi68GpLs
WtG3y67W8Ju4y1I9iQ9raJxxhFUJrStibGy9gc7L0DM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.3.0
Release Details
UpdatedJuly 9, 2026, 5:23 a.m.
Changelog

Fixed

  • Baseline-Toggle im Gantt-Toolbar zeigte nie Baseline-Balken und PUT baseline/active warf einen SQL-Fehler: baseline_id auf nc_gantt_projects wurde mit der 3-Ebenen-Migration versehentlich zusammen mit den tatsächlich berechneten Spalten entfernt (Migration Version1025 stellt die Spalte wieder her). BaselineService::create() aktiviert eine frisch eingefrorene Baseline jetzt automatisch fürs Projekt; renderBaselineBars() (GanttChart.vue) und baselineOverlay.js lesen Baseline-Items dafür über task_id statt des seit der Umstellung auf das 3-Ebenen-Modell nicht mehr existierenden subproject_id-Felds
  • OCS-API-Fehlerantworten (400/404/500 …) lieferten für alle OCSController-Endpunkte einen leeren text/html-Body statt des erwarteten JSON-Envelopes mit message; ExceptionMiddleware wirft jetzt passende OCP\AppFramework\OCS\OCSException-Subklassen statt einer rohen DataResponse, die Nextcloud-Core nur für 401/403 automatisch formatiert. Betroffene Controller (ProjectController, ReportController, ShareController, ChangeEventController, WorkScheduleController, WorkCalendarController, HolidayAdminController, SettingsController) wurden zusätzlich auf die bestehende ApiException-Hierarchie umgestellt

Removed

  • Nie ausgewertete Gruppen-Freigabe-Option entfernt: Share::TYPE_GROUP, principal_type-Parameter in ShareController sowie die DB-Spalte principal_type (Migration Version1024) wurden gestrichen; Freigaben sind jetzt ausschließlich benutzerbezogen

Changed

  • Dashboard-Summary (DashboardController::summary) lädt Baselines und Aufgaben-KPIs jetzt über gruppierte SQL-Aggregat-Queries statt pro Projekt einzeln (N+1-Fix, gilt auch für den Admin-Fall mit allen Instanz-Projekten)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureNJfbRJEXzKGipUjUW9tUKayHoY6ltSU0ZeCQXcDx6XVDY/naLK0dVY9ciofXU7oy
40sJIOsjxcUZbalDwqncPn0vjGoqmk3BFUT7KotEpLLf8/ZmIjdHEbQbJHzEpdQV
y5YedjqRLKB7/Ul35JWVFxY8eutCsYkonfof7v6AGMGB/RjQ7GDB6jWunEEwqUGV
3Y1isvdq5N3oo9NDY/QR0C2C7jiMnB9Kon0KzZ2yp0oF5euOpA/qrtmqxG3L9PoZ
DW1ppwAuARWtRDu4tcDAAQAkF1Mrg5YyYgRoKm7uVazlKEP7DxX56g/g4RS2otEE
rKsA/ER9yYiHnNyGcZuK9Jkfe2Ua6/R7gzJilRvHZ7CBPkhY+XNPcrjlsHbCJEJJ
cX/b0B56p7FyAFy6XjMY9PYFhxy/ubHE7Sk8ixX88uxgM4vf/sSFQaN84CcG/qqA
Nq/OEytBjZP82TsFFYBRcPKEPskF4ejjhNVC4bJpiuCIpo51nIxjeFGtDpeQiDG7
0OWc/GCvsz5W3eG7ShmQsRf0DoivL8tjgDUlMWO9boTpUy2Vnm1rDMKu6nFGKZ8o
TWTZR6u4zGZW1OBERdlU5NQmqxqXrsuGlT6r6DuQnWsWiscjXOyIFeHz+EOKhQOk
wUuN6xN8QES1CDFB27PYV0Sz2KhYhM78GKLCc9B10Ic=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.2.0
Release Details
UpdatedJuly 5, 2026, 9:21 a.m.
Changelog

Added

  • Löschen-Buttons im Detail-Modal für Teilprojekt, Aufgabe und Meilenstein
  • Deutsche App-Beschreibung in info.xml ergänzt

Fixed

  • Baseline-Datum und Kommentar im Report werden untereinander angezeigt
  • Dashboard-Widget zeigt Baseline-Datum und KPI-Werte korrekt an
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureXuYTZMxTlGNJVrGvU/GcIjSlBTYreXdvF5FilCmsi+l7MBvFlyeW1DsnxAsao3pu
HyhvaKXRnkraVQNT2ULgX4BmjUnhsELROrK03gtY88Odzqzh7RIXYkNkRcy92ara
56HIP8BBRD3m1c8pYPfpZfLAzkuurAzVqbJ6qbxw1AebdlPCFEq2g6C+IOcTon0T
q9ZD2I2XJmWd42EXXqva+NMrcx1jfjmHWVtl7xHKhwPndFCtHPMMAdoDS0Xpbh1V
3Ns4h/DphDpC8/ZYZ5sbpMCBekHw4VTZDGxNAuXJ5DMPhkqg2MxVplkS19PuBHLx
r74sgsz611Gjg55gjKOqCb5ZZEvqZTrwKTEYIbu8HicWtq/HxKRZS3FZN9MThTTX
Hesv65vsq9fH0UhEM6MVJjE5Phnw8Wb5ivtAiaUA+NzPrDfrHZAsSfR9NFL3rhFC
7wOmnXtzK40NjmqyMWJu/UP9UVbz3SeEiHiQO9GwBc2krzmXzcmLZFgEjty4CGoJ
SzXAA1QGpUGO4n0b3Y/5zSY4UxogGWybW+mOs27KDLytI915wNYGvBtcdAKCj6Ws
1uVA98npwMid/WSJJ04BXHX8LbowrDeTezSFJyGh+u/KnhlzkA7fqEuu3nQGT5rA
a9qeMmd5kmLBIVcG9RVVmw1kc0AK0qIqZDmlk9dWGJs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.1.1
Release Details
UpdatedMay 27, 2026, 6:43 p.m.
Changelog

Added

  • Glossar-Button in der Navigation (über den Einstellungen) mit interaktivem Nachschlagewerk
  • Dreispaltige Glossar-Tabelle: Begriff/Abkürzung, Bedeutung/Englisch, Erklärung mit Berechnungsformeln
  • 30 Einträge in 6 Abschnitten: Allgemein, Terminplanung, Baseline & Berichtswesen, Earned Value Management, Ressourcen & Kapazität, Budget

Fixed

  • Fehlende deutsche Übersetzungen für englische UI-Strings ergänzt (Add dependency, Baseline, Dependencies, Remove, Work, No projects yet, Open Gantt Projects, u.a.)
  • Leere Übersetzung für Deck-Fortschritt-Hinweis befüllt
  • de.js vollständig mit de.json synchronisiert (war ~70 Einträge veraltet)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureF1RHJx15J/N8tWNrDlAX1MFE/9tsct4PViEcBDeo8U/V2qJ/tezL7Xk0BVmYxjWw
pB+J685mcHjikh93/aZUqG8C6y0mR3TTJfaa7dLCIRMc1034x6Xj9Nd7Q9YVH4yi
RLTcRhrG2pN1Iqc23kwId995GJXHnCBEyuQuzo9m1VtA7GoFa8W2nqhXVT94khDS
8ZHQrixDfv63d4GfA5N2x4+phaiyObdskvCmVSuKrmouYvCGpPevtKG5YxzOrHid
aL48Kod0YgOCAD8nAqOhEmioP0m+wP2e/NC4Z5svSKT3vdlE67W1M68ipQQfnhPI
txui+2X8zFvoe/M5sE3DaXbLnOVNGQ7YRpyXFI5GsQmQ0cPSSO/94Mw15hLZfwMf
TDOrrvzf+Vu05sUTZ6CFh4FrSl4e5Q6Xjv6uH4BZtyOpPxl+ajgW4OkZvQDbt4KC
8aTZodMcDpXlRMDdBSxT1bT9tD05KUKmEZYtpxHiARrHDuQQCRSuxtjitQD9lbla
CMxKrBiO0YgdUb3FuczYkWEH+y8gW5egU6TDMnjAVbuUecGuGZN1Cc6tarcFWRu2
+V7Qn+aNoXEwP5e/0TM4Ig8ETAYseZRiTPHxeWiSg3RnU3HuT6kPVWw8LERACDT4
6F4WU9t2+4kESMLMjeV0/2UBQSykR/42Idsg0PtvpyQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32
Gantt Projects 1.1.1 (nightly)
Release Details
UpdatedMay 27, 2026, 5:24 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhNMMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTAzNzU4WhcNMzYwOTAxMTAzNzU4WjATMREwDwYD
VQQDDAhuY19nYW50dDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm9
oP6vDlGpTxTBBnAJjbz2Sv0wAf5dyLr73SLX2nXmidKACWjAkuq7CiU9qHfJaxJC
n5gXVjhV4QQKUTaK2Y5bOPGf9VBLwX9zDC1gwlVHFlG7HA+tlXZyL96Zw/qB1ghe
Ykk95n4Ahx7FNHvZwHbAqhoxejWQIo6mwJna9I+x3gyUsURfmaNKo0ZHckMP2fpj
4HKAwSTbzWqytYgbV8efQP6mAF6JWoBOIyi0Y/Z/zd2YIJ6ZVal0UmxpfTexSgfN
ZPoJWYLQGjqFxAZWLad4XTsJ3kHC4uSJf4LPE3Fde/B+/a15/Xi1uhkIzG38+I0L
EcOsobkGkgiVU8BFe5NF39Ld8oKTpV+DNaWTAXSzC+qxhM4O15etll/cN8hP1rSb
nxppA6diiiZ1D788feYvnU0bFMDjG1AxAtiO7su0m+VrqqQcKd/9oyNouZXAG0VH
LAsTL2kp78EW9yD3UxdgJ8C1j5XEApOAiILt4j0rsRK40u7AGVGD6zwKVPUoOMKZ
kdiKOHIU31AdMJj3K9ovgXk9ecIOaU+r2UHmP5mH7d7M8pHLwp5elj4rmgx+He69
2ShNAt0FECTm3yiay30qDuT2IIvRxVrn0qHUE8OWRgtzJnV0WXe2GMvASN86JQM9
DGhtam1lDw+X44c7LEFawVN/AUesvxv1BrbEezjLAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGXZO3ifTRL+r9p3iZ8AmTlcdjfYeZLQT/VDio5Zo1fbu1vQRuVXZ4YJ
ye9PFBwLjCXU/Wr2bXdFoMi/L1+o/kZmfEiLmEv7GA6GP88OhozJeNx/+6myhUX6
0oLbVDJresaO8dguSwc1BkQ1TPO5P2Pihtg6Jz+SE1IG4fhoMCrKwMdmzySZkqeL
XTgBLp6GTaGGd8Z5jXZvvBTEDwRaVeNMte3UmR2ON2B4zsR8eVD+PAoDobM+HR7q
x9N8zOlBqkdJUcS/KodgNfXH0o/ZOgqzhHIbD5XnnQpMT1yG0qM98PtelqDURCi9
qzfIPzlCodnTkS/VWiq16iR9q4kwjRg=
-----END CERTIFICATE-----
SignatureF4W7QJB8rVJ2xARdnhUbEouzRZMKcowz/ToDwr0oVFrVUbInFvHAMqXFTOVD1a5N
kDTb0pOhv+hCStTh70bN+aapjbdtp7SdQ3SbP5VoXBKLhUii41OqN/i4yM7itdSs
M8d5PVo9TJYVnfaij2xwWghMqZEyzxgOw4Q98dYIysf2BxsjjCtxGEMo/pISS90G
OE2RaVEFbwUcvu1XKszLP5X/k/onOchengURYVuzHP7VgVuomZpPSZ9VEIRKITyL
GpgSDrdqm5AXdQc7l/2OqprW6G+MxsuVzChbyPGslIYYXYsP9HLc/FfwVxaCJjh2
Nsiqfd+dMwnf7f9yrrBuZjbNwNa5x++IynrwaU01jVISkl9pgkbUYRaPSMTGFDAd
lsEEqlgs9KdzGoTFjDXNdTwDOsUMiu/ag8tPo7YxsxLFbVGa7laRAUhlGUT9QGPr
IOAAWvKqivsYnU5iwTCY/5HGza3SDfZc/e5upPfB+lTQTYijp1aAYRBAsoOLmuga
f0aP45pnfnYBJkT1kMsthjbGMdlL46wLiNHKRct9OlFwx74IRIyZdcs5Q3pC0aNN
DSLvsCSmY8/9PtTLzcOJKXTqqDVupCqq82bUlGRn7NR6xsinzv74MuOVnGY21tBm
iB5ceYpgiEukUz6YtS2quIIiMTnYmM+HBFnkXgBV0/Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=28.0.0,<34.0.0
Minimum Integer bits32