OpenlayersMaps.inc in Openlayers 7.3
CTools Export UI plugin definition for maps.
File
modules/openlayers_ui/src/Plugin/export_ui/OpenlayersMaps.incView source
<?php
/**
* @file
* CTools Export UI plugin definition for maps.
*/
/**
* CTools Export UI plugin definition.
*/
function openlayers_ui_OpenlayersMaps_ctools_export_ui() {
return array(
'schema' => 'openlayers_maps',
'access' => 'administer openlayers',
'menu' => array(
'menu prefix' => 'admin/structure/openlayers',
'menu item' => 'maps',
'menu title' => 'Maps',
'menu description' => 'Administer Openlayers maps presets.',
),
'handler' => array(
'class' => '\\Drupal\\openlayers_ui\\UI\\OpenlayersMaps',
'file' => 'OpenlayersMaps.php',
),
'use wizard' => TRUE,
'form info' => array(
'order' => array(
'start' => t('Administrative settings'),
'settings' => t('Map settings'),
'layers' => t('Layers'),
'controls' => t('Controls'),
'interactions' => t('Interactions'),
'components' => t('Components'),
'preview' => t('Preview'),
),
'forms' => array(
'start' => array(
'form id' => 'openlayers_map_form_start',
),
'settings' => array(
'form id' => 'openlayers_map_form_settings',
),
'layers' => array(
'form id' => 'openlayers_map_form_layers',
),
'controls' => array(
'form id' => 'openlayers_map_form_controls',
),
'interactions' => array(
'form id' => 'openlayers_map_form_interactions',
),
'components' => array(
'form id' => 'openlayers_map_form_components',
),
'preview' => array(
'form id' => 'openlayers_map_form_preview',
),
),
'wrapper' => 'openlayers_objects_ui_form_wrapper',
),
'export' => array(
'admin_title' => 'name',
'admin_description' => 'description',
),
'title singular' => t('map'),
'title plural' => t('maps'),
'title singular proper' => t('Openlayers map preset'),
'title plural proper' => t('Openlayers maps presets'),
'strings' => array(
'confirmation' => array(
'add' => array(
'success' => t('Map saved.'),
),
'delete' => array(
'success' => t('Map was deleted.'),
),
),
),
);
}
/**
* Map base config form handler.
*/
function openlayers_map_form_start($form, &$form_state) {
$class = new Drupal\openlayers_ui\UI\OpenlayersMaps();
$class
->init($form_state['plugin']);
$class
->edit_form($form, $form_state);
return $form;
}
/**
* Map base config form validation handler.
*/
function openlayers_map_form_start_validate($form, &$form_state) {
$class = new Drupal\openlayers_ui\UI\OpenlayersMaps();
$class
->init($form_state['plugin']);
$class
->edit_form_validate($form, $form_state);
}
/**
* Map base config form submit handler.
*/
function openlayers_map_form_start_submit($form, &$form_state) {
$class = new Drupal\openlayers_ui\UI\OpenlayersMaps();
$class
->init($form_state['plugin']);
$class
->edit_form_submit($form, $form_state);
}
/**
* Map settings config form handler.
*/
function openlayers_map_form_settings($form, &$form_state) {
if (!isset($form_state['item']->factory_service)) {
$form_state['item']->factory_service = 'openlayers.Map:OLMap';
}
if (($map = \Drupal\openlayers\Openlayers::load('Map', $form_state['item'])) == TRUE) {
$map
->optionsForm($form, $form_state);
$form['options']['#tree'] = TRUE;
}
return $form;
}
/**
* Map settings config form validation handler.
*/
function openlayers_map_form_settings_validate($form, &$form_state) {
$map = \Drupal\openlayers\Openlayers::load('map', $form_state['item']);
$map
->optionsFormValidate($form, $form_state);
}
/**
* Map settings config form submit handler.
*/
function openlayers_map_form_settings_submit($form, &$form_state) {
$map = \Drupal\openlayers\Openlayers::load('map', $form_state['item']);
if (!$map
->getFactoryService()) {
$map
->setFactoryService('openlayers.Map:OLMap');
}
$map
->optionsFormSubmit($form, $form_state);
}
/**
* Map layers config form handler.
*/
function openlayers_map_form_layers($form, &$form_state) {
if (($map = \Drupal\openlayers\Openlayers::load('Map', $form_state['item'])) == FALSE) {
return;
}
$all_layers = \Drupal\openlayers\Openlayers::loadAll('Layer');
array_walk($all_layers, function (\Drupal\openlayers\Types\LayerInterface $layer) {
$layer
->setWeight(0);
$layer->enabled = 0;
});
foreach ($map
->getOption('layers', array()) as $weight => $layer) {
/** @var Drupal\openlayers\Types\LayerInterface $layer */
$layer = \Drupal\openlayers\Openlayers::load('layer', $layer);
if (isset($all_layers[$layer
->getMachineName()])) {
$all_layers[$layer
->getMachineName()]
->setWeight($weight);
$all_layers[$layer
->getMachineName()]->enabled = 1;
}
}
uasort($all_layers, function (\Drupal\openlayers\Types\LayerInterface $a, \Drupal\openlayers\Types\LayerInterface $b) {
if ($a->enabled > $b->enabled) {
return -1;
}
elseif ($a->enabled < $b->enabled) {
return 1;
}
if ($a
->getWeight() < $b
->getWeight()) {
return -1;
}
elseif ($a
->getWeight() > $b
->getWeight()) {
return 1;
}
if ($a
->getMachineName() < $b
->getMachineName()) {
return -1;
}
elseif ($a
->getMachineName() > $b
->getMachineName()) {
return 1;
}
return 0;
});
$data = array();
$i = 0;
/** @var \Drupal\openlayers\Types\Layer $layer */
foreach ($all_layers as $machine_name => $layer) {
$operations = array();
$operations[] = l(t('Edit layer'), 'admin/structure/openlayers/layers/list/' . $layer
->getMachineName() . '/edit/options', array(
'query' => array(
'destination' => current_path(),
),
));
if ($source = $layer
->getSource()) {
$operations[] = l(t('Edit source'), 'admin/structure/openlayers/sources/list/' . $source
->getMachineName() . '/edit/options', array(
'query' => array(
'destination' => current_path(),
),
));
$source = (array) $source
->getExport();
$source_properties = array(
t('@name (<em>@machine_name</em>)', array(
'@name' => $source['name'],
'@machine_name' => $source['machine_name'],
)),
t('Factory service: <em>@factory_service</em>', array(
'@factory_service' => $source['factory_service'],
)),
);
}
else {
$source = array();
$source_properties = array(
t('Undefined'),
);
}
$source += array(
'name' => t('Undefined'),
'machine_name' => t('Undefined'),
'factory_service' => t('Undefined'),
);
$operations = implode('<br/>', $operations);
$layer_properties = array(
t('@name (<em>@machine_name</em>)', array(
'@name' => $layer
->getName(),
'@machine_name' => $layer
->getMachineName(),
)),
t('Factory service: <em>@factory_service</em>', array(
'@factory_service' => $layer
->getFactoryService(),
)),
);
$data[$machine_name] = array(
'layer_properties' => implode('<br/>', $layer_properties),
'source_properties' => implode('<br/>', $source_properties),
'machine_name' => $layer
->getMachineName(),
'factory_service' => $layer
->getFactoryService(),
'operations' => $operations,
'weight' => $i++,
'enabled' => isset($layer->enabled) ? $layer->enabled : 0,
'default' => 1,
'style' => $layer
->getOption('style', NULL),
);
}
$rows = array();
$row_elements = array();
foreach ($data as $id => $entry) {
$rows[$id] = array(
'data' => array(
array(
'class',
array(
'entry-cross',
),
),
array(
'data' => array(
'#type' => 'weight',
'#title' => t('Weight'),
'#title_display' => 'invisible',
'#default_value' => $entry['weight'],
'#parents' => array(
'layers',
$id,
'weight',
),
'#attributes' => array(
'class' => array(
'entry-order-weight',
),
),
),
),
array(
'data' => array(
'#type' => 'hidden',
'#default_value' => $entry['machine_name'],
'#parents' => array(
'layers',
$id,
'machine_name',
),
),
),
array(
'data' => array(
'#type' => 'checkbox',
'#title' => t('Enable'),
'#title_display' => 'invisible',
'#default_value' => $entry['enabled'],
'#parents' => array(
'layers',
$id,
'enabled',
),
),
),
array(
'data' => array(
'#type' => 'select',
'#title' => t('Style'),
'#title_display' => 'invisible',
'#options' => array(
'' => t('- Select a Style -'),
) + \Drupal\openlayers\Openlayers::loadAllAsOptions('style'),
'#default_value' => $entry['style'],
'#parents' => array(
'layers',
$id,
'style',
),
),
),
$entry['layer_properties'],
$entry['source_properties'],
$entry['operations'],
),
'class' => array(
'draggable',
),
);
// Build rows of the form elements in the table.
$row_elements[$id] = array(
'weight' => &$rows[$id]['data'][1]['data'],
'enabled' => &$rows[$id]['data'][2]['data'],
'style' => &$rows[$id]['data'][3]['data'],
'machine_name' => &$rows[$id]['data'][4]['data'],
);
}
// Add the table to the form.
$form['layers']['table_layers'] = array(
'#theme' => 'table',
// The row form elements need to be processed and build,
// therefore pass them as element children.
'elements' => $row_elements,
'#header' => array(
// We need two empty columns for the weigth field and the cross.
array(
'data' => NULL,
'colspan' => 2,
),
array(
'data' => t('Enabled'),
'colspan' => 2,
),
array(
'data' => t('Layer style'),
'colspan' => 1,
),
t('Layer properties'),
t('Source properties'),
t('Operations'),
),
'#rows' => $rows,
'#empty' => t('There are no entries available.'),
'#attributes' => array(
'id' => 'entry-order-layers',
),
);
drupal_add_tabledrag('entry-order-layers', 'order', 'sibling', 'entry-order-weight');
return $form;
}
/**
* Map layers config form submit handler.
*/
function openlayers_map_form_layers_submit($form, &$form_state) {
$map = \Drupal\openlayers\Openlayers::load('map', $form_state['item']);
$layers_enabled = array_filter($form_state['values']['layers'], function ($item) {
return (bool) $item['enabled'];
});
uasort($layers_enabled, function ($a, $b) {
return $a['weight'] - $b['weight'];
});
foreach ($layers_enabled as $data) {
// Update the layer style.
if (($layer = \Drupal\openlayers\Openlayers::load('layer', $data['machine_name'])) == TRUE) {
if (!empty($data['style'])) {
$layer
->setOption('style', $data['style']);
}
else {
$layer
->clearOption('style');
}
\Drupal\openlayers\Openlayers::save($layer);
}
}
$map
->setOption('layers', array_keys($layers_enabled));
$form_state['item'] = $map
->getExport();
}
/**
* Map controls config form handler.
*/
function openlayers_map_form_controls($form, &$form_state) {
$map = \Drupal\openlayers\Openlayers::load('map', $form_state['item']);
$all_controls = \Drupal\openlayers\Openlayers::loadAll('Control');
if (!isset($form_state['item']->options['controls'])) {
$form_state['item']->options['controls'] = array();
}
array_walk($all_controls, function (\Drupal\openlayers\Types\ControlInterface $control) {
$control
->setWeight(0);
$control->enabled = 0;
});
foreach ($map
->getObjects('control') as $control) {
/** @var Drupal\openlayers\Types\Control $control */
$all_controls[$control
->getMachineName()]
->setWeight($control
->getWeight());
$all_controls[$control
->getMachineName()]->enabled = 1;
}
uasort($all_controls, function (\Drupal\openlayers\Types\ControlInterface $a, \Drupal\openlayers\Types\ControlInterface $b) {
if ($a->enabled > $b->enabled) {
return -1;
}
elseif ($a->enabled < $b->enabled) {
return 1;
}
if ($a
->getWeight() < $b
->getWeight()) {
return -1;
}
elseif ($a
->getWeight() > $b
->getWeight()) {
return 1;
}
if ($a
->getMachineName() < $b
->getMachineName()) {
return -1;
}
elseif ($a
->getMachineName() > $b
->getMachineName()) {
return 1;
}
return 0;
});
$data = array();
$i = 0;
foreach ($all_controls as $machine_name => $control) {
$data[$machine_name] = array(
'name' => $control
->getName(),
'machine_name' => $control
->getMachineName(),
'description' => $control
->getDescription(),
'weight' => $i++,
'enabled' => (int) $control->enabled,
);
}
$rows = array();
$row_elements = array();
foreach ($data as $id => $entry) {
$rows[$id] = array(
'data' => array(
array(
'class',
array(
'entry-cross',
),
),
array(
'data' => array(
'#type' => 'weight',
'#title' => t('Weight'),
'#title_display' => 'invisible',
'#default_value' => $entry['weight'],
'#parents' => array(
'controls',
$id,
'weight',
),
'#attributes' => array(
'class' => array(
'entry-order-weight',
),
),
),
),
array(
'data' => array(
'#type' => 'checkbox',
'#title' => t('Enable'),
'#title_display' => 'invisible',
'#default_value' => $entry['enabled'],
'#parents' => array(
'controls',
$id,
'enabled',
),
),
),
check_plain($entry['name']),
check_plain($entry['machine_name']),
check_plain($entry['description']),
l(t('Edit'), 'admin/structure/openlayers/controls/list/' . $entry['machine_name'] . '/edit', array(
'query' => array(
'destination' => current_path(),
),
)),
),
'class' => array(
'draggable',
),
);
// Build rows of the form elements in the table.
$row_elements[$id] = array(
'weight' => &$rows[$id]['data'][1]['data'],
'enabled' => &$rows[$id]['data'][2]['data'],
);
}
$form['options']['#tree'] = TRUE;
// Add the table to the form.
$form['controls']['table_controls'] = array(
'#theme' => 'table',
// The row form elements need to be processed and build,
// therefore pass them as element children.
'elements' => $row_elements,
'#header' => array(
// We need two empty columns for the weigth field and the cross.
array(
'data' => NULL,
'colspan' => 2,
),
t('Enabled'),
t('Name'),
t('Machine name'),
t('Description'),
t('Operations'),
),
'#rows' => $rows,
'#empty' => t('There are no entries available.'),
'#attributes' => array(
'id' => 'entry-order-controls',
),
);
drupal_add_tabledrag('entry-order-controls', 'order', 'sibling', 'entry-order-weight');
return $form;
}
/**
* Map controls config form submit handler.
*/
function openlayers_map_form_controls_submit($form, &$form_state) {
$map = \Drupal\openlayers\Openlayers::load('map', $form_state['item']);
$controls_enabled = array_filter($form_state['values']['controls'], function ($item) {
return (bool) $item['enabled'];
});
uasort($controls_enabled, function ($a, $b) {
return $a['weight'] - $b['weight'];
});
$map
->setOption('controls', array_keys($controls_enabled));
$form_state['item'] = $map
->getExport();
}
/**
* Map interactions config form handler.
*/
function openlayers_map_form_interactions($form, &$form_state) {
$map = \Drupal\openlayers\Openlayers::load('map', $form_state['item']);
$all_interactions = \Drupal\openlayers\Openlayers::loadAll('Interaction');
$header = array(
'name' => t('Name'),
'machine_name' => t('Machine name'),
'description' => t('Description'),
'operations' => t('Operations'),
);
array_walk($all_interactions, function (\Drupal\openlayers\Types\InteractionInterface $interaction) {
$interaction
->setWeight(0);
$interaction->enabled = 0;
});
foreach ($map
->getObjects('interaction') as $interaction) {
/** @var Drupal\openlayers\Types\InteractionInterface $interaction */
$all_interactions[$interaction
->getMachineName()]
->setWeight($interaction
->getWeight());
$all_interactions[$interaction
->getMachineName()]->enabled = 1;
}
uasort($all_interactions, function (\Drupal\openlayers\Types\InteractionInterface $a, \Drupal\openlayers\Types\InteractionInterface $b) {
if ($a->enabled > $b->enabled) {
return -1;
}
elseif ($a->enabled < $b->enabled) {
return 1;
}
if ($a
->getWeight() < $b
->getWeight()) {
return -1;
}
elseif ($a
->getWeight() > $b
->getWeight()) {
return 1;
}
if ($a
->getMachineName() < $b
->getMachineName()) {
return -1;
}
elseif ($a
->getMachineName() > $b
->getMachineName()) {
return 1;
}
return 0;
});
$rows = array();
foreach ($all_interactions as $interaction) {
$rows[$interaction
->getMachineName()] = array(
'name' => $interaction
->getName(),
'machine_name' => $interaction
->getMachineName(),
'description' => $interaction
->getDescription(),
'operations' => l(t('Edit'), 'admin/structure/openlayers/interactions/list/' . $interaction
->getMachineName() . '/edit/options', array(
'query' => array(
'destination' => current_path(),
),
)),
);
}
$form['options']['#tree'] = TRUE;
if (!isset($form_state['item']->options['interactions'])) {
$form_state['item']->options['interactions'] = array();
}
$form['options']['interactions'] = array(
'#type' => 'tableselect',
'#header' => $header,
'#options' => $rows,
'#default_value' => drupal_map_assoc($form_state['item']->options['interactions']),
);
return $form;
}
/**
* Map interactions config form submit handler.
*/
function openlayers_map_form_interactions_submit($form, &$form_state) {
$map = \Drupal\openlayers\Openlayers::load('map', $form_state['item']);
$interactions_enabled = array_filter($form_state['values']['options']['interactions']);
$map
->setOption('interactions', array_keys($interactions_enabled));
$form_state['item'] = $map
->getExport();
}
/**
* Map components config form handler.
*/
function openlayers_map_form_components($form, &$form_state) {
$map = \Drupal\openlayers\Openlayers::load('map', $form_state['item']);
$all_components = \Drupal\openlayers\Openlayers::loadAll('Component');
array_walk($all_components, function (\Drupal\openlayers\Types\ComponentInterface $component) {
$component
->setWeight(0);
$component->enabled = 0;
});
foreach ($map
->getObjects('component') as $component) {
/** @var Drupal\openlayers\Types\Component $component */
$all_components[$component
->getMachineName()]
->setWeight($component
->getWeight());
$all_components[$component
->getMachineName()]->enabled = 1;
}
uasort($all_components, function (\Drupal\openlayers\Types\ComponentInterface $a, \Drupal\openlayers\Types\ComponentInterface $b) {
if ($a->enabled > $b->enabled) {
return -1;
}
elseif ($a->enabled < $b->enabled) {
return 1;
}
if ($a
->getWeight() < $b
->getWeight()) {
return -1;
}
elseif ($a
->getWeight() > $b
->getWeight()) {
return 1;
}
if ($a
->getMachineName() < $b
->getMachineName()) {
return -1;
}
elseif ($a
->getMachineName() > $b
->getMachineName()) {
return 1;
}
return 0;
});
$data = array();
$i = 0;
foreach ($all_components as $component) {
$data[$component
->getMachineName()] = array(
'name' => $component
->getName(),
'machine_name' => $component
->getMachineName(),
'description' => $component
->getDescription(),
'weight' => $i++,
'enabled' => $component->enabled,
);
}
$rows = array();
$row_elements = array();
foreach ($data as $id => $entry) {
$rows[$id] = array(
'data' => array(
array(
'class',
array(
'entry-cross',
),
),
array(
'data' => array(
'#type' => 'weight',
'#title' => t('Weight'),
'#title_display' => 'invisible',
'#default_value' => $entry['weight'],
'#parents' => array(
'components',
$id,
'weight',
),
'#attributes' => array(
'class' => array(
'entry-order-weight',
),
),
),
),
array(
'data' => array(
'#type' => 'checkbox',
'#title' => t('Enable'),
'#title_display' => 'invisible',
'#default_value' => $entry['enabled'],
'#parents' => array(
'components',
$id,
'enabled',
),
),
),
check_plain($entry['name']),
check_plain($entry['machine_name']),
check_plain($entry['description']),
l(t('Edit'), 'admin/structure/openlayers/components/list/' . $entry['machine_name'] . '/edit', array(
'query' => array(
'destination' => current_path(),
),
)),
),
'class' => array(
'draggable',
),
);
// Build rows of the form elements in the table.
$row_elements[$id] = array(
'weight' => &$rows[$id]['data'][1]['data'],
'enabled' => &$rows[$id]['data'][2]['data'],
);
}
$form['options']['#tree'] = TRUE;
// Add the table to the form.
$form['components']['table_components'] = array(
'#theme' => 'table',
// The row form elements need to be processed and build,
// therefore pass them as element children.
'elements' => $row_elements,
'#header' => array(
// We need two empty columns for the weight field and the cross.
array(
'data' => NULL,
'colspan' => 2,
),
t('Enabled'),
t('Name'),
t('Machine name'),
t('Description'),
t('Operations'),
),
'#rows' => $rows,
'#empty' => t('There are no entries available.'),
'#attributes' => array(
'id' => 'entry-order-components',
),
);
drupal_add_tabledrag('entry-order-components', 'order', 'sibling', 'entry-order-weight');
return $form;
}
/**
* Map components config form submit handler.
*/
function openlayers_map_form_components_submit($form, &$form_state) {
$map = \Drupal\openlayers\Openlayers::load('map', $form_state['item']);
$components_enabled = array_filter($form_state['values']['components'], function ($item) {
return (bool) $item['enabled'];
});
uasort($components_enabled, function ($a, $b) {
return $a['weight'] - $b['weight'];
});
$map
->setOption('components', array_keys($components_enabled));
$form_state['item'] = $map
->getExport();
}
/**
* Map preview form handler.
*/
function openlayers_map_form_preview($form, &$form_state) {
$map = \Drupal\openlayers\Openlayers::load('map', $form_state['item']);
$form['preview'] = array(
'#type' => 'openlayers',
'#map' => $map,
);
$alternative_template = 'openlayers--' . str_replace('_', '-', $map
->getMachineName()) . '.tpl.php';
$value = file_get_contents(drupal_get_path('module', 'openlayers') . '/theme/openlayers.tpl.php');
$form['information']['theme'] = array(
'#weight' => 20,
'#type' => 'fieldset',
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#title' => 'Theming information',
'template_content' => array(
'#title' => 'Openlayers map template',
'#type' => 'textarea',
'#default_value' => $value,
'#value' => $value,
'#description' => t("The default Openlayers template is <strong>openlayers.tpl.php</strong> for all the maps. You may override it by creating a file with the same name in your theme template's directory. You can also name it <em>openlayers--[map_machine_name].tpl.php</em> if you want to alter the display of this particular map only. For example: <strong>@template</strong>.", array(
'@template' => $alternative_template,
)),
),
);
return $form;
}
/**
* Map preview config form submit handler.
*/
function openlayers_map_form_preview_submit($form, &$form_state) {
}
Functions
Name | Description |
---|---|
openlayers_map_form_components | Map components config form handler. |
openlayers_map_form_components_submit | Map components config form submit handler. |
openlayers_map_form_controls | Map controls config form handler. |
openlayers_map_form_controls_submit | Map controls config form submit handler. |
openlayers_map_form_interactions | Map interactions config form handler. |
openlayers_map_form_interactions_submit | Map interactions config form submit handler. |
openlayers_map_form_layers | Map layers config form handler. |
openlayers_map_form_layers_submit | Map layers config form submit handler. |
openlayers_map_form_preview | Map preview form handler. |
openlayers_map_form_preview_submit | Map preview config form submit handler. |
openlayers_map_form_settings | Map settings config form handler. |
openlayers_map_form_settings_submit | Map settings config form submit handler. |
openlayers_map_form_settings_validate | Map settings config form validation handler. |
openlayers_map_form_start | Map base config form handler. |
openlayers_map_form_start_submit | Map base config form submit handler. |
openlayers_map_form_start_validate | Map base config form validation handler. |
openlayers_ui_OpenlayersMaps_ctools_export_ui | CTools Export UI plugin definition. |