function openlayers_geofield_widget_element_validate in Geofield 7.2
1 string reference to 'openlayers_geofield_widget_element_validate'
- openlayers_field_widget_form in ./
geofield.widgets.openlayers.inc - Implements hook_field_widget_form().
File
- ./
geofield.widgets.openlayers.inc, line 361 - Provides widget hooks on behalf of Openlayers.
Code
function openlayers_geofield_widget_element_validate($element, &$form_state) {
$container_delta = $element[0];
if (!empty($container_delta['geom']['#value'])) {
geophp_load();
$combined_geom = geoPHP::load($container_delta['geom']['#value']);
$combined_geom = geoPHP::geometryReduce($combined_geom);
// Check to make sure they only saved the allowed types
$geom_type = $combined_geom
->geometryType();
if ($geom_type == 'GeometryCollection' || $geom_type == 'MultiPoint' || $geom_type == 'MultiLineString' || $geom_type == 'MultiPolygon') {
$geoms = $combined_geom
->getComponents();
}
else {
$geoms = array(
$combined_geom,
);
}
foreach ($geoms as $item) {
$allowed = FALSE;
foreach ($container_delta['#widget_settings']['feature_types'] as $type) {
$geometry_type = strtolower($item
->geometryType());
if ($geometry_type == 'linestring') {
$geometry_type = 'path';
}
if (strpos(strtolower($geometry_type), $type) !== FALSE) {
$allowed = TRUE;
break;
}
}
if (!$allowed) {
form_set_error($container_delta['#field_name'], 'Not allowed to submit a geometry of type ' . $item
->geometryType());
return;
}
}
//Check the number deltas
$cardinality = $container_delta['#widget_settings']['cardinality'];
if ($cardinality > 0 && $container_delta['#widget_settings']['data_storage'] == 'single') {
if (count($geoms) > $cardinality) {
form_set_error($container_delta['#field_name'], 'Too many geometries submitted. Max allowed is ' . $cardinality);
return;
}
}
// Checks pass, lets load this up into deltas
if ($container_delta['#widget_settings']['data_storage'] == 'collection') {
//Assign values to the form state
form_set_value($element[0]['geom'], $combined_geom
->out('wkt'), $form_state);
}
if ($container_delta['#widget_settings']['data_storage'] == 'single') {
foreach ($geoms as $delta => $geom) {
// Clone delta-0
$element = $container_delta;
// Override the delta
openlayers_geofield_override_element_delta($element, 0, $delta);
// Assign the value in the form_state
form_set_value($element['geom'], $geom
->out('wkt'), $form_state);
}
}
}
}