From add0c904ee8950c43d83cdc1d65228f43b37bede Mon Sep 17 00:00:00 2001
From: Ant Zucaro <azucaro@gmail.com>
Date: Tue, 26 Jan 2016 20:10:28 -0500
Subject: [PATCH] Add another sorting option to player_captimes.

You can now sort by two fields: most recent and fastest. This is done with a
line at the bottom of the table that allows you to toggle. Fixes #163.
---
 xonstat/templates/player_captimes.mako | 11 +++++++++--
 xonstat/views/player.py                | 17 +++++++++++++----
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/xonstat/templates/player_captimes.mako b/xonstat/templates/player_captimes.mako
index afe2828..8391fb5 100644
--- a/xonstat/templates/player_captimes.mako
+++ b/xonstat/templates/player_captimes.mako
@@ -17,11 +17,12 @@
 
   <div class="row">
     <div class="small-12 columns">
-      <h5>Fastest Flag Captures by
+      <h4>Fastest Flag Captures by
         <a href="${request.route_url('player_info', id=player.player_id)}">
           ${player.nick_html_colors()|n}
         </a>
-      </h5>
+      </h4>
+
    
       <table class="table-hover table-condensed">
         <thead>
@@ -45,6 +46,12 @@
         </tbody>
       </table>
 
+      % if sort == "fastest":
+          <p>* sorted by fastest - sort by <a href="${request.route_url('player_captimes', player_id=player.player_id, _query={"sort":"create_dt", "page":page})}">most recent</a> instead</p>
+      % else:
+          <p>* sorted by most recent - sort by <a href="${request.route_url('player_captimes', player_id=player.player_id, _query={"sort":"fastest", "page":page})}">fastest</a> instead</p>
+      % endif
+
     </div>
   </div>
 
diff --git a/xonstat/views/player.py b/xonstat/views/player.py
index faabcba..439f19d 100644
--- a/xonstat/views/player.py
+++ b/xonstat/views/player.py
@@ -976,7 +976,9 @@ def player_captimes_data(request):
     if player_id <= 2:
         player_id = -1;
 
-    current_page = request.params.get("page", 1)
+    page = request.params.get("page", 1)
+
+    sort = request.params.get("sort", "create_dt")
 
     try:
         player = DBSession.query(Player).filter_by(player_id=player_id).one()
@@ -987,13 +989,18 @@ def player_captimes_data(request):
                 filter(PlayerCaptime.player_id==player_id).\
                 filter(PlayerCaptime.game_id==Game.game_id).\
                 filter(PlayerCaptime.map_id==Map.map_id).\
-                filter(Game.server_id==Server.server_id).\
-                order_by(expr.desc(PlayerCaptime.create_dt))
+                filter(Game.server_id==Server.server_id)
+
+        if sort == "fastest":
+            pct_q = pct_q.order_by(PlayerCaptime.fastest_cap)
+        else:
+            sort = "create_dt"
+            pct_q = pct_q.order_by(expr.desc(PlayerCaptime.create_dt))
 
     except Exception as e:
         raise pyramid.httpexceptions.HTTPNotFound
 
-    captimes = Page(pct_q, current_page, items_per_page=20, url=page_url)
+    captimes = Page(pct_q, page, items_per_page=20, url=page_url)
 
     # replace the items in the canned pagination class with more rich ones
     captimes.items = [PlayerCapTime(row) for row in captimes.items]
@@ -1002,6 +1009,8 @@ def player_captimes_data(request):
             "player_id" : player_id,
             "player"    : player,
             "captimes"  : captimes,
+            "page"      : page,
+            "sort"      : sort,
         }
 
 
-- 
2.39.5