mirror of
https://github.com/farmOS/farmOS.git
synced 2024-02-23 11:37:38 +01:00
Allow other modules to help extract geometries from entities via hook_farm_map_entity_geometries().
This commit is contained in:
parent
2b4df1054f
commit
91cb17bb7f
50
modules/farm/farm_map/farm_map.api.php
Normal file
50
modules/farm/farm_map/farm_map.api.php
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Hooks provided by farm_map.
|
||||||
|
*
|
||||||
|
* This file contains no working PHP code; it exists to provide additional
|
||||||
|
* documentation for doxygen as well as to document hooks in the standard
|
||||||
|
* Drupal manner.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @defgroup farm_map Farm map module integrations.
|
||||||
|
*
|
||||||
|
* Module integrations with the farm_map module.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @defgroup farm_map_hooks Farm map's hooks
|
||||||
|
* @{
|
||||||
|
* Hooks that can be implemented by other modules in order to extend farm_map.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract geometries from an entity.
|
||||||
|
*
|
||||||
|
* @param $entity_type
|
||||||
|
* The entity type machine name.
|
||||||
|
* @param $entity
|
||||||
|
* The entity object.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
* Return an array of geometry strings in WKT format. An associative array
|
||||||
|
* is allowed, and the keys can be used to differentiate multiple geometries
|
||||||
|
* from the same entity.
|
||||||
|
*/
|
||||||
|
function hook_farm_map_entity_geometries($entity_type, $entity) {
|
||||||
|
$geometries = array();
|
||||||
|
|
||||||
|
// Find geometry in the standard geofield.
|
||||||
|
if (empty($entity->field_farm_geofield[LANGUAGE_NONE][0]['geom'])) {
|
||||||
|
$geometries[] = $entity->field_farm_geofield[LANGUAGE_NONE][0]['geom'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $geometries;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
|
@ -176,6 +176,39 @@ function farm_map_openlayers_object_preprocess_alter(&$build, $context) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract geometries from an entity.
|
||||||
|
*
|
||||||
|
* @param $entity_type
|
||||||
|
* The entity type machine name.
|
||||||
|
* @param $entity
|
||||||
|
* The entity object.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
* Return an array of geometry strings in WKT format. An associative array
|
||||||
|
* is allowed, and the keys can be used to differentiate multiple geometries
|
||||||
|
* from the same entity.
|
||||||
|
*/
|
||||||
|
function farm_map_entity_geometries($entity_type, $entity) {
|
||||||
|
|
||||||
|
// Ask modules to extract geometries.
|
||||||
|
return module_invoke_all('farm_map_entity_geometries', $entity_type, $entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements hook_farm_map_geometries().
|
||||||
|
*/
|
||||||
|
function farm_map_farm_map_entity_geometries($entity_type, $entity) {
|
||||||
|
$geometries = array();
|
||||||
|
|
||||||
|
// Find geometry in the standard geofield.
|
||||||
|
if (!empty($entity->field_farm_geofield[LANGUAGE_NONE][0]['geom'])) {
|
||||||
|
$geometries[] = $entity->field_farm_geofield[LANGUAGE_NONE][0]['geom'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $geometries;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implements hook_module_implements_alter().
|
* Implements hook_module_implements_alter().
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -63,32 +63,39 @@ function farm_map_kml_action(array $entities, $context = array()) {
|
||||||
$placemarks = array();
|
$placemarks = array();
|
||||||
foreach ($entities as $entity) {
|
foreach ($entities as $entity) {
|
||||||
|
|
||||||
// Get the geometry. If it is empty, skip the entity.
|
// Ask modules to extract geometries from this entity.
|
||||||
if (empty($entity->field_farm_geofield[LANGUAGE_NONE][0]['geom'])) {
|
$geometries = farm_map_entity_geometries($context['entity_type'], $entity);
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$geometry = $entity->field_farm_geofield[LANGUAGE_NONE][0]['geom'];
|
|
||||||
|
|
||||||
// Get the entity id and label.
|
// Get the entity id and label.
|
||||||
list($id, $rid, $bundle) = entity_extract_ids($context['entity_type'], $entity);
|
list($id, $rid, $bundle) = entity_extract_ids($context['entity_type'], $entity);
|
||||||
$label = entity_label($context['entity_type'], $entity);
|
$label = entity_label($context['entity_type'], $entity);
|
||||||
|
|
||||||
// Create a placemark.
|
// Create a placemark for each geometry.
|
||||||
$placemark = array(
|
foreach ($geometries as $key => $geometry) {
|
||||||
'pid' => $id,
|
|
||||||
'name' => $label,
|
|
||||||
'geometry' => $geometry,
|
|
||||||
);
|
|
||||||
|
|
||||||
// If this is an area entity (taxonomy_term), add the description.
|
// Create a placemark.
|
||||||
if ($context['entity_type'] == 'taxonomy_term' && $entity->vocabulary_machine_name == 'farm_areas') {
|
$placemark = array(
|
||||||
if (!empty($entity->description)) {
|
'pid' => $id,
|
||||||
$placemark['description'] = $entity->description;
|
'name' => $label,
|
||||||
|
'geometry' => $geometry,
|
||||||
|
);
|
||||||
|
|
||||||
|
// If a non-numeric key is set, tag the ID and label with it.
|
||||||
|
if (!is_numeric($key)) {
|
||||||
|
$placemark['pid'] .= '-' . check_plain($key);
|
||||||
|
$placemark['name'] .= ' (' . check_plain($key) . ')';
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Add the placemark to the list.
|
// If this is an area entity (taxonomy_term), add the description.
|
||||||
$placemarks[] = $placemark;
|
if ($context['entity_type'] == 'taxonomy_term' && $entity->vocabulary_machine_name == 'farm_areas') {
|
||||||
|
if (!empty($entity->description)) {
|
||||||
|
$placemark['description'] = $entity->description;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the placemark to the list.
|
||||||
|
$placemarks[] = $placemark;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If there are no placemarks, bail with a warning.
|
// If there are no placemarks, bail with a warning.
|
||||||
|
|
Loading…
Reference in a new issue