diff --git a/__pycache__/footballHelper.cpython-39.pyc b/__pycache__/footballHelper.cpython-39.pyc index 403d23c4c0b7fcbda0023817875c0151022de3ac..45df375cd10c5d416652562e4d21759efd3148a7 100644 Binary files a/__pycache__/footballHelper.cpython-39.pyc and b/__pycache__/footballHelper.cpython-39.pyc differ diff --git a/main.py b/main.py index ece0aeff9d777306b48a34296f825879a785592e..e60ae170de8a52322b1e81157b6313ba8c5b1734 100644 --- a/main.py +++ b/main.py @@ -37,6 +37,12 @@ mysql.init_app(app) @app.route('/', methods=['GET', 'POST']) def index(): + try: + loggedIn = session['loggedin'] + isAdmin=session['isAdmin'] + except: + loggedIn = False + isAdmin = False # Cursor conn = mysql.connect() cursor = conn.cursor(pymysql.cursors.DictCursor) @@ -92,7 +98,7 @@ def index(): return redirect('/playerSearch') # Base render - return render_template('homepage.html', players=players) + return render_template('homepage.html', players=players, loggedIn=loggedIn, isAdmin=isAdmin) # db access for searching player @@ -134,7 +140,15 @@ def request_player(playerName): # All players page @app.route('/players', methods=['GET', 'POST']) def players(): - # all players list + try: + loggedIn = session['loggedin'] + isAdmin=session['isAdmin'] + except: + loggedIn = False + isAdmin = False + + + # all players list players = [] # Get all players from the session @@ -150,11 +164,17 @@ def players(): # Redirect user to the next page return redirect('/playerSearch') - return render_template('players.html', allPlayers=players) + return render_template('players.html', allPlayers=players,loggedIn=loggedIn, isAdmin=isAdmin) # Individual player page @app.route('/playerSearch') def playerSearch(): + try: + loggedIn = session['loggedin'] + isAdmin=session['isAdmin'] + except: + loggedIn = False + isAdmin = False # Get all data of the player from the session (set on home page) player = Player(session['playerData']) @@ -177,11 +197,17 @@ def playerSearch(): return render_template('playerSearch.html', player=player, playerPrediction=playerPrediction, transferValue=f"{player.value:.0f}k", sizes=json.dumps(sizes), data1=json.dumps(playerGame_results), - data2=json.dumps(game_averages), labels=json.dumps(labels), xlabels=json.dumps(x_labels)) + data2=json.dumps(game_averages), labels=json.dumps(labels), xlabels=json.dumps(x_labels),loggedIn=loggedIn, isAdmin=isAdmin) @app.route('/playerCompare', methods=('GET', 'POST')) def playerCompare(): + try: + loggedIn = session['loggedin'] + isAdmin=session['isAdmin'] + except: + loggedIn = False + isAdmin = False # Empty array for all players players = [] @@ -189,10 +215,16 @@ def playerCompare(): for player in session['allPlayerData']: players.append(Player(player)) - return render_template('playerCompare.html', players=players) + return render_template('playerCompare.html', players=players,loggedIn=loggedIn, isAdmin=isAdmin) @app.route('/playerComparison', methods=('GET', 'POST')) def playerComparison(): + try: + loggedIn = session['loggedin'] + isAdmin=session['isAdmin'] + except: + loggedIn = False + isAdmin = False # Checks if both players have been selected if request.method == 'POST' and 'playerOne' in request.form and 'playerTwo' in request.form: @@ -228,15 +260,17 @@ def playerComparison(): transferValueOne=f"{playerOne.value:.0f}k", transferValueTwo=f"{playerTwo.value:.0f}k", sizesOne=json.dumps(sizesOne), sizesTwo=json.dumps(sizesTwo), dataOne1=json.dumps(playerOneGame_results), dataTwo1=json.dumps(playerTwoGame_results),data2=json.dumps(game_averages), - labels=json.dumps(labels), xlabels=json.dumps(x_labels), zip=zip) + labels=json.dumps(labels), xlabels=json.dumps(x_labels), zip=zip, loggedIn=loggedIn, isAdmin=session['isAdmin']) @app.route('/login', methods=['GET', 'POST']) # Login Page def login(): try: loggedIn = session['loggedin'] + isAdmin=session['isAdmin'] except: loggedIn = False + isAdmin = False #connection to database conn = mysql.connect() cursor = conn.cursor(pymysql.cursors.DictCursor) @@ -282,40 +316,48 @@ def login(): msg = 'Incorrect username or password' else: msg ='Incorrect username or password' - return render_template('login.html', msg = msg, loggedIn=loggedIn) + return render_template('login.html', msg = msg, loggedIn=loggedIn, isAdmin=isAdmin) @app.route('/profile', methods=('GET', 'POST')) def profile(): + try: + loggedIn = session['loggedin'] + isAdmin=session['isAdmin'] + except: + loggedIn = False + isAdmin = False conn = mysql.connect() cursor = conn.cursor(pymysql.cursors.DictCursor) - print(session['loggedin']) # Booo-lay-ann Value if user is logged in or not - print(session['loggedInID']) # Users Username - print(session['Email']) # Users Email - print(session['isAdmin']) # Booo-lay-ann Value if user is admin - - players = [] - - cursor.execute("SELECT * FROM Favorites WHERE User = %s", session['loggedInID']) - totalFav = cursor.fetchall() - # Get all players from the session - #for player in session['allPlayerData']: - #players.append(Player(player)) - - for row in totalFav: - for player in session['allPlayerData']: - if player['PlayerName'] == row['Player']: - players.append(Player(player)) - # redirecting to specific player - if request.method == 'POST' and 'playerName' in request.form: - # Get the name from user's input - playerName = request.form['playerName'] - # request the player - session['playerData'] = request_player(playerName) - # Redirect user to the next page - return redirect('/playerSearch') - return render_template('loginSuccess.html', allPlayers=players) + #print(session['loggedin']) # Booo-lay-ann Value if user is logged in or not + #print(session['loggedInID']) # Users Username + #print(session['Email']) # Users Email + #print(session['isAdmin']) # Booo-lay-ann Value if user is admin + if loggedIn == True: + players = [] + + cursor.execute("SELECT * FROM Favorites WHERE User = %s", session['loggedInID']) + totalFav = cursor.fetchall() + # Get all players from the session + #for player in session['allPlayerData']: + #players.append(Player(player)) + + for row in totalFav: + for player in session['allPlayerData']: + if player['PlayerName'] == row['Player']: + players.append(Player(player)) + # redirecting to specific player + if request.method == 'POST' and 'playerName' in request.form: + # Get the name from user's input + playerName = request.form['playerName'] + # request the player + session['playerData'] = request_player(playerName) + # Redirect user to the next page + return redirect('/playerSearch') + return render_template('loginSuccess.html', allPlayers=players,loggedIn=loggedIn, isAdmin=isAdmin) + else: + return redirect(url_for('login')) @app.route('/logout') def logout(): @@ -399,49 +441,59 @@ def removeFave(x): @app.route('/admin', methods=('GET','POST')) def admin(): + try: + loggedIn = session['loggedin'] + isAdmin=session['isAdmin'] + except: + loggedIn = False + isAdmin = False + + if isAdmin == True: + # all players list + players = [] - # all players list - players = [] - - # Get all players from the session - for player in session['allPlayerData']: - players.append(Player(player)) + # Get all players from the session + for player in session['allPlayerData']: + players.append(Player(player)) - if request.method == 'POST': - player = request.form['playerName'] - operation = request.form['submit'] + if request.method == 'POST': + player = request.form['playerName'] + operation = request.form['submit'] - conn = mysql.connect() - cursor = conn.cursor(pymysql.cursors.DictCursor) + conn = mysql.connect() + cursor = conn.cursor(pymysql.cursors.DictCursor) - cursor.execute("SELECT * FROM Players WHERE PlayerName = %s;", (player)) - foundPlayer = cursor.fetchall() - foundPlayer = foundPlayer[0] + cursor.execute("SELECT * FROM Players WHERE PlayerName = %s;", (player)) + foundPlayer = cursor.fetchall() + foundPlayer = foundPlayer[0] - cursor.execute("SELECT * FROM Teams WHERE TeamName = %s;", (foundPlayer['currentTeam'])) - foundTeam = cursor.fetchall() - foundTeam = foundTeam[0] + cursor.execute("SELECT * FROM Teams WHERE TeamName = %s;", (foundPlayer['currentTeam'])) + foundTeam = cursor.fetchall() + foundTeam = foundTeam[0] - foundPlayer.update(foundTeam) + foundPlayer.update(foundTeam) - tempDOB = foundPlayer['DateOfBirth'] + tempDOB = foundPlayer['DateOfBirth'] - foundPlayer['teamLocation'] = foundPlayer['Location'] - foundPlayer['teamManager'] = foundPlayer['Manager'] - foundPlayer['DateOfBirth'] = foundPlayer['DateOfBirth'].strftime('%d/%m/%Y') - foundPlayer['startContract'] = foundPlayer['startContract'].strftime('%d/%m/%Y') + foundPlayer['teamLocation'] = foundPlayer['Location'] + foundPlayer['teamManager'] = foundPlayer['Manager'] + foundPlayer['DateOfBirth'] = foundPlayer['DateOfBirth'].strftime('%d/%m/%Y') + foundPlayer['startContract'] = foundPlayer['startContract'].strftime('%d/%m/%Y') - player = Player(foundPlayer) - player.dateOfBirth = tempDOB + player = Player(foundPlayer) + player.dateOfBirth = tempDOB - cursor.close() - conn.close() + cursor.close() + conn.close() - return render_template('adminFunction.html', player=player, operation=operation) - + return render_template('adminFunction.html', player=player, operation=operation,loggedIn=loggedIn, isAdmin=isAdmin) + - return render_template('admin.html', players=players) + return render_template('admin.html', players=players) + else: + print("User is not an admin") + return render_template('homepage.html') @app.route('/modifyPlayer', methods=('GET', 'POST')) diff --git a/static/styles/navbar.css b/static/styles/navbar.css index f377df9e02cc2a03abf8c64fc4c80884875f7a75..1397efa14c2a5b5f1f902261c6a834f7f0f3d0b9 100644 --- a/static/styles/navbar.css +++ b/static/styles/navbar.css @@ -24,3 +24,7 @@ img { width: 70%; height: 70%; } +.nav-masthead .active { + color: #fff; + border-bottom-color: #fff; + } diff --git a/templates/base.html b/templates/base.html index 2eae7594e4e310f13b855982afcebfe363502e1f..18360977316a7750cb44828f7592b6bc54d98dca 100644 --- a/templates/base.html +++ b/templates/base.html @@ -15,16 +15,30 @@ <!-- Navbar Implementation --> <nav class="navbar"> <div class="navbar-nav"> + <nav class="nav nav-masthead justify-content-center float-md-end"> <a class="nav-item nav-link px-2" href="/">Home</a> <a class="nav-item nav-link px-2" href="/players">Players</a> <a class="nav-item nav-link px-2" href="/playerCompare">Player Comparison</a></div> <div class="navbar-nav ms-auto"> - <a class="nav-item nav-link px-2" href="#">Admin</a> - <a class="nav-item nav-link px-2" href="/login">Login</a> - </div> - </nav> + <nav class="nav nav-masthead justify-content-center float-md-end"> + + + {%if loggedIn == False%} + <a class="nav-item nav-link px-2" href="/login">Login</a> + {%endif%} + {%if loggedIn == True%} + <a class="nav-item nav-link px-2" href="/profile">Profile</a> + {%endif%} + {%if isAdmin == True%} + <a class="nav-item nav-link px-2" href="/admin">Admin</a> + {%endif%} + {%if loggedIn == True%} + <a class="nav-item nav-link px-2" href="/logout">Logout</a> + {%endif%} + </div> + </nav> <!-- All other pages use the content block to put page content onto the template --> <div class="container"> {% block content %} @@ -35,4 +49,5 @@ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> </body> + </html> \ No newline at end of file diff --git a/templates/playerSearch.html b/templates/playerSearch.html index f96f1816d61f54abf769d11771126918206b99fe..48ae09fe3b365d90de4111c3eb719a5b5c19c3ed 100644 --- a/templates/playerSearch.html +++ b/templates/playerSearch.html @@ -18,10 +18,12 @@ </div> <p style="padding-top: 20%;">Date Of Birth/Age: {{player.dateOfBirth}} ({{player.age}})</p> <p>Gender: {{player.gender}}</p> + {%if loggedIn == True%} <form id="cancelForm" action="/profile" method="post"> <button type="submit" onclick="addNew('{{player.name}}')" class="btn btn-success" data-bs-toggle="...modal" data-bs-target=".#exampleModal">Add Favorites</button> </form> + {%endif%} </div> </div>