]> de.git.xonotic.org Git - xonotic/xonstat.git/commitdiff
Start work on pagination for games: new view, route, and template.
authorAnt Zucaro <azucaro@gmail.com>
Mon, 16 May 2011 18:34:19 +0000 (14:34 -0400)
committerAnt Zucaro <azucaro@gmail.com>
Mon, 16 May 2011 18:34:19 +0000 (14:34 -0400)
xonstat/__init__.py
xonstat/templates/game_index.mako [new file with mode: 0755]
xonstat/views.py

index ff90a6249eba8bcdf8266a076bf5074df746018b..3da1fcf795c3580c2eec03ce73f9b57b071ed266 100755 (executable)
@@ -28,6 +28,12 @@ def main(global_config, **settings):
     config.add_route(name="player_info", pattern="/player/{id:\d+}", view=player_info, 
             renderer='player_info.mako') 
 
     config.add_route(name="player_info", pattern="/player/{id:\d+}", view=player_info, 
             renderer='player_info.mako') 
 
+    config.add_route(name="game_index", pattern="/games", view=game_index, 
+            renderer='game_index.mako') 
+
+    config.add_route(name="game_index_paged", pattern="/games/page/{page:\d+}", 
+            view=game_index, renderer='game_index.mako') 
+
     config.add_route(name="game_info", pattern="/game/{id:\d+}", view=game_info, 
             renderer='game_info.mako') 
 
     config.add_route(name="game_info", pattern="/game/{id:\d+}", view=game_info, 
             renderer='game_info.mako') 
 
diff --git a/xonstat/templates/game_index.mako b/xonstat/templates/game_index.mako
new file mode 100755 (executable)
index 0000000..56cb2a5
--- /dev/null
@@ -0,0 +1,17 @@
+<%inherit file="base.mako"/>\r
+\r
+<%block name="title">\r
+Game Index - ${parent.title()}\r
+</%block>\r
+\r
+% if not games:\r
+<h2>Sorry, no games yet. Get playing!</h2>\r
+\r
+% else:\r
+<h2>Recent Games</h2>\r
+<ul>\r
+% for (game_id, server_id, server_name, map_id, map_name) in games:\r
+   <li>game <a href="${request.route_url("game_info", id=game_id)}" name="Game info page for game #${game_id}">#${game_id}:</a> <a href="${request.route_url("map_info", id=map_id)}" name="Map info page for ${map_name}">${map_name}</a> on <a href="${request.route_url("server_info", id=server_id)}" name="Server info page for ${server_name}">${server_name}</a></li>\r
+% endfor\r
+</ul>\r
+% endif\r
index 3769cec2181c42854530d1be3fa075608622491c..3f9c58a04b8063e9f7f8557d0876f665a88159fe 100755 (executable)
@@ -3,6 +3,7 @@ import time
 import re
 from pyramid.response import Response
 from pyramid.view import view_config
 import re
 from pyramid.response import Response
 from pyramid.view import view_config
+from webhelpers.paginate import Page, PageURL
 
 from xonstat.models import *
 from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound
 
 from xonstat.models import *
 from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound
@@ -36,7 +37,8 @@ def player_info(request):
         player = DBSession.query(Player).filter_by(player_id=player_id).one()
         recent_games = DBSession.query("game_id", "server_id", "server_name", 
                 "map_id", "map_name").\
         player = DBSession.query(Player).filter_by(player_id=player_id).one()
         recent_games = DBSession.query("game_id", "server_id", "server_name", 
                 "map_id", "map_name").\
-                from_statement("select g.game_id, s.server_id, s.name as server_name, m.map_id, m.name as map_name "
+                from_statement("select g.game_id, s.server_id, "
+                        "s.name as server_name, m.map_id, m.name as map_name "
                         "from player_game_stats gs, games g, servers s, maps m "
                         "where gs.player_id=:player_id "
                         "and gs.game_id = g.game_id "
                         "from player_game_stats gs, games g, servers s, maps m "
                         "where gs.player_id=:player_id "
                         "and gs.game_id = g.game_id "
@@ -57,6 +59,29 @@ def player_info(request):
 # This is the game views area - only views pertaining to Xonotic
 # games and their related information goes here
 ##########################################################################
 # This is the game views area - only views pertaining to Xonotic
 # games and their related information goes here
 ##########################################################################
+def page_url(page):
+    return current_route_url(request, page=page, _query=request.GET)
+
+def game_index(request):
+    if 'page_number' in request.matchdict:
+        current_page = request.matchdict['page_number']
+    else:
+        current_page = 1
+
+    games_q = DBSession.query("game_id", "server_id", "server_name", 
+                "map_id", "map_name").\
+                from_statement("select g.game_id, s.server_id, "
+                "s.name as server_name, m.map_id, m.name as map_name "
+                "from games g, servers s, maps m "
+                "where g.server_id = s.server_id "
+                "and g.map_id = m.map_id "
+                "order by g.start_dt desc")
+
+    games = Page(games_q, current_page, url=page_url)
+
+    return {'games':games}
+
+
 def game_info(request):
     game_id = request.matchdict['id']
     try:
 def game_info(request):
     game_id = request.matchdict['id']
     try: