Files
tsv08kulmbach-website/app/components/matchcenter-section.php
fs 3a591fe8d0 Matchcenter: Saison-Tabs, Vorsaison-Archiv & gehärteter Cache-Write
- Sync schreibt Cache jetzt fehlersicher: json_encode mit JSON_THROW_ON_ERROR
  + Rückgabeprüfung von file_put_contents/rename → ein defektes UTF-8-Zeichen
  aus der BFV-API kann den guten Cache nicht mehr leerschreiben (alter Cache
  bleibt via $fail unangetastet)
- Vorsaison wird bei erkanntem compoundId-Wechsel einmalig archiviert (previous),
  pro Team compound_id + abgeleitetes season-Label + stale-Flag persistiert
- Aktuelle Saison ist immer sichtbar (auch leer), Wechsel zur Vorsaison über
  wiederverwendete Stripe-Tabbar (group-tabs); neue Komponente matchcenter-season
- Leere aktuelle Saison zeigt Hinweis statt leerer Fläche

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 00:51:14 +02:00

77 lines
3.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
declare(strict_types=1);
/**
* Matchcenter-Sektion einer Mannschaft (kicker-Stil): Kopf (Name + Liga + Link zur
* Mannschaftsseite), darunter die aktuelle Saison (Tabelle + Spiele) via
* matchcenter-season. Liegt eine archivierte Vorsaison vor, sind beide Saisons über
* eine Stripe-Tabbar umschaltbar (wiederverwendetes group-tabs-Pattern, ohne JS
* gestapelt sichtbar). Props: $team (data/matchcenter.json → teams[]).
*/
$team = $team ?? [];
$next = $team['next_matches'] ?? [];
$results = $team['last_results'] ?? [];
$table = $team['table'] ?? [];
$league = $team['league'] ?? null;
$name = (string) ($team['name'] ?? '');
$season = (string) ($team['season'] ?? '');
$previous = $team['previous'] ?? null;
$hasPrevious = is_array($previous)
&& (($previous['last_results'] ?? []) !== [] || ($previous['table'] ?? []) !== []);
$key = preg_replace('/[^a-z0-9-]+/', '', strtolower((string) ($team['key'] ?? '')));
$curCaption = 'Tabelle ' . $name . ($season !== '' ? ' · ' . $season : ($league ? ' · ' . $league : ''));
$tabCur = $season !== '' ? $season : 'Aktuelle Saison';
?>
<section class="section matchcenter-team" id="team-<?= e($key) ?>">
<div class="container">
<div class="matchcenter-team__head">
<div class="matchcenter-team__heading">
<h2><?= e($name) ?></h2>
<?php if ($league): ?>
<p class="matchcenter-team__league"><?= icon('trophy', 'matchcenter-team__league-icon') ?><?= e($league) ?></p>
<?php endif; ?>
</div>
<?php if (!empty($team['slug'])): ?>
<a class="btn btn--outline" href="<?= e(url($team['slug'])) ?>">Zur Mannschaft</a>
<?php endif; ?>
</div>
<?php if (!$hasPrevious): ?>
<?php component('matchcenter-season', [
'next' => $next, 'results' => $results, 'table' => $table, 'caption' => $curCaption,
]); ?>
<?php else: ?>
<?php
$prevSeason = (string) ($previous['season'] ?? '');
$prevLeague = $previous['league'] ?? $league;
$tabPrev = $prevSeason !== '' ? $prevSeason : 'Vorsaison';
$prevCaption = 'Tabelle ' . $name . ($prevSeason !== '' ? ' · ' . $prevSeason : '');
?>
<div class="matchcenter-team__seasons group-tabs" data-group-tabs>
<div class="group-tabs__bar matchcenter-team__seasons-bar" role="tablist" aria-label="Saison wählen <?= e($name) ?>">
<button class="group-tabs__tab" role="tab" type="button"
id="mc-tab-<?= e($key) ?>-cur" aria-controls="mc-panel-<?= e($key) ?>-cur" aria-selected="true"
><?= e($tabCur) ?></button>
<button class="group-tabs__tab" role="tab" type="button"
id="mc-tab-<?= e($key) ?>-prev" aria-controls="mc-panel-<?= e($key) ?>-prev" aria-selected="false"
><?= e($tabPrev) ?></button>
</div>
<div class="matchcenter-team__season-panel" role="tabpanel"
id="mc-panel-<?= e($key) ?>-cur" aria-labelledby="mc-tab-<?= e($key) ?>-cur" tabindex="0">
<?php component('matchcenter-season', [
'next' => $next, 'results' => $results, 'table' => $table, 'caption' => $curCaption,
]); ?>
</div>
<div class="matchcenter-team__season-panel" role="tabpanel"
id="mc-panel-<?= e($key) ?>-prev" aria-labelledby="mc-tab-<?= e($key) ?>-prev" tabindex="0">
<?php component('matchcenter-season', [
'results' => $previous['last_results'] ?? [], 'table' => $previous['table'] ?? [],
'caption' => $prevCaption, 'is_previous' => true,
]); ?>
</div>
</div>
<?php endif; ?>
</div>
</section>