QA-Luecke geschlossen: Legacy-Medien-URLs redirecten wieder (301)
Die Scope-Doku fuehrte den /thumbnails-Redirect als "ANGEPASST", im Code existierte er nicht — alte Symfony-Bild-URLs (/thumbnails/..., /uploads/ ...) liefen ins 404. Neuer LegacyMediaRedirectController mappt den Original-Dateinamen (bleibt beim Medien-Import erhalten) auf die neue Storage-URL fuer PM-Bilder und Firmenlogos; unbekannte Dateien bleiben 404. Gefunden bei der R6.1-Vorpruefung. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
90fd171e37
commit
d754ef4bef
3 changed files with 120 additions and 0 deletions
55
app/Http/Controllers/Web/LegacyMediaRedirectController.php
Normal file
55
app/Http/Controllers/Web/LegacyMediaRedirectController.php
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Company;
|
||||
use App\Models\PressReleaseImage;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
|
||||
/**
|
||||
* Redirect alter Symfony-Medien-URLs (QA-Punkt "Alter /thumbnails/...-Link
|
||||
* redirectet korrekt", 06-FEATURES-SCOPE §11/§15): Die Altportale lieferten
|
||||
* Bilder unter /uploads/... und /thumbnails/...; der Medien-Import
|
||||
* (migrate:legacy-media) behält den Original-Dateinamen im neuen Pfad —
|
||||
* darüber wird hier 301 auf die neue Storage-URL geleitet. Unbekannte
|
||||
* Dateien bleiben 404.
|
||||
*/
|
||||
class LegacyMediaRedirectController extends Controller
|
||||
{
|
||||
public function __invoke(string $prefix, string $dir, string $path): RedirectResponse
|
||||
{
|
||||
$filename = basename($path);
|
||||
|
||||
abort_if($filename === '' || $filename === '.', 404);
|
||||
|
||||
$target = str_contains($dir, 'company')
|
||||
? $this->companyLogoUrl($filename)
|
||||
: $this->pressReleaseImageUrl($filename);
|
||||
|
||||
abort_if($target === null, 404);
|
||||
|
||||
return redirect($target, 301);
|
||||
}
|
||||
|
||||
private function pressReleaseImageUrl(string $filename): ?string
|
||||
{
|
||||
$image = PressReleaseImage::query()
|
||||
->where('path', 'like', '%/'.$filename)
|
||||
->orderBy('id')
|
||||
->first();
|
||||
|
||||
return $image?->url();
|
||||
}
|
||||
|
||||
private function companyLogoUrl(string $filename): ?string
|
||||
{
|
||||
$company = Company::query()
|
||||
->withoutGlobalScopes()
|
||||
->where('logo_path', 'like', '%/'.$filename)
|
||||
->orderBy('id')
|
||||
->first();
|
||||
|
||||
return $company?->logoUrl();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue