@@ -0,0 +1,311 @@
import json
from re import sub
from django.http import HttpResponse, HttpResponseRedirect
import datetime, time
from django.utils.timezone import utc
from django.core.cache import cache

from hockeypool.models import *
from match.models import *
from draft.models import *
import logging

logger = logging.getLogger(__name__)

def getPlayer(request, player_name):
s = Skater.objects.filter(name__icontains=player_name)[:5]
data = ""
if len(s) >= 1:
for i in s:
data = data + '<p><a onclick="replace_draft_text(\'%s\');" href="javascript:void(0)">%s</p>' % (i.name, i.name)
else:
data = "No results found"
return HttpResponse(data)

def getWaiverPlayer(request, player_name):
s = Skater.objects.filter(name__icontains=player_name)[:5]
data = ""
if len(s) >= 1:
for i in s:
data = data + "<p><a onclick=\"replace_waiver_text('%s', '%s');\" href=\"javascript:void(0)\">%s</p>" % (i.name.replace("'", "\\'"), i.nhl_id, i.name)
else:
data = "No results found"
return HttpResponse(data)

def getTradeOwn(request, player_name):
s = Skater.objects.filter(name__icontains=player_name)[:5]
data = ""
if len(s) >= 1:
for i in s:
data = data + '<p><a onclick="replace_trade_own_text(\'%s\');" href="javascript:void(0)">%s</p>' % (i.name, i.name)
else:
data = "No results found"
return HttpResponse(data)

def getTradeOther(request, player_name):
s = Skater.objects.filter(name__icontains=player_name)[:5]
data = ""
if len(s) >= 1:
for i in s:
data = data + '<p><a onclick="replace_trade_other_text(\'%s\');" href="javascript:void(0)">%s</p>' % (i.name, i.name)
else:
data = "No results found"
return HttpResponse(data)

def draftUpdate(request):
check_draft = Draft_Pick.objects.all().count()

if check_draft > 0:
null_picks = Draft_Pick.objects.filter(pick__isnull=True).order_by("id")
null_count = len(null_picks)
draft_picks = Draft_Pick.objects.select_related().all().order_by("id")
total_picks = len(draft_picks)

if null_count != 0:
now = datetime.datetime.utcnow().replace(tzinfo=utc)
if Draft_Swap.objects.filter(pick = draft_picks[total_picks - null_count]).exists():
draft_swap = Draft_Swap.objects.filter(pick = draft_picks[total_picks - null_count]).order_by("-id")[0]
before = draft_swap.time
else:
if total_picks - null_count - 1 >= 0:
before = draft_picks[total_picks - null_count - 1].time
else:
before = now

end = before + datetime.timedelta(minutes=3, seconds=0) - datetime.timedelta(minutes=0,seconds=before.second)
time_diff = end - now
time_left = int(time_diff.total_seconds())
state = "draft"
round_picks = []
round_order = []
top_picks = []
lw = []
c = []
rw = []
ld = []
rd = []
g = []

all_picks = Draft_Pick.objects.select_related().filter(pick__isnull=False).filter(player=request.user)

for x in all_picks:
if x.pick.position[0] == "L":
lw.append(x.pick.name + " (" + x.pick.position + ")")
elif x.pick.position[0] == "C":
c.append(x.pick.name + " (" + x.pick.position + ")")
elif x.pick.position[0] == "R":
rw.append(x.pick.name + " (" + x.pick.position + ")")
elif x.pick.position[0] == "D" and (len(ld) <= len(rd)):
ld.append(x.pick.name + " (" + x.pick.position + ")")
elif x.pick.position[0] == "D":
rd.append(x.pick.name + " (" + x.pick.position + ")")
elif x.pick.position[0] == "G":
g.append(x.pick.name + " (" + x.pick.position + ")")

for x in null_picks:
if x.pick == None:
next_pick = x
current_round = x.round.number
break

for x in draft_picks:
if x.round.number == current_round:
round_picks.append(x)

for x in round_picks:
if x.pick == None:
round_order.append(x.player.name)
else:
round_order.append("%s - %s" % (x.player.name, x.pick.name))
top_picks_array = cache.get('top_picks')
if top_picks_array is None:
top_picks_array = Skater.objects.exclude(id__in = Draft_Pick.objects.filter(pick__isnull=False).values_list("pick_id", flat=True)).exclude(position='G').order_by("-fantasy_points")[0:10]
cache.set('top_picks', top_picks_array, 10)

for x in top_picks_array:
top_picks.append([x.nhl_id, x.name, x.position])

if next_pick.player.id == request.user.id:
is_turn = 1
else:
is_turn = 0

response_data = {'state' : state, 'time_left' : time_left, 'current_round' : current_round, 'round_order' : round_order, 'current_pick' : next_pick.get_pick(), "top_picks" : top_picks, "is_turn" : is_turn, "lw" : lw, "c" : c, "rw" : rw, "ld" : ld, "rd" : rd, "g" : g }
else:
response_data = {'state' : 'finished'}
else:
ready_check = Draft_Start.objects.filter(status=0).count()
if ready_check > 0:
ready_status = Draft_Start.objects.all()
draft_ready = []
for x in ready_status:
temp_arr = [x.status, x.player.name]
draft_ready.append(temp_arr)
response_data = {"state" : "ready", "player_status" : draft_ready}
else:
response_data = {"state" : "ready_start"}
return HttpResponse(json.dumps(response_data), content_type="application/json")

def pick_player(request):
if request.method == "POST":
player = request.POST.get("player_name")
if Skater.objects.filter(name__exact = player).exists():
draft_picks = Draft_Pick.objects.all().order_by("id")
check = 1
for x in draft_picks:
if x.pick == None:
current_pick = x
break
else:
if x.pick.name == player:
check = 0
break
if check == 0:
data = {"errors" : 1, "message" : "Player already been drafted"}
else:
if x.player.id == request.user.id:
save_pick = Skater.objects.filter(name__exact = player)
current_pick.pick = save_pick[0]
current_pick.time = datetime.datetime.now()
current_pick.save()
data = {"errors" : 0, "message" : "Player successfully drafted."}
else:
data = {"errors" : 1, "message" : "Not your turn to pick"}
else:
data = {"errors" : 1, "message" : "Player does not exists"}
else:
data = {"errors" : 1, "message" : "Did not POST any/correct data"}
return HttpResponse(json.dumps(data), content_type="application/json")

def updateStatus(request):
if request.method == "POST":
ready_status = request.POST.get("status")
draft_start = Draft_Start.objects.filter(player = request.user)[0]
draft_start.status = ready_status
draft_start.save()
errors = 0
else:
errors = 1
data = {"errors" : errors}
return HttpResponse(json.dumps(data), content_type="application/json")

def activateRoster(request):
activations = json.loads(request.body)
logger.info("User: %s Attempting to activate: %s" % (request.user.id, activations))
team_check = 1
vals = []
error = 0
msg = []
p = Pool.objects.get(pk=1)
current_week = p.current_week
week = Week.objects.get(number = current_week.number + 1)
date = datetime.datetime.now()
formed_date = "%s-%s-%s" % (date.year, str(date.month).zfill(2), str(date.day).zfill(2))

logger.info("Activation process date for user: %s: %s" % (request.user.id, formed_date))
Activation.objects.filter(player__id = request.user.id).delete()
team_to_activate = []

for x in activations['ids']:
if x['id'].isdigit():
if Team.objects.filter(player__id = request.user.id, skater__nhl_id = x['id']).count() == 1:
t = Team.objects.get(player__id = request.user.id, skater__nhl_id = x['id'])
if x['position'] not in t.skater.position and x['position'] != 'B':
logger.info("Can not activate %s as position %s" % (t.skater, x['position']))
error = 1
else:
team_to_activate.append([t.skater, t.player, x['position']])
else:
error = 1
logger.info("Skater not found with id: %s" % x['id'])

if error != 1:
c = l = r = d = g = b = 0
for x in team_to_activate:
if x[2] == "C":
c = c + 1
elif x[2] == "L":
l = l + 1
elif x[2] == "R":
r = r + 1
elif x[2] == "D":
d = d + 1
elif x[2] == "G":
g = g + 1
elif x[2] == "B":
b = b + 1
if c < 3:
error = 2
msg.append("Too few centres")
if l < 3:
error = 2
msg.append("Too few Left Wing")
if r < 3:
error = 2
msg.append("Too few Right Wing")
if d < 6:
error = 2
msg.append("Too few defense")
if g < 1:
error = 2
msg.append("Too few goalies")
if c > 3:
error = 1
msg.append("Too many centres")
if l > 3:
error = 1
msg.append("Too many Left Wing")
if r > 3:
error = 1
msg.append("Too many Right Wing")
if d > 6:
error = 1
msg.append("Too many defense")
if g > 1:
error = 1
msg.append("Too many goaies")

if b > 1:
error = 1
msg.append("Too many benches")

if error != 1:
Activation.objects.filter(player_id=request.user.id).delete()
for t in team_to_activate:
if t[2] == 'B':
a = Activation.objects.create(skater=t[0], player=t[1], week=week, position=t[2])
a.save()
else:
a = Activation.objects.create(skater=t[0], player=t[1], week=week, position=t[2])
a.save()
logger.info("Skater: %s, position: %s" % (a.skater.name, a.position))

data = {"error" : error, "message" : msg}
return HttpResponse(json.dumps(data), content_type="application/json")

def tradePlayer(request):
own_player = request.POST.get("own_player")
other_player = request.POST.get("other_player")
if Team.objects.filter(skater__name = own_player).exists():
own_skater = Team.objects.filter(skater__name = own_player)[0]
if Team.objects.filter(skater__name = other_player).exists():
other_skater = Team.objects.filter(skater__name = other_player)[0]
logger.info("%s is attempting to trade %s for %s from another player" % (request.user, own_skater.skater.name, other_skater.skater.name))
date = datetime.datetime.utcnow()
if date.year == 2013 and date.month < 8:
weekdate = Week_Dates.objects.get(date = "2013-10-01")
else:
formed_date = "%s-%s-%s" % (date.year, str(date.month).zfill(2), str(date.day).zfill(2))
weekdate = Week_Dates.objects.get(date = formed_date)
Trade.objects.create(player1 = own_skater.player, player2 = other_skater.player, skater1 = own_skater.skater, skater2 = other_skater.skater, week = weekdate.week, state=0)
error = 0
msg = "Trade initiated. Waiting on other player to confirm/deny"
else:
error = 1
msg = "No GM owns the other player... cannot initiate trade"
else:
error = 1
msg = "You do not own the player you are trying to trade"
data = { "error" : error, "msg" : msg }
return HttpResponse(json.dumps(data), content_type="application/json")

This file was deleted.

5,343 bhp_data.sql

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Empty file.
@@ -0,0 +1,3 @@
from django.contrib import admin

# Register your models here.
@@ -0,0 +1,34 @@
from django.db import models
from django.db.models import Count
from hockeypool.models import *

class Draft_Round(models.Model):
number = models.IntegerField(max_length=2, default=1)

def __unicode__(self):
return self.number

class Draft_Pick(models.Model):
round = models.ForeignKey(Draft_Round)
player = models.ForeignKey(Player)
pick = models.ForeignKey(Skater, blank=True, null=True)
time = models.DateTimeField(blank=True, null=True)

def get_round(self):
return self.round.number

def get_pick(self):
if self.pick == None:
str = self.player.name
else:
str = "%s - %s" % (self.player.name, self.pick.name)
return str

class Draft_Start(models.Model):
player = models.ForeignKey(Player)
status = models.IntegerField(max_length=1, default=0)

class Draft_Swap(models.Model):
round = models.ForeignKey(Draft_Round)
time = models.DateTimeField(blank=True, null=True)
pick = models.ForeignKey(Draft_Pick)
@@ -0,0 +1,3 @@
from django.test import TestCase

# Create your tests here.
@@ -0,0 +1,8 @@
from django.conf.urls import patterns, include, url
from draft import views

urlpatterns = patterns('',
url(r'^$', views.index, name="index"),
url(r'^round/(?P<draft_round>\d+)/$', views.draft_round, name="draft_round"),
)

@@ -0,0 +1,110 @@
from django.http import HttpResponse, HttpResponseRedirect
from django.template import Context, loader
from django.shortcuts import render
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
from django.db.models import F
from datetime import datetime, timedelta
from django.utils.timezone import utc

from forum.models import *
from hockeypool.models import *
from draft.models import *

import logging
logger = logging.getLogger(__name__)

@login_required
def index(request):
draft_picks = Draft_Pick.objects.all().order_by("id")
if len(draft_picks) == 0:
player_status = None
status = Draft_Start.objects.all()
for x in status:
if request.user.id == x.player.id:
player_status = x.status
context = {'page_name' : "Draft", 'status' : 0, 'message' : "Not all players ready to start draft", 'statuses' : status, 'player_status' : player_status}
return render(request, 'draft/index.html', context)
else:
null_count = Draft_Pick.objects.filter(pick__isnull=True).count()
draft_picks = Draft_Pick.objects.all().order_by("id")
total_picks = len(draft_picks)
if null_count != 0:
now = datetime.utcnow().replace(tzinfo=utc)
if total_picks - null_count - 1 >= 0:
before = draft_picks[total_picks - null_count - 1].time
else:
before = now
end = before + timedelta(minutes=3, seconds=0) - timedelta(minutes=0,seconds=before.second)
time_diff = end - now
time_left = int(time_diff.total_seconds())
pick = draft_picks[0]

for x in draft_picks:
if x.pick == None:
pick = x
break

lw = []
c = []
rw = []
ld = []
rd = []
g = []

all_picks = Draft_Pick.objects.filter(pick__isnull=False)[:160]
for x in all_picks:
if x.player.id == request.user.id:
if x.pick != None:
if x.pick.position == "L":
lw.append(x.pick)
elif x.pick.position == "C":
c.append(x.pick)
elif x.pick.position == "R":
rw.append(x.pick)
elif x.pick.position == "D":
if len(ld) <= len(rd):
ld.append(x.pick)
else:
rd.append(x.pick)
elif x.pick.position == "G":
g.append(x.pick)

if pick.player.id == request.user.id:
is_turn = 1
else:
is_turn = 0

current_round = pick.round.id
order = []

for x in draft_picks:
if x.round.id == current_round:
order.append(x)

top_picks_array = Skater.objects.exclude(id__in = Draft_Pick.objects.filter(pick__isnull=False).values_list("pick_id", flat=True)).exclude(position='G').order_by("-fantasy_points")[0:10]
top_picks = []
for x in top_picks_array:
top_picks.append([x.nhl_id, x.name, x.position])

over = 0
context = {'page_name' : "Draft", "current_round" : pick.round.id, "is_turn" : is_turn, "round_order" : order, "top_picks" : top_picks, "time_left" : time_left, "lw" : lw, "c" : c, "rw" : rw, "ld" : ld, "rd" : rd, "g" : g, 'over' : over}
else:
over = 1
context = {'page_name' : "Draft", 'over' : over}
return render(request, 'draft/index.html', context)

@login_required
def draft_round(request, draft_round):
num_picks = Draft_Pick.objects.all().count()
if num_picks <= 0:
context = {'page_name' : "Draft Round", 'round' : draft_round, "errors" : 1, "message" : "The draft has not yet started... you cannot yet view this page"}
return render(request, 'hockeypool/draft_round.html', context)
else:
picks = Draft_Pick.objects.filter(round = draft_round)
pick_order = []
for x in picks:
pick_order.append(x.get_pick())
context = {'page_name' : "Draft Round", 'round' : draft_round, "errors" : 0, "order" : pick_order}
return render(request, 'draft/draft_round.html', context)

Empty file.
@@ -0,0 +1,3 @@
from django.contrib import admin

# Register your models here.
@@ -0,0 +1,56 @@
from django.db import models
from django.db.models import Count
from hockeypool.models import *

class Forum(models.Model):
title = models.CharField(max_length=64, default="Nothing to see here folks")
description = models.CharField(max_length=256, default="No, seriously, nothing")
type = models.IntegerField(max_length=1, default=1)

def __unicode__(self):
return self.title

def get_threads(self):
return(Thread.objects.filter(forum_id = self.id).count())

def get_posts(self):
return(Thread_Post.objects.filter(thread__forum_id = self.id).count())

def get_last_poster(self):
t = Thread_Post.objects.filter(thread__forum_id = self.id).latest('created')
return(t.creator)

def get_last_poster_time(self):
t = Thread_Post.objects.filter(thread__forum_id = self.id).latest('created')
return(t.created)

class Thread(models.Model):
forum = models.ForeignKey(Forum)
creator = models.ForeignKey(Player)
title = models.CharField(max_length=128, default="I'm stupid and forgot to make a title")
created = models.DateTimeField(auto_now_add=True)
views = models.IntegerField(max_length=10, default=0)

def __unicode__(self):
return unicode(self.creator) + " - " + self.title

def get_posts(self):
return (Thread_Post.objects.filter(thread = self.id).count())

def get_last_poster(self):
t = Thread_Post.objects.filter(thread = self.id).latest('created')
return(t.creator)

def get_last_poster_time(self):
t = Thread_Post.objects.filter(thread = self.id).latest('created')
return(t.created)

class Thread_Post(models.Model):
creator = models.ForeignKey(Player)
created = models.DateTimeField(auto_now_add=True)
thread = models.ForeignKey(Thread)
body = models.TextField(max_length=128000)

def __unicode__(self):
return u"%s - %s - %s" % (self.creator, self.thread, self.body)

@@ -0,0 +1,3 @@
from django.test import TestCase

# Create your tests here.
@@ -0,0 +1,11 @@
from django.conf.urls import patterns, include, url
from forum import views

urlpatterns = patterns('',
url(r'^$', views.index, name="index"),
url(r'^(?P<forum_id>\d+)/$', views.forum_detail, name="forum_detail"),
url(r'^newthread/(?P<forum_id>\d+)/$', views.forum_newthread, name="forum_newthread"),
url(r'^thread/(?P<thread_id>\d+)/$', views.forum_thread, name="forum_thread"),
url(r'thread/(?P<thread_id>\d+)/reply/$', views.forum_thread_reply, name="forum_thread_reply"),
)

@@ -0,0 +1,76 @@
from django.http import HttpResponse, HttpResponseRedirect
from django.template import Context, loader
from django.shortcuts import render
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
from django.db.models import F

from forum.models import *
from hockeypool.models import *

import logging
logger = logging.getLogger(__name__)

@login_required
def index(request):
forum = Forum.objects.all()
forum_general = []
forum_matches = []
forum_features = []
for f in forum:
if f.type == 1:
forum_general.append(f)
elif f.type == 2:
forum_matches.append(f)
elif f.type == 3:
forum_features.append(f)
context = {'page_name' : 'Forum', 'forum_general' : forum_general, 'forum_matches' : forum_matches, 'forum_features' : forum_features}
return render(request, 'forum/index.html', context)

@login_required
def forum_detail(request, forum_id):
forum = Forum.objects.filter(id = forum_id)
forum = forum[0]
threads = Thread.objects.filter(forum_id = forum_id)
context = {'page_name' : forum.title, 'threads' : threads, 'forum_id' : forum_id}
return render(request, 'forum/forum_detail.html', context)

@login_required
def forum_newthread(request, forum_id):
forum = Forum.objects.filter(id = forum_id)
forum = forum[0]
if request.method == "POST":
title = request.POST.get('newthread_subject')
comment = request.POST.get('newthread_post')
player = Player.objects.get(id=request.user.id)
thread = Thread.objects.create(forum_id = forum_id, creator = player, title = title)
post = Thread_Post.objects.create(creator_id = player.id, thread_id = thread.id, body = comment)
return HttpResponseRedirect("/forum/" + forum_id)
context = {'page_name' : forum.title, 'forum_id' : forum_id}
return render(request, 'forum/forum_newthread.html', context)

@login_required
def forum_thread(request, thread_id):
thread = Thread.objects.filter(id = thread_id)[0]
if request.method == "POST":
if (request.POST.get('newthread_post') != None):
comment = request.POST.get('newthread_post')
player = Player.objects.get(id=request.user.id)
post = Thread_Post.objects.create(creator_id = player.id, thread_id = thread.id, body = comment)
return HttpResponseRedirect("/forum/thread/" + thread_id)
Thread.objects.filter(id = thread_id).update(views = F("views") + 1)
posts = Thread_Post.objects.filter(thread = thread_id)[:20]
context = {'page_name' : thread.title, 'thread' : thread, 'posts' : posts, 'offset' : 0}
return render(request, 'forum/forum_thread.html', context)

@login_required
def forum_thread_reply(request, thread_id):
thread = Thread.objects.filter(id = thread_id)[0]
if request.method == "POST":
comment = request.POST.get('newthread_post')
player = Player.objects.get(id=request.user.id)
post = Thread_Post.objects.create(creator_id = player.id, thread_id = thread.id, body = comment)
return HttpResponseRedirect("/forum/thread/" + thread_id)
context = {'page_name' : thread.title + " - Reply"}
return render(request, "forum/forum_thread_reply.html", context)

740 game.py

This file was deleted.

This file was deleted.

Empty file.
@@ -0,0 +1,3 @@
from django.contrib import admin

# Register your models here.
@@ -0,0 +1,132 @@
from django.db import models
from django.contrib.auth.models import User

def get_theme(self):
p = Player.objects.get(id=self.id)
return p.theme

User.add_to_class("get_theme", get_theme)

class Hockey_Team(models.Model):
name = models.CharField(max_length=3)
full_name = models.CharField(max_length=24)

def __unicode__(self):
return self.name

class Week(models.Model):
number = models.IntegerField(max_length=2)

def __unicode__(self):
return "Week: %s" % self.number

class Pool(models.Model):
name = models.CharField(max_length="64", default="")
current_week = models.ForeignKey(Week)


class Skater(models.Model):
nhl_id = models.IntegerField(max_length=8)
name = models.CharField(max_length=64, default="")
hockey_team = models.ForeignKey(Hockey_Team, default=0)
position = models.CharField(max_length=8, default="")
games = models.IntegerField(max_length=8, default=0)
goals = models.IntegerField(max_length=8, default=0)
assists = models.IntegerField(max_length=8, default=0)
points = models.IntegerField(max_length=8, default=0)
plus_minus = models.IntegerField(max_length=4, default=0)
shg = models.IntegerField(max_length=8, default=0)
sha = models.IntegerField(max_length=8, default=0)
ppg = models.IntegerField(max_length=8, default=0)
ppa = models.IntegerField(max_length=8, default=0)
gwg = models.IntegerField(max_length=8, default=0)
psg = models.IntegerField(max_length=8, default=0)
pims = models.IntegerField(max_length=8, default=0)
hits = models.IntegerField(max_length=8, default=0)
shots = models.IntegerField(max_length=8, default=0)
blocks = models.IntegerField(max_length=8, default=0)
fights = models.IntegerField(max_length=8, default=0)
giveaways = models.IntegerField(max_length=8, default=0)
takeaways = models.IntegerField(max_length=8, default=0)
faceoff_win = models.IntegerField(max_length=8, default=0)
faceoff_loss = models.IntegerField(max_length=8, default=0)
shootout_made = models.IntegerField(max_length=8, default=0)
shootout_fail = models.IntegerField(max_length=8, default=0)
wins = models.IntegerField(max_length=8, default=0)
otloss = models.IntegerField(max_length=8, default=0)
shutouts = models.IntegerField(max_length=8, default=0)
penshot_save = models.IntegerField(max_length=8, default=0)
penshot_ga = models.IntegerField(max_length=8, default=0)
shootout_save = models.IntegerField(max_length=8, default=0)
shootout_ga = models.IntegerField(max_length=8, default=0)
saves = models.IntegerField(max_length=8, default=0)
goals_against = models.IntegerField(max_length=8, default=0)
time_on_ice = models.CharField(max_length=16, default="0:00")
fantasy_points = models.IntegerField(max_length=8, default=0)

def __unicode__(self):
return self.name

def get_owner(self):
t = Team.objects.filter(skater_id=self.id)

if len(t) == 1:
return t[0].player.name
else:
return "Free Agent"

class Player(models.Model):
name = models.CharField(max_length=32)
conference = models.CharField(max_length=4, default ="")
theme = models.CharField(max_length=64, default = "sandstone")

def __unicode__(self):
return self.name

class Team(models.Model):
skater = models.ForeignKey(Skater)
player = models.ForeignKey(Player)
week = models.IntegerField(max_length=2)
active = models.IntegerField(max_length=1)

class Point(models.Model):
skater = models.ForeignKey(Skater)
week = models.ForeignKey(Week)
fantasy_points = models.IntegerField(max_length=4)
goals = models.IntegerField(max_length=4)
assists = models.IntegerField(max_length=4)
shootout = models.IntegerField(max_length=4)
plus_minus = models.IntegerField(max_length=4)
offensive_special = models.IntegerField(max_length=4)
true_grit_special = models.IntegerField(max_length=4)
goalie = models.IntegerField(max_length=4)
date = models.DateField()

class Team_Point(models.Model):
point = models.ForeignKey(Point)
player = models.ForeignKey(Player)

class Game(models.Model):
date = models.DateField()
home_team = models.ForeignKey(Hockey_Team, related_name="home_team")
away_team = models.ForeignKey(Hockey_Team, related_name="away_team")
time = models.TimeField()
nhl_game_id = models.IntegerField(max_length=10)

class Injury(models.Model):
skater = models.ForeignKey(Skater)
date = models.DateField()
name = models.CharField(max_length=128)
status = models.CharField(max_length=128)
description = models.CharField(max_length=512)


class Post(models.Model):
title = models.CharField(max_length=256)
text = models.CharField(max_length=128000)

class Week_Dates(models.Model):
week = models.ForeignKey(Week)
date = models.DateField()


@@ -0,0 +1,122 @@
<!DOCTYPE xhtml>
{% load filters %}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="/scripts/scripts.js" type="text/javascript"></script>
<script src="/scripts/sortable.js" type="text/javascript"></script>
<title>Bitchin' Hockey Pool</title>
<link rel="stylesheet" type="text/css" href="/style.css" />
<link rel="stylesheet" type="text/css" href="/dropdown-menu.css" />
<link rel="stylesheet" type="text/css" href="/header.css" />
<link rel="stylesheet" type="text/css" href="/page.css" />
<script src="/scripts/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(window).scroll(function() {
if ($(this).scrollTop() > 50) {
$('nav').addClass('fix');
$(".primary").addClass('prim_fix');
} else {
$('nav').removeClass('fix');
$(".primary").removeClass('prim_fix');
}
});
</script>
</head>

<body>
<div id="page">
<div class="header">
<img src="/static/images/logo_small.jpg" />
<h1>Hockey Pool</h1>
</div>
<nav>
<div class="bar" id="bar">
<ul>
<li><a href="/">Home</a></li>
<li class="drop">
<a href="/match/">Matches</a>
<div class="dropdownContain">
<div class="dropOut">
<div class="triangle"></div>
<ul class="subMenu">
<li><a href="/match/activate/">Activate</a></li>
</ul>
</div>
</div>
</li>
<li class="drop">
<a href="/standings/">Standings</a>
<div class="dropdownContain">
<div class="dropOut">
<div class="triangle"></div>
<ul class="subMenu">
<li><a href="/standings/east/">East</a></li>
</ul>
<ul class="subMenu">
<li><a href="/standings/west/">West</a></li>
</ul>
<ul class="subMenu">
<li><a href="/rankings/">Power Rankings</a></li>
</ul>
</div>
</div>
</li>
{% if user.is_authenticated %}
<li class="drop">
<a href="/team/">Teams</a>
<div class="dropdownContain">
<div class="dropOut">
<div class="triangle"></div>
{% print_teams %}
</div>
</div>
</li>
{% else %}
<li><a href="/team/">Teams</a></li>
{% endif %}
<li class="drop">
<a href="/skater/">Players</a>
<div class="dropdownContain">
<div class="dropOut">
<div class="triangle"></div>
<ul class="subMenu">
<li><a href="/skater/freeagents/">Free Agents</a></li>
</ul>
<ul class="subMenu">
<li><a href="/skater/injury/">Injuries</a></li>
</ul>
<ul class="subMenu">
<li><a href="/trades/">Trades</a></li>
</ul>
<ul class="subMenu">
<li><a href="/waivers/">Waivers</a></li>
</ul>
<ul class="subMenu">
<li><a href="/draft/">Draft</a></li>
</ul>
</div>
</div>
</li>
<li><a href="/forum/">Forum</a></li>
{% if user.is_authenticated %}
<li><a href="/profile/">Profile</a></li>
{% else %}
<li><a href="/register/">Register</a></li>
{% endif %}
</ul>
</div>
</nav>
<div id="content" class="content">
<div class="primary">
{% autoescape off%}
<h1>{% block title %}{% endblock %}</h1>
{% block primary %}{% endblock %}
{% endautoescape %}
</div>
</div>
</div>
</body>



@@ -0,0 +1,166 @@
<!DOCTYPE html>
{% load filters %}
<html lang="en">
<head>
<meta charset="utf-8">
<title>Bitchin' Hockey Pool</title>
<meta content="width=device-width, initial-scale=1" name="viewport">
<link media="screen" href="/bootswatch/bootstrap_{{ user.get_theme|lower }}.min.css" rel="stylesheet">
<link media="screen" href="/bootswatch.min.css" rel="stylesheet">
<script src="/scripts/jquery.min.js"></script>
<script src="/scripts/bootstrap.min.js"></script>
<script src="/scripts/bootswatch.js"></script>
<script src="/scripts/sortable.js"></script>
<style>
.navbar {
margin-bottom: 0px;
}

.navbar .navbar-nav {
display: inline-block;
float: none;
vertical-align: top;
}

.navbar .navbar-collapse {
text-align: center;
}

@media (max-width: 767px){
.navbar {
min-height: 0px;
}
}
@media (min-width:768px){
.navbar-nav li {
margin-left: 0px;
margin-right: 0px;
}
}
@media (min-width:992px){
.navbar-nav li {
margin-left: 14px;
margin-right: 14px;
}
}
@media (min-width:1200px){
.navbar-nav li {
margin-left: 25px;
margin-right: 25px;
}
}

</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-12">
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<button class="navbar-toggle collapsed" data-target="#navbar-header-main" data-toggle="collapse" type="button">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="navbar navbar-default">
<div id="navbar-header-main" class="navbar-collapse collapse navbar-responsive-collapse">
<ul class="nav navbar-nav">
<li>
<a href="/">Home</a>
</li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Match<b class="caret"></b></a>
<ul class="dropdown-menu">
<li>
<a href="/match">Matches</a>
</li>

<li>
<a href="/match/activate">Activate</a>
</li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Standings<b class="caret"></b></a>
<ul class="dropdown-menu">
<li>
<a href="/standings">League</a>
</li>

<li>
<a href="/standings/east">East</a>
</li>
<li>
<a href="/standings/west">West</a>
</li>

<li>
<a href="/rankings">Power Rankings</a>
</li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Teams<b class="caret"></b></a>
<ul class="dropdown-menu">
{% get_teams %}
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Players<b class="caret"></b></a>
<ul class="dropdown-menu">
<li>
<a href="/skater/freeagents">Free Agents</a>
</li>
<li>
<a href="/skater/injury">Injuries</a>
</li>
<li>
<a href="/trades">Trades</a>
</li>
<li>
<a href="/waivers">Waivers</a>
</li>

<li>
<a href="/draft">Draft</a>
</li>

</ul>
</li>
<li>
<a href="/forum">Forum</a>
</li>
{% if not user.is_authenticated %}
<li>
<a href="/register">Register</a>
</li>
<li>
<a href="/accounts/login">Login</a>
</li>
{% else %}
<li>
<a href="/profile">Profile</a>
</li>
<li>
<a href="/logout">Logout</a>
</li>
{% endif %}
</ul>
</div>
</div>
</div>
</nav>
</div>
</div>
</div>
<div class="container">
{% block title %} {% endblock %}
</div>
{% block primary %} {% endblock %}
</body>
</html>

@@ -0,0 +1,17 @@
{% extends "bootstrap_base.html" %}

{% block primary %}
<div class="container"

{% if errors == 1 %}
<h1>Errors</h1>
<p>{{message}}</p>
{% else %}

<p>The following players were picked in week: {{round}}
<ul>{% for l in order %}<li>{{l}}</li>{% endfor %}</ul>
</p>
</div>
{% endif %}
{% endblock %}

@@ -0,0 +1,282 @@
{% extends "bootstrap_base.html" %}
{% block primary %}
<script type="text/javascript">
{% if status != 0 %}
setInterval(function(){reduceTimer()},1000);
{% endif %}
setInterval(function(){pageUpdate()},8000);

function reduceTimer() {
var element = document.getElementById("time_remaining_text");
if (typeof(element) != 'undefined' && element != null) {
var curr_text = element.innerHTML;
var curr_time = curr_text.match(/[-\d]+/);
var new_time = curr_time - 1;
document.getElementById("time_remaining_text").innerHTML = "Time remaining: " + new_time;
}
}

function pageUpdate() {
$.getJSON("/ajax/draftUpdate",function(data, textStatus, jqXHR){
if (data.state == "draft") {
var time_html = "Time remaining: " + data.time_left;
var current_round_html = "The current round is: <b>" + data.current_round + "</b>";
var round_order_html = '<ol>';
for(var i = 0; i < data.round_order.length; i++){
round_order_html += "<li>" + data.round_order[i] + "</li>";
}
round_order_html += "</ol>";
var top_player_html = "<ul>";
for(var i = 0; i < data.top_picks.length; i++){
top_player_html += '<li>' + data.top_picks[i][2] + ' - <a href="/skater/' + data.top_picks[i][0] + '/">' + data.top_picks[i][1] + '</a></li>';
}
top_player_html += "</ul>";

var left_wing_html = "";
var right_wing_html = "";
var center_html = "";
var ldefense_html = "";
var rdefense_html = "";
var goalie_html = "";

for (i = 0; i < data.lw.length; i++){
left_wing_html += "<li>" + data.lw[i] + "</li>";
}

for (i = 0; i < data.rw.length; i++){
right_wing_html += "<li>" + data.rw[i] + "</li>";
}

for (i = 0; i < data.c.length; i++){
center_html += "<li>" + data.c[i] + "</li>";
}

for (i = 0; i < data.ld.length; i++){
ldefense_html += "<li>" + data.ld[i] + "</li>";
}

for (i = 0; i < data.rd.length; i++){
rdefense_html += "<li>" + data.rd[i] + "</li>";
}

for (i = 0; i < data.g.length; i++){
goalie_html += "<li>" + data.g[i] + "</li>";
}

$(".left_wing ol").html(left_wing_html);
$(".right_wing ol").html(right_wing_html);
$(".center ol").html(center_html);
$(".l_defense ol").html(ldefense_html);
$(".r_defense ol").html(rdefense_html);
$(".goalie ol").html(goalie_html);

if (data.is_turn == 1) {
if(document.getElementById("draft_pick")) {
var str = document.getElementById("draft_pick").value;
} else {
var str = "";
}
var element = document.getElementById("draft_pick");
if (typeof(element) != 'undefined' && element != null) {
$("#time_remaining").html('<h1 id="time_remaining_text">' + time_html + '/h1>');
} else {
$("#draft_player_select").html('<div id="time_remaining"><h1 id="time_remaining_text">' + time_html + '</h1></div><form><input type="text" value="' + str + '" name="draft_pick" id="draft_pick" onkeyup="draft_player()" /></form><button id="pick_player" onclick="select_player()">Pick!</button><div id="draft_suggestions"></div>');
draft_player();
}
} else{
$("#draft_player_select").html('<p>It is not currently your turn</p><div id="time_remaining"><h1 id="time_remaining_text">Time remaining: 60</h1></div>');
$("#draft_suggestions").html("");
}
$("#time_remaining_text").html(time_html);
$("#current_round_p").html(current_round_html);
$("#draft_round_order").html(round_order_html);
$("#top_player_list").html(top_player_html);
} else if (data.state == "ready") {
var status_html = '<tr><th>Team</th><th>Status</th></tr>';
for (var i = 0; i < data.player_status.length; i++) {
status_html += "<tr><td>" + data.player_status[i][1] + "</td>";
if (data.player_status[i][0] == 0) {
status_html += "<td>Not Ready</td>";
} else {
status_html += "<td>Ready</td>";
}
status_html += "</tr>";
}
$("#ready_status").html(status_html);
sortables_init();
} else if (data.state == "finished") {
$(".draft_container").html("<h1>Draft is over</h1>");
$("#draft_player_select").html("");
} else {
$("#player_draft_status").html("<h1>Draft will commence in less than 60 seconds.</h1>");
$("#ready_form").html(" ");
$("#player_status_text").html("<p>All players ready. Draft will commence shortly</p>");
var date = new Date();
var time = date.getTime();
time = (time/1000) % 60;
time = 65 - time;
setTimeout("location.reload(true);", time*1000);
}
})};

function update_status() {
var e = document.getElementById("draft_ready");
var draft_status = e.options[e.selectedIndex].value;
if (draft_status == "not_ready") {
var draft_var = 0;
} else {
var draft_var = 1;
}
var postData = {"status" : draft_var, "csrfmiddlewaretoken": '{{ csrf_token }}'}
$.post("/ajax/updateStatus", postData, function(data, status) {
if (data.errors == 1) {
alert("Fail:\n\n Did not successfully update status. Contact the comissioner");
}
});
}

function select_player() {
var player_name = document.getElementById("draft_pick").value;
var postData = {"player_name" : player_name, "csrfmiddlewaretoken": '{{ csrf_token }}'};
$.post("/ajax/pickPlayer", postData, function(data, status){
if (data.errors == 1) {
alert("Fail:\n\n" + data.message);
} else {
alert("Success:\n\n" + data.message);
}
});
}
</script>
<div class="container">

{% if errors == 1 %}
<p>Errors:<p>
<ul>{{message}}</ul>
{% else %}
{% if status == 0 %}
<div id="player_status_text">
<p>Not all players ready to start draft. The following is the current status of all players:</p>
</div>
<div id="player_draft_status" class="player_draft_status">
<table id="ready_status" class="sortable">
<tr>
<th>Team</th>
<th>Status</th>
</tr>
<tr>
{% for x in statuses %}
<tr>
<td>{{x.player}}</td><td>{% if x.status == 0 %}Not Ready{% else %}Ready{% endif %}</td>
</tr>
{%endfor%}
</table>
</div>
<div id="ready_form">
<p>Are you ready? Indicate so by using the following form: <br />

Ready:<select name="draft_ready" id ="draft_ready">
<option value="not_ready" {% if player_status == 0 %}selected="selected" {%endif%}>Not Ready</option>
<option value="ready" {% if player_status == 1 %}selected="selected" {%endif%}>Ready</option>
</select>
<button id="draft_ready_button" onclick="update_status()">Submit!</button>
</div>

{% else %}

<p style="text-align:center">Draft round:
<a href="/draft/round/1/">1</a> -
<a href="/draft/round/2/">2</a> -
<a href="/draft/round/3/">3</a> -
<a href="/draft/round/4/">4</a> -
<a href="/draft/round/5/">5</a> -
<a href="/draft/round/6/">6</a> -
<a href="/draft/round/7/">7</a> -
<a href="/draft/round/8/">8</a> -
<a href="/draft/round/9/">9</a> -
<a href="/draft/round/10/">10</a> -
<a href="/draft/round/11/">11</a> -
<a href="/draft/round/12/">12</a> -
<a href="/draft/round/13/">13</a> -
<a href="/draft/round/14/">14</a> -
<a href="/draft/round/15/">15</a> -
<a href="/draft/round/16/">16</a> -
<a href="/draft/round/17/">17</a> -
<a href="/draft/round/18/">18</a> -
<a href="/draft/round/19/">19</a>
</p>
{% if over == 0 %}
<div class="draft_container">
<div class="draft_info_container">
<p id="current_round_p">The current round is: <b>{{current_round}}</b></p><br />
<p>The current order for this round is:</p>
<div id="draft_round_order">
<ol>
{%for x in round_order %}<li>{{x.player}}{% if x.pick != None %} - {{x.pick}}{% endif %}</li>{%endfor%}
</ol>
</div>
</div>
<div class="current_team">
<p><b>Current Team:</b></p>
<div class="forwards">
<div class="left_wing">
<p><b>LW</b></p>
<ol>{% for x in lw %}<li>{{x}}</li>{% endfor %}</ol>
</div>
<div class="center">
<p><b>C</b></p>
<ol>{% for x in c %}<li>{{x}}</li>{% endfor %}</ol>
</div>
<div class="right_wing">
<p><b>RW</b></p>
<ol>{% for x in rw %}<li>{{x}}</li>{% endfor %}</ol>
</div>
</div>
<div class="defense">
<div class="l_defense">
<p><b>D</b></p>
<ol>{% for x in ld %}<li>{{x}}</li>{% endfor %}</ol>
</div>
<div class="r_defense">
<p><b>D</b></p>
<ol>{% for x in rd %}<li>{{x}}</li>{% endfor %}</ol>
</div>
</div>
<div class="goalie">
<p><b>G</b></p>
<ol>{% for x in g %}<li>{{x}}</li>{% endfor %}</ol>
</div>
</div>
<div class="top_player_container">
<p style="text-align:center"><b>Undrafted Players:</b></p>
<div id="top_player_list">
<ul>{% for x,y,z in top_picks %}<li>{{z}} - <a href="/skater/{{x}}/">{{y}}</a></li>{% endfor %}</ul>
</div>
</div>
</div>
<div class="draft_player_select" id="draft_player_select">
{% if is_turn == 1 %}
<div id="time_remaining">
<h1 id="time_remaining_text">Time remaining: {{time_left}}</h1>
</div>
<form>
<input type="text" value="" name="draft_pick" id="draft_pick" onkeyup="draft_player()" />
</form>
<button id="pick_player" onclick="select_player()">Pick!</button>
<div id="draft_suggestions"></div>
</div>
{% else %}
<p>It is not currently your turn</p>
<div id="time_remaining">
<h1 id="time_remaining_text">Time remaining: {{time_left}}</h1>
</div>
{%endif%}
{% else %}
<h1>Draft is over</h1>
{% endif %}
</div>

{% endif %}
{% endif %}
</div>
{% endblock %}

@@ -0,0 +1,45 @@
{% extends "bootstrap_base.html" %}

{% block primary %}
<div class="container">
<link rel="stylesheet" type="text/css" href="/thread.css" />
<div id="thread_div" class="thread_div">
<div id="above_thread_list" class="above_thread_list">
<a class="new_thread_button" href="/forum/newthread/{{forum_id}}/">New Thread</a>
<div class="thread_page_nav">
<p>Threads 1 - 20 of 28934</p>
</div>
</div>
<div id="thread_list" class="thread_list">
<div class="thread_list_head">
<span class="thread_info">Title/Author</span>
<span class="thread_stats">Posts/Views</span>
<span class="thread_last_post">Last Post By</span>
</div>
<ol id="threads" class="threads">

{% for t in threads %}
<li id="threads_bit" class="threads_bit">
<div class="thread_info">
<div class="inner">
<h3 class="thread_title"><a href="/forum/thread/{{t.id}}/">{{t.title}}</a></h3>
<div class="thread_meta">
<span class="thread_description">Created by: {{t.creator}} at {{t.created}}</span>
</div>
</div>
</div>
<ul class="thread_stats">
<li>Posts: {{t.get_posts}}</li>
<li>Views: {{t.views}}</li>
</ul>
<dl class="thread_last_post">
<dd>{{t.get_last_poster}}</dd>
<dd>{{t.get_last_poster_time}}</dd>
</dl>
</li>
{% endfor %}
</ol>
</div>
</div>
{% endblock %}

@@ -0,0 +1,24 @@
{% extends "bootstrap_base.html" %}

{% block primary %}
<div class="container">
<link rel="stylesheet" type="text/css" href="/newthread.css" />
<div id="newpost" class="newpost">
<form method="POST" action="">{% csrf_token %}
<div id="above_post_message" class="above_post_message">
<h2 class="blockhead">Your Message</h1>
</div>
<div id="title_block" class="title_block">
<label class="full">Title:</label>
<input id="newthread_subject" name="newthread_subject" class="newthread_subject" type="text"></input>
</div>
<div id="newthread_block" class="newthread_block">
<label class="full">Post:</label>
<textarea id="newthread_post" class="newthread_post" name="newthread_post"></textarea>
</div>
<input type="submit" value="Submit"></input>
</form>
</div>
</div>
{% endblock %}

@@ -0,0 +1,45 @@
{% extends "bootstrap_base.html" %}

{% block primary %}
<div class="container">
<link rel="stylesheet" type="text/css" href="/thread.css" />
<div id="thread_div" class="thread_div">
<div id="above_thread_list" class="above_thread_list">
<a class="new_thread_button" href="/forum/newthread/{{forum_id}}">New Thread</a>
<div class="thread_page_nav">
<p>Threads 1 - 20 of 28934</p>
</div>
</div>
<div id="thread_list" class="thread_list">
<div class="thread_list_head">
<span class="thread_info">Title/Author</span>
<span class="thread_stats">Thread/Posts</span>
<span class="thread_last_post">Last Post By</span>
</div>
<ol id="threads" class="threads">

{% for t in thread %}
<li id="threads_bit" class="threads_bit">
<div class="thread_info">
<div class="inner">
<h3 class="thread_title"><a href="/forum/thread/{{t.id}}/">{{t.title}}</a></h3>
<div class="thread_meta">
<span class="thread_description">{{f.post_date}}</span>
</div>
</div>
</div>
<ul class="thread_stats">
<li>{{f.posts}}</li>
<li>{{f.views}}</li>
</ul>
<dl class="thread_last_post">
<dd>{{f.last_poster_id}}</dd>
<dd>{{f.last_post_time}}</dd>
</dl>
</li>
{% endfor %}
</ol>
</div>
</div>
{% endblock %}

@@ -0,0 +1,55 @@
{% extends "bootstrap_base.html" %}

{% block primary %}
<div class="container">
<link rel="stylesheet" type="text/css" href="/posts.css" />
<div id="posts_div" class="posts_div">
<div id="above_posts_list" class="above_posts_list">
<a class="new_reply_button" href="/forum/thread/{{thread.id}}/reply/">Reply</a>
<div class="posts_page_nav">
<p>Posts 1 - 20 of 28934</p>
</div>
</div>
<div id="posts_list" class="posts_list">
<ol id="posts" class="posts">
{% for p in posts %}
<li id="post_list" class="post_list">
<div class="posthead">
<span class="postdate">{{p.created}}</span>
<span class="number">#{{forloop.counter | add:offset}}</span>
</div>
<div class="post_body">
<ol id="post_list_body" class="post_list_body">
<li id="post_user_info" class="post_user_info">
<div id="user_info" class="user_info">
<span class="poster_username">{{p.creator}}</span>
<span class="poster_forum_info">Avatar/post info here later</span>
</div>
<ul class="post_text">
{{p.body}}
</ul>
</li>
</ol>
</div>
</li>
{% endfor %}
</ol>
</div>
</div>
<link rel="stylesheet" type="text/css" href="/newpost.css" />
<div id="newpost" class="newpost">
<form method="POST" action="">{% csrf_token %}
<div id="above_post_message" class="above_post_message">
<h2 class="blockhead">Your Message</h1>
</div>
<div id="newpost_block" class="newpost_block">
<label class="full">Post:</label>
<textarea id="newthread_post" class="newthread_post" name="newthread_post"></textarea>
</div>
<input type="submit" value="Submit"></input>
</form>
</div>
</div>
{% endblock %}


@@ -0,0 +1,20 @@
{% extends "bootstrap_base.html" %}

{% block primary %}
<div class="container">
<link rel="stylesheet" type="text/css" href="/newthread.css" />
<div id="newpost" class="newpost">
<form method="POST" action="">{% csrf_token %}
<div id="above_post_message" class="above_post_message">
<h2 class="blockhead">Your Message</h1>
</div>
<div id="newthread_block" class="newthread_block">
<label class="full">Post:</label>
<textarea id="newthread_post" class="newthread_post" name="newthread_post"></textarea>
</div>
<input type="submit" value="Submit"></input>
</form>
</div>
</div>
{% endblock %}

@@ -0,0 +1,106 @@
{% extends "bootstrap_base.html" %}

{% block primary %}
<div class="container">
<h1 class="forum_heading">General Forums</h1>
<link rel="stylesheet" type="text/css" href="/forum.css" />
<div id="forum_div" class="forum_div">
<div id="forum_list" class="forum_list">
<div class="forum_list_head">
<span class="forum_info">Title/Author</span>
<span class="forum_stats">Thread/Posts</span>
<span class="forum_last_post">Last Post By</span>
</div>
<ol id="forums" class="forums">

{% for f in forum_general %}
<li id="forums_bit" class="forums_bit">
<div class="forum_info">
<div class="inner">
<h3 class="forum_title"><a href="/forum/{{f.id}}/">{{f.title}}</a></h3>
<div class="forum_meta">
<span class="forum_description">{{f.description}}</span>
</div>
</div>
</div>
<ul class="forum_stats">
<li>Thread: {{f.get_threads}}</li>
<li>Posts: {{f.get_posts}}</li>
</ul>
<dl class="forum_last_post">
<dd>Last Poster: {{f.get_last_poster}}</dd>
<dd>Time: {{f.get_last_poster_time}}</dd>
</dl>
</li>
{% endfor %}
</ol>
</div>
</div>
<h1 class="forum_heading">Matchups</h1>
<div id="forum_div" class="forum_div">
<div id="forum_list" class="forum_list">
<div class="forum_list_head">
<span class="forum_info">Title/Author</span>
<span class="forum_stats">Thread/Posts</span>
<span class="forum_last_post">Last Post By</span>
</div>
<ol id="forums" class="forums">

{% for f in forum_matches %}
<li id="forums_bit" class="forums_bit">
<div class="forum_info">
<div class="inner">
<h3 class="forum_title"><a href="/forum/{{f.id}}/">{{f.title}}</a></h3>
<div class="forum_meta">
<span class="forum_description">{{f.description}}</span>
</div>
</div>
</div>
<ul class="forum_stats">
<li>Thread: {{f.get_threads}}</li>
<li>Posts: {{f.get_posts}}</li>
</ul>
<dl class="forum_last_post">
<dd>Last Poster: {{f.get_last_poster}}</dd>
<dd>Last Post Time: {{f.get_last_poster_time}}</dd>
</dl>
</li>
{% endfor %}
</ol>
</div>
</div>
<h1 class="forum_heading">Suggestions</h1>
<div id="forum_list" class="forum_list">
<div class="forum_list_head">
<span class="forum_info">Title/Author</span>
<span class="forum_stats">Thread/Posts</span>
<span class="forum_last_post">Last Post By</span>
</div>
<ol id="forums" class="forums">

{% for f in forum_features %}
<li id="forums_bit" class="forums_bit">
<div class="forum_info">
<div class="inner">
<h3 class="forum_title"><a href="/forum/{{f.id}}/">{{f.title}}</a></h3>
<div class="forum_meta">
<span class="forum_description">{{f.description}}</span>
</div>
</div>
</div>
<ul class="forum_stats">
<li>Thread: {{f.get_threads}}</li>
<li>Posts: {{f.get_posts}}</li>
</ul>
<dl class="forum_last_post">
<dd>Last Poster: {{f.get_last_poster}}</dd>
<dd>Last Post Time: {{f.get_last_poster_time}}</dd>
</dl>
</li>
{% endfor %}
</ol>
</div>
</div>
</div>
{% endblock %}