class LanguageTestHooks

Hook implementations for language_test.

Hierarchy

Expanded class hierarchy of LanguageTestHooks

File

core/modules/language/tests/language_test/src/Hook/LanguageTestHooks.php, line 15

Namespace

Drupal\language_test\Hook
View source
class LanguageTestHooks {
    
    /**
     * Implements hook_page_top().
     */
    public function pageTop() : void {
        if (\Drupal::moduleHandler()->moduleExists('language')) {
            $this->storeLanguageNegotiation();
            \Drupal::messenger()->addStatus(t('Language negotiation method: @name', [
                '@name' => \Drupal::languageManager()->getNegotiatedLanguageMethod() ?? 'Not defined',
            ]));
        }
    }
    
    /**
     * Implements hook_language_types_info().
     */
    public function languageTypesInfo() {
        if (\Drupal::state()->get('language_test.language_types')) {
            return [
                'test_language_type' => [
                    'name' => t('Test'),
                    'description' => t('A test language type.'),
                ],
                'fixed_test_language_type' => [
                    'fixed' => [
                        'test_language_negotiation_method',
                    ],
                    'locked' => TRUE,
                ],
            ];
        }
    }
    
    /**
     * Implements hook_language_types_info_alter().
     */
    public function languageTypesInfoAlter(array &$language_types) : void {
        if (\Drupal::state()->get('language_test.content_language_type')) {
            $language_types[LanguageInterface::TYPE_CONTENT]['locked'] = FALSE;
            unset($language_types[LanguageInterface::TYPE_CONTENT]['fixed']);
            // By default languages are not configurable. Make
            // LanguageInterface::TYPE_CONTENT configurable.
            $config = \Drupal::configFactory()->getEditable('language.types');
            $configurable = $config->get('configurable');
            if (!in_array(LanguageInterface::TYPE_CONTENT, $configurable)) {
                $configurable[] = LanguageInterface::TYPE_CONTENT;
                $config->set('configurable', $configurable)
                    ->save();
            }
        }
    }
    
    /**
     * Implements hook_language_negotiation_info_alter().
     */
    public function languageNegotiationInfoAlter(array &$negotiation_info) : void {
        if (\Drupal::state()->get('language_test.language_negotiation_info_alter')) {
            unset($negotiation_info[LanguageNegotiationUI::METHOD_ID]);
        }
    }
    
    /**
     * Implements hook_language_fallback_candidates_alter().
     */
    public function languageFallbackCandidatesAlter(array &$candidates, array $context) : void {
        if (\Drupal::state()->get('language_test.fallback_alter.candidates')) {
            unset($candidates[LanguageInterface::LANGCODE_NOT_SPECIFIED]);
        }
    }
    
    /**
     * Implements hook_language_fallback_candidates_OPERATION_alter().
     */
    public function languageFallbackCandidatesTestAlter(array &$candidates, array $context) : void {
        if (\Drupal::state()->get('language_test.fallback_operation_alter.candidates')) {
            $langcode = LanguageInterface::LANGCODE_NOT_APPLICABLE;
            $candidates[$langcode] = $langcode;
        }
    }
    
    /**
     * Implements hook_module_preinstall().
     */
    public function modulePreinstall() : void {
        \Drupal::state()->set('language_test.language_count_preinstall', count(\Drupal::languageManager()->getLanguages()));
    }
    
    /**
     * Implements hook_language_switch_links_alter().
     */
    public function languageSwitchLinksAlter(array &$links, $type, Url $url) : void {
        // Record which languages had links passed in.
        \Drupal::state()->set('language_test.language_switch_link_ids', array_keys($links));
    }
    
    /**
     * Store the last negotiated languages.
     */
    public function storeLanguageNegotiation() : void {
        $last = [];
        foreach (\Drupal::languageManager()->getDefinedLanguageTypes() as $type) {
            $last[$type] = \Drupal::languageManager()->getCurrentLanguage($type)
                ->getId();
        }
        \Drupal::keyValue('language_test')->set('language_negotiation_last', $last);
    }

}

Members

Title Sort descending Modifiers Object type Summary
LanguageTestHooks::languageFallbackCandidatesAlter public function Implements hook_language_fallback_candidates_alter().
LanguageTestHooks::languageFallbackCandidatesTestAlter public function Implements hook_language_fallback_candidates_OPERATION_alter().
LanguageTestHooks::languageNegotiationInfoAlter public function Implements hook_language_negotiation_info_alter().
LanguageTestHooks::languageSwitchLinksAlter public function Implements hook_language_switch_links_alter().
LanguageTestHooks::languageTypesInfo public function Implements hook_language_types_info().
LanguageTestHooks::languageTypesInfoAlter public function Implements hook_language_types_info_alter().
LanguageTestHooks::modulePreinstall public function Implements hook_module_preinstall().
LanguageTestHooks::pageTop public function Implements hook_page_top().
LanguageTestHooks::storeLanguageNegotiation public function Store the last negotiated languages.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.