images: Datenmodell, Textarchiv, Herkunftsprüfung und gemeinsamer Uploader für Formular v2 (Bildkennzeichnung Block A)
- press_release_images: Kundenangabe/Portalkennzeichnung getrennt, Herkunftsbefund, Beweisoriginal, Snapshot-Pfade, published_ever_at, rules_version, Fokus/Letterbox; Bestand unangetastet - legal_texts (insert-only) mit img-confirm-v1 (alter Wortlaut), v2 (AGB 0.6), v3 (AGB 0.7, noch ohne Datum); image-rights:backfill-confirmations - image_rights_confirmations polymorph, insert-only, IP als versionierter HMAC; Löschung nur für nie veröffentlichte Uploads - ImageProvenanceInspector (Imagick/exif): IPTC, XMP, EXIF; algorithmicallyEnhanced nur Vermerk; unlesbare Datei = error - PressReleaseImageUploader: Original vor Derivaten, Hash-Bindung, Titelbild-Regel unter Sperre, Dateien bei Fehlern zurückgerollt; Admin-Upload ohne Bestätigung - ImageService: kein Rückfall auf die Quelldatei, og-Variante, Fokuspunkt und no_crop Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
83cb6e14cd
commit
214aea8910
36 changed files with 2631 additions and 30 deletions
77
database/seeders/LegalTextSeeder.php
Normal file
77
database/seeders/LegalTextSeeder.php
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\LegalText;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
/**
|
||||
* Bestätigungstexte für den Bild-Upload (Bildkennzeichnung A.3,
|
||||
* Decision-Update 3.3). Kennungen werden nie wiederverwendet; der Seeder
|
||||
* legt fehlende Fassungen an und lässt vorhandene unverändert.
|
||||
*
|
||||
* - img-confirm-v1: der Wortlaut des alten Formulars (seit 29.05.2026),
|
||||
* rückwirkend archiviert für die bestehenden Bestätigungen.
|
||||
* - img-confirm-v2: Formular v2, gebunden an AGB 0.6 (Verweis § 8, § 9).
|
||||
* - img-confirm-v3: derselbe Text mit § 8a, gebunden an AGB 0.7 — wird
|
||||
* erst mit Deploy 3 wirksam (effective_from bleibt leer).
|
||||
*/
|
||||
class LegalTextSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
foreach (self::texts() as $text) {
|
||||
if (LegalText::findByKey($text['key']) !== null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
LegalText::query()->create($text + ['created_at' => now()]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return list<array<string, string|null>>
|
||||
*/
|
||||
public static function texts(): array
|
||||
{
|
||||
$long = 'Ich bestätige, dass ich zur Veröffentlichung dieses Bildes auf {portals} sowie im Rahmen der von mir gebuchten Verbreitung berechtigt bin. Das umfasst die Rechte des Urhebers, die Rechte abgebildeter Personen sowie Marken- und sonstige Rechte Dritter. Mein Bildnachweis und meine Angabe zur KI-Kennzeichnung sind zutreffend. Für diese Einreichung gelten die Allgemeinen Geschäftsbedingungen in der Fassung vom {agb_date} (Version {agb_version}, {agb_url}), die ich hiermit anerkenne. Die Regeln zu Bildern stehen dort in %s; bei schuldhafter Verletzung meiner vertraglichen Pflichten gelten die Freistellungsregelungen in %s.';
|
||||
|
||||
$short = 'Ich bestätige, dass ich zur Veröffentlichung dieses Bildes berechtigt bin, meine Angaben zutreffen und die AGB (Fassung vom {agb_date}) gelten.';
|
||||
|
||||
return [
|
||||
[
|
||||
'key' => 'img-confirm-v1',
|
||||
'type' => LegalText::TYPE_IMAGE_RIGHTS_CONFIRMATION,
|
||||
'locale' => 'de',
|
||||
'title' => 'Rechte bestätigt',
|
||||
'body' => 'Ich bestätige, dass ich über die erforderlichen Rechte zur Veröffentlichung dieses Bildes verfüge und die Verantwortung für die Richtigkeit meiner Angaben übernehme. Dies umfasst Urheberrechte, Nutzungsrechte, Persönlichkeitsrechte abgebildeter Personen sowie gegebenenfalls Marken-, Eigentums- oder sonstige Rechte Dritter. Mir ist bewusst, dass ich für fehlerhafte oder unvollständige Angaben verantwortlich bin.',
|
||||
'short_body' => null,
|
||||
'bound_agb_version' => '0.6',
|
||||
'effective_from' => '2026-05-29',
|
||||
'note' => 'Wortlaut des alten Bildmanagers (Lizenzfelder-Formular), rückwirkend archiviert',
|
||||
],
|
||||
[
|
||||
'key' => 'img-confirm-v2',
|
||||
'type' => LegalText::TYPE_IMAGE_RIGHTS_CONFIRMATION,
|
||||
'locale' => 'de',
|
||||
'title' => 'Bestätigung der Bildrechte',
|
||||
'body' => sprintf($long, '§ 8 und § 9', '§ 8 Abs. 2'),
|
||||
'short_body' => $short,
|
||||
'bound_agb_version' => '0.6',
|
||||
'effective_from' => '2026-09-22',
|
||||
'note' => 'Formular v2 (Decision-Update 22.09.2026), Verweis auf AGB 0.6; Anwaltsprüfung ausstehend',
|
||||
],
|
||||
[
|
||||
'key' => 'img-confirm-v3',
|
||||
'type' => LegalText::TYPE_IMAGE_RIGHTS_CONFIRMATION,
|
||||
'locale' => 'de',
|
||||
'title' => 'Bestätigung der Bildrechte',
|
||||
'body' => sprintf($long, '§ 8, § 8a und § 9', '§ 8 Abs. 2 und § 8a Abs. 5'),
|
||||
'short_body' => $short,
|
||||
'bound_agb_version' => '0.7',
|
||||
'effective_from' => null,
|
||||
'note' => 'Formular v2 mit § 8a, gebunden an AGB 0.7; wird mit Deploy 3 wirksam',
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue