| @@ -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") | ||
|
|
| @@ -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) | ||
|
|
| @@ -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) | ||
|
|
| @@ -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 %} | ||
|
|