geo/modules/geo_field/geo_field.module, line 165
- Versions
- 6
geo_field($op, &$node, $field, &$items, $teaser, $page)
Implementation of hook_field().
Code
<?php
function geo_field($op, &$node, $field, &$items, $teaser, $page) {
// Make sure the CCK table has our geo field.
_geo_field_init($field);
switch ($op) {
case 'load':
$ret = $node->$field['field_name'];
unset($ret['geo']);
$column = $field['field_name'] .'_geo';
$res = db_query("SELECT ". geo('field_select', $column) .", delta
FROM {". _geo_field_tablename($field) ."} WHERE vid = %d", $node->vid);
while ($row = db_fetch_array($res)) {
foreach ($row as $k => $v) {
if ($k != 'delta') $ret[$row['delta']][$k] = $v;
}
}
// Identify ourselves on the node level for RSS and other postprocessing.
if (!isset($node->geo_fields)) {
$node->geo_fields = array();
}
$node->geo_fields[] = $field['field_name'];
return array($field['field_name'] => $ret, 'geo_fields' => $node->geo_fields);
case 'insert':
case 'update':
// We can't get Geom functions past query substitutions, so use our own.
_geo_field_save($op, $node, $field, $items);
// Unset the field data to prevent further action.
unset($node->$field['field_name']);
$items = array();
return;
case 'validate':
foreach ($items as $k => $item) {
if ($item['lat'] && $item['lon']) {
$items[$k]['wkt'] = geo('wkt_from_point', $item['lat'], $item['lon']);
}
if(!$item['wkt']) continue;
if (($error = geo('wkt_validate', $item['wkt'], $field['geo_type'])) !== TRUE) {
$error_field = $field['field_name'];
form_set_error($error_field, $error);
}
}
return;
case 'presave':
foreach ($items as $k => $item) {
if ($item['lat'] && $item['lon']) {
$items[$k]['wkt'] = geo('wkt_from_point', $item['lat'], $item['lon']);
}
}
return;
}
}
?> 