3 import pyramid.httpexceptions
6 from pyramid.response import Response
7 from sqlalchemy import desc
8 from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound
9 from sqlalchemy.sql import func
10 from xonstat.models import *
11 from xonstat.util import strip_colors, qfont_decode
12 from xonstat.util import page_url, html_colors
13 from webhelpers.paginate import Page, PageURL
15 log = logging.getLogger(__name__)
17 def search_q(nick=None, server_name=None, map_name=None, create_dt=None,
23 # player-only searches
24 if nick and not server_name and not map_name and not create_dt \
25 and len(gametypes) < 1:
26 result_type = "player"
27 q = session.query(Player)
30 func.upper(Player.stripped_nick).like('%'+nick.upper()+'%')).\
31 filter(Player.player_id > 2).\
32 order_by(Player.player_id)
34 # server-only searches
35 elif server_name and not nick and not map_name and not create_dt \
36 and len(gametypes) < 1:
37 result_type = "server"
38 q = session.query(Server)
40 q = q.filter(func.upper(Server.name).\
41 like('%'+server_name.upper()+'%')).\
42 order_by(Server.server_id)
45 elif map_name and not nick and not server_name and not create_dt \
46 and len(gametypes) < 1:
48 q = session.query(Map)
50 q = q.filter(func.upper(Map.name).\
51 like('%'+map_name.upper()+'%')).\
54 # game searches (all else)
57 q = session.query(Game, Server, Map).\
58 filter(Game.server_id == Server.server_id).\
59 filter(Game.map_id == Map.map_id).\
60 order_by(Game.game_id.desc())
61 if len(gametypes) > 0:
62 q = q.filter(Game.game_type_cd.in_(gametypes))
64 q = q.filter(func.upper(PlayerGameStat.stripped_nick).\
65 like('%'+nick.upper()+'%')).\
66 filter(PlayerGameStat.game_id == Game.game_id)
68 q = q.filter(func.upper(Map.name).\
69 like('%'+map_name.upper()+'%'))
71 q = q.filter(func.upper(Server.name).\
72 like('%'+server_name.upper()+'%'))
74 return (result_type, q)
86 if 'page' in request.matchdict:
87 current_page = request.matchdict['page']
91 if request.params.has_key('fs'):
93 if request.params.has_key('nick'):
94 if request.params['nick'] != '':
95 nick = request.params['nick']
97 if request.params.has_key('server_name'):
98 if request.params['server_name'] != '':
99 server_name = request.params['server_name']
100 query['server_name'] = server_name
101 if request.params.has_key('map_name'):
102 if request.params['map_name'] != '':
103 map_name = request.params['map_name']
104 query['map_name'] = map_name
105 if request.params.has_key('dm'):
106 gametypes.append('dm')
108 if request.params.has_key('duel'):
109 gametypes.append('duel')
111 if request.params.has_key('ctf'):
112 gametypes.append('ctf')
114 if request.params.has_key('tdm'):
115 gametypes.append('tdm')
118 (result_type, q) = search_q(nick=nick, server_name=server_name,
119 map_name=map_name, gametypes=gametypes)
123 results = Page(q, current_page, url=page_url)
124 except Exception as e:
129 return {'result_type':result_type,