Newer
Older
<?php
/**
* @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('variables' => array('header' => '', 'map' => '', 'footer' => '')),
Brandon Bergren
committed
'gmap_location_node_page' => array('variables' => array('count' => 0, 'header' => '', 'map' => '', 'footer' => '')),
// @@@ Test this one thoroughly.
'gmap_location_infowindow_node' => array(
'pattern' => 'gmap_location_infowindow_node__',
Brandon Bergren
committed
'variables' => array('node' => NULL, 'opt' => NULL),
'gmap_location_infowindow_user' => array('variables' => array('account' => NULL)),
* Implementation of hook_permission().
function gmap_location_permission() {
'view node map' => array(
'title' => t('View node map'),
'description' => t('See the sitewide node map.'),
),
'view user map' => array(
'title' => t('View user map'),
'description' => t('See the sitewide user map.'),
),
'view user location details' => array(
'title' => t('View user location details'),
'description' => t('See the users associated with markers on the sitewide user 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(
'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.
// 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) {
//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'
);
}
$element = array(
'#type' => 'gmap',
'#gmap_settings' => $map,
);
'header' => $usermap['header'],
'map' => drupal_render($element),
'footer' => $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($uid)) {
echo theme('gmap_location_infowindow_user', array('account' => $account));
exit();
}
}
/**
* Theme function for displaying the user page.
*/
function theme_gmap_location_user_page(&$vars) {
$header = $vars['header'];
$map = $vars['map'];
$footer = $vars['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.nid = m.nid');
$query->addTag('node_access');
$result = $query->execute();
$count++;
$newmarker = array();
if ($mode == 1) {
// Popup
}
elseif ($mode == 2) {
// Link
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
}
$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
// 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;
}
}
}
Brandon Bergren
committed
$element = array(
'#type' => 'gmap',
'#gmap_settings' => $map,
);
return theme('gmap_location_node_page', array(
'count' => $count,
'header' => $nodemap['header'],
'map' => drupal_render($element),
'footer' => $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'
), array(
'node' => $node,
'opt' => $opt
));
}
/**
* Theme function for displaying the node page.
*/
Brandon Bergren
committed
function theme_gmap_location_node_page(&$vars) {
$count = $vars['count'];
$header = $vars['header'];
$map = $vars['map'];
$footer = $vars['footer'];
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
$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,
quicksketch
committed
'#description' => t('The GMap macro to be used when displaying user information. See the <a href="http://drupal.org/documentation/modules/gmap/macros">documentation on GMap macros</a>.'),
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
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
);
$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>)'),
'#tree' => TRUE,
);
$form['node']['gmap_node_map']['macro'] = array(
'#type' => 'textfield',
'#title' => t('Macro'),
'#default_value' => $temp['macro'],
'#size' => 50,
'#maxlength' => 500,
quicksketch
committed
'#description' => t('The GMap macro which will be used to display the node information. See the <a href="http://drupal.org/documentation/modules/gmap/macros">documentation on GMap macros</a>.'),
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
);
$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);
}
/**
function gmap_location_block_info() {
return array(
0 => array(
'info' => t('Location map'),
'cache' => DRUPAL_NO_CACHE, // @@@ Check whether we can fix this by telling drupal what js to use.
),
1 => array(
'info' => t('Author map'),
'cache' => DRUPAL_NO_CACHE, // @@@
),
);
}
/**
* Implement hook_block_configure().
*/
function gmap_location_block_configure($delta = '') {
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.'),
'#default_value' => variable_get('gmap_location_block_macro', '[gmap |width=100% |height=200px |control=None |behavior=+autozoom +notype]'),
);
$ntypes = node_type_get_types();
foreach ($ntypes as $key => $value) {
$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(
'#title' => t('Map Macro for %type', array('%type' => $value->name)),
'#size' => 60,
'#maxlength' => 500,
'#default_value' => variable_get("gmap_location_block_macro_$key", ''),
}
}
}
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.'),
'#default_value' => variable_get('gmap_location_author_block_macro', '[gmap |width=100% |height=200px |control=None |behavior=+autozoom +notype]'),
);
$form['gmap_location_author_block_types'] = array(
'#type' => 'checkboxes',
'#title' => t('Enable author block for the following content types'),
'#options' => array_map('check_plain', node_type_get_names()),
'#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;
}
Brandon Bergren
committed
/**
* Implement hook_block_save().
*/
function gmap_location_block_save($delta = '', $edit = array()) {
if ($delta == 0) {
// 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_type_get_types();
foreach ($ntypes as $key => $value) {
$settings = variable_get("location_settings_node_$key", FALSE);
if ((isset($settings['multiple']['max']) && $settings['multiple']['max']) || variable_get("location_maxnum_$key", 0)) {
$val = trim($edit["gmap_location_block_macro_$key"]);
if (empty($val)) {
variable_del("gmap_location_block_macro_$key");
Brandon Bergren
committed
}
else {
variable_set('gmap_location_block_macro_' . $key, $edit['gmap_location_block_macro_' . $key]);
}
}
elseif ($delta == 1) {
// 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);
}
// Save "enabled on" types.
variable_set('gmap_location_author_block_types', array_keys(array_filter($edit['gmap_location_author_block_types'])));
// Save marker.
variable_set('gmap_location_author_block_marker', $edit['gmap_location_author_block_marker']);
}
}
/**
* Implement hook_block_view().
*/
function gmap_location_block_view($delta = '') {
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));
$block = array();
$node = node_load($nid);
$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 nid = :nid', array(':nid' => $node->nid))
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,
);
}
}
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', array(), array('context' => 'geolocation'));
$element = array(
'#type' => 'gmap',
'#gmap_settings' => $map,
);
$block['content'] = drupal_render($element); // @@@ 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');
$element = array(
'#type' => 'gmap',
'#gmap_settings' => $map,
);
$block['content'] = drupal_render($element); // @@@ Better theme
}
}
return $block;
}
/**
* Default theme for image nodes.
* @@@ Todo: Move to a tpl.
*/
function theme_gmap_location_infowindow_node__image(&$vars) {
$node = $vars['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(&$vars) {
$node = $vars['node'];
$opt = $vars['opt'];
if (is_numeric($opt) && $account = user_load($opt)) {
$output = theme('user_picture', array('account' => $account));
$output .= theme('username', array('account' => $account));
echo $output;
exit();
}
}
/**
* Theme a node info window.
* @ingroup themable
*/
Brandon Bergren
committed
function theme_gmap_location_infowindow_node(&$vars) {
$node = $vars['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'.
Brandon Bergren
committed
return '<div class="gmapnodelabel gmapnodelabel-' . drupal_clean_css_identifier($node->type) .
Andriy Podanenko http://druler.com
committed
'">' . strtr(drupal_render(node_view($node, 'teaser')), "'\n\r", '" ') . '</div>'; // make sure it all goes on one line.
/**
* Default theme for user infowindows.
*/
function theme_gmap_location_infowindow_user(&$vars) {
$account = $vars['account'];
$returntxt = theme('user_picture', array('account' => $account));
$returntxt .= theme('username', array('account' => $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);
}