diff --git a/apps/tesm/pyproject.toml b/apps/tesm/pyproject.toml
index 55d9273..6b2827e 100644
--- a/apps/tesm/pyproject.toml
+++ b/apps/tesm/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "tesm"
-version = "2.7.2"
+version = "2.7.3"
description = "TESM -- Verwaltung und Ueberwachung von PoE-Endgeraeten und Aruba-Switchen"
requires-python = ">=3.11"
dependencies = [
diff --git a/apps/tesm/src/tesm/settings_spec.py b/apps/tesm/src/tesm/settings_spec.py
index 499dc86..acd260c 100644
--- a/apps/tesm/src/tesm/settings_spec.py
+++ b/apps/tesm/src/tesm/settings_spec.py
@@ -104,10 +104,11 @@ TESM_SETTINGS: tuple[SettingSpec, ...] = (
True,
"bool",
"Unterschriften mit dem ablegenden Konto bezeugen",
- hint="Unter jede Unterschrift kommt eine Zeile, wer das Dokument in TESM abgelegt "
- "hat. Der Name in der Unterschrift ist eine Angabe des Unterschreibenden – wie "
- "auf Papier; das Konto daneben ist belegt. Eine Passwortabfrage gibt es dafür "
- "nicht.",
+ hint="Eine Zeile unter der **ersten** Unterschrift nennt das Konto, das das "
+ "Dokument in TESM abgelegt hat. In den Dokumenteigenschaften und im "
+ "Änderungsprotokoll steht es ohnehin, unabhängig von diesem Schalter. Der Name in "
+ "der Unterschrift ist eine Angabe des Unterschreibenden – wie auf Papier; das "
+ "Konto ist belegt. Eine Passwortabfrage gibt es dafür nicht.",
section="fileshare",
),
# -- Terminal ----------------------------------------------------------- #
diff --git a/apps/tesm/src/tesm/templates/tesm/settings_system.html b/apps/tesm/src/tesm/templates/tesm/settings_system.html
index 42b1ee1..f7623f0 100644
--- a/apps/tesm/src/tesm/templates/tesm/settings_system.html
+++ b/apps/tesm/src/tesm/templates/tesm/settings_system.html
@@ -84,7 +84,9 @@
{{ icon('pencil', size=17) }} Unterschriften
Der Name in der Unterschrift ist eine Angabe des Unterschreibenden – wie auf
- Papier. Wer das Dokument in TESM abgelegt hat, ist dagegen belegt.
+ Papier. Wer das Dokument abgelegt hat, ist dagegen belegt: in den
+ Dokumenteigenschaften und im Änderungsprotokoll, auf Wunsch zusätzlich
+ sichtbar unter der ersten Unterschrift.
diff --git a/packages/tesm-core/pyproject.toml b/packages/tesm-core/pyproject.toml
index ff78d42..8c9888f 100644
--- a/packages/tesm-core/pyproject.toml
+++ b/packages/tesm-core/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "tesm-core"
-version = "2.7.2"
+version = "2.7.3"
description = "Gemeinsames Anwendungsgeruest (Auth, RBAC, Navigation, Design-System, Migrationen) fuer TESM und TESM-Lizenzserver"
requires-python = ">=3.11"
dependencies = [
diff --git a/packages/tesm-core/src/tesm_core/app_factory.py b/packages/tesm-core/src/tesm_core/app_factory.py
index c884e33..32aae1c 100644
--- a/packages/tesm-core/src/tesm_core/app_factory.py
+++ b/packages/tesm-core/src/tesm_core/app_factory.py
@@ -148,7 +148,7 @@ def create_base_app(
#: Wortmarke, ohne Zeile darunter; die Marke selbst zeigen beide
#: Anwendungen.
auth_tagline: str = "",
- app_version: str = "2.7.2",
+ app_version: str = "2.7.3",
built_in_trusted_keys: tuple[str, ...] = (),
enable_license: bool = True,
template_folder: str | None = None,
diff --git a/packages/tesm-core/src/tesm_core/static/tesm_core/js/viewer.js b/packages/tesm-core/src/tesm_core/static/tesm_core/js/viewer.js
index cd40a37..748832b 100644
--- a/packages/tesm-core/src/tesm_core/static/tesm_core/js/viewer.js
+++ b/packages/tesm-core/src/tesm_core/static/tesm_core/js/viewer.js
@@ -280,7 +280,13 @@ async function nachbearbeiten(
const hoehe = (png.height / png.width) * breite;
seite.drawImage(png, { x: eintrag.x, y: eintrag.y, width: breite, height: hoehe });
const zeilen = [`${eintrag.name} | ${eintrag.zeit}`];
- if (zeuge) zeilen.push(`In TESM abgelegt durch ${zeuge}`);
+ // Der Zeugenvermerk gehoert zum Dokument, nicht zu jeder Unterschrift:
+ // unter drei Unterschriften stand dreimal derselbe Satz. Sichtbar
+ // erscheint er deshalb nur unter der ersten -- fest steht er ohnehin in
+ // den Dokumenteigenschaften und im Aenderungsprotokoll.
+ if (zeuge && eintrag === unterschriften[0]) {
+ zeilen.push(`In TESM abgelegt durch ${zeuge}`);
+ }
// Die Schrift waechst mit der Unterschrift: wer sie kleiner zieht, will
// den ganzen Block kleiner haben, nicht eine Zeichnung mit einer
// Bildunterschrift in Originalgroesse daneben.
@@ -311,6 +317,20 @@ async function nachbearbeiten(
}
}
+ if (unterschriften.length) {
+ // In den Dokumenteigenschaften -- dort sucht man so etwas, und dort steht
+ // es einmal statt unter jeder Unterschrift. Jeder Betrachter zeigt das
+ // an, auch ausserhalb von TESM.
+ const namen = unterschriften.map((eintrag) => eintrag.name);
+ const wann = unterschriften[unterschriften.length - 1].zeit;
+ dokument.setAuthor(namen.join(", "));
+ dokument.setSubject(
+ `Unterschrieben am ${wann}` + (zeuge ? ` | in TESM abgelegt durch ${zeuge}` : "")
+ );
+ dokument.setProducer("TESM");
+ dokument.setModificationDate(new Date());
+ }
+
if (abschliessen) {
// Alle Felder werden Teil der Seite. Danach gibt es kein Formular mehr --
// gewollt: so kann niemand mehr etwas verstellen.
@@ -664,7 +684,9 @@ async function pdfBetrachter(behaelter, seiten, url, basis, { formulare = true }
const text = document.createElement("div");
text.className = "viewer__unterschrifttext";
text.textContent = `${eintrag.name} | ${eintrag.zeit}`;
- if (zeuge) text.textContent += ` / In TESM abgelegt durch ${zeuge}`;
+ if (zeuge && eintrag === unterschriften[0]) {
+ text.textContent += ` / In TESM abgelegt durch ${zeuge}`;
+ }
const griff = document.createElement("button");
griff.type = "button";
griff.className = "viewer__unterschriftgriff";
@@ -834,6 +856,8 @@ export function initFilePreview(wurzel = document) {
const padAbbrechen = stueck("signabbrechen");
const padHinweis = stueck("signhinweis");
const basis = rumpf.dataset.viewerPdfjs || "";
+ // Der Anmeldename, nicht der volle Name: er ist eindeutig, und genau das
+ // soll die Zeile belegen.
const konto = rumpf.dataset.viewerKonto || "";
const bezeugen = rumpf.dataset.viewerZeuge === "1";
// Die Uhr des Servers, nicht die des Tablets: eine verstellte Uhr am Geraet
diff --git a/packages/tesm-licensing/pyproject.toml b/packages/tesm-licensing/pyproject.toml
index 4db17e5..523725c 100644
--- a/packages/tesm-licensing/pyproject.toml
+++ b/packages/tesm-licensing/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "tesm-licensing"
-version = "2.7.2"
+version = "2.7.3"
description = "Ed25519-basiertes Lizenz- und Aktivierungsprotokoll fuer TESM und TESM-Lizenzserver"
requires-python = ">=3.11"
dependencies = ["cryptography>=42"]