diff --git a/src/oastat_static_web_generator.cpp b/src/oastat_static_web_generator.cpp index a2eea5e..7bc0010 100644 --- a/src/oastat_static_web_generator.cpp +++ b/src/oastat_static_web_generator.cpp @@ -19,7 +19,6 @@ const size_t MAX_MAP_LIST = 10; const char* const SAGO_CONNECTION_STRING = "SAGO_CONNECTION_STRING"; -void write_html_game(cppdb::session& database, int game_number); // means of death typedef enum { @@ -251,6 +250,9 @@ struct OastatGame { std::string servername; }; + +void write_html_game(cppdb::session& database, const OastatGame& game); + void getRecentGames(cppdb::session& database, std::vector& games) { PrintStartEndTimer t("getRecentGames"); std::string sql = "select gamenumber, gametype, mapname, time, basegame, second, servername from oastat.oastat_games order by gamenumber desc limit 10"; @@ -259,19 +261,41 @@ void getRecentGames(cppdb::session& database, std::vector& games) { while(res.next()) { OastatGame game; res >> game.gamenumber >> game.gametype >> game.mapname >> game.time >> game.basegame >> game.second >> game.servername; - write_html_game(database, game.gamenumber); + write_html_game(database, game); games.push_back(game); } } -void write_html_game(cppdb::session& database, int game_number) { +void getGameScoreTotal(cppdb::session& database, int gamenumber, std::vector>& scores) { + std::string sql = "select player, count(0) c from oastat.oastat_points where gamenumber = ? group by player order by c desc"; + cppdb::statement st = database.prepare(sql); + st.bind(1, gamenumber); + cppdb::result res = st.query(); + while(res.next()) { + int playerid; + int count; + res >> playerid >> count; + scores.push_back(std::pair(playerid, count)); + } +} + +void write_html_game(cppdb::session& database, const OastatGame& game) { ctemplate::TemplateDictionary game_tpl("templates/game.tpl"); game_tpl.SetValue("GENERATION_DATE", timestamp_now_as_string(database)); - game_tpl.SetValue("GAME_NUMBER", std::to_string(game_number)); + game_tpl.SetValue("GAME_NUMBER", std::to_string(game.gamenumber)); + game_tpl.SetValue("GAME_MAP", game.mapname); + game_tpl.SetValue("GAME_SERVERNAME", game.servername); + std::vector> scores; + getGameScoreTotal(database, game.gamenumber, scores); + for (size_t i = 0; i < scores.size(); ++i) { + ctemplate::TemplateDictionary* sub_dict = game_tpl.AddSectionDictionary("SCORES_LIST"); + sub_dict->SetValue("ID", std::to_string(scores.at(i).first)); + sub_dict->SetValue("SCORE", std::to_string(scores.at(i).second)); + } std::string output; ctemplate::ExpandTemplate("templates/game.tpl", ctemplate::DO_NOT_STRIP, &game_tpl, &output); std::ofstream myfile; - myfile.open (cmdargs.output_dir+"/game/"+std::to_string(game_number)+".html"); + myfile.open (cmdargs.output_dir+"/game/"+std::to_string(game.gamenumber)+".html"); myfile << output; myfile.close(); } @@ -349,7 +373,6 @@ void write_html_index(cppdb::session& database) { void write_files(cppdb::session& database) { write_html_index(database); - write_html_game(database, 1); } diff --git a/templates/game.tpl b/templates/game.tpl index d3a2e89..8cc9235 100644 --- a/templates/game.tpl +++ b/templates/game.tpl @@ -37,6 +37,19 @@
OpenArena Stats - Game {{GAME_NUMBER}}
+ {{GAME_MAP}} at {{GAME_SERVERNAME}} + + + + + + {{#SCORES_LIST}} + + + + + {{/SCORES_LIST}} +
Player idScore
{{ID}}{{SCORE}}