<?php
# MyBB Page Manager - Usermap
# Updated for Google Maps JavaScript API v3 by MyBBStyles.com
# Installation instructions and support: http://www.mybbstyles.com/thread-new-page-mybb-google-maps-v3
$key = 'snip';
$location = 'Germany';
$zoom = 6;
$fid = 1;
$datacache = './cache/coords';
if(!$mybb->usergroup['canviewprofiles'])
{
error_no_permission();
}
global $headerinclude, $header, $theme, $footer, $cache, $templates;
require_once MYBB_ROOT.'inc/class_xml.php';
require_once MYBB_ROOT.'inc/functions_image.php';
$contents = fetch_remote_file('http://maps.googleapis.com/maps/api/geocode/xml?address=' . rawurlencode($location).'&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('http://maps.googleapis.com/maps/api/geocode/xml?address=' . rawurlencode($index).'&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="http://maps.googleapis.com/maps/api/js?key=' . $key . '&sensor=false">
</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">
<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);
?>