KI-Bildkennzeichnung 1/6: Custom Field Set "media" (ai_status/ai_type) + CustomFieldsInstaller-Generalisierung #4

Closed
opened 2026-08-02 06:51:43 +00:00 by csaeum · 0 comments
Owner

Rechtlicher Hintergrund

Ab 02.08.2026 verlangt Art. 50 Abs. 4 KI-VO eine sichtbare Kennzeichnung von KI-generierten/-veränderten Produktbildern im Shop. Dies ist Teil 1 von 6 der Serie "KI-Bildkennzeichnung" (siehe verlinkte Issues für die weiteren Teile).

Ziel

src/Service/CustomFieldsInstaller.php generalisieren, sodass sie über eine Liste von Custom-Field-Set-Definitionen iteriert (bestehendes product-Set + neues media-Set), statt Set-Name/Entity-Name fest zu verdrahten. Die bestehende Upsert-Logik (upsertCustomField(), Typ-Änderung → delete+create, Set/Feld getrennt upserten) bleibt unverändert und wird für beide Sets wiederverwendet.

Neues Custom Field Set

  • Set: wsc_ai_seo_media_ai (Label "KI-Bildkennzeichnung"), entityName = 'media'

Neue Felder (Konstanten-Namen NIEMALS umbenennen)

  • FIELD_MEDIA_AI_STATUS (wsc_ai_seo_media_ai_status), Typ BOOL/switch — wird automatisch vom Upload-Scan (Issue 2) gesetzt (true bei erkanntem C2PA-digitalSourceType). Bleibt im Admin editierbar (Shopware Custom Fields kennen kein echtes Read-Only), dient primär als Auto-Flag.
  • FIELD_MEDIA_AI_TYPE (wsc_ai_seo_media_ai_type), Typ SELECT, manuell vom Admin gepflegt:
    • fully_generated — "Vollständig KI-generiert"
    • ai_modified — "KI-verändert"
    • not_ai_confirmed — "Kein KI-Inhalt (manuell bestätigt)" — erlaubt dem Admin, einen False-Positive des automatischen Scans gezielt zu korrigieren.

Weitere Anpassungen

  • addRelations(): zusätzliche Relation entityName = 'media'
  • uninstall(): zusätzlicher JSON_REMOVE-Block gegen media_translation.custom_fields (gleiches Muster wie bestehender product_translation-Cleanup)
  • src/Resources/config/services.xml: bestehende CustomFieldsInstaller-Service-Definition hat nur 3 Argumente, Klasse braucht aber 4 (Connection fehlt) — bei dieser Gelegenheit mit fixen
  • Bestehender, aktuell kaputter Test tests/Unit/Service/CustomFieldsInstallerTest.php (Konstruktor-Argument-Mismatch, veraltete Assertions gegen alte Upsert-Logik) wird hier mit repariert

Akzeptanzkriterien

  • Custom Fields erscheinen im Admin unter Medien nach plugin:update
  • Bestehendes Produkt-Custom-Field-Set funktioniert unverändert weiter
  • CustomFieldsInstallerTest.php grün
  • Uninstall entfernt Werte aus media_translation.custom_fields sauber
## Rechtlicher Hintergrund Ab 02.08.2026 verlangt Art. 50 Abs. 4 KI-VO eine sichtbare Kennzeichnung von KI-generierten/-veränderten Produktbildern im Shop. Dies ist Teil 1 von 6 der Serie "KI-Bildkennzeichnung" (siehe verlinkte Issues für die weiteren Teile). ## Ziel `src/Service/CustomFieldsInstaller.php` generalisieren, sodass sie über eine Liste von Custom-Field-Set-Definitionen iteriert (bestehendes `product`-Set + neues `media`-Set), statt Set-Name/Entity-Name fest zu verdrahten. Die bestehende Upsert-Logik (`upsertCustomField()`, Typ-Änderung → delete+create, Set/Feld getrennt upserten) bleibt unverändert und wird für beide Sets wiederverwendet. ## Neues Custom Field Set - Set: `wsc_ai_seo_media_ai` (Label "KI-Bildkennzeichnung"), `entityName = 'media'` ## Neue Felder (Konstanten-Namen NIEMALS umbenennen) - `FIELD_MEDIA_AI_STATUS` (`wsc_ai_seo_media_ai_status`), Typ `BOOL`/`switch` — wird automatisch vom Upload-Scan (Issue 2) gesetzt (true bei erkanntem C2PA-`digitalSourceType`). Bleibt im Admin editierbar (Shopware Custom Fields kennen kein echtes Read-Only), dient primär als Auto-Flag. - `FIELD_MEDIA_AI_TYPE` (`wsc_ai_seo_media_ai_type`), Typ `SELECT`, manuell vom Admin gepflegt: - `fully_generated` — "Vollständig KI-generiert" - `ai_modified` — "KI-verändert" - `not_ai_confirmed` — "Kein KI-Inhalt (manuell bestätigt)" — erlaubt dem Admin, einen False-Positive des automatischen Scans gezielt zu korrigieren. ## Weitere Anpassungen - `addRelations()`: zusätzliche Relation `entityName = 'media'` - `uninstall()`: zusätzlicher `JSON_REMOVE`-Block gegen `media_translation.custom_fields` (gleiches Muster wie bestehender `product_translation`-Cleanup) - `src/Resources/config/services.xml`: bestehende `CustomFieldsInstaller`-Service-Definition hat nur 3 Argumente, Klasse braucht aber 4 (`Connection` fehlt) — bei dieser Gelegenheit mit fixen - Bestehender, aktuell kaputter Test `tests/Unit/Service/CustomFieldsInstallerTest.php` (Konstruktor-Argument-Mismatch, veraltete Assertions gegen alte Upsert-Logik) wird hier mit repariert ## Akzeptanzkriterien - [ ] Custom Fields erscheinen im Admin unter Medien nach `plugin:update` - [ ] Bestehendes Produkt-Custom-Field-Set funktioniert unverändert weiter - [ ] `CustomFieldsInstallerTest.php` grün - [ ] Uninstall entfernt Werte aus `media_translation.custom_fields` sauber
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
SW-Plugins/wsc_swplugin_aiseotools#4
No description provided.