test_helpers-1.0.0-alpha6/src/Stub/ConfigurableLanguageManagerStub.php

src/Stub/ConfigurableLanguageManagerStub.php
<?php

namespace Drupal\test_helpers\Stub;

use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Language\Language;
use Drupal\Core\Language\LanguageDefault;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\Language\LanguageManager;
use Drupal\language\Config\LanguageConfigFactoryOverride;
use Drupal\language\Config\LanguageConfigFactoryOverrideInterface;
use Drupal\language\ConfigurableLanguageManager;
use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\test_helpers\TestHelpers;
use Symfony\Component\HttpFoundation\RequestStack;

/**
 * A stub of the Drupal's default ConfigurableLanguageManager class.
 *
 *  @package TestHelpers\DrupalServiceStubs
 */
class ConfigurableLanguageManagerStub extends ConfigurableLanguageManager {

  /**
   * A default stub language.
   *
   * @var string
   */
  protected Language $stubDefaultLanguage;

  /**
   * {@inheritdoc}
   */
  public function __construct(
    ?LanguageDefault $default_language = NULL,
    ?ConfigFactoryInterface $config_factory = NULL,
    ?ModuleHandlerInterface $module_handler = NULL,
    ?LanguageConfigFactoryOverrideInterface $config_override = NULL,
    ?RequestStack $request_stack = NULL,
    ?CacheBackendInterface $cacheBackend = NULL,
  ) {
    $default_language ??= TestHelpers::service('language.default');
    $config_factory ??= TestHelpers::service('config.factory');
    $module_handler ??= TestHelpers::service('module_handler');
    $config_override ??= TestHelpers::service('language.config_factory_override', LanguageConfigFactoryOverride::class);
    $request_stack ??= TestHelpers::service('request_stack');
    $request_stack ??= TestHelpers::service('request_stack');
    $cacheBackend ??= TestHelpers::service('cache.bootstrap');
    parent::__construct($default_language, $config_factory, $module_handler, $config_override, $request_stack, $cacheBackend);

  }

  /**
   * Adds a language to the stub.
   *
   * @param string $code
   *   A language code.
   * @param string|null $label
   *   A label for the language, if NULL - get from standard list.
   */
  public function stubAddLanguage(string $code, ?string $label = NULL) {
    $values = $this->languageValuesFromCode($code, $label);
    // In a configuration record the 'label' term is used instead of 'name'.
    if (isset($values['label'])) {
      $values['name'] = $values['label'];
    }
    TestHelpers::saveEntity(ConfigurableLanguage::class, $values);
    $this->stubClearStaticCaches();
  }

  /**
   * Adds languages to the stub.
   *
   * @param array $languageCodes
   *   A list of languages codes.
   */
  public function stubAddLanguages(array $languageCodes) {
    foreach ($languageCodes as $languageCode) {
      // @todo Add support for arrays with language code and name.
      $this->stubAddLanguage($languageCode);
    }
  }

  /**
   * Sets current language.
   *
   * @param string|\Drupal\Core\Language\LanguageInterface $language
   *   A language code or a LanguageInterface object to set.
   */
  public function stubSetCurrentLanguage($language) {
    if (is_string($language)) {
      $language = new Language($this->languageValuesFromCode($language));
    }
    $this->stubDefaultLanguage = $language;
  }

  /**
   * {@inheritdoc}
   */
  public function getCurrentLanguage($type = LanguageInterface::TYPE_INTERFACE) {
    if (isset($this->stubDefaultLanguage)) {
      return $this->stubDefaultLanguage;
    }
    else {
      return parent::getCurrentLanguage($type);
    }
  }

  /**
   * Generates value from langcode.
   *
   * @param string $langcode
   *   A langcode to use.
   * @param string|null $label
   *   A label to use, if NULL - gets from the standard list or use langcode in
   *   brackets, if no matches.
   *
   * @return array
   *   An array with values for creating a Language object.
   */
  public function languageValuesFromCode(string $langcode, ?string $label = NULL): array {
    if ($langcode == LanguageInterface::LANGCODE_NOT_SPECIFIED) {
      $languageData = ['Not specified', 'Not specified'];
    }
    else {
      $languageData = LanguageManager::getStandardLanguageList()[$langcode] ?? NULL;
    }
    return [
      'id' => $langcode,
      'label' => $label ?? $languageData[0] ?? "[$langcode]",
      'direction' => $languageData[2] ?? LanguageInterface::DIRECTION_RTL,
    ];

  }

  /**
   * Clears all static caches for the service.
   */
  private function stubClearStaticCaches() {
    $this->initialized = FALSE;
    $this->negotiatedLanguages = [];
    $this->negotiatedMethods = [];
    $this->languageTypes = NULL;
    $this->languageTypesInfo = NULL;
    $this->languages = [];
  }

}

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

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