mirror of
https://github.com/FAUSheppy/open-web-leaderboard.git
synced 2025-12-05 22:51:36 +01:00
fix search with multiple results
This commit is contained in:
24
database.py
24
database.py
@@ -96,17 +96,21 @@ class DatabaseConnection:
|
||||
playerNamePrepared = "%{}%".format(playerName.replace("%", "%%"))
|
||||
cursor.execute("SELECT * FROM players WHERE name == ?", (playerName,))
|
||||
row = cursor.fetchone()
|
||||
|
||||
# if there is exactly one hit for the exact name just return that #
|
||||
if row and not cursor.fetchone():
|
||||
p = player.PlayerInLeaderboard(row)
|
||||
p.rank = self.getPlayerRank(p)
|
||||
return [p]
|
||||
|
||||
playerRows = []
|
||||
cursor.execute("SELECT * FROM players WHERE name LIKE ?", (playerNamePrepared,))
|
||||
for pr in cursor:
|
||||
p = player.PlayerInLeaderboard(pr)
|
||||
p.rank = self.getPlayerRank(p)
|
||||
playerRows += [p]
|
||||
|
||||
playerRow = None
|
||||
if not playerRow:
|
||||
cursor.execute("SELECT * FROM players WHERE name LIKE ?", (playerNamePrepared,))
|
||||
playerRow = cursor.fetchone()
|
||||
if not playerRow:
|
||||
return None
|
||||
|
||||
playerInLeaderboard = player.PlayerInLeaderboard(playerRow)
|
||||
playerInLeaderboard.rank = self.getPlayerRank(playerInLeaderboard)
|
||||
return playerInLeaderboard
|
||||
return playerRows
|
||||
|
||||
def getPlayerRank(self, player):
|
||||
'''Calculate player rank - a player rank may change rapidly and
|
||||
|
||||
55
server.py
55
server.py
@@ -180,37 +180,42 @@ def leaderboard():
|
||||
cannotFindPlayer = ""
|
||||
searchName = ""
|
||||
|
||||
playerList = None
|
||||
doNotComputeRank = True
|
||||
if playerName:
|
||||
playerInLeaderboard = db.findPlayerByName(playerName)
|
||||
if not playerInLeaderboard:
|
||||
playersInLeaderboard = db.findPlayerByName(playerName)
|
||||
if not playersInLeaderboard:
|
||||
cannotFindPlayer = flask.Markup("<div class=noPlayerFound>No player of that name</div>")
|
||||
start = 0
|
||||
else:
|
||||
rank = playerInLeaderboard.rank
|
||||
if(playerInLeaderboard.games < 10):
|
||||
return flask.redirect("/player?id={}".format(playerInLeaderboard.playerId))
|
||||
searchName = playerInLeaderboard.name
|
||||
start = rank - (rank % SEGMENT)
|
||||
if len(playersInLeaderboard) == 1:
|
||||
rank = playersInLeaderboard[0].rank
|
||||
if(playersInLeaderboard[0].games < 10):
|
||||
return flask.redirect("/player?id={}".format(playersInLeaderboard[0].playerId))
|
||||
searchName = playersInLeaderboard[0].name
|
||||
start = rank - (rank % SEGMENT)
|
||||
else:
|
||||
playerList = playersInLeaderboard
|
||||
for p in playerList:
|
||||
if p.rank == -1:
|
||||
p.rankStr = "N/A"
|
||||
else:
|
||||
p.rankStr = str(p.rank)
|
||||
doNotComputeRank = False
|
||||
|
||||
end = start + SEGMENT
|
||||
|
||||
|
||||
# compute range #
|
||||
maxEntry = db.getTotalPlayers()
|
||||
reachedEnd = False
|
||||
if end > maxEntry:
|
||||
start = maxEntry - ( maxEntry % SEGMENT ) - 1
|
||||
end = maxEntry - 1
|
||||
reachedEnd = True
|
||||
maxEntry = 0
|
||||
if not playerList:
|
||||
# compute range #
|
||||
end = start + SEGMENT
|
||||
maxEntry = db.getTotalPlayers()
|
||||
reachedEnd = False
|
||||
if end > maxEntry:
|
||||
start = maxEntry - ( maxEntry % SEGMENT ) - 1
|
||||
end = maxEntry - 1
|
||||
reachedEnd = True
|
||||
|
||||
playerList = db.getRankRange(start, end)
|
||||
|
||||
columContent = flask.Markup(flask.render_template("playerLine.html", \
|
||||
playerRank="Rank", \
|
||||
playerName="Player", \
|
||||
playerRating="Rating", \
|
||||
playerGames="Games", \
|
||||
playerWinratio="Winratio"))
|
||||
playerList = db.getRankRange(start, end)
|
||||
|
||||
endOfBoardIndicator = ""
|
||||
if reachedEnd:
|
||||
@@ -222,7 +227,7 @@ def leaderboard():
|
||||
start = max(start, 0)
|
||||
|
||||
finalResponse = flask.render_template("base.html", playerList=playerList, \
|
||||
columNames=columContent, \
|
||||
doNotComputeRank=doNotComputeRank, \
|
||||
start=start, \
|
||||
endOfBoardIndicator=endOfBoardIndicator, \
|
||||
findPlayer=cannotFindPlayer, \
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
{% for p in playerList %}
|
||||
{% set count = loop.index + start %}
|
||||
<tr {% if searchName and searchName == p.name %} id="targetPlayer" {% endif %}>
|
||||
<td>{{ count }}</td>
|
||||
<td>{% if doNotComputeRank %} {{ count }} {% else %} {{ p.rankStr }} {% endif %}</td>
|
||||
<td><a href="/player?id={{ p.playerId }}">{{ p.name }}</a></td>
|
||||
<td>{{ p.games }}</td>
|
||||
<td>{{ p.rating }}</td>
|
||||
|
||||
Reference in New Issue
Block a user