degov-8.x-2.0/modules/degov_media_address/degov_media_address.module
modules/degov_media_address/degov_media_address.module
<?php
use Drupal\degov_common\Common;
/**
* Implements hook_preprocess().
*/
function degov_media_address_preprocess(&$variables, $hook, &$info) {
// Add template suggestions and libraries implemented in this module.
Common::addThemeSuggestions($variables, $hook, $info, [
'module_name' => 'degov_media_address',
'entity_type' => 'media',
'entity_bundles' => ['address'],
'entity_view_modes' => ['default_map', 'osm_map', 'usage', 'preview', 'search', 'embedded'],
]);
}
/**
* Preprocess address media entity.
*/
function degov_media_address_preprocess_media__address(&$variables) {
if (!empty($variables['elements']['#view_mode'])
&& ($variables['elements']['#view_mode'] == 'osm_map' )) {
$address = $variables['elements']['#media'];
if ($address instanceof \Drupal\media\MediaInterface) {
$location = $address->get('field_address_location');
if (!$location->isEmpty()) {
// Assign the unique ID for every map paragraph we have.
$map_id = uniqid('map-');
$variables['content']['map_id'] = $map_id;
// Further settings for the different maps.
if ($variables['elements']['#view_mode'] == 'osm_map') {
// Add latitude and longitude.
$variables['#attached']['drupalSettings']['maps'][$map_id]['lat'] = $location->lat;
$variables['#attached']['drupalSettings']['maps'][$map_id]['lon'] = $location->lon;
// Add pin image location.
$variables['#attached']['drupalSettings']['maps'][$map_id]['pin'] = '/' . drupal_get_path('module', 'degov_media_address')
. '/images/map-icon.png';
$variables['#attached']['drupalSettings']['maps'][$map_id]['type'] = 'leaflet';
}
}
}
}
}
/**
* Implements hook_preprocess_HOOK().
*/
function degov_media_address_preprocess_paragraph__map(&$variables) {
// Pass map arguments for the rendered map through javascript.
/** @var \Drupal\paragraphs\ParagraphInterface $paragraph */
$paragraph = $variables['paragraph'];
if ($paragraph->hasField('field_map_address_reference')
&& !$paragraph->get('field_map_address_reference')->isEmpty()
) {
$address_reference = $paragraph->get('field_map_address_reference')->entity;
if (!empty($address_reference)) {
$location = $address_reference->get('field_address_location');
if (!$location->isEmpty()) {
$variables['elements']['#cache']['contexts'][] = 'url.path';
$variables['elements']['#cache']['tags'][] = 'paragraph:' . $paragraph->id();
$variables['elements']['#cache']['tags'][] = $paragraph->getEntityTypeId() . '_view';
$parentEntity = $paragraph->getParentEntity();
if ($parentEntity && $parentEntity instanceof \Drupal\Core\Entity\ContentEntityInterface) {
$variables['elements']['#cache']['tags'][] = $parentEntity
->getEntityTypeId() . ':' . $parentEntity->id();
$variables['elements']['#cache']['tags'][] = $parentEntity
->getEntityTypeId() . '_view';
}
if (empty($variables['#cache']['tags'])) {
$variables['#cache']['tags'] = [];
}
$variables['#cache']['tags'] = $variables['#cache']['tags'] + $variables['elements']['#cache']['tags'];
// Override map rendering based on view mode selection.
if (!empty($variables['content']['field_map_address_reference'][0]['#view_mode'])
&& !$variables['paragraph']->get('field_map_address_view_mode')
->isEmpty()
) {
$variables['content']['field_map_address_reference'][0]['#cache']['contexts'][] = 'url.path';
$variables['content']['field_map_address_reference'][0]['#view_mode'] = $paragraph->field_map_address_view_mode->value;
$variables['content']['field_map_address_reference'][0]['#cache']['tags'] = $variables['content']['field_map_address_reference'][0]['#cache']['tags'] + $variables['elements']['#cache']['tags'];
$variables['content']['field_map_address_reference']['#cache']['tags'] = $variables['content']['field_map_address_reference']['#cache']['tags'] + $variables['elements']['#cache']['tags'];
}
}
}
}
}
