view web/scoring/high.cgi @ 35:6592cdd1fceb

Add a high score CGI script. /scoring/high.cgi shows a score list, with a configurable length, offset, and game list.
author John "Elwin" Edwards
date Fri, 03 Jan 2014 11:11:07 -0500
parents
children 1d8dc3ed22cf
line wrap: on
line source

#!/usr/bin/python3

import sys
import cgi
import rlgall

checkstr = '{0}:<input type="checkbox" name="g" value="{1}" checked="checked"> '
uncheckstr = '{0}:<input type="checkbox" name="g" value="{1}"> '

cgidata = cgi.FieldStorage()

formgames = cgidata.getlist("g")
if "all" in formgames:
  games = rlgall.gamelist
else:
  games = []
  for g in rlgall.gamelist:
    if g.uname in formgames:
      games.append(g)
  if not games:
    games = rlgall.gamelist

formstart = cgidata.getfirst("s")
if not formstart:
  start = 0
else:
  try:
    start = int(formstart)
  except ValueError:
    start = 0
if start < 0:
  start = 0

deflimit = (12 // len(games)) * 5
formlimit = cgidata.getfirst("l")
if not formlimit:
  limit = deflimit
else:
  try:
    limit = int(formlimit)
  except ValueError:
    limit = deflimit
if limit <= 0:
  limit = deflimit


sys.stdout.write("Content-Type: text/html; charset=utf-8\r\n\r\n")
sys.stdout.write(rlgall.phead.format("High Scores"))
sys.stdout.write(rlgall.ptop)
sys.stdout.write(rlgall.navscore.format("High Scores"))
if len(games) == 1:
  if start == 0:
    intitle = "Top {0} scores for {1}".format(limit, games[0].name)
  else:
    intitle = "Scores {0} - {1} for {2}".format(start + 1, start + limit, 
                games[0].name)
  sys.stdout.write(rlgall.pti.format(intitle))
  highlist = games[0].getHigh(limit, start)
  rlgall.printTable(highlist, games[0].rankfields, sys.stdout)
else:
  if start == 0:
    intitle = "Top {0} scores".format(limit)
  else:
    intitle = "Scores {0} - {1}".format(start + 1, start + limit)
  sys.stdout.write(rlgall.pti.format(intitle))
  for g in games:
    sys.stdout.write(rlgall.secthead.format(g.name))
    highlist = g.getHigh(limit, start)
    rlgall.printTable(highlist, g.rankfields, sys.stdout)
sys.stdout.write('<form action="/scoring/high.cgi" method="get">\n')
sys.stdout.write('<div>Number of scores: ')
sys.stdout.write('<input type="text" name="l" value="{0}">'.format(limit))
sys.stdout.write(' Skip the first: ')
sys.stdout.write('<input type="text" name="s" value="{0}">'.format(start))
sys.stdout.write('</div><div>')
for game in rlgall.gamelist:
  if game in games:
    sys.stdout.write(checkstr.format(game.name, game.uname))
  else:
    sys.stdout.write(uncheckstr.format(game.name, game.uname))
sys.stdout.write('</div><div><input type="submit" value="Get Scores">')
sys.stdout.write('</div></form>')
sys.stdout.write(rlgall.pend)
exit()