webgo/gamecreation.py

95 lines
2.6 KiB
Python

from mod_python import *
import psql,helper
def display_game_creation_form(req,sessionid,username):
"""
prints a html form with multiple drop-down lists for choosing players,
goban size and so on.
gets a mod_python request, prints to req.write.
"""
data = helper.header()
p1data = create_user_dropdown_list("playerone",username)
p2data = create_user_dropdown_list("playertwo")
gobansize = create_goban_size_dropdown_list("gobansize")
#start form
#choose player one (black)
#choose player two (white)
#choose goban size
#'hidden' session id and username
data += """
<form method="post">
<p>Player One (Black): %s </p>
<p>Player Two (White): %s </p>
<p>Goban Size: %s fields </p>
<input type="hidden" name="sessionid" value="%s"><p>
<input type="hidden" name="username" value="%s"><p>
<input type="submit" name="create" value="create game"></p>
</form>
""" % (p1data,p2data,gobansize,sessionid,username)
data+=helper.footer()
req.write(data)
def process_creation_form(req,form):
"""
validates and processes the game creation form.
If everything was ok, a game will be created.
"""
#check if at least one of the players is the current user
if (form["playerone"] == form["username"]) or (form["playertwo"] == form["username"]):
#create game name
#create_game
#update entries for player one and player two
else:
pass
def create_user_dropdown_list(listname,selected = ""):
"""
gets a name for the generated list and, optionally, the preselected value.
returns a <select> form as string.
"""
userlist = psql.get_users_with_free_game_slots()
data = '<select name="%s">' % listname
for item in userlist:
#check whether current item = item for preselection
if item == selected:
tmp = 'selected'
else:
tmp = ''
data += '<option %s> %s </option>' % (tmp,item)
data += '</select>'
return data
def create_goban_size_dropdown_list(listname):
"""
gets a name, returns a string with a html form for selecting the goban size.
"""
data = """
<select name="%s">
<option> 9 </option>
<option> 13 </option>
<option> 19 </option>
</select>
""" % listname
return data
def main(req,form):
"""
display and process forms for game creation.
gets a request object and a util.FieldStorage form.
returns nothing.
"""
req.write(str(form.keys())+"<hr>")
username = form["username"]
#TODO:check if valid session id
sessionid = form["sessionid"]
if "gobansize" in form.keys(): #user already clicked on create
process_creation_form(req,form)
else:
display_game_creation_form(req,sessionid,username)
form = util.FieldStorage(req)
req.write(str(form))