Newer
Older
Brandon Bergren
committed
<?php
// $Id$
/**
* @file
* GMap Views support.
*/
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
function theme_gmap_views_view_gmapextended(&$vars) {
$markers = array();
foreach ($vars['markers'] as $offset => $data) {
if (empty($data['lat']) || empty($data['lon'])) {
continue;
}
$markers[] = array(
'text' => $vars['result'][$offset], // @@@
'latitude' => (float)$data['lat'],
'longitude' => (float)$data['lon'],
'markername' => $data['markername'],
);
}
$map = gmap_parse_macro($vars['options']['macro']);
$map['markers'] = $markers;
$elem = array(
'#type' => 'gmap',
'#gmap_settings' => $map,
);
return drupal_render($elem);
}
function template_preprocess_gmap_views_view_gmapextended(&$vars) {
$view = $vars['view'];
// We need the raw data for this grouping, which is passed in as $vars['rows'].
// However, the template also needs to use for the rendered fields. We
// therefore swap the raw data out to a new variable and reset $vars['rows']
// so that it can get rebuilt.
// Store rows so that they may be used by further preprocess functions.
$result = $vars['result'] = $vars['rows'];
$vars['rows'] = array();
$options = $view->style_plugin->options;
$handler = $view->style_plugin;
$fields = &$view->field;
$columns = $handler->sanitize_columns($options['field_purposes'], $fields);
// Render fields.
$renders = $handler->render_fields($result);
$markers = array();
// File away fields into the marker data.
foreach ($options['field_purposes'] as $field => $purpose) {
foreach ($renders as $i => $row) {
if (!isset($markers[$i][$purpose])) {
$markers[$i][$purpose] = '';
}
$markers[$i][$purpose] .= $row[$field];
}
}
// @@@ When to enable this?
// Marker click text.
foreach ($markers as $offset => $marker) {
if (!isset($marker['text']) && !empty($vars['result'][$offset])) {
// Copy prerendered marker text in.
$marker['text'] = $vars['result'][$offset];
}
}
// @@@ add rest of handling
if ($options['markers'] == 'static') {
foreach ($markers as $offset => $marker) {
$markers[$offset]['markername'] = $options['markertype'];
}
}
// Marker cleanup
foreach ($markers as $offset => $marker) {
$marker['latitude'] = isset($marker['latitude']) ? (float)$marker['latitude'] : NULL;
$marker['longitude'] = isset($marker['longitude']) ? (float)$marker['longitude'] : NULL;
}
$vars['markers'] = $markers;
}