X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=xonstat%2Fviews%2Fsearch.py;h=13700b6ebfe95cb59218a00b50eb2585573a9327;hb=5e7c58ce773acd93dbd00900fcab0caa3e959909;hp=5593956ffa8bc7c66bb3b8797ff7ee10fb5c978a;hpb=47fa38ae6fc3c0efc9299fd18e0468a10d3ddfbd;p=xonotic%2Fxonstat.git diff --git a/xonstat/views/search.py b/xonstat/views/search.py old mode 100755 new mode 100644 index 5593956..13700b6 --- a/xonstat/views/search.py +++ b/xonstat/views/search.py @@ -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'}]