コード例 #1
0
ファイル: views.py プロジェクト: tonipenya/pingpongapp
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 })
コード例 #2
0
ファイル: views.py プロジェクト: tonipenya/pingpongapp
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')
コード例 #3
0
ファイル: views.py プロジェクト: tonipenya/pingpongapp
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 })
コード例 #4
0
ファイル: views.py プロジェクト: tonipenya/pingpongapp
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')
コード例 #5
0
ファイル: views.py プロジェクト: tonipenya/pingpongapp
def show_player(request, key):
  return object_detail(request, Player.all(), key)
コード例 #6
0
ファイル: views.py プロジェクト: tonipenya/pingpongapp
def list_players(request):
  return object_list(request, Player.gql("WHERE owner = :owner ORDER BY name",
                                         owner=request.user), paginate_by=20)
コード例 #7
0
ファイル: rankings.py プロジェクト: tonipenya/pingpongapp
 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()
コード例 #8
0
ファイル: extras.py プロジェクト: tonipenya/pingpongapp
  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)