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')),
);
}
/**
* Implementation of hook_perm().
*/
function gmap_location_perm() {
return array(
'view node map',
'view user map',
'view user location details',
);
}
/**
* 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(
'type' => MENU_NORMAL_ITEM,
'title' => 'User locations',
'access arguments' => array('view user map'),
'page callback' => 'gmap_location_user_page',
);
$items['map/user/load'] = array(
'type' => MENU_CALLBACK,
'access arguments' => array('view user map'),
'page callback' => 'gmap_location_user_point',
);
$items['map/node'] = array(
'type' => MENU_NORMAL_ITEM,
'title' => 'Node locations',
'access arguments' => array('view node map'),
'access arguments' => array('view node map'),
$items['admin/config/services/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, i.lid, l.latitude, l.longitude
Brandon Bergren
committed
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
Brandon Bergren
committed
AND
u.access != 0
Brandon Bergren
committed
AND
(l.latitude != 0 OR l.longitude != 0)
GROUP BY
i.uid, i.lid, u.name, l.latitude, l.longitude");
// The u.name, l.latitude, and l.longitude in the GROUP BY are needed for
// PostgreSQL.
foreach($result as $row) {
// Determine marker type to show.
$marker = $markertypes[DRUPAL_AUTHENTICATED_RID];
if ($row->role && isset($markertypes[$row->role])) {
$marker = $markertypes[$row->role];
}
// Users with the 'view user location details' permission are allowed to see who
if (user_access('view user location details')) {
if ($mode == 1) {
$newmarker['rmt'] = $row->uid;
}
elseif ($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('view user location details') && function_exists('buddylist_get_buddies') && count($locationbyuser)>0) {
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
198
199
200
201
202
203
204
//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) {
$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.
*/
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 (!isset($map['markers']) || !is_array($map['markers'])) {
$map['markers'] = array();
}
$query = db_select('node', 'n');
$query
->condition('n.status', 1)
->condition(db_or()->condition('l.latitude', 0, '!=')->condition('l.longitude', 0, '!='))
->fields('n', array('nid', 'type', 'title'))
->fields('l', array('latitude', 'longitude'));
$query->innerjoin('location_instance', 'i', 'n.vid = i.vid');
$query->innerjoin('location', 'l', 'l.lid = i.lid');
if (is_numeric($nid) && $nid > 0) {
$query->condition('n.nid', $nid);
}
if (module_exists('gmap_taxonomy')) {
$query
->fields('m', array('marker'))
->leftjoin('gmap_taxonomy_node', 'm', 'n.vid = m.vid');
$query->addTag('node_access');
$result = $query->execute();
foreach($result as $row) {
$count++;
$newmarker = array();
if ($mode == 1) {
// Popup
}
elseif ($mode == 2) {
// Link
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
308
309
310
}
$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('view user location details') && 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
Brandon Bergren
committed
AND
o.is_active >= 1
AND
(l.latitude != 0 OR l.longitude != 0)
GROUP BY
o.uid", array(
':nid' => $nid
));
Brandon Bergren
committed
foreach($result as $row) {
// 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;
}
/**
* Theme function for displaying the node page.
*/
function theme_gmap_location_node_page($count, $header = '', $map = '', $footer = '') {
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
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
$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['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>)'),
473
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
'#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,
);
$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',
);
Brandon Bergren
committed
$settings = variable_get("location_settings_node_$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) {
Brandon Bergren
committed
$settings = variable_get("location_settings_node_$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) {
Brandon Bergren
committed
$settings = variable_get("location_settings_node_$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]);
Brandon Bergren
committed
}
}
}
}
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']);
}
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
Brandon Bergren
committed
if (location_has_coordinates($loc)) {
$markername = isset($markertypes[$node->type]) ? $markertypes[$node->type] : 'drupal';
if (module_exists('gmap_taxonomy')) {
$t = db_query('SELECT marker FROM {gmap_taxonomy_node} WHERE vid = :vid', array(':vid' => $node->vid))
->fetchField();
if (!empty($t)) {
$markername = $t;
}
}
$markertitle = $node->title;
if (!empty($loc['name'])) {
$markertitle = $loc['name'];
}
$markers[] = array(
'latitude' => $loc['latitude'],
'longitude' => $loc['longitude'],
'markername' => $markername,
'offset' => $count-1,
'opts' => array('title' => $markertitle),
);
}
}
if (!empty($markers)) {
$macro = variable_get('gmap_location_block_macro_' . $node->type, '');
Brandon Bergren
committed
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)); // @@@ Better theme
}
}
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()))) {
$markername = variable_get('gmap_location_author_block_marker', 'drupal');
$markers = array();
$count = 0;
foreach ($author->locations as $loc) {
// @@@ Todo: Client side geocoding
if ($loc['latitude'] || $loc['longitude']) {
$count++;
}
$markertitle = $author->name;
if (!empty($loc['name'])) {
$markertitle = $loc['name'];
}
$markers[] = array(
'latitude' => $loc['latitude'],
'longitude' => $loc['longitude'],
'markername' => $markername,
'offset' => $count-1,
'opts' => array('title' => $markertitle),
);
if (!empty($markers)) {
$macro = variable_get('gmap_location_author_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('Author Location');
$block['content'] = theme('gmap', array('#settings' => $map)); // @@@ Better theme
}
}
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>';
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(node_view($node, TRUE, FALSE, FALSE), "'\n\r", '" ') . '</div>'; // make sure it all goes on one line.
/**
* Default theme for user infowindows.
*/
function theme_gmap_location_infowindow_user($account) {
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
$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);
}