From 405be28917148397bd81c15c412ffafd01f9dbb0 Mon Sep 17 00:00:00 2001 From: Ant Zucaro Date: Tue, 13 Dec 2011 15:45:49 -0500 Subject: [PATCH] Game searches. --- xonstat/templates/search.mako | 20 +++++++++++++++++ xonstat/views/search.py | 42 ++++++++++++++++++++++------------- 2 files changed, 47 insertions(+), 15 deletions(-) diff --git a/xonstat/templates/search.mako b/xonstat/templates/search.mako index c364c74..64e5ced 100644 --- a/xonstat/templates/search.mako +++ b/xonstat/templates/search.mako @@ -71,3 +71,23 @@ % endfor % endif + +##### game results ##### +% if result_type == "game": + + + + + + + + % for (game, server, gmap) in results: + + + + + + + % endfor +
Game IDMapServerPlayed On
${game.game_id}${gmap.name}${server.name}${game.create_dt.strftime('%m/%d/%Y at %I:%M %p')}
+% endif diff --git a/xonstat/views/search.py b/xonstat/views/search.py index b8b3ab5..11c22eb 100644 --- a/xonstat/views/search.py +++ b/xonstat/views/search.py @@ -4,6 +4,7 @@ import pyramid.httpexceptions import re import time from pyramid.response import Response +from sqlalchemy import desc from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound from sqlalchemy.sql import func from xonstat.models import * @@ -13,41 +14,52 @@ from webhelpers.paginate import Page, PageURL log = logging.getLogger(__name__) -def search_q(player_id=None, nick=None, server_id=None, server_name=None, - map_id=None, map_name=None, game_id=None, create_dt=None): +def search_q(nick=None, server_name=None, map_name=None, create_dt=None): session = DBSession() result_type = None q = None # player-only searches - if ((player_id or nick) and not server_id and not server_name and not - map_id and not map_name and not game_id and not create_dt): + if nick and not server_name and not map_name and not create_dt: result_type = "player" q = session.query(Player) if nick: - q = q.filter(func.upper(Player.stripped_nick).like('%'+nick.upper()+'%')) - if player_id: - q = q.filter(Player.player_id==player_id) + q = q.filter( + func.upper(Player.stripped_nick).like('%'+nick.upper()+'%')) + # server-only searches - elif ((server_id or server_name) and not player_id and not nick and not - map_id and not map_name and not game_id and not create_dt): + elif server_name and not nick and not map_name and not create_dt: result_type = "server" q = session.query(Server) if server_name: q = q.filter(func.upper(Server.name).\ like('%'+server_name.upper()+'%')) - if server_id: - q = q.filter(Server.server_id==server_id) + # map-only searches - elif ((map_id or map_name) and not player_id and not nick and not - server_id and not server_name and not game_id and not create_dt): + elif map_name and not nick and not server_name and not create_dt: result_type = "map" q = session.query(Map) if map_name: q = q.filter(func.upper(Map.name).\ like('%'+map_name.upper()+'%')) - if map_id: - q = q.filter(Map.map_id==map_id) + + # game searches (all else) + else: + result_type = "game" + q = session.query(Game, Server, Map).\ + filter(Game.server_id == Server.server_id).\ + filter(Game.map_id == Map.map_id).\ + order_by(Game.game_id.desc()) + if nick: + q = q.filter(func.upper(PlayerGameStat.stripped_nick).\ + like('%'+nick.upper()+'%')).\ + filter(PlayerGameStat.game_id == Game.game_id) + if map_name: + q = q.filter(func.upper(Map.name).\ + like('%'+map_name.upper()+'%')) + if server_name: + q = q.filter(func.upper(Server.name).\ + like('%'+server_name.upper()+'%')) return (result_type, q) -- 2.39.2