UX: Only show assigned tab for groups where all users can assign (#103)

This commit is contained in:
Ahmed Gagan 2020-08-28 19:48:25 +05:30 committed by GitHub
parent 2fad129af5
commit cd31a821fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 62 additions and 5 deletions

View File

@ -3,6 +3,7 @@ export default {
return ( return (
component.currentUser && component.currentUser &&
component.currentUser.can_assign && component.currentUser.can_assign &&
args.group.can_show_assigned_tab &&
args.group.assignment_count > 0 args.group.assignment_count > 0
); );
} }

View File

@ -51,6 +51,10 @@ after_initialize do
scope.can_assign? scope.can_assign?
end end
add_to_serializer(:group_show, :can_show_assigned_tab?) do
object.can_show_assigned_tab?
end
add_model_callback(UserCustomField, :before_save) do add_model_callback(UserCustomField, :before_save) do
self.value = self.value.to_i if self.name == frequency_field self.value = self.value.to_i if self.name == frequency_field
end end
@ -71,6 +75,25 @@ after_initialize do
@can_assign == :true @can_assign == :true
end end
add_to_class(:group, :can_show_assigned_tab?) do
allowed_group_ids = SiteSetting.assign_allowed_on_groups.split("|")
group_has_disallowed_users = DB.query_single(<<~SQL, allowed_group_ids: allowed_group_ids, current_group_id: self.id)[0]
SELECT EXISTS(
SELECT 1 FROM users
JOIN group_users current_group_users
ON current_group_users.user_id=users.id
AND current_group_users.group_id = :current_group_id
LEFT JOIN group_users allowed_group_users
ON allowed_group_users.user_id=users.id
AND allowed_group_users.group_id IN (:allowed_group_ids)
WHERE allowed_group_users.user_id IS NULL
)
SQL
!group_has_disallowed_users
end
add_to_class(:guardian, :can_assign?) { user && user.can_assign? } add_to_class(:guardian, :can_assign?) { user && user.can_assign? }
add_class_method(:user, :assign_allowed) do add_class_method(:user, :assign_allowed) do
@ -301,6 +324,7 @@ after_initialize do
raise Discourse::NotFound unless group raise Discourse::NotFound unless group
raise Discourse::InvalidAccess unless current_user.can_assign? raise Discourse::InvalidAccess unless current_user.can_assign?
raise Discourse::InvalidAccess unless group.can_show_assigned_tab?
list_opts = build_topic_list_options list_opts = build_topic_list_options
list_opts[:page] = page list_opts[:page] = page

View File

@ -1,14 +1,16 @@
# frozen_string_literal: true # frozen_string_literal: true
require 'rails_helper' require 'rails_helper'
require_relative '../support/assign_allowed_group'
RSpec.describe Group do RSpec.describe Group do
describe 'Tracking changes that could affect the allow assign on groups site setting' do let(:group) { Fabricate(:group) }
let(:group) { Fabricate(:group) }
before do before do
SiteSetting.assign_enabled = true SiteSetting.assign_enabled = true
end end
context 'Tracking changes that could affect the allow assign on groups site setting' do
let(:removed_group_setting) { '3|4' } let(:removed_group_setting) { '3|4' }
let(:group_attribute) { group.id } let(:group_attribute) { group.id }
@ -38,4 +40,34 @@ RSpec.describe Group do
expect(SiteSetting.assign_allowed_on_groups).to eq removed_group_setting expect(SiteSetting.assign_allowed_on_groups).to eq removed_group_setting
end end
end end
context 'includes can_show_assigned_tab? method' do
let(:admin) { Fabricate(:admin) }
let(:user) { Fabricate(:user) }
let(:user1) { Fabricate(:user) }
let(:user2) { Fabricate(:user) }
include_context 'A group that is allowed to assign'
before do
add_to_assign_allowed_group(user)
add_to_assign_allowed_group(user1)
add_to_assign_allowed_group(admin)
end
it 'gives false in can_show_assigned_tab? when all users are not in assigned_allowed_group' do
group.add(user)
group.add(user1)
group.add(user2)
expect(group.can_show_assigned_tab?).to eq(false)
end
it 'gives true in can_show_assigned_tab? when all users are in assigned_allowed_group' do
group.add(user)
group.add(user1)
expect(group.can_show_assigned_tab?).to eq(true)
end
end
end end