Exemple #1
0
function ArcadeList()
{
    global $smcFunc, $scripturl, $txt, $arcSettings, $context, $user_info, $smfChanges, $sourcedir;
    //some vars we need to setup
    $gamesPerPage = isset($arcSettings['gamesPerPage']) ? $arcSettings['gamesPerPage'] : 25;
    $where = "enabled = 1 AND {$user_info['query_see_game']}";
    $search = false;
    if (isset($_REQUEST['sc'])) {
        setcookie("SMFArcadeMod[page]", $_REQUEST['start'], 0);
        $pageStart = (int) $_REQUEST['start'];
    } elseif (isset($_COOKIE['SMFArcadeMod']['page'])) {
        $pageStart = (int) $_COOKIE['SMFArcadeMod']['page'];
    } else {
        $_COOKIE['SMFArcadeMod']['page'] = 0;
        $pageStart = 0;
    }
    if (isset($_REQUEST['category'])) {
        $search = true;
        $category = (int) $_REQUEST['category'];
        $where .= " AND g.id_category = " . $category;
    }
    if (isset($_REQUEST['name'])) {
        $search = true;
        $name = htmlspecialchars($_REQUEST['name'], ENT_QUOTES);
        $where .= " AND g.game_name LIKE '%{$name}%'";
    }
    if (isset($_REQUEST['sort']) && $_REQUEST['sort'] == 'idr') {
        $gameCount = $gamesPerPage;
        $_REQUEST['sort'] = 'id';
    }
    if (isset($_REQUEST['favorites'])) {
        $search = true;
        $favorite = true;
        $favorite_join = "JOIN";
    } else {
        $favorite_join = "LEFT JOIN";
        $favorite = false;
    }
    if (!isset($gameCount)) {
        // How many games there are
        if (isset($favorite) && $favorite == true) {
            $result = $smcFunc['db_query']('', '
				SELECT count(*) AS gc
				FROM ({db_prefix}arcade_games AS g, {db_prefix}arcade_favorite AS f)
				LEFT JOIN {db_prefix}arcade_categories AS c ON (c.id_category = g.id_category)
				WHERE f.id_game = g.id_game
				AND f.id_member = {int:mem}
				AND ' . $where . '', array('mem' => $user_info['id']));
        } else {
            $result = $smcFunc['db_query']('', '
				SELECT count(*) AS gc
				FROM {db_prefix}arcade_games AS g
				LEFT JOIN {db_prefix}arcade_categories AS c ON (c.id_category = g.id_category)
				WHERE ' . $where . '', array());
        }
        $row = $smcFunc['db_fetch_row']($result);
        $smcFunc['db_free_result']($result);
        $gameCount = $row[0];
    }
    $parts = array($scripturl . '?action=arcade;sc=1');
    // Sorting methods
    $sort_methods = array('id' => 'g.id_game', 'name' => 'g.game_name', 'plays' => 'g.number_plays', 'champs' => 'champion_time', 'champion' => 'real_name1', 'myscore' => 'IFNULL(pb.score, 0)', 'category' => 'c.category_name, g.game_name', 'rating' => 'g.game_rating', 'favorite' => 'IF(f.id_favorite = null, 0, 1)');
    if (isset($_REQUEST['sort']) && isset($sort_methods[$_REQUEST['sort']])) {
        $parts[] = 'sort=' . $_REQUEST['sort'];
    }
    if (isset($_REQUEST['desc'])) {
        $parts[] = 'desc';
    }
    if ($search) {
        if (isset($category)) {
            $parts[] = 'category=' . $category;
        }
        if (isset($name)) {
            $parts[] = 'name=' . urlencode($name);
        }
        if (isset($favorite) && $favorite == true) {
            $parts[] = 'favorites';
        }
    }
    $context['arcade']['pageIndex'] = constructPageIndex(implode(';', $parts), $pageStart, $gameCount, $gamesPerPage, false);
    // How user wants to sort games?
    if (!isset($_REQUEST['sort']) || !isset($sort_methods[$_REQUEST['sort']])) {
        $context['sort_by'] = 'name';
        $_REQUEST['sort'] = 'g.game_name';
    } else {
        $context['sort_by'] = $_REQUEST['sort'];
        $_REQUEST['sort'] = $sort_methods[$_REQUEST['sort']];
    }
    $ascending = !isset($_REQUEST['desc']);
    $sort_query = $_REQUEST['sort'] . ($ascending ? '' : ' DESC');
    $context['sort_direction'] = $ascending ? 'up' : 'down';
    $result = $smcFunc['db_query']('', '
		SELECT
			g.id_game, g.internal_name, g.game_name, g.game_file,
			g.game_directory, g.description, g.help,
			g.thumbnail, g.id_category, g.enabled,
			g.member_groups, g.score_type, g.game_rating,
			g.id_member_first, g.id_score_first, g.id_member_second,
			g.id_score_second, g.id_member_third, g.id_score_third,
			g.game_width, g.game_height, g.game_bg_colour AS bgcolor,
			g.topic_id,
			g.number_plays,
			c.category_name,
			IFNULL(f.id_favorite, 0) AS is_favorite,
			IFNULL(s1.score, 0) AS gold_score,
			IFNULL(s2.score, 0) AS silver_score,
			IFNULL(s3.score, 0) AS bronze_score,
			IFNULL(pb.id_best, 0) AS id_best,
			IFNULL(pb.score, 0) AS best,
			IFNULL(pb.atbscore, 0) AS atbbest,
			IFNULL(s1.start_time, 0) AS champion_time,
			IFNULL(m1.real_name, 0) AS real_name1,
			IFNULL(m2.real_name, 0) AS real_name2,
			IFNULL(m3.real_name, 0) AS real_name3
		FROM {db_prefix}arcade_games as g
		LEFT JOIN {db_prefix}arcade_categories AS c ON (c.id_category = g.id_category)
		' . $favorite_join . ' {db_prefix}arcade_favorite AS f ON (f.id_game = g.id_game AND f.id_member = {int:id_mem})
		LEFT JOIN {db_prefix}arcade_scores AS s1 ON (s1.id_score = g.id_score_first)
		LEFT JOIN {db_prefix}arcade_scores AS s2 ON (s2.id_score = g.id_score_second)
		LEFT JOIN {db_prefix}arcade_scores AS s3 ON (s3.id_score = g.id_score_third)
		LEFT JOIN {db_prefix}arcade_personalbest AS pb ON (pb.id_game = g.id_game AND pb.id_member = {int:id_mem})
		LEFT JOIN {db_prefix}members AS m1 ON (m1.id_member = g.id_member_first)
		LEFT JOIN {db_prefix}members AS m2 ON (m2.id_member = g.id_member_second)
		LEFT JOIN {db_prefix}members AS m3 ON (m3.id_member = g.id_member_third)
		WHERE ' . $where . '
		ORDER BY ' . $sort_query . '
		LIMIT ' . $pageStart . ',' . $gamesPerPage . '', array('id_mem' => $user_info['id']));
    $context['arcade']['games'] = array();
    $context['arcade']['search'] = $search;
    while ($game = $smcFunc['db_fetch_assoc']($result)) {
        if ($gameCount == 1 && $search && !$favorite) {
            // Redirect to game if only one result in search and not favorites search
            redirectexit('action=arcade;sa=play;game=' . $game['id_game']);
        }
        $context['arcade']['games'][] = BuildGameArray($game);
    }
    $smcFunc['db_free_result']($result);
    if (!$user_info['is_guest'] && $arcSettings['arcade_active_user'] == 1) {
        require_once $sourcedir . '/ArcadeSigsStats_v2.php';
        require_once $sourcedir . '/Who.php';
        Who();
    }
    $context['sub_template'] = 'arcade_list';
    $context['page_title'] = $txt['arcade_game_list'];
}
Exemple #2
0
function ArcadeGameInfo($id_game, $internal_name = '', $admin = false)
{
    global $smcFunc, $user_info;
    if (!empty($id_game) && empty($internal_name)) {
        // By ID
        $sql = ' AND g.id_game = ' . (int) $id_game;
    } elseif (!empty($internal_name)) {
        // By internal_name
        $sql = ' AND g.internal_name = \'' . $internal_name . '\'';
    } else {
        return false;
    }
    if (!$admin) {
        $enabled = 'g.enabled = 1';
    } else {
        $enabled = '1';
    }
    if (allowedTo('arcade_admin')) {
        $user_info['query_see_game'] = '1';
    }
    // Query with all needed data
    $result = $smcFunc['db_query']('', '
	SELECT
			g.id_game,g.internal_name,g.game_name,g.game_file,
			g.game_directory,g.description,g.help,
			g.thumbnail,g.id_category,g.enabled,g.member_groups, 
			g.score_type,g.game_rating,g.id_member_first,
			g.id_score_first,g.id_member_second,g.id_score_second,
			g.id_member_third,g.id_score_third,g.game_width,
			g.game_height,g.game_bg_colour AS bgcolor,
			g.topic_id,g.number_plays,c.category_name,f.id_favorite AS is_favorite,
			s1.score AS gold_score,IFNULL(s2.score, 0) AS silver_score,
			IFNULL(s3.score, 0) AS bronze_score,IFNULL(pb.id_best, 0) AS id_best, 
			IFNULL(pb.score, 0) AS best,IFNULL(pb.atbscore, 0) AS atbbest,			
			IFNULL(s1.start_time, 0) AS champion_time, IFNULL(m1.real_name, 0) AS real_name1,
			IFNULL(m2.real_name, 0) AS real_name2, IFNULL(m3.real_name, 0) AS real_name3
		FROM {db_prefix}arcade_games as g
    		LEFT JOIN {db_prefix}arcade_categories AS c ON (c.id_category = g.id_category)
    		LEFT JOIN {db_prefix}arcade_favorite AS f ON (f.id_game = g.id_game AND f.id_member = {int:id_mem})
    		LEFT JOIN {db_prefix}arcade_scores AS s1 ON (s1.id_score = g.id_score_first)
    		LEFT JOIN {db_prefix}arcade_scores AS s2 ON (s2.id_score = g.id_score_second)
    		LEFT JOIN {db_prefix}arcade_scores AS s3 ON (s3.id_score = g.id_score_third)
    		LEFT JOIN {db_prefix}arcade_personalbest AS pb ON (pb.id_game = g.id_game AND pb.id_member = {int:id_mem})						
    		LEFT JOIN {db_prefix}members AS m1 ON (m1.id_member = g.id_member_first)
    		LEFT JOIN {db_prefix}members AS m2 ON (m2.id_member = g.id_member_second)
    		LEFT JOIN {db_prefix}members AS m3 ON (m3.id_member = g.id_member_third)			
		WHERE ' . $user_info['query_see_game'] . ' AND ' . $enabled . ' ' . $sql . '
		LIMIT 0,1', array('id_mem' => $user_info['id']));
    if ($smcFunc['db_num_rows']($result) == 0) {
        return false;
    }
    $game = $smcFunc['db_fetch_assoc']($result);
    $smcFunc['db_free_result']($result);
    if (!$admin) {
        return BuildGameArray($game);
    } else {
        return BuildGameArrayAdmin($game);
    }
}