diff --git a/oe_whitelabel.theme b/oe_whitelabel.theme index b42c7187f298c72991c24050c994064f50966ba0..84ff91bb89ed46f8a92d5fa24bea86c0369a5f9f 100644 --- a/oe_whitelabel.theme +++ b/oe_whitelabel.theme @@ -8,6 +8,7 @@ declare(strict_types = 1); use Drupal\Core\Form\FormStateInterface; +use Drupal\oe_whitelabel_helper\EuropeanUnionLanguages; /** * Implements hook__preprocess_links__language_block(). @@ -105,6 +106,7 @@ function oe_whitelabel_form_system_theme_settings_alter(&$form, FormStateInterfa '#type' => 'select', '#title' => t('Component library'), '#options' => [ + 'neutral' => t('Neutral'), 'ec' => t('European Commission'), 'eu' => t('European Union'), ], @@ -129,4 +131,73 @@ function oe_whitelabel_form_system_theme_settings_alter(&$form, FormStateInterfa function oe_whitelabel_preprocess(&$variables) { $variables['bcl_component_library'] = theme_get_setting('component_library') ?? 'eu'; $variables['bcl_header_style'] = theme_get_setting('header_style') ?? 'standard'; + $variables['current_language_id'] = \Drupal::languageManager()->getCurrentLanguage()->getId(); + $variables['bcl_logo_path'] = base_path() . drupal_get_path('theme', 'oe_bootstrap_theme') . '/assets/logos/'; +} + +/** + * Implements hook_preprocess_page(). + */ +function oe_whitelabel_preprocess_page(&$variables) { + $site_config = \Drupal::config('system.site'); + $variables['site_name'] = $site_config->get('name'); + $variables['project_logo'] = [ + 'path' => file_url_transform_relative(file_create_url(theme_get_setting('logo.url'))), + 'alt' => $site_config->get('name'), + ]; +} + +/** + * Implements template_preprocess_block__system_branding_block(). + */ +function oe_whitelabel_preprocess_block__system_branding_block(&$variables) { + if ($variables['bcl_component_library'] === 'ec') { + $variables['logo_aria_label'] = t('Home') . ' - ' . t('European Commission'); + $variables['site_logo_alt'] = t('European Commission logo'); + $variables['site_logo_title'] = t('European Commission'); + $site_logo_href = 'https://ec.europa.eu/info'; + } + elseif ($variables['bcl_component_library'] === 'eu') { + $variables['logo_aria_label'] = t('Home') . ' - ' . t('European Union'); + $variables['site_logo_alt'] = t('European Union flag'); + $variables['site_logo_title'] = t('European Union'); + $site_logo_href = 'https://european-union.europa.eu'; + } + else { + $variables['logo_aria_label'] = t('Home'); + $variables['site_logo_alt'] = t('Home logo'); + $variables['site_logo_title'] = t('Home'); + $site_logo_href = '<front>'; + } + + // Provide correct icon for non-eu languages. + $language_code = \Drupal::languageManager()->getCurrentLanguage()->getId(); + if (!EuropeanUnionLanguages::hasLanguage($language_code)) { + if ($language_code === 'nb') { + // Set correct icon for Norwegian language. + $variables['current_language_id'] = 'no'; + } + else { + // Check whether ECL provides a logo for the language. + $ecl_logo = DRUPAL_ROOT . '/' . drupal_get_path('theme', 'oe_theme') . '/dist/' . $variables['ecl_component_library'] . '/images/logo/'; + $ecl_logo .= $variables['ecl_component_library'] === 'eu' ? 'standard-version/positive/' : ''; + $ecl_logo .= 'logo-' . $variables['ecl_component_library'] . '--' . $language_code . '.svg'; + if (!file_exists($ecl_logo)) { + // Provide fallback "en" icon if language logo doesn't exist. + $variables['current_language_id'] = 'en'; + } + } + } + else { + $site_logo_href .= '/index_' . EuropeanUnionLanguages::getInternalLanguageCode($variables['current_language_id']); + } + $variables['site_logo_href'] = $site_logo_href; +} + +/** + * Implements hook_theme_suggestions_HOOK_alter(). + */ +function oe_whitelabel_theme_suggestions_page_alter(array &$suggestions, array $variables): void { + // Set branding template in the beginning as more common. + array_unshift($suggestions, 'page__bcl_branding'); }