5 * Mock module for language layer tests.
8 use Drupal\Core\Language\LanguageInterface;
10 use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUI;
13 * Implements hook_page_top().
15 function language_test_page_top() {
16 if (\Drupal::moduleHandler()->moduleExists('language')) {
17 language_test_store_language_negotiation();
18 \Drupal::messenger()->addStatus(t('Language negotiation method: @name', ['@name' => \Drupal::languageManager()->getNegotiatedLanguageMethod()]));
23 * Implements hook_language_types_info().
25 function language_test_language_types_info() {
26 if (\Drupal::state()->get('language_test.language_types')) {
28 'test_language_type' => [
30 'description' => t('A test language type.'),
32 'fixed_test_language_type' => [
33 'fixed' => ['test_language_negotiation_method'],
41 * Implements hook_language_types_info_alter().
43 function language_test_language_types_info_alter(array &$language_types) {
44 if (\Drupal::state()->get('language_test.content_language_type')) {
45 $language_types[LanguageInterface::TYPE_CONTENT]['locked'] = FALSE;
46 unset($language_types[LanguageInterface::TYPE_CONTENT]['fixed']);
47 // By default languages are not configurable. Make
48 // LanguageInterface::TYPE_CONTENT configurable.
49 $config = \Drupal::configFactory()->getEditable('language.types');
50 $configurable = $config->get('configurable');
51 if (!in_array(LanguageInterface::TYPE_CONTENT, $configurable)) {
52 $configurable[] = LanguageInterface::TYPE_CONTENT;
53 $config->set('configurable', $configurable)->save();
59 * Implements hook_language_negotiation_info_alter().
61 function language_test_language_negotiation_info_alter(array &$negotiation_info) {
62 if (\Drupal::state()->get('language_test.language_negotiation_info_alter')) {
63 unset($negotiation_info[LanguageNegotiationUI::METHOD_ID]);
68 * Store the last negotiated languages.
70 function language_test_store_language_negotiation() {
72 foreach (\Drupal::languageManager()->getDefinedLanguageTypes() as $type) {
73 $last[$type] = \Drupal::languageManager()->getCurrentLanguage($type)->getId();
75 \Drupal::state()->set('language_test.language_negotiation_last', $last);
79 * Implements hook_language_fallback_candidates_alter().
81 function language_test_language_fallback_candidates_alter(array &$candidates, array $context) {
82 if (Drupal::state()->get('language_test.fallback_alter.candidates')) {
83 unset($candidates[LanguageInterface::LANGCODE_NOT_SPECIFIED]);
88 * Implements hook_language_fallback_candidates_OPERATION_alter().
90 function language_test_language_fallback_candidates_test_alter(array &$candidates, array $context) {
91 if (Drupal::state()->get('language_test.fallback_operation_alter.candidates')) {
92 $langcode = LanguageInterface::LANGCODE_NOT_APPLICABLE;
93 $candidates[$langcode] = $langcode;
98 * Implements hook_module_preinstall().
100 function language_test_module_preinstall() {
101 \Drupal::state()->set('language_test.language_count_preinstall', count(\Drupal::languageManager()->getLanguages()));
105 * Implements hook_language_switch_links_alter().
107 function language_test_language_switch_links_alter(array &$links, $type, Url $url) {
108 // I'll just sit here and wait to be called with the right arguments.