summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/matches_controller.rb11
-rw-r--r--app/controllers/tournaments_controller.rb25
-rw-r--r--app/models/tournament_stage.rb4
-rw-r--r--app/views/matches/index.html.erb2
-rw-r--r--app/views/matches/show.html.erb4
-rw-r--r--lib/scheduling/elimination.rb14
6 files changed, 30 insertions, 30 deletions
diff --git a/app/controllers/matches_controller.rb b/app/controllers/matches_controller.rb
index 59f376a..b50aca5 100644
--- a/app/controllers/matches_controller.rb
+++ b/app/controllers/matches_controller.rb
@@ -1,6 +1,4 @@
class MatchesController < ApplicationController
- before_action :set_tournament, only: [:index, :update]
-
require 'httparty'
require 'json'
require 'delayed_job'
@@ -118,7 +116,7 @@ class MatchesController < ApplicationController
# GET /tournaments/1/matches/1
# GET /tournaments/1/matches/1.json
def show
- if Tournament.find_by_id(@match.tournament_id).game_id == 1
+ if @match.tournament_stage.tournament.game_id == 1
file_blue = "blue.yaml"
file_purple = "purple.yaml"
@blue2 = YAML.load_file(file_blue)
@@ -235,11 +233,8 @@ class MatchesController < ApplicationController
private
# Use callbacks to share common setup or constraints between actions.
def set_match
- set_tournament
- @match = @tournament.matches.find(params[:id])
- end
- def set_tournament
- @tournament = Tournament.find(params[:tournament_id])
+ @match = Match.find(params[:id])
+ @tournament = @match.tournament_stage.tournament
end
# Never trust parameters from the scary internet, only allow the white list through.
diff --git a/app/controllers/tournaments_controller.rb b/app/controllers/tournaments_controller.rb
index 4b0e1af..03dc5b8 100644
--- a/app/controllers/tournaments_controller.rb
+++ b/app/controllers/tournaments_controller.rb
@@ -95,17 +95,24 @@ class TournamentsController < ApplicationController
end
when "start"
check_permission(:edit, @tournament)
- @tournament.status = 1
- ok =
- @tournament.save &&
- @tournament.tournament_stages.create(scheduling: "elimination") &&
- @tournament.tournament_stages.first.create_matches
respond_to do |format|
- if ok
- format.html { redirect_to @tournament, notice: 'You have started this tournament.' }
- format.json { head :no_content }
+ if @tournament.status == 0
+ @tournament.status = 1
+ success = true
+ ActiveRecord::Base.transaction do
+ success &= @tournament.save &&
+ success &= @tournament.tournament_stages.create(scheduling: "elimination")
+ success &= @tournament.tournament_stages.first.create_matches
+ end
+ if success
+ format.html { redirect_to @tournament, notice: 'You have started this tournament.' }
+ format.json { head :no_content }
+ else
+ format.html { redirect_to @tournament, notice: "You don't have permission to start this tournament." }
+ format.json { render json: "Permission denied", status: :forbidden }
+ end
else
- format.html { redirect_to @tournament, notice: "You don't have permission to start this tournament." }
+ format.html { redirect_to @tournament, notice: "This tournament is not in a state that it can be started." }
format.json { render json: "Permission denied", status: :forbidden }
end
end
diff --git a/app/models/tournament_stage.rb b/app/models/tournament_stage.rb
index 9fa6dcd..762f6a7 100644
--- a/app/models/tournament_stage.rb
+++ b/app/models/tournament_stage.rb
@@ -17,9 +17,9 @@ class TournamentStage < ActiveRecord::Base
@scheduling.create_matches
end
- def to_svg
+ def to_svg(current_user)
set_scheduling
- return @scheduling.graph
+ return @scheduling.graph(current_user)
end
private
diff --git a/app/views/matches/index.html.erb b/app/views/matches/index.html.erb
index 058477a..fda8582 100644
--- a/app/views/matches/index.html.erb
+++ b/app/views/matches/index.html.erb
@@ -37,5 +37,5 @@
<br>
<% @tournament.stages_ordered.keys.sort.each do |stage_key| %>
- <div class="graph"><%= raw @tournament.stages_ordered[stage_key].to_svg %></div>
+ <div class="graph"><%= raw @tournament.stages_ordered[stage_key].to_svg(current_user) %></div>
<% end %>
diff --git a/app/views/matches/show.html.erb b/app/views/matches/show.html.erb
index e7fe791..a1d82a3 100644
--- a/app/views/matches/show.html.erb
+++ b/app/views/matches/show.html.erb
@@ -7,10 +7,6 @@
<%= @match.tournament_stage %>
</p>
-<p>
- <strong>Name:</strong>
- <%= @match.name %>
-</p>
<!--
Match Status 0 => Created, waiting to start
Match Status 1 => Match is running, waiting to finish
diff --git a/lib/scheduling/elimination.rb b/lib/scheduling/elimination.rb
index e718d54..5ce71ca 100644
--- a/lib/scheduling/elimination.rb
+++ b/lib/scheduling/elimination.rb
@@ -1,5 +1,7 @@
+
module Scheduling
class Elimination
+ include Rails.application.routes.url_helpers
def initialize(tournament_stage)
@tournament_stage = tournament_stage
@@ -21,9 +23,9 @@ module Scheduling
match_num = num_matches-1
team_num = 0
# for each grouping of min_players_per_team
- self.tournament.players.each_slice(min_players_per_team) do |team_members|
+ self.tournament.players.each_slice(self.tournament.min_players_per_team) do |team_members|
# if the match is full, move to the next match, otherwise move to the next team
- if (team_num == min_teams_per_match)
+ if (team_num == self.tournament.min_teams_per_match)
match_num -= 1
team_num = 0
else
@@ -42,7 +44,7 @@ module Scheduling
end
end
- def graph
+ def graph(current_user)
matches = @tournament_stage.matches_ordered
# depth of SVG tree
depth = Math.log2(matches.count).floor+1;
@@ -71,7 +73,7 @@ STRING
rx = 50/(depth+1) + 100/(depth+1)*(depth-(Math.log2(i).floor+1))
ry = ( 100/(2**(Math.log2(i).floor)+1) + rh * 1.1 * (2**Math.log2(i).ceil-i))
- str += "\t<a id=\"svg-match-#{i}\" xlink:href=\"# {match_path(matches[i])}\">\n"
+ str += "\t<a id=\"svg-match-#{i}\" xlink:href=\"#{match_path(matches[i])}\"><g>\n"
str += "\t\t<rect height=\"#{rh}%\" width=\"#{rw}%\" x=\"#{rx}%\" y=\"#{ry}%\" fill=\"url(#gradMatch)\" rx=\"5px\" stroke-width=\"2\""
case matches[i].status
when 0
@@ -93,7 +95,7 @@ STRING
color = matches[i].teams.first and matches[i].teams.first.users.include?(current_user) ? "#BCED91" : "white"
str += "\t\t<rect width=\"#{rw-5}%\" height=\"#{rh/4}%\" x=\"#{rx + 2.5}%\" y=\"#{ry + rh/6}%\" fill=\"#{color}\" />\n"
if matches[i].teams.first
- str += '\t\t<text x="#{rx + rw/4}%" y="#{ry + rh/3}%" font-size="#{rh}">Team #{matches[i].teams.first.id}</text>\n'
+ str += "\t\t<text x=\"#{rx + rw/4}%\" y=\"#{ry + rh/3}%\" font-size=\"#{rh}\">Team #{matches[i].teams.first.id}</text>\n"
end
str += "\t\t<text x=\"#{rx + 1.3*rw/3}%\" y=\"#{ry + 5.2*rh/9}%\" font-size=\"#{rh}\"> VS </text>\n"
@@ -113,7 +115,7 @@ STRING
lastrh = rh
lastrw = rw
end
- str += "</a>\n"
+ str += "</g></a>\n"
end
str += '</svg>'