varbase_layout_builder-9.0.0-alpha2/src/Theme/VarbaseLayoutBuilderThemeNegotiator.php

src/Theme/VarbaseLayoutBuilderThemeNegotiator.php
<?php

namespace Drupal\varbase_layout_builder\Theme;

use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Theme\AjaxBasePageNegotiator;
use Drupal\Core\Access\CsrfTokenGenerator;
use Symfony\Component\HttpFoundation\RequestStack;
use Drupal\Core\Extension\ThemeHandlerInterface;

/**
 * Varbase Layout Builder Theme Negotiator.
 */
class VarbaseLayoutBuilderThemeNegotiator extends AjaxBasePageNegotiator {

  /**
   * The CSRF token generator.
   *
   * @var \Drupal\Core\Access\CsrfTokenGenerator
   */
  protected $csrfGenerator;

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

  /**
   * The request stack.
   *
   * @var \Symfony\Component\HttpFoundation\RequestStack
   */
  protected $requestStack;

  /**
   * The theme handler.
   *
   * @var \Drupal\Core\Extension\ThemeHandlerInterface
   */
  protected $themeHandler;

  /**
   * Constructs a new AjaxBasePageNegotiator.
   *
   * @param \Drupal\Core\Access\CsrfTokenGenerator $token_generator
   *   The CSRF token generator.
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   The config factory.
   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
   *   The request stack used to retrieve the current request.
   * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler
   *   The theme handler.
   */
  public function __construct(CsrfTokenGenerator $token_generator, ConfigFactoryInterface $config_factory, RequestStack $request_stack, ThemeHandlerInterface $theme_handler) {
    $this->csrfGenerator = $token_generator;
    $this->configFactory = $config_factory;
    $this->requestStack = $request_stack;
    $this->themeHandler = $theme_handler;
  }

  /**
   * Whether this theme negotiator should be used to set the theme.
   *
   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
   *   The route match.
   *
   * @return bool
   *   To proceed with changing the theme.
   */
  public function applies(RouteMatchInterface $route_match) {
    $use_claro = $this->configFactory->get('varbase_layout_builder.settings')->get('use_claro');
    if (isset($use_claro)
      && $use_claro == 1
      && varbase_layout_builder__is_layout_builder_route()
      && !varbase_layout_builder__is_dashboard_route()
      && $route_match->getRouteName() !== 'layout_builder.navigation.view'
      && ($this->themeHandler->themeExists('gin') || $this->themeHandler->themeExists('claro'))) {

      return TRUE;
    }

    if ($this->requestStack->getCurrentRequest()->query->get('media_library_opener_id') === 'media_library.opener.editor') {
      return TRUE;
    }

    return FALSE;
  }

  /**
   * Determine the active theme for the request.
   *
   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
   *   The route match.
   *
   * @return null|string
   *   The selected active theme.
   */
  public function determineActiveTheme(RouteMatchInterface $route_match) {

    $current_request = [];
    if ($this->requestStack->getCurrentRequest()->getMethod() === 'GET') {
      $current_request = $this->requestStack->getCurrentRequest()->query->all();
    }
    else {
      $current_request = $this->requestStack->getCurrentRequest()->request->all();
    }

    // Media Library Theme Negotiator.
    if (isset($current_request['_triggering_element_name'])
      && str_contains($current_request['_triggering_element_name'], 'media-library')) {

      return $this->configFactory->get('system.theme')->get('admin');
    }

    if (isset($current_request['dialogOptions'])
      && isset($current_request['dialogOptions']['dialogClass'])
      && $current_request['dialogOptions']['dialogClass'] == 'media-library-widget-modal') {

      if (isset($current_request['ajax_form'])
        && $current_request['ajax_form'] == '1'
        && isset($current_request['_wrapper_format'])
        && ($current_request['_wrapper_format'] == 'drupal_dialog'
        || $current_request['_wrapper_format'] == 'drupal_dialog.off_canvas'
        || $current_request['_wrapper_format'] == 'drupal_ajax')) {

        return $this->configFactory->get('system.theme')->get('admin');
      }
    }

    if (!empty($current_request['media_library_opener_id'])) {
      return $this->configFactory->get('system.theme')->get('admin');
    }

    if (isset($current_request['dialogOptions'])
      && isset($current_request['dialogOptions']['target'])
      && $current_request['dialogOptions']['target'] == 'layout-builder-modal') {

      if ((isset($current_request['_wrapper_format']) && $current_request['_wrapper_format'] == 'drupal_dialog.off_canvas')
        || isset($current_request['_drupal_ajax'])) {
        return $this->configFactory->get('system.theme')->get('admin');
      }
      else {
        return $this->configFactory->get('system.theme')->get('default');
      }
    }

    if ($this->requestStack->getCurrentRequest()->query->get('media_library_opener_id') === 'media_library.opener.editor') {
      return $this->configFactory->get('system.theme')->get('admin');
    }

    // AJAX trigger for any block form field.
    if (isset($current_request['_triggering_element_name'])
      && str_contains($current_request['_triggering_element_name'], 'block_form-field')) {

      return $this->configFactory->get('system.theme')->get('admin');
    }

    return $this->configFactory->get('system.theme')->get('default');

  }

}

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

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