From: Vincent Vanwaelscappel Date: Wed, 23 Oct 2019 13:40:54 +0000 (+0200) Subject: done #3161 @1.5 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=bcbdcec8b61a77d19f42c1e05e9cbf63e05173af;p=cubist_cms-back.git done #3161 @1.5 --- diff --git a/src/app/Middleware/EmailObfuscate.php b/src/app/Middleware/EmailObfuscate.php index 81e4e21..9bb1dde 100644 --- a/src/app/Middleware/EmailObfuscate.php +++ b/src/app/Middleware/EmailObfuscate.php @@ -15,7 +15,7 @@ class EmailObfuscate $response = $next($request); - if (strpos($request->getPathInfo(), '/admin/') === 0) { + if (strpos($request->getPathInfo(), '/admin') === 0) { return $response; } diff --git a/src/app/Middleware/LocaleSelector.php b/src/app/Middleware/LocaleSelector.php index 7346df8..ef42e2e 100644 --- a/src/app/Middleware/LocaleSelector.php +++ b/src/app/Middleware/LocaleSelector.php @@ -4,26 +4,48 @@ namespace Cubist\Backpack\app\Middleware; use Closure; use Cubist\Backpack\app\Magic\Models\Locale; +use Illuminate\Auth\SessionGuard; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; +use Illuminate\Support\Facades\Auth; class LocaleSelector { + + public function handle(Request $request, Closure $next) { $class = Locale::getLocaleClass(); - $locales = $class::where(['enabled' => 1])->orderBy('default', 'DESC')->get(); - foreach ($locales as $locale) { + $localeEntities = $class::orderBy('default', 'DESC')->get(); + $locales = []; + foreach ($localeEntities as $locale) { + $locales[$locale->locale] = $locale; if ($locale->default) { $defaultLocale = $locale->locale; - break; } } $selectedLocale = $this->_getLocaleByDomain($request, $locales); - if (null === $selectedLocale) { - $selectedLocale = $defaultLocale; + // If the locale is not found, we redirect to the default + // If the locale is disabled, the user is not an admin and the url + // is not in the backend, we redirect too. + + if ( + null === $selectedLocale || + !( + $locales[$selectedLocale]->enabled || + $this->_isAdmin() + ) + ) { + $domain = $this->_getDomainByLocale($locales[$defaultLocale]); + // redirect to default locale + if (null === $domain) { + abort(401); + } + $protocol = $_SERVER['HTTPS'] ? 'https://' : 'http://'; + $url = $protocol . $domain; + return redirect($url); } $this->setLocale($selectedLocale); @@ -39,6 +61,21 @@ class LocaleSelector app('translator')->setFallback($locale); } + protected function _getDomainByLocale($locale) + { + $domains = $locale->domains; + if (is_string($locale->domains)) { + $domains = json_decode($locale->domains, true); + } + foreach ($domains as $domain) { + if ($domain['env'] !== App::environment()) { + continue; + } + return $domain['domain']; + } + return null; + } + /** * @param Request $request * @param Locale[] $locales @@ -63,4 +100,14 @@ class LocaleSelector } return $map[$httpdomain] ?? null; } + + protected function _isAdmin() + { + $user = backpack_user(); + if (null === $user) { + return false; + } + return $user->can('backpack_translation'); + + } }