From: Ant Zucaro Date: Sat, 24 Dec 2011 01:26:46 +0000 (-0500) Subject: Fix search pagination. X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=47fa38ae6fc3c0efc9299fd18e0468a10d3ddfbd;p=xonotic%2Fxonstat.git Fix search pagination. --- diff --git a/xonstat/__init__.py b/xonstat/__init__.py index 2408c78..7796eb0 100755 --- a/xonstat/__init__.py +++ b/xonstat/__init__.py @@ -87,5 +87,8 @@ def main(global_config, **settings): config.add_route(name="search", pattern="search", view=search, renderer='search.mako') + config.add_route(name="search_paged", pattern="search/page/{page:\d+}", + view=search, renderer='search.mako') + return config.make_wsgi_app() diff --git a/xonstat/templates/navlinks.mako b/xonstat/templates/navlinks.mako index a529eb4..1a524b4 100755 --- a/xonstat/templates/navlinks.mako +++ b/xonstat/templates/navlinks.mako @@ -1,47 +1,78 @@ -<%def name="navlinks(view, curr, last)"> +<%def name="navlinks(view, curr, last, query=None)"> % if curr != last: % if curr != 1: - + % if query is not None: + + % else: + + % endif % endif % if last < 8: % for i in range(1, last+1): - ${link_page(view, i, curr)} + ${link_page(view, i, curr, query)} % endfor % else: % if curr < 5: % for i in range(1,7): - ${link_page(view, i, curr)} + ${link_page(view, i, curr, query)} % endfor ... - + % if query is not None: + + % else: + + % endif + % elif last-curr < 6: - + % if query is not None: + + % else: + + % endif ... % for i in range(last-5, last+1): - ${link_page(view, i, curr)} + ${link_page(view, i, curr, query)} % endfor % else: - + % if query is not None: + + % else: + + % endif + ... % for i in range(curr-2, curr+3): - ${link_page(view, i, curr)} + ${link_page(view, i, curr, query)} % endfor ... - + % if query is not None: + + % else: + + % endif + % endif % endif % if curr != last: - + % if query is not None: + + % else: + + % endif % endif % endif -<%def name="link_page(view, page_num, curr_page)"> +<%def name="link_page(view, page_num, curr_page, query)"> % if page_num == curr_page: ${page_num} % else: - + % if query is not None: + + % else: + + % endif % endif diff --git a/xonstat/templates/search.mako b/xonstat/templates/search.mako index cceeacb..edbf7d0 100755 --- a/xonstat/templates/search.mako +++ b/xonstat/templates/search.mako @@ -96,6 +96,5 @@ % endif -

Work in progress (these won't work :P):

-${navlinks("search", results.page, results.last_page)} +${navlinks("search_paged", results.page, results.last_page, query)} % endif diff --git a/xonstat/views/search.py b/xonstat/views/search.py index 85dae39..5593956 100755 --- a/xonstat/views/search.py +++ b/xonstat/views/search.py @@ -25,7 +25,9 @@ def search_q(nick=None, server_name=None, map_name=None, create_dt=None): q = session.query(Player) if nick: q = q.filter( - func.upper(Player.stripped_nick).like('%'+nick.upper()+'%')) + func.upper(Player.stripped_nick).like('%'+nick.upper()+'%')).\ + filter(Player.player_id > 2).\ + order_by(Player.player_id) # server-only searches elif server_name and not nick and not map_name and not create_dt: @@ -33,7 +35,8 @@ def search_q(nick=None, server_name=None, map_name=None, create_dt=None): q = session.query(Server) if server_name: q = q.filter(func.upper(Server.name).\ - like('%'+server_name.upper()+'%')) + like('%'+server_name.upper()+'%')).\ + order_by(Server.server_id) # map-only searches elif map_name and not nick and not server_name and not create_dt: @@ -41,7 +44,8 @@ def search_q(nick=None, server_name=None, map_name=None, create_dt=None): q = session.query(Map) if map_name: q = q.filter(func.upper(Map.name).\ - like('%'+map_name.upper()+'%')) + like('%'+map_name.upper()+'%')).\ + order_by(Map.map_id) # game searches (all else) else: @@ -70,16 +74,27 @@ def search(request): map_name = None result_type = None results = None + query = None - current_page = 1 + if 'page' in request.matchdict: + current_page = request.matchdict['page'] + else: + current_page = 1 if request.params.has_key('fs'): + query = {'fs':''} if request.params.has_key('nick'): - nick = request.params['nick'] + if request.params['nick'] != '': + nick = request.params['nick'] + query['nick'] = nick if request.params.has_key('server_name'): - server_name = request.params['server_name'] + if request.params['server_name'] != '': + server_name = request.params['server_name'] + query['server_name'] = server_name if request.params.has_key('map_name'): - map_name = request.params['map_name'] + if request.params['map_name'] != '': + map_name = request.params['map_name'] + query['map_name'] = map_name (result_type, q) = search_q(nick=nick, server_name=server_name, map_name=map_name) log.debug(q) @@ -87,7 +102,6 @@ def search(request): try: if q != None: results = Page(q, current_page, url=page_url) - log.debug(len(results)) except Exception as e: raise e result_type = None @@ -95,4 +109,5 @@ def search(request): return {'result_type':result_type, 'results':results, + 'query':query, }