Exemplo n.º 1
0
function get_id64($player_id)
{
    global $db, $settings;
    if (!is_id64($player_id)) {
        $url = sprintf("http://api.steampowered.com/ISteamUser/ResolveVanityURL/v0001/?key=%s&vanityurl=%s", $settings['api_key'], $player_id);
    } else {
        return $player_id;
    }
    // Try the easy way
    $i = $db->query_first("SELECT id64 FROM tf2_players WHERE custom_url = %s", array($player_id));
    if ($i['id64']) {
        return $i['id64'];
    }
    require_once 'classes/cache.php';
    $json_string = cache::get($url);
    try {
        $rgResult = json_decode($json_string, true);
        $rgResponse = $rgResult['response'];
    } catch (Exception $e) {
        // Bad XML data. Purge and throw an error
        cache::purge($url);
        $bad_xml = true;
        return false;
        //echo "BAD XML!!!: ".$url;
    }
    if ($rgResponse['success'] == k_EResultOK) {
        $id64 = $rgResponse['steamid'];
        // Update this in the db
        $db->query("UPDATE tf2_players SET custom_url=%s WHERE id64=%s", array($player_id, $id64));
    }
    return $id64;
}
 public function prepare()
 {
     $this->template = "player_stats";
     $this->tab = "player";
     //backpack::update_schema();
     if (is_id64($this->request[0])) {
         $player_id = $this->request[0];
     } else {
         $player_id = get_id64($this->request[0]);
         if (!$player_id) {
             die("404");
         }
     }
     $player = new player($player_id);
     die("302");
 }
    public function prepare()
    {
        global $db, $user, $settings;
        // auth check
        $auth = $db->query_first("SELECT mp.type FROM  tf2stats_map_to_player mp LEFT JOIN tf2_maps m ON m.id = mp.map_id\r\n\t\t\t\t\t\tWHERE mp.player_id = %s AND m.name = %s", array($user->id(), $this->request[0]));
        if (!in_array($auth['type'], array('M', 'A', 'C'))) {
            page::error("Little man", "You are no match for me!");
        }
        // handle file removals
        if ($this->request[1] == 'delimg') {
            $db->query("DELETE FROM tf2stats_map_images WHERE image = %s", array($this->request[2]));
            $this->params['success'] = "Deleted " . $this->request[2];
        }
        // update
        if ($_REQUEST['update']) {
            if ($_REQUEST['filesize'] && !is_numeric($_REQUEST['filesize'])) {
                $this->params['error'] = 'Filesize must be numeric. Do not append "MB".';
            } elseif ($_REQUEST['url'] && !filter_var($_REQUEST['url'], FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED)) {
                $this->params['error'] = 'Download URL is not valid.';
            } else {
                $i = $db->query_first("SELECT m.id, m.official FROM tf2_maps m WHERE m.name = %s", array($this->request[0]));
                if (IsUserAdmin()) {
                    $Official = (int) (isset($_REQUEST['official']) && $_REQUEST['official'] == 'official');
                    cache::log("Changing official status for " . $i['id'] . " - old: " . $i['official'] . " - new: " . $Official);
                    if ($i['official'] != $Official) {
                        $db->query("UPDATE tf2_maps SET official = %s WHERE id = %s", array($Official, $i['id']));
                    }
                }
                $db->query("INSERT INTO tf2stats_managed_maps (player_id, map_id, edit_time, description, file_size, download_url) VALUES(%s, %s, %s, %s, %s, %s)\r\n\t\t\t\t\t\t\tON DUPLICATE KEY UPDATE edit_time=%s, description=%s, file_size=%s, download_url = %s", array($user->id(), $i['id'], time(), $_REQUEST['description'], $_REQUEST['filesize'], $_REQUEST['url'], time(), $_REQUEST['description'], $_REQUEST['filesize'], $_REQUEST['url']));
            }
        }
        // map info
        $map_info = $db->query_first("SELECT m.name, m.id, m.official, mp.description, mp.file_size, mp.download_url, mp.edit_time, p.name as player_name FROM  tf2stats_managed_maps mp \r\n\t\t\t\t\t\tLEFT JOIN tf2_maps m ON m.id = mp.map_id\r\n\t\t\t\t\t\tLEFT JOIN tf2_players p on mp.player_id = p.id\r\n\t\t\t\t\t\tWHERE m.name = %s\r\n\t\t\t\t\t\tORDER BY edit_time DESC\r\n\t\t\t\t\t\tLIMIT 1", array($this->request[0]));
        if ($map_info) {
            $this->params['old'] = true;
        } else {
            $map_info = $db->query_first("SELECT m.name,  m.id FROM tf2_maps m WHERE m.name = %s", array($this->request[0]));
        }
        $this->params['map_info'] = $map_info;
        // handle adding authors.
        if ($this->request[1] == 'addauthor') {
            if ($this->request['search']) {
                $player_id = $this->request['search'];
                if (!is_id64($player_id)) {
                    $player_id = get_id64($this->request['search']);
                }
                $player = new player($player_id);
                if ($player->id()) {
                    $db->query("INSERT INTO tf2stats_map_to_player(player_id, map_id, type) VALUES(%s, %s, %s)", array($player->id(), $map_info['id'], 'A'));
                    $this->params['success'] = $player_id . ' has been added to the author list.';
                } else {
                    $this->params['error'] = "Could not find a player by '" . $_REQUEST['search'] . "'. Please refine your search.";
                }
            } else {
                $this->template = "manage_map_author";
                $this->title = sprintf("Adding author for %s", htmlspecialchars($map_info['name']));
                return;
            }
        }
        if ($this->request[1] == 'delauthor') {
            $id = $this->request[2];
            $db->query("DELETE FROM tf2stats_map_to_player WHERE player_id=%s AND map_id = %s", array($id, $map_info['id']));
            $this->params['success'] = "Deleted author";
        }
        // handle file uploads.
        if ($this->request[1] == 'upload') {
            $this->template = "manage_map_upload";
            $this->title = sprintf("Upload image for %s", htmlspecialchars($map_info['name']));
            $this->params['allowed_images'] = implode(', ', $settings['upload']['allowed_images']);
            if ($_FILES['image']) {
                if (!$_FILES['image']['tmp_name']) {
                    $this->params['error'] = 'Upload failed. (This usually happens when you try to upload a file larger than 1MB!)';
                    return;
                }
                // check extension.
                $ext = end(explode(".", strtolower($_FILES['image']['name'])));
                if (!in_array($ext, $settings['upload']['allowed_images'])) {
                    $this->params['error'] = 'Unsupported file extension ' . $ext . '. Please convert your image to one of these formats: ' . implode(', ', $settings['upload']['allowed_images']);
                    return;
                }
                // rename if already exists
                $filename = sprintf("%s_%s", $map_info['id'], str_replace(array('(', ')', ' '), '_', basename($_FILES['image']['name'])));
                $target_path = $settings['upload']['folder']['maps'] . $filename;
                while (file_exists($target_path)) {
                    $filename = md5(time() . rand()) . '.' . $ext;
                    $target_path = $settings['upload']['folder']['maps'] . $filename;
                }
                //var_dump($target_path);
                if (filesize($_FILES['image']['tmp_name']) > 2097152) {
                    $this->params['error'] = 'Uploaded file cannot exceed 1MB.';
                    return;
                }
                if (move_uploaded_file($_FILES['image']['tmp_name'], $target_path)) {
                    $db->query("INSERT INTO tf2stats_map_images (map_id, player_id, image) VALUES(%s, %s, %s)", array($map_info['id'], $user->id(), $filename));
                    $this->params['success'] = basename($_FILES['image']['name']) . ' uploaded successfully.';
                } else {
                    echo $_FILES['image']['tmp_name'];
                    echo $target_path;
                    $this->params['error'] = 'Unknown error. Please nag FireSlash until he fixes it.';
                }
            }
            return;
        }
        // tinyMCE setup
        $this->head .= '<script type="text/javascript" src="/static/js/tiny_mce/jquery.tinymce.js"></script>
		<script type="text/javascript">
	$().ready(function() {
		$(\'textarea.tinymce\').tinymce({
			// Location of TinyMCE script
			script_url : "/static/js/tiny_mce/tiny_mce.js",

			theme : "advanced",
			mode : "none",
			plugins : "bbcode",
			theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,styleselect,removeformat,cleanup,code",
			theme_advanced_buttons2 : "",
			theme_advanced_buttons3 : "",
			theme_advanced_toolbar_location : "top",
			theme_advanced_toolbar_align : "left",
			theme_advanced_styles : "Code=codeStyle;Quote=quoteStyle",
			content_css : "css/bbcode.css",
			entity_encoding : "raw",
			add_unload_trigger : false,
			remove_linebreaks : false,
			inline_styles : false,
			convert_fonts_to_spans : false,
			apply_source_formatting : false
			
		});
	});
</script>
		';
        // map info
        $this->template = "manage_map";
        require_once 'classes/map.php';
        $m = new map($this->request[0]);
        $this->params['images'] = $m->get_images('xy165');
        $this->params['has_images'] = $this->params['images'];
        $this->params['can_set_official'] = IsUserAdmin();
        // associated peoples
        $db->query("SELECT p.id, p.name, mp.type from tf2stats_map_to_player mp LEFT JOIN tf2_players p ON mp.player_id = p.id WHERE mp.map_id = %s", array($map_info['id']));
        while ($row = $db->fetch_array()) {
            $row['del_link'] = sprintf('/manage_map/%s/delauthor/%s/', $this->request[0], $row['id']);
            $p[] = $row;
        }
        $this->title = sprintf("Managing %s", htmlspecialchars($this->request[0]));
        $this->params['people'] = $p;
    }
 public function prepare()
 {
     global $METRICS, $CLASS_METRICS, $CLASSES, $CLASS_SLOTS, $VALVE_EMPLOYEES;
     $this->template = "player_stats";
     $this->tab = "player";
     //backpack::update_schema();
     if (is_id64($this->request[0])) {
         $player_id = $this->request[0];
     } else {
         $player_id = get_id64($this->request[0]);
         if (!$player_id) {
             page::error("I will eat your search results, I'll eat them up!", "Thats right nancy boy, I've got better things\r\n\t\t\t\tto do than look for some sissy boy stats page, there's a war going on! The only path to victory is through\r\n\t\t\t\tpain and bloodshed. So man up girly boy, and put the right thing in the box next time.", array('image' => "soldier"));
         }
     }
     $player = new player($player_id, true);
     $player->preload_stats(true);
     $backpack = new backpack($player, true);
     cache::multi_run();
     $stats = $player->get_stats();
     if ($player->info['custom_url']) {
         $this->canonical = sprintf('http://tf2stats.net/player/%s/', $player->info['custom_url']);
     } else {
         $this->canonical = sprintf('http://tf2stats.net/player/%s/', $player->id64());
     }
     //if($player_id != "76561198003273729")
     $player->log_view();
     foreach ($CLASSES as $c) {
         // Build sorted class array
         $classes[$stats[$c]['accum']['iplaytime']] = $c;
         foreach ($METRICS as $m => $l) {
             // Determine peak class values
             if ($stats[$c]['max'][$m] > $stats['all']['max'][$m]['value']) {
                 $stats['all']['max'][$m] = array('value' => $stats[$c]['max'][$m], 'class' => $c);
             }
             if ($stats[$c]['accum'][$m] > $stats['all']['best'][$m]) {
                 $stats['all']['best'][$m] = $stats[$c]['accum'][$m];
             }
             $stats['all']['accum'][$m] += $stats[$c]['accum'][$m];
         }
     }
     krsort($classes);
     $this->params['classes'] = $classes;
     $this->params['metrics'] = $METRICS;
     $this->params['class_metrics'] = $CLASS_METRICS;
     $this->params['backpack'] = $backpack;
     $this->params['equipped'] = $backpack->equipped;
     $this->params['player'] = $player;
     $this->params['stats'] = $stats;
     $this->params['slots'] = $CLASS_SLOTS;
     //var_dump($backpack->equipped['soldier']['primary']);
     //var_dump($backpack->equipped);
     //var_dump($backpack->items);
     //echo decbin(1082130432);
     //$up = unpack('f',1082130432);
     //var_dump($up);
     for ($x = 1; $x <= 1050; $x++) {
         $fullbp[$x] = false;
     }
     $invalids = array_slice($fullbp, 1000, 50);
     $ix = 0;
     $maxpage = 300;
     if (is_array($backpack->items)) {
         foreach ($backpack->items as $i) {
             unset($tail);
             if ($fullbp[$i['position']] || !$i['position']) {
                 $invalids[$ix++] = $i;
             } else {
                 $fullbp[$i['position']] = $i;
             }
             if ($i['position'] > $maxpage) {
                 $maxpage = $i['position'];
             }
         }
     }
     for ($x = 0; $x < $maxpage; $x += 50) {
         $bpp[] = array('items' => array_slice($fullbp, $x, 50));
     }
     if ($ix > 0) {
         $bpp[] = array('items' => $invalids);
     }
     $this->params['bpp'] = $bpp;
     $this->title = htmlspecialchars($player->info['name']);
     $this->params['player_name'] = $this->title;
     if ($player_id === '76561197972495328') {
         $this->params['player_name'] .= ' — <span style="color:#4d8bd0">TF2Stats Creator</span>';
     } else {
         if ($player_id === '76561197972494985') {
             $this->params['player_name'] = '<a href="//xpaw.ru" target="_blank" style="text-decoration:none">' . $this->title . '</a> — <span style="color:#d0514d">TF2Stats Maintainer</span>';
         }
     }
     $this->params['valve_employee'] = in_array($player_id, $VALVE_EMPLOYEES);
 }