(2018-11-02, 07:08 PM)Eldenroot Wrote: [ -> ]Is there anyone who can make usermap working on MyBB 1.8? Thx
[
attachment=41636] ??
* not my area of knowledge truly, but the few minor edits appeared to be working for me for the few free "Map loads quota limit" though my key is limited and I do not want to signup for google $$$ services... even with the offer of "$300 credit for free over 12 months" lol
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"
Examples on mybb 1.8.20:
** Note: currently the only issue I get in console with this edit is "You have exceeded your request quota for this API" because my quota limit is "1" if I refuse to pay or agree to the trial...., but for the 1 day quota..., it loaded fine with this edit.
Further note: I primarily just made sure it loads the map and such...., But, I also did not look at the other functions and any of that may or may not need to still be edited or fixed???? but alas, I don't use this nor have I ever so you most likely will know more about all of this than I.
Anyhoo, since you clearly have more of an interest in this and most likely have said key with higher quota limit perhaps you can continue further with this. Happy editing!
<?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['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 />
{$footer}
</body>
</html>';
$template = str_replace("\'", "'", addslashes($template));
add_breadcrumb($pages['name']);
eval("\$page = \"" . $template . "\";");
output_page($page);
?>
Update: And since this is a localhost and I have devel generated users there were no user locations set in profiles so I manually added a few more in such a format for example: "Denver, Colorado, United States" since earlier and then simply updated the cache like so misc.php?page=usermap&update=1 just to show you that it is still working...
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.
[
attachment=41637]
Page manager I used for this:
https://github.com/vintagedaddyo/MyBB_Pl...agemanager
* but you could ignore version compat on install 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