diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/matches_controller.rb | 8 | ||||
-rw-r--r-- | app/controllers/teams_controller.rb | 2 | ||||
-rw-r--r-- | app/controllers/tournaments_controller.rb | 9 | ||||
-rw-r--r-- | app/models/team.rb | 1 | ||||
-rw-r--r-- | app/models/tournament.rb | 39 | ||||
-rw-r--r-- | app/models/tournament_stage.rb | 26 | ||||
-rw-r--r-- | app/views/matches/_form.html.erb | 6 | ||||
-rw-r--r-- | app/views/matches/index.html.erb | 82 | ||||
-rw-r--r-- | app/views/matches/index.json.jbuilder | 2 | ||||
-rw-r--r-- | app/views/matches/show.json.jbuilder | 2 | ||||
-rw-r--r-- | app/views/teams/_form.html.erb | 4 | ||||
-rw-r--r-- | app/views/teams/index.html.erb | 2 | ||||
-rw-r--r-- | app/views/teams/index.json.jbuilder | 2 | ||||
-rw-r--r-- | app/views/teams/show.html.erb | 5 | ||||
-rw-r--r-- | app/views/teams/show.json.jbuilder | 2 |
15 files changed, 47 insertions, 145 deletions
diff --git a/app/controllers/matches_controller.rb b/app/controllers/matches_controller.rb index d7a8b99..59f376a 100644 --- a/app/controllers/matches_controller.rb +++ b/app/controllers/matches_controller.rb @@ -8,12 +8,6 @@ class MatchesController < ApplicationController # GET /tournaments/1/matches # GET /tournaments/1/matches.json def index - @matches = @tournament.matches - # depth of SVG tree - @depth = Math.log2(@matches.count).floor+1; - # height of SVG - @height = 200 * 2**Math.log2(@matches.count).floor + 100; - @h_sector = 2**(@depth-1)+1 end # For compatability with the router assumptions made by ApplicationController#check_permission @@ -250,7 +244,7 @@ class MatchesController < ApplicationController # Never trust parameters from the scary internet, only allow the white list through. def match_params - params.require(:match).permit(:status, :tournament_stage_id, :name, :winner_id, :remote_id, :submitted_peer_evaluations) + params.require(:match).permit(:status, :tournament_stage_id, :winner_id, :remote_id, :submitted_peer_evaluations) end # Turn of check_edit, since our #update is flexible diff --git a/app/controllers/teams_controller.rb b/app/controllers/teams_controller.rb index 57ae256..6abc74c 100644 --- a/app/controllers/teams_controller.rb +++ b/app/controllers/teams_controller.rb @@ -68,7 +68,7 @@ class TeamsController < ApplicationController # Never trust parameters from the scary internet, only allow the white list through. def team_params - params.require(:team).permit(:match_id) + params[:team] end def is_owner?(object) diff --git a/app/controllers/tournaments_controller.rb b/app/controllers/tournaments_controller.rb index b6f911f..4b0e1af 100644 --- a/app/controllers/tournaments_controller.rb +++ b/app/controllers/tournaments_controller.rb @@ -96,10 +96,13 @@ class TournamentsController < ApplicationController when "start" check_permission(:edit, @tournament) @tournament.status = 1 - @tournament.save + ok = + @tournament.save && + @tournament.tournament_stages.create(scheduling: "elimination") && + @tournament.tournament_stages.first.create_matches respond_to do |format| - if @tournament.setup - format.html { redirect_to @tournament, notice: 'You have joined this tournament.' } + if ok + 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." } diff --git a/app/models/team.rb b/app/models/team.rb index 7aae7c2..77136e7 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -1,5 +1,4 @@ class Team < ActiveRecord::Base - belongs_to :match has_and_belongs_to_many :matches has_and_belongs_to_many :users end diff --git a/app/models/tournament.rb b/app/models/tournament.rb index 73c8d93..e21ccb1 100644 --- a/app/models/tournament.rb +++ b/app/models/tournament.rb @@ -1,15 +1,15 @@ class Tournament < ActiveRecord::Base belongs_to :game - has_many :matches + has_many :tournament_stages has_many :settings_raw, class_name: "TournamentSetting" has_and_belongs_to_many :players, class_name: "User", association_foreign_key: "player_id", join_table: "players_tournaments" has_and_belongs_to_many :hosts, class_name: "User", association_foreign_key: "host_id", join_table: "hosts_tournaments" - def matches_ordered + def stages_ordered h = {} i = 1 - matches.order(:id).each do |m| - h[i] = m + self.tournament_stages.order(:id).each do |s| + h[i] = s i += 1 end return h @@ -26,14 +26,6 @@ class Tournament < ActiveRecord::Base end class Settings - @vartypes = { - :true_false => 0, - :integer => 1, - :string => 2, - :select => 3, - :range => 4 - } - def initialize(tournament) @tournament = tournament end @@ -94,27 +86,4 @@ class Tournament < ActiveRecord::Base players.delete(user) end end - - def setup - num_teams = (self.players.count/self.min_players_per_team).floor - num_matches = num_teams - 1 - for i in 1..num_matches - self.matches.create(name: "Match #{i}", status: 0, submitted_peer_evaluations: 0) - end - match_num = num_matches-1 - team_num = 0 - #for each grouping of min_players_per_team - players.each_slice(min_players_per_team) do |players| - - #if the match is full, move to the next match, otherwise move to the next team - if (team_num == min_teams_per_match) - match_num -= 1 - team_num = 0 - else - team_num += 1 - end - #create a new team in the current match - self.matches[match_num].teams.push(Team.create(users: players)) - end - end end diff --git a/app/models/tournament_stage.rb b/app/models/tournament_stage.rb index 205c8cc..a24d7b9 100644 --- a/app/models/tournament_stage.rb +++ b/app/models/tournament_stage.rb @@ -1,3 +1,29 @@ class TournamentStage < ActiveRecord::Base belongs_to :tournament + has_many :matches + + def matches_ordered + h = {} + i = 1 + self.matches.order(:id).each do |m| + h[i] = m + i += 1 + end + return h + end + + def create_matches + set_scheduling + @scheduling.create_matches + end + + def to_svg + set_scheduling + return @scheduling.graph(self) + end + + private + def set_scheduling + @scheduling ||= "Scheduling::#{self.scheduling}".constantize.new(self) + end end diff --git a/app/views/matches/_form.html.erb b/app/views/matches/_form.html.erb index 88fe733..9d402b3 100644 --- a/app/views/matches/_form.html.erb +++ b/app/views/matches/_form.html.erb @@ -9,16 +9,12 @@ <%= f.text_field :tournament_stage_id %> </div> <div class="field"> - <%= f.label :name %><br> - <%= f.text_field :name %> - </div> - <div class="field"> <%= f.label :winner_id %><br> <%= f.text_field :winner_id %> </div> <div class="field"> <%= f.label :remote_id %><br> - <%= f.text_field :remote_id %> + <%= f.text_area :remote_id %> </div> <div class="field"> <%= f.label :submitted_peer_evaluations %><br> diff --git a/app/views/matches/index.html.erb b/app/views/matches/index.html.erb index 03427d8..abca42b 100644 --- a/app/views/matches/index.html.erb +++ b/app/views/matches/index.html.erb @@ -13,7 +13,7 @@ <tbody class="table-hover"> <% @tournament.matches.order(:id).reverse.each do |match| %><tr> - <td><%= match.name %></td> + <td><%= "Match #{match.id}" %></td> <td><%= match.status %></td> <td><%= (match.winner.nil? ? "-" : "Team #{match.winner.id}") %></td> <td><%= link_to "Show", tournament_match_path(@tournament, match) %> @@ -32,80 +32,6 @@ <br> -<div id="match-tree"> - <SVG version="1.1" - baseProfile="full" - width="100%" height="<%= @height = [@height, 500].max %>" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink"> - <% lastrx = 0 - lastry = 0 - lastrh = 0 - lastrw = 0 %> - <defs> - <radialGradient id="gradMatch" cx="50%" cy="50%" r="80%" fx="80%" fy="80%"> - <stop offset="0%" style="stop-color:#ffd281; - stop-opacity:0" /> - <stop offset="100%" style="stop-color:#ccc;stop-opacity:1" /> - </radialGradient> - </defs> - <script type="text/ecmascript"><![CDATA[ - function redirect(i){ - window.location.replace("<%= request.original_url %>"+"/"+i); - } - ]]> - </script> - - <% (1..@matches.count).each do |i| %> - <g id="svg-match-<%= i %>" onclick="redirect(<%= @matches[i-1].id %>)" cursor="pointer"> - <rect height="<%= rh = 100/(2**(@depth-1)+1) - 5 %>%" - width="<%= rw = 100/(@depth+1) - 5 %>%" - x="<%= rx = 50/(@depth+1) + 100/(@depth+1)*(@depth-(Math.log2(i).floor+1)) %>%" - y="<%= ry = ( 100/(2**(Math.log2(i).floor)+1) + rh * 1.1 * (2**Math.log2(i).ceil-i)) %>%" - fill="url(#gradMatch)" - rx="5px" - stroke-width="2" - <% case @matches[i-1].status %> - <% when 0 %> - <% if @matches[i-1].teams.count < @tournament.min_teams_per_match %> - stroke="red" - fill-opacity="0.6" - <% else %> - stroke="green" - <% end %> - <% when 1 %> - stroke="orange" - <% when 2 %> - stroke="yellow" - <% when 3 %> - stroke="grey" - <% end %> - /> - <rect width="<%= rw-5 %>%" height="<%= rh/4 %>%" x="<%= rx + 2.5 %>%" y="<%= ry + rh/6 %>%" fill="<%= @matches[i-1].teams.first and @matches[i-1].teams.first.users.include?(current_user) ? "#BCED91" : "white" %>" /> - <text x="<%= rx + rw/4 %>%" y="<%= ry + rh/3 %>%" font-size="<%= rh %>"> - <% if @matches[i-1].teams.first %> - Team <%= @matches[i-1].teams.first.id %> - <% end %> - </text> - <text x="<%= rx + 1.3*rw/3 %>%" y="<%= ry + 5.2*rh/9 %>%" font-size="<%= rh %>"> VS </text> - - <rect width="<%= rw-5 %>%" height="<%= rh/4 %>%" x="<%= rx + 2.5 %>%" y="<%= ry + 3*rh/5 %>%" fill="<%= @matches[i-1].teams[1] and @matches[i-1].teams[1].users.include?(current_user) ? "#BCED91" : "white" %>" /> - <text x="<%= rx + rw/4 %>%" y="<%= ry + 4*rh/5 %>%" font-size="<%= rh %>"> - <% if @matches[i-1].teams[1] %> - Team <%= @matches[i-1].teams[1].id %> - <% end %> - </text> - <% if i > 1 %> - <line x1="<%= rx+rw %>%" y1="<%= ry+rh/2 %>%" x2="<%= lastrx %>%" y2="<%= lastry+lastrh/2 %>%" stroke="black" stroke-width="2" > - <% end %> - <% if Math.log2(i+1) == Math.log2(i+1).ceil %> - <% lastrx = rx - lastry = ry - lastrh = rh - lastrw = rw %> - <% end %> - </g> - - <% end %> -</SVG> -</div> +<% @tournament.stages_ordered.each do |stage| %> + <div class="graph"><%= stage.to_svg %></div> +<% end %> diff --git a/app/views/matches/index.json.jbuilder b/app/views/matches/index.json.jbuilder index f2499ac..bef149d 100644 --- a/app/views/matches/index.json.jbuilder +++ b/app/views/matches/index.json.jbuilder @@ -1,4 +1,4 @@ json.array!(@matches) do |match| - json.extract! match, :id, :status, :tournament_stage_id, :name, :winner_id, :remote_id, :submitted_peer_evaluations + json.extract! match, :id, :status, :tournament_stage_id, :winner_id, :remote_id, :submitted_peer_evaluations json.url match_url(match, format: :json) end diff --git a/app/views/matches/show.json.jbuilder b/app/views/matches/show.json.jbuilder index 5b543ea..145f069 100644 --- a/app/views/matches/show.json.jbuilder +++ b/app/views/matches/show.json.jbuilder @@ -1 +1 @@ -json.extract! @match, :id, :status, :tournament_stage_id, :name, :winner_id, :remote_id, :submitted_peer_evaluations, :created_at, :updated_at +json.extract! @match, :id, :status, :tournament_stage_id, :winner_id, :remote_id, :submitted_peer_evaluations, :created_at, :updated_at diff --git a/app/views/teams/_form.html.erb b/app/views/teams/_form.html.erb index cdd4299..fd10129 100644 --- a/app/views/teams/_form.html.erb +++ b/app/views/teams/_form.html.erb @@ -11,10 +11,6 @@ </div> <% end %> - <div class="field"> - <%= f.label :match_id %><br> - <%= f.text_field :match_id %> - </div> <div class="actions"> <%= f.submit %> </div> diff --git a/app/views/teams/index.html.erb b/app/views/teams/index.html.erb index 6a3188d..b077e10 100644 --- a/app/views/teams/index.html.erb +++ b/app/views/teams/index.html.erb @@ -3,7 +3,6 @@ <table> <thead> <tr> - <th>Match</th> <th></th> <th></th> <th></th> @@ -13,7 +12,6 @@ <tbody> <% @teams.each do |team| %> <tr> - <td><%= team.match %></td> <td><%= link_to 'Show', team %></td> <td><%= link_to 'Edit', edit_team_path(team) %></td> <td><%= link_to 'Destroy', team, method: :delete, data: { confirm: 'Are you sure?' } %></td> diff --git a/app/views/teams/index.json.jbuilder b/app/views/teams/index.json.jbuilder index ca0ec8b..b29428b 100644 --- a/app/views/teams/index.json.jbuilder +++ b/app/views/teams/index.json.jbuilder @@ -1,4 +1,4 @@ json.array!(@teams) do |team| - json.extract! team, :id, :match_id + json.extract! team, :id json.url team_url(team, format: :json) end diff --git a/app/views/teams/show.html.erb b/app/views/teams/show.html.erb index e41692a..5b18d33 100644 --- a/app/views/teams/show.html.erb +++ b/app/views/teams/show.html.erb @@ -1,9 +1,4 @@ <p id="notice"><%= notice %></p> -<p> - <strong>Match:</strong> - <%= @team.match %> -</p> - <%= link_to 'Edit', edit_team_path(@team) %> | <%= link_to 'Back', teams_path %> diff --git a/app/views/teams/show.json.jbuilder b/app/views/teams/show.json.jbuilder index 8a85dcc..1538019 100644 --- a/app/views/teams/show.json.jbuilder +++ b/app/views/teams/show.json.jbuilder @@ -1 +1 @@ -json.extract! @team, :id, :match_id, :created_at, :updated_at +json.extract! @team, :id, :created_at, :updated_at |