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, "$page_num | \n");
} else {
fwrite($fp, "$page_num | \n");
}
}
if ($pageinfo['current'] < $pageinfo['last']) {
$href = $href_base . "&start=". ($pageinfo['current'] + 1) * $pageinfo['data_count_per_page'];
fwrite($fp, "次へ > | \n");
}
fwrite($fp, "
\n"
."
\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();