def player_stats(request, key): player = get_object(Player, key) # Calculate the player's ranking on the fly singles_ranking = 0 doubles_ranking = 0 singles_players = Player.gql("WHERE owner = :owner AND active = True ORDER BY singles_ranking_points DESC, name", owner=request.user) for sp in singles_players: singles_ranking += 1 if sp.key == player.key: break doubles_players = Player.gql("WHERE owner = :owner AND active = True ORDER BY doubles_ranking_points DESC, name", owner=request.user) for dp in doubles_players: doubles_ranking += 1 if dp.key == player.key: break games = [] pgs = PlayerGame.gql("WHERE player = :player ORDER BY date_played DESC LIMIT 20", player=player) for pg in pgs: games.append(pg) return render_to_response(request, 'pingpong/player_stats.html', { 'player': player, 'singles_ranking': singles_ranking, 'doubles_ranking': doubles_ranking, 'games': games })
def add_score(request): if request.method != 'POST': players = Player.gql("WHERE owner = :owner AND active = True ORDER BY name", owner=request.user) return render_to_response(request, 'pingpong/addscore.html', { 'players': players, }) else: mode = 'singles' # Used when we re-direct back to the main view try: # Find players. Save teams. Save game using a ranking system. t1p1 = get_object(Player, request.POST['t1p1']) t1p2 = get_object(Player, request.POST['t1p2']) t2p1 = get_object(Player, request.POST['t2p1']) t2p2 = get_object(Player, request.POST['t2p2']) t1s = float(request.POST['t1s']) t2s = float(request.POST['t2s']) t1 = db_create(Team, player1=t1p1, player2=t1p2, points=t1s) t2 = db_create(Team, player1=t2p1, player2=t2p2, points=t2s) game = db_create(Game, team1=t1, team2=t2) save_player_games(game, t1p1, t1p2, t2p1, t2p2, t1s, t2s) doubles = (t1p1 != None and t1p2 != None and t2p1 != None and t2p2 != None) if doubles: mode = 'doubles' ranking_system = DefaultRankingSystem() ranking_system.save_game(t1p1=t1p1, t1p2=t1p2, t2p1=t2p1, t2p2=t2p2, t1s=t1s, t2s=t2s, t1=t1, t2=t2, game=game, doubles=doubles) response_dict = { 'status': True, 'message': 'Scores successfully saved.', 'mode': mode, 'game': str(game.key()) } except: logging.exception('There was a problem adding scores') response_dict = { 'status': False, 'message' : 'Hmmm... There was a problem saving your scores - please have another go.', 'mode': mode } return HttpResponse(simplejson.dumps(response_dict), mimetype='application/json')
def index(request): if request.user.is_authenticated(): settings = get_user_settings(request.user) singles_players = Player.gql("WHERE owner = :owner AND active = True ORDER BY singles_ranking_points DESC, name", owner=request.user) doubles_players = Player.gql("WHERE owner = :owner AND active = True ORDER BY doubles_ranking_points DESC, name", owner=request.user) return render_to_response(request, 'pingpong/main.html', { 'trial_expired': settings.trial_expired(), 'trial_days_left': settings.trial_days_left(), 'in_trial_period': (not settings.has_paid_subscription and not settings.free_account), 'singles_players': singles_players, 'doubles_players': doubles_players, 'isMobile': True if is_mobile_browser(request) else False }) else: from django.conf import settings if is_mobile_browser(request): return render_to_response(request, 'pingpong/mobile.html', { 'price': settings.MONTHLY_PRICE }) else: return render_to_response(request, 'pingpong/index.html', { 'price': settings.MONTHLY_PRICE })
def settings(request): if request.method != 'POST': players = Player.gql("WHERE owner = :owner AND active = True ORDER BY name", owner=request.user) return render_to_response(request, 'pingpong/settings.html', { 'players': players, 'email': request.user.email }) else: errors = {} try: # Save email address email = request.POST['email'] if is_valid_email(email.strip()): user = request.user user.email = email.strip() user.save() else: errors['email'] = 'Invalid email address' # Add any new players new_players = request.POST['newplayers'] if new_players: players = new_players.splitlines() for p in players: if len(p.strip()) > 0: db_create(Player, name=p.strip(), owner=request.user) # Update player names based on posted values for k, v in request.POST.items(): if str(k).endswith('_player'): # Expected key format: <key>_player player = get_object(Player, str(k)[:-7]) if player: if len(v.strip()) > 0: player.name = v # Value is the updated player name player.put() else: errors[str(k)[:-7]] = 'Invalid name' if len(errors) == 0: response_dict = { 'status': True, 'message': 'Settings successfully saved.' } else: response_dict = { 'status': False, 'message': 'Hmmm... There was a problem saving your settings - please have another go.', 'errors': errors } return HttpResponse(simplejson.dumps(response_dict), mimetype='application/json') except: logging.exception('There was a problem saving settings') response_dict = { 'status': False, 'message': 'Hmmm... There was a problem saving your settings - please have another go.', 'errors': errors } return HttpResponse(simplejson.dumps(response_dict), mimetype='application/json')
def show_player(request, key): return object_detail(request, Player.all(), key)
def list_players(request): return object_list(request, Player.gql("WHERE owner = :owner ORDER BY name", owner=request.user), paginate_by=20)
def reset_singles_last_movements(self, user): players = Player.gql("WHERE owner = :owner", owner=user) for p in players: if p.singles_last_movement != 0.0: p.singles_last_movement = 0.0 p.put()
user = User(key_name='key_admin', username='******', email='admin@localhost', first_name='Ping Pong', last_name='Admin', is_active=True, is_staff=True, is_superuser=True) user.set_password('admin') user.put() # To reset an account - deletes all games and teams and resets ranking points # and last movements for all players from django.contrib.auth.models import User from pingpong.models import Player, Team, Game owner_key_name = '' # Set this to the key name (not the key itself) of the account owner owner = User.get_by_key_name(owner_key_name) if owner: # Find all players players = Player.gql("WHERE owner = :owner", owner=owner) for p in players: # Find all teams where p is player1 (no gql OR operator) teams = Team.gql("WHERE player1 = :player", player=p) for t in teams: # Delete all games in which t played games = Game.gql("WHERE team1 = :team", team=t) for g in games: g.delete() games = Game.gql("WHERE team2 = :team", team=t) for g in games: g.delete() # Delete team t.delete() # Find all teams where p is player2 (no gql OR operator) teams = Team.gql("WHERE player2 = :player", player=p)