
in reference to this: https://community.mybb.com/thread-63357-...pid1326100
minor change if you want to have the update map cache link available on map page for admin user
usermap.xml (Size: 9.53 KB / Downloads: 97)
Non admin
![[Image: Screenshot-20200115-143409-Firefox.jpg]](https://camo.mybb.com/833c50fc0f3480db44daf1c7dd3fb90455cfb2d4/68747470733a2f2f692e6962622e636f2f437778424451622f53637265656e73686f742d32303230303131352d3134333430392d46697265666f782e6a7067)
Admin
![[Image: Screenshot-20200115-143231-Firefox.jpg]](https://camo.mybb.com/21694295f7fdc8923402c974386dddc42292ffa2/68747470733a2f2f692e6962622e636f2f684644705133532f53637265656e73686f742d32303230303131352d3134333233312d46697265666f782e6a7067)
You need to get an api key visit here and select the start button
https://cloud.google.com/maps-platform/
And add your new api key into the api key on usermap page edit
Also user profile location format must be in this format for example: "Denver, Colorado, United States"
Another note: not sure what version or variant of pagemanager you are using but the particular version I quickly tried was not showing the information correctly in "who's online" and was marking usermap as "Unknown Location" though the page link was accurate, that bugged me to no avail and I simply did not feel like digging into the page manager plugin for something I don't plan on using myself so a simple plugin solved it for me and my ocd instead, lol.
usermap.php (Size: 1.19 KB / Downloads: 86)
Page manager I used for this usermap.xml:
https://github.com/vintagedaddyo/MyBB_Pl...agemanager
* but you could ignore version compat on install for usermap.xml if not using 1.5.2 or most likely just edit the provided xml file for whatever page manager version you are using if it is not 1.5.2 and say for example something like 2.1.3 or any other such variant
minor change if you want to have the update map cache link available on map page for admin user
<?php
# MyBB Page Manager Page - Usermap
# vintagedaddyo
$key = '';
$location = 'United States';
$zoom = 4;
$fid = 1;
$datacache = './cache/coords';
global $db, $headerinclude, $header, $theme, $footer, $cache, $templates, $mybb;
if($mybb->usergroup['cancp'])
{
$admincache =
'<a href="'.$mybb->settings['bburl'].'/misc.php?page=usermap&update=1"><b>Refresh Map Cache</b></a>
<br />';
}
else
{
$admincache = ' ';
}
if(!$mybb->usergroup['canviewprofiles'])
{
error_no_permission();
}
require_once MYBB_ROOT.'inc/class_xml.php';
require_once MYBB_ROOT.'inc/functions_image.php';
$contents = fetch_remote_file('https://maps.googleapis.com/maps/api/geocode/xml?address=' . rawurlencode($location).'&key=' . $key . '&sensor=false');
$parser = new XMLParser($contents);
$tree = $parser->get_tree();
if($tree['GeocodeResponse']['result']['geometry']['location'])
{
$lat = $tree['GeocodeResponse']['result']['geometry']['location']['lat']['value'];
$lng = $tree['GeocodeResponse']['result']['geometry']['location']['lng']['value'];
$location = array($lng, $lat);
}
else
{
$location = array(0, 0);
$zoom = 2;
}
if(!file_exists($datacache) || time()-filemtime($datacache) > 82800 || ($mybb->usergroup['cancp'] && intval($mybb->input['update']) == 1))
{
$usergroups_cache = $cache->read('usergroups');
$query = $db->simple_select("usertitles", "*", "", array('order_by' => 'posts', 'order_dir' => 'DESC'));
while($usertitle = $db->fetch_array($query))
{
$usertitles_cache[$usertitle['posts']] = $usertitle;
}
$query = $db->query("
SELECT u.*, f.*
FROM ".TABLE_PREFIX."users u
LEFT JOIN ".TABLE_PREFIX."userfields f ON (f.ufid=u.uid)
WHERE f.fid" . $fid . " != ''
AND u.usergroup NOT IN (5, 7)
");
$usercache = array();
while($user = $db->fetch_array($query) )
{
$user['username'] = format_name($user['username'], $user['usergroup'], $user['displaygroup']);
$user['profilelink'] = build_profile_link($user['username'], $user['uid']);
if(!$user['displaygroup'])
{
$user['displaygroup'] = $user['usergroup'];
}
$usergroup = $usergroups_cache[$user['displaygroup']];
if(!empty($usergroup['image']))
{
if(!empty($mybb->user['language']))
{
$language = $mybb->user['language'];
}
else
{
$language = $mybb->settings['bblanguage'];
}
$usergroup['image'] = str_replace("{lang}", $language, $usergroup['image']);
$usergroup['image'] = str_replace("{theme}", $theme['imgdir'], $usergroup['image']);
$usergroup['groupimage'] = '<img src="' . $usergroup['image'] . '" alt="' . $usergroup['title'] . '" title="' . $usergroup['title'] . '" />';
}
$has_custom_title = 0;
if(trim($user['usertitle']) != "")
{
$has_custom_title = 1;
}
if($usergroup['usertitle'] != "" && !$has_custom_title)
{
$user['usertitle'] = $usergroup['usertitle'];
}
elseif(is_array($usertitles_cache) && !$usergroup['usertitle'])
{
foreach($usertitles_cache as $posts => $titleinfo)
{
if($user['postnum'] >= $posts)
{
if(!$has_custom_title)
{
$user['usertitle'] = $titleinfo['title'];
}
$user['stars'] = $titleinfo['stars'];
$user['starimage'] = $titleinfo['starimage'];
break;
}
}
}
if($usergroup['stars'])
{
$user['stars'] = $usergroup['stars'];
}
if(!$user['starimage'])
{
$user['starimage'] = $usergroup['starimage'];
}
$user['starimage'] = str_replace("{theme}", $theme['imgdir'], $user['starimage']);
for($i = 0; $i < $user['stars']; ++$i)
{
$user['userstars'] .= "<img src=\"".$user['starimage']."\" border=\"0\" alt=\"*\" />";
}
if($user['userstars'] && $usergroup['groupimage'])
{
$user['userstars'] = "<br />".$user['userstars'];
}
if($user['avatar'] != '')
{
$user['avatar'] = htmlspecialchars_uni($user['avatar']);
$avatar_dimensions = explode("|", $user['avatardimensions']);
if($avatar_dimensions[0] && $avatar_dimensions[1])
{
list($max_width, $max_height) = explode("x", my_strtolower($mybb->settings['memberlistmaxavatarsize']));
if($avatar_dimensions[0] > $max_width || $avatar_dimensions[1] > $max_height)
{
$scaled_dimensions = scale_image($avatar_dimensions[0], $avatar_dimensions[1], $max_width, $max_height);
$avatar_width_height = "width=\"{$scaled_dimensions['width']}\" height=\"{$scaled_dimensions['height']}\"";
}
else
{
$avatar_width_height = "width=\"{$avatar_dimensions[0]}\" height=\"{$avatar_dimensions[1]}\"";
}
}
$user['avatar'] = '<img src="' . $user['avatar'] . '" alt="" ' . $avatar_width_height . ' />';
}
else
{
$user['avatar'] = "";
}
$html = '<table><tr><td>' . $user['avatar'] . '</td><td>' . $user['profilelink'] . '<br /><span class="smalltext">' . $user['usertitle'] . '<br />' . $usergroup['groupimage'] . $user['userstars'] . '</span></td></tr></table>';
$home = strtolower($user['fid' . $fid]);
if(isset($usercache[$home]) )
{
$usercache[$home] .= '<hr>'.$html;
}
else
{
$usercache[$home] = $html;
}
}
$coordscache = array();
foreach($usercache as $index => $value)
{
$contents = fetch_remote_file('https://maps.googleapis.com/maps/api/geocode/xml?address=' . rawurlencode($index).'&key=' . $key . '&sensor=false');
$parser = new XMLParser($contents);
$tree = $parser->get_tree();
sleep(1);
if($tree['GeocodeResponse']['result']['geometry']['location'])
{
$lat = $tree['GeocodeResponse']['result']['geometry']['location']['lat']['value'];
$lng = $tree['GeocodeResponse']['result']['geometry']['location']['lng']['value'];
$loc = $lng.",".$lat.",0";
if(isset($coordscache[$loc]))
{
$coordscache[$loc] .= '<hr>'.$value;
}
else
{
$coordscache[$loc] = $value;
}
}
}
file_put_contents($datacache, serialize($coordscache));
}
else
{
$coordscache = unserialize(file_get_contents($datacache));
}
$run = 1;
foreach($coordscache as $index => $value)
{
$point = explode(',', $index);
$output .= '
var point' . $run . ' = new google.maps.LatLng(' . $point[1] . ',' . $point[0] . ');
var marker' . $run . ' = new google.maps.Marker({
position: point' . $run . ',
map: map,
title: ""
});
var infowindow' . $run . ' = new google.maps.InfoWindow({
content: "' . str_replace('"', "'", $value) . '"
});
google.maps.event.addListener(marker' . $run . ', "click", function() {
infowindow' . $run . '.open(map, marker' . $run . ')
});
';
$run++;
}
$template = '<html>
<head>
<title>' . $pages['name'] . '</title>
{$headerinclude}
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map_canvas { height: 100%; }
</style>
<script type="text/javascript"
src="https://maps.googleapis.com/maps/api/js?key=' . $key . '">
</script>
<script type="text/javascript">
function initialize() {
var myOptions = {
center: new google.maps.LatLng(' . $location[1] . ',' . $location[0] . '),
zoom: ' . $zoom . ',
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
{$output}
}
</script>
</head>
<body onload="initialize()">
{$header}
<table border="0" cellspacing="' . $theme['borderwidth'] . '" cellpadding="' . $theme['tablespace'] . '" class="tborder">
<thead>
<tr>
<td class="thead">
<strong>' . $pages['name'] . '</strong>
</td>
</tr>
</thead>
<tbody>
<tr>
<td class="trow1" style="padding: 0;"><div id="map_canvas" style="width:100%; height:500px"></div></td>
</tr>
</tbody>
</table>
<br />
{$admincache}
{$footer}
</body>
</html>';
$template = str_replace("\'", "'", addslashes($template));
add_breadcrumb($pages['name']);
eval("\$page = \"" . $template . "\";");
output_page($page);
?>

Non admin
Admin
You need to get an api key visit here and select the start button
https://cloud.google.com/maps-platform/
And add your new api key into the api key on usermap page edit
Also user profile location format must be in this format for example: "Denver, Colorado, United States"
Another note: not sure what version or variant of pagemanager you are using but the particular version I quickly tried was not showing the information correctly in "who's online" and was marking usermap as "Unknown Location" though the page link was accurate, that bugged me to no avail and I simply did not feel like digging into the page manager plugin for something I don't plan on using myself so a simple plugin solved it for me and my ocd instead, lol.

Page manager I used for this usermap.xml:
https://github.com/vintagedaddyo/MyBB_Pl...agemanager
* but you could ignore version compat on install for usermap.xml if not using 1.5.2 or most likely just edit the provided xml file for whatever page manager version you are using if it is not 1.5.2 and say for example something like 2.1.3 or any other such variant