From c52a612c3b713c6fbae0cbdc7a1f1cd5cd999c24 Mon Sep 17 00:00:00 2001
From: Luke Shumaker <shumakl@purdue.edu>
Date: Sun, 27 Apr 2014 22:56:44 -0400
Subject: Re-jig the match life-cycle

---
 app/controllers/matches_controller.rb | 141 ++++++++++++----------------------
 app/models/match.rb                   |  40 +++-------
 app/views/matches/show.html.erb       |  79 +++++--------------
 3 files changed, 76 insertions(+), 184 deletions(-)

(limited to 'app')

diff --git a/app/controllers/matches_controller.rb b/app/controllers/matches_controller.rb
index 4c92e67..bed06ba 100644
--- a/app/controllers/matches_controller.rb
+++ b/app/controllers/matches_controller.rb
@@ -24,108 +24,61 @@ class MatchesController < ApplicationController
 	# PATCH/PUT /tournaments/1/matches/1
 	# PATCH/PUT /tournaments/1/matches/1.json
 	def update
-		case params[:update_action]
-		when "start"
-			#
-			# Redirect to the current match page for this tournament with the correct sampling view rendered
-			#
-
-			@match.status = 1
-			respond_to do |format|
-				if @match.save
-					format.html { redirect_to tournament_match_path(@tournament, @match), notice: 'Match has started.' }
-					format.json { head :no_content }
-				else
-					format.html { redirect_to @tournament, notice: "You don't have permission to start this match." }
-					format.json { render json: "Permission denied", status: :forbidden }
-				end
-			end
-		when "finish"
-			#
-			# Get the winner and blowout status from the params given by the correct sampling view
-			#
-
-			unless @match.tournament_stage.tournament.sampling.sampling_done?
-				@match.tournament_stage.tournament.sampling.handle_user_interaction(@match, current_user, params)
-			end
-
-			# Skip peer evaluation if there aren't enough players per team
-			peer = false
-			@match.teams.each do |team|
-				if team.users.count > 2
-					peer = true
+		case @match.status
+		when 0
+			# Created, waiting to be scheduled
+		when 1
+			# Scheduled, waiting to start
+			if (@tournament.hosts.include? current_user) and (params[:update_action] == "start")
+				@match.status = 2
+				respond_to do |format|
+						if @match.save
+							format.html { redirect_to tournament_match_path(@tournament, @match), notice: 'Match has started.' }
+							format.json { head :no_content }
+						else
+							format.html { render action: 'show' }
+							format.json { render json: @match.errors, status: :unprocessable_entity }
+						end
 				end
+				return
 			end
-			@match.status = peer ? 2 : 3
-
-			respond_to do |format|
-				if @match.save
-					format.html { redirect_to tournament_match_path(@tournament, @match), notice: 'Peer evaluation started.' }
-					format.json { head :no_content }
-				else
-					format.html { redirect_to @tournament, notice: "Permission denied" }
-					format.json { render json: "Permission denied", status: :forbidden }
-				end
-			end		
-		when "peer"
-			#
-			# Update user scores via scoring method
-			#
-
-			#update this to use scoring interface
-
-			order = params[:review_action]
-			base_score = 2
-			next_score = 3
-			order.split(",").reverse.each do |elem|
-				player_score = base_score
-				if @match.winner.user.include?(@current_user)
-					player_score += 10
-				else
-					player_score += 7
-				end
-				Score.create(user: elem, match: @match, value: player_score )
-				base_score = next_score
-				next_score += base_score  
-			end
-
-			@match.submitted_peer_evaluations += 1
-			players = []; @match.teams.each{|t| players.concat(t.users.all)}
-			if (@match.submitted_peer_evaluations == players.count) 
+		when 2
+			# Started, waiting to finish
+			@match.handle_sampling(params)
+			if @match.finished?
 				@match.status = 3
-			end
-
-
-			respond_to do |format|
-				if @match.save
-					format.html { redirect_to tournament_match_path(@tournament, @match), notice: 'Scores Submitted' }
-					format.json { head :no_content }
-				else
-					format.html { redirect_to @tournament, notice: "You don't have permission to start this match." }
-					format.json { render json: "Permission denied", status: :forbidden }
+				respond_to do |format|
+					if @match.save
+						format.html { redirect_to tournament_match_path(@tournament, @match), notice: 'Match has finished.' }
+						format.json { head :no_content }
+					else
+						format.html { render action: 'show' }
+						format.json { render json: @match.errors, status: :unprocessable_entity }
+					end
 				end
+				return
 			end
-		when "reset"
-			#
-			# Reset Match Status to 1 in case something needs to be replayed.
-			#
-
-			@match.status = 1
-			respond_to do |format|
-				if @match.save
-					format.html { redirect_to tournament_match_path(@tournament, @match), notice: 'Match Status Reset to 1' }
-					format.json { head :no_content }
-				else
-					format.html { redirect_to @tournament, notice: "You don't have permission to start this match." }
-					format.json { render json: "Permission denied", status: :forbidden }
+		when 3
+			if (@tournament.hosts.include? current_user) and (params[:update_action] == "start")
+				ok = true
+				ActiveRecord::Base.transaction do
+					ok &= @match.statitistics.destroy_all
+					@match.status = 1
+					ok &= @match.save
 				end
-			end
-		else
-			respond_to do |format|
-				format.html { redirect_to @tournament, notice: "Invalid action", status: :unprocessable_entity }
-				format.json { render json: @tournament.errors, status: :unprocessable_entity }
+				respond_to do |format|
+					if @match.save
+						format.html { redirect_to tournament_match_path(@tournament, @match), notice: 'Match has finished.' }
+						format.json { head :no_content }
+					else
+						format.html { render action: 'show' }
+						format.json { render json: @match.errors, status: :unprocessable_entity }
+					end
+				end
+				return
 			end
 		end
+		redirect_to tournament_match_path(@tournament, @match)
 	end
 
 	private
diff --git a/app/models/match.rb b/app/models/match.rb
index 9045d67..c2df6e0 100644
--- a/app/models/match.rb
+++ b/app/models/match.rb
@@ -5,41 +5,19 @@ class Match < ActiveRecord::Base
 
 	belongs_to :winner, class_name: "Team"
 
-	def setup()
-		
+	def win?(player)
+		winner.players.include? player
 	end
 
-	def is_match_over(match, firstPlayer)
-		#response = HTTParty.get("https://prod.api.pvp.net/api/lol/na/v1.3/summoner/by-name/#{firstPlayer}?api_key=ad539f86-22fd-474d-9279-79a7a296ac38")
-		#riot_id = response["#{firstPlayer}"]['id']
-		#recent game information
-		#game_info = HTTParty.get("https://prod.api.pvp.net/api/lol/na/v1.3/game/by-summoner/#{riot_id}/recent?api_key=ad539f86-22fd-474d-9279-79a7a296ac38")
-		#first_id = game_info["games"][0]["gameId"]
-
-		count = 0
-		while true do 
-			#sleep(5) #wait four minutes
-			
-			puts("Every 4 minutes.")
-			puts("Every 4 minutes.")
-			count += 1
-			#game_info = HTTParty.get("https://prod.api.pvp.net/api/lol/na/v1.3/game/by-summoner/#{riot_id}/recent?api_key=ad539f86-22fd-474d-9279-79a7a296ac38")
-			#current_id = game_info["games"][0]["gameId"]
-
-			#if current_id != first_id
-			if count > 2
-				puts(count)
-				#sleep(10)
-				match.status = 2
-				match.save
-				return true
-			end
-		end #while
+	def handle_sampling(params)
+		# TODO
 	end
-	#handle_asynchronously :is_match_over
 
-	def win?(player)
-		winner.players.include? player
+	def render_sampling(user)
+		# TODO
 	end
 
+	def finished?
+		# TODO
+	end
 end
diff --git a/app/views/matches/show.html.erb b/app/views/matches/show.html.erb
index 1c11eb7..3f9c6b4 100644
--- a/app/views/matches/show.html.erb
+++ b/app/views/matches/show.html.erb
@@ -1,16 +1,3 @@
-<script type="text/javascript">
-function score_peers() {
-	//get each player in order and assign score here!
-	var $lisp = $('ol#boxes');
-	var comma = ","
-	for(var i=0; i < $lisp.length; i++) {
-		if ( i == lisp.length-1) {
-			comma = "";
-		}
-		$('review_action').value +=  $('ol#boxes:eq(' + i + ')').text() + comma;
-	}
-}
-</script>
 
 <p>
 	<strong>Status:</strong>
@@ -22,11 +9,10 @@ function score_peers() {
 </p>
 
 <%#
-	Match Status 0 =>	Created, waiting to start
-	Match Status 1 =>	Match ready
-	Match Status 2 =>	Match is running, waiting to finish
-	Match Status 3 =>	Match finished, waiting for statistics to populate
-	Match Status 4 =>	Match Totally done. Archived.
+	Match Status 0 =>	Created, waiting to be scheduled
+	Match Status 1 =>	Scheduled, waiting to start
+	Match Status 2 =>	Started, waiting to finish
+	Match Status 3 =>	Finished
 
 	Four views:- (status is Match status)
 	A. Pairings, when status is 1 for either Host or Player Or when status is 2 for player 
@@ -66,52 +52,27 @@ function score_peers() {
 	<%= form_tag(tournament_match_path(@tournament, @match), method: "put") do %>
 		<% case @match.status %>
 		<% when 0 %>
-			<!-- Created, waiting to start -->
+			<!-- Created, waiting to be scheduled -->
+			<p>This match has not yet been scheduled.</p>
+		<% when 1 %>
+			<!-- Scheduled, waiting to start -->
 			<% if @tournament.hosts.include? current_user %>
 				<input type="hidden" name="update_action" value="start">
-				<%= submit_tag("Start Match", :disabled => @match.teams.count < @tournament.min_teams_per_match) %>
+				<%= submit_tag("Start Match") %>
 			<% else %>
 				<p>Match is waiting to start.</p>
 			<% end %>
-		<% when 1 %>
-			<!-- Started, waiting to finish -->
-			<!-- This will depend on the Sampling Method Eventually instead of always being Manual -->
-
-			<%= raw @match.tournament_stage.tournament.sampling_method.camelcase.constantize.render_user_interaction(@match, current_user) %>
-
 		<% when 2 %>
-			<!-- Finished, waiting for peer reviews -->
-			<input type="hidden" name="update_action" value="peer">
-			<input type="hidden" name="review_action" value="">
-			<% users = []; @match.teams.each{|t| users.concat(t.users)}; %>
-			<% if users.include? current_user %>
-				<% @match.teams.each do |team| %>
-					<% if team.users.include?(current_user) %>
-						<ol id="boxes" class="sortable">
-							<% team.users.reject{ |u| (u.user_name == @current_user.user_name) }.collect {|u| u.user_name }.each do |k| %>
-								<li><%= k%>
-									<br>
-									<% if (@tournament.game_id  == 1) %>
-										<%= if @blue2["#{k}"] == nil
-											"Level: #{@purp2["#{k}"]["level"]}  K/D/A: #{@purp2["#{k}"]["championsKilled"]}/#{@purp2["#{k}"]["numDeaths"]}/#{@purp2["#{k}"]["assists"]}  Gold:#{@purp2["#{k}"]["goldEarned"]}"
-											else
-											"Level: #{@blue2["#{k}"]["level"]}  K/D/A: #{@blue2["#{k}"]["championsKilled"]}/#{@blue2["#{k}"]["numDeaths"]}/#{@blue2["#{k}"]["assists"]}  Gold:#{@blue2["#{k}"]["goldEarned"]}"
-										end %>
-									<% end %>
-								</li>
-							<% end %>
-						</ol>
-					<% end %>
-				<% end %>
-				<%= submit_tag("Submit peer evaluation", :onsubmit => "score_peers()") %>
-			<% else %>
-				Waiting for peer evaluations to be submitted.
-			<% end %>
+			<!-- Started, waiting to finish -->
+			<!-- TODO -->
+			<%= @match.render_sampling(current_user) %>
 		<% when 3 %>
-			<!-- Totally done -->
-			This match is done.
-			<input type="hidden" name="update_action" value="reset">
-			<%= submit_tag("Reset Status") %>
-		<% end # case %>
-	<% end # form %>
+			<!-- Finished -->
+			<p>This match is finished.</p>
+			<% if @tournament.hosts.include? current_user %>
+				<input type="hidden" name="update_action" value="reset">
+				<%= submit_tag("Reset Status") %>
+			<% end %>
+		<% end %>
+	<% end %>
 </div>
-- 
cgit v1.2.3-2-g168b


From 2d7313767442956eab00671ac555c0ce4e583b5f Mon Sep 17 00:00:00 2001
From: Luke Shumaker <shumakl@purdue.edu>
Date: Sun, 27 Apr 2014 23:01:04 -0400
Subject: handle what I can of `fgrep -r TODO app lib`

---
 app/controllers/sessions_controller.rb    | 2 +-
 app/controllers/tournaments_controller.rb | 8 --------
 app/views/matches/show.html.erb           | 1 -
 app/views/tournaments/show.html.erb       | 3 +--
 4 files changed, 2 insertions(+), 12 deletions(-)

(limited to 'app')

diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
index a0390ad..9f0a8e3 100644
--- a/app/controllers/sessions_controller.rb
+++ b/app/controllers/sessions_controller.rb
@@ -18,7 +18,7 @@ class SessionsController < ApplicationController
 			if @user && @user.authenticate(params[:session][:password])
 				sign_in @user
 				format.html { redirect_to root_path }
-				#format.json { #TODO }
+				#format.json { # TODO }
 			else
 				format.html { render action: 'new' }
 				format.json { render json: @user.errors, status: :unprocessable_entity }
diff --git a/app/controllers/tournaments_controller.rb b/app/controllers/tournaments_controller.rb
index 2e854a2..c06c16c 100644
--- a/app/controllers/tournaments_controller.rb
+++ b/app/controllers/tournaments_controller.rb
@@ -87,14 +87,6 @@ class TournamentsController < ApplicationController
 		end
 	end
 
-	def create_stage
-
-	#	stage = @tournament.stages.new
-	#	stage.create(TODO:PARAMETERS)
-	#	@tournament.stages.push(stage)
-
-	end
-
 	# PATCH/PUT /tournaments/1
 	# PATCH/PUT /tournaments/1.json
 	def update
diff --git a/app/views/matches/show.html.erb b/app/views/matches/show.html.erb
index 3f9c6b4..01484d3 100644
--- a/app/views/matches/show.html.erb
+++ b/app/views/matches/show.html.erb
@@ -64,7 +64,6 @@
 			<% end %>
 		<% when 2 %>
 			<!-- Started, waiting to finish -->
-			<!-- TODO -->
 			<%= @match.render_sampling(current_user) %>
 		<% when 3 %>
 			<!-- Finished -->
diff --git a/app/views/tournaments/show.html.erb b/app/views/tournaments/show.html.erb
index 53389bb..c71d3c6 100644
--- a/app/views/tournaments/show.html.erb
+++ b/app/views/tournaments/show.html.erb
@@ -47,8 +47,7 @@
 
 <p>
   <strong>Sampling method:</strong>
-  <!-- TODO -->
-  <%= @tournament.sampling_method %>
+  <%= @tournament.sampling_method.humanize.capitalize %>
 </p>
 
 <% @tournament.settings.each do |setting| %>
-- 
cgit v1.2.3-2-g168b


From 17169088974477c2702377a5ea3e14afff62e009 Mon Sep 17 00:00:00 2001
From: nfoy <nfoy@purdue.edu>
Date: Sun, 27 Apr 2014 23:05:26 -0400
Subject: Fixed conversations.

---
 app/views/pms/index.html.erb | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

(limited to 'app')

diff --git a/app/views/pms/index.html.erb b/app/views/pms/index.html.erb
index a1feb42..056b371 100644
--- a/app/views/pms/index.html.erb
+++ b/app/views/pms/index.html.erb
@@ -11,7 +11,7 @@
   <col width="250">
   <col width="300">
   <tbody>
-    <% if conversations.reject { |c| c.is_unread?(current_user) && (c.receipts_for current_user).last.message.sender != current_user }.empty? %>
+    <%# if conversations.reject { |c| c.is_unread?(current_user) && (c.receipts_for current_user).last.message.sender != current_user }.empty? %>
       <tr>
         <tr>
           <td><b>With</b></td>
@@ -38,9 +38,9 @@
           <% end %>
         <% end %>
       </tr>
-    <% else %>
-      <h4> No unread conversations </h4>
-    <% end %>
+    <%# else %>
+      
+    <%# end %>
   </tbody>
 </table>
 
@@ -53,7 +53,7 @@
   <col width="250">
   <col width="300">
   <tbody>
-    <% if conversations.reject { |c| c.is_read?(current_user) || (c.receipts_for current_user).last.message.sender == current_user }.empty? %>
+    <%# if conversations.reject { |c| c.is_read?(current_user) || (c.receipts_for current_user).last.message.sender == current_user }.empty? %>
       <tr>
         <tr>
           <td><b>With</b></td>
@@ -80,8 +80,8 @@
           <% end %>
         <% end %>
       </tr>
-    <% else %>
-      <h4> No unread conversations </h4>
-    <% end %>
+    <% #else %>
+      
+    <% #end %>
   </tbody>
 </table>
\ No newline at end of file
-- 
cgit v1.2.3-2-g168b


From b35fa4b6f79d13d46eab4c9ba9e631eeb20ba73b Mon Sep 17 00:00:00 2001
From: AndrewMurrell <amurrel@purdue.edu>
Date: Sun, 27 Apr 2014 23:15:31 -0400
Subject: replaced getStatistic with focused where

---
 app/models/match.rb                      | 9 ++++++++-
 app/views/tournaments/standings.html.erb | 4 ++--
 2 files changed, 10 insertions(+), 3 deletions(-)

(limited to 'app')

diff --git a/app/models/match.rb b/app/models/match.rb
index 9045d67..e817b71 100644
--- a/app/models/match.rb
+++ b/app/models/match.rb
@@ -6,7 +6,14 @@ class Match < ActiveRecord::Base
 	belongs_to :winner, class_name: "Team"
 
 	def setup()
-		
+	end
+
+	def finished?
+		ok = true
+		tournament_stage.scoring_method.stats_needed.each do |stat|
+			ok &= statistics.where(match: self, name: stat).nil?
+		end
+		ok
 	end
 
 	def is_match_over(match, firstPlayer)
diff --git a/app/views/tournaments/standings.html.erb b/app/views/tournaments/standings.html.erb
index b8739de..a04e132 100644
--- a/app/views/tournaments/standings.html.erb
+++ b/app/views/tournaments/standings.html.erb
@@ -1,7 +1,7 @@
-<% playerscores = @tournament.players.collect {|player| player => @tournament.statistics.getStatistic(player.matches.last, player, :score) } %>
+<% playerscores = @tournament.players.collect {|player| player => @tournament.statistics.where(match: player.matches.last, user: player, name: :score) } %>
 <% teams = tournament_stage.matches.collect 
 { |match| match.teams.collect { |team| team.id => team.players.collect 
-{ |player| player.user_name => @tournament.statistics.getStatistic(player.matches.last, player, :score } } } %>
+{ |player| player.user_name => @tournament.statistics.where(match: player.matches.last, user: player, name: :score } } } %>
 
 <table>
 	<tr>
-- 
cgit v1.2.3-2-g168b