Stadionzeitung: Live-Seiten (Tabellen, Ergebnisse, Vorschau, Termine, News, Kontakt, Historie, Sportheim, Partner, Momente, Impressum), automatisches Cover, Swipe-Viewer mit Vollbildmodus und die Druckfassung als Falt-Heft. Anzeigen kommen jetzt aus dem Bestand und werden gleichmäßig verteilt, nie mehr als zwei hintereinander (vorher vier Blöcke à fünf). Die Doppelseiten-Regel rechnet das Skript selbst, statt sie von Hand zu prüfen. Veranstaltungen: Bereich /veranstaltungen mit Detailseite pro Fest, Lebenszyklus über das Datum (Ankündigung vor dem Fest, Rückblick danach), Galerie mit Lightbox. veranstaltungen.json ist dritte Termin-Quelle, damit ein Fest nie doppelt gepflegt wird. News-Artikel als dritte dynamische Prefix-Route, gemeinsamer detail-head. Behobene Fehler: - Wappen-Kontexte setzten Zeilen-Layout auf .crest statt auf die Zeile; das Wappen wurde zum Grid, Vereinsname und Tore rutschten darunter zusammen (Ergebnis-Rückblick, Vorschau, Cover). - --header-h (60px) unterschätzt die Kopfleiste um 32px (Logo 72px + 20px Versatz): neues abgeleitetes --header-space, sonst klebten Zurück-Links unter dem Logo. - base_url in der Produktions-Config ohne www, während .htaccess auf www umleitet; preflight prüft das jetzt. - .lightbox brauchte display:none mit (0,2,0), sonst lag das Overlay offen. Neue Werkzeuge: bin/anzeige-add.php (Anzeigen-Bestand), bin/veranstaltung-bilder.php (Plakate und Galerien, Alt-Texte folgen der Quelldatei), bin/qr.php (Druck-QR mit Warnung, wenn base_url nicht auf die echte Domain zeigt). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NzeVVgMCrzCDJAKeLEdKr7
565 lines
22 KiB
PHP
565 lines
22 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
/**
|
||
* Gemeinsame Logik der Chronik-Skripte (chronik-init.php, chronik-add.php).
|
||
*
|
||
* Bewusst hier unter bin/ und NICHT in app/helpers.php: das ist Recherche-Werkzeug für
|
||
* die Jubiläums-Chronik 2028, kein Website-Code. Nichts davon darf je im Request-Pfad
|
||
* landen — die Seite kennt die Chronik nicht.
|
||
*
|
||
* Zwei Dinge trägt diese Datei, und beide sind der eigentliche Punkt der Übung:
|
||
*
|
||
* 1. Der DATEINAME ist der Metadatenträger. Die Files Gallery unter /dateien kennt keine
|
||
* Felder für Datum, Quelle oder Rechte — sie listet Dateien. Also muss alles, was ein
|
||
* Fundstück später brauchbar macht, in den Namen: `1972-07-15_Einweihung-Sportheim_BR.jpg`.
|
||
* Datum vorn, damit die alphabetische Sortierung der Gallery zufällig die chronologische ist.
|
||
*
|
||
* 2. RECHTE werden beim Einsammeln festgehalten, nicht 2028 rekonstruiert. Zu jedem Fundstück
|
||
* entsteht eine `.quelle.txt` daneben und eine Zeile im Register. Was geklärt werden muss,
|
||
* landet zusätzlich in 00_RECHTE-ZU-KLAEREN.txt — im Ordner, wo es jemand sieht.
|
||
*/
|
||
|
||
/** Jahrzehnt-Bündel: [von, bis] => Ordnername. Früh breit, später enger — dort wird das Material dichter. */
|
||
const CHRONIK_BUCKETS = [
|
||
'1908-1929' => '1908-1929',
|
||
'1930-1949' => '1930-1949',
|
||
'1950-1969' => '1950-1969',
|
||
'1970-1989' => '1970-1989',
|
||
'1990-2009' => '1990-2009',
|
||
'2010-2028' => '2010-2028',
|
||
];
|
||
|
||
const CHRONIK_DOKUMENTE = 'Festschriften-und-Dokumente';
|
||
const CHRONIK_UNDATIERT = 'Undatiert';
|
||
|
||
const CHRONIK_README = '00_LIESMICH.txt';
|
||
const CHRONIK_RECHTE = '00_RECHTE-ZU-KLAEREN.txt';
|
||
|
||
/** Register liegt im REPO, nicht im Uploads-Ordner: uploads/ ist gitignored, das Register braucht Versionsgeschichte. */
|
||
function chronik_register_path(): string
|
||
{
|
||
return ROOT_PATH . '/docs/chronik/register.csv';
|
||
}
|
||
|
||
function chronik_root(): string
|
||
{
|
||
return STORAGE_PATH . '/dateien/uploads/Vereinshistorie';
|
||
}
|
||
|
||
/**
|
||
* Wayback-Adressen auf die ursprüngliche Adresse zurückführen.
|
||
*
|
||
* Das Internet Archive ist nur der Aufbewahrungsort — Urheber und Rechte richten sich nach
|
||
* der Seite, die dort eingefroren wurde. Ein Schnappschuss der eigenen alten Vereinsseite
|
||
* gehört dem Verein, nicht dem Archiv.
|
||
*/
|
||
function chronik_origin_url(string $url): string
|
||
{
|
||
if (preg_match('#^https?://web\.archive\.org/web/[^/]+/(https?://.+)$#i', $url, $m)) {
|
||
return $m[1];
|
||
}
|
||
return $url;
|
||
}
|
||
|
||
/**
|
||
* Rechtelage aus dem Host ableiten.
|
||
*
|
||
* Die Einschätzung ist eine ARBEITSHILFE, keine Rechtsauskunft — sie sagt nur, wo geklärt
|
||
* werden muss, bevor etwas gedruckt oder auf die Website gestellt wird. Sammeln und Sichten
|
||
* ist das eine, Veröffentlichen das andere; genau diese Grenze markiert das Feld.
|
||
*
|
||
* @return array{status:string, klaeren:bool, hinweis:string}
|
||
*/
|
||
function chronik_rights(string $host): array
|
||
{
|
||
$host = strtolower(preg_replace('/^www\./', '', $host));
|
||
|
||
$map = [
|
||
'infranken.de' => [
|
||
'Presse © Mediengruppe Oberfranken (inFranken/Bayerische Rundschau)',
|
||
true,
|
||
'Text UND Foto sind geschützt. Für Abdruck in der Chronik bzw. Nutzung auf der Website '
|
||
. 'Nachdruckrechte beim Verlag anfragen (Mediengruppe Oberfranken, Bamberg). Für '
|
||
. 'Vereinsjubiläen wird das üblicherweise gegen Quellenangabe eingeräumt — aber schriftlich, und früh.',
|
||
],
|
||
'bayerische-rundschau.de' => [
|
||
'Presse © Mediengruppe Oberfranken (Bayerische Rundschau)',
|
||
true,
|
||
'Wie inFranken — gleicher Verlag. Nachdruckrechte schriftlich einholen.',
|
||
],
|
||
'frankenpost.de' => [
|
||
'Presse © Mediengruppe Oberfranken (Frankenpost)',
|
||
true,
|
||
'Gleiches Haus wie Bayerische Rundschau/inFranken — eine gemeinsame Anfrage an die '
|
||
. 'Mediengruppe Oberfranken deckt alle drei Titel ab.',
|
||
],
|
||
'fraenkischertag.de' => [
|
||
'Presse © Mediengruppe Oberfranken (Fränkischer Tag)',
|
||
true,
|
||
'Vierter Titel des Hauses, dieselbe Anfrage deckt ihn mit ab. Achtung beim Lokalsport '
|
||
. 'Kulmbach: dort steht oft „Foto: privat" — das Bild kommt dann aus dem Verein oder von '
|
||
. 'einer Privatperson, die Bildrechte liegen bei ihr und nicht beim Verlag. Wer das ist, '
|
||
. 'weiß die Redaktion oder die Mannschaft; danach ist es ein Anruf statt einer Anfrage.',
|
||
],
|
||
'kicker.de' => [
|
||
'Presse © kicker / Olympia-Verlag',
|
||
true,
|
||
'Reine Stammdaten (Liga, Spielort) sind Fakten und frei; Texte und Fotos nicht.',
|
||
],
|
||
'europlan-online.de' => [
|
||
'© Europlan-Online (Groundhopping-Portal)',
|
||
true,
|
||
'Stadiondaten als Fakten frei verwendbar; die Stadionfotos gehören den einzelnen '
|
||
. 'Fotografen und sind einzeln anzufragen.',
|
||
],
|
||
'turneninkulmbach.info' => [
|
||
'Turnabteilung TSV 08 Kulmbach — eigenes Material',
|
||
false,
|
||
'Seite der eigenen Turnabteilung. Intern klären, wer sie betreut, dann sind die '
|
||
. 'Inhalte für die Chronik verfügbar.',
|
||
],
|
||
'anpfiff.info' => [
|
||
'© anpfiff.info',
|
||
true,
|
||
'Amateurfußball-Portal. Ergebnisse frei, Berichte und Fotos nicht.',
|
||
],
|
||
'bfv.de' => [
|
||
'© Bayerischer Fußball-Verband',
|
||
true,
|
||
'Reine Ergebnis- und Tabellendaten (Fakten) sind frei verwendbar; Texte, Fotos und Wappen nicht. '
|
||
. 'Wappen fremder Vereine nur mit deren Zustimmung abbilden.',
|
||
],
|
||
'fussball.de' => [
|
||
'© DFB / Bayerischer Fußball-Verband',
|
||
true,
|
||
'Ergebnisse und Tabellenstände als Fakten frei; Seitenaufbau, Texte und Fotos nicht.',
|
||
],
|
||
'deutsche-turnliga.de' => [
|
||
'© Deutsche Turnliga',
|
||
true,
|
||
'Ergebnisdaten frei, Texte/Fotos nicht.',
|
||
],
|
||
'tsv08kulmbach.de' => [
|
||
'Eigenes Material (TSV 08 Kulmbach)',
|
||
false,
|
||
'Aus dem Bestand des Vereins — nutzbar. Bei Personenfotos trotzdem das Recht am eigenen Bild beachten.',
|
||
],
|
||
// Frühere Vereinsdomain (Jimdo, ~2016–2023). DNS läuft nicht mehr, erreichbar nur
|
||
// noch über das Internet Archive — inhaltlich aber unser eigenes Material.
|
||
'tsv1908kulmbach.de' => [
|
||
'Eigenes Material (TSV 08 Kulmbach, frühere Vereinsseite)',
|
||
false,
|
||
'Alte Vereinsseite, nur noch im Internet Archive. Inhalte stammen vom Verein selbst. '
|
||
. 'Bei Personenfotos das Recht am eigenen Bild beachten.',
|
||
],
|
||
'commons.wikimedia.org' => [
|
||
'Wikimedia Commons — freie Lizenz, Bedingung prüfen',
|
||
true,
|
||
'Frei nutzbar, aber fast immer MIT Namensnennung und Lizenzangabe. Die konkrete Lizenz '
|
||
. '(CC BY-SA, CC0, PD) auf der Dateiseite ablesen und im Register eintragen.',
|
||
],
|
||
'de.wikipedia.org' => [
|
||
'Wikipedia — CC BY-SA',
|
||
true,
|
||
'Text nur mit Namensnennung und unter gleicher Lizenz weiterverwendbar. Für eine Chronik '
|
||
. 'besser als Faktenquelle nutzen und selbst formulieren.',
|
||
],
|
||
'facebook.com' => [
|
||
'Social Media — Urheber unklar',
|
||
true,
|
||
'Wer das Foto gemacht hat, steht dort meist nicht. Vor einer Veröffentlichung Urheber '
|
||
. 'ermitteln (oft der Verein selbst oder ein Mitglied) und Einwilligung abgeborgener Personen prüfen.',
|
||
],
|
||
'instagram.com' => [
|
||
'Social Media — Urheber unklar',
|
||
true,
|
||
'Wie Facebook. Eigene Vereinsposts sind unkritisch, fremde nicht.',
|
||
],
|
||
'digipress.digitale-sammlungen.de' => [
|
||
'Bayerische Staatsbibliothek — meist gemeinfrei',
|
||
false,
|
||
'Zeitungen bis ~1920er sind in der Regel gemeinfrei. Quellenangabe (Blatt, Datum, Seite, BSB) trotzdem mitführen.',
|
||
],
|
||
];
|
||
|
||
foreach ($map as $needle => [$status, $klaeren, $hinweis]) {
|
||
if ($host === $needle || str_ends_with($host, '.' . $needle)) {
|
||
return ['status' => $status, 'klaeren' => $klaeren, 'hinweis' => $hinweis];
|
||
}
|
||
}
|
||
|
||
return [
|
||
'status' => 'Ungeklärt — Urheber unbekannt',
|
||
'klaeren' => true,
|
||
'hinweis' => 'Herkunft im Register nachtragen und vor jeder Veröffentlichung klären.',
|
||
];
|
||
}
|
||
|
||
/**
|
||
* Datum (YYYY, YYYY-MM oder YYYY-MM-DD) → Zielordner.
|
||
* Unbekanntes oder unplausibles Datum landet in Undatiert/ statt still im falschen Jahrzehnt.
|
||
*/
|
||
function chronik_bucket(?string $date): string
|
||
{
|
||
if ($date === null || !preg_match('/^(\d{4})/', $date, $m)) {
|
||
return CHRONIK_UNDATIERT;
|
||
}
|
||
$year = (int) $m[1];
|
||
foreach (CHRONIK_BUCKETS as $range => $dir) {
|
||
[$from, $to] = array_map('intval', explode('-', $range));
|
||
if ($year >= $from && $year <= $to) {
|
||
return $dir;
|
||
}
|
||
}
|
||
return CHRONIK_UNDATIERT;
|
||
}
|
||
|
||
/** Datum auf YYYY-MM-DD normalisieren; unbekannte Teile werden 00 (sortiert vor dem 1. des Monats). */
|
||
function chronik_date_norm(?string $date): string
|
||
{
|
||
if ($date === null || !preg_match('/^(\d{4})(?:-(\d{2}))?(?:-(\d{2}))?/', $date, $m)) {
|
||
return '0000-00-00';
|
||
}
|
||
return sprintf('%s-%s-%s', $m[1], $m[2] ?? '00', $m[3] ?? '00');
|
||
}
|
||
|
||
/** Titel → dateinamensicherer Slug. Umlaute ausgeschrieben, damit NFD/NFC nie zum Thema wird. */
|
||
function chronik_slug(string $text, int $maxLen = 60): string
|
||
{
|
||
$text = strtr($text, [
|
||
'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'Ä' => 'Ae', 'Ö' => 'Oe', 'Ü' => 'Ue',
|
||
'ß' => 'ss', 'é' => 'e', 'è' => 'e', 'ê' => 'e', 'á' => 'a', 'à' => 'a', 'ç' => 'c',
|
||
]);
|
||
$text = (string) preg_replace('/[^A-Za-z0-9]+/', '-', $text);
|
||
$text = trim((string) preg_replace('/-+/', '-', $text), '-');
|
||
if (strlen($text) > $maxLen) {
|
||
$text = substr($text, 0, $maxLen);
|
||
$text = (string) preg_replace('/-[^-]*$/', '', $text) ?: $text;
|
||
}
|
||
return $text !== '' ? $text : 'ohne-titel';
|
||
}
|
||
|
||
/** Kurzkürzel der Quelle für den Dateinamen (BR, BFV, …). */
|
||
function chronik_source_tag(string $host): string
|
||
{
|
||
$host = strtolower(preg_replace('/^www\./', '', $host));
|
||
$tags = [
|
||
'infranken.de' => 'BR',
|
||
'bayerische-rundschau.de' => 'BR',
|
||
'frankenpost.de' => 'FP',
|
||
'fraenkischertag.de' => 'FT',
|
||
'kicker.de' => 'KICKER',
|
||
'europlan-online.de' => 'EUROPLAN',
|
||
'anpfiff.info' => 'ANPFIFF',
|
||
'turneninkulmbach.info' => 'TURNEN08',
|
||
'tsv1908kulmbach.de' => 'TSV08',
|
||
'bfv.de' => 'BFV',
|
||
'fussball.de' => 'FUSSBALLDE',
|
||
'deutsche-turnliga.de' => 'DTL',
|
||
'tsv08kulmbach.de' => 'TSV08',
|
||
'facebook.com' => 'FB',
|
||
'instagram.com' => 'IG',
|
||
'de.wikipedia.org' => 'WIKIPEDIA',
|
||
'commons.wikimedia.org' => 'COMMONS',
|
||
'digipress.digitale-sammlungen.de' => 'BSB',
|
||
'web.archive.org' => 'WAYBACK',
|
||
];
|
||
foreach ($tags as $needle => $tag) {
|
||
if ($host === $needle || str_ends_with($host, '.' . $needle)) {
|
||
return $tag;
|
||
}
|
||
}
|
||
return strtoupper(chronik_slug(explode('.', $host)[0] ?? 'quelle', 12));
|
||
}
|
||
|
||
/** Registerzeile anhängen (CSV, Semikolon — öffnet sich in Excel/LibreOffice ohne Import-Dialog). */
|
||
function chronik_register_append(array $row): void
|
||
{
|
||
$path = chronik_register_path();
|
||
$dir = dirname($path);
|
||
if (!is_dir($dir)) {
|
||
mkdir($dir, 0775, true);
|
||
}
|
||
|
||
$cols = ['datei', 'datum', 'titel', 'art', 'quelle', 'url', 'urheber', 'rechte', 'klaeren', 'abgerufen', 'notiz'];
|
||
$new = !is_file($path);
|
||
|
||
$fh = fopen($path, 'a');
|
||
if (!$fh) {
|
||
return;
|
||
}
|
||
flock($fh, LOCK_EX);
|
||
if ($new) {
|
||
fputcsv($fh, $cols, ';', '"', '\\');
|
||
}
|
||
fputcsv($fh, array_map(static fn(string $c): string => (string) ($row[$c] ?? ''), $cols), ';', '"', '\\');
|
||
flock($fh, LOCK_UN);
|
||
fclose($fh);
|
||
}
|
||
|
||
/** Schon im Register? Verhindert Dubletten bei wiederholten Läufen. */
|
||
function chronik_register_has_url(string $url): bool
|
||
{
|
||
$path = chronik_register_path();
|
||
if (!is_file($path)) {
|
||
return false;
|
||
}
|
||
$fh = fopen($path, 'r');
|
||
if (!$fh) {
|
||
return false;
|
||
}
|
||
$found = false;
|
||
while (($row = fgetcsv($fh, 0, ';', '"', '\\')) !== false) {
|
||
if (($row[5] ?? '') === $url) {
|
||
$found = true;
|
||
break;
|
||
}
|
||
}
|
||
fclose($fh);
|
||
return $found;
|
||
}
|
||
|
||
/** Beleg-Sidecar neben dem Fundstück: alles, was der Dateiname nicht fasst. */
|
||
function chronik_sidecar_text(array $row, string $hinweis): string
|
||
{
|
||
$lines = [
|
||
'FUNDSTÜCK FÜR DIE VEREINSCHRONIK — TSV 08 Kulmbach',
|
||
str_repeat('=', 52),
|
||
'',
|
||
'Titel: ' . ($row['titel'] ?? ''),
|
||
'Datum: ' . ($row['datum'] ?? '') . ' (00 = unbekannt)',
|
||
'Art: ' . ($row['art'] ?? ''),
|
||
'Quelle: ' . ($row['quelle'] ?? ''),
|
||
'URL: ' . ($row['url'] ?? ''),
|
||
'Urheber: ' . (($row['urheber'] ?? '') !== '' ? $row['urheber'] : 'nicht angegeben'),
|
||
'Abgerufen am: ' . ($row['abgerufen'] ?? ''),
|
||
'',
|
||
'RECHTE: ' . ($row['rechte'] ?? ''),
|
||
' ' . (($row['klaeren'] ?? '') === 'ja' ? '>>> VOR VERÖFFENTLICHUNG KLÄREN <<<' : 'nutzbar'),
|
||
'',
|
||
wordwrap($hinweis, 88, "\n"),
|
||
];
|
||
if (($row['notiz'] ?? '') !== '') {
|
||
$lines[] = '';
|
||
$lines[] = 'Notiz:';
|
||
$lines[] = wordwrap((string) $row['notiz'], 88, "\n");
|
||
}
|
||
return implode("\n", $lines) . "\n";
|
||
}
|
||
|
||
/**
|
||
* 00_RECHTE-ZU-KLAEREN.txt aus dem Register neu schreiben.
|
||
* Bewusst generiert statt fortgeschrieben: die Datei soll immer den aktuellen Stand zeigen,
|
||
* auch wenn im Register etwas auf „geklärt" gesetzt wurde.
|
||
*/
|
||
function chronik_write_rights_todo(): int
|
||
{
|
||
$path = chronik_register_path();
|
||
if (!is_file($path)) {
|
||
return 0;
|
||
}
|
||
|
||
$byRights = [];
|
||
$count = 0;
|
||
$fh = fopen($path, 'r');
|
||
if (!$fh) {
|
||
return 0;
|
||
}
|
||
fgetcsv($fh, 0, ';', '"', '\\'); // Kopfzeile
|
||
while (($row = fgetcsv($fh, 0, ';', '"', '\\')) !== false) {
|
||
if (($row[8] ?? '') !== 'ja') {
|
||
continue;
|
||
}
|
||
$byRights[$row[7] ?? 'Ungeklärt'][] = [
|
||
'datei' => $row[0] ?? '',
|
||
'titel' => $row[2] ?? '',
|
||
'datum' => $row[1] ?? '',
|
||
'url' => $row[5] ?? '',
|
||
// Der Verlag verlangt den Bildnachweis namentlich — wo er bekannt ist,
|
||
// gehört er in die Anfrage-Anlage, nicht nur ins Register.
|
||
'urheber' => $row[6] ?? '',
|
||
];
|
||
$count++;
|
||
}
|
||
fclose($fh);
|
||
|
||
$out = [
|
||
'RECHTE, DIE VOR DER VERÖFFENTLICHUNG ZU KLÄREN SIND',
|
||
str_repeat('=', 52),
|
||
'',
|
||
'Diese Datei wird von bin/chronik-add.php erzeugt — nicht von Hand pflegen,',
|
||
'sondern die Spalte „klaeren" in docs/chronik/register.csv auf „nein" setzen,',
|
||
'sobald eine Freigabe vorliegt, und das Skript erneut laufen lassen.',
|
||
'',
|
||
'Sammeln und intern sichten ist unproblematisch. Erst der Abdruck in der Chronik',
|
||
'oder die Veröffentlichung auf der Website braucht eine Erlaubnis.',
|
||
'',
|
||
"Offen: {$count} Fundstücke",
|
||
'',
|
||
];
|
||
|
||
foreach ($byRights as $rechte => $items) {
|
||
$out[] = str_repeat('-', 52);
|
||
$out[] = $rechte . ' (' . count($items) . ')';
|
||
$out[] = str_repeat('-', 52);
|
||
foreach ($items as $i) {
|
||
$out[] = ' · ' . $i['datum'] . ' ' . $i['titel'];
|
||
$out[] = ' ' . $i['datei'];
|
||
if ($i['urheber'] !== '') {
|
||
$out[] = ' ' . $i['urheber'];
|
||
}
|
||
if ($i['url'] !== '') {
|
||
$out[] = ' ' . $i['url'];
|
||
}
|
||
}
|
||
$out[] = '';
|
||
}
|
||
|
||
$out[] = 'Stand: ' . date('d.m.Y H:i');
|
||
file_put_contents(chronik_root() . '/' . CHRONIK_RECHTE, implode("\n", $out) . "\n");
|
||
|
||
return $count;
|
||
}
|
||
|
||
/**
|
||
* Entwurf der Nachdruck-Anfrage an den Verlag, als Datei im Ordner.
|
||
*
|
||
* Steht hier und nicht im Repo, weil der Vorstand sie braucht, nicht die Entwicklung — und
|
||
* weil sie neben den Fundstücken liegen soll, auf die sie sich bezieht. Der wichtigste Satz
|
||
* darin ist die Bitte um EINE Freigabe für alle drei Titel: Bayerische Rundschau, inFranken
|
||
* und Frankenpost gehören zur selben Mediengruppe, drei Einzelanfragen wären unnötig.
|
||
*/
|
||
function chronik_verlagsanfrage_text(): string
|
||
{
|
||
return <<<TXT
|
||
ENTWURF — ANFRAGE NACHDRUCKRECHTE
|
||
=================================
|
||
|
||
Für die Vereinschronik zum 120-jährigen Bestehen (2028) wollen wir Zeitungsberichte und
|
||
Pressefotos verwenden. Die gehören dem Verlag, nicht uns — auch die, in denen wir vorkommen.
|
||
|
||
Bitte früh abschicken. Eine Absage im Jahr 2027 wirft das Chronik-Konzept um, eine Absage
|
||
2026 kostet nichts.
|
||
|
||
Empfänger: Mediengruppe Oberfranken – Zeitungsverlage GmbH & Co. KG
|
||
(deckt Bayerische Rundschau, inFranken.de UND Frankenpost gemeinsam ab)
|
||
|
||
Vor dem Versand prüfen: aktuelle Anschrift und zuständige Ansprechperson auf der
|
||
Verlagsseite nachsehen, die Liste im Anhang aus docs/chronik/register.csv erzeugen.
|
||
|
||
---------------------------------------------------------------------------
|
||
|
||
Betreff: Nachdruckrechte für die Vereinschronik zum 120-jährigen Jubiläum des
|
||
TSV 08 Kulmbach (2028)
|
||
|
||
Sehr geehrte Damen und Herren,
|
||
|
||
der TSV 1908 Kulmbach e. V. begeht im Jahr 2028 sein 120-jähriges Bestehen. Aus diesem
|
||
Anlass erarbeiten wir eine Vereinschronik.
|
||
|
||
Über die Jahrzehnte hat die Bayerische Rundschau das Vereinsleben in Kulmbach begleitet.
|
||
Ihre Berichte sind für unsere Vereinsgeschichte häufig die einzige erhaltene Quelle.
|
||
Wir möchten Sie deshalb um die Erlaubnis bitten, einzelne Artikel und Pressefotos in der
|
||
Chronik abzudrucken — jeweils mit vollständiger Quellenangabe (Titel, Datum, Autorin
|
||
oder Autor, Bildnachweis).
|
||
|
||
Konkret geht es um:
|
||
|
||
· Umfang: voraussichtlich [ANZAHL] Artikel und [ANZAHL] Fotos
|
||
(Aufstellung im Anhang)
|
||
· Verwendung: gedruckte Festschrift, Auflage ca. [ANZAHL] Exemplare,
|
||
Abgabe an Mitglieder und Gäste, nicht gewerblich
|
||
· zusätzlich: Darstellung einzelner Ausschnitte im Historie-Bereich unserer
|
||
Vereinswebsite tsv08kulmbach.de
|
||
· Zeitraum: Erscheinen der Chronik im Jubiläumsjahr 2028
|
||
|
||
Sollten für die Nutzung Gebühren anfallen, bitten wir um eine Auskunft über die Konditionen.
|
||
Als gemeinnütziger Verein sind wir für ein Entgegenkommen dankbar.
|
||
|
||
Für Rückfragen stehen wir gerne zur Verfügung.
|
||
|
||
Mit freundlichen Grüßen
|
||
|
||
[NAME], [FUNKTION]
|
||
TSV 1908 Kulmbach e. V.
|
||
[ANSCHRIFT / TELEFON / E-MAIL]
|
||
|
||
Anlage: Aufstellung der gewünschten Artikel und Fotos
|
||
|
||
---------------------------------------------------------------------------
|
||
|
||
NOCH ZU KLÄREN, UNABHÄNGIG VOM VERLAG
|
||
-------------------------------------
|
||
· Private Fotos von Mitgliedern: Einverständnis der abgebildeten Personen einholen.
|
||
Bei Kindern die Eltern fragen. Am einfachsten gleich beim Einsammeln miterledigen.
|
||
· Wappen anderer Vereine: nur mit deren Zustimmung abbilden.
|
||
· Fotos ohne bekannten Urheber: Herkunft ermitteln, solange es noch jemand weiß.
|
||
In zwei Jahren weiß es niemand mehr.
|
||
TXT;
|
||
}
|
||
|
||
function chronik_readme_text(): string
|
||
{
|
||
return <<<TXT
|
||
VEREINSHISTORIE — MATERIALSAMMLUNG FÜR DAS JUBILÄUM 2028
|
||
========================================================
|
||
|
||
Hier sammeln wir alles, was in die Vereinschronik zum 120-jährigen Bestehen
|
||
einfließen kann: Fotos, Zeitungsausschnitte, Urkunden, Festschriften, Programmhefte,
|
||
Mannschaftsbilder, Wimpel, Protokolle.
|
||
|
||
Lieber zu viel als zu wenig. Aussortiert wird später.
|
||
|
||
|
||
WO KOMMT ES HIN?
|
||
----------------
|
||
In den Ordner des Jahrzehnts, aus dem es stammt:
|
||
|
||
1908-1929 1930-1949 1950-1969 1970-1989 1990-2009 2010-2028
|
||
|
||
Weißt du das Jahr nicht? -> Undatiert/ (wir ordnen es später zu)
|
||
Festschrift, Satzung, Urkunde, Protokoll? -> Festschriften-und-Dokumente/
|
||
|
||
|
||
WIE SOLL ES HEISSEN?
|
||
--------------------
|
||
Datum zuerst, dann worum es geht:
|
||
|
||
1972-07-15_Einweihung-Sportheim.jpg
|
||
1985-00-00_Mannschaftsfoto-Erste.jpg (Monat/Tag unbekannt -> 00)
|
||
1962-00-00_Aufstieg-Bericht_BR.jpg (Quelle hinten, hier: Bayerische Rundschau)
|
||
|
||
Das Datum vorn sorgt dafür, dass die Liste sich von selbst richtig sortiert.
|
||
Wenn du den Namen nicht hinbekommst: trotzdem hochladen. Ein falsch benanntes
|
||
Foto ist unendlich viel besser als ein Foto, das im Schuhkarton bleibt.
|
||
|
||
|
||
WAS UNS BEI JEDEM STÜCK HILFT
|
||
-----------------------------
|
||
Wenn du es weißt, schreib es dazu (in den Dateinamen oder als kurze Textdatei daneben):
|
||
· Wann ungefähr?
|
||
· Wer ist zu sehen?
|
||
· Wo aufgenommen?
|
||
· Wer hat fotografiert / wo stand der Artikel?
|
||
|
||
Der letzte Punkt ist der wichtigste und der, der am häufigsten fehlt. Ohne ihn
|
||
dürfen wir das Bild später womöglich nicht drucken.
|
||
|
||
|
||
RECHTE
|
||
------
|
||
Zeitungsartikel und Pressefotos gehören dem Verlag, nicht uns — auch wenn wir
|
||
darin vorkommen. Was noch freigegeben werden muss, steht in
|
||
|
||
00_RECHTE-ZU-KLAEREN.txt
|
||
|
||
Private Aufnahmen von Vereinsmitgliedern sind unkritisch, solange die abgebildeten
|
||
Personen mit einer Veröffentlichung einverstanden sind.
|
||
|
||
|
||
Fragen? Melde dich bei der Vorstandschaft.
|
||
TXT;
|
||
}
|