diff --git a/gmap_plugin_style_gmap.inc b/gmap_plugin_style_gmap.inc old mode 100644 new mode 100755 index 08ce4a1..fffe4fb --- a/gmap_plugin_style_gmap.inc +++ b/gmap_plugin_style_gmap.inc @@ -94,15 +94,21 @@ class gmap_plugin_style_gmap extends views_plugin_style { } $defaults = gmap_defaults(); - $lat_field = 'gmap_lat'; - $lon_field = 'gmap_lon'; + if ($this->options['datasource'] == 'location') { + $lat_field = 'gmap_lat'; + $lon_field = 'gmap_lon'; + } + else if ($this->options['datasource'] == 'geofield') { + $lat_field = 'lat'; + $lon_field = 'lon'; + } // Determine fieldname for latitude and longitude fields. - if ($this->options['datasource'] == 'fields') { - $lat_fied_obj = $this->view->display_handler->get_handler('field', $this->options['latfield']); + else if ($this->options['datasource'] == 'fields') { + $lat_field_obj = $this->view->display_handler->get_handler('field', $this->options['latfield']); $lon_field_obj = $this->view->display_handler->get_handler('field', $this->options['lonfield']); - $lat_field = $lat_fied_obj->field_alias; - $lon_field = $lon_field_obj->field_alias; + $lat_field = $this->options['latfield']; + $lon_field = $this->options['lonfield']; } $tooltip_field = ''; @@ -170,8 +176,29 @@ class gmap_plugin_style_gmap extends views_plugin_style { foreach ($records as $row_index => $row) { $this->view->row_index = $row_index; - $lat = (float)$row->{$lat_field}; - $lon = (float)$row->{$lon_field}; + + if ($this->options['datasource'] == 'location') { + $lat = (float)$row->{$lat_field}; + $lon = (float)$row->{$lon_field}; + } + else if ($this->options['datasource'] == 'geofield') { + $geofield_name = 'field_' . $this->options['geofield']; + $geofield = isset($row->{$geofield_name}[0]['raw']) ? $row->{$geofield_name}[0]['raw'] : NULL; + if ($geofield) { + $lat = (float)$geofield[$lat_field]; + $lon = (float)$geofield[$lon_field]; + } + } + else if ($this->options['datasource'] == 'fields') { + $custom_field_latname = 'field_' . $lat_field; + $custom_field_lonname = 'field_' . $lon_field; + $custom_field_lat = isset($row->{$custom_field_latname}[0]['raw']) ? $row->{$custom_field_latname}[0]['raw'] : NULL; + $custom_field_lon = isset($row->{$custom_field_lonname}[0]['raw']) ? $row->{$custom_field_lonname}[0]['raw'] : NULL; + if ($custom_field_lat && $custom_field_lon) { + $lat = (float)$custom_field_lat['value']; + $lon = (float)$custom_field_lon['value']; + } + } // $row->nid is present in node views, views without node as the base table must include the nid field, // which will be in $row->node_nid if present. @@ -311,6 +338,7 @@ class gmap_plugin_style_gmap extends views_plugin_style { '#title' => t('Data Source'), '#options' => array( 'location' => t('Location.module'), + 'geofield' => t('Geofield.module'), 'fields' => t('Choose latitude and longitude fields'), //'geocode' => t('Just-in-time geocoding on field named "address"'), ), @@ -338,6 +366,16 @@ class gmap_plugin_style_gmap extends views_plugin_style { '#dependency' => array('edit-style-options-datasource' => array('fields')), ); + $form['geofield'] = array( + '#title' => t('Geofield field'), + '#description' => t('Select the Geofield source field.'), + '#type' => 'select', + '#options' => $field_options, + '#default_value' => $this->options['geofield'], + '#process' => array('ctools_dependent_process'), + '#dependency' => array('edit-style-options-datasource' => array('geofield')), + ); + $form['markers'] = array( '#type' => 'select', '#title' => t('Marker handling'),