UX: Only show assigned tab for groups where all users can assign (#103)
This commit is contained in:
parent
2fad129af5
commit
cd31a821fc
|
@ -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
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
24
plugin.rb
24
plugin.rb
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue