def output( ): user = request.player try: session = db.sessionmaker() id = getSingleField( 'id', request ) mid = getSingleField( 'mid', request ) if mid: if not db.AccessCheck( id, request.player.nick, Roles.LadderAdmin ): template = env.get_template('error.html') return template.render( err_msg="you're not allowed to delete match #%s"%(str(mid)) ) lid = getSingleField( 'lid', request ) db.DeleteMatch( lid, mid ) if id: if db.AccessCheck( id, user.nick, Roles.LadderAdmin ): ladder_ids = [id] else: ladder_ids = [] else: if user.role < Roles.GlobalAdmin: ladder_ids = session.query( Option.ladder_id ).filter( Option.key == Option.adminkey ) \ .filter( Option.value == user.nick ).group_by( Option.ladder_id ) else: ladder_ids = session.query( Ladder.id ) matches = session.query( Match ).filter( Match.ladder_id.in_ ( ladder_ids ) )\ .order_by( Match.ladder_id ).order_by( Match.date.desc() ).all() template = env.get_template('adminmatch.html') return template.render( matches=matches, lid=id ) except ElementNotFoundException, e: err = str(e)
def output(): try: s = db.sessionmaker() limit = 10 matches_header = 'Recent Matches' matches = s.query( Match ).order_by(Match.date.desc())[:limit] players_header = 'Active Players' player_ids = s.query( func.count( Result.player_id ), Result.player_id ).group_by( Result.player_id ).order_by( func.count(Result.player_id).desc() )[:limit] players = [] for (count,pid) in player_ids: players.append( (s.query( Player ).filter( Player.id == pid ).one(), count ) ) ladders_header = 'Active Ladders' ladder_ids = s.query( func.count( Match.ladder_id ), Match.ladder_id ).group_by( Match.ladder_id ).order_by( func.count(Match.ladder_id).desc() ).all() ladders = [] for (count,lid) in ladder_ids: q = s.query( Ladder ).filter( Ladder.id == lid ) if q.first(): ladders.append( ( q.first(), count ) ) template = env.get_template('index.html') ret = template.render( matches=matches, matches_header= matches_header, ladders_header=ladders_header, ladders=ladders, players_header=players_header, players=players ) s.close() return ret except Exception, m: if s: s.close() template = env.get_template('error.html') return template.render( err_msg=(str(m)) )
def output( ): player_name = getSingleField( 'player', request ) order = getSingleField( 'order', request , 'nick') ladder_id = getSingleField( 'ladder', request ) try: s = db.sessionmaker() if player_name: player = db.GetPlayer( player_name ) ladders = db.GetLadderByPlayer( player.id ) played = dict() positions = dict() for ladder in ladders: positions[ladder.id] = db.GetPlayerPosition( ladder.id, player.id ) played[ladder.id] = s.query( Result.id ).filter( Result.ladder_id == ladder.id ).filter( Result.player_id == player.id ).count() results = s.query( Result ).filter( Result.player_id == player.id).order_by(Result.date.desc())[0:5] matches = [] for r in results: matches.append( r.match ) template = env.get_template('viewplayer.html') s.close() return template.render(player=player,ladders=ladders, positions=positions,played=played,matches=matches ) else: asc = getSingleField( 'asc', request, 'False' ) if not asc: asc = 'False' q = s.query( Player, func.count(Result.id).label('played')).outerjoin( (Result, Result.player_id == Player.id ) )\ .filter( Player.id.in_(s.query( Result.player_id ).filter( Player.id == Result.player_id ) ) ) \ .filter( Result.player_id == Player.id ).group_by( Player.id ) if ladder_id: q = q.filter( Player.id.in_( s.query( Result.player_id ).filter( Result.ladder_id == ladder_id ) ) ) if order == 'nick': q = q.order_by( SortAsc( Player.nick, asc ) ) elif order == 'id' : q = q.order_by( SortAsc( Player.id, asc ) ) else: order = 'played' q = q.order_by( SortAsc( func.count(Result.id), asc ) ) limit = int(getSingleField( 'limit', request, q.count() )) offset = int(getSingleField( 'offset', request, 0 )) players = q[offset:offset+limit-1] template = env.get_template('viewplayerlist.html') s.close() return template.render(players=players,offset=offset,limit=limit,order=order,asc=asc ) except ElementNotFoundException, e: err_msg="player %s not found"%(str(player_name))
def output( ): try: limit = 10 template = env.get_template('fame.html') s = db.sessionmaker() player_ids = s.query( Result.player_id ).group_by( Result.player_id ) ladder_playerpos = dict() playerpos = [] for pid in player_ids: pid = pid[0] ladders = s.query( Ladder ).filter( Ladder.id.in_( s.query( Result.ladder_id ).filter( Result.player_id == pid ).group_by( Result.ladder_id ) ) ) score = 0 l_names = [] for l in ladders: player_per_ladder = s.query( Result.player_id ).filter( Result.ladder_id == l.id ).group_by( Result.player_id ).count() pos = db.GetPlayerPosition( l.id, pid ) score += ( 1 - ( pos / float( player_per_ladder ) ) ) * 1000 l_names.append( '%s (%d)'%(l.name,pos) ) if ladders.count() > 0: playername = s.query( Player.nick ).filter( Player.id == pid ).first()[0] playerpos.append( (playername, int(score), ', '.join(l_names) ) ) playerpos.sort( lambda x, y: cmp(y[1], x[1]) ) header = ['Name', 'Score', 'Active on (position on ladder)' ] leaders = [] losers = [] for name, id in s.query( Ladder.name, Ladder.id ): try: r = db.GetRanks( id ) if len(r) > 1: s.add( r[0] ) s.add( r[-1] ) leaders.append( (r[0].player.nick, name, r[-1].player.nick ) ) except ElementNotFoundException: continue #empty ladder losers.sort( lambda x, y: cmp(x[1], y[1]) ) leaders.sort( lambda x, y: cmp(x[1], y[1]) ) s.close() return template.render( playerpos_top=playerpos[0:limit],playerpos_bottom=playerpos[-limit:], header=header, leaders=leaders,losers=losers ) except Exception, m: if s: s.close() template = env.get_template('error.html') return template.render( err_msg=(str(m)) )
def output( ): id = getSingleField( 'id', request ) player_name = getSingleField( 'player', request ) ladder_id = getSingleField( 'ladder', request ) limit = getSingleField( 'limit', request, 18 ) ret = '' try: s = db.sessionmaker() if player_name and ladder_id: ladder = db.GetLadder( ladder_id ) player = db.GetPlayer( player_name ) template = env.get_template('viewmatchlist.html') header_string = 'Matches for %s on ladder %s'%(player.nick,ladder.name) matches = s.query( Match ).filter(Match.ladder_id == ladder_id).order_by(Match.date.desc()).all() ret = template.render(matches=matches, header=header_string ) elif ladder_id: ladder = db.GetLadder( ladder_id ) header_string = 'Matches on ladder %s'%(ladder.name) template = env.get_template('viewmatchlist.html') matches = s.query( Match ).filter(Match.ladder_id == ladder_id).order_by(Match.date.desc()).all() ret = template.render(matches=matches, header=header_string ) elif player_name: player = db.GetPlayer( player_name ) template = env.get_template('viewmatchlist.html') header_string = 'Matches for %s'%(player.nick) results = s.query( Result ).filter( Result.player_id == player.id).order_by(Result.date.desc()) matches = [] for r in results: matches.append( r.match ) ret = template.render(matches=matches, header=header_string ) elif not id: template = env.get_template('viewmatchgrid.html') matches = s.query( Match ).order_by(Match.date.desc())[:limit] ret = template.render( matches=matches, limit=limit ) else: match = s.query( Match ).options(eagerload('settings')).filter(Match.id == id ).first() template = env.get_template('viewmatch.html') opt_headers = ['key','val','wl/bl'] ret = template.render(ladder=match.ladder, matchinfo=MatchInfoToTableAdapter(match) ) s.close() return ret except ElementNotFoundException, e: err_msg="ladder with id %s not found"%(str(id))
def output( ): session = db.sessionmaker() user = request.player try: id = getSingleField( 'id', request, getSingleFieldPOST('id', request ) ) if not db.AccessCheck( id, request.player.nick, Roles.LadderAdmin ): template = env.get_template('error.html') session.close() return template.render( err_msg="you're not allowed to edit ladder #%s"%(str(id)) ) pre = GlobalRankingAlgoSelector.GetWebRepresentation( db.GetRanks( id ), db ) db.RecalcRankings(id) post = GlobalRankingAlgoSelector.GetWebRepresentation( db.GetRanks( id ), db ) lad = db.GetLadder( id ) template = env.get_template('recalc.html') session.close() return template.render( pre=pre, post=post, ladder=lad ) except ElementNotFoundException, e: err = str(e)
def output(): session = db.sessionmaker() user = request.player try: if getSingleFieldPOST("addladder", request) == "add": if user.role >= Roles.GlobalAdmin: name = getSingleFieldPOST("laddername", request) if name and len(name) > 0 and len(name) <= 100: ladderid = db.AddLadder(name) session.close() return bottle.redirect("/admin/ladder?id=%d" % ladderid) else: template = env.get_template("error.html") session.close() return template.render(err_msg="you're not allowed to add a ladder") else: template = env.get_template("error.html") session.close() return template.render(err_msg="you're not allowed to add a ladder") if user.role < Roles.GlobalAdmin: ladder_ids = ( session.query(Option.ladder_id) .filter(Option.key == Option.adminkey) .filter(Option.value == user.nick) .group_by(Option.ladder_id) ) else: ladder_ids = session.query(Ladder.id) ladders = session.query(Ladder).filter(Ladder.id.in_(ladder_ids)).all() template = env.get_template("adminindex.html") session.close() if len(ladders) < 1: # no admin whatsoever return bottle.redirect("/") return template.render(ladders=ladders, isglobal=user.role >= Roles.GlobalAdmin) except ElementNotFoundException, e: template = env.get_template("error.html") session.close() return template.render(err_msg=str(e))
def output( ): user = request.player try: id = getSingleField( 'id', request, getSingleFieldPOST('id', request ) ) lad = db.GetLadder( id ) if not db.AccessCheck( id, request.player.nick, Roles.GlobalAdmin ): template = env.get_template('error.html') return template.render( err_msg="you're not allowed to delete ladder #%s"%(str(id)) ) ask = True if getSingleField( 'confirm', request ) == 'yes': session = db.sessionmaker() session.delete( lad ) session.commit() session.close() ask = False template = env.get_template('deleteladder.html') return template.render( ladder=lad, ask=ask ) except ElementNotFoundException, e: err = str(e)
def output( ): id = getSingleField( 'id', request ) try: s = db.sessionmaker() if not id: ladder_list = [] ladder_triple_list = s.query(Ladder).order_by( Ladder.name ) #ladder_triple_list = [db.GetLadder( 17 )] for l in ladder_triple_list: ladder_id = l.id ladder_name = l.name ladder_description = l.description player_count = s.query( Result.id ).group_by( Result.player_id ).\ filter(Result.ladder_id == ladder_id).count() match_query = s.query( Match.id,Match.date,Match.mapname ).\ filter(Match.ladder_id == ladder_id) match_count = match_query.count() last_match = match_query.order_by( Match.date.desc() ).first() item = dict() item['player_count'] = player_count item['match_count'] = match_count item['last_match'] = last_match item['name'] = ladder_name item['description'] = ladder_description item['id'] = ladder_id try: ranks = db.GetRanks( ladder_id, None, 3 ) item['ranks'] = GlobalRankingAlgoSelector.GetWebRepresentation( ranks, db ) except Exception, e: item['ranks'] = None ladder_list.append( item ) template = env.get_template('viewladderlist.html') s.close() return template.render(ladders=ladder_list ) else:
def output( ): id = getSingleField( 'id', request, getSingleFieldPOST('id', request ) ) session = db.sessionmaker() user = request.player note = '' extrainfo = None try: if not db.AccessCheck( id, request.player.nick, Roles.LadderAdmin ): template = env.get_template('error.html') session.close() return template.render( err_msg="you're not allowed to edit ladder #%s"%(str(id)) ) lad = db.GetLadder( id ) session.add( lad ) options = lad.options to_delete = getFieldsByPrefixPOST('delete', request ) if to_delete and len(to_delete) > 0: del_key = to_delete.keys()[0] if to_delete[del_key] == 'delete': del_idx = int(del_key.split('-')[-1]) del_opt = options[del_idx] session.delete( del_opt ) session.commit() #redirect to same page here cause i had troubles with double session elements otherwise return bottle.redirect('/admin/ladder?id=%s'%id) if getSingleFieldPOST( 'addadmin', request ) == 'add': if not db.AccessCheck( id, request.player.nick, Roles.GlobalAdmin ): template = env.get_template('error.html') session.close() return template.render( err_msg="you're not allowed to add an admin to ladder #%s"%(str(id)) ) admin_name = getSingleFieldPOST( 'adminname', request, 'koko' ) db.AddLadderAdmin( id, admin_name ) session.close() return bottle.redirect('/admin/ladder?id=%s'%id) if getSingleFieldPOST( 'new', request ) == 'add new option': opt = Option('','') opt.ladder_id = id session.add( opt ) session.commit() session.add( lad ) options = lad.options form = forms.Ladder(request.POST, lad, options=options ) if getSingleFieldPOST( 'submit', request ) == 'submit' and form.validate(): extrainfo = handleAlgoChange( db, env, request, lad ) form.populate_obj( lad ) session.add( lad ) session.commit() note='Ladder updated' #else:#enable this for debug #if len(form.errors) > 0: #note= form.errors textfields = [] for var in forms.Ladder.field_order: textfields.append( getattr(form, var) ) template = env.get_template('change_ladder.html') session.close() return template.render( form=form, ladder_id=id, note=note, textfields=textfields, isglobal=user.role >= Roles.GlobalAdmin, extrainfo=extrainfo ) except ElementNotFoundException, e: template = env.get_template('error.html') session.close() return template.render( err_msg=str(e) )