class GeolocationMap in Geolocation Field 8.2
Same name and namespace in other branches
- 8.3 src/Element/GeolocationMap.php \Drupal\geolocation\Element\GeolocationMap
Provides a render element to display a geolocation map.
Usage example:
$form['map'] = [
'#type' => 'geolocation_map',
'#prefix' => $this->t('Geolocation Map Render Element'),
'#description' => $this->t('Render element type "geolocation_map"'),
'#maptype' => 'leaflet,
'#centre' => [],
'#id' => 'thisisanid',
];
Plugin annotation
@FormElement("geolocation_map");
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\Core\Render\Element\RenderElement implements ElementInterface
- class \Drupal\geolocation\Element\GeolocationMap
- class \Drupal\Core\Render\Element\RenderElement implements ElementInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of GeolocationMap
1 file declares its use of GeolocationMap
- GoogleStaticMaps.php in modules/
geolocation_google_maps/ modules/ geolocation_google_static_maps/ src/ Plugin/ geolocation/ MapProvider/ GoogleStaticMaps.php
5 #type uses of GeolocationMap
- CommonMapBase::render in src/
Plugin/ views/ style/ CommonMapBase.php - Render the display in this style.
- DemoRenderElementController::renderElementDemo in modules/
geolocation_demo/ src/ Controller/ DemoRenderElementController.php - Return the non-functional geocoding widget form.
- GeolocationBlock::build in src/
Plugin/ Block/ GeolocationBlock.php - Builds and returns the renderable array for this block plugin.
- GeolocationMapFormatterBase::viewElements in src/
Plugin/ Field/ FieldFormatter/ GeolocationMapFormatterBase.php - Builds a renderable array for a field value.
- GeolocationMapWidgetBase::form in src/
Plugin/ Field/ FieldWidget/ GeolocationMapWidgetBase.php - Creates a form element for a field.
File
- src/
Element/ GeolocationMap.php, line 28
Namespace
Drupal\geolocation\ElementView source
class GeolocationMap extends RenderElement {
/**
* Map Provider.
*
* @var \Drupal\geolocation\MapProviderManager
*/
protected $mapProviderManager = NULL;
/**
* {@inheritdoc}
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->mapProviderManager = \Drupal::service('plugin.manager.geolocation.mapprovider');
}
/**
* {@inheritdoc}
*/
public function getInfo() {
$class = get_class($this);
$info = [
'#process' => [
[
$class,
'processGroup',
],
],
'#pre_render' => [
[
$class,
'preRenderGroup',
],
[
$this,
'preRenderMap',
],
],
'#maptype' => NULL,
'#centre' => NULL,
'#id' => NULL,
'#controls' => NULL,
'#context' => [],
];
return $info;
}
/**
* Map element.
*
* @param array $render_array
* Element.
*
* @return array
* Renderable map.
*/
public function preRenderMap(array $render_array) {
$render_array['#theme'] = 'geolocation_map_wrapper';
if (empty($render_array['#attributes'])) {
$render_array['#attributes'] = [];
}
if (empty($render_array['#id'])) {
$render_array['#id'] = uniqid();
}
if (empty($render_array['#maptype'])) {
if (\Drupal::moduleHandler()
->moduleExists('geolocation_google_maps')) {
$render_array['#maptype'] = 'google_maps';
}
elseif (\Drupal::moduleHandler()
->moduleExists('geolocation_leaflet')) {
$render_array['#maptype'] = 'leaflet';
}
}
$map_provider = $this->mapProviderManager
->getMapProvider($render_array['#maptype']);
if (empty($map_provider)) {
return $render_array;
}
$map_settings = [];
if (!empty($render_array['#settings']) && is_array($render_array['#settings'])) {
$map_settings = $render_array['#settings'];
}
$render_array = BubbleableMetadata::mergeAttachments([
'#attached' => [
'library' => [
'geolocation/geolocation.map',
],
],
], $render_array);
foreach (Element::children($render_array) as $child) {
$render_array['#children'][$child] = $render_array[$child];
unset($render_array[$child]);
}
$render_array['#attributes'] = new Attribute($render_array['#attributes']);
$render_array['#attributes']
->addClass('geolocation-map-wrapper');
$render_array['#attributes']
->setAttribute('id', $render_array['#id']);
$render_array['#attributes']
->setAttribute('data-map-type', $render_array['#maptype']);
if (!empty($render_array['#centre']['lat']) && !empty($render_array['#centre']['lng'])) {
$render_array['#attributes']
->setAttribute('data-centre-lat', $render_array['#centre']['lat']);
$render_array['#attributes']
->setAttribute('data-centre-lng', $render_array['#centre']['lng']);
}
if (!empty($render_array['#centre']['lat_north_east']) && !empty($render_array['#centre']['lng_north_east']) && !empty($render_array['#centre']['lat_south_west']) && !empty($render_array['#centre']['lng_south_west'])) {
$render_array['#attributes']
->setAttribute('data-centre-lat-north-east', $render_array['#centre']['lat_north_east']);
$render_array['#attributes']
->setAttribute('data-centre-lng-north-east', $render_array['#centre']['lng_north_east']);
$render_array['#attributes']
->setAttribute('data-centre-lat-south-west', $render_array['#centre']['lat_south_west']);
$render_array['#attributes']
->setAttribute('data-centre-lng-south-west', $render_array['#centre']['lng_south_west']);
}
if (!empty($render_array['#controls'])) {
uasort($render_array['#controls'], [
SortArray::class,
'sortByWeightProperty',
]);
}
if (!empty($render_array['#children'])) {
uasort($render_array['#children'], [
SortArray::class,
'sortByWeightProperty',
]);
}
$context = [];
if (!empty($render_array['#context'])) {
$context = $render_array['#context'];
}
$render_array = $map_provider
->alterRenderArray($render_array, $map_settings, $context);
return $render_array;
}
/**
* Recursively return all locations in render array.
*
* @param array $render_array
* Geolocation Map render array.
*
* @return array
* Geolocation Map Locations.
*/
public static function getLocations(array $render_array) {
$locations = [];
if (!empty($render_array['#type']) && $render_array['#type'] == 'geolocation_map_location') {
$locations[] = $render_array;
}
elseif (!empty($render_array['#children'])) {
foreach ($render_array['#children'] as $child) {
if (is_array($child)) {
$locations = array_merge($locations, static::getLocations($child));
}
}
}
else {
foreach (Element::children($render_array) as $key) {
if (is_array($render_array[$key])) {
$locations = array_merge($locations, static::getLocations($render_array[$key]));
}
}
}
return $locations;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
GeolocationMap:: |
protected | property | Map Provider. | |
GeolocationMap:: |
public | function |
Returns the element properties for this element. Overrides ElementInterface:: |
|
GeolocationMap:: |
public static | function | Recursively return all locations in render array. | |
GeolocationMap:: |
public | function | Map element. | |
GeolocationMap:: |
public | function |
Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase:: |
|
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
RenderElement:: |
public static | function | Adds Ajax information about an element to communicate with JavaScript. | |
RenderElement:: |
public static | function | Adds members of this group as actual elements for rendering. | |
RenderElement:: |
public static | function | Form element processing handler for the #ajax form property. | 1 |
RenderElement:: |
public static | function | Arranges elements into groups. | |
RenderElement:: |
public static | function |
Sets a form element's class attribute. Overrides ElementInterface:: |
|
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |