From a8d8291c3afdad2a7870640a4f805873d4703d65 Mon Sep 17 00:00:00 2001 From: Eduard Wisch Date: Sat, 22 Aug 2026 18:11:42 +0200 Subject: [PATCH] API 1.5.1: Thumbnails, Aufnahmezeit, Seitenfelder, Textnotizen Die API-Seite zur Baustelle-PWA holt nach, was der Editor mit 1.5.0 bekommen hat. photo.php kann jetzt size=thumb&w= und rendert ueber bericht_attachment_thumb() (GD, Cache, EXIF-Rotation) statt die Originaldatei auszuliefern. size=small konnte nur ein von Dolibarr vorgefertigtes thumbs/_small. liefern - fuer Uploads ueber orders.php?action=upload_photo gibt es das nicht, dort laeuft kein vignette(). Die PWA lud dadurch fuer jede Kachel das komplette Foto: gemessen 9,8 KB statt 235 KB je Kachel. Antwort mit ETag aus der mtime, Folgeaufrufe enden mit 304. orders.php?action=photos liefert taken_at (EXIF-Aufnahmezeit ueber bericht_file_taken_at, sonst Dateidatum) und sortiert danach statt nach filemtime. reports.php gibt je Seite title und composite_path aus. title konnte ueber pages.php gesetzt werden, kam aber nie zurueck. composite_path ist das im Editor gebaute Seitenbild - ohne das zeigen Clients nur das Rohbild ohne Anmerkungen, bei Raster-Layouts eines von bis zu sechs Bildern und bei title_only gar keins. Neu: api/note.php - Textnotizen zum Auftrag, aufgebaut wie die Sprachnotiz. Die Notiz liegt als notiz__.txt im Auftragsverzeichnis und ist damit auch im Dolibarr-Auftrag und in der Anhaenge-Spalte des Editors sichtbar. Liste, Lesen, Anlegen, Aendern, Loeschen. Der file-Parameter wird gegen ^notiz_[A-Za-z0-9_.-]*\.txt$ geprueft; gegen Pfad-Ausbrueche getestet. ROADMAP.md wiederhergestellt - sie war mit eb37a4b geloescht worden, weil alle Punkte abgehakt waren. Sie bleibt ab jetzt liegen. Co-Authored-By: Claude Opus 5 (1M context) --- CLAUDE.md | 38 +++++- ChangeLog.md | 47 ++++++++ README.md | 57 +++++++-- ROADMAP.md | 193 ++++++++++++++++++++++++++++++ api/note.php | 179 +++++++++++++++++++++++++++ api/orders.php | 12 +- api/photo.php | 45 ++++++- api/reports.php | 5 + core/modules/modBericht.class.php | 2 +- 9 files changed, 555 insertions(+), 23 deletions(-) create mode 100644 ROADMAP.md create mode 100644 api/note.php diff --git a/CLAUDE.md b/CLAUDE.md index bbea19d..d0bfd46 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,6 @@ # Bericht-Modul — Projekt-Status & Architektur -## Stand 2026-08-21 (Version 1.5.0) +## Stand 2026-08-22 (Version 1.5.1) Dolibarr-Custom-Modul für Arbeitsberichte mit Browser-PDF-Editor + PWA-API-Layer + Lieferschein-Unterschrift. @@ -154,16 +154,24 @@ PWA-API-Layer + Usability-Features: - ✅ 4.b Touch-Unterschrift (POST /api/pages.php?action=signature) - ✅ Datei-Typ-Unterscheidung: Bilder (Modal), Audio (Player), PDFs (Canvas), Dokumente (Download) +**Auth-Hinweis (Stand 1.5.1):** Der Block unten stammt aus der JWT-Zeit. Seit der +SSO-Migration laeuft alles ueber das HttpOnly-Cookie `awl_sso` (Modul `awlauth`) — +kein Bearer-Token, kein `?jwt=`-Query-Parameter mehr. `api/_jwt.php` existiert nicht mehr. +Endpoints mit `awlauth_require` brauchen zusaetzlich den Header `X-Requested-With` +(CSRF); reine GET-Reads (`photo.php`, `pdf.php`) nutzen `awlauth_verify` ohne diesen. + API-Endpoints (neue): -- POST /api/auth.php — JWT-Login (username, password) +- POST /api/auth.php — Login (username, password) -> setzt awl_sso-Cookie - GET /api/orders.php — Aufträge des Users (filter: q, open) - GET /api/orders.php?id= — Order-Detail - GET /api/orders.php?id=&action=photos — Order-Dateien (Bilder/Audio/PDFs/Dokumente) - POST /api/orders.php?action=create — Neuer Order (socid, title, ref_client, date) -- GET /api/photo.php?relpath= — Datei-Serving (JWT via Header oder Query-Param, Whitelist: facture|commande|propal|bericht) +- GET /api/photo.php?relpath= — Datei-Serving (Whitelist: facture|commande|propal|bericht) +- GET /api/photo.php?relpath=&size=thumb&w= — Thumbnail (1.5.1, GD + Cache + ETag) - POST /api/pages.php?action=signature&bericht_id= — Touch-Unterschrift - DELETE /api/pages.php?id= — Seite löschen -- POST /api/pages.php?id= — Seite-Notiz / Rotation +- POST /api/pages.php?id= — Seite-Notiz / Titel / Rotation / Layout +- GET/POST /api/note.php?order_id= — Textnotizen zum Auftrag (1.5.1) PWA neue Komponenten (app.js): - openFileViewer() — Generischer Dateibetrachter (Bilder/PDFs/Audio/Download) @@ -215,9 +223,29 @@ Vollständiger Workflow für Kunden-Unterschrift auf dem Handy. Source-Repo: `da ### Wichtige Fallen - `EXPEDITION_ADDON_PDF_ODT_PATH` enthält wörtlich den String `"DOL_DATA_ROOT/..."` → muss mit `preg_replace('/DOL_DATA_ROOT/', DOL_DATA_ROOT, $d)` aufgelöst werden - `llx_element_element`-Richtung: **commande = source, shipping = target** (NICHT umgekehrt) -- JWT für ``/``-Tags: Query-Param `?jwt=` als Fallback in `api/_jwt.php`, da diese Tags keine Authorization-Header senden +- ~~JWT für ``/``-Tags per `?jwt=`~~ — mit der SSO-Migration hinfällig: das + `awl_sso`-Cookie geht same-origin automatisch mit, auch bei ``/`