diff options
author | nfoy <nfoy@purdue.edu> | 2014-04-03 16:15:46 -0400 |
---|---|---|
committer | nfoy <nfoy@purdue.edu> | 2014-04-03 16:15:46 -0400 |
commit | 5169363d6698fb87372efcb7ace552b89953584e (patch) | |
tree | ff42d819be510dfe929b4cd9dbc1cd25f51c9785 /app | |
parent | 2b79a033262dfe610eb22b7f6b3614db9cb134b1 (diff) | |
parent | 9f19d0e16d7920e07255c0fbe596c518d1aa415f (diff) |
Merge branch 'master' of https://github.com/LukeShu/leaguer
Diffstat (limited to 'app')
39 files changed, 1016 insertions, 787 deletions
diff --git a/app/assets/javascripts/remote_usernames.js.coffee b/app/assets/javascripts/remote_usernames.js.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/app/assets/javascripts/remote_usernames.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/stylesheets/remote_usernames.css.scss b/app/assets/stylesheets/remote_usernames.css.scss new file mode 100644 index 0000000..b9e841e --- /dev/null +++ b/app/assets/stylesheets/remote_usernames.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the remote_usernames controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/tournaments.css.scss b/app/assets/stylesheets/tournaments.css.scss index 8857d38..2074783 100644 --- a/app/assets/stylesheets/tournaments.css.scss +++ b/app/assets/stylesheets/tournaments.css.scss @@ -73,4 +73,11 @@ div.tournament-listing { padding: 5px 0 0 0; } } +} + +div.leave-buttons { + margin-top: 50px; + form { + display: inline; + } }
\ No newline at end of file diff --git a/app/controllers/alerts_controller.rb b/app/controllers/alerts_controller.rb index ac11854..d2b1558 100644 --- a/app/controllers/alerts_controller.rb +++ b/app/controllers/alerts_controller.rb @@ -1,72 +1,72 @@ class AlertsController < ApplicationController - before_action :set_alert, only: [:show, :edit, :update, :destroy] - before_action :check_perms, only: [:new, :create, :edit, :update, :destroy] + before_action :set_alert, only: [:show, :edit, :update, :destroy] + before_action :check_perms, only: [:new, :create, :edit, :update, :destroy] - # GET /alerts - # GET /alerts.json - def index - @alerts = Alert.all - end + # GET /alerts + # GET /alerts.json + def index + @alerts = Alert.all + end - # GET /alerts/1 - # GET /alerts/1.json - def show - end + # GET /alerts/1 + # GET /alerts/1.json + def show + end - # GET /alerts/new - def new - @alert = Alert.new - end + # GET /alerts/new + def new + @alert = Alert.new + end - # GET /alerts/1/edit - def edit - end + # GET /alerts/1/edit + def edit + end - # POST /alerts - # POST /alerts.json - def create - @alert = Alert.new(alert_params) + # POST /alerts + # POST /alerts.json + def create + @alert = Alert.new(alert_params) - respond_to do |format| - if @alert.save - format.html { redirect_to @alert, notice: 'Alert was successfully created.' } - format.json { render action: 'show', status: :created, location: @alert } - else - format.html { render action: 'new' } - format.json { render json: @alert.errors, status: :unprocessable_entity } - end - end - end + respond_to do |format| + if @alert.save + format.html { redirect_to @alert, notice: 'Alert was successfully created.' } + format.json { render action: 'show', status: :created, location: @alert } + else + format.html { render action: 'new' } + format.json { render json: @alert.errors, status: :unprocessable_entity } + end + end + end - # PATCH/PUT /alerts/1 - # PATCH/PUT /alerts/1.json - def update - respond_to do |format| - if @alert.update(alert_params) - format.html { redirect_to @alert, notice: 'Alert was successfully updated.' } - format.json { head :no_content } - else - format.html { render action: 'edit' } - format.json { render json: @alert.errors, status: :unprocessable_entity } - end - end - end + # PATCH/PUT /alerts/1 + # PATCH/PUT /alerts/1.json + def update + respond_to do |format| + if @alert.update(alert_params) + format.html { redirect_to @alert, notice: 'Alert was successfully updated.' } + format.json { head :no_content } + else + format.html { render action: 'edit' } + format.json { render json: @alert.errors, status: :unprocessable_entity } + end + end + end - # DELETE /alerts/1 - # DELETE /alerts/1.json - def destroy - @alert.destroy - respond_to do |format| - format.html { redirect_to alerts_url } - format.json { head :no_content } - end - end + # DELETE /alerts/1 + # DELETE /alerts/1.json + def destroy + @alert.destroy + respond_to do |format| + format.html { redirect_to alerts_url } + format.json { head :no_content } + end + end - private - # Use callbacks to share common setup or constraints between actions. - def set_alert - @alert = Alert.find(params[:id]) - end + private + # Use callbacks to share common setup or constraints between actions. + def set_alert + @alert = Alert.find(params[:id]) + end def check_perms unless (signed_in? and (current_user.in_group?(:admin) or current_user.in_group?(:host))) @@ -77,8 +77,8 @@ class AlertsController < ApplicationController end end - # Never trust parameters from the scary internet, only allow the white list through. - def alert_params - params.require(:alert).permit(:author_id, :message) - end + # Never trust parameters from the scary internet, only allow the white list through. + def alert_params + params.require(:alert).permit(:author_id, :message) + end end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 7487f87..0ac3486 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,8 +1,8 @@ class ApplicationController < ActionController::Base - # Prevent CSRF attacks by raising an exception. - # For APIs, you may want to use :null_session instead. - protect_from_forgery with: :exception - + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception + #include sessionhelper for the session controller and view include SessionsHelper end diff --git a/app/controllers/games_controller.rb b/app/controllers/games_controller.rb index 5780152..e9620b4 100644 --- a/app/controllers/games_controller.rb +++ b/app/controllers/games_controller.rb @@ -1,74 +1,74 @@ class GamesController < ApplicationController - before_action :set_game, only: [:show, :edit, :update, :destroy] + before_action :set_game, only: [:show, :edit, :update, :destroy] - # GET /games - # GET /games.json - def index - @games = Game.all - end + # GET /games + # GET /games.json + def index + @games = Game.all + end - # GET /games/1 - # GET /games/1.json - def show - end + # GET /games/1 + # GET /games/1.json + def show + end - # GET /games/new - def new - @game = Game.new - end + # GET /games/new + def new + @game = Game.new + end - # GET /games/1/edit - def edit - end + # GET /games/1/edit + def edit + end - # POST /games - # POST /games.json - def create - @game = Game.new(game_params) + # POST /games + # POST /games.json + def create + @game = Game.new(game_params) - respond_to do |format| - if @game.save - format.html { redirect_to @game, notice: 'Game was successfully created.' } - format.json { render action: 'show', status: :created, location: @game } - else - format.html { render action: 'new' } - format.json { render json: @game.errors, status: :unprocessable_entity } - end - end - end + respond_to do |format| + if @game.save + format.html { redirect_to @game, notice: 'Game was successfully created.' } + format.json { render action: 'show', status: :created, location: @game } + else + format.html { render action: 'new' } + format.json { render json: @game.errors, status: :unprocessable_entity } + end + end + end - # PATCH/PUT /games/1 - # PATCH/PUT /games/1.json - def update - respond_to do |format| - if @game.update(game_params) - format.html { redirect_to @game, notice: 'Game was successfully updated.' } - format.json { head :no_content } - else - format.html { render action: 'edit' } - format.json { render json: @game.errors, status: :unprocessable_entity } - end - end - end + # PATCH/PUT /games/1 + # PATCH/PUT /games/1.json + def update + respond_to do |format| + if @game.update(game_params) + format.html { redirect_to @game, notice: 'Game was successfully updated.' } + format.json { head :no_content } + else + format.html { render action: 'edit' } + format.json { render json: @game.errors, status: :unprocessable_entity } + end + end + end - # DELETE /games/1 - # DELETE /games/1.json - def destroy - @game.destroy - respond_to do |format| - format.html { redirect_to games_url } - format.json { head :no_content } - end - end + # DELETE /games/1 + # DELETE /games/1.json + def destroy + @game.destroy + respond_to do |format| + format.html { redirect_to games_url } + format.json { head :no_content } + end + end - private - # Use callbacks to share common setup or constraints between actions. - def set_game - @game = Game.find(params[:id]) - end + private + # Use callbacks to share common setup or constraints between actions. + def set_game + @game = Game.find(params[:id]) + end - # Never trust parameters from the scary internet, only allow the white list through. - def game_params - params.require(:game).permit(:name, :min_players_per_team, :max_players_per_team, :min_teams_per_match, :max_teams_per_match, :set_rounds, :randomized_teams) - end + # Never trust parameters from the scary internet, only allow the white list through. + def game_params + params.require(:game).permit(:name, :min_players_per_team, :max_players_per_team, :min_teams_per_match, :max_teams_per_match, :set_rounds, :randomized_teams) + end end diff --git a/app/controllers/matches_controller.rb b/app/controllers/matches_controller.rb index 53028a4..ba6ab16 100644 --- a/app/controllers/matches_controller.rb +++ b/app/controllers/matches_controller.rb @@ -1,77 +1,77 @@ class MatchesController < ApplicationController - before_action :set_tournament, only: [:index, :new, :create] - before_action :set_match, only: [:show, :edit, :update, :destroy] - # GET /matches - # GET /matches.json - def index - @matches = @tournament.matches - end + before_action :set_tournament, only: [:index, :new, :create] + before_action :set_match, only: [:show, :edit, :update, :destroy] + # GET /matches + # GET /matches.json + def index + @matches = @tournament.matches + end - # GET /matches/1 - # GET /matches/1.json - def show - end + # GET /matches/1 + # GET /matches/1.json + def show + end - # GET /matches/new - def new + # GET /matches/new + def new + end - end + # GET /matches/1/edit + def edit + end - # GET /matches/1/edit - def edit - end + # POST /matches + # POST /matches.json + def create + @match = @tournament.matches.build(match_params) - # POST /matches - # POST /matches.json - def create - @match = @tournament.matches.build(match_params) + respond_to do |format| + if @match.save + format.html { redirect_to tournament_matches_path, notice: 'Match was successfully created.' } + format.json { render action: 'show', status: :created, location: @match } + else + format.html { render action: 'new' } + format.json { render json: @match.errors, status: :unprocessable_entity } + end + end + end - respond_to do |format| - if @match.save - format.html { redirect_to tournament_matches_path, notice: 'Match was successfully created.' } - format.json { render action: 'show', status: :created, location: @match } - else - format.html { render action: 'new' } - format.json { render json: @match.errors, status: :unprocessable_entity } - end - end - end + # PATCH/PUT /matches/1 + # PATCH/PUT /matches/1.json + def update + respond_to do |format| + if @match.update(match_params) + format.html { redirect_to [@tournament, @match], notice: 'Match was successfully updated.' } + format.json { head :no_content } + else + format.html { render action: 'edit' } + format.json { render json: @match.errors, status: :unprocessable_entity } + end + end + end - # PATCH/PUT /matches/1 - # PATCH/PUT /matches/1.json - def update - respond_to do |format| - if @match.update(match_params) - format.html { redirect_to [@tournament, @match], notice: 'Match was successfully updated.' } - format.json { head :no_content } - else - format.html { render action: 'edit' } - format.json { render json: @match.errors, status: :unprocessable_entity } - end - end - end + # DELETE /matches/1 + # DELETE /matches/1.json + def destroy + @match.destroy + respond_to do |format| + format.html { redirect_to tournament_matches_path } + format.json { head :no_content } + end + end - # DELETE /matches/1 - # DELETE /matches/1.json - def destroy - - @match.destroy - respond_to do |format| - format.html { redirect_to tournament_matches_path } - end - end + private + # Use callbacks to share common setup or constraints between actions. + def set_match + @tournament = Tournament.find(params[:tournament_id]) + @match = @tournament.matches.find(params[:id]); + end + def set_tournament + @tournament = Tournament.find(params[:tournament_id]) + end - private - # Use callbacks to share common setup or constraints between actions. - def set_match - @tournament = Tournament.find(params[:tournament_id]) - @match = @tournament.matches.find(params[:id]); - end - def set_tournament - @tournament = Tournament.find(params[:tournament_id]) - end - # Never trust parameters from the scary internet, only allow the white list through. - def match_params - params.require(:match).permit(:status, :tournament_id, :name, :winner_id, :remote_id) - end + # Never trust parameters from the scary internet, only allow the white list through. + def match_params + params.require(:match).permit(:status, :tournament_id, :name, :winner_id, :remote_id) + end end diff --git a/app/controllers/pms_controller.rb b/app/controllers/pms_controller.rb index 5dd0d69..b62a6ef 100644 --- a/app/controllers/pms_controller.rb +++ b/app/controllers/pms_controller.rb @@ -1,74 +1,74 @@ class PmsController < ApplicationController - before_action :set_pm, only: [:show, :edit, :update, :destroy] + before_action :set_pm, only: [:show, :edit, :update, :destroy] - # GET /pms - # GET /pms.json - def index - @pms = Pm.all - end + # GET /pms + # GET /pms.json + def index + @pms = Pm.all + end - # GET /pms/1 - # GET /pms/1.json - def show - end + # GET /pms/1 + # GET /pms/1.json + def show + end - # GET /pms/new - def new - @pm = Pm.new - end + # GET /pms/new + def new + @pm = Pm.new + end - # GET /pms/1/edit - def edit - end + # GET /pms/1/edit + def edit + end - # POST /pms - # POST /pms.json - def create - @pm = Pm.new(pm_params) + # POST /pms + # POST /pms.json + def create + @pm = Pm.new(pm_params) - respond_to do |format| - if @pm.save - format.html { redirect_to @pm, notice: 'Pm was successfully created.' } - format.json { render action: 'show', status: :created, location: @pm } - else - format.html { render action: 'new' } - format.json { render json: @pm.errors, status: :unprocessable_entity } - end - end - end + respond_to do |format| + if @pm.save + format.html { redirect_to @pm, notice: 'Pm was successfully created.' } + format.json { render action: 'show', status: :created, location: @pm } + else + format.html { render action: 'new' } + format.json { render json: @pm.errors, status: :unprocessable_entity } + end + end + end - # PATCH/PUT /pms/1 - # PATCH/PUT /pms/1.json - def update - respond_to do |format| - if @pm.update(pm_params) - format.html { redirect_to @pm, notice: 'Pm was successfully updated.' } - format.json { head :no_content } - else - format.html { render action: 'edit' } - format.json { render json: @pm.errors, status: :unprocessable_entity } - end - end - end + # PATCH/PUT /pms/1 + # PATCH/PUT /pms/1.json + def update + respond_to do |format| + if @pm.update(pm_params) + format.html { redirect_to @pm, notice: 'Pm was successfully updated.' } + format.json { head :no_content } + else + format.html { render action: 'edit' } + format.json { render json: @pm.errors, status: :unprocessable_entity } + end + end + end - # DELETE /pms/1 - # DELETE /pms/1.json - def destroy - @pm.destroy - respond_to do |format| - format.html { redirect_to pms_url } - format.json { head :no_content } - end - end + # DELETE /pms/1 + # DELETE /pms/1.json + def destroy + @pm.destroy + respond_to do |format| + format.html { redirect_to pms_url } + format.json { head :no_content } + end + end - private - # Use callbacks to share common setup or constraints between actions. - def set_pm - @pm = Pm.find(params[:id]) - end + private + # Use callbacks to share common setup or constraints between actions. + def set_pm + @pm = Pm.find(params[:id]) + end - # Never trust parameters from the scary internet, only allow the white list through. - def pm_params - params.require(:pm).permit(:author_id, :recipient_id, :message) - end + # Never trust parameters from the scary internet, only allow the white list through. + def pm_params + params.require(:pm).permit(:author_id, :recipient_id, :message) + end end diff --git a/app/controllers/remote_usernames_controller.rb b/app/controllers/remote_usernames_controller.rb new file mode 100644 index 0000000..8676c00 --- /dev/null +++ b/app/controllers/remote_usernames_controller.rb @@ -0,0 +1,74 @@ +class RemoteUsernamesController < ApplicationController + before_action :set_remote_username, only: [:show, :edit, :update, :destroy] + + # GET /remote_usernames + # GET /remote_usernames.json + def index + @remote_usernames = RemoteUsername.all + end + + # GET /remote_usernames/1 + # GET /remote_usernames/1.json + def show + end + + # GET /remote_usernames/new + def new + @remote_username = RemoteUsername.new + end + + # GET /remote_usernames/1/edit + def edit + end + + # POST /remote_usernames + # POST /remote_usernames.json + def create + @remote_username = RemoteUsername.new(remote_username_params) + + respond_to do |format| + if @remote_username.save + format.html { redirect_to @remote_username, notice: 'Remote username was successfully created.' } + format.json { render action: 'show', status: :created, location: @remote_username } + else + format.html { render action: 'new' } + format.json { render json: @remote_username.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /remote_usernames/1 + # PATCH/PUT /remote_usernames/1.json + def update + respond_to do |format| + if @remote_username.update(remote_username_params) + format.html { redirect_to @remote_username, notice: 'Remote username was successfully updated.' } + format.json { head :no_content } + else + format.html { render action: 'edit' } + format.json { render json: @remote_username.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /remote_usernames/1 + # DELETE /remote_usernames/1.json + def destroy + @remote_username.destroy + respond_to do |format| + format.html { redirect_to remote_usernames_url } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_remote_username + @remote_username = RemoteUsername.find(params[:id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def remote_username_params + params.require(:remote_username).permit(:game_id, :user_id, :user_name) + end +end diff --git a/app/controllers/servers_controller.rb b/app/controllers/servers_controller.rb index bb5d5f7..f23f2bf 100644 --- a/app/controllers/servers_controller.rb +++ b/app/controllers/servers_controller.rb @@ -1,72 +1,72 @@ class ServersController < ApplicationController - before_action :set_server, only: [:show, :edit, :update, :destroy] - before_action :check_perms + before_action :set_server, only: [:show, :edit, :update, :destroy] + before_action :check_perms - # GET /servers - # GET /servers.json - def index - @servers = Server.all - end + # GET /servers + # GET /servers.json + def index + @servers = Server.all + end - # GET /servers/1 - # GET /servers/1.json - def show - end + # GET /servers/1 + # GET /servers/1.json + def show + end - # GET /servers/new - def new - @server = Server.new - end + # GET /servers/new + def new + @server = Server.new + end - # GET /servers/1/edit - def edit - end + # GET /servers/1/edit + def edit + end - # POST /servers - # POST /servers.json - def create - @server = Server.new(server_params) + # POST /servers + # POST /servers.json + def create + @server = Server.new(server_params) - respond_to do |format| - if @server.save - format.html { redirect_to @server, notice: 'Server was successfully created.' } - format.json { render action: 'show', status: :created, location: @server } - else - format.html { render action: 'new' } - format.json { render json: @server.errors, status: :unprocessable_entity } - end - end - end + respond_to do |format| + if @server.save + format.html { redirect_to @server, notice: 'Server was successfully created.' } + format.json { render action: 'show', status: :created, location: @server } + else + format.html { render action: 'new' } + format.json { render json: @server.errors, status: :unprocessable_entity } + end + end + end - # PATCH/PUT /servers/1 - # PATCH/PUT /servers/1.json - def update - respond_to do |format| - if @server.update(server_params) - format.html { redirect_to @server, notice: 'Server was successfully updated.' } - format.json { head :no_content } - else - format.html { render action: 'edit' } - format.json { render json: @server.errors, status: :unprocessable_entity } - end - end - end + # PATCH/PUT /servers/1 + # PATCH/PUT /servers/1.json + def update + respond_to do |format| + if @server.update(server_params) + format.html { redirect_to @server, notice: 'Server was successfully updated.' } + format.json { head :no_content } + else + format.html { render action: 'edit' } + format.json { render json: @server.errors, status: :unprocessable_entity } + end + end + end - # DELETE /servers/1 - # DELETE /servers/1.json - def destroy - @server.destroy - respond_to do |format| - format.html { redirect_to servers_url } - format.json { head :no_content } - end - end + # DELETE /servers/1 + # DELETE /servers/1.json + def destroy + @server.destroy + respond_to do |format| + format.html { redirect_to servers_url } + format.json { head :no_content } + end + end - private - # Use callbacks to share common setup or constraints between actions. - def set_server - @server = Server.find(params[:id]) - end + private + # Use callbacks to share common setup or constraints between actions. + def set_server + @server = Server.find(params[:id]) + end def check_perms unless (signed_in? and current_user.in_group?(:admin)) @@ -77,8 +77,8 @@ class ServersController < ApplicationController end end - # Never trust parameters from the scary internet, only allow the white list through. - def server_params - params[:server] - end + # Never trust parameters from the scary internet, only allow the white list through. + def server_params + params[:server] + end end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 7cb16e8..1bae258 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -6,7 +6,7 @@ class SessionsController < ApplicationController @user = User.new #@session = Session.new end - + # POST /sessions # POST /sessions.json def create @@ -39,14 +39,13 @@ class SessionsController < ApplicationController end private + # Use callbacks to share common setup or constraints between actions. + def set_session + #@session = Session.find(cookies[:remember_token]) + end - # Use callbacks to share common setup or constraints between actions. - def set_session - #@session = Session.find(cookies[:remember_token]) - end - - # Never trust parameters from the scary internet, only allow the white list through. - def session_params - params.require(:session).permit(:session_email, :session_user_name, :session_password) - end + # Never trust parameters from the scary internet, only allow the white list through. + def session_params + params.require(:session).permit(:session_email, :session_user_name, :session_password) + end end diff --git a/app/controllers/teams_controller.rb b/app/controllers/teams_controller.rb index ccd6781..05e7a12 100644 --- a/app/controllers/teams_controller.rb +++ b/app/controllers/teams_controller.rb @@ -1,74 +1,74 @@ class TeamsController < ApplicationController - before_action :set_team, only: [:show, :edit, :update, :destroy] + before_action :set_team, only: [:show, :edit, :update, :destroy] - # GET /teams - # GET /teams.json - def index - @teams = Team.all - end + # GET /teams + # GET /teams.json + def index + @teams = Team.all + end - # GET /teams/1 - # GET /teams/1.json - def show - end + # GET /teams/1 + # GET /teams/1.json + def show + end - # GET /teams/new - def new - @team = Team.new - end + # GET /teams/new + def new + @team = Team.new + end - # GET /teams/1/edit - def edit - end + # GET /teams/1/edit + def edit + end - # POST /teams - # POST /teams.json - def create - @team = Team.new(team_params) + # POST /teams + # POST /teams.json + def create + @team = Team.new(team_params) - respond_to do |format| - if @team.save - format.html { redirect_to @team, notice: 'Team was successfully created.' } - format.json { render action: 'show', status: :created, location: @team } - else - format.html { render action: 'new' } - format.json { render json: @team.errors, status: :unprocessable_entity } - end - end - end + respond_to do |format| + if @team.save + format.html { redirect_to @team, notice: 'Team was successfully created.' } + format.json { render action: 'show', status: :created, location: @team } + else + format.html { render action: 'new' } + format.json { render json: @team.errors, status: :unprocessable_entity } + end + end + end - # PATCH/PUT /teams/1 - # PATCH/PUT /teams/1.json - def update - respond_to do |format| - if @team.update(team_params) - format.html { redirect_to @team, notice: 'Team was successfully updated.' } - format.json { head :no_content } - else - format.html { render action: 'edit' } - format.json { render json: @team.errors, status: :unprocessable_entity } - end - end - end + # PATCH/PUT /teams/1 + # PATCH/PUT /teams/1.json + def update + respond_to do |format| + if @team.update(team_params) + format.html { redirect_to @team, notice: 'Team was successfully updated.' } + format.json { head :no_content } + else + format.html { render action: 'edit' } + format.json { render json: @team.errors, status: :unprocessable_entity } + end + end + end - # DELETE /teams/1 - # DELETE /teams/1.json - def destroy - @team.destroy - respond_to do |format| - format.html { redirect_to teams_url } - format.json { head :no_content } - end - end + # DELETE /teams/1 + # DELETE /teams/1.json + def destroy + @team.destroy + respond_to do |format| + format.html { redirect_to teams_url } + format.json { head :no_content } + end + end - private - # Use callbacks to share common setup or constraints between actions. - def set_team - @team = Team.find(params[:id]) - end + private + # Use callbacks to share common setup or constraints between actions. + def set_team + @team = Team.find(params[:id]) + end - # Never trust parameters from the scary internet, only allow the white list through. - def team_params - params.require(:team).permit(:match_id) - end + # Never trust parameters from the scary internet, only allow the white list through. + def team_params + params.require(:team).permit(:match_id) + end end diff --git a/app/controllers/tournaments_controller.rb b/app/controllers/tournaments_controller.rb index 165ad87..9cf3404 100644 --- a/app/controllers/tournaments_controller.rb +++ b/app/controllers/tournaments_controller.rb @@ -1,138 +1,148 @@ class TournamentsController < ApplicationController - before_action :set_tournament, only: [:show, :edit, :update, :destroy, :join] - before_action :check_perms, only: [:new, :create, :edit, :destroy] + before_action :set_tournament, only: [:show, :edit, :update, :destroy, :join] + before_action :check_perms, only: [:new, :create, :edit, :destroy] - # GET /tournaments - # GET /tournaments.json - def index - @tournaments = Tournament.all - end + # GET /tournaments + # GET /tournaments.json + def index + @tournaments = Tournament.all + end - # GET /tournaments/1 - # GET /tournaments/1.json - def show - case @tournament.status - when 0 - when 1..2 - redirect_to "/tournaments/" + @tournament.id.to_s + "/matches" #tournament_matches_page(@tournament) - end - end + # GET /tournaments/1 + # GET /tournaments/1.json + def show + respond_to do |format| + format.html { + case @tournament.status + when 0 + render action: 'show' + when 1..2 + redirect_to "/tournaments/" + @tournament.id.to_s + "/matches" #tournament_matches_page(@tournament) + end + } + format.json { + data = JSON.parse(@tournament.to_json) + data["players"] = @tournament.players; + render :json => data.to_json + } + end + end - # GET /tournaments/new - def new - @games = Game.all - @tournament = Tournament.new(game: Game.find_by_id(params[:game])) - end + # GET /tournaments/new + def new + @games = Game.all + @tournament = Tournament.new(game: Game.find_by_id(params[:game])) + end - # GET /tournaments/1/edit - def edit - if params['close_action'] == 'close' - @tournament.status = 1 - @tournament.save - @tournament.setup(@tournament) - redirect_to "/tournaments" - end - end + # GET /tournaments/1/edit + def edit + if params['close_action'] == 'close' + @tournament.status = 1 + @tournament.save + @tournament.setup(@tournament) + redirect_to "/tournaments" + end + end - # POST /tournaments - # POST /tournaments.json - def create - @tournament = Tournament.new(tournament_params) - @tournament.status = 0 - respond_to do |format| - if @tournament.save - @tournament.hosts.push(current_user) - format.html { redirect_to @tournament, notice: 'Tournament was successfully created.' } - format.json { render action: 'show', status: :created, location: @tournament } - else - format.html { render action: 'new' } - format.json { render json: @tournament.errors, status: :unprocessable_entity } - end - end - end + # POST /tournaments + # POST /tournaments.json + def create + @tournament = Tournament.new(tournament_params) + @tournament.status = 0 + respond_to do |format| + if @tournament.save + @tournament.hosts.push(current_user) + format.html { redirect_to @tournament, notice: 'Tournament was successfully created.' } + format.json { render action: 'show', status: :created, location: @tournament } + else + format.html { render action: 'new' } + format.json { render json: @tournament.errors, status: :unprocessable_entity } + end + end + end - # PATCH/PUT /tournaments/1 - # PATCH/PUT /tournaments/1.json - def update - - if params[:update_action].nil? - check_perms - respond_to do |format| - if @tournament.update(tournament_params) - format.html { redirect_to @tournament, notice: 'Tournament was successfully updated.' } - format.json { head :no_content } - else - format.html { render action: 'edit' } - format.json { render json: @tournament.errors, status: :unprocessable_entity } - end - end - else - case params[:update_action] - when "join" - respond_to do |format| - if @tournament.join(current_user) - format.html { render action: 'show', notice: 'You have joined this tournament.' } - format.json { head :no_content } - end - format.html { render action: 'permission_denied', status: :forbidden } - format.json { render json: "Permission denied", status: :forbidden } - end - when "leave" - respond_to do |format| - if @tournament.leave(current_user) - format.html {redirect_to tournaments_url, notice: 'You have left the tournament.' } - format.json { head :no_content } - end - format.html {redirect_to @tournament, notice: 'You were\'t a part of this tournament.' } - format.json { render json: "Permission denied", status: :forbidden } - end - when "open" - respond_to do |format| - if @tournament.setup - format.html { render action: 'show', notice: 'You have joined this tournament.' } - format.json { head :no_content } - end - format.html { render action: 'permission_denied', status: :forbidden } - format.json { render json: "Permission denied", status: :forbidden } - end - #when "close" - # TODO - else - respond_to do |format| - format.html { render action: 'show', notice: "Invalid action", status: :unprocessable_entity } - format.json { render json: @tournament.errors, status: :unprocessable_entity } - end - end - end - end + # PATCH/PUT /tournaments/1 + # PATCH/PUT /tournaments/1.json + def update - # DELETE /tournaments/1 - # DELETE /tournaments/1.json - def destroy - @tournament.destroy - respond_to do |format| - format.html { redirect_to tournaments_url } - format.json { head :no_content } - end - end + if params[:update_action].nil? + check_perms + respond_to do |format| + if @tournament.update(tournament_params) + format.html { redirect_to @tournament, notice: 'Tournament was successfully updated.' } + format.json { head :no_content } + else + format.html { render action: 'edit' } + format.json { render json: @tournament.errors, status: :unprocessable_entity } + end + end + else + case params[:update_action] + when "join" + respond_to do |format| + if @tournament.join(current_user) + format.html { render action: 'show', notice: 'You have joined this tournament.' } + format.json { head :no_content } + end + format.html { render action: 'permission_denied', status: :forbidden } + format.json { render json: "Permission denied", status: :forbidden } + end + when "leave" + respond_to do |format| + if @tournament.leave(current_user) + format.html {redirect_to tournaments_url, notice: 'You have left the tournament.' } + format.json { head :no_content } + end + format.html {redirect_to @tournament, notice: 'You were\'t a part of this tournament.' } + format.json { render json: "Permission denied", status: :forbidden } + end + when "open" + respond_to do |format| + if @tournament.setup + format.html { render action: 'show', notice: 'You have joined this tournament.' } + format.json { head :no_content } + end + format.html { render action: 'permission_denied', status: :forbidden } + format.json { render json: "Permission denied", status: :forbidden } + end + #when "close" + # TODO + else + respond_to do |format| + format.html { render action: 'show', notice: "Invalid action", status: :unprocessable_entity } + format.json { render json: @tournament.errors, status: :unprocessable_entity } + end + end + end + end - private - # Use callbacks to share common setup or constraints between actions. - def set_tournament - @tournament = Tournament.find(params[:id]) - end + # DELETE /tournaments/1 + # DELETE /tournaments/1.json + def destroy + @tournament.destroy + respond_to do |format| + format.html { redirect_to tournaments_url } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_tournament + @tournament = Tournament.find(params[:id]) + end def check_perms - unless (signed_in? and current_user.in_group?(:host)) - respond_to do |format| - format.html { render action: 'permission_denied', status: :forbidden } - format.json { render json: "Permission denied", status: :forbidden } - end - end - end + unless (signed_in? and current_user.in_group?(:host)) + respond_to do |format| + format.html { render action: 'permission_denied', status: :forbidden } + format.json { render json: "Permission denied", status: :forbidden } + end + end + end - # Never trust parameters from the scary internet, only allow the white list through. - def tournament_params - params.require(:tournament).permit(:game, :name, :game_id, :status, :min_players_per_team, :max_players_per_team, :min_teams_per_match, :max_teams_per_match, :set_rounds, :randomized_teams) - end + # Never trust parameters from the scary internet, only allow the white list through. + def tournament_params + params.require(:tournament).permit(:game, :name, :game_id, :status, :min_players_per_team, :max_players_per_team, :min_teams_per_match, :max_teams_per_match, :set_rounds, :randomized_teams) + end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 70facca..60857f1 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,96 +1,94 @@ class UsersController < ApplicationController - before_action :set_user, only: [:show, :edit, :update, :destroy] - before_action :perms_edit, only: [:edit, :update, :destroy] - before_action :perms_create, only: [:new, :create] + before_action :set_user, only: [:show, :edit, :update, :destroy] + before_action :perms_edit, only: [:edit, :update, :destroy] + before_action :perms_create, only: [:new, :create] - # GET /users - # GET /users.json - def index - @users = User.all - end + # GET /users + # GET /users.json + def index + @users = User.all + end - # GET /users/1 - # GET /users/1.json - def show - @user = User.find(params[:id]) - end + # GET /users/1 + # GET /users/1.json + def show + end - # GET /users/new - def new - @user = User.new - end + # GET /users/new + def new + @user = User.new + end - # GET /users/1/edit - def edit - end + # GET /users/1/edit + def edit + end - # POST /users - # POST /users.json - def create - @user = User.new(user_params) - @user.groups = 0 - respond_to do |format| - if @user.save - sign_in @user - format.html { redirect_to root_path, notice: 'User was successfully created.' } - format.json { render action: 'show', status: :created, location: @user } - else - format.html { render action: 'new', status: :unprocessable_entity } - format.json { render json: @user.errors, status: :unprocessable_entity } - end - end - end + # POST /users + # POST /users.json + def create + @user = User.new(user_params) + respond_to do |format| + if @user.save + sign_in @user + format.html { redirect_to root_path, notice: 'User was successfully created.' } + format.json { render action: 'show', status: :created, location: @user } + else + format.html { render action: 'new', status: :unprocessable_entity } + format.json { render json: @user.errors, status: :unprocessable_entity } + end + end + end - # PATCH/PUT /users/1 - # PATCH/PUT /users/1.json - def update - respond_to do |format| - if @user.update(user_params) - format.html { redirect_to @user, notice: 'User was successfully updated.' } - format.json { head :no_content } - else - format.html { render action: 'edit' } - format.json { render json: @user.errors, status: :unprocessable_entity } - end - end - end + # PATCH/PUT /users/1 + # PATCH/PUT /users/1.json + def update + respond_to do |format| + if @user.update(user_params) + format.html { redirect_to @user, notice: 'User was successfully updated.' } + format.json { head :no_content } + else + format.html { render action: 'edit' } + format.json { render json: @user.errors, status: :unprocessable_entity } + end + end + end - # DELETE /users/1 - # DELETE /users/1.json - def destroy - @user.destroy - respond_to do |format| - format.html { redirect_to users_url } - format.json { head :no_content } - end - end + # DELETE /users/1 + # DELETE /users/1.json + def destroy + @user.destroy + respond_to do |format| + format.html { redirect_to users_url } + format.json { head :no_content } + end + end - private - # Use callbacks to share common setup or constraints between actions. - def set_user - @user = User.find(params[:id]) - end + private + # Use callbacks to share common setup or constraints between actions. + def set_user + @user = User.find(params[:id]) + end - def perms_edit - unless (current_user == @user) or (signed_in? and current_user.in_group? :admin) - respond_to do |format| - format.html { render action: 'permission_denied', status: :forbidden } - format.json { render json: "Permission denied", status: :forbidden } - end - end - end + def perms_edit + unless (current_user == @user) or (signed_in? and current_user.in_group? :admin) + respond_to do |format| + format.html { render action: 'permission_denied', status: :forbidden } + format.json { render json: "Permission denied", status: :forbidden } + end + end + end - def perms_create - if signed_in? - respond_to do |format| - format.html { render action: 'already_signed_in', status: :unprocessable_entity } - format.json { render json: "Already signed in", status: :unprocessable_entity } - end - end - end + def perms_create + if signed_in? + respond_to do |format| + format.html { render action: 'already_signed_in', status: :unprocessable_entity } + format.json { render json: "Already signed in", status: :unprocessable_entity } + end + end + end - # Never trust parameters from the scary internet, only allow the white list through. - def user_params - params.require(:user).permit(:name, :email, :user_name, :password, :password_confirmation) - end + # Never trust parameters from the scary internet, only allow the white list through. + def user_params + params.require(:user).permit(:name, :email, :user_name, :password, :password_confirmation) + end end diff --git a/app/helpers/remote_usernames_helper.rb b/app/helpers/remote_usernames_helper.rb new file mode 100644 index 0000000..3240c4f --- /dev/null +++ b/app/helpers/remote_usernames_helper.rb @@ -0,0 +1,2 @@ +module RemoteUsernamesHelper +end diff --git a/app/helpers/sessions_helper.rb b/app/helpers/sessions_helper.rb index 046ca6f..54e4b0d 100644 --- a/app/helpers/sessions_helper.rb +++ b/app/helpers/sessions_helper.rb @@ -1,73 +1,65 @@ module SessionsHelper - def sign_in(user) - #create a new remember token - remember_token = User.new_remember_token - #place token inside of the browser - cookies.permanent[:remember_token] = remember_token - #save the hashed token to the database - user.update_attribute(:remember_token, - User.hash(remember_token)) - #set the current user to be the given user - self.current_user = user - end + @session = Session.new(user: user) + raw_token = @session.create_token + @session.save # FIXME: error handling -# The curret_user=(user) is the conversion of self.current_user = user - def current_user=(user) + @token = Session.hash_token(raw_token) + cookies.permanent[:remember_token] = raw_token + + #set the current user to be the given user @current_user = user end -# sets the @current_user instance virable to the user corresponding -# to the remember token, but only if @current_user is undefined -# since the remember token is hashed, we need to hash the cookie -# to find match the remember token - def current_user - remember_token = User.hash(cookies[:remember_token]) - @current_user ||= User.find_by(remember_token: remember_token) - end + # sets the @current_user instance virable to the user corresponding + # to the remember token, but only if @current_user is undefined + # since the remember token is hashed, we need to hash the cookie + # to find match the remember token + def current_user + @token ||= Session.hash_token(cookies[:remember_token]) + @session ||= Session.find_by(token: @token) + @current_user ||= (@session.nil? ? nil : @session.user) + end # checks if someone is currently signed in def signed_in? !current_user.nil? end - def sign_out - current_user.update_attribute(:remember_token, User.hash(User.new_remember_token)) - cookies.delete(:remember_token) - self.current_user = nil - end - -=begin - -This is for anyone that cares about how long a user is signed -in: - -Currently I have a user to be signed in forever unless they -log out (cookies.permanent....). - -If you want to change that, change line 7 to this: - -cookies[:remember_token] = { value: remember_token, - expires: 20.years.from_now.utc } - -which will expire the cookie in 20 years from its date of -creation. - -Oddly enough, this line above is equivalent to the: - -cookies.permanent - -This is just a short cut for this line since most people -create permanent cookies these days. - -Other times are: - -10.weeks.from_now - -5.days.ago - -etc... - -=end + def sign_out + if signed_in? + @session.destroy + end + @current_user = nil + cookies.delete(:remember_token) + end + # This is for anyone that cares about how long a user is signed + # in: + # + # Currently I have a user to be signed in forever unless they + # log out (cookies.permanent....). + # + # If you want to change that, change line 7 to this: + # + # cookies[:remember_token] = { value: remember_token, + # expires: 20.years.from_now.utc } + # + # which will expire the cookie in 20 years from its date of + # creation. + # + # Oddly enough, this line above is equivalent to the: + # + # cookies.permanent + # + # This is just a short cut for this line since most people + # create permanent cookies these days. + # + # Other times are: + # + # 10.weeks.from_now + # + # 5.days.ago + # + # etc... end diff --git a/app/models/alert.rb b/app/models/alert.rb index 343c269..0516355 100644 --- a/app/models/alert.rb +++ b/app/models/alert.rb @@ -1,3 +1,3 @@ class Alert < ActiveRecord::Base - belongs_to :author + belongs_to :author end diff --git a/app/models/game_setting.rb b/app/models/game_setting.rb index e147b15..bff8d97 100644 --- a/app/models/game_setting.rb +++ b/app/models/game_setting.rb @@ -1,3 +1,3 @@ class GameSetting < ActiveRecord::Base - belongs_to :game + belongs_to :game end diff --git a/app/models/match.rb b/app/models/match.rb index 782dce8..35deb20 100644 --- a/app/models/match.rb +++ b/app/models/match.rb @@ -1,8 +1,8 @@ class Match < ActiveRecord::Base - belongs_to :tournament + belongs_to :tournament - has_and_belongs_to_many :teams + has_and_belongs_to_many :teams - belongs_to :winner, class_name: "Team" + belongs_to :winner, class_name: "Team" end diff --git a/app/models/pm.rb b/app/models/pm.rb index ab5af3b..9fce2b3 100644 --- a/app/models/pm.rb +++ b/app/models/pm.rb @@ -1,4 +1,4 @@ class Pm < ActiveRecord::Base - belongs_to :author - belongs_to :recipient + belongs_to :author + belongs_to :recipient end diff --git a/app/models/remote_username.rb b/app/models/remote_username.rb index 94e5063..c477f8a 100644 --- a/app/models/remote_username.rb +++ b/app/models/remote_username.rb @@ -1,4 +1,4 @@ class RemoteUsername < ActiveRecord::Base - belongs_to :game - belongs_to :user + belongs_to :game + belongs_to :user end diff --git a/app/models/score.rb b/app/models/score.rb index a9b9c71..11ee9a6 100644 --- a/app/models/score.rb +++ b/app/models/score.rb @@ -1,4 +1,4 @@ class Score < ActiveRecord::Base - belongs_to :user - belongs_to :match + belongs_to :user + belongs_to :match end diff --git a/app/models/session.rb b/app/models/session.rb index c66afec..f5e642b 100644 --- a/app/models/session.rb +++ b/app/models/session.rb @@ -1,3 +1,42 @@ class Session < ActiveRecord::Base - belongs_to :user + belongs_to :user + + ## + # Create a random remember token for the user. This will be + # changed every time the user creates a new session. + # + # If you want this value, hang on to it; the raw value is + # discarded afterward. + # + # By changing the cookie every new session, any hijacked sessions + # (where the attacker steals a cookie to sign in as a certain + # user) will expire the next time the user signs back in. + # + # The random string is of length 16 composed of A-Z, a-z, 0-9 + # This is the browser's cookie value. + def create_token() + t = SecureRandom.urlsafe_base64 + self.token = Session.hash_token(t) + t + end + + ## + # Encrypt the remember token. + # This is the encrypted version of the cookie stored on + # the database. + # + # The reasoning for storing a hashed token is so that even if + # the database is compromised, the attacker won't be able to use + # the remember tokens to sign in. + def Session.hash_token(token) + # SHA-1 (Secure Hash Algorithm) is a US engineered hash + # function that produces a 20 byte hash value which typically + # forms a hexadecimal number 40 digits long. + # The reason I am not using the Bcrypt algorithm is because + # SHA-1 is much faster and I will be calling this on + # every page a user accesses. + # + # https://en.wikipedia.org/wiki/SHA-1 + Digest::SHA1.hexdigest(token.to_s) + end end diff --git a/app/models/team.rb b/app/models/team.rb index 2348de5..7aae7c2 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -1,5 +1,5 @@ class Team < ActiveRecord::Base - belongs_to :match - has_and_belongs_to_many :matches - has_and_belongs_to_many :users + 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 21dc9bb..87b516e 100644 --- a/app/models/tournament.rb +++ b/app/models/tournament.rb @@ -43,6 +43,4 @@ class Tournament < ActiveRecord::Base end end end - - end diff --git a/app/models/tournament_preference.rb b/app/models/tournament_preference.rb index 1f335e3..3d15061 100644 --- a/app/models/tournament_preference.rb +++ b/app/models/tournament_preference.rb @@ -1,3 +1,3 @@ class TournamentPreference < ActiveRecord::Base - belongs_to :tournament + belongs_to :tournament end diff --git a/app/models/user.rb b/app/models/user.rb index 6e439fb..277d885 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -2,17 +2,14 @@ class User < ActiveRecord::Base has_and_belongs_to_many :tournaments_played, class_name: "Tournament", foreign_key: "player_id", join_table: "players_tournaments" has_and_belongs_to_many :tournaments_hosted, class_name: "Tournament", foreign_key: "host_id", join_table: "hosts_tournaments" has_and_belongs_to_many :teams + has_many :sessions before_save { self.email = email.downcase } before_save { self.user_name = user_name } - ## - # Rails looks for the create_remember_token and runs the method - # before anything else. - # - # This method cannot be called by a user since it is denoted - # as private. - before_create :create_remember_token + def after_initialize + self.permissions = 0 + end def in_group?(group) case group @@ -77,11 +74,11 @@ class User < ActiveRecord::Base # validity validates(:name, presence: true, length: { maximum: 50 }) validates(:email, presence: true, format: {with: - VALID_EMAIL_REG}, - uniqueness: { case_sensitive: false }) + VALID_EMAIL_REG}, + uniqueness: { case_sensitive: false }) validates(:user_name, presence: true, length:{maximum: 50}, - format: {with: VALID_USER_NAME_REG }, - uniqueness: {case_sensitive: false }) + format: {with: VALID_USER_NAME_REG }, + uniqueness: {case_sensitive: false }) ## # Instead of adding password and password_confirmation @@ -93,59 +90,4 @@ class User < ActiveRecord::Base has_secure_password validates :password, length: { minimum: 6 } - - ## - # Create a random remember token for the user. This will be - # changed every time the user creates a new session. - # - # By changing the cookie every new session, any hijacked sessions - # (where the attacker steals a cookie to sign in as a certain - # user) will expire the next time the user signs back in. - # - # The random string is of length 16 composed of A-Z, a-z, 0-9 - # This is the browser's cookie value. - def User.new_remember_token - SecureRandom.urlsafe_base64 - end - - ## - # Encrypt the remember token. - # This is the encrypted version of the cookie stored on - # the database. - # - # The reasoning for storing a hashed token is so that even if - # the database is compromised, the attacker won't be able to use - # the remember tokens to sign in. - def User.hash(token) - Digest::SHA1.hexdigest(token.to_s) - end - - ## - # SHA-1 (Secure Hash Algorithm) is a US engineered hash - # function that produces a 20 byte hash value which typically - # forms a hexadecimal number 40 digits long. - # The reason I am not using the Bcrypt algorithm is because - # SHA-1 is much faster and I will be calling this on - # every page a user accesses. - # - # https://en.wikipedia.org/wiki/SHA-1 - - - # Everything under private is hidden so you cannot call. - private - - ## - # Create_remember_token in order to ensure a user always has - # a remember token. - def create_remember_token - self.remember_token = User.hash(User.new_remember_token) - end - - ## - # In order to ensure that someone did not accidentally submit - # two accounts rapidly (which would throw off the validates - # for user_name and email), I added an index to the Users - # email and user_name in the database to ensure uniqueness - # This also gives and index to the user_name and email - # so finding a user SHOULD be easier for the database. end diff --git a/app/views/matches/index.html.erb b/app/views/matches/index.html.erb index 4193f16..0f86da6 100644 --- a/app/views/matches/index.html.erb +++ b/app/views/matches/index.html.erb @@ -36,9 +36,9 @@ width="<%= 300 * @matches.count / 2 + 50 %>" height="<%= 200 * @matches.count + 50 %>" xmlns="http://www.w3.org/2000/svg"> - <% @matches.each do |tournament | %> + <% (1..@matches.count).each do |i| %> <g class="svg-match" > - + </g> <% end %> diff --git a/app/views/remote_usernames/_form.html.erb b/app/views/remote_usernames/_form.html.erb new file mode 100644 index 0000000..5da1f8f --- /dev/null +++ b/app/views/remote_usernames/_form.html.erb @@ -0,0 +1,29 @@ +<%= form_for(@remote_username) do |f| %> + <% if @remote_username.errors.any? %> + <div id="error_explanation"> + <h2><%= pluralize(@remote_username.errors.count, "error") %> prohibited this remote_username from being saved:</h2> + + <ul> + <% @remote_username.errors.full_messages.each do |msg| %> + <li><%= msg %></li> + <% end %> + </ul> + </div> + <% end %> + + <div class="field"> + <%= f.label :game_id %><br> + <%= f.text_field :game_id %> + </div> + <div class="field"> + <%= f.label :user_id %><br> + <%= f.text_field :user_id %> + </div> + <div class="field"> + <%= f.label :user_name %><br> + <%= f.text_field :user_name %> + </div> + <div class="actions"> + <%= f.submit %> + </div> +<% end %> diff --git a/app/views/remote_usernames/edit.html.erb b/app/views/remote_usernames/edit.html.erb new file mode 100644 index 0000000..52d4b37 --- /dev/null +++ b/app/views/remote_usernames/edit.html.erb @@ -0,0 +1,6 @@ +<h1>Editing remote_username</h1> + +<%= render 'form' %> + +<%= link_to 'Show', @remote_username %> | +<%= link_to 'Back', remote_usernames_path %> diff --git a/app/views/remote_usernames/index.html.erb b/app/views/remote_usernames/index.html.erb new file mode 100644 index 0000000..14f5876 --- /dev/null +++ b/app/views/remote_usernames/index.html.erb @@ -0,0 +1,31 @@ +<h1>Listing remote_usernames</h1> + +<table> + <thead> + <tr> + <th>Game</th> + <th>User</th> + <th>User name</th> + <th></th> + <th></th> + <th></th> + </tr> + </thead> + + <tbody> + <% @remote_usernames.each do |remote_username| %> + <tr> + <td><%= remote_username.game %></td> + <td><%= remote_username.user %></td> + <td><%= remote_username.user_name %></td> + <td><%= link_to 'Show', remote_username %></td> + <td><%= link_to 'Edit', edit_remote_username_path(remote_username) %></td> + <td><%= link_to 'Destroy', remote_username, method: :delete, data: { confirm: 'Are you sure?' } %></td> + </tr> + <% end %> + </tbody> +</table> + +<br> + +<%= link_to 'New Remote username', new_remote_username_path %> diff --git a/app/views/remote_usernames/index.json.jbuilder b/app/views/remote_usernames/index.json.jbuilder new file mode 100644 index 0000000..c9fbc0f --- /dev/null +++ b/app/views/remote_usernames/index.json.jbuilder @@ -0,0 +1,4 @@ +json.array!(@remote_usernames) do |remote_username| + json.extract! remote_username, :id, :game_id, :user_id, :user_name + json.url remote_username_url(remote_username, format: :json) +end diff --git a/app/views/remote_usernames/new.html.erb b/app/views/remote_usernames/new.html.erb new file mode 100644 index 0000000..b9cfcf4 --- /dev/null +++ b/app/views/remote_usernames/new.html.erb @@ -0,0 +1,5 @@ +<h1>New remote_username</h1> + +<%= render 'form' %> + +<%= link_to 'Back', remote_usernames_path %> diff --git a/app/views/remote_usernames/show.html.erb b/app/views/remote_usernames/show.html.erb new file mode 100644 index 0000000..416ca9d --- /dev/null +++ b/app/views/remote_usernames/show.html.erb @@ -0,0 +1,19 @@ +<p id="notice"><%= notice %></p> + +<p> + <strong>Game:</strong> + <%= @remote_username.game %> +</p> + +<p> + <strong>User:</strong> + <%= @remote_username.user %> +</p> + +<p> + <strong>User name:</strong> + <%= @remote_username.user_name %> +</p> + +<%= link_to 'Edit', edit_remote_username_path(@remote_username) %> | +<%= link_to 'Back', remote_usernames_path %> diff --git a/app/views/remote_usernames/show.json.jbuilder b/app/views/remote_usernames/show.json.jbuilder new file mode 100644 index 0000000..1a0f6f9 --- /dev/null +++ b/app/views/remote_usernames/show.json.jbuilder @@ -0,0 +1 @@ +json.extract! @remote_username, :id, :game_id, :user_id, :user_name, :created_at, :updated_at diff --git a/app/views/tournaments/_form.html.erb b/app/views/tournaments/_form.html.erb index 3dadbf7..38855a0 100644 --- a/app/views/tournaments/_form.html.erb +++ b/app/views/tournaments/_form.html.erb @@ -24,6 +24,26 @@ <%= f.number_field :status %> </div> <div class="field"> + <%= f.label :min_players_per_team %><br> + <%= f.number_field :min_players_per_team %> + </div> + <div class="field"> + <%= f.label :max_players_per_team %><br> + <%= f.number_field :max_players_per_team %> + </div> + <div class="field"> + <%= f.label :min_teams_per_match %><br> + <%= f.number_field :min_teams_per_match %> + </div> + <div class="field"> + <%= f.label :max_teams_per_match %><br> + <%= f.number_field :max_teams_per_match %> + </div> + <div class="field"> + <%= f.label :set_rounds %><br> + <%= f.number_field :set_rounds %> + </div> + <div class="field"> <%= f.label :randomized_teams %><br> <%= f.check_box :randomized_teams %> </div> diff --git a/app/views/tournaments/index.json.jbuilder b/app/views/tournaments/index.json.jbuilder index 32587df..4038f04 100644 --- a/app/views/tournaments/index.json.jbuilder +++ b/app/views/tournaments/index.json.jbuilder @@ -1,4 +1,4 @@ json.array!(@tournaments) do |tournament| - json.extract! tournament, :id, :name, :game_id, :status, :randomized_teams + json.extract! tournament, :id, :name, :game_id, :status, :min_players_per_team, :max_players_per_team, :min_teams_per_match, :max_teams_per_match, :set_rounds, :randomized_teams json.url tournament_url(tournament, format: :json) end diff --git a/app/views/tournaments/show.html.erb b/app/views/tournaments/show.html.erb index df85dcf..b771701 100644 --- a/app/views/tournaments/show.html.erb +++ b/app/views/tournaments/show.html.erb @@ -3,7 +3,7 @@ </h2> <div class="progress"> - <%= tag("div", {:class => "progress-bar progress-bar-warning", :style => "width: " +(@tournament.players.count * 100 / (@tournament.min_players_per_team * @tournament.min_teams_per_match)).to_s + "%", "aria-valuemax" => "100", "aria-valuemin" => "0", "aria-valuenow" => (@tournament.players.count * 100 / (@tournament.min_players_per_team * @tournament.min_teams_per_match)).to_s, "role" => "progressbar"}) %> + <%= tag("div", {:id => "prog-bar", :class => "progress-bar progress-bar-warning", :style => "width: " +(@tournament.players.count * 100 / (@tournament.min_players_per_team * @tournament.min_teams_per_match)).to_s + "%", "aria-valuemax" => "100", "aria-valuemin" => "0", "aria-valuenow" => (@tournament.players.count * 100 / (@tournament.min_players_per_team * @tournament.min_teams_per_match)).to_s, "role" => "progressbar"}) %> <span class="sr-only">60% Complete (warning)</span> </div> </div> @@ -11,45 +11,70 @@ <span id="tournament-side-params"> +<p> + <strong>Status:</strong> + <% if @tournament.status == 0 %> + Waiting for players... + <% else %> + Started + <% end %> +</p> + +<p> + <strong>Min players per team:</strong> + <%= @tournament.min_players_per_team %> +</p> + +<p> + <strong>Max players per team:</strong> + <%= @tournament.max_players_per_team %> +</p> + +<p> + <strong>Min teams per match:</strong> + <%= @tournament.min_teams_per_match %> +</p> + +<p> + <strong>Max teams per match:</strong> + <%= @tournament.max_teams_per_match %> +</p> + +<p> + <strong>Set rounds:</strong> + <%= @tournament.set_rounds %> +</p> + +<p> + <strong>Min players per team:</strong> + <%= @tournament.min_players_per_team %> +</p> + +<p> + <strong>Max players per team:</strong> + <%= @tournament.max_players_per_team %> +</p> + +<p> + <strong>Min teams per match:</strong> + <%= @tournament.min_teams_per_match %> +</p> + +<p> + <strong>Max teams per match:</strong> + <%= @tournament.max_teams_per_match %> +</p> + +<p> + <strong>Set rounds:</strong> + <%= @tournament.set_rounds %> +</p> + +<p> + <strong>Randomized teams:</strong> + <%= @tournament.randomized_teams %> +</p> - <p> - <strong>Status:</strong> - <% if @tournament.status == 0 %> - Waiting for players... - <% else %> - Started - <% end %> - </p> - - <p> - <strong>Min players per team:</strong> - <%= @tournament.min_players_per_team %> - </p> - - <p> - <strong>Max players per team:</strong> - <%= @tournament.max_players_per_team %> - </p> - - <p> - <strong>Min teams per match:</strong> - <%= @tournament.min_teams_per_match %> - </p> - - <p> - <strong>Max teams per match:</strong> - <%= @tournament.max_teams_per_match %> - </p> - - <p> - <strong>Set rounds:</strong> - <%= @tournament.set_rounds %> - </p> - - <p> - <strong>Randomized teams:</strong> - <%= @tournament.randomized_teams %> - </p> </span> <div > @@ -65,6 +90,7 @@ <h3 div="players-needed">Hmmm.... nobody's here yet! You and your friends should join the tournament.</h3> <% end %> +<div class="leave-buttons"> <%# If user can join, and user hasn't joined already, show the join tournment tag %> <% if @tournament.joinable_by?(current_user) && !@tournament.players.include?(current_user) %> <%= form_tag(tournament_path(@tournament), method: "put") do %> @@ -94,8 +120,29 @@ <%= link_to 'Back', tournaments_path %> | <%= link_to 'Cancel Tournament', @tournament, method: :delete, data: { confirm: 'Are you sure?' } %> <% end %> - +</div> <%end %> </div> +<script> +function donehandle( tournament ) { + if ( console && console.log ) { + var here = tournament["players"].length; + var needed = (tournament["min_teams_per_match"] * tournament["min_players_per_team"]); + var pct_complete = here / needed; + $("#prog-bar").width( (pct_complete * 100) +"%"); + $("#players-needed").text(here + " " + (here==1?"player has":"players have") + " signed up. " + needed + " players needed. "); + players = ""; + for (var i = 0; i < tournament["players"].length; i++) { + players = players+"<li><span class=\"black\">"+tournament["players"][i]["user_name"]+"</span></li>" + } + $("#tournament-users").html(players); + + } + setTimeout(function(){$.ajax({url: "<%= url_for @tournament %>.json"}).done(donehandle)}, 3000); +} + +$.ajax({url: "<%= url_for @tournament %>.json"}) + .done(donehandle); +</script> diff --git a/app/views/tournaments/show.json.jbuilder b/app/views/tournaments/show.json.jbuilder index d543c76..27fd5c0 100644 --- a/app/views/tournaments/show.json.jbuilder +++ b/app/views/tournaments/show.json.jbuilder @@ -1 +1 @@ -json.extract! @tournament, :id, :name, :game_id, :status, :randomized_teams, :created_at, :updated_at +json.extract! @tournament, :id, :name, :game_id, :status, :min_players_per_team, :max_players_per_team, :min_teams_per_match, :max_teams_per_match, :set_rounds, :randomized_teams, :created_at, :updated_at |