MyBB Community Forums

Full Version: [Page Manager] Share your custom pages
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
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

<?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);

?>

[attachment=42471]



Non admin
[Image: Screenshot-20200115-143409-Firefox.jpg]

Admin
[Image: Screenshot-20200115-143231-Firefox.jpg]

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.

[attachment=42472]


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
Hi there,

Thanks for the great plugin!

A very noob question but is there an easy way to display just the forums list from index on a separate PageManager page?


Kind regards,

Jason
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49