def delete_game(game_id, game_name): ''' admin only deleting a game from database ''' if session['admin']: DB_REVIEWS.remove({'game_name': game_name}) DB_GAME_LIST.remove({'_id': ObjectId(game_id)}) return redirect(url_for('admin_tab_games')) return render_template('no_login.html')
def all_games(): ''' rendering template for all games ''' gamelist = DB_GAME_LIST.find().sort('name', 1).skip(session['SKIP']).limit( session['LIMIT']) results = DB_GAME_LIST.find().count() pages = math.ceil(DB_GAME_LIST.find().count() / session['LIMIT']) return render_template('all_games.html', gamelist=gamelist, pages=pages, results=results, PAGE_NUMBER=session['PAGE_NUMBER'])
def admin_tab_games(): ''' rendering templates for admin sites, check if admin is logged in before rendering results ''' if session['admin']: gamelist = DB_GAME_LIST.find().skip(session['SKIP']).limit( session['LIMIT']) pages = math.ceil(DB_GAME_LIST.find().count() / session['LIMIT']) results = DB_GAME_LIST.find().count() return render_template('admin_tab_games.html', gamelist=gamelist, pages=pages, results=results, PAGE_NUMBER=session['PAGE_NUMBER']) return render_template('no_login.html')
def update_game(game_id): ''' updating database according to changes made in edit_game template, only available for admin ''' if session['admin']: DB_GAME_LIST.update( {'_id': ObjectId(game_id)}, { 'name': request.form.get('name'), 'publisher': request.form.get('publisher'), 'picture_link': request.form.get('picture_link'), 'wiki_link': request.form.get('wiki_link'), 'game_description': request.form.get('game_description') }) return redirect(url_for('admin_tab')) return render_template('no_login.html')
def page_count(num, where): ''' Pagination changing amount of pages, what to skip and change the shown results num = PAGE_NUMBER (reset to 1 by function redirecting to this, change_limit() where = variable declared by template to redirect back from where pagination was initiated on) ''' if where == 'browse' or where == 'your_reviews' or where == 'admin_tab_reviews': session['PAGE_NUMBER'] = int(num) session['TOTAL_PAGES'] = math.ceil(DB_REVIEWS.find().count() / session['LIMIT']) if session['PAGE_NUMBER'] < 1: session['PAGE_NUMBER'] = 1 session['SKIP'] = 0 elif session['PAGE_NUMBER'] > session['TOTAL_PAGES']: session['PAGE_NUMBER'] = session['TOTAL_PAGES'] session['SKIP'] = int((session['PAGE_NUMBER'] - 1) * session['LIMIT']) return redirect(url_for(where)) elif where == 'all_games' or where == 'admin_tab_games': session['PAGE_NUMBER'] = int(num) session['TOTAL_PAGES'] = math.ceil(DB_GAME_LIST.find().count() / session['LIMIT']) if session['PAGE_NUMBER'] < 1: session['PAGE_NUMBER'] = 1 session['SKIP'] = 0 elif session['PAGE_NUMBER'] > session['TOTAL_PAGES']: session['PAGE_NUMBER'] = session['TOTAL_PAGES'] session['SKIP'] = int((session['PAGE_NUMBER'] - 1) * session['LIMIT']) return redirect(url_for(where)) elif where == 'admin_tab_users': session['PAGE_NUMBER'] = int(num) session['TOTAL_PAGES'] = math.ceil(DB_USERS.find().count() / session['LIMIT']) if session['PAGE_NUMBER'] < 1: session['PAGE_NUMBER'] = 1 session['SKIP'] = 0 elif session['PAGE_NUMBER'] > session['TOTAL_PAGES']: session['PAGE_NUMBER'] = session['TOTAL_PAGES'] session['SKIP'] = int((session['PAGE_NUMBER'] - 1) * session['LIMIT']) return redirect(url_for(where)) elif where == 'admin_tab_suggestions': session['PAGE_NUMBER'] = int(num) session['TOTAL_PAGES'] = math.ceil(DB_GAME_SUGGESTION.find().count() / session['LIMIT']) if session['PAGE_NUMBER'] < 1: session['PAGE_NUMBER'] = 1 session['SKIP'] = 0 elif session['PAGE_NUMBER'] > session['TOTAL_PAGES']: session['PAGE_NUMBER'] = session['TOTAL_PAGES'] session['SKIP'] = int((session['PAGE_NUMBER'] - 1) * session['LIMIT']) return redirect(url_for(where))
def add_review(): ''' rendering template for adding a review ''' if 'username' in session: return render_template('add_review.html', gamelist=DB_GAME_LIST.find().sort('name', 1)) return render_template('no_login.html')
def edit_game(game_id): ''' rendering template for editing a game, only available for admin ''' if session['admin']: game = DB_GAME_LIST.find_one({"_id": ObjectId(game_id)}) return render_template('edit_game.html', game=game) return render_template('no_login.html')
def edit_review(review_id): ''' rendering template for editing a review ''' if session['username']: review = DB_REVIEWS.find_one({"_id": ObjectId(review_id)}) return render_template('edit_review.html', review=review, gamelist=DB_GAME_LIST.find()) return render_template('no_login.html')
def insert_game(): ''' inserting a game into database ''' count_games = DB_COUNTER.find_one({'counter_name': 'counter'}) new_count = int(count_games['number_games'] + 1) DB_GAME_LIST.insert({ 'name': request.form['name'], 'publisher': request.form['publisher'], 'picture_link': request.form['picture_link'], 'wiki_link': request.form['wiki_link'], 'game_description': request.form['game_description'], 'game_id': int(new_count + 1), 'average': 0 }) DB_COUNTER.update({'counter_name': 'counter'}, {'$inc': { 'number_games': 1 }}) DB_GAME_SUGGESTION.remove({'name': request.form['name']}) return redirect(url_for('admin_tab_games'))
def top_games(): ''' rendering template for top_games ''' # initialization for all variables required for # upating the game keys required to show and update results total_ratings = DB_REVIEWS.aggregate([{ '$group': { '_id': '$game_name', 'count': { '$sum': '$rating' } } }]) total_reviews = DB_REVIEWS.aggregate([{ '$group': { '_id': '$game_name', 'count': { '$sum': 1 } } }]) grp_average = DB_GAME_LIST.aggregate([{ '$group': { '_id': '$name', 'avgAmount': { '$avg': { '$divide': ['$total_rating', '$total_reviews'] } } } }]) # updating game keys in order to show # correct averages, ratings and total ratings for rating in total_ratings: DB_GAME_LIST.update({'name': rating['_id']}, {'$set': { 'total_rating': rating['count'] }}) for review in total_reviews: DB_GAME_LIST.update({'name': review['_id']}, {'$set': { 'total_reviews': review['count'] }}) for grp in grp_average: if grp['avgAmount'] is None: continue average = round(grp['avgAmount'], 2) DB_GAME_LIST.update({'name': grp['_id']}, {'$set': { 'average': average }}) # sort by average, rating and total rating # in order to show results correctly on template best_avg = DB_GAME_LIST.find().sort('average', -1).limit(6) most_reviews = DB_GAME_LIST.find().sort('total_reviews', -1).limit(6) most_rating = DB_GAME_LIST.find().sort('total_rating', -1).limit(6) return render_template('top_games.html', best_avg=best_avg, most_reviews=most_reviews, most_rating=most_rating)
def your_reviews(): ''' rendering template for your reviews ''' # checks if there is a user in session or else redirects to fail login if 'username' in session: # initialization for all variables required for rendering results ureviews = DB_REVIEWS.find({ 'username': session['username'] }).skip(session['SKIP']).limit(session['LIMIT']) results = DB_REVIEWS.find({'username': session['username']}).count() pages = math.ceil( DB_REVIEWS.find({ 'username': session['username'] }).count() / session['LIMIT']) games = DB_GAME_LIST.find().sort('name', 1) # sets variables for search query and redirects back to your_reviews() if request.method == 'POST': game_json = request.form['game_select'] browse_rating = request.form['browse_rating'] if game_json != "": game_objects = game_json.split(',') game_name_slice_front = game_objects[1][10:] game_name = game_name_slice_front[:-1] game = DB_GAME_LIST.find_one({'name': game_name}) session['game_name'] = game['name'] session['game_picture'] = game['picture_link'] session['game_wiki_link'] = game['wiki_link'] session['game_description'] = game['game_description'] if browse_rating != "": session['browse_rating'] = int(request.form['browse_rating']) return redirect(url_for('your_reviews')) # render template with game and rating chosen in your_reviews form if session['game_name'] and session['browse_rating']: # initialization for all variables # required for rendering results ureviews = DB_REVIEWS.find({ 'username': session['username'], 'rating': session['browse_rating'], 'game_name': session['game_name'] }).skip(session['SKIP']).limit(session['LIMIT']) pages = math.ceil( DB_REVIEWS.find({ 'username': session['username'], 'rating': session['browse_rating'], 'game_name': session['game_name'] }).count() / session['LIMIT']) result = DB_REVIEWS.find({ 'username': session['username'], 'rating': session['browse_rating'], 'game_name': session['game_name'] }).count() return render_template('your_reviews.html', ureviews=ureviews, games=games, result=result, results=results, pages=pages, PAGE_NUMBER=session['PAGE_NUMBER']) # render template with game chosen in your_reviews form elif session['game_name']: # initialization for all variables # required for rendering results ureviews = DB_REVIEWS.find({ 'username': session['username'], 'game_name': session['game_name'] }).skip(session['SKIP']).limit(session['LIMIT']) pages = math.ceil( DB_REVIEWS.find({ 'username': session['username'], 'game_name': session['game_name'] }).count() / session['LIMIT']) result = DB_REVIEWS.find({ 'username': session['username'], 'game_name': session['game_name'] }).count() return render_template('your_reviews.html', ureviews=ureviews, games=games, result=result, results=results, pages=pages, PAGE_NUMBER=session['PAGE_NUMBER']) # render template with rating chosen in your_reviews form elif session['browse_rating']: # initialization for all variables # required for rendering results ureviews = DB_REVIEWS.find({ 'username': session['username'], 'rating': session['browse_rating'] }).skip(session['SKIP']).limit(session['LIMIT']) pages = math.ceil( DB_REVIEWS.find({ 'username': session['username'], 'rating': session['browse_rating'] }).count() / session['LIMIT']) result = DB_REVIEWS.find({ 'username': session['username'], 'rating': session['browse_rating'] }).count() return render_template('your_reviews.html', ureviews=ureviews, games=games, result=result, results=results, pages=pages, PAGE_NUMBER=session['PAGE_NUMBER']) # render template with nothing chosen in your_reviews form return render_template('your_reviews.html', ureviews=ureviews, games=games, results=results, pages=pages, PAGE_NUMBER=session['PAGE_NUMBER']) # render no_login template when no username in session return render_template('no_login.html')
def browse(): ''' rendering template for main search in database, shows information of all databases except game_suggestions ''' # initialization of required standard variables # required to show results and pagination without choosing choices review_ratings_sort = DB_REVIEWS.find().sort('rating', session['rating_sort']) review_users_sort = DB_REVIEWS.find().sort('username', session['user_sort']) review_games_sort = DB_REVIEWS.find().sort('game_name', session['game_sort']) review_latest_sort = DB_REVIEWS.find().sort('review_id', session['review_sort']) pages = math.ceil(DB_REVIEWS.find().count() / session['LIMIT']) all_reviews = DB_REVIEWS.find().skip(session['SKIP']).limit( session['LIMIT']) results = DB_REVIEWS.find().count() review_ratings = review_ratings_sort.skip(session['SKIP']).limit( session['LIMIT']) review_users = review_users_sort.skip(session['SKIP']).limit( session['LIMIT']) review_games = review_games_sort.skip(session['SKIP']).limit( session['LIMIT']) review_latest = review_latest_sort.skip(session['SKIP']).limit( session['LIMIT']) users = DB_USERS.find().sort('name', 1) games = DB_GAME_LIST.find().sort('name', 1) # sets variables when search query is made in browse form # redirects back to browse() in order to show results if request.method == 'POST': session['PAGE_NUMBER'] = 1 game_json = request.form['game_select'] browse_user = request.form['browse_user'] browse_rating = request.form['browse_rating'] if game_json != "": game_objects = game_json.split(',') game_name_slice_front = game_objects[1][10:] game_name = game_name_slice_front[:-1] game = DB_GAME_LIST.find_one({'name': game_name}) session['game_name'] = game['name'] session['game_picture'] = game['picture_link'] session['game_wiki_link'] = game['wiki_link'] session['game_description'] = game['game_description'] session['game_average'] = game['average'] session['game_json'] = game_json if browse_user != "": session['browse_user'] = request.form['browse_user'] if browse_rating != "": session['browse_rating'] = int(request.form['browse_rating']) return redirect(url_for('browse')) # render template with all choices in browse form chosen if session['browse_user'] and session['game_name'] and session[ 'browse_rating']: # initialization for all variables required for rendering results review_latest_sort = DB_REVIEWS.find({ 'username': session['browse_user'], 'game_name': session['game_name'], 'rating': session['browse_rating'] }).sort('review_id', session['review_sort']) review_latest = review_latest_sort.skip(session['SKIP']).limit( session['LIMIT']) review_not_sorted = DB_REVIEWS.find({ 'username': session['browse_user'], 'game_name': session['game_name'], 'rating': session['browse_rating'] }) pages = math.ceil( DB_REVIEWS.find({ 'username': session['browse_user'], 'game_name': session['game_name'], 'rating': session['browse_rating'] }).count() / session['LIMIT']) results = DB_REVIEWS.find({ 'username': session['browse_user'], 'game_name': session['game_name'], 'rating': session['browse_rating'] }).count() review_users = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) review_ratings = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) review_games = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) all_reviews = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) return render_template('browse.html', review_ratings=review_ratings, review_users=review_users, review_games=review_games, review_latest=review_latest, all_reviews=all_reviews, users=users, games=games, pages=pages, results=results, PAGE_NUMBER=session['PAGE_NUMBER']) # render template with user and rating chosen in browse form elif session['browse_user'] and session['browse_rating']: # initialization for all variables required for rendering results review_latest_sort = DB_REVIEWS.find({ 'username': session['browse_user'], 'rating': session['browse_rating'] }).sort('review_id', session['review_sort']) review_latest = review_latest_sort.skip(session['SKIP']).limit( session['LIMIT']) review_games_sort = DB_REVIEWS.find({ 'username': session['browse_user'], 'rating': session['browse_rating'] }).sort('game_name', session['game_sort']) review_games = review_games_sort.skip(session['SKIP']).limit( session['LIMIT']) review_not_sorted = DB_REVIEWS.find({ 'username': session['browse_user'], 'rating': session['browse_rating'] }) pages = math.ceil( DB_REVIEWS.find({ 'username': session['browse_user'], 'rating': session['browse_rating'] }).count() / session['LIMIT']) results = DB_REVIEWS.find({ 'username': session['browse_user'], 'rating': session['browse_rating'] }).count() review_users = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) review_games = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) all_reviews = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) return render_template('browse.html', review_ratings=review_ratings, review_users=review_users, review_games=review_games, review_latest=review_latest, all_reviews=all_reviews, users=users, games=games, pages=pages, results=results, PAGE_NUMBER=session['PAGE_NUMBER']) # render template with user and game chosen in browse form elif session['browse_user'] and session['game_name']: # initialization for all variables required for rendering results review_latest_sort = DB_REVIEWS.find({ 'username': session['browse_user'], 'game_name': session['game_name'] }).sort('review_id', session['review_sort']) review_latest = review_latest_sort.skip(session['SKIP']).limit( session['LIMIT']) review_ratings_sort = DB_REVIEWS.find({ 'username': session['browse_user'], 'game_name': session['game_name'] }).sort('rating', session['rating_sort']) review_ratings = review_ratings_sort.skip(session['SKIP']).limit( session['LIMIT']) review_not_sorted = DB_REVIEWS.find({ 'username': session['browse_user'], 'game_name': session['game_name'] }) pages = math.ceil( DB_REVIEWS.find({ 'username': session['browse_user'], 'game_name': session['game_name'] }).count() / session['LIMIT']) results = DB_REVIEWS.find({ 'username': session['browse_user'], 'game_name': session['game_name'] }).count() review_users = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) review_games = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) all_reviews = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) return render_template('browse.html', review_ratings=review_ratings, review_users=review_users, review_games=review_games, review_latest=review_latest, all_reviews=all_reviews, users=users, games=games, pages=pages, results=results, PAGE_NUMBER=session['PAGE_NUMBER']) # render template with rating and game chosen in browse form elif session['browse_rating'] and session['game_name']: # initialization for all variables required for rendering results review_latest_sort = DB_REVIEWS.find({ 'rating': session['browse_rating'], 'game_name': session['game_name'] }).sort('review_id', session['review_sort']) review_latest = review_latest_sort.skip(session['SKIP']).limit( session['LIMIT']) review_users_sort = DB_REVIEWS.find({ 'rating': session['browse_rating'], 'game_name': session['game_name'] }).sort('username', session['user_sort']) review_users = review_users_sort.skip(session['SKIP']).limit( session['LIMIT']) review_not_sorted = DB_REVIEWS.find({ 'rating': session['browse_rating'], 'game_name': session['game_name'] }) pages = math.ceil( DB_REVIEWS.find({ 'rating': session['browse_rating'], 'game_name': session['game_name'] }).count() / session['LIMIT']) results = DB_REVIEWS.find({ 'rating': session['browse_rating'], 'game_name': session['game_name'] }).count() review_ratings = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) review_games = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) all_reviews = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) return render_template('browse.html', review_ratings=review_ratings, review_users=review_users, review_games=review_games, review_latest=review_latest, all_reviews=all_reviews, users=users, games=games, pages=pages, results=results, PAGE_NUMBER=session['PAGE_NUMBER']) # render template with user chosen in browse form elif session['browse_user']: # initialization for all variables required for rendering results review_latest_sort = DB_REVIEWS.find({ 'username': session['browse_user'] }).sort('review_id', session['review_sort']) review_latest = review_latest_sort.skip(session['SKIP']).limit( session['LIMIT']) review_ratings_sort = DB_REVIEWS.find({ 'username': session['browse_user'] }).sort('rating', session['rating_sort']) review_ratings = review_ratings_sort.skip(session['SKIP']).limit( session['LIMIT']) review_games_sort = DB_REVIEWS.find({ 'username': session['browse_user'] }).sort('game_name', session['game_sort']) review_games = review_games_sort.skip(session['SKIP']).limit( session['LIMIT']) review_not_sorted = DB_REVIEWS.find( {'username': session['browse_user']}) pages = math.ceil( DB_REVIEWS.find({ 'username': session['browse_user'] }).count() / session['LIMIT']) results = DB_REVIEWS.find({'username': session['browse_user']}).count() review_users = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) all_reviews = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) return render_template('browse.html', review_ratings=review_ratings, review_users=review_users, review_games=review_games, review_latest=review_latest, all_reviews=all_reviews, users=users, games=games, pages=pages, results=results, PAGE_NUMBER=session['PAGE_NUMBER']) # render template with rating chosen in browse form elif session['browse_rating']: # initialization for all variables required for rendering results review_latest_sort = DB_REVIEWS.find({ 'rating': session['browse_rating'] }).sort('review_id', session['review_sort']) review_latest = review_latest_sort.skip(session['SKIP']).limit( session['LIMIT']) review_users_sort = DB_REVIEWS.find({ 'rating': session['browse_rating'] }).sort('username', session['user_sort']) review_users = review_users_sort.skip(session['SKIP']).limit( session['LIMIT']) review_games_sort = DB_REVIEWS.find({ 'rating': session['browse_rating'] }).sort('game_name', session['game_sort']) review_games = review_games_sort.skip(session['SKIP']).limit( session['LIMIT']) review_not_sorted = DB_REVIEWS.find( {'rating': session['browse_rating']}) pages = math.ceil( DB_REVIEWS.find({ 'rating': session['browse_rating'] }).count() / session['LIMIT']) results = DB_REVIEWS.find({'rating': session['browse_rating']}).count() review_ratings = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) all_reviews = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) return render_template('browse.html', review_ratings=review_ratings, review_users=review_users, review_games=review_games, review_latest=review_latest, all_reviews=all_reviews, users=users, games=games, pages=pages, results=results, PAGE_NUMBER=session['PAGE_NUMBER']) # render template with name chosen in browse form elif session['game_name']: # initialization for all variables required for rendering results review_latest_sort = DB_REVIEWS.find({ 'game_name': session['game_name'] }).sort('review_id', session['review_sort']) review_latest = review_latest_sort.skip(session['SKIP']).limit( session['LIMIT']) review_users_sort = DB_REVIEWS.find({ 'game_name': session['game_name'] }).sort('username', session['user_sort']) review_users = review_users_sort.skip(session['SKIP']).limit( session['LIMIT']) review_ratings_sort = DB_REVIEWS.find({ 'game_name': session['game_name'] }).sort('rating', session['rating_sort']) review_ratings = review_ratings_sort.skip(session['SKIP']).limit( session['LIMIT']) review_not_sorted = DB_REVIEWS.find( {'game_name': session['game_name']}) pages = math.ceil( DB_REVIEWS.find({ 'game_name': session['game_name'] }).count() / session['LIMIT']) results = DB_REVIEWS.find({'game_name': session['game_name']}).count() review_games = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) all_reviews = review_not_sorted.skip(session['SKIP']).limit( session['LIMIT']) return render_template('browse.html', review_ratings=review_ratings, review_users=review_users, review_games=review_games, review_latest=review_latest, all_reviews=all_reviews, users=users, games=games, pages=pages, results=results, PAGE_NUMBER=session['PAGE_NUMBER']) # render template with nothing chosen in browse form requires # initial initialization of variables in the start of function else: return render_template('browse.html', not_selected=True, review_ratings=review_ratings, review_users=review_users, review_games=review_games, review_latest=review_latest, all_reviews=all_reviews, results=results, users=users, games=games, pages=pages, PAGE_NUMBER=session['PAGE_NUMBER'])