diff --git a/app/controllers/static_pages_controller.rb b/app/controllers/static_pages_controller.rb index 489a4c4..b350998 100644 --- a/app/controllers/static_pages_controller.rb +++ b/app/controllers/static_pages_controller.rb @@ -5,6 +5,7 @@ class StaticPagesController < ApplicationController tournaments_delegated = current_user.delegated_tournaments all_tournaments = tournaments_created + tournaments_delegated @tournaments = all_tournaments.sort_by{|t| t.daysUntil} + @schools = current_user.delegated_schools end def not_allowed diff --git a/app/controllers/tournaments_controller.rb b/app/controllers/tournaments_controller.rb index 7fa29bd..5604143 100644 --- a/app/controllers/tournaments_controller.rb +++ b/app/controllers/tournaments_controller.rb @@ -1,10 +1,30 @@ class TournamentsController < ApplicationController - before_action :set_tournament, only: [:matches,:weigh_in,:weigh_in_weight,:create_custom_weights,:show,:edit,:update,:destroy,:up_matches,:no_matches,:team_scores,:brackets,:generate_matches,:bracket,:all_brackets] + before_action :set_tournament, only: [:delegate,:matches,:weigh_in,:weigh_in_weight,:create_custom_weights,:show,:edit,:update,:destroy,:up_matches,:no_matches,:team_scores,:brackets,:generate_matches,:bracket,:all_brackets] before_filter :check_access_manage, only: [:weigh_in,:weigh_in_weight,:create_custom_weights,:update,:edit,:generate_matches,:matches] - before_filter :check_access_destroy, only: [:destroy] + before_filter :check_access_destroy, only: [:destroy,:delegate] before_filter :check_for_matches, only: [:up_matches,:bracket,:all_brackets] - + + def delegate + if params[:search] + @users = User.search(params[:search]) + elsif params[:user] + @user = User.find(params[:user]["id"]) + @delegate = TournamentDelegate.new + @delegate.user_id = @user.id + @delegate.tournament_id = @tournament.id + respond_to do |format| + if @delegate.save + format.html { redirect_to "/tournaments/#{@tournament.id}/delegate", notice: 'Delegated permissions added successfully' } + else + format.html { redirect_to "/tournaments/#{@tournament.id}/delegate", notice: 'There was an issue delegating permissions please try again' } + end + end + else + @users_delegates = @tournament.delegates + end + end + def matches @matches = @tournament.matches.sort_by{|m| m.bout_number} if @match diff --git a/app/models/ability.rb b/app/models/ability.rb index 57e7a74..10b7574 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -40,7 +40,7 @@ class Ability end #Can manage school if tournament owner can :manage, School do |school| - school.tournament.user.id == user.id + school.tournament.user_id == user.id end #Can manage school if tournament delegate can :manage, School do |school| diff --git a/app/models/school_delegate.rb b/app/models/school_delegate.rb index 382079c..d85f2f6 100644 --- a/app/models/school_delegate.rb +++ b/app/models/school_delegate.rb @@ -1,2 +1,4 @@ class SchoolDelegate < ActiveRecord::Base + belongs_to :school + belongs_to :user end diff --git a/app/models/tournament_delegate.rb b/app/models/tournament_delegate.rb index c0e197b..310998a 100644 --- a/app/models/tournament_delegate.rb +++ b/app/models/tournament_delegate.rb @@ -1,4 +1,4 @@ class TournamentDelegate < ActiveRecord::Base - # belongs_to :tournament - # has_one :user + belongs_to :tournament + belongs_to :user end diff --git a/app/models/user.rb b/app/models/user.rb index e9279e6..ea5745c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -2,10 +2,29 @@ class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable has_many :tournaments - has_many :delegated_tournaments, class_name: "TournamentDelegate" - has_many :delegated_schools, class_name: "SchoolDelegate" + has_many :delegated_tournament_permissions, class_name: "TournamentDelegate" + has_many :delegated_school_permissions, class_name: "SchoolDelegate" devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable - + + def delegated_tournaments + tournaments_delegated = [] + delegated_tournament_permissions.each do |t| + tournaments_delegated << t.tournament + end + tournaments_delegated + end + + def delegated_schools + schools_delegated = [] + delegated_school_permissions.each do |t| + schools_delegated << t.school + end + schools_delegated + end + + def self.search(search) + where("email LIKE ?", "%#{search}%") + end end diff --git a/app/views/static_pages/my_tournaments.html.erb b/app/views/static_pages/my_tournaments.html.erb index 40a1be6..265ea0e 100644 --- a/app/views/static_pages/my_tournaments.html.erb +++ b/app/views/static_pages/my_tournaments.html.erb @@ -27,6 +27,8 @@ <%= link_to 'Show', tournament, :class=>"btn btn-default btn-sm" %> <% if can? :manage, tournament %> <%= link_to 'Edit', edit_tournament_path(tournament), :class=>"btn btn-primary btn-sm" %> + <% end %> + <% if can? :destroy, tournament %> <%= link_to 'Destroy', tournament, method: :delete, data: { confirm: 'Are you sure?' }, :class=>"btn btn-danger btn-sm" %> <% end %> @@ -34,7 +36,38 @@ <% end %> - +
+
+<% if @schools.size > 0 %> +

My Schools

+
+
+ + + + + + + + + + + + <% @schools.each do |school| %> + + + + + + + <% end %> + +
NameTournament NameTournament Date
<%= school.name %><%= tournament.school.name %><%= tournament.school.date %><%= link_to 'Show', school, :class=>"btn btn-default btn-sm" %> + <% if can? :manage, school %> + <%= link_to 'Edit', edit_school_path(school), :class=>"btn btn-primary btn-sm" %> + <% end %> +
+<% end %>
diff --git a/app/views/tournaments/delegate.html.erb b/app/views/tournaments/delegate.html.erb new file mode 100644 index 0000000..fac3b58 --- /dev/null +++ b/app/views/tournaments/delegate.html.erb @@ -0,0 +1,65 @@ +<%= link_to "Back to #{@tournament_name}", "/tournaments/#{@tournament_id}", :class=>"btn btn-default" %> +
+
+ + + +<% if @users %> +

Search results

<%= form_tag(tournament_delegate_path, :method => "get", id: "search-form") do %> + <%= text_field_tag :search, params[:search], placeholder: "Search users" %> + <%= submit_tag "Search" %> + <% end %> +

Search by email address

+
+
+ + + + + + + + + <% @users.each do |user| %> + + + + + + <% end %> + +
User Email
<%= user.email %> + <%= form_for user, :url => url_for(:controller => 'tournaments', :action => 'delegate', :method => "patch") do |f| %> + <%= f.hidden_field :id, :value => user.id %> + <% if can? :manage, @tournament %> + <%= submit_tag "Give permissions", :class=>"btn btn-success"%> + <% end %> + <% end %> +
+<% end %> + +<% if @users_delegates %> +

Delegated users

<%= form_tag(tournament_delegate_path, :method => "get", id: "search-form") do %> + <%= text_field_tag :search, params[:search], placeholder: "Search users" %> + <%= submit_tag "Search" %> + <% end %> +

Search by email address

+
+
+ + + + + + + + <% @users_delegates.each do |delegate| %> + + + + + + <% end %> + +
User Email
<%= delegate.user.email %>
+<% end %> \ No newline at end of file diff --git a/app/views/tournaments/index.html.erb b/app/views/tournaments/index.html.erb index 85d0313..f250520 100644 --- a/app/views/tournaments/index.html.erb +++ b/app/views/tournaments/index.html.erb @@ -31,6 +31,8 @@ <%= link_to 'Show', tournament, :class=>"btn btn-default btn-sm" %> <% if can? :manage, tournament %> <%= link_to 'Edit', edit_tournament_path(tournament), :class=>"btn btn-primary btn-sm" %> + <% end %> + <% if can? :destroy, tournament %> <%= link_to 'Destroy', tournament, method: :delete, data: { confirm: 'Are you sure?' }, :class=>"btn btn-danger btn-sm" %> <% end %> diff --git a/config/routes.rb b/config/routes.rb index d98061e..6b77d97 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -40,6 +40,11 @@ Wrestling::Application.routes.draw do get 'tournaments/:id/up_matches' => 'tournaments#up_matches' get 'tournaments/:id/no_matches' => 'tournaments#no_matches' get 'tournaments/:id/matches' => 'tournaments#matches' + get 'tournaments/:id/delegate' => 'tournaments#delegate', :as => :tournament_delegate + patch 'tournaments/:id/delegate' => 'tournaments#delegate', :as => :set_tournament_delegate + + get 'schools/:id/delegate' => 'schools#delegate' + post 'schools/:id/delegate' => 'schools#delegate' # Example of regular route: # get 'products/:id' => 'catalog#view'