widerrufsbelehrung hinzugefügt und in den checkout mit eingebunden. refund ins backend eingebaut.

This commit is contained in:
Codex Agent
2025-12-07 11:57:05 +01:00
parent e092f72475
commit 1d3d49e05a
44 changed files with 1143 additions and 71 deletions

View File

@@ -20,12 +20,12 @@ class LegalPageController extends Controller
{
public function show(Request $request, string $locale, ?string $slug = null): Response
{
$resolvedSlug = $this->resolveSlug($slug);
$slugCandidates = $this->resolveSlugs($slug);
$page = null;
try {
$page = LegalPage::query()
->where('slug', $resolvedSlug)
->whereIn('slug', $slugCandidates)
->where('is_published', true)
->orderByDesc('version')
->first();
@@ -37,7 +37,7 @@ class LegalPageController extends Controller
$locale = $request->route('locale', app()->getLocale());
if (! $page) {
$fallback = $this->loadFallbackDocument($resolvedSlug, $locale);
$fallback = $this->loadFallbackDocument($slugCandidates, $locale);
if (! $fallback) {
abort(404);
@@ -50,7 +50,7 @@ class LegalPageController extends Controller
'effectiveFrom' => null,
'effectiveFromLabel' => null,
'versionLabel' => null,
'slug' => $resolvedSlug,
'slug' => $slugCandidates[0],
]);
}
@@ -58,7 +58,8 @@ class LegalPageController extends Controller
?? $page->title[$page->locale_fallback]
?? $page->title['de']
?? $page->title['en']
?? Str::title($resolvedSlug);
?? Str::title($slugCandidates[0]);
$title = Str::ucfirst($title);
$bodyMarkdown = $page->body_markdown[$locale]
?? $page->body_markdown[$page->locale_fallback]
@@ -76,11 +77,11 @@ class LegalPageController extends Controller
? __('legal.effective_from', ['date' => $effectiveFrom->translatedFormat('d. F Y')])
: null,
'versionLabel' => __('legal.version', ['version' => $page->version]),
'slug' => $resolvedSlug,
'slug' => $slugCandidates[0],
]);
}
private function resolveSlug(?string $slug): string
private function resolveSlugs(?string $slug): array
{
$slug = strtolower($slug ?? '');
@@ -88,9 +89,20 @@ class LegalPageController extends Controller
'imprint' => 'impressum',
'privacy' => 'datenschutz',
'terms' => 'agb',
'withdrawal' => 'widerrufsbelehrung',
'cancellation' => 'widerrufsbelehrung',
'cancellation-policy' => 'widerrufsbelehrung',
'widerruf' => 'widerrufsbelehrung',
];
return $aliases[$slug] ?? $slug ?: 'impressum';
$canonical = $aliases[$slug] ?? $slug ?: 'impressum';
// Support both slugs for withdrawal in case DB uses a shorter slug
$fallbacks = $canonical === 'widerrufsbelehrung'
? ['widerrufsbelehrung', 'widerruf']
: [$canonical];
return array_values(array_unique($fallbacks));
}
private function convertMarkdownToHtml(string $markdown): string
@@ -111,7 +123,7 @@ class LegalPageController extends Controller
return trim((string) $converter->convert($markdown));
}
private function loadFallbackDocument(string $slug, string $locale): ?array
private function loadFallbackDocument(array $slugCandidates, string $locale): ?array
{
$candidates = array_unique([
strtolower($locale),
@@ -120,20 +132,22 @@ class LegalPageController extends Controller
'en',
]);
foreach ($candidates as $candidateLocale) {
$path = base_path("docs/legal/{$slug}-{$candidateLocale}.md");
foreach ($slugCandidates as $slug) {
foreach ($candidates as $candidateLocale) {
$path = base_path("docs/legal/{$slug}-{$candidateLocale}.md");
if (! is_file($path)) {
continue;
if (! is_file($path)) {
continue;
}
$markdown = (string) file_get_contents($path);
$title = $this->extractTitleFromMarkdown($markdown) ?? Str::title($slug);
return [
'markdown' => $markdown,
'title' => $title,
];
}
$markdown = (string) file_get_contents($path);
$title = $this->extractTitleFromMarkdown($markdown) ?? Str::title($slug);
return [
'markdown' => $markdown,
'title' => $title,
];
}
return null;