view web/scoring/high.cgi @ 55:e421ea2519ec

dgamelaunch: define user/group by name instead of UID/GID. The user and group might not be created with the UID and GID expected, so it is better to use names. They can be changed to numeric values after installation.
author John "Elwin" Edwards
date Sun, 11 May 2014 08:32:31 -0700
parents 6592cdd1fceb
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()