abstract class GeolocationMapWidgetBase in Geolocation Field 8.2
Same name and namespace in other branches
- 8.3 src/Plugin/Field/FieldWidget/GeolocationMapWidgetBase.php \Drupal\geolocation\Plugin\Field\FieldWidget\GeolocationMapWidgetBase
Map widget base.
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Field\WidgetBase implements WidgetInterface, ContainerFactoryPluginInterface uses AllowedTagsXssTrait
- class \Drupal\geolocation\Plugin\Field\FieldWidget\GeolocationMapWidgetBase implements ContainerFactoryPluginInterface
- class \Drupal\Core\Field\WidgetBase implements WidgetInterface, ContainerFactoryPluginInterface uses AllowedTagsXssTrait
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of GeolocationMapWidgetBase
3 files declare their use of GeolocationMapWidgetBase
- GeolocationGoogleWidget.php in modules/
geolocation_google_maps/ src/ Plugin/ Field/ FieldWidget/ GeolocationGoogleWidget.php - GeolocationLeafletWidget.php in modules/
geolocation_leaflet/ src/ Plugin/ Field/ FieldWidget/ GeolocationLeafletWidget.php - geolocation_address.module in modules/
geolocation_address/ geolocation_address.module - Provide address integration where due.
File
- src/
Plugin/ Field/ FieldWidget/ GeolocationMapWidgetBase.php, line 21
Namespace
Drupal\geolocation\Plugin\Field\FieldWidgetView source
abstract class GeolocationMapWidgetBase extends WidgetBase implements ContainerFactoryPluginInterface {
/**
* The entity field manager.
*
* @var \Drupal\Core\Entity\EntityFieldManagerInterface
*/
protected $entityFieldManager;
/**
* Map Provider ID.
*
* @var string
*/
protected static $mapProviderId = FALSE;
/**
* Map Provider Settings Form ID.
*
* @var string
*/
protected static $mapProviderSettingsFormId = 'map_settings';
/**
* Map Provider.
*
* @var \Drupal\geolocation\MapProviderInterface
*/
protected $mapProvider = NULL;
/**
* Map center manager.
*
* @var \Drupal\geolocation\MapCenterManager
*/
protected $mapCenterManager = NULL;
/**
* Constructs a WidgetBase object.
*
* @param string $plugin_id
* The plugin_id for the widget.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
* The definition of the field to which the widget is associated.
* @param array $settings
* The widget settings.
* @param array $third_party_settings
* Any third party settings.
* @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager
* The entity field manager.
* @param \Drupal\geolocation\MapCenterManager $map_center_manager
* Map center manager.
*/
public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, array $third_party_settings, EntityFieldManagerInterface $entity_field_manager, MapCenterManager $map_center_manager) {
parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $third_party_settings);
$this->entityFieldManager = $entity_field_manager;
$this->mapCenterManager = $map_center_manager;
if (!empty(static::$mapProviderId)) {
$this->mapProvider = \Drupal::service('plugin.manager.geolocation.mapprovider')
->getMapProvider(static::$mapProviderId);
}
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($plugin_id, $plugin_definition, $configuration['field_definition'], $configuration['settings'], $configuration['third_party_settings'], $container
->get('entity_field.manager'), $container
->get('plugin.manager.geolocation.mapcenter'));
}
/**
* {@inheritdoc}
*/
public function flagErrors(FieldItemListInterface $items, ConstraintViolationListInterface $violations, array $form, FormStateInterface $form_state) {
foreach ($violations as $violation) {
if ($violation
->getMessageTemplate() == 'This value should not be null.') {
$form_state
->setErrorByName($items
->getName(), $this
->t('No location has been selected yet for required field %field.', [
'%field' => $items
->getFieldDefinition()
->getLabel(),
]));
}
}
parent::flagErrors($items, $violations, $form, $form_state);
}
/**
* {@inheritdoc}
*/
public static function defaultSettings() {
$settings = [
'centre' => [
'fit_bounds' => [
'enable' => TRUE,
],
],
'auto_client_location' => FALSE,
'auto_client_location_marker' => FALSE,
'allow_override_map_settings' => FALSE,
];
$settings[static::$mapProviderSettingsFormId] = \Drupal::service('plugin.manager.geolocation.mapprovider')
->getMapProviderDefaultSettings(static::$mapProviderId);
$settings += parent::defaultSettings();
return $settings;
}
/**
* {@inheritdoc}
*/
public function getSettings() {
$settings = parent::getSettings();
$map_settings = [];
if (!empty($settings[static::$mapProviderSettingsFormId])) {
$map_settings = $settings[static::$mapProviderSettingsFormId];
}
$settings = NestedArray::mergeDeep($settings, [
static::$mapProviderSettingsFormId => $this->mapProvider
->getSettings($map_settings),
]);
return $settings;
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$settings = $this
->getSettings();
$element = [];
$element['centre'] = $this->mapCenterManager
->getCenterOptionsForm((array) $settings['centre'], [
'widget' => $this,
]);
$element['auto_client_location_marker'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Automatically set marker to client location if available.'),
'#default_value' => $settings['auto_client_location_marker'],
];
$element['allow_override_map_settings'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Allow override the map settings when create/edit an content.'),
'#default_value' => $settings['allow_override_map_settings'],
];
if ($this->mapProvider) {
$element[static::$mapProviderSettingsFormId] = $this->mapProvider
->getSettingsForm($settings[static::$mapProviderSettingsFormId], [
'fields',
$this->fieldDefinition
->getName(),
'settings_edit_form',
'settings',
static::$mapProviderSettingsFormId,
]);
}
return $element;
}
/**
* {@inheritdoc}
*/
public function settingsSummary() {
$summary = [];
$settings = $this
->getSettings();
if (!empty($settings['auto_client_location_marker'])) {
$summary[] = $this
->t('Will set client location marker automatically by default');
}
if (!empty($settings['allow_override_map_settings'])) {
$summary[] = $this
->t('Users will be allowed to override the map settings for each content.');
}
$map_provider_settings = empty($settings[static::$mapProviderSettingsFormId]) ? [] : $settings[static::$mapProviderSettingsFormId];
$summary = array_replace_recursive($summary, $this->mapProvider
->getSettingsSummary($map_provider_settings));
return $summary;
}
/**
* {@inheritdoc}
*/
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
$default_field_values = FALSE;
if (!empty($this->fieldDefinition
->getDefaultValueLiteral()[$delta])) {
$default_field_values = [
'lat' => $this->fieldDefinition
->getDefaultValueLiteral()[$delta]['lat'],
'lng' => $this->fieldDefinition
->getDefaultValueLiteral()[$delta]['lng'],
];
}
// '0' is an allowed value, '' is not.
if (isset($items[$delta]->lat) && isset($items[$delta]->lng)) {
$default_field_values = [
'lat' => $items[$delta]->lat,
'lng' => $items[$delta]->lng,
];
}
$element = [
'#type' => 'geolocation_input',
'#attributes' => [
'class' => [
'geolocation-widget-input',
'geolocation-widget-input-' . $delta,
],
'data-geolocation-widget-input-delta' => $delta,
],
];
if ($default_field_values) {
$element['#default_value'] = [
'lat' => $default_field_values['lat'],
'lng' => $default_field_values['lng'],
];
}
if ($delta == 0 && $this
->getSetting('allow_override_map_settings') && $this->mapProvider && !(!empty($form_state
->getBuildInfo()['base_form_id']) && $form_state
->getBuildInfo()['base_form_id'] == 'field_config_form')) {
$overriden_map_settings = empty($this
->getSetting(static::$mapProviderSettingsFormId)) ? [] : $this
->getSetting(static::$mapProviderSettingsFormId);
if (!empty($items
->get(0)
->getValue()['data']['map_provider_settings'])) {
$overriden_map_settings = $items
->get(0)
->getValue()['data']['map_provider_settings'];
}
$element[static::$mapProviderSettingsFormId] = $this->mapProvider
->getSettingsForm($overriden_map_settings, [
$this->fieldDefinition
->getName(),
0,
static::$mapProviderSettingsFormId,
]);
}
return $element;
}
/**
* {@inheritdoc}
*/
public function form(FieldItemListInterface $items, array &$form, FormStateInterface $form_state, $get_delta = NULL) {
$element = parent::form($items, $form, $form_state, $get_delta);
$settings = $this
->getSettings();
$id = Html::getUniqueId('edit_' . $this->fieldDefinition
->getName() . '_wrapper');
if (empty($element['#attributes'])) {
$element['#attributes'] = [];
}
$element['#attributes'] = array_merge_recursive($element['#attributes'], [
'data-widget-type' => $this
->getPluginId(),
'id' => $id,
'class' => [
'geolocation-map-widget',
],
]);
if (empty($element['#attached'])) {
$element['#attached'] = [];
}
$element['#attached'] = BubbleableMetadata::mergeAttachments($element['#attached'], [
'library' => [
'geolocation/geolocation.widget.map',
],
'drupalSettings' => [
'geolocation' => [
'widgetSettings' => [
$id => [
'autoClientLocationMarker' => $settings['auto_client_location_marker'] ? TRUE : FALSE,
'cardinality' => $this->fieldDefinition
->getFieldStorageDefinition()
->getCardinality(),
'fieldName' => $this->fieldDefinition
->getName(),
],
],
],
],
]);
$element['map'] = [
'#type' => 'geolocation_map',
'#weight' => -10,
'#settings' => $settings[static::$mapProviderSettingsFormId],
'#id' => $id . '-map',
'#maptype' => static::$mapProviderId,
'#context' => [
'widget' => $this,
],
];
$element['map'] = $this->mapCenterManager
->alterMap($element['map'], $settings['centre']);
if ($this
->getSetting('allow_override_map_settings') && !empty($items
->get(0)
->getValue()['data']['map_provider_settings'])) {
$element['map']['#settings'] = $items
->get(0)
->getValue()['data']['map_provider_settings'];
}
$context = [
'widget' => $this,
'form_state' => $form_state,
'field_definition' => $this->fieldDefinition,
];
if (!$this
->isDefaultValueWidget($form_state)) {
\Drupal::moduleHandler()
->alter('geolocation_field_map_widget', $element, $context);
}
return $element;
}
/**
* Return map provider.
*
* @return bool|\Drupal\geolocation\MapProviderInterface
* Map provder or false.
*/
public function getMapProvider() {
if ($this->mapProvider) {
return $this->mapProvider;
}
return FALSE;
}
/**
* {@inheritdoc}
*/
public function massageFormValues(array $values, array $form, FormStateInterface $form_state) {
$values = parent::massageFormValues($values, $form, $form_state);
if (!empty($this->settings['allow_override_map_settings'])) {
if (!empty($values[0][static::$mapProviderSettingsFormId])) {
$values[0]['data']['map_provider_settings'] = $values[0][static::$mapProviderSettingsFormId];
unset($values[0][static::$mapProviderSettingsFormId]);
}
}
return $values;
}
/**
* {@inheritdoc}
*/
public static function getControlPositions() {
return FALSE;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AllowedTagsXssTrait:: |
public | function | Returns a list of tags allowed by AllowedTagsXssTrait::fieldFilterXss(). | |
AllowedTagsXssTrait:: |
public | function | Returns a human-readable list of allowed tags for display in help texts. | |
AllowedTagsXssTrait:: |
public | function | Filters an HTML string to prevent XSS vulnerabilities. | |
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 | |
GeolocationMapWidgetBase:: |
protected | property | The entity field manager. | |
GeolocationMapWidgetBase:: |
protected | property | Map center manager. | |
GeolocationMapWidgetBase:: |
protected | property | Map Provider. | |
GeolocationMapWidgetBase:: |
protected static | property | Map Provider ID. | 2 |
GeolocationMapWidgetBase:: |
protected static | property | Map Provider Settings Form ID. | 2 |
GeolocationMapWidgetBase:: |
public static | function |
Creates an instance of the plugin. Overrides WidgetBase:: |
|
GeolocationMapWidgetBase:: |
public static | function |
Defines the default settings for this plugin. Overrides PluginSettingsBase:: |
2 |
GeolocationMapWidgetBase:: |
public | function |
Reports field-level validation errors against actual form elements. Overrides WidgetBase:: |
|
GeolocationMapWidgetBase:: |
public | function |
Creates a form element for a field. Overrides WidgetBase:: |
2 |
GeolocationMapWidgetBase:: |
public | function |
Returns the form for a single field widget. Overrides WidgetInterface:: |
|
GeolocationMapWidgetBase:: |
public static | function | ||
GeolocationMapWidgetBase:: |
public | function | Return map provider. | |
GeolocationMapWidgetBase:: |
public | function |
Returns the array of settings, including defaults for missing settings. Overrides PluginSettingsBase:: |
|
GeolocationMapWidgetBase:: |
public | function |
Massages the form values into the format expected for field values. Overrides WidgetBase:: |
|
GeolocationMapWidgetBase:: |
public | function |
Returns a form to configure settings for the widget. Overrides WidgetBase:: |
|
GeolocationMapWidgetBase:: |
public | function |
Returns a short summary for the current widget settings. Overrides WidgetBase:: |
|
GeolocationMapWidgetBase:: |
public | function |
Constructs a WidgetBase object. Overrides WidgetBase:: |
|
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. | |
PluginSettingsBase:: |
protected | property | Whether default settings have been merged into the current $settings. | |
PluginSettingsBase:: |
protected | property | The plugin settings injected by third party modules. | |
PluginSettingsBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
6 |
PluginSettingsBase:: |
public | function |
Returns the value of a setting, or its default value if absent. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the list of third parties that store information. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets all third-party settings of a given module. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
protected | function | Merges default settings values into $settings. | |
PluginSettingsBase:: |
public | function |
Informs the plugin that some configuration it depends on will be deleted. Overrides PluginSettingsInterface:: |
3 |
PluginSettingsBase:: |
public | function |
Sets the value of a setting for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the settings for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Unsets a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
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. | |
WidgetBase:: |
protected | property | The field definition. | |
WidgetBase:: |
protected | property |
The widget settings. Overrides PluginSettingsBase:: |
|
WidgetBase:: |
public static | function | Ajax callback for the "Add another item" button. | |
WidgetBase:: |
public static | function | Submission handler for the "Add another item" button. | |
WidgetBase:: |
public static | function | After-build handler for field elements in a form. | |
WidgetBase:: |
public | function |
Assigns a field-level validation error to the right widget sub-element. Overrides WidgetInterface:: |
8 |
WidgetBase:: |
public | function |
Extracts field values from submitted form values. Overrides WidgetBaseInterface:: |
2 |
WidgetBase:: |
protected | function | Special handling to create form elements for multiple values. | 1 |
WidgetBase:: |
protected | function | Generates the form element for a single copy of the widget. | |
WidgetBase:: |
protected | function | Returns the value of a field setting. | |
WidgetBase:: |
protected | function | Returns the array of field settings. | |
WidgetBase:: |
protected | function | Returns the filtered field description. | |
WidgetBase:: |
public static | function |
Retrieves processing information about the widget from $form_state. Overrides WidgetBaseInterface:: |
|
WidgetBase:: |
protected static | function | Returns the location of processing information within $form_state. | |
WidgetBase:: |
protected | function | Returns whether the widget handles multiple values. | |
WidgetBase:: |
public static | function |
Returns if the widget can be used for the provided field. Overrides WidgetInterface:: |
4 |
WidgetBase:: |
protected | function | Returns whether the widget used for default value form. | |
WidgetBase:: |
public static | function |
Stores processing information about the widget in $form_state. Overrides WidgetBaseInterface:: |