[code]<?
define(‘IN_MYBB’, 1);
require_once ‘./global.php’;
if($mybb->settings[‘enablememberlist’] == “no”)
{
error($lang->memberlist_disabled);
}
if($mybb->usergroup[‘canviewmemberlist’] == “no”)
{
error_no_permission();
}
// search for location (returns XML)
if(isset($_GET[‘q’]))
{
$sql = ‘SELECT hi.loc_id as “loc_id”, level, name.text_val as “name”, land.text_val as “land"
FROM '.$settings[‘membermap_geodbprefix’].'hierarchies hi, '.$settings[‘membermap_geodbprefix’].'textdata name, ‘.$settings[‘membermap_geodbprefix’].‘textdata land
WHERE name.loc_id = hi.loc_id and name.text_type = 500100000 and name.is_default_name = 1 and
name.text_val LIKE "%’.addslashes(utf8_encode($_GET[“q”])).’%” and
land.loc_id = hi.id_lvl2 and land.text_type = 500100000 and land.is_default_name = 1 and
level >= 6 and
hi.date_type_until = 300500000 and
name.date_type_until = 300500000 and
land.date_type_until = 300500000
ORDER BY land, name’;
$r1 = $db->query($sql);
$xml = '<?xml version="1.0" encoding="utf-8"?'.'>'.
'<results>';
while($e = $db->fetch_array($r1))
{
$xml .= '<result>'.
'<id>'.$e['loc_id'].'</id>'.
'<name>'.htmlspecialchars($e['name'], ENT_COMPAT, 'UTF-8').'</name>';
$trace = array($e['land']);
for($n = 3; $n < 6; $n++)
{
if($n == 4)
{
continue;
}
$sql2 = 'SELECT text_val
FROM '.$settings['membermap_geodbprefix'].'hierarchies hi, '.$settings['membermap_geodbprefix'].'textdata td
WHERE hi.loc_id = '.$e['loc_id'].' and td.loc_id = hi.id_lvl'.$n.' and text_type = 500100000 and is_default_name = 1
ORDER BY hi.valid_until';
$tv = $db->query($sql2);
$val = '-';
if($db->num_rows($tv) > 0)
{
$e2 = $db->fetch_array($tv);
$val = $e2['text_val'];
}
if($n != 5 or $val != '-')
{
$trace[] = $val;
}
}
if($e['level'] > 6)
{
$trace[] = $e['name'];
}
for($i = 0; $i < count($trace); $i++)
{
$xml .= '<trace'.$i.'>'.htmlspecialchars($trace[$i], ENT_COMPAT, 'UTF-8').'</trace'.$i.'>';
}
$xml .= '</result>';
}
$xml .= '</results>';
header('Content-Type: text/xml; charset=utf-8');
print $xml;
}
elseif(isset($_GET[‘qu’]))
{
$sql = ‘SELECT m.loc_id, m.uid, u.username, name.text_val as “name"
FROM '.TABLE_PREFIX.'membermap m
JOIN '.TABLE_PREFIX.'users u ON m.uid = u.uid
JOIN ‘.$settings[‘membermap_geodbprefix’].‘textdata name ON m.loc_id = name.loc_id
WHERE name.text_type = 500100000 and name.is_default_name = 1 and
u.username LIKE "%’.addslashes(utf8_encode($_GET[“qu”])).’%” and name.date_type_until = 300500000
ORDER BY u.username, name’;
$r = $db->query($sql);
$xml = '<?xml version="1.0" encoding="utf-8"?'.'>'.
'<results>';
while($e = $db->fetch_array($r))
{
$xml .= '<result><uid>'.$e['uid'].'</uid>'.
'<locid>'.$e['loc_id'].'</locid>'.
'<username>'.htmlspecialchars($e['username'], ENT_COMPAT, 'UTF-8').'</username>'.
'<name>'.htmlspecialchars($e['name'], ENT_COMPAT, 'UTF-8').'</name></result>';
}
$xml .= '</results>';
header('Content-Type: text/xml; charset=utf-8');
print $xml;
}
// show location details
elseif(isset($_GET[‘loc_id’]))
{
$loc_id = intval($_GET[“loc_id”]);
$sql = 'SELECT name.loc_id, name.text_val as “name”, iso.text_val as “iso”, land.text_val as “land”, level, lon, lat
FROM '.$settings[‘membermap_geodbprefix’].'hierarchies hi, '.$settings[‘membermap_geodbprefix’].'textdata name, '.$settings[‘membermap_geodbprefix’].'textdata iso, '.$settings[‘membermap_geodbprefix’].'textdata land, '.$settings[‘membermap_geodbprefix’].‘coordinates co
WHERE hi.loc_id = ‘.$loc_id.’ and name.loc_id = hi.loc_id and name.text_type = 500100000 and name.is_default_name = 1 and
iso.loc_id = hi.id_lvl2 and iso.text_type = 500100001 and
land.loc_id = hi.id_lvl2 and land.text_type = 500100000 and land.is_default_name = 1 and
co.loc_id = hi.loc_id
ORDER BY hi.valid_until DESC’;
$res = $db->query($sql);
$loc = $db->fetch_array($res);
$lvl_name = array(3 => 'bland', 'regbezirk', 'lkreis');
$map = new map($settings['membermap_mappath']);
$range = explode(',', $settings['membermap_range']);
$map->set_range((float)trim($range[0]), (float)trim($range[1]), (float)trim($range[2]), (float)trim($range[3]));
#$map->set_range(5.85, 17.1685, 45.8229, 55.0675);
$xml = '<?xml version="1.0" encoding="utf-8"?'.'>'.
'<result>'.
'<name>'.htmlspecialchars($loc['name'], ENT_COMPAT, 'UTF-8').'</name>'.
'<land>'.htmlspecialchars($loc['land'], ENT_COMPAT, 'UTF-8').'</land>'.
'<x>'.round($map->scale($loc['lon'], 'x')).'</x>'.
'<y>'.round($map->scale($loc['lat'], 'y')).'</y>';
for($n = 3; $n < 6; $n++)
{
$sql2 = 'SELECT text_val
FROM '.$settings['membermap_geodbprefix'].'hierarchies hi, '.$settings['membermap_geodbprefix'].'textdata td
WHERE hi.loc_id = '.$loc_id.' and td.loc_id = hi.id_lvl'.$n.' and text_type = 500100000 and is_default_name = 1
ORDER BY hi.valid_until DESC';
$tv = $db->query($sql2);
if($db->num_rows($tv) > 0)
{
$e = $db->fetch_array($tv);
$xml .= '<'.$lvl_name[$n].'>'.htmlspecialchars($e["text_val"], ENT_COMPAT, 'UTF-8').'</'.$lvl_name[$n].'>';
}
}
$sql2 = ‘SELECT text_val
FROM ‘.$settings[‘membermap_geodbprefix’].‘textdata
WHERE loc_id = ‘.$loc_id.’ and text_type = 500700000 and is_default_name = 1
ORDER BY valid_until DESC’;
$tv = $db->query($sql2);
if($db->num_rows($tv) > 0)
{
$e = $db->fetch_array($tv);
$xml .= ‘’.htmlspecialchars($e[“text_val”], ENT_COMPAT, ‘UTF-8’).’’;
}
$sql2 = 'SELECT text_val
FROM '.$settings['membermap_geodbprefix'].'textdata
WHERE loc_id = '.$loc_id.' and text_type = 500300000
ORDER BY valid_until DESC';
$res = $db->query($sql2);
if($db->num_rows($res) > 0)
{
$plz = array();
while($e = $db->fetch_array($res))
{
$plz[] = $e["text_val"];
}
$xml .= '<plz>'.implode(',', $plz).'</plz>';
}
$xml .= '</result>';
header('Content-Type: text/xml; charset=utf-8');
print $xml;
}
elseif(isset($_GET[‘mapinfo’]))
{
#$db->query(‘SET NAMES “utf8”’);
$loc_id = intval($_GET[‘mapinfo’]);
$sql = 'SELECT u.uid, u.username, name.text_val AS "name"
FROM '.TABLE_PREFIX.'membermap m
JOIN '.TABLE_PREFIX.'users u ON m.uid = u.uid
JOIN '.$settings[‘membermap_geodbprefix’].‘textdata name ON name.loc_id = m.loc_id
WHERE m.loc_id = ‘.$loc_id.’ and name.text_type = 500100000 and name.is_default_name = 1’;
$r = $db->query($sql);
$xml = '<?xml version="1.0" encoding="utf-8"?'.'>'.
'<result>';
if($db->num_rows($r) > 0)
{
$e = $db->fetch_array($r);
$xml .= '<name>'.htmlspecialchars($e['name'], ENT_COMPAT, 'UTF-8').'</name>'.
'<user uid="'.$e['uid'].'">'.htmlspecialchars($e['username'], ENT_COMPAT, 'UTF-8').'</user>';
while($e = $db->fetch_array($r))
{
$xml .= '<user uid="'.$e['uid'].'">'.htmlspecialchars($e['username'], ENT_COMPAT, 'UTF-8').'</user>';
}
}
$xml .= '</result>';
header('Content-Type: text/xml; charset=utf-8');
print $xml;
}
elseif(isset($_GET[‘setloc’]))
{
if($mybb->user[‘uid’] == 0)
error_no_permission();
$loc_id = intval($_GET[‘setloc’]);
$r = $db->query('SELECT * FROM '.TABLE_PREFIX.‘membermap WHERE uid = ‘.$mybb->user[‘uid’]);
if($db->num_rows($r) > 0)
$db->query(‘UPDATE ‘.TABLE_PREFIX.‘membermap SET loc_id = ‘.$loc_id.’ WHERE uid = ‘.$mybb->user[‘uid’]);
else
$db->query(‘INSERT INTO ‘.TABLE_PREFIX.‘membermap(uid, loc_id) VALUES("’.$mybb->user[‘uid’].’", "’.$loc_id.’")’);
header(‘Location: membermap.php’);
}
elseif(isset($_GET[‘showmap’]))
{
$map = new map($settings[‘membermap_mappath’]);
$range = explode(’,’, $settings[‘membermap_range’]);
$map->set_range((float)trim($range[0]), (float)trim($range[1]), (float)trim($range[2]), (float)trim($range[3]));
#$map->set_range(5.85, 17.1685, 45.8229, 55.0675);
$sql = ‘SELECT co.loc_id, co.lon, co.lat, COUNT(m.loc_id) AS "num"
FROM ‘.TABLE_PREFIX.‘membermap AS m
JOIN ‘.$settings[‘membermap_geodbprefix’].‘coordinates co ON m.loc_id = co.loc_id
GROUP BY m.loc_id’;
$r = $db->query($sql);
$pointcolor = explode(’,’, $settings[‘membermap_pointcolor’]);
$col = $map->color((int)trim($pointcolor[0]), (int)trim($pointcolor[1]), (int)trim($pointcolor[2]));
if($settings[‘membermap_drawpointborder’] == ‘yes’)
{
$pointcolor2 = explode(’,’, $settings[‘membermap_pointcolor2’]);
$col2 = $map->color((int)trim($pointcolor2[0]), (int)trim($pointcolor2[1]), (int)trim($pointcolor2[2]));
}
$sizelimit = explode(’,’, $settings[‘membermap_sizelimit’]);
while($e = $db->fetch_array($r))
{
if($e[‘num’] > (int)trim($sizelimit[1]))
$size = 8;
elseif($e[‘num’] > (int)trim($sizelimit[0]))
$size = 6;
else
$size = 4;
if($settings[‘membermap_drawpointborder’] == ‘yes’)
$map->drawdot($e[‘lon’], $e[‘lat’], $size + 2, $col2);
$map->drawdot($e[‘lon’], $e[‘lat’], $size, $col);
}
header(‘Content-Type: image/png’);
print $map->dump();
}
// print website
else
{
$lang->load(“membermap”);
$templatelist = “map”;
add_breadcrumb($lang->member_map, “map.php”);
$membermapisuser = ($mybb->user[‘uid’] > 0) ? ‘true’ : ‘false’;
$membemap_lang = “var membermap_lang = Array();\n”.
“membermap_lang[“not_supported”] = “”.addslashes($lang->not_supported).”";\n".
“membermap_lang[“loading”] = “”.addslashes($lang->loading).”";\n".
“membermap_lang[“min3chars”] = “”.addslashes($lang->min3chars).”";\n".
“membermap_lang[“locs_found”] = “”.addslashes($lang->locs_found).”";\n".
“membermap_lang[“users_found”] = “”.addslashes($lang->users_found).”";\n".
“membermap_lang[“country”] = “”.addslashes($lang->country).”";\n".
“membermap_lang[“land”] = “”.addslashes($lang->land).”";\n".
“membermap_lang[“district”] = “”.addslashes($lang->district).”";\n".
“membermap_lang[“county”] = “”.addslashes($lang->county).”";\n".
“membermap_lang[“commune”] = “”.addslashes($lang->commune).”";\n".
“membermap_lang[“zipcode”] = “”.addslashes($lang->zipcode).”";\n".
“membermap_lang[“mark_as_residence”] = “”.addslashes($lang->mark_as_residence).”";\n".
“membermap_lang[“users_from”] = “”.addslashes($lang->users_from).”";\n";
$map = new map($settings['membermap_mappath']);
$range = explode(',', $settings['membermap_range']);
$map->set_range((float)trim($range[0]), (float)trim($range[1]), (float)trim($range[2]), (float)trim($range[3]));
#$map->set_range(5.85, 17.1685, 45.8229, 55.0675);
$sql = 'SELECT m.loc_id, co.lon, co.lat, u.username, name.text_val AS “name"
FROM '.TABLE_PREFIX.'membermap m
JOIN '.TABLE_PREFIX.'users u ON m.uid = u.uid
JOIN '.$settings[‘membermap_geodbprefix’].‘coordinates co ON co.loc_id = m.loc_id
JOIN ‘.$settings[‘membermap_geodbprefix’].‘textdata name ON name.loc_id = m.loc_id
WHERE name.text_type = 500100000 and name.is_default_name = 1
ORDER BY m.loc_id’;
$r = $db->query($sql);
$locations = array();
while($e = $db->fetch_array($r))
{
if(!isset($locations[$e[‘loc_id’]]))
{
$locations[$e[‘loc_id’]] = array(
‘users’ => ‘’,
‘name’ => addslashes($e[‘name’]),
‘x’ => round($map->scale($e[‘lon’], ‘x’)),
‘y’ => round($map->scale($e[‘lat’], ‘y’)),
‘num’ => 1
);
}
$locations[$e[‘loc_id’]][‘users’] .= addslashes($e[‘username’]).’, ‘;
$locations[$e[‘loc_id’]][‘num’]++;
}
$ids = array_keys($locations);
$membermapareas = ‘’;
$sizelimit = explode(’,’, $settings[‘membermap_sizelimit’]);
for($i = 0; $i < count($locations); $i++)
{
if($locations[$ids[$i]][‘num’] > (int)trim($sizelimit[1]))
$size = 8;
elseif($locations[$ids[$i]][‘num’] > (int)trim($sizelimit[0]))
$size = 6;
else
$size = 4;
$membermapareas .= ‘’.”\n";
}
eval("\$map = \"".$templates->get("map")."\";");
output_page($map);
}
/**
-
the map class provides the basic operations for creating maps
-
- image-handling
-
- color-handling
-
- file-handling
-
- clipping
-
- scaling
-
- coordinate convertion
-
- long/lat to x/y
-
http://jan.kneschke.de/projects/
*/
class map {
var $img;
var $size_x;
var $size_y;var $min; var $max; var $scale; /** * prepares the image generation and inits the internal variables * * @param $size_x width of the generated image * @param $size_y height of the generated image */ function map ($size_x, $size_y = -1) { if (is_file($size_x)) { $this->img = imagecreatefrompng($size_x); $this->size_x = imagesx($this->img); $this->size_y = imagesy($this->img); } else { $this->size_x = $size_x; $this->size_y = $size_y; if (!isset($this->size_x) || $this->size_x < 0 || $this->size_x > 2048) { $this->size_x = 640; } if (!isset($this->size_y) || $this->size_y < 0 || $this->size_y > 2048) { $this->size_y = 480; } $this->img = imagecreate($this->size_x, $this->size_y); } $this->min = array('x' => 9, 'y' => 55); $this->max = array('x' => 11, 'y' => 54); } /** * set the range of the map which has to be generated * * @param $x1 lower longitude * @param $x2 higher longitude * @param $y1 lower latitude * @param $y2 higher latitude * */ function set_range($x1, $x2, $y1, $y2) { $this->min = array('x' => $x1, 'y' => $y1); $this->max = array('x' => $x2, 'y' => $y2); } /** * scale a point from polar-coordinates to image-coordinates * * @param $p point (array('x' => 0, 'y' => 1); * @param $d direction ('x' or 'y') */ function scale($p, $d) { if ($d == 'y') { $r = ($p - $this->max[$d]) * ($this->size_y / ($this->min[$d] - $this->max[$d])); } else { $r = ($p - $this->min[$d]) * ($this->size_x / ($this->max[$d] - $this->min[$d])); } return $r; } function drawdot($x, $y, $size, $col) { imagefilledellipse($this->img, $this->scale($x, 'x'), $this->scale($y, 'y'), $size, $size, $col); } /** * Write the generated map the the harddisk * * @param $fn string filename */ function dump($fn = null) { if($fn === null) return imagepng($this->img); else return imagepng($this->img, $fn); } /** * allocate the colors for the image * * @param $r red * @param $g green * @param $b blue */ function color($r, $g, $b) { return imagecolorallocate($this->img, $r, $g, $b); }
}
?>[/code]
Da möchte ich folgendes hinzufügen ich weiß nur nicht wo?
if($mybb->user['uid'] == 1)
{
error_no_permission();
}
Wäre jemand so freundlich und hilft mir?