diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-03 00:07:46 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-03 00:07:46 +0300 |
commit | 9579eee8954e0405c2dadb19c2a73c9597ce37ea (patch) | |
tree | d90223b7e449d8d25eef60ad16084ce0d2ca2b1b /app/services | |
parent | 0a9b6b99a9bdcacea434501320f1a8d131a33827 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/issuable/bulk_update_service.rb | 29 | ||||
-rw-r--r-- | app/services/members/approve_access_request_service.rb | 6 | ||||
-rw-r--r-- | app/services/members/base_service.rb | 4 | ||||
-rw-r--r-- | app/services/members/destroy_service.rb | 1 | ||||
-rw-r--r-- | app/services/preview_markdown_service.rb | 2 | ||||
-rw-r--r-- | app/services/quick_actions/target_service.rb | 8 | ||||
-rw-r--r-- | app/services/todo_service.rb | 17 |
7 files changed, 55 insertions, 12 deletions
diff --git a/app/services/issuable/bulk_update_service.rb b/app/services/issuable/bulk_update_service.rb index 30444fa3938..48bfa71ee92 100644 --- a/app/services/issuable/bulk_update_service.rb +++ b/app/services/issuable/bulk_update_service.rb @@ -13,9 +13,9 @@ module Issuable end def execute(type) - ids = params.delete(:issuable_ids).split(",") + model_ids = ids_from_params(params.delete(:issuable_ids)) set_update_params(type) - updated_issuables = update_issuables(type, ids) + updated_issuables = update_issuables(type, model_ids) if updated_issuables.present? && requires_count_cache_reset?(type) schedule_group_issues_count_reset(updated_issuables) @@ -28,9 +28,15 @@ module Issuable private + def ids_from_params(issuable_ids) + return issuable_ids if issuable_ids.is_a?(Array) + + issuable_ids.split(',') + end + def set_update_params(type) params.slice!(*permitted_attrs(type)) - params.delete_if { |k, v| v.blank? } + params.delete_if { |_, v| !v.is_a?(Array) && v.blank? } if params[:assignee_ids] == [IssuableFinder::Params::NONE.to_s] params[:assignee_ids] = [] @@ -53,10 +59,12 @@ module Issuable model_class = type.classify.constantize update_class = type.classify.pluralize.constantize::UpdateService items = find_issuables(parent, model_class, ids) + authorized_issuables = [] items.each do |issuable| next unless can?(current_user, :"update_#{type}", issuable) + authorized_issuables << issuable update_class.new( **update_class.constructor_container_arg(issuable.issuing_parent), current_user: current_user, @@ -64,23 +72,22 @@ module Issuable ).execute(issuable) end - items + authorized_issuables end def find_issuables(parent, model_class, ids) + issuables = model_class.id_in(ids) + case parent when Project - projects = parent + issuables = issuables.of_projects(parent) when Group - projects = parent.all_projects + issuables = issuables.of_projects(parent.all_projects) else - return + raise ArgumentError, _('A parent must be provided when bulk updating issuables') end - model_class - .id_in(ids) - .of_projects(projects) - .includes_for_bulk_update + issuables.includes_for_bulk_update end # Duplicates params and its top-level values diff --git a/app/services/members/approve_access_request_service.rb b/app/services/members/approve_access_request_service.rb index 5e73d7a957b..20f96ac2949 100644 --- a/app/services/members/approve_access_request_service.rb +++ b/app/services/members/approve_access_request_service.rb @@ -15,6 +15,12 @@ module Members private + def after_execute(member:, skip_log_audit_event:) + super + + resolve_access_request_todos(current_user, member) + end + def validate_access!(access_requester) raise Gitlab::Access::AccessDeniedError unless can_approve_access_requester?(access_requester) diff --git a/app/services/members/base_service.rb b/app/services/members/base_service.rb index 62b8fc5d6f7..801f77ae082 100644 --- a/app/services/members/base_service.rb +++ b/app/services/members/base_service.rb @@ -53,6 +53,10 @@ module Members end end + def resolve_access_request_todos(current_user, requester) + todo_service.resolve_access_request_todos(current_user, requester) + end + def enqueue_delete_todos(member) type = member.is_a?(GroupMember) ? 'Group' : 'Project' # don't enqueue immediately to prevent todos removal in case of a mistake diff --git a/app/services/members/destroy_service.rb b/app/services/members/destroy_service.rb index 24c5b12b335..dd84b890385 100644 --- a/app/services/members/destroy_service.rb +++ b/app/services/members/destroy_service.rb @@ -63,6 +63,7 @@ module Members delete_subresources(member) unless skip_subresources delete_project_invitations_by(member) unless skip_subresources + resolve_access_request_todos(current_user, member) enqueue_delete_todos(member) enqueue_unassign_issuables(member) if unassign_issuables diff --git a/app/services/preview_markdown_service.rb b/app/services/preview_markdown_service.rb index 03844c2dc7e..b3a9beabba5 100644 --- a/app/services/preview_markdown_service.rb +++ b/app/services/preview_markdown_service.rb @@ -17,7 +17,7 @@ class PreviewMarkdownService < BaseService private def quick_action_types - %w(Issue MergeRequest Commit) + %w(Issue MergeRequest Commit WorkItem) end def explain_quick_actions(text) diff --git a/app/services/quick_actions/target_service.rb b/app/services/quick_actions/target_service.rb index 9c228c27523..04ae5287302 100644 --- a/app/services/quick_actions/target_service.rb +++ b/app/services/quick_actions/target_service.rb @@ -4,6 +4,8 @@ module QuickActions class TargetService < BaseService def execute(type, type_iid) case type&.downcase + when 'workitem' + work_item(type_iid) when 'issue' issue(type_iid) when 'mergerequest' @@ -16,6 +18,12 @@ module QuickActions private # rubocop: disable CodeReuse/ActiveRecord + def work_item(type_iid) + WorkItems::WorkItemsFinder.new(current_user, project_id: project.id).find_by(iid: type_iid) + end + # rubocop: enable CodeReuse/ActiveRecord + + # rubocop: disable CodeReuse/ActiveRecord def issue(type_iid) return project.issues.build if type_iid.nil? diff --git a/app/services/todo_service.rb b/app/services/todo_service.rb index bfd1e55507c..42a8aca17d3 100644 --- a/app/services/todo_service.rb +++ b/app/services/todo_service.rb @@ -198,6 +198,23 @@ class TodoService current_user.update_todos_count_cache end + def resolve_access_request_todos(current_user, member) + return if current_user.nil? || member.nil? + + target = member.source + + finder_params = { + state: :pending, + author_id: member.user_id, + action_id: ::Todo::MEMBER_ACCESS_REQUESTED, + type: target.class.polymorphic_name, + target: target.id + } + + todos = TodosFinder.new(current_user, finder_params).execute + resolve_todos(todos, current_user) + end + def restore_todos(todos, current_user) todos_ids = todos.batch_update(state: :pending) |