Newer
Older
<?php
// $Id$
/**
* @file
* GMap Location module is a module to add some gmap funcationality based on location.modules information.
*
* The main functions are to provide a map showing all of the nodes or users that have location information on a map.
*/
/**
* Implementation of hook_theme().
*/
function gmap_location_theme() {
return array(
'gmap_location_user_page' => array('arguments' => array('header', 'map', 'footer')),
'gmap_location_node_page' => array('arguments' => array('count', 'header', 'map', 'footer')),
// @@@ Test this one thoroughly.
'gmap_location_infowindow_node' => array(
'pattern' => 'gmap_location_infowindow_node__',
'arguments' => array('node', 'opt'),
),
'gmap_location_infowindow_user' => array('arguments' => array('account')),
);
}
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
/**
* Implementation of hook_perm().
*/
function gmap_location_perm() {
return array('set user location', 'show user map', 'user locations', 'show node map');
}
/**
* Get the user map variable defaults.
*/
function _gmap_location_user_map_defaults() {
return array(
'macro' => '[gmap |id=usermap|center=40,0|zoom=3|width=100%|height=400px]',
'header' => 'This map illustrates the extent of users of this website. Each marker indicates a user that has entered their locations.',
'footer' => '',
'markermode' => 1,
);
}
/**
* Get the node map variable defaults.
*/
function _gmap_location_node_map_defaults() {
return array(
'macro' => '[gmap |id=nodemap|center=40,0|zoom=3|width=100%|height=400px]',
'header' => 'This map illustrates the locations of the nodes on this website. Each marker indicates a node associated with a specific location.',
'footer' => '',
'markermode' => 1,
);
}
/**
* Implementation of hook_menu().
*/
function gmap_location_menu() {
$items['map/user'] = array(
'path' => 'map/user',
'type' => MENU_NORMAL_ITEM,
'title' => 'User locations',
'access arguments' => array('show user map'),
'page callback' => 'gmap_location_user_page',
);
$items['map/user/load'] = array(
'type' => MENU_CALLBACK,
'access arguments' => array('show user map'),
'page callback' => 'gmap_location_user_point',
);
$items['map/node'] = array(
'type' => MENU_NORMAL_ITEM,
'title' => 'Node locations',
'access arguments' => array('show node map'),
'page callback' => 'gmap_location_node_page',
);
'type' => MENU_CALLBACK,
'access arguments' => array('show node map'),
'page callback' => 'gmap_location_node_point',
);
$items['admin/settings/gmap_location'] = array(
'type' => MENU_NORMAL_ITEM,
'title' => 'GMap Location',
'access arguments' => array('administer site configuration'),
'page callback' => 'drupal_get_form',
'page arguments' => array('gmap_location_admin_settings'),
'description' => 'Configure GMap Location settings.',
);
return $items;
}
/**
* Draws a page with a google map that has all of the site users.
*/
function gmap_location_user_page() {
$markertypes = variable_get('gmap_role_markers', array(DRUPAL_AUTHENTICATED_RID => 'drupal'));
$usermap = variable_get('gmap_user_map', _gmap_location_user_map_defaults());
$map = array_merge(gmap_defaults(), gmap_parse_macro($usermap['macro']));
$mode = $usermap['markermode'];
$map['rmtcallback'] = url('map/user/load');
$map['markermode'] = $usermap['markermode'];
// Find the highest rid, if available, for each user with a location.
Brandon Bergren
committed
$result = db_query("
SELECT
u.name, MAX(r.rid) as role, i.uid, l.latitude, l.longitude
FROM
{users} u
INNER JOIN
{location_instance} i
ON
u.uid = i.uid
INNER JOIN
{location} l
ON
i.lid = l.lid
LEFT JOIN
{users_roles} r
ON
i.uid = r.uid
WHERE
u.status = 1
AND
(l.latitude != 0 OR l.longitude != 0)
GROUP BY
i.uid");
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
while ($row = db_fetch_object($result)) {
// Determine marker type to show.
$marker = $markertypes[DRUPAL_AUTHENTICATED_RID];
if ($row->role && isset($markertypes[$row->role])) {
$marker = $markertypes[$row->role];
}
// Users with the 'user locations' permission are allowed to see who
// each marker represents.
if (user_access('user locations')) {
if ($mode == 1) {
$newmarker['rmt'] = $row->uid;
}
else if ($mode == 2) {
$newmarker['link'] = url('user/'. $row->uid);
}
$newmarker['latitude'] = $row->latitude;
$newmarker['longitude'] = $row->longitude;
$newmarker['markername'] = $marker;
$newmarker['opts']['title'] = check_plain($row->name);
}
else {
$newmarker['latitude'] = $row->latitude;
$newmarker['longitude'] = $row->longitude;
$newmarker['markername'] = $marker;
}
$map['markers'][] = $newmarker;
}
// @@@ Move to gmap_addons.
/*
if (user_access('user locations') && function_exists('buddylist_get_buddies') && count($locationbyuser)>0) {
//create lines for buddies
if (!isset($thismap['shapes'])) {
$thismap['shapes']=array();
}
ksort($locationbyuser);
foreach ($locationbyuser as $key => $value) {
$buddies= buddylist_get_buddies($key);
foreach ($buddies as $bkey => $bvalue) {
if ($bkey > $key && isset($locationbyuser[$bkey])) {
$thismap['shape'][] = array(
'points' => array($locationbyuser[$key], $locationbyuser[$bkey]),
'type' => 'line'
);
}
}
}
}
*/
return theme('gmap_location_user_page',
$usermap['header'],
theme('gmap', array('#settings' => $map)),
$usermap['footer']
);
}
/**
* AHAH callback for getting the contents of a user point popup.
*/
function gmap_location_user_point() {
$uid = arg(3);
if (is_numeric($uid) && $account = user_load(array('uid' => $uid))) {
Brandon Bergren
committed
echo theme('gmap_location_infowindow_user', $account);
exit();
}
}
/**
* Theme function for displaying the user page.
*/
function theme_gmap_location_user_page($header, $map, $footer) {
global $user;
$output = "<p>$header</p>\n<p>$map</p>\n<p>$footer</p>";
if ($user->uid > 0) {
Brandon Bergren
committed
$output .= '<p>'. t('To add/change your location to the user map, <a href="@url">edit your location</a>.', array('@url' => url('user/'. $user->uid .'/edit'))) .'</p>';
}
return $output;
}
/**
* Draws a page with a google map with the node on it, or if no node is set all of the nodes on it.
*
* @param $nid
* The node nid to draw on the map.
* If this is not set, or is null then all of the nodes will be drawn.
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
*/
function gmap_location_node_page($nid = NULL) {
$nodemap = variable_get('gmap_node_map', _gmap_location_node_map_defaults());
$markertypes = variable_get('gmap_node_markers', array());
$map = array_merge(
gmap_defaults(),
gmap_parse_macro($nodemap['macro']));
$mode = $nodemap['markermode'];
$map['rmtcallback'] = url('map/node/load');
$map['markermode'] = $nodemap['markermode'];
if (!is_array($map['markers'])) {
$map['markers'] = array();
}
$marker_sql1 = '';
$marker_sql2 = '';
if (module_exists('gmap_taxonomy')) {
$marker_sql1 = ', m.marker';
$marker_sql2 = 'LEFT JOIN {gmap_taxonomy_node} m ON n.vid = m.vid';
}
$add_sql = (is_numeric($nid) && $nid > 0) ? ' AND n.nid = %d' : '';
Brandon Bergren
committed
$result = db_query(db_rewrite_sql("
SELECT n.nid, n.type, n.title, l.latitude, l.longitude $marker_sql1
FROM {node} n
INNER JOIN {location_instance} i
ON n.vid = i.vid
INNER JOIN {location} l
ON l.lid = i.lid
$marker_sql2
WHERE
n.status = 1
AND
(l.latitude != 0 OR l.longitude != 0)
Brandon Bergren
committed
". $add_sql), $nid);
$count = 0;
while ($row = db_fetch_object($result)) {
$count++;
$newmarker = array();
if ($mode == 1) {
// Popup
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
}
elseif ($mode == 2) {
// Link
$newmarker['link'] = url('node/'. $row->nid);
}
$newmarker['latitude'] = $row->latitude;
$newmarker['longitude'] = $row->longitude;
$newmarker['markername'] = isset($markertypes[$row->type]) ? $markertypes[$row->type] : 'drupal';
if (isset($row->marker) && !empty($row->marker)) {
$newmarker['markername'] = $row->marker;
}
$newmarker['opts']['title'] = $row->title;
$map['markers'][] = $newmarker;
}
// Special stuff for single marker
if ($count == 1) {
// Center map on only marker.
$map['latitude'] = $map['markers'][0]['latitude'];
$map['longitude'] = $map['markers'][0]['longitude'];
// Autoclick in single marker case.
if ($mode == 1) {
$map['markers'][0]['autoclick'] = TRUE;
}
}
// Special cases for single node view.
if (is_numeric($nid) && $node = node_load($nid)) {
// Organic groups. Group nodes are displayed as a map of the users who belong to the group.
if (user_access('user locations') && function_exists('og_is_group_type') && og_is_group_type($node->type)) {
$rolemarkers = variable_get('gmap_role_markers', array());
$map['markers'] = array(); // Reset markers.
Brandon Bergren
committed
$result = db_query("
SELECT
MAX(r.rid) as role, i.uid, l.latitude, l.longitude
FROM
{og_uid} o
INNER JOIN {location_instance} i
ON i.uid = o.uid
INNER JOIN {location} l
ON l.lid = i.lid
LEFT JOIN {users_roles} r
ON i.uid = r.uid
WHERE
o.nid = %d
AND
o.is_active >= 1
AND
(l.latitude != 0 OR l.longitude != 0)
GROUP BY
o.uid", $nid, 'user');
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
while ($row = db_fetch_object($result)) {
$newmarker = array();
$newmarker['rmt'] = $nid .'/'. $row->uid;
// Determine marker type to show.
$newmarker['markername'] = $markertypes[DRUPAL_AUTHENTICATED_RID];
if ($row->role && isset($rolemarkers[$row->role])) {
$newmarker['markername'] = $rolemarkers[$row->role];
}
$newmarker['latitude'] = $row->latitude;
$newmarker['longitude'] = $row->longitude;
$map['markers'][] = $newmarker;
}
}
}
return theme('gmap_location_node_page',
$count,
$nodemap['header'],
theme('gmap', array('#settings' => $map)),
$nodemap['footer']
);
}
/**
* AHAH callback for getting the contents of a node point popup.
*/
function gmap_location_node_point($node, $opt) {
$output = '';
// @@@ Make sure $node->type is an ok thing to do here..
echo theme(array("gmap_location_infowindow_node__$node->type", 'gmap_location_infowindow_node'), $node, $opt);
// exit();
return;
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
}
/**
* Theme function for displaying the node page.
*/
function theme_gmap_location_node_page($count, $header, $map, $footer) {
$output = '';
if ($header) {
$output .= "<p>$header</p>";
}
$output .= $map;
if ($footer) {
$output .= "<p>$footer</p>";
}
return $output;
}
/**
* Admin Settings Page
*
*/
function gmap_location_admin_settings() {
$form['geocoding'] = array(
'#type' => 'fieldset',
'#title' => t('Geocode Locations'),
);
$form['geocoding']['gmap_geocode'] = array(
'#type' => 'radios',
'#title' => t('Enable the Google Map API geocoding'),
'#default_value' => variable_get('gmap_geocode', 1),
'#options' => array(1 => t('Enabled'), 0 => t('Disabled')),
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
);
$form['user'] = array(
'#type' => 'fieldset',
'#title' => t('User settings'),
);
// gmap_user_map defaults
$temp = variable_get('gmap_user_map', _gmap_location_user_map_defaults());
$form['user']['gmap_user_map'] = array(
'#type' => 'fieldset',
'#title' => t('User Map (<em>map/user</em>)'),
'#tree' => TRUE,
);
$form['user']['gmap_user_map']['macro'] = array(
'#type' => 'textfield',
'#title' => t('Macro'),
'#default_value' => $temp['macro'],
'#size' => 50,
'#maxlength' => 500,
'#description' => t('The gmap macro where the user information will be diplayed on.'),
);
$form['user']['gmap_user_map']['header'] = array(
'#type' => 'textarea',
'#title' => t('Page header'),
'#description' => t('Text at the top of the user map.', array('@url' => url('map/user'))),
'#default_value' => $temp['header'],
'#cols' => 50,
'#rows' => 6,
);
$form['user']['gmap_user_map']['footer'] = array(
'#type' => 'textarea',
'#title' => t('Page footer'),
'#description' => t('Text at the bottom of the user map.'),
'#default_value' => $temp['footer'],
'#cols' => 50,
'#rows' => 6,
);
$form['user']['gmap_user_map']['markermode'] = array(
'#type' => 'radios',
'#title' => t('Marker action'),
'#description' => t('Perform this action when a marker is clicked.'),
'#options' => array(t('Do nothing'), t('Open info window'), t('Open link')),
'#default_value' => $temp['markermode'],
);
// Option to use a different marker for each role
$form['user']['gmap_role_markers'] = array(
'#type' => 'fieldset',
'#title' => t('Markers per role'),
'#description' => t('Choose a marker to represent each user role on the user map. If a user belongs to multiple roles, the marker for the highest Role ID will be used.'),
'#tree' => TRUE,
);
// Retrieve and sort list of roles, sans anonymous user
$roles = user_roles(TRUE);
//asort($roles);
$defaults = variable_get('gmap_role_markers', array());
// Create a selection box per role
foreach ($roles as $rid => $role) {
$form['user']['gmap_role_markers'][$rid] = array(
'#type' => 'gmap_markerchooser',
'#title' => t('%role (Role ID: %rid)', array('%role' => $role, '%rid' => $rid)),
'#default_value' => isset($defaults[$rid]) ? $defaults[$rid] : 'drupal',
);
}
$form['node'] = array(
'#type' => 'fieldset',
'#title' => t('Node settings'),
);
// gmap_node_map defaults
$temp = variable_get('gmap_node_map', _gmap_location_node_map_defaults());
$form['node']['gmap_node_map'] = array(
'#type' => 'fieldset',
Brandon Bergren
committed
'#title' => t('Node Map (<em>map/node</em>)'),
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
'#tree' => TRUE,
);
$form['node']['gmap_node_map']['macro'] = array(
'#type' => 'textfield',
'#title' => t('Macro'),
'#default_value' => $temp['macro'],
'#size' => 50,
'#maxlength' => 500,
'#description' => t('The gmap macro where the node information will be diplayed on.'),
);
$form['node']['gmap_node_map']['header'] = array(
'#type' => 'textarea',
'#title' => t('Page header'),
'#description' => t('Text at the top of the node map.'),
'#default_value' => $temp['header'],
'#cols' => 50,
'#rows' => 6,
);
$form['node']['gmap_node_map']['footer'] = array(
'#type' => 'textarea',
'#title' => t('Page footer'),
'#description' => t('Text at the bottom of the node map.'),
'#default_value' => $temp['footer'],
'#cols' => 50,
'#rows' => 6,
);
$form['node']['gmap_node_map']['markermode'] = array(
'#type' => 'radios',
'#title' => t('Marker action'),
'#description' => t('Perform this action when a marker is clicked.'),
'#options' => array(t('Do nothing'), t('Open info window'), t('Open link')),
'#default_value' => $temp['markermode'],
);
// Option to use a different marker for each content type.
$form['node']['gmap_node_markers'] = array(
'#type' => 'fieldset',
'#title' => t('Markers per content type'),
'#description' => t('Choose a marker to represent each type of content on the node map.'),
'#tree' => TRUE,
);
$ntypes = node_get_types();
$defaults = variable_get('gmap_node_markers', array());
foreach ($ntypes as $key => $value) {
$form['node']['gmap_node_markers'][$key] = array(
'#type' => 'gmap_markerchooser',
Brandon Bergren
committed
'#title' => t('Marker for %type', array('%type' => $value->name)),
'#default_value' => isset($defaults[$key]) ? $defaults[$key] : 'drupal',
);
$settings = variable_get("location_settings_$key", FALSE);
if (!((isset($settings['multiple']['max']) && $settings['multiple']['max']) || variable_get("location_maxnum_$key", 0))) {
$form['node']['gmap_node_markers'][$key]['#description'] = t('This content type is not currently Location enabled.');
}
}
return system_settings_form($form);
}
/**
* Draw block of location for current node.
*/
function gmap_location_block($op = 'list', $delta = 0, $edit = array()) {
switch ($op) {
case 'list':
Brandon Bergren
committed
$blocks[0] = array(
'info' => t('Location map'),
'cache' => BLOCK_NO_CACHE, // As it injects JS.
);
$blocks[1] = array(
'info' => t('Author map'),
'cache' => BLOCK_NO_CACHE, // As it injects JS.
);
return $blocks;
case 'configure':
$form = array();
Brandon Bergren
committed
if ($delta == 0) { // Location map
$form['gmap_location_block_macro'] = array(
'#type' => 'textfield',
'#title' => t('Map Macro'),
'#size' => 60,
'#maxlength' => 500,
'#description' => t('A macro to be used as a base map for the location block. This map will be recentered on the location, so the center is not that important. <p>Alternate base map macros can be entered for a specific node type below.'),
Brandon Bergren
committed
'#default_value' => variable_get('gmap_location_block_macro', '[gmap |width=100% |height=200px |control=None |behavior=+autozoom +notype]'),
);
$ntypes = node_get_types();
foreach ($ntypes as $key => $value) {
$settings = variable_get("location_settings_$key", FALSE);
if ((isset($settings['multiple']['max']) && $settings['multiple']['max']) || variable_get("location_maxnum_$key", 0)) {
$form["gmap_location_block_macro_$key"] = array(
Brandon Bergren
committed
'#title' => t('Map Macro for %type', array('%type' => $value->name)),
'#size' => 60,
'#maxlength' => 500,
'#default_value' => variable_get("gmap_location_block_macro_$key", ''),
Brandon Bergren
committed
elseif ($delta == 1) { // Author map
$form['gmap_location_author_block_macro'] = array(
'#type' => 'textfield',
'#title' => t('Map Macro'),
'#size' => 60,
'#maxlength' => 500,
'#description' => t('A macro to be used as a base map for the location block author. This map will be recentered on the location, so the center is not that important.'),
Brandon Bergren
committed
'#default_value' => variable_get('gmap_location_author_block_macro', '[gmap |width=100% |height=200px |control=None |behavior=+autozoom +notype]'),
Brandon Bergren
committed
$form['gmap_location_author_block_types'] = array(
'#type' => 'checkboxes',
'#title' => t('Enable author block for the following content types'),
Brandon Bergren
committed
'#options' => array_map('check_plain', node_get_types('names')),
Brandon Bergren
committed
'#default_value' => variable_get('gmap_location_author_block_types', array()),
);
Brandon Bergren
committed
$form['gmap_location_author_block_marker'] = array(
'#type' => 'gmap_markerchooser',
'#title' => t('Marker to use for author map'),
'#default_value' => variable_get('gmap_location_author_block_marker', 'drupal'),
);
}
return $form;
case 'save':
if ($delta == 0) {
Brandon Bergren
committed
// Save macro, if customized.
$macro = trim($edit['gmap_location_block_macro']);
if ($macro == '[gmap |width=100% |height=200px |control=None |behavior=+autozoom +notype]' || empty($macro)) {
// If the user doesn't customize the variable, don't set it.
// This saves a lot of headache in the future.
variable_del('gmap_location_block_macro');
}
else {
variable_set('gmap_location_block_macro', $macro);
}
// Save node type specific macros.
$ntypes = node_get_types();
foreach ($ntypes as $key => $value) {
$settings = variable_get("location_settings_$key", FALSE);
if ((isset($settings['multiple']['max']) && $settings['multiple']['max']) || variable_get("location_maxnum_$key", 0)) {
Brandon Bergren
committed
$val = trim($edit["gmap_location_block_macro_$key"]);
if (empty($val)) {
variable_del("gmap_location_block_macro_$key");
}
else {
variable_set('gmap_location_block_macro_'. $key, $edit['gmap_location_block_macro_'. $key]);
}
}
}
}
elseif ($delta == 1) {
Brandon Bergren
committed
// Save macro, if customized.
$macro = trim($edit['gmap_location_author_block_macro']);
if ($macro == '[gmap |width=100% |height=200px |control=None |behavior=+autozoom +notype]' || empty($macro)) {
// If the user doesn't customize the variable, don't set it.
// This saves a lot of headache in the future.
variable_del('gmap_location_author_block_macro');
}
else {
variable_set('gmap_location_author_block_macro', $macro);
Brandon Bergren
committed
// Save "enabled on" types.
variable_set('gmap_location_author_block_types', array_keys(array_filter($edit['gmap_location_author_block_types'])));
Brandon Bergren
committed
// Save marker.
variable_set('gmap_location_author_block_marker', $edit['gmap_location_author_block_marker']);
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
}
return;
case 'view':
switch ($delta) {
case 0:
if (arg(0)=='node' && is_numeric(arg(1))) {
return gmap_location_block_view(arg(1));
}
break;
case 1:
if (arg(0)=='node' && is_numeric(arg(1))) {
return gmap_location_author_block_view(arg(1));
}
break;
}
}
}
function gmap_location_block_view($nid) {
$block = array();
$node = node_load($nid);
if ($node->locations) {
$markertypes = variable_get('gmap_node_markers', array());
$markers = array();
foreach ($node->locations as $loc) {
// @@@ Todo: Client side geocoding
if ($loc['latitude'] || $loc['longitude']) {
$markername = isset($markertypes[$node->type]) ? $markertypes[$node->type] : 'drupal';
if (module_exists('gmap_taxonomy')) {
$t = db_result(db_query('SELECT marker FROM {gmap_taxonomy_node} WHERE vid = %d', $node->vid));
if (!empty($t)) {
$markername = $t;
}
}
$markers[] = array(
'latitude' => $loc['latitude'],
'longitude' => $loc['longitude'],
'markername' => $markername,
);
}
}
if (!empty($markers)) {
Brandon Bergren
committed
$macro = variable_get('gmap_location_block_macro_'. $node->type, '');
if (empty($macro)) {
$macro = variable_get('gmap_location_block_macro', '[gmap |width=100% |height=200px |control=None |behavior=+autozoom +notype]');
}
$map = gmap_parse_macro($macro);
$map['latitude'] = $markers[0]['latitude'];
$map['longitude'] = $markers[0]['longitude'];
$map['markers'] = $markers;
$block['subject'] = t('Location');
$block['content'] = theme('gmap', array('#settings' => $map));
}
}
return $block;
}
function gmap_location_author_block_view($nid) {
$block = array();
$node = node_load($nid);
Brandon Bergren
committed
if (in_array($node->type, variable_get('gmap_location_author_block_types', array()))) {
Brandon Bergren
committed
$result = db_fetch_array(db_query("SELECT latitude, longitude FROM {location} l INNER JOIN {location_instance} i ON l.lid = i.lid WHERE i.uid = %d", $node->uid));
if (!$result) {
// Location not set at all.
return;
}
if (empty($result['latitude']) && empty($result['longitude'])) {
// Coordinates not set.
return;
}
Brandon Bergren
committed
$macro = variable_get('gmap_location_author_block_macro', '[gmap |width=100% |height=200px |control=None |behavior=+autozoom +notype]');
$map = array(
'#map' => 'gmap_location_authorblock',
'#settings' => gmap_parse_macro($macro),
);
$map['#settings']['markers'] = array();
$map['#settings']['markers'][] = array(
'latitude' => $result['latitude'],
'longitude' => $result['longitude'],
Brandon Bergren
committed
'markername' => variable_get('gmap_location_author_block_marker', 'drupal'),
'label' => check_plain($node->name),
);
$map['#settings']['latitude'] = $result['latitude'];
$map['#settings']['longitude'] = $result['longitude'];
$block['subject'] = t('Author Location');
$block['content'] = theme('gmap', $map);
}
return $block;
}
/**
* Default theme for image nodes.
* @@@ Todo: Move to a tpl.
*/
function theme_gmap_location_infowindow_node__image($node) {
$out = '<a href="'. url('node/'. $node->nid) .'">'. check_plain($node->title) .'</a> <br>';
$out .= image_display($node, 'thumbnail');
return $out;
}
// @@@ This is not thoroughly tested for 5.x yet!
/**
* Theme an Organic Groups node info window.
*/
function theme_gmap_location_infowindow_node__og($node, $opt) {
if (is_numeric($opt) && $account = user_load(array('uid' => $opt))) {
$output = theme('user_picture', $account);
$output .= theme('username', $account);
echo $output;
exit();
}
}
/**
* Theme a node info window.
* @ingroup themable
*/
function theme_gmap_location_infowindow_node($node) {
// Allow a module (where the module name matches the node type name)
// to define a custom display for the google map label.
// For this to work with flexinode defined data types,
// a module called 'flexinode_#.module' in your site's module
// directory and add theme_hook_gmapnodelabel($node, $location) to it.
// Be sure to enable your 'flexinode_#.module'.
return '<div class="gmapnodelabel gmapnodelabel-'. form_clean_id($node->type) .
'">'. strtr(theme('node', $node, TRUE), "'\n\r", '" ') .'</div>'; // make sure it all goes on one line.
/**
* Default theme for user infowindows.
*/
function theme_gmap_location_infowindow_user($account) {
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
$returntxt = theme('user_picture', $account);
$returntxt .= theme('username', $account);
return $returntxt;
}
/**
* Implementation of hook_node_type().
*/
function gmap_location_node_type($op, $info) {
$temp = variable_get('gmap_node_markers', array());
switch ($op) {
case 'delete':
unset($temp[$info->type]);
break;
case 'insert':
$temp[$info->type] = 'drupal';
break;
case 'update':
if (!empty($info->old_type) && $info->old_type != $info->type) {
$temp[$info->type] = $temp[$info->old_type];
unset($temp[$info->old_type]);
}
break;
}
variable_set('gmap_node_markers', $temp);
}