49 lines
1.5 KiB
PHP

<?php declare(strict_types=1);
namespace App\Http\Middleware;
use App\Enums\CacheTag;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Closure;
class ProjectAndLanguage extends ProjectLanguage
{
public function handle(Request $request, Closure $next): Response
{
$projectCode = $request->route()?->parameter('project');
if ($projectCode === null) {
abort(Response::HTTP_NOT_FOUND);
}
$seconds = 3600;
$project = CacheTag::Project->getCache()->remember(self::class . $projectCode, $seconds, function () use ($projectCode) {
return $this->projectRepository->getProjectByCode($projectCode) ?? false;
});
if ($project === false) {
abort(Response::HTTP_NOT_FOUND);
}
if (
$project->http_host !== null
&& $project->http_host !== $request->getSchemeAndHttpHost()
) {
return redirect($project->http_host, 302);
}
$languageCode = $request->route()?->parameter('language');
$websiteTranslations = $this->getWebsiteTranslations($project, $languageCode);
if (\is_null($websiteTranslations)) {
abort(Response::HTTP_NOT_FOUND);
}
unset($request->route()->parameters['project']);
unset($request->route()->parameters['language']);
$request->attributes->set('project', $project);
$request->attributes->set('websiteTranslations', $websiteTranslations);
return $next($request);
}
}