geo_field

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;
  }
}
?>