]> de.git.xonotic.org Git - xonotic/xonstat.git/commitdiff
Fix search pagination.
authorAnt Zucaro <azucaro@gmail.com>
Sat, 24 Dec 2011 01:26:46 +0000 (20:26 -0500)
committerAnt Zucaro <azucaro@gmail.com>
Sat, 24 Dec 2011 01:26:46 +0000 (20:26 -0500)
xonstat/__init__.py
xonstat/templates/navlinks.mako
xonstat/templates/search.mako
xonstat/views/search.py

index 2408c78cbbc9eaff3f74d8a04a091b45c48aac3a..7796eb07b1e4efd4d4dca42c38b0f9b40a56f44d 100755 (executable)
@@ -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()
index a529eb445153fd34c171de802dc01b8ba02d450e..1a524b4fdba3b02f298c70fe2bcc290789203f47 100755 (executable)
@@ -1,47 +1,78 @@
-<%def name="navlinks(view, curr, last)">
+<%def name="navlinks(view, curr, last, query=None)">
 % if curr != last:
     % if curr != 1:
-    <a class="pagination" href="${request.route_url(view, page=curr-1)}" name="Previous Page">previous</a>
+        % if query is not None:
+            <a class="pagination" href="${request.route_url(view, page=curr-1, _query=query)}" name="Previous Page">previous</a>
+        % else:
+            <a class="pagination" href="${request.route_url(view, page=curr-1)}" name="Previous Page">previous</a>
+        % 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
             <span class="pagination">...</span>
-            <a class="pagination" href="${request.route_url(view, page=last)}" name="Last Page">${last}</a>
+            % if query is not None:
+                <a class="pagination" href="${request.route_url(view, page=last, _query=query)}" name="Last Page">${last}</a>
+            % else:
+                <a class="pagination" href="${request.route_url(view, page=last)}" name="Last Page">${last}</a>
+            % endif
+
         % elif last-curr < 6:
-            <a class="pagination" href="${request.route_url(view, page=1)}" name="First Page">1</a>
+            % if query is not None:
+                <a class="pagination" href="${request.route_url(view, page=1, _query=query)}" name="First Page">1</a>
+            % else:
+                <a class="pagination" href="${request.route_url(view, page=1)}" name="First Page">1</a>
+            % endif
             <span class="pagination">...</span>
             % for i in range(last-5, last+1):
-            ${link_page(view, i, curr)}
+            ${link_page(view, i, curr, query)}
             % endfor
         % else:
-            <a class="pagination" href="${request.route_url(view, page=1)}" name="First Page">1</a>
+            % if query is not None:
+                <a class="pagination" href="${request.route_url(view, page=1, _query=query)}" name="First Page">1</a>
+            % else:
+                <a class="pagination" href="${request.route_url(view, page=1)}" name="First Page">1</a>
+            % endif
+
             <span class="pagination">...</span>
             % for i in range(curr-2, curr+3):
-            ${link_page(view, i, curr)}
+            ${link_page(view, i, curr, query)}
             % endfor
             <span class="pagination">...</span>
-            <a class="pagination" href="${request.route_url(view, page=last)}" name="Last Page">${last}</a>
+            % if query is not None:
+                <a class="pagination" href="${request.route_url(view, page=last, _query=query)}" name="Last Page">${last}</a>
+            % else:
+                <a class="pagination" href="${request.route_url(view, page=last)}" name="Last Page">${last}</a>
+            % endif
+
         % endif
     % endif
 
     % if curr != last:
-    <a class="pagination" href="${request.route_url(view, page=curr+1)}" name="Next Page">next</a>
+        % if query is not None:
+            <a class="pagination" href="${request.route_url(view, page=curr+1, _query=query)}" name="Next Page">next</a>
+        % else:
+            <a class="pagination" href="${request.route_url(view, page=curr+1)}" name="Next Page">next</a>
+        % endif
     % endif
 % endif
 </%def>
 
-<%def name="link_page(view, page_num, curr_page)">
+<%def name="link_page(view, page_num, curr_page, query)">
 % if page_num == curr_page:
 <span class="pagination" style="color:#d95b00;">${page_num}</span>
 % else:
-<a class="pagination" href="${request.route_url(view, page=page_num)}" name="Go to page ${page_num}">${page_num}</a>
+    % if query is not None:
+        <a class="pagination" href="${request.route_url(view, page=page_num, _query=query)}" name="Go to page ${page_num}">${page_num}</a>
+    % else:
+        <a class="pagination" href="${request.route_url(view, page=page_num)}" name="Go to page ${page_num}">${page_num}</a>
+    % endif
 % endif
 </%def>
index cceeacb2534bfa386f6e32bec3e94dd32a17739e..edbf7d0b2be53a37d6f64b7bfe24aba292b043c2 100755 (executable)
@@ -96,6 +96,5 @@
 % endif
 
 <!-- navigation links -->
-<p>Work in progress (these won't work :P):</p>
-${navlinks("search", results.page, results.last_page)}
+${navlinks("search_paged", results.page, results.last_page, query)}
 % endif
index 85dae399583a1669a3c7917dd38b2e0852a0655c..5593956ffa8bc7c66bb3b8797ff7ee10fb5c978a 100755 (executable)
@@ -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,
             }