0 ? $current_page - 5: 0; $navi_page_range_count = max(0, min(9, $last_page - $navi_page_range_start)); $navi_page_list = range($navi_page_range_start, $navi_page_range_start + $navi_page_range_count); $pageinfo['current'] = $current_page; $pageinfo['last'] = $last_page; $pageinfo['navi_list'] = $navi_page_list; $pageinfo['total_data_count'] = $total_data_count; $pageinfo['data_count_per_page'] = $data_count_per_page; return $pageinfo; } /** * ページナビゲーションテーブルを出力する * * @param resource $fp 出力先リソースへのハンドル * @param array $pageinfo calc_page_info()関数で取得したページ情報を保持する連想配列 */ function print_navi_page_table($fp, $pageinfo) { if (count($pageinfo['navi_list']) <= 1) return; $href_base = filter_input(INPUT_SERVER, 'SCRIPT_NAME')."?" .preg_replace('/(&?start=\w+)/', '', filter_input(INPUT_SERVER, 'QUERY_STRING')); if (strpos($href_base, "?") === FALSE) { $href_base .= "?"; } fwrite($fp, "\n" ."\n"); if ($pageinfo['current'] > 0) { $href = $href_base . "&start=". ($pageinfo['current'] - 1) * $pageinfo['data_count_per_page']; fwrite($fp, "\n"); } foreach ($pageinfo['navi_list'] as $page) { $page_num = $page + 1; $href = $href_base . "&start=". $page * $pageinfo['data_count_per_page']; if ($page === $pageinfo['current']) { fwrite($fp, "\n"); } else { fwrite($fp, "\n"); } } if ($pageinfo['current'] < $pageinfo['last']) { $href = $href_base . "&start=". ($pageinfo['current'] + 1) * $pageinfo['data_count_per_page']; fwrite($fp, "\n"); } fwrite($fp, "\n" ."
< 前へ$page_num$page_num次へ >
\n"); } /** * スコアランキングテーブルを出力する * * @param resource $fp 出力先リソースへのハンドル * @param array $scores スコア * @param integer $rank_start 順位の開始番号(0オリジン) */ function print_score_table($fp, $scores, $rank_start) { fwrite($fp, << 順位 スコア 日付 名前 種族 職業 性別 死因 EOM ); fwrite($fp, "\n"); foreach($scores as $idx => $score) { $rank = $rank_start + $idx + 1; $date = substr($score['date'], 0, 10); // 日時から日付部分を取り出す $sex_str = $score['sex'] ? "男" : "女"; $depth = !$score['winner'] ? $score['depth']."階, " : ""; $realms = isset($score['realms_name']) ? "(".$score['realms_name'].")" : ""; $dumpfile = new DumpFile($score['score_id']); if ($dumpfile->exists('dumps', 'txt')) { $name = "{$score['personality_name']}{$score['name']}"; } else { $name = "{$score['personality_name']}{$score['name']}"; } fwrite($fp, << $rank {$score['score']} $date $name {$score['race_name']} {$score['class_name']}$realms $sex_str EOM ); if ($dumpfile->exists('screens', 'html')) { fwrite($fp, "{$score['death_reason']}"); } else { fwrite($fp, "{$score['death_reason']}"); } fwrite($fp, "
({$depth}{$score['version']})\n". "\n"); } fwrite($fp, "\n"); fwrite($fp, "\n"); } $db = new ScoreDB(); $start_num = filter_input(INPUT_GET, 'start', FILTER_VALIDATE_INT) ?: 0; $search_result = $db->search_score($start_num, 50); $pageinfo = calc_page_info($search_result['total_data_count'], $start_num, 50); $wt = new WebTemplate(); $wt->set_title("変愚蛮怒 スコアランキング"); $wt->add_head_contents(''); $fp = $wt->main_contents_fp(); fprintf($fp, "

変愚蛮怒 歴代スコア (%s)

\n", $db->get_sort_mode_name()); fprintf($fp, << 件数 %d 件 (%.2f 秒) EOM ,$search_result['total_data_count'], $search_result['elapsed_time'] ); print_navi_page_table($fp, $pageinfo); print_score_table($fp, $search_result['scores'], $pageinfo['current'] * $pageinfo['data_count_per_page']); print_navi_page_table($fp, $pageinfo); $wt->print_page();