49 lines
1.5 KiB
PHP
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);
|
|
}
|
|
}
|