Motivation
CON-2741: Tag-Verwaltung (Story)
In einem PS.Content System werden viele Stichworte gepflegt. Dabei kann es zu "Dubletten" kommen, die von der Bedeutung her gleich sind. Das System soll es daher erlauben, ein Stichwort umzubenennen - falls noch nicht vorhanden - bzw. in ein bestehendes zu überführen. Dabei soll die Verwendung des Stichworts aktualisiert werden, wenn ein Stichwort in ein bereits existierendes umbenannt wird.
Funktionale Implementierung
Wird ein Stichwort umbenannt, wir geprüft, ob es dieses bereits in einem Artikel, Asset oder Thema verwendet wird. Bei Verwendung erhält der Anwender beim Speichern die Frage
"Sie ordnen alle Inhalte mit dem Stichwort "Test neu" dem Stichwort "Test alt" zu. Fortfahren?"
- Ist die Antwort "Abbrechen", wird der Speichervorgang abgebrochen.
- Ist die Antwort "OK" erfolgt die Zusammenführung. Dabei gilt: Bei allen Verwendern wird das Stichwort mit dem alten Namen entfernt und das mit dem neuen Name hinzugefügt. Das Stichwort mit dem alten Namen wird (logisch) gelöscht.
- Ist das Stichwort nicht verwendet, wird es gelöscht.
Technische Implementierung im Logik-Server
Im Logikserver ist eine Umbenennungsmethode implementiert. Dabei wird geprüft, ob es eine Stichwort (Tag) mit dem neuen Name gibt.
- Nein - Tag mit neuem Namen existiert nicht: Das Tag kann ohne weitere Aktionen gespeichert werden. Ein Löschen des Tags und Speichern eines Tags mit neuem Namen ist nicht nötig.
- Ja - Tag mit neuem Namen existiert bereits: Es wird geprüft, ob das Tag mit dem "alten" Namen verwendet ist.
- Nein - keine Verwendung: Das alte Tag wird (logisch) gelöscht.
- Ja - Verwendungen existieren: Das alte Tag (logisch) gelöscht und ein Notifizierungsevent (mit TagId des alten und neuen Tags) abgesetzt
- Dieses Event wird von den Listenern der Controller für Artikel, Themen und Assets verarbeitet.
- In jedem Controller werden die Verwender des gelöschten Tags ermittelt und bei denen das alte Tag durch das neue aktualisiert.
- Für alle aktualisierten Verwender (Artikel, Asset, Thema) wird ein Notifizierungsevent für die UI abgesetzt. In der UI reagieren die Views für Artikel, Themen und Assets (falls das Objekt gerade geöffnet ist) auf die geänderten Tags und aktualisieren das Tag-Tokenfield (sowie die Versionsnummer des Objekts, damit beim Speichern kein Versionskonflikt ensteht - vgl. dyn. Attribute)