def index(): # stores row from group AND active game JOINTLY- USERspecific - games the USER is playing session["userrow"] = query_db( "SELECT * FROM games INNER JOIN groups ON groups.group_name=games.group_name INNER JOIN users ON users.user_id=groups.user_id WHERE users.user_id=? AND games.active=?", [session["user_id"], 1], one=True) # stores row from group AND active game JOINTLY where user is group-member - GROUPspecific session["gamerow"] = query_db( "SELECT * FROM groups INNER JOIN games ON games.group_name=groups.group_name INNER JOIN users ON groups.user_id=users.user_id WHERE groups.user_id=? AND games.active=?", [session["user_id"], 1], one=True) if session["userrow"] is None: if request.method == "POST": groups = query_db("SELECT group_name FROM groups WHERE user_id=?", [session["user_id"]], one=False) return render_template("new_game.html", groups=groups) else: return render_template("index.html", game=session["userrow"]) return render_template("index.html", game=session["userrow"])
def archive(): # these are all the sentences ever played by groups user is in, ORDERED BY TIMESTAMP sentences = query_db( "SELECT game_id, sentence, time FROM sentences INNER JOIN groups ON groups.group_name=sentences.group_name INNER JOIN users ON users.user_id=groups.user_id WHERE users.user_id=? ORDER BY time", [session["user_id"]], one=False) games = query_db( "SELECT games.game_id, time, games.group_name FROM sentences INNER JOIN groups ON groups.group_name=sentences.group_name INNER JOIN games ON games.game_id=sentences.game_id WHERE groups.user_id=? AND games.active=? GROUP BY games.game_id ORDER BY time", [session["user_id"], 0], one=False) # create dict "stories" saving only date and story-string stories = {} for game in games: s = "" for sen in sentences: if sen["game_id"] == game["game_id"]: s = s + sen["sentence"] + " " stories[game["time"]] = s # save dict in session, beacuse for some reason passed on stories (originally a dict) variable via archive.html only contains game["time"]-key, not value(story) session["stories"] = stories return render_template("archive.html", stories=stories)
def sign_up(): # Clear session session.clear() #Ensure all fields filled out also if JS disabled if request.method == "POST": name = request.form.get("username") if not name: return apology("Please provide username") if not request.form.get("password") or not request.form.get( "confirmation"): return apology("Please provide password and confirm it") hashp = generate_password_hash(request.form.get("password"), method='pbkdf2:sha256', salt_length=8) if not check_password_hash(hashp, request.form.get("confirmation")): return apology("Password does not match confirmation.") try: cur = get_db().execute( "INSERT INTO users (name, hash) VALUES (:name, :hash)", { "name": name, "hash": hashp }) get_db().commit() except sqlite3.IntegrityError: return apology("Username already exists") # Login user automatically, storing their id in session, then layout will also show index.html? &menu? session["user_id"] = query_db("SELECT user_id FROM users WHERE name=?", [name], one=True)["user_id"] session["name"] = query_db("SELECT name FROM users WHERE user_id=?", [session["user_id"]], one=True)["name"] return render_template("index.html") else: return render_template("sign_up.html")
def profile(user_id): """Redirect to another user's homepage""" # Get the information of the person the user wishes to look at view_user = query_db("SELECT * FROM users WHERE id=?", [user_id], one=True) # Get the user's id user = session["user_id"] # Render template with my_prof set to Flase because user is accessing someone else's profile return render_template("index.html", user=user, view_user=view_user, my_prof=False)
def new_game(): # get group_name from form & initiating user's turn if request.method == "POST": group_name = request.form.get("group") # check that no game started with group where one of members is currently in an active game activeusers = query_db( "SELECT users.user_id FROM games INNER JOIN groups ON groups.group_name=games.group_name INNER JOIN users ON users.user_id=groups.user_id WHERE games.active=?", [ True, ], one=False) members = query_db("SELECT user_id FROM groups WHERE group_name=?", [group_name], one=False) if len(members) < 3: flash( group_name + " does not have enough players. Add at least 3 to start a game." ) return redirect("/") intersection = [value for value in activeusers if value in members] if intersection: flash("One or more members of selected group is busy playing.") return redirect("/") row = query_db("SELECT * FROM groups WHERE group_name=? AND user_id=?", [group_name, session["user_id"]], one=True) # new DB entry for new game get_db().execute( "INSERT INTO games (active, turn, group_name) VALUES (:active, :turn, :group_name)", { "active": 1, "turn": row["turn"], "group_name": row["group_name"] }) get_db().commit() session["userrow"] = query_db( "SELECT * FROM games INNER JOIN groups ON groups.group_name=games.group_name INNER JOIN users ON users.user_id=groups.user_id WHERE users.user_id=? AND games.active=?", [session["user_id"], 1], one=True) session["gamerow"] = query_db( "SELECT * FROM groups INNER JOIN games ON games.group_name=groups.group_name INNER JOIN users ON groups.user_id=users.user_id WHERE groups.user_id=? AND games.active=?", [session["user_id"], 1], one=True) session["round"] = 1 return render_template("live_game.html", turn=row["turn"], round=session["round"], isturn=True, group_name=group_name) else: groups = query_db("SELECT group_name FROM groups WHERE user_id=?", [session["user_id"]], one=False) return render_template("new_game.html", groups=groups)
def show_entry(self, requete): """ Afficher la fiche d'un adhérent """ numero = requete[6:] #cur = g.db.execute('select numero, nom, prenom,adr_rue, adr_CP, adr_ville from adherent where numero='+numero) #result = cur.fetchall() user = query_db('select * from adherent where numero=?', [numero], one=True) if user is None: return render_template('adherent.html') else: return render_template('adherent_fiche.html', entry=user, parent=['liste','Liste des adhérents'])
def chat(): """Redirect to public chat page""" # Get current user cur_user = get_user(session["user_id"]) # Get most recent 10 public chat messages from database messages = query_db( "SELECT * FROM messages WHERE buddy=? ORDER BY stamp DESC LIMIT 10", [""]) # Redirect to public chat page return render_template("chat.html", user=cur_user, dest="", messages=messages)
def users(): """Redirect to users page""" # Get all users users = query_db("SELECT * FROM users") # Get current user id user_id = session["user_id"] # Get current user information user = get_user(session["user_id"]) # Redirect user to about page return render_template("users.html", users=users, curr_user=user_id, user=user)
def login(): """Log user in""" # Forget any user_id session.clear() # User reached route via POST (as by submitting a form via POST) if request.method == "POST": # Ensure username was submitted if not request.json["username"]: abort(400, 'must provide username') # Ensure password was submitted elif not request.json["password"]: abort(400, 'must provide password') # Query database for username result = query_db("SELECT * FROM users WHERE name = ?", [request.json["username"]], one=True) # Ensure username exists and password is correct if not result or not check_password_hash(result["hash"], request.json["password"]): abort(400, 'invalid username and/or password') status = False # Remember which user has logged in session["user_id"] = result["id"] status = True # Redirect user to home page # return redirect("/") return jsonify({'result': status, 'displayName': result["name"]}) # User reached route via GET (as by clicking a link or via redirect) else: # return redirect(url_for('login')) return "login page"
def login(): """Log user in""" # Forget any user_id session.clear() # User reached route via POST (as by submitting a form via POST) if request.method == "POST": # Ensure username was submitted if not request.form.get("username"): flash("Please provide username") return render_template("login.html", user='') # Ensure password was submitted elif not request.form.get("password"): flash("Please provide password") return render_template("login.html", user='') # Query database for username rows = query_db("SELECT * FROM users WHERE username = ?", [request.form.get("username")], one=True) # Ensure username exists and password is correct if rows == None or not check_password_hash( rows["hash"], request.form.get("password")): flash("Invalid username or password") return render_template("login.html", user='') # Remember which user has logged in session["user_id"] = rows["id"] # Redirect user to home page return redirect("/") # User reached route via GET (as by clicking a link or via redirect) else: return render_template("login.html", user='')
def add(group): if request.method == "POST": # set turn in group (for game) to highest before looping to add new members turn = query_db("SELECT MAX(turn) FROM groups WHERE group_name=?", [group], one=True)["MAX(turn)"] old_size = turn users = [] # get usernames typed into fields[] for field in zip(request.form.getlist("fields[]")): if not field[0]: flash("Please select player(s)") return render_template("add.html", group=group) user = query_db("SELECT user_id FROM users WHERE name=?", [field[0]], one=True) # store users added in list to flash users.append(field[0]) # check that user not duplicated in form AND group # if user enters inexistent username, remove all entries if user is None: get_db().execute( "DELETE FROM groups WHERE group_name=? AND turn>?", (group, old_size)) get_db().commit() flash(field[0] + " is not registered") return redirect("/groups") # if username entered is already in group, remove all entries checkusers = query_db("SELECT user_id FROM groups WHERE group_name=?", [group], one=False) if checkusers: for check in checkusers: print("CHECK IS:", check["user_id"]) if (turn >= old_size) and (user["user_id"] == check["user_id"]): get_db().execute( "DELETE FROM groups WHERE group_name=? AND turn>?", (group, old_size)) get_db().commit() flash(field[0] + " is already added to " + group) return redirect("/groups") turn += 1 print("USERS ARE: ", users) try: get_db().execute( "INSERT INTO groups (group_name, turn, user_id) VALUES (:group_name, :turn, :user_id)", { "group_name": group, "turn": turn, "user_id": user["user_id"] }) get_db().commit() except sqlite3.IntegrityError: return apology("something went wrong in DB") flash(", ".join(users) + " added!") return render_template("group.html", group=group) else: return render_template("add.html", group=group)