104 lines
No EOL
3.4 KiB
Python
104 lines
No EOL
3.4 KiB
Python
import helper,login,database
|
|
from cherrypy import cpg
|
|
from cherrypy.lib import httptools
|
|
|
|
|
|
|
|
|
|
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 = database.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
|
|
|
|
class GameCreation:
|
|
"""
|
|
manages the creation of games.
|
|
"""
|
|
def index(self,player1 = None, player2 = None, description = None,gobansize = None):
|
|
try:
|
|
username = cpg.request.sessionMap["username"]
|
|
myuser = database.Users.byUsername(username)
|
|
except:
|
|
return helper.cs_render("templates/not_logged_in.cs")
|
|
username = ""
|
|
sessionid = cpg.request.sessionMap["_sessionId"]
|
|
if myuser.sessionid == sessionid and username != "":
|
|
if player1 != None and player2 != None and gobansize != None:
|
|
return self.process_creation_form(player1,player2,gobansize,description)
|
|
else:
|
|
return self.display_game_creation_form()
|
|
|
|
else:
|
|
return helper.cs_render("templates/not_logged_in.cs")
|
|
|
|
def display_game_creation_form(self, message = ""):
|
|
"""
|
|
prints a html form with multiple drop-down lists for choosing players,
|
|
goban size and so on.
|
|
TODO: authentication?
|
|
"""
|
|
username = cpg.request.sessionMap["username"]
|
|
myuser = database.Users.byUsername(username)
|
|
sessionid = cpg.request.sessionMap["_sessionId"]
|
|
|
|
|
|
|
|
#p1data = create_user_dropdown_list("player1",username)
|
|
#p2data = create_user_dropdown_list("player2")
|
|
|
|
settings = {}
|
|
settings["Data.Message"] = message
|
|
userlist = database.get_users_with_free_game_slots()
|
|
i = 0
|
|
for item in userlist:
|
|
settings["Data.Userlist.%d" % i] = item
|
|
i += 1
|
|
|
|
settings["Data.Username"] = username
|
|
|
|
return helper.cs_render("templates/gamecreation.cs",settings)
|
|
|
|
def process_creation_form(self,player1,player2,gobansize,description=None):
|
|
"""
|
|
validates and processes the game creation form.
|
|
If everything was ok, a game will be created.
|
|
TODO: change this function, so that the original database state canbe
|
|
restored, if for example one of the users does not have a free game slot.
|
|
"""
|
|
username = cpg.request.sessionMap["username"]
|
|
myuser = database.Users.byUsername(username)
|
|
sessionid = cpg.request.sessionMap["_sessionId"]
|
|
|
|
#check if at least one of the players is the current user
|
|
if (player1 == username) or (player2 == username):
|
|
#create game
|
|
mygame = database.GobanTable(player1=player1,player2=player2,size=gobansize,description = description)
|
|
#I don't know how to do create_sgf during creation of the column, so it has to be called explicitly.
|
|
mygame.create_sgf()
|
|
gamename = mygame.id
|
|
#update entries for player one and player two
|
|
for player in [player1,player2]:
|
|
myplayer = database.Users.byUsername(player)
|
|
if myplayer.free_slot_left:
|
|
myplayer.add_game(gamename)
|
|
else:#should not happen: no free game slot.
|
|
#display form with error msg
|
|
return self.display_game_creation_form("Error: No free game slots for player %s!<br>" % player)
|
|
|
|
httptools.redirect("/overview")
|
|
else:#display form with error msg
|
|
return self.display_game_creation_form("Sorry, but you must be one of the players!<br>")
|
|
|
|
index.exposed = True |