Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-02-03 00:07:46 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-02-03 00:07:46 +0300
commit9579eee8954e0405c2dadb19c2a73c9597ce37ea (patch)
treed90223b7e449d8d25eef60ad16084ce0d2ca2b1b /app/services
parent0a9b6b99a9bdcacea434501320f1a8d131a33827 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services')
-rw-r--r--app/services/issuable/bulk_update_service.rb29
-rw-r--r--app/services/members/approve_access_request_service.rb6
-rw-r--r--app/services/members/base_service.rb4
-rw-r--r--app/services/members/destroy_service.rb1
-rw-r--r--app/services/preview_markdown_service.rb2
-rw-r--r--app/services/quick_actions/target_service.rb8
-rw-r--r--app/services/todo_service.rb17
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)