agaric-coop/web/themes/custom/agarica/agarica.theme

131 lines
4.3 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use Drupal\block\Entity\Block;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Url;
/**
* Implements hook_preprocess_node() for NODE document templates.
*/
function agarica_preprocess_node(&$variables) {
// Allowed view modes
$view_mode = $variables['view_mode']; // Retrieve view mode
$allowed_view_modes = ['full']; // Array of allowed view modes (for performance so as to not execute on unneeded nodes)
// If view mode is in allowed view modes list, pass to agarica_add_regions_to_node()
if(in_array($view_mode, $allowed_view_modes)) {
// Allowed regions (for performance so as to not execute for unneeded region)
$allowed_regions = ['secondary_menu'];
agarica_add_regions_to_node($allowed_regions, $variables);
}
}
/**
* THEME_add_regions_to_node
*/
function agarica_add_regions_to_node($allowed_regions, &$variables) {
// Retrieve active theme
$theme = \Drupal::theme()->getActiveTheme()->getName();
// Retrieve theme regions
$available_regions = system_region_list($theme, 'REGIONS_ALL');
// Validate allowed regions with available regions
$regions = array_intersect(array_keys($available_regions), $allowed_regions);
// For each region
foreach ($regions as $key => $region) {
// Load region blocks
$blocks = Drupal::entityTypeManager()
->getStorage('block')
->loadByProperties(['theme' => $theme, 'region' => $region]);
// Sort em
uasort($blocks, 'Drupal\block\Entity\Block::sort');
// Capture viewable blocks and their settings to $build
$build = [];
foreach ($blocks as $key => $block) {
if ($block->access('view')) {
$view_builder = \Drupal::entityTypeManager()
->getViewBuilder($block
->getEntityTypeId());
$build[$key] = $view_builder
->view($block, 'block');
}
}
// Add build to region
$variables[$region] = $build;
}
}
/**
* Implements hook_preprocess_region__footer().
*/
function agarica_preprocess_region__footer(&$variables) {
$block = Block::load('languageswitcher');
$block_content = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
$variables['language_switcher'] = $block_content;
$variables['language_switcher_link'] = agarica_languague_switch_link();
}
/**
* Provides a link to switch to another language.
*/
function agarica_languague_switch_link() {
$derivative_id = 'language_interface';
$route = \Drupal::getContainer()->get('path.matcher')->isFrontPage() ? '<front>' : '<current>';
$current_language = \Drupal::languageManager()->getCurrentLanguage($derivative_id)->getId();
$links = \Drupal::languageManager()->getLanguageSwitchLinks($derivative_id, Url::fromRoute($route))->links;
$links['en']['title'] = 'Browse this site in English';
$links['es']['title'] = 'Consulta este sitio en Español';
$lid = ($current_language == 'en') ? 'es' : 'en';
// Remove current language from the links
unset($links[$current_language]);
// Check if the current path display an entity.
$entity = [];
foreach (\Drupal::routeMatch()->getParameters() as $param) {
if ($param instanceof EntityInterface) {
$entity[] = $param;
}
}
// Remove links if the content hasnt' been translated yet.
if ($entity) {
$has_translation = (method_exists($entity[0], 'getTranslationStatus')) ? $entity[0]->getTranslationStatus($lid) : FALSE;
$this_translation = ($has_translation && method_exists($entity[0], 'getTranslation')) ? $entity[0]->getTranslation($lid) : FALSE;
$access_translation = ($this_translation && method_exists($this_translation, 'access') && $this_translation->access('view')) ? TRUE : FALSE;
if (!$this_translation || !$access_translation || $current_language == $lid) {
unset($links[$lid]);
}
}
$links_render_array = [];
// Transform the links to arrays that can be renderer.
foreach ($links as $language => $link) {
if (isset($link['url'])) {
$links_render_array[] = [
'#type' => 'link',
'#url' => $link['url'],
'#title' => $link['title'],
'#options' => [
'language' => $link['language'],
],
];
} else {
// If there's no URL, we take only the title and don't try to make a link.
$links_render_array[] = [
'#type' => 'markup',
'#markup' => $link['title'],
];
}
}
return $links_render_array;
}