From 8ff49b006c39621d753a1569d69f7f7303440c50 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Wed, 8 Jan 2020 14:47:41 +0100 Subject: [PATCH] wip #3274 @1 --- src/app/Application.php | 21 ++++++++++ src/app/Facades/App.php | 18 +++++++++ src/app/Magic/Models/Locale.php | 16 +++++--- src/app/Magic/Models/Settings.php | 11 +++++- src/app/Middleware/VariantSelector.php | 53 ++++++++++++++++++++++++++ 5 files changed, 111 insertions(+), 8 deletions(-) create mode 100644 src/app/Facades/App.php create mode 100644 src/app/Middleware/VariantSelector.php diff --git a/src/app/Application.php b/src/app/Application.php index c083b35..324396d 100644 --- a/src/app/Application.php +++ b/src/app/Application.php @@ -4,6 +4,11 @@ namespace Cubist\Backpack; class Application extends \Illuminate\Foundation\Application { + /** + * @var string + */ + protected $variant = 'default'; + /** * @return array */ @@ -19,4 +24,20 @@ class Application extends \Illuminate\Foundation\Application { return count($this->getVariants()) > 0; } + + /** + * @param string $variant + */ + public function setVariant(string $variant): void + { + $this->variant = $variant; + } + + /** + * @return string + */ + public function getVariant(): string + { + return $this->variant; + } } diff --git a/src/app/Facades/App.php b/src/app/Facades/App.php new file mode 100644 index 0000000..cfd6049 --- /dev/null +++ b/src/app/Facades/App.php @@ -0,0 +1,18 @@ +variant) { + continue; + } $locales[$locale->locale] = $locale; if ($locale->default) { $defaultLocale = $locale->locale; @@ -83,9 +87,9 @@ class Locale extends CubistMagicAbstractModel /** * @return Locale[] */ - public static function getLocales() + public static function getLocales($filterVariant = true) { - return self::getLocalesData()['locales']; + return self::getLocalesData($filterVariant)['locales']; } public static function getLocalesCodes() @@ -101,9 +105,9 @@ class Locale extends CubistMagicAbstractModel /** * @return string */ - public static function getDefaultLocale() + public static function getDefaultLocale($filterVariant = true) { - return self::getLocalesData()['default']; + return self::getLocalesData($filterVariant)['default']; } public static function getLocaleClass() diff --git a/src/app/Magic/Models/Settings.php b/src/app/Magic/Models/Settings.php index 8e2f975..5ccd7b4 100644 --- a/src/app/Magic/Models/Settings.php +++ b/src/app/Magic/Models/Settings.php @@ -18,7 +18,7 @@ class Settings extends CubistMagicTranslatableModel protected $_options = ['name' => 'settings', 'singular' => 'paramètre', 'plural' => 'paramètres', - 'oneinstance' => true]; + 'oneinstance' => false]; public function registerMediaConversions(Media $media = null) { @@ -98,6 +98,13 @@ class Settings extends CubistMagicTranslatableModel protected function _seo() { + $this->addField(['name' => 'variant', + 'label' => 'Variante du site', + 'type' => 'SiteVariant', + 'translatable' => false, + 'tab' => 'Variante', + 'column' => true]); + $this->addField(['name' => 'meta_title', 'label' => 'Titre long par défaut', 'type' => 'Text', @@ -155,7 +162,7 @@ class Settings extends CubistMagicTranslatableModel public static function getData() { - $locale=App::getLocale(); + $locale = App::getLocale(); if (!isset(self::$_data[$locale])) { $settings_class = self::getSettingsClass(); $entity = $settings_class::find(1); diff --git a/src/app/Middleware/VariantSelector.php b/src/app/Middleware/VariantSelector.php new file mode 100644 index 0000000..b63038f --- /dev/null +++ b/src/app/Middleware/VariantSelector.php @@ -0,0 +1,53 @@ +getResponse(); + } + + $locales = Locale::getLocales(); + $variant = $this->_getVariantByDomain($request, $locales); + App::setVariant($variant); + + return $this->getResponse(); + } + + /** + * @param Request $request + * @param Locale[] $locales + * @return mixed|null + */ + protected function _getVariantByDomain(Request $request, $locales) + { + $httpdomain = $request->getHttpHost(); + $variants = App::getVariants(); + $default = $variants[0]; + $map = []; + foreach ($locales as $locale) { + $domains = $locale->domains; + if (is_string($locale->domains)) { + $domains = json_decode($locale->domains, true); + } + foreach ($domains as $domain) { + $map[trim($domain['domain'])] = $locale->variant; + } + } + return $map[$httpdomain] ?? $default; + } + + +} -- 2.39.5