diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 828471c952254d342561363c1141fd96969c2c36..0000000000000000000000000000000000000000 Binary files a/.DS_Store and /dev/null differ diff --git a/__pycache__/footballHelper.cpython-311.pyc b/__pycache__/footballHelper.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..43b73a1fcafd86a25fd9e8ecc90b3b6e39db118b Binary files /dev/null and b/__pycache__/footballHelper.cpython-311.pyc differ diff --git a/__pycache__/footballHelper.cpython-39.pyc b/__pycache__/footballHelper.cpython-39.pyc index 4713f22d2cb5abd231b74a7843be7c4d7d55f163..403d23c4c0b7fcbda0023817875c0151022de3ac 100644 Binary files a/__pycache__/footballHelper.cpython-39.pyc and b/__pycache__/footballHelper.cpython-39.pyc differ diff --git a/footballHelper.py b/footballHelper.py index 7a0a67ca8e65820fad6c9e8f8ec5254d7e526c4c..bdbfe5a027b4fa0451ff1f82234a955f816388e3 100644 --- a/footballHelper.py +++ b/footballHelper.py @@ -27,8 +27,8 @@ class Player: self.startContract = player['startContract'] self.contractDuration = player['contractDuration'] startContract = datetime.strptime(str(self.startContract), '%d/%m/%Y').date() - endContract = startContract + relativedelta(years=int(self.contractDuration)) - weeksLeft = (endContract - date.today()).days // 7 + self.endContract = startContract + relativedelta(years=int(self.contractDuration)) + self.weeksLeft = (self.endContract - date.today()).days // 7 #games self.played = int(player['gamesPlayed']) @@ -42,10 +42,10 @@ class Player: self.matches.append(result) #win percentage - percentage = self.wins / self.played + self.percentage = self.wins / self.played #transfer value - self.value = int(self.salary) * weeksLeft * percentage + self.value = int(self.salary) * self.weeksLeft * self.percentage def predict(self) -> dict[str, str]: # declare variables diff --git a/main.py b/main.py index 1325e19d4b79e17d5e0e0e72e7b601f92ca44c23..ece0aeff9d777306b48a34296f825879a785592e 100644 --- a/main.py +++ b/main.py @@ -287,15 +287,35 @@ def login(): @app.route('/profile', methods=('GET', 'POST')) def profile(): - try: - if session['loggedin'] == False: - return redirect(url_for('profile')) - except: - 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 - return render_template('loginSuccess.html') + 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) @app.route('/logout') def logout(): @@ -343,9 +363,38 @@ def register(): else: msg = 'Username already exists' print("non") + return render_template('register.html', msg=msg, loggedIn=loggedIn) + +@app.route('/addNewFavorite/<string:x>', methods=['POST']) +def addNewFavorite(x): + x = json.loads(x) + conn = mysql.connect() + cursor = conn.cursor(pymysql.cursors.DictCursor) + # Sets the global varible to X which is the OrderID of the order the user would like to cancel + # Returns to the page the info has been received + cursor.execute("SELECT * FROM Favorites WHERE User = %s", session['loggedInID']) + totalFav = cursor.fetchall() + totalCount = 0 + for row in totalFav: + if(row['Player']==x): + totalCount =+1 + if (totalCount ==0): + cursor.execute("INSERT INTO `Favorites` (`FavID`, `User`, `Player`) VALUES ('%s', %s, %s);", (0, session['loggedInID'], x)) #auto increment + conn.commit() + else: + print("User has already added this as a fave") + return ('Info Received Sucsesfully') +@app.route('/removeFave/<string:x>', methods=['POST']) +def removeFave(x): + x = json.loads(x) + conn = mysql.connect() + cursor = conn.cursor(pymysql.cursors.DictCursor) + print("Trying to remove", x) + cursor.execute("DELETE FROM Favorites WHERE User = %s AND Player =%s", (session['loggedInID'], x)) + conn.commit() + conn.close() - return render_template('register.html', msg=msg, loggedIn=loggedIn) @app.route('/admin', methods=('GET','POST')) diff --git a/static/styles/navbar.css b/static/styles/navbar.css index db92c56c6f55df2d63ecb2ab1e30e29ab160a5a4..f377df9e02cc2a03abf8c64fc4c80884875f7a75 100644 --- a/static/styles/navbar.css +++ b/static/styles/navbar.css @@ -1,24 +1,18 @@ .buttonDown{ margin-top: 30px; } - .nav-masthead .nav-link { + .nav-navbar .nav-link { color: rgba(255, 255, 255, .5); border-bottom: .25rem solid transparent; } - .nav-masthead .nav-link:hover, - .nav-masthead .nav-link:focus { + .nav-navbar .nav-link:hover, + .nav-navbar .nav-link:focus { border-bottom-color: rgba(255, 255, 255, .25); } + .navbar-nav { + flex-direction:row !important; } - .nav-masthead .nav-link + .nav-link { - margin-left: 1rem; - } - - .nav-masthead .active { - color: #fff; - border-bottom-color: #fff; - } img { width: 100%; /* takes the 100 % width of its container (.box div)*/ diff --git a/templates/base.html b/templates/base.html index 67d599b7aaafd2315e0adf7a7420a7589c179ce1..2eae7594e4e310f13b855982afcebfe363502e1f 100644 --- a/templates/base.html +++ b/templates/base.html @@ -11,15 +11,19 @@ <link href="{{ url_for('static', filename='styles/homepage.css') }}" rel="stylesheet"> <link href="{{ url_for('static', filename='styles/navbar.css') }}" rel="stylesheet"> </head> - <!-- Navbar implementation--> <body class="text-bg-dark text-center"> - <nav class="p-3 navbar"> - <nav class="nav nav-masthead justify-content-center float-md-end"> - <a class="nav-link fw-bold py-1 px-0 current" aria-current="page" href="/">Home</a> - <a class="nav-link fw-bold py-1 px-0" href="/players">Players</a> - <a class="nav-link fw-bold py-1 px-0" href="/playerCompare">Player Comparison</a> - <a class="nav-link fw-bold py-1 px-0" href="/login">LOGIN</a> - </nav> + <!-- Navbar Implementation --> + <nav class="navbar"> + <div class="navbar-nav"> + <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> + <!-- All other pages use the content block to put page content onto the template --> <div class="container"> diff --git a/templates/loginSuccess.html b/templates/loginSuccess.html index db241439dc4f79d6ac421ec4b32c1af013538a8c..56077044c9cec2bb80da4c62a8814798cd58da5f 100644 --- a/templates/loginSuccess.html +++ b/templates/loginSuccess.html @@ -1,11 +1,109 @@ {% include "base.html" %} {% block content %} - <h1>THIS IS PLACEHOLDER PAGE UNTIL DATABASE LOGIN IS IMPLEMENTED</h1> - <br></br> - <h2>{{username}}</h2> - <h2>{{password}}</h2> +<h1>Player Favorites</h1> + <table class="table table-striped table-dark text-center"> + <thead class="thead"> + <tr> + <th scope="col">Player Name</th> + <th scope="col">Date of Birth</th> + <th scope="col">Gender</th> + <th scope="col">Club</th> + <th scope="col">Club Location</th> + <th scope="col">Club Manager</th> + <th scope="col">Date Signed</th> + <th scope="col">Salary</th> + </tr> + </thead> + <tbody> + {% for player in allPlayers %} + <tr> + <form method="POST"> + <td> + <input type="submit" class="submit" id="playerName" name="playerName" placeholder="" + value="{{player.name}}"> + </td> + <td> + <input type="hidden" class="submit" id="playerName" name="playerName" placeholder="" + value="{{player.name}}"> + <input type="submit" class="submit" id="dateOfBirth" name="dateOfBirth" placeholder="" + value="{{player.dateOfBirth}} ({{player.age}})"> + </td> + <td> + <input type="hidden" class="submit" id="playerName" name="playerName" placeholder="" + value="{{player.name}}"> + <input type="submit" class="submit" id="gender" name="gender" placeholder="" + value="{{player.gender}}"> + </td> + <td> + <input type="hidden" class="submit" id="playerName" name="playerName" placeholder="" + value="{{player.name}}"> + <input type="submit" class="submit" id="currentTeam" name="currentTeam" placeholder="" + value="{{player.club}}"> + + </td> + <td> + <input type="hidden" class="submit" id="playerName" name="playerName" placeholder="" + value="{{player.name}}"> + <input type="submit" class="submit" id="teamLocation" name="teamLocation" placeholder="" + value="{{player.location}}"> + + </td> + <td> + <input type="hidden" class="submit" id="playerName" name="playerName" placeholder="" + value="{{player.name}}"> + <input type="submit" class="submit" id="teamManager" name="teamManager" placeholder="" + value="{{player.manager}}"> + + </td> + <td> + <input type="hidden" class="submit" id="playerName" name="playerName" placeholder="" + value="{{player.name}}"> + <input type="submit" class="submit" id="dateSigned" name="dateSigned" placeholder="" + value="{{player.dateSigned}}"> + + </td> + <td> + <input type="hidden" class="submit" id="playerName" name="playerName" placeholder="" + value="{{player.name}}"> + <input type="submit" class="submit" id="salary" name="salary" placeholder="" + value="£{{player.salary}}k"> + + </td> + </form> + + <td> + <form id="cancelForm" action="/profile" method="post"> + <button type="submit" onclick="removeFave('{{player.name}}')" class="btn btn-danger" + data-bs-toggle="...modal" data-bs-target=".#exampleModal">Remove</button> + </form> + </td> + </tr> + {% endfor %} + + </tbody> + </table> + <p><br></p> + <script> + + + var x; + function removeFave(x) { + if (confirm("Are you sure you would like to remove This Player?") == true) { + const request = new XMLHttpRequest() + request.open('POST', `/removeFave/${JSON.stringify(x)}`) + request.onload = () => { + const flaskMessage = request.responseText + console.log(flaskMessage) + } + request.send() + } + } + + + + </script> {% endblock %} <p><br></p> {% include "footer.html" %} \ No newline at end of file diff --git a/templates/playerSearch.html b/templates/playerSearch.html index bf29d7aa66bf1bd7a0e55e1da76dff8f54df70a9..f96f1816d61f54abf769d11771126918206b99fe 100644 --- a/templates/playerSearch.html +++ b/templates/playerSearch.html @@ -18,7 +18,11 @@ </div> <p style="padding-top: 20%;">Date Of Birth/Age: {{player.dateOfBirth}} ({{player.age}})</p> <p>Gender: {{player.gender}}</p> - </div> + <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> + </div> </div> <div class="col-md-5"> @@ -125,7 +129,25 @@ </div> </div> </main> - + <script> + + + var x; + function addNew(x) { + if (confirm("Are you sure you would like to Add This Player?") == true) { + const request = new XMLHttpRequest() + request.open('POST', `/addNewFavorite/${JSON.stringify(x)}`) + request.onload = () => { + const flaskMessage = request.responseText + console.log(flaskMessage) + } + request.send() + } + } + + + + </script> {% endblock %} <p><br></p> {% include "footer.html" %} \ No newline at end of file