diff --git a/.discourse-compatibility b/.discourse-compatibility index a0490f3..2dd8529 100644 --- a/.discourse-compatibility +++ b/.discourse-compatibility @@ -1,3 +1,4 @@ +3.1.0.beta3: 9c270cac9abc1c2b30574d8c655fb3a90546236b 2.9.0.beta8: 28bc8ab78a09551548c87f511ade3d64e1b04bc3 2.9.0.beta3: 46f200935dc9e5750c3f2740abd993e27a9b3f6c 2.8.2: 7bec9aeaf786defc9a133b8cb9ed24f1c2522400 diff --git a/plugin.rb b/plugin.rb index 42d6377..f75baa5 100644 --- a/plugin.rb +++ b/plugin.rb @@ -57,7 +57,7 @@ after_initialize do DiscoursePluginRegistry.serialized_current_user_fields << frequency_field add_to_serializer(:user, :reminders_frequency) { RemindAssignsFrequencySiteSettings.values } - add_to_serializer(:group_show, :assignment_count) do + add_to_serializer(:group_show, :assignment_count, include_condition: -> { scope.can_assign? }) do Topic.joins(<<~SQL).where(<<~SQL, group_id: object.id).where("topics.deleted_at IS NULL").count JOIN assignments a ON topics.id = a.topic_id AND a.assigned_to_id IS NOT NULL @@ -75,8 +75,6 @@ after_initialize do SQL end - add_to_serializer(:group_show, "include_assignment_count?") { scope.can_assign? } - add_to_serializer(:group_show, :assignable_level) { object.assignable_level } add_to_serializer(:group_show, :can_show_assigned_tab?) { object.can_show_assigned_tab? } @@ -484,144 +482,154 @@ after_initialize do end # TopicList serializer - add_to_serializer(:topic_list, :assigned_messages_count) do + add_to_serializer( + :topic_list, + :assigned_messages_count, + include_condition: -> do + options = object.instance_variable_get(:@opts) + + if assigned_user = options.dig(:assigned) + scope.can_assign? || assigned_user.downcase == scope.current_user&.username_lower + end + end, + ) do TopicQuery .new(object.current_user, guardian: scope, limit: false) .private_messages_assigned_query(object.current_user) .count end - add_to_serializer(:topic_list, "include_assigned_messages_count?") do - options = object.instance_variable_get(:@opts) - - if assigned_user = options.dig(:assigned) - scope.can_assign? || assigned_user.downcase == scope.current_user&.username_lower - end - end - # TopicView serializer - add_to_serializer(:topic_view, :assigned_to_user, false) do - DiscourseAssign::Helpers.build_assigned_to_user(object.topic.assigned_to, object.topic) - end + add_to_serializer( + :topic_view, + :assigned_to_user, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && object.topic.assigned_to&.is_a?(User) + end, + ) { DiscourseAssign::Helpers.build_assigned_to_user(object.topic.assigned_to, object.topic) } - add_to_serializer(:topic_view, :include_assigned_to_user?) do - (SiteSetting.assigns_public || scope.can_assign?) && object.topic.assigned_to&.is_a?(User) - end + add_to_serializer( + :topic_view, + :assigned_to_group, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && object.topic.assigned_to&.is_a?(Group) + end, + ) { DiscourseAssign::Helpers.build_assigned_to_group(object.topic.assigned_to, object.topic) } - add_to_serializer(:topic_view, :assigned_to_group, false) do - DiscourseAssign::Helpers.build_assigned_to_group(object.topic.assigned_to, object.topic) - end - - add_to_serializer(:topic_view, :include_assigned_to_group?) do - (SiteSetting.assigns_public || scope.can_assign?) && object.topic.assigned_to&.is_a?(Group) - end - - add_to_serializer(:topic_view, :indirectly_assigned_to) do + add_to_serializer( + :topic_view, + :indirectly_assigned_to, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && + object.topic.indirectly_assigned_to.present? + end, + ) do DiscourseAssign::Helpers.build_indirectly_assigned_to( object.topic.indirectly_assigned_to, object.topic, ) end - add_to_serializer(:topic_view, :include_indirectly_assigned_to?) do - (SiteSetting.assigns_public || scope.can_assign?) && - object.topic.indirectly_assigned_to.present? - end + add_to_serializer( + :topic_view, + :assignment_note, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && object.topic.assignment.present? + end, + ) { object.topic.assignment.note } - add_to_serializer(:topic_view, :assignment_note, false) { object.topic.assignment.note } - - add_to_serializer(:topic_view, :include_assignment_note?, false) do - (SiteSetting.assigns_public || scope.can_assign?) && object.topic.assignment.present? - end - - add_to_serializer(:topic_view, :assignment_status, false) { object.topic.assignment.status } - - add_to_serializer(:topic_view, :include_assignment_status?, false) do - SiteSetting.enable_assign_status && (SiteSetting.assigns_public || scope.can_assign?) && - object.topic.assignment.present? - end + add_to_serializer( + :topic_view, + :assignment_status, + include_condition: -> do + SiteSetting.enable_assign_status && (SiteSetting.assigns_public || scope.can_assign?) && + object.topic.assignment.present? + end, + ) { object.topic.assignment.status } # SuggestedTopic serializer - add_to_serializer(:suggested_topic, :assigned_to_user, false) do - DiscourseAssign::Helpers.build_assigned_to_user(object.assigned_to, object) - end + add_to_serializer( + :suggested_topic, + :assigned_to_user, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && object.assigned_to&.is_a?(User) + end, + ) { DiscourseAssign::Helpers.build_assigned_to_user(object.assigned_to, object) } - add_to_serializer(:suggested_topic, :include_assigned_to_user?) do - (SiteSetting.assigns_public || scope.can_assign?) && object.assigned_to&.is_a?(User) - end + add_to_serializer( + :suggested_topic, + :assigned_to_group, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && object.assigned_to&.is_a?(Group) + end, + ) { DiscourseAssign::Helpers.build_assigned_to_group(object.assigned_to, object) } - add_to_serializer(:suggested_topic, :assigned_to_group, false) do - DiscourseAssign::Helpers.build_assigned_to_group(object.assigned_to, object) - end - - add_to_serializer(:suggested_topic, :include_assigned_to_group?) do - (SiteSetting.assigns_public || scope.can_assign?) && object.assigned_to&.is_a?(Group) - end - - add_to_serializer(:suggested_topic, :indirectly_assigned_to) do - DiscourseAssign::Helpers.build_indirectly_assigned_to(object.indirectly_assigned_to, object) - end - - add_to_serializer(:suggested_topic, :include_indirectly_assigned_to?) do - (SiteSetting.assigns_public || scope.can_assign?) && object.indirectly_assigned_to.present? - end + add_to_serializer( + :suggested_topic, + :indirectly_assigned_to, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && object.indirectly_assigned_to.present? + end, + ) { DiscourseAssign::Helpers.build_indirectly_assigned_to(object.indirectly_assigned_to, object) } # TopicListItem serializer - add_to_serializer(:topic_list_item, :indirectly_assigned_to) do - DiscourseAssign::Helpers.build_indirectly_assigned_to(object.indirectly_assigned_to, object) - end + add_to_serializer( + :topic_list_item, + :indirectly_assigned_to, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && object.indirectly_assigned_to.present? + end, + ) { DiscourseAssign::Helpers.build_indirectly_assigned_to(object.indirectly_assigned_to, object) } - add_to_serializer(:topic_list_item, :include_indirectly_assigned_to?) do - (SiteSetting.assigns_public || scope.can_assign?) && object.indirectly_assigned_to.present? - end + add_to_serializer( + :topic_list_item, + :assigned_to_user, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && object.assigned_to&.is_a?(User) + end, + ) { BasicUserSerializer.new(object.assigned_to, scope: scope, root: false).as_json } - add_to_serializer(:topic_list_item, :assigned_to_user) do - BasicUserSerializer.new(object.assigned_to, scope: scope, root: false).as_json - end + add_to_serializer( + :topic_list_item, + :assigned_to_group, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && object.assigned_to&.is_a?(Group) + end, + ) { AssignedGroupSerializer.new(object.assigned_to, scope: scope, root: false).as_json } - add_to_serializer(:topic_list_item, :include_assigned_to_user?) do - (SiteSetting.assigns_public || scope.can_assign?) && object.assigned_to&.is_a?(User) - end - - add_to_serializer(:topic_list_item, :assigned_to_group) do - AssignedGroupSerializer.new(object.assigned_to, scope: scope, root: false).as_json - end - - add_to_serializer(:topic_list_item, :include_assigned_to_group?) do - (SiteSetting.assigns_public || scope.can_assign?) && object.assigned_to&.is_a?(Group) - end - - add_to_serializer(:topic_list_item, :assignment_status, false) { object.assignment.status } - - add_to_serializer(:topic_list_item, :include_assignment_status?, false) do - SiteSetting.enable_assign_status && (SiteSetting.assigns_public || scope.can_assign?) && - object.assignment.present? - end + add_to_serializer( + :topic_list_item, + :assignment_status, + include_condition: -> do + SiteSetting.enable_assign_status && (SiteSetting.assigns_public || scope.can_assign?) && + object.assignment.present? + end, + ) { object.assignment.status } # SearchTopicListItem serializer - add_to_serializer(:search_topic_list_item, :assigned_to_user, false) do - DiscourseAssign::Helpers.build_assigned_to_user(object.assigned_to, object) - end + add_to_serializer( + :search_topic_list_item, + :assigned_to_user, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && object.assigned_to&.is_a?(User) + end, + ) { DiscourseAssign::Helpers.build_assigned_to_user(object.assigned_to, object) } - add_to_serializer(:search_topic_list_item, "include_assigned_to_user?") do - (SiteSetting.assigns_public || scope.can_assign?) && object.assigned_to&.is_a?(User) - end + add_to_serializer( + :search_topic_list_item, + :assigned_to_group, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && object.assigned_to&.is_a?(Group) + end, + ) { AssignedGroupSerializer.new(object.assigned_to, scope: scope, root: false).as_json } - add_to_serializer(:search_topic_list_item, :assigned_to_group, false) do - AssignedGroupSerializer.new(object.assigned_to, scope: scope, root: false).as_json - end - - add_to_serializer(:search_topic_list_item, "include_assigned_to_group?") do - (SiteSetting.assigns_public || scope.can_assign?) && object.assigned_to&.is_a?(Group) - end - - add_to_serializer(:search_topic_list_item, :indirectly_assigned_to) do - DiscourseAssign::Helpers.build_indirectly_assigned_to(object.indirectly_assigned_to, object) - end - - add_to_serializer(:search_topic_list_item, :include_indirectly_assigned_to?) do - (SiteSetting.assigns_public || scope.can_assign?) && object.indirectly_assigned_to.present? - end + add_to_serializer( + :search_topic_list_item, + :indirectly_assigned_to, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && object.indirectly_assigned_to.present? + end, + ) { DiscourseAssign::Helpers.build_indirectly_assigned_to(object.indirectly_assigned_to, object) } # TopicsBulkAction TopicsBulkAction.register_operation("assign") do @@ -648,26 +656,30 @@ after_initialize do %w[Post Topic].include?(bookmarkable_type) end - add_to_serializer(:user_bookmark_base, :assigned_to_user, false) do + add_to_serializer( + :user_bookmark_base, + :assigned_to_user, + include_condition: -> do + return false if !can_have_assignment? + (SiteSetting.assigns_public || scope.can_assign?) && assigned_to&.is_a?(User) + end, + ) do return if !can_have_assignment? BasicUserSerializer.new(assigned_to, scope: scope, root: false).as_json end - add_to_serializer(:user_bookmark_base, "include_assigned_to_user?") do - return false if !can_have_assignment? - (SiteSetting.assigns_public || scope.can_assign?) && assigned_to&.is_a?(User) - end - - add_to_serializer(:user_bookmark_base, :assigned_to_group, false) do + add_to_serializer( + :user_bookmark_base, + :assigned_to_group, + include_condition: -> do + return false if !can_have_assignment? + (SiteSetting.assigns_public || scope.can_assign?) && assigned_to&.is_a?(Group) + end, + ) do return if !can_have_assignment? AssignedGroupSerializer.new(assigned_to, scope: scope, root: false).as_json end - add_to_serializer(:user_bookmark_base, "include_assigned_to_group?") do - return false if !can_have_assignment? - (SiteSetting.assigns_public || scope.can_assign?) && assigned_to&.is_a?(Group) - end - add_to_serializer(:basic_user, :assign_icon) { "user-plus" } add_to_serializer(:basic_user, :assign_path) do return if !object.is_a?(User) @@ -675,56 +687,59 @@ after_initialize do end # PostSerializer - add_to_serializer(:post, :assigned_to_user) do - BasicUserSerializer.new(object.assignment.assigned_to, scope: scope, root: false).as_json - end + add_to_serializer( + :post, + :assigned_to_user, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && + object.assignment&.assigned_to&.is_a?(User) && object.assignment.active + end, + ) { BasicUserSerializer.new(object.assignment.assigned_to, scope: scope, root: false).as_json } - add_to_serializer(:post, "include_assigned_to_user?") do - (SiteSetting.assigns_public || scope.can_assign?) && - object.assignment&.assigned_to&.is_a?(User) && object.assignment.active - end - - add_to_serializer(:post, :assigned_to_group, false) do + add_to_serializer( + :post, + :assigned_to_group, + false, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && + object.assignment&.assigned_to&.is_a?(Group) && object.assignment.active + end, + ) do AssignedGroupSerializer.new(object.assignment.assigned_to, scope: scope, root: false).as_json end - add_to_serializer(:post, "include_assigned_to_group?") do - (SiteSetting.assigns_public || scope.can_assign?) && - object.assignment&.assigned_to&.is_a?(Group) && object.assignment.active - end + add_to_serializer( + :post, + :assignment_note, + include_condition: -> do + (SiteSetting.assigns_public || scope.can_assign?) && object.assignment.present? + end, + ) { object.assignment.note } - add_to_serializer(:post, :assignment_note, false) { object.assignment.note } - - add_to_serializer(:post, :include_assignment_note?, false) do - (SiteSetting.assigns_public || scope.can_assign?) && object.assignment.present? - end - - add_to_serializer(:post, :assignment_status, false) { object.assignment.status } - - add_to_serializer(:post, :include_assignment_status?, false) do - SiteSetting.enable_assign_status && (SiteSetting.assigns_public || scope.can_assign?) && - object.assignment.present? - end + add_to_serializer( + :post, + :assignment_status, + include_condition: -> do + SiteSetting.enable_assign_status && (SiteSetting.assigns_public || scope.can_assign?) && + object.assignment.present? + end, + ) { object.assignment.status } # CurrentUser serializer add_to_serializer(:current_user, :can_assign) { object.can_assign? } # FlaggedTopic serializer - add_to_serializer(:flagged_topic, :assigned_to_user) do - DiscourseAssign::Helpers.build_assigned_to_user(object.assigned_to, object) - end + add_to_serializer( + :flagged_topic, + :assigned_to_user, + include_condition: -> { object.assigned_to && object.assigned_to&.is_a?(User) }, + ) { DiscourseAssign::Helpers.build_assigned_to_user(object.assigned_to, object) } - add_to_serializer(:flagged_topic, :include_assigned_to_user?) do - object.assigned_to && object.assigned_to&.is_a?(User) - end - - add_to_serializer(:flagged_topic, :assigned_to_group) do - DiscourseAssign::Helpers.build_assigned_to_group(object.assigned_to, object) - end - - add_to_serializer(:flagged_topic, :include_assigned_to_group?) do - object.assigned_to && object.assigned_to&.is_a?(Group) - end + add_to_serializer( + :flagged_topic, + :assigned_to_group, + include_condition: -> { object.assigned_to && object.assigned_to&.is_a?(Group) }, + ) { DiscourseAssign::Helpers.build_assigned_to_group(object.assigned_to, object) } # Reviewable add_custom_reviewable_filter(