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']; }
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); } }