array( 'variables' => array( 'header' => '', 'map' => '', 'footer' => '', ), ), '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__', 'variables' => array( 'node' => NULL, 'opt' => NULL, ), ), 'gmap_location_infowindow_user' => array( 'variables' => array( 'account' => NULL, ), ), ); } /** * Implements hook_permission(). */ function gmap_location_permission() { return array( '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, ); } /** * Implements 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'), 'page callback' => 'gmap_location_node_page', ); $items['map/node/load/%node/%'] = array( 'type' => MENU_CALLBACK, 'access arguments' => array('view node map'), 'page callback' => 'gmap_location_node_point', 'page arguments' => array(3, 4), ); $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. $result = db_query(" SELECT u.name, MAX(r.rid) as role, i.uid, i.lid, 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 u.access != 0 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 each marker represents. 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, ); return theme('gmap_location_user_page', array( '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 = "

$header

\n

$map

\n

$footer

"; if ($user->uid > 0) { $output .= '

' . t('To add/change your location to the user map, edit your location.', array('@url' => url('user/' . $user->uid . '/edit'))) . '

'; } 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 int $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 = 0; foreach ($result as $row) { $count++; $newmarker = array(); if ($mode == 1) { // Popup. $newmarker['rmt'] = $row->nid . '/0'; } 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('view user location details') && function_exists('og_is_group_type') && og_is_group_type($node->type)) { $rolemarkers = variable_get('gmap_role_markers', array()); // Reset markers. $map['markers'] = array(); $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 = :nid AND o.is_active >= 1 AND (l.latitude != 0 OR l.longitude != 0) GROUP BY o.uid", array( ':nid' => $nid, ) ); foreach ($result as $row) { $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; } } } $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, )); // exit(); return NULL; } /** * Theme function for displaying the node page. */ function theme_gmap_location_node_page(&$vars) { $count = $vars['count']; $header = $vars['header']; $map = $vars['map']; $footer = $vars['footer']; $output = ''; if ($header) { $output .= "

$header

"; } $output .= $map; if ($footer) { $output .= "

$footer

"; } 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 (map/user)'), '#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 used when the user information is displayed. See the !macros_link.', array( '!macros_link' => l( 'documentation on GMap macros', 'http://drupal.org/documentation/modules/gmap/macros', array( 'attributes' => array( 'target' => '_blank', ), ) ), ) ), ); $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', '#title' => t('Node Map (map/node)'), '#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 used when the node information is displayed. See the !macros_link.', array( '!macros_link' => l( 'documentation on GMap macros', 'http://drupal.org/documentation/modules/gmap/macros', array( 'attributes' => array( 'target' => '_blank', ), ) ), ) ), ); $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_type_get_types(); $defaults = variable_get('gmap_node_markers', array()); foreach ($ntypes as $key => $value) { $form['node']['gmap_node_markers'][$key] = array( '#type' => 'gmap_markerchooser', '#title' => t('Marker for %type', array('%type' => gmap_location_t("nodetype:type:$key:name", $value->name))), '#default_value' => isset($defaults[$key]) ? $defaults[$key] : 'drupal', ); $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); } /** * Implements hook_block_info(). */ function gmap_location_block_info() { return array( 0 => array( 'info' => t('Location map'), // @@@ Check whether we can fix this by telling drupal what js to use. 'cache' => DRUPAL_NO_CACHE, ), 1 => array( 'info' => t('Author map'), // @@@ 'cache' => DRUPAL_NO_CACHE, ), ); } /** * Implements hook_block_configure(). */ function gmap_location_block_configure($delta = '') { // Location map. if ($delta == 0) { $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.

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( '#type' => 'textfield', '#title' => t('Map Macro for %type', array('%type' => gmap_location_t("nodetype:type:$key:name", $value->name))), '#size' => 60, '#maxlength' => 500, '#default_value' => variable_get("gmap_location_block_macro_$key", ''), ); } } } // Author map. elseif ($delta == 1) { $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]'), ); $ntypes = node_type_get_types(); foreach ($ntypes as $type => $name) { $ntypes[$type] = check_plain(gmap_location_t("nodetype:type:$type:name", $name)); } $form['gmap_location_author_block_types'] = array( '#type' => 'checkboxes', '#title' => t('Enable author block for the following content types'), '#options' => $ntypes, '#default_value' => variable_get('gmap_location_author_block_types', array()), ); $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; } /** * Implements 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"); } 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']); } } /** * Implements 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)); } break; } } /** * Location block view. */ function _gmap_location_block_view($nid) { $block = array(); $node = node_load($nid); if (!empty($node->locations)) { $markertypes = variable_get('gmap_node_markers', array()); $markers = array(); $count = 0; foreach ($node->locations as $loc) { // @@@ Todo: Client side geocoding if (location_has_coordinates($loc)) { $count++; $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)) ->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, ''); 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, ); // @@@ Better theme $block['content'] = drupal_render($element); } } return $block; } /** * Location author block view. */ function _gmap_location_author_block_view($nid) { $block = array(); $node = node_load($nid); if (in_array($node->type, variable_get('gmap_location_author_block_types', array()))) { $markername = variable_get('gmap_location_author_block_marker', 'drupal'); $author = user_load($node->uid); $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, ); // @@@ Better theme. $block['content'] = drupal_render($element); } } return $block; } /** * Default theme for image nodes. * * @@@ Todo: Move to a tpl. */ function theme_gmap_location_infowindow_node__image(&$vars) { $node = $vars['node']; $out = '' . check_plain($node->title) . '
'; $out .= image_display($node, 'thumbnail'); return $out; } // @@@ This is not thoroughly tested for 5.x yet! // @@@ Or 6.x for that matter! // @@@ 7.x is right out! /** * 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(); } } // @@@ This is completely wrong. /** * Theme a node info window. * @ingroup themable */ 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'. // Make sure it all goes on one line. $return = '

'; $return .= strtr(drupal_render(node_view($node, 'teaser')), "'\n\r", '" '); $return .= '
'; return $return; } /** * 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; } /** * Implements 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); } /** * Wrapper function for i18n_string() if i18n_string enabled. */ function gmap_location_t($name, $string) { if (module_exists('i18n_string')) { return i18n_string($name, $string); } else { return $string; } }