]> _ Git - cubist_cms-back.git/commitdiff
done #3161 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 23 Oct 2019 13:40:54 +0000 (15:40 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 23 Oct 2019 13:40:54 +0000 (15:40 +0200)
src/app/Middleware/EmailObfuscate.php
src/app/Middleware/LocaleSelector.php

index 81e4e214cd380a344a713883fe77a4e55234d839..9bb1dde76a98c5ba415c60e77cb855ef5ad7d750 100644 (file)
@@ -15,7 +15,7 @@ class EmailObfuscate
 
         $response = $next($request);
 
-        if (strpos($request->getPathInfo(), '/admin/') === 0) {
+        if (strpos($request->getPathInfo(), '/admin') === 0) {
             return $response;
         }
 
index 7346df851b61804c82b1cab8afaaa8b0d4ee49fd..ef42e2e864bd2aabade95dfb4d6a7cf66f493bb5 100644 (file)
@@ -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');
+
+    }
 }