class Application extends \Illuminate\Foundation\Application
{
+ /**
+ * @var string
+ */
+ protected $variant = 'default';
+
/**
* @return array
*/
{
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;
+ }
}
--- /dev/null
+<?php
+
+namespace Cubist\Backpack\Facades;
+
+use Illuminate\Support\Facades\App as Base;
+
+/**
+ * Class App
+ * @package Cubist\Backpack\Facades
+ * @method static array getVariants()
+ * @method static bool hasVariant()
+ * @method static void setVariant(string $variant)
+ * @method static string getVariant()
+ */
+class App extends Base
+{
+
+}
namespace Cubist\Backpack\app\Magic\Models;
-use Illuminate\Support\Facades\App;
+use Cubist\Backpack\Facades\App;
class Locale extends CubistMagicAbstractModel
{
/**
* @return array
*/
- public static function getLocalesData()
+ public static function getLocalesData($filterVariant = true)
{
+ $variant = App::getVariant();
if (self::$_locales === null) {
$class = Locale::getLocaleClass();
$defaultLocale = null;
$locales = [];
foreach ($localeEntities as $locale) {
+ if ($filterVariant && $variant !== $locale->variant) {
+ continue;
+ }
$locales[$locale->locale] = $locale;
if ($locale->default) {
$defaultLocale = $locale->locale;
/**
* @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()
/**
* @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()
protected $_options = ['name' => 'settings',
'singular' => 'paramètre',
'plural' => 'paramètres',
- 'oneinstance' => true];
+ 'oneinstance' => false];
public function registerMediaConversions(Media $media = null)
{
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',
public static function getData()
{
- $locale=App::getLocale();
+ $locale = App::getLocale();
if (!isset(self::$_data[$locale])) {
$settings_class = self::getSettingsClass();
$entity = $settings_class::find(1);
--- /dev/null
+<?php
+
+namespace Cubist\Backpack\app\Middleware;
+
+use Closure;
+use Cubist\Backpack\app\Magic\Models\Locale;
+use Illuminate\Http\Request;
+use Cubist\Backpack\Facades\App;
+
+
+class VariantSelector extends CubistMiddleware
+{
+ public function handle(Request $request, Closure $next)
+ {
+ parent::handle($request, $next);
+
+ if (!App::hasVariant()) {
+ App::setVariant('default');
+ return $this->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;
+ }
+
+
+}