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 %> +

Mentee Description

+
+
+ +
+ @<%= @user.username %> +
+
+
+

Tags

+ <%= @user.cached_followed_tag_names.join(", ") %> +
+
+

Mentee description

+ <%= @user.mentee_description %> +
+
+

Skills/Languages

+ <%= @user.mostly_work_with %> +
+
+
+
+ +

Possible Mentors

+ <% count = 0 %> + <% MentorRelationship. + unmatched_mentors.where.not(mentor_form_updated_at: nil, id: @user.id, mentor_description: [nil,""]). + order("mentor_form_updated_at DESC").limit(175). + sort_by { |possible_mentor| UserSimilarity.new(@user, possible_mentor).score }.reverse. + first(40).each do |possible_mentor| %> + + <% if !possible_mentor.banned_from_mentorship %> +
+
+ +
+ @<%= possible_mentor.username %> +
+ Internal Profile (id #<%= possible_mentor.id %>) +
+
+

Tag Intersection

+ <%= UserSimilarity.new(@user, possible_mentor).tag_intersection.join(", ") %> +
+
+

Mentor description

+ <%= possible_mentor.mentor_description %> +
+
+

Skills/Languages

+ <%= possible_mentor.mostly_work_with %> +
+
+

Action

+ <%= form_for ([:internal, @user]) do |f| %> + <%= f.hidden_field :quick_match, value: true %> + <%= f.hidden_field :add_mentor, value: possible_mentor.id %> + <%= f.submit "Match!" %> + <% end %> +
+
+ <% end %> + <% end %> +<% end %> \ No newline at end of file diff --git a/app/views/internal/users/show.html.erb b/app/views/internal/users/show.html.erb index 6d9e0d7e8..3768afa1a 100644 --- a/app/views/internal/users/show.html.erb +++ b/app/views/internal/users/show.html.erb @@ -1,66 +1,84 @@ +

- <%= @user.name%> (@<%= @user.username %>) + <%= @user.name %> (@<%= @user.username %>)

click here to banish or delete user

Member since <%= @user.created_at.strftime("%b %e '%y") %>

-

Email: <%= @user.email %>

-

Activity:

+

General Info

+
+
ID:
<%= @user.id %>
+
Username:
<%= @user.username %>
+
Name:
<%= @user.name %>
+
Email:
<%= @user.email %>
+
Twitter:
<%= @user.twitter_username || "N/A" %>
+
GitHub:
<%= @user.github_username || "N/A" %>
+
Sustaining Member:
<%= @user.a_sustaining_member? %>
+ <% if @user.a_sustaining_member? %> +
Monthly Dues:
<%= @user.monthly_dues %>
+ <% end %> +
+ +

Activity

Current Roles

+

(view full history in notes below)

- <%= form_for ([:internal, @user]) do |f| %> - <% if @user.banned && current_user.has_role?(:super_admin) %> -

🚨 Banned User 🚨

- <%= f.label "Un-ban User (return to good standing)" %> - <%= f.check_box :good_standing_user %> -
- -
- <%= f.submit "Update User Status" %> - <% elsif @user.banned %> -

🚨 Banned User 🚨

-

Only super-admins can unban users.

- <% elsif @user.warned %> -

Warned User

- <%= f.label :ban_user %> - <%= f.check_box :ban_user %> -
- <%= f.label "Un-Warn User (return to good standing)" %> - <%= f.check_box :good_standing_user %> -
- <%= f.label "Reason for action:" %> -
- <%= f.text_area :note_for_current_role, required: true %> -
- <%= f.submit "Update User Status" %> -
+

Privileges

+ <% if !@user.banned && !@user.warned %> + <%= form_for [:internal, @user] do |f| %> +

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 %> -
- <%= f.label :warn_user %> - <%= f.check_box :warn_user %> -
- <%= f.label "Reason for action:" %> -
- <%= f.text_area :note_for_current_role, required: true %> -
- <%= f.submit "Update User Status" %> -
+ User must be in good standing to have heigtened privileges of any kind. <% end %> +
+

Warn or Ban User

+ <% if @user.banned %> +

🚨 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 %> +
+ <%= f.label "Warn User" %> + <%= f.check_box :warn_user, checked: @user.warned %> +
+ <%= f.label "Reason for action:" %> + <%= f.text_area :note_for_current_role, required: true %> +
+ <%= f.submit "Update User Status" %> <% end %>
@@ -94,16 +112,15 @@ <% end %> <% end %> - <%= form_for ([:internal, @user]) do |f| %> + <%= form_for [:internal, @user] do |f| %> <% if @user.banned_from_mentorship %>

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 %> -
- <%= f.submit "Ban From Mentorship" %> <% end %> +

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 %> +
+ <%= f.submit "Update Mentorship Status" %> <% end %>
@@ -116,81 +133,17 @@ <% else %>

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: " %>
<%= f.text_area :note %> -
+
<%= f.submit "Submit Note" %> <% end %>
-<% if @user.seeking_mentorship && @user.mentee_description.present? && !@user.banned_from_mentorship %> -

Mentee Description

-
-
- -
- @<%= @user.username %> -
-
-
-

Tags

- <%= @user.cached_followed_tag_names.join(", ") %> -
-
-

Mentee description

- <%= @user.mentee_description %> -
-
-

Skills/Languages

- <%= @user.mostly_work_with %> -
-
-
-
+<%= render "mentee_match" %> -

Possible Mentors

- <% count = 0 %> - <% MentorRelationship. - unmatched_mentors.where.not(mentor_form_updated_at: nil, id: @user.id, mentor_description: [nil,""]). - order("mentor_form_updated_at DESC").limit(175). - sort_by { |possible_mentor| UserSimilarity.new(@user, possible_mentor).score }.reverse. - first(40).each do |possible_mentor| %> - - <% if !possible_mentor.banned_from_mentorship %> -
-
- -
- @<%= possible_mentor.username %> -
- Internal Profile (id #<%= possible_mentor.id %>) -
-
-

Tag Intersection

- <%= UserSimilarity.new(@user, possible_mentor).tag_intersection.join(", ") %> -
-
-

Mentor description

- <%= possible_mentor.mentor_description %> -
-
-

Skills/Languages

- <%= possible_mentor.mostly_work_with %> -
-
-

Action

- <%= form_for ([:internal, @user]) do |f| %> - <%= f.hidden_field :quick_match, value: true %> - <%= f.hidden_field :add_mentor, value: possible_mentor.id %> - <%= f.submit "Match!" %> - <% end %> -
-
- <% end %> - <% end %> -<% end %>

Recent Emails


-
\ No newline at end of file +