Browse Source

add add_player page

feature_tests
Burathar 4 years ago
parent
commit
8a0384d4d9
  1. 14
      app/forms.py
  2. 27
      app/routes.py
  3. 28
      app/templates/add_player.html
  4. 1
      app/templates/game_dashboard.html

14
app/forms.py

@ -1,8 +1,8 @@
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, SubmitField, TextAreaField, DateTimeField, BooleanField, HiddenField, FloatField from wtforms import StringField, PasswordField, SubmitField, DateTimeField, BooleanField, HiddenField, FloatField, SelectField
from wtforms.validators import DataRequired, EqualTo, ValidationError, Length, NumberRange from wtforms.validators import DataRequired, EqualTo, ValidationError, Length, NumberRange
from app.models import Player, Objective
from pytz import timezone from pytz import timezone
from app.models import Player, Objective, Role
class LoginForm(FlaskForm): class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()]) username = StringField('Username', validators=[DataRequired()])
@ -56,3 +56,13 @@ class ObjectiveForm(FlaskForm):
objective = Objective.query.filter_by(name=objective_name.data).first() objective = Objective.query.filter_by(name=objective_name.data).first()
if objective is not None: if objective is not None:
raise ValidationError('Please use a different name.') raise ValidationError('Please use a different name.')
class PlayerAddForm(FlaskForm):
name = StringField('Player Name', validators=[DataRequired(), Length(min=0, max=64)])
role = SelectField('Player Role', choices=[('none', 'none'), ('owner', 'owner'), ('hunter', 'hunter'), ('bunny', 'bunny')], validators=[DataRequired()])
submit_add = SubmitField('Create')
class PlayerCreateForm(FlaskForm):
name = StringField('Player Name', validators=[DataRequired(), Length(min=0, max=64)])
role = SelectField('Player Role', choices=[('none', 'none'), ('owner', 'owner'), ('hunter', 'hunter'), ('bunny', 'bunny')], validators=[DataRequired()])
submit_create = SubmitField('Create')

27
app/routes.py

@ -3,7 +3,7 @@ from flask_login import login_user, logout_user, current_user, login_required
from sqlalchemy import and_ from sqlalchemy import and_
from app import app, db from app import app, db
from app.models import Player, Game, Role, GamePlayer, Objective, ObjectiveMinimalEncoder, LocationEncoder from app.models import Player, Game, Role, GamePlayer, Objective, ObjectiveMinimalEncoder, LocationEncoder
from app.forms import LoginForm, RegistrationForm, CreateGameForm, ObjectiveForm from app.forms import LoginForm, RegistrationForm, CreateGameForm, ObjectiveForm, PlayerAddForm, PlayerCreateForm
import json import json
import qrcode import qrcode
from io import BytesIO from io import BytesIO
@ -74,7 +74,7 @@ def game_dashboard(game_name):
@app.route('/game/<game_name>/player/<player_name>') @app.route('/game/<game_name>/player/<player_name>')
@login_required @login_required
def game_player(game_name, player_name): def game_player(game_name, player_name):
return redirect(url_for('indsex')) return redirect(url_for('index'))
def is_game_owner(game): def is_game_owner(game):
return current_user in [gameplayer.player for gameplayer in game.game_players if gameplayer.role == Role.owner] return current_user in [gameplayer.player for gameplayer in game.game_players if gameplayer.role == Role.owner]
@ -98,6 +98,28 @@ def add_objective(game_name):
return redirect(url_for('game_dashboard', game_name=game.name)) return redirect(url_for('game_dashboard', game_name=game.name))
return render_template('objective.html', title=f'Add Objective for {game_name}', form=form, objective=objective, owner=True) return render_template('objective.html', title=f'Add Objective for {game_name}', form=form, objective=objective, owner=True)
@app.route('/game/<game_name>/addplayer', methods=['GET', 'POST'])
@login_required
def add_player(game_name):
game = Game.query.filter_by(name=game_name).first_or_404()
if not is_game_owner(game): abort(403)
form_add = PlayerAddForm()
form_create = PlayerCreateForm()
if form_add.submit_add.data and form_add.validate_on_submit():
player = Player.query.filter_by(form_add.name.data).first_or_404()
game.game_players.append(GamePlayer(player=player, role=Role[form_create.role.data]))
return redirect(url_for('game_dashboard', game_name=game.name))
if form_create.submit_create.data and form_create.validate_on_submit():
player = Player(name=form_create.name.data)
player.set_auth_hash()
game.game_players.append(GamePlayer(player=player, role=Role[form_create.role.data]))
db.session.commit()
return redirect(url_for('game_dashboard', game_name=game.name))
return render_template('add_player.html', title=f'Add Player for {game_name}', form_add=form_add, form_create=form_create, game=game)
def generate_objective_qr_code(objective): def generate_objective_qr_code(objective):
qr = qrcode.QRCode( qr = qrcode.QRCode(
version=None, version=None,
@ -136,6 +158,7 @@ def objective(objective_hash):
objective.longitude = form.longitude.data objective.longitude = form.longitude.data
objective.latitude = form.latitude.data objective.latitude = form.latitude.data
db.session.commit() db.session.commit()
return redirect(url_for('game_dashboard', game_name=objective.game.name))
return render_template('objective.html', title='Objective view', objective=objective, owner=owner, form=form, qrcode=qrcode) return render_template('objective.html', title='Objective view', objective=objective, owner=owner, form=form, qrcode=qrcode)
@app.route('/objective/<objective_hash>/delete', methods=['GET']) @app.route('/objective/<objective_hash>/delete', methods=['GET'])

28
app/templates/add_player.html

@ -0,0 +1,28 @@
{% extends "base.html" %}
{% import 'bootstrap/wtf.html' as wtf %}
{% block app_content %}
<h1>Add Player To Game</h1>
<h2>Add Existing Player</h2>
<div class="row">
<div class="col-md-4">
<form action="" method="post" class="form" role="form">
{{ form_add.hidden_tag() }}
{{ wtf.form_field(form_add.name, class='form-control') }}
{{ wtf.form_field(form_add.role, class='form-control') }}
{{ wtf.form_field(form_add.submit_add, class='btn btn-primary', value='Add') }}
</form>
</div>
</div>
<h2>Create new Player</h2>
<div class="row">
<div class="col-md-4">
<form action="" method="post" class="form" role="form">
{{ form_create.hidden_tag() }}
{{ wtf.form_field(form_create.name, class='form-control') }}
{{ wtf.form_field(form_create.role, class='form-control') }}
{{ wtf.form_field(form_create.submit_create, class='btn btn-primary', value='Create') }}
</form>
</div>
</div>
{% endblock %}

1
app/templates/game_dashboard.html

@ -10,6 +10,7 @@
<h1>{{ game.name }} Dashboard</h1> <h1>{{ game.name }} Dashboard</h1>
<h2>Players:</h2> <h2>Players:</h2>
<p><a href="{{ url_for('add_player', game_name = game.name) }}">Add player</a></p>
<div class="table-responsive"> <div class="table-responsive">
<table class="table"> <table class="table">
<thead> <thead>

Loading…
Cancel
Save