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 ' % listname for item in userlist: #check whether current item = item for preselection if item == selected: tmp = 'selected' else: tmp = '' data += '' % (tmp,item) data += '' 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 = """ """ % listname return data class GameCreation: """ manages the creation of games. """ def index(self,player1 = None, player2 = None, description = None,gobansize = None): username = cpg.request.sessionMap["username"] myuser = database.Users.byUsername(username) sessionid = cpg.request.sessionMap["_sessionId"] if myuser.sessionid == sessionid: 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: httptools.redirect("/login") def display_game_creation_form(self): """ prints a html form with multiple drop-down lists for choosing players, goban size and so on. """ username = cpg.request.sessionMap["username"] myuser = database.Users.byUsername(username) sessionid = cpg.request.sessionMap["_sessionId"] data = helper.header() p1data = create_user_dropdown_list("player1",username) p2data = create_user_dropdown_list("player2") gobansize = create_goban_size_dropdown_list("gobansize") #start form #choose player one (black),choose player two (white),choose goban size data += """

Player One (Black): %s

Player Two (White): %s

Goban Size: %s fields

Optional name for game:

""" % (p1data,p2data,gobansize) data += helper.footer() return data 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"] data = helper.header() #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) 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. #print error msg data += "Error: No free game slots for player %s!
" % player #display form again return self.display_game_creation_form() httptools.redirect("/overview") else: #give error message data += "Sorry, you must be one of the players!
" #display form again return self.display_game_creation_form() data+=helper.footer(req,form) return data index.exposed = True