diff --git a/app/controllers/dashboards_controller.rb b/app/controllers/dashboards_controller.rb index 34237a93a..b57446089 100644 --- a/app/controllers/dashboards_controller.rb +++ b/app/controllers/dashboards_controller.rb @@ -4,7 +4,7 @@ class DashboardsController < ApplicationController after_action :verify_authorized def show - @user = if params[:username] && current_user.admin? + @user = if params[:username] && current_user.any_admin? User.find_by_username(params[:username]) else current_user diff --git a/app/controllers/internal/users_controller.rb b/app/controllers/internal/users_controller.rb index c738319f0..7015b4005 100644 --- a/app/controllers/internal/users_controller.rb +++ b/app/controllers/internal/users_controller.rb @@ -39,7 +39,6 @@ class Internal::UsersController < Internal::ApplicationController @user = User.find(params[:id]) @new_mentee = user_params[:add_mentee] @new_mentor = user_params[:add_mentor] - ban_from_mentorship make_matches update_role add_note @@ -52,25 +51,50 @@ class Internal::UsersController < Internal::ApplicationController end def update_role - ban_user if user_params[:ban_user] == "1" - warn_user if user_params[:warn_user] == "1" - return_to_good_standing if user_params[:good_standing_user] == "1" + toggle_ban_user if user_params[:ban_user] + toggle_warn_user if user_params[:warn_user] + toggle_trust_user if user_params[:trusted_user] + toggle_ban_from_mentorship if user_params[:ban_from_mentorship] + toggle_video_permission if user_params[:video_permission] end - def return_to_good_standing - @user.remove_role :banned if @user.banned - @user.remove_role :warned if @user.warned - create_note("good_standing", user_params[:note_for_current_role]) + def toggle_video_permission + if user_params[:video_permission] == "1" + @user.add_role :video_permission + else + @user.remove_role :video_permission + end end - def ban_user - @user.add_role :banned - create_note("banned", user_params[:note_for_current_role]) + def toggle_ban_user + if user_params[:ban_user] == "1" + @user.add_role :banned + @user.remove_role :trusted + @user.remove_role :video_permission + create_note("banned", user_params[:note_for_current_role]) + else + @user.remove_role :banned + create_note("good_standing", user_params[:note_for_current_role]) + end end - def warn_user - @user.add_role :warned - create_note("warned", user_params[:note_for_current_role]) + def toggle_trust_user + if user_params[:trusted_user] == "1" + @user.add_role :trusted + else + @user.remove_role :trusted + end + end + + def toggle_warn_user + if user_params[:warn_user] == "1" + @user.add_role :warned + @user.remove_role :trusted + create_note("warned", user_params[:note_for_current_role]) + else + @user.remove_role :warned + create_note("good_standing", user_params[:note_for_current_role]) + end end def add_note @@ -107,16 +131,18 @@ class Internal::UsersController < Internal::ApplicationController end end - def ban_from_mentorship - return unless user_params[:ban_from_mentorship] == "1" - - @user.add_role :banned_from_mentorship - mentee_relationships = MentorRelationship.where(mentor_id: @user.id) - mentor_relationships = MentorRelationship.where(mentee_id: @user.id) - deactivate_mentorship(mentee_relationships) - deactivate_mentorship(mentor_relationships) - @user.update(offering_mentorship: false, seeking_mentorship: false) - create_note("banned_from_mentorship", user_params[:note_for_mentorship_ban]) + def toggle_ban_from_mentorship + if user_params[:ban_from_mentorship] == "1" + @user.add_role :banned_from_mentorship + mentee_relationships = MentorRelationship.where(mentor_id: @user.id) + mentor_relationships = MentorRelationship.where(mentee_id: @user.id) + deactivate_mentorship(mentee_relationships) + deactivate_mentorship(mentor_relationships) + @user.update(offering_mentorship: false, seeking_mentorship: false) + create_note("banned_from_mentorship", user_params[:note_for_mentorship_ban]) + else + @user.remove_role :banned_from_mentorship + end end def deactivate_mentorship(relationships) @@ -158,8 +184,10 @@ class Internal::UsersController < Internal::ApplicationController :ban_from_mentorship, :ban_user, :warn_user, - :good_standing_user, :note_for_mentorship_ban, + :note_for_mentorship_ban, :note_for_current_role, - :reason_for_mentorship_ban) + :reason_for_mentorship_ban, + :trusted_user, + :video_permission) end end diff --git a/app/models/user.rb b/app/models/user.rb index 420d4b2d3..c1c114f74 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,9 +1,9 @@ class User < ApplicationRecord include CloudinaryHelper - attr_accessor :scholar_email, :note, :ban_from_mentorship, :quick_match, :ban_user, :warn_user, :good_standing_user, + attr_accessor :scholar_email, :note, :ban_from_mentorship, :quick_match, :ban_user, :warn_user, :note_for_mentorship_ban, :reason_for_mentorship_ban, - :note_for_current_role, :add_mentor, :add_mentee + :note_for_current_role, :add_mentor, :add_mentee, :trusted_user, :video_permission rolify include AlgoliaSearch @@ -287,7 +287,7 @@ class User < ApplicationRecord end def banished? - user.notes.where(reason: "banned", content: "spam account").any? && user.banned + user.notes.where(reason: "banned", content: "spam account").any? && user.banned && user.comments.none? && user.articles.none? end def banned_from_mentorship @@ -298,6 +298,10 @@ class User < ApplicationRecord has_role?(:super_admin) end + def any_admin? + has_role?(:super_admin) || has_role?(:admin) + end + def trusted Rails.cache.fetch("user-#{id}/has_trusted_role", expires_in: 200.hours) do has_role? :trusted diff --git a/app/views/internal/users/_mentee_match.erb b/app/views/internal/users/_mentee_match.erb new file mode 100644 index 000000000..2a2eb7a46 --- /dev/null +++ b/app/views/internal/users/_mentee_match.erb @@ -0,0 +1,66 @@ +<% if @user.seeking_mentorship && @user.mentee_description.present? && !@user.banned_from_mentorship %> +
click here to banish or delete user
Member since <%= @user.created_at.strftime("%b %e '%y") %>
-Email: <%= @user.email %>
-Activity:
+General Info
+Activity
(view full history in notes below)
🚨 Banned User 🚨
- <%= f.label "Un-ban User (return to good standing)" %> - <%= f.check_box :good_standing_user %> -🚨 Banned User 🚨
-Only super-admins can unban users.
- <% elsif @user.warned %> -Warned User
- <%= f.label :ban_user %> - <%= f.check_box :ban_user %> -Add Trusted Role (Community Moderator) + <%= f.check_box :trusted_user, checked: @user.trusted %>
+Allow Video Uploads + <%= f.check_box :video_permission, checked: @user.has_role?(:video_permission) %>
+ <%= f.submit "Update Privileges" %> + <% end %> <% else %> -Member in good standing
- <%= f.label :ban_user %> - <%= f.check_box :ban_user %> -🚨 Banned User 🚨
+ <% elsif @user.warned %> +Warned User
+ <% else %> +Member in good standing
+ <% end %> + <%= form_for [:internal, @user] do |f| %> + <%= f.label "Ban User" %> + <%= f.check_box :ban_user, checked: @user.banned %> +User is banned from mentorship program
- <% else %> -Ban user from mentorship program <%= f.check_box :ban_from_mentorship %>
- <%= f.label "Reason: "%> - <%= f.text_area :note_for_mentorship_ban, required: true %> -Ban user from mentorship program <%= f.check_box :ban_from_mentorship, checked: @user.has_role?(:banned_from_mentorship) %>
+ <%= f.label "Reason: " %> + <%= f.text_area :note_for_mentorship_ban, required: true %> +No notes yet!
<% end %> - <%= form_for ([:internal, @user]) do |f| %> - <%= f.label "Add new note: "%> + <%= form_for [:internal, @user] do |f| %> + <%= f.label "Add new note: " %>