]> de.git.xonotic.org Git - xonotic/xonstat.git/blobdiff - xonstat/views/search.py
Clean up map view, show more on map_index page.
[xonotic/xonstat.git] / xonstat / views / search.py
old mode 100755 (executable)
new mode 100644 (file)
index 5593956..13700b6
@@ -6,7 +6,7 @@ import time
 from pyramid.response import Response
 from sqlalchemy import desc
 from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound
-from sqlalchemy.sql import func
+from sqlalchemy import func
 from xonstat.models import *
 from xonstat.util import strip_colors, qfont_decode
 from xonstat.util import page_url, html_colors
@@ -14,23 +14,27 @@ from webhelpers.paginate import Page, PageURL
 
 log = logging.getLogger(__name__)
 
-def search_q(nick=None, server_name=None, map_name=None, create_dt=None):
+def search_q(nick=None, server_name=None, map_name=None, create_dt=None,
+        gametypes=[]):
     session     = DBSession()
     result_type = None
     q           = None
 
     # player-only searches
-    if nick and not server_name and not map_name and not create_dt:
+    if nick and not server_name and not map_name and not create_dt \
+        and len(gametypes) < 1:
         result_type = "player"
         q = session.query(Player)
         if nick:
             q = q.filter(
                     func.upper(Player.stripped_nick).like('%'+nick.upper()+'%')).\
                     filter(Player.player_id > 2).\
+                    filter(Player.active_ind == True).\
                     order_by(Player.player_id)
 
     # server-only searches
-    elif server_name and not nick and not map_name and not create_dt:
+    elif server_name and not nick and not map_name and not create_dt \
+        and len(gametypes) < 1:
         result_type = "server"
         q = session.query(Server)
         if server_name:
@@ -39,7 +43,8 @@ def search_q(nick=None, server_name=None, map_name=None, create_dt=None):
                     order_by(Server.server_id)
 
     # map-only searches
-    elif map_name and not nick and not server_name and not create_dt:
+    elif map_name and not nick and not server_name and not create_dt \
+        and len(gametypes) < 1:
         result_type = "map"
         q = session.query(Map)
         if map_name:
@@ -54,6 +59,8 @@ def search_q(nick=None, server_name=None, map_name=None, create_dt=None):
                 filter(Game.server_id == Server.server_id).\
                 filter(Game.map_id == Map.map_id).\
                 order_by(Game.game_id.desc())
+        if len(gametypes) > 0:
+            q = q.filter(Game.game_type_cd.in_(gametypes))
         if nick:
             q = q.filter(func.upper(PlayerGameStat.stripped_nick).\
                     like('%'+nick.upper()+'%')).\
@@ -67,17 +74,20 @@ def search_q(nick=None, server_name=None, map_name=None, create_dt=None):
 
     return (result_type, q)
 
-def search(request):
+def _search_data(request):
     fs = None
     nick = None
     server_name = None
     map_name = None
+    gametypes = []
     result_type = None
     results = None
     query = None
+    _query = {}
+
 
-    if 'page' in request.matchdict:
-        current_page = request.matchdict['page']
+    if request.params.has_key('page'):
+        current_page = request.params['page']
     else:
         current_page = 1
 
@@ -95,13 +105,37 @@ def search(request):
             if request.params['map_name'] != '':
                 map_name = request.params['map_name']
                 query['map_name'] = map_name
+        if request.params.has_key('dm'):
+                gametypes.append('dm')
+                query['dm'] = ''
+        if request.params.has_key('duel'):
+                gametypes.append('duel')
+                query['duel'] = ''
+        if request.params.has_key('ctf'):
+                gametypes.append('ctf')
+                query['ctf'] = ''
+        if request.params.has_key('tdm'):
+                gametypes.append('tdm')
+                query['tdm'] = ''
+        if request.params.has_key('stype') and request.params.has_key('sval'):
+            stype = request.params['stype']
+            sval = request.params['sval']
+            if stype == "players":
+                query['nick'] = sval
+                nick = sval
+            if stype == "servers":
+                query['server_name'] = sval
+                server_name = sval
+            if stype == "maps":
+                query['map_name'] = sval
+                map_name = sval
+
         (result_type, q) = search_q(nick=nick, server_name=server_name,
-                map_name=map_name)
-        log.debug(q)
+                map_name=map_name, gametypes=gametypes)
 
         try:
             if q != None:
-                results = Page(q, current_page, url=page_url)
+                results = Page(q, current_page, items_per_page=10, url=page_url)
         except Exception as e:
             raise e
             result_type = None
@@ -111,3 +145,11 @@ def search(request):
             'results':results,
             'query':query,
             }
+
+
+def search(request):
+    return _search_data(request)
+
+
+def search_json(request):
+    return [{'status':'not implemented'}]