whitelabel-8.x-2.x-dev/src/Theme/WhiteLabelNegotiator.php

src/Theme/WhiteLabelNegotiator.php
<?php

namespace Drupal\whitelabel\Theme;

use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Theme\ThemeNegotiatorInterface;
use Drupal\whitelabel\WhiteLabelProviderInterface;

/**
 * Class WhiteLabelNegotiator.
 *
 * Registers the configured white label theme as the active theme.
 *
 * @package Drupal\whitelabel\Theme
 */
class WhiteLabelNegotiator implements ThemeNegotiatorInterface {

  /**
   * Holds the white label.
   *
   * @var \Drupal\whitelabel\WhiteLabelProviderInterface
   */
  protected $whiteLabelProvider;

  /**
   * The config factory.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $configFactory;

  /**
   * WhiteLabelNegotiator constructor.
   *
   * @param \Drupal\whitelabel\WhiteLabelProviderInterface $white_label_provider
   *   The white label provider.
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   The configuration factory.
   */
  public function __construct(WhiteLabelProviderInterface $white_label_provider, ConfigFactoryInterface $config_factory) {
    $this->whiteLabelProvider = $white_label_provider;
    $this->configFactory = $config_factory;
  }

  /**
   * {@inheritdoc}
   */
  public function applies(RouteMatchInterface $route_match) {
    // Only apply if there is an active white label.
    if ($this->whiteLabelProvider->getWhiteLabel()) {
      return TRUE;
    }
    return FALSE;
  }

  /**
   * {@inheritdoc}
   */
  public function determineActiveTheme(RouteMatchInterface $route_match) {
    $admin_theme = $this->configFactory->get('whitelabel.settings')->get('site_admin_theme');
    $allow_overrides = $this->configFactory->get('whitelabel.settings')->get('site_theme');

    $theme = $this->whiteLabelProvider->getWhiteLabel()->getTheme();

    // If users have permissions to set their own themes.
    if ($allow_overrides && !empty($theme)) {
      // Return the theme configured for the white label.
      return $theme;
    }
    elseif (!empty($admin_theme)) {
      // If a global default was set, use that.
      return $admin_theme;
    }

    // No user specific config and no global setting.
    // Allow other negotiators to resolve this.
    return NULL;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc