diff --git a/app/assets/javascripts/users_select.js b/app/assets/javascripts/users_select.js index c6e18fad832284e0857da34530a6439648dda198..29779e3c20ae0aececc6373c1c564028e07fa29d 100644 --- a/app/assets/javascripts/users_select.js +++ b/app/assets/javascripts/users_select.js @@ -16,6 +16,7 @@ this.currentUser = JSON.parse(currentUser); } } + $('.js-user-search').each((function(_this) { return function(i, dropdown) { var options = {}; @@ -64,6 +65,13 @@ return assignTo(_this.currentUser.id); } }); + + $block.on('click', '.js-unassign-yourself', function(e) { + e.preventDefault(); + + return assignTo(""); + }); + assignTo = function(selected) { var data; data = {}; diff --git a/app/services/issuable_base_service.rb b/app/services/issuable_base_service.rb index ce68e433ab8f1147eb5d269a665df4e9cd650e73..ac429f9607b81b090e5d0963a50711e085b5faff 100644 --- a/app/services/issuable_base_service.rb +++ b/app/services/issuable_base_service.rb @@ -36,7 +36,7 @@ def create_task_status_note(issuable) end end - def filter_params(issuable_ability_name = :issue) + def filter_params(issuable_ability_name: :issue, issuable: nil) filter_assignee filter_milestone filter_labels @@ -49,8 +49,12 @@ def filter_params(issuable_ability_name = :issue) params.delete(:add_label_ids) params.delete(:remove_label_ids) params.delete(:label_ids) - params.delete(:assignee_id) params.delete(:due_date) + + # User should be able to unassign himself + if issuable.try(:author) != current_user && params[:assignee_id].present? + params.delete(:assignee_id) + end end end @@ -137,7 +141,7 @@ def create_issuable(issuable, attributes, label_ids:) def create(issuable) merge_slash_commands_into_params!(issuable) - filter_params + filter_params(issuable_ability_name: :issue) params.delete(:state_event) params[:author] ||= current_user @@ -179,7 +183,7 @@ def update(issuable) change_state(issuable) change_subscription(issuable) change_todo(issuable) - filter_params + filter_params(issuable: issuable) old_labels = issuable.labels.to_a old_mentioned_users = issuable.mentioned_users.to_a diff --git a/app/services/issues/base_service.rb b/app/services/issues/base_service.rb index 9ea3ce084bae192d624ee7fa2a0fbfb0c7a22da4..fdc879b7a80cbdd665fe56f533e543aa34e3352c 100644 --- a/app/services/issues/base_service.rb +++ b/app/services/issues/base_service.rb @@ -9,8 +9,8 @@ def hook_data(issue, action) private - def filter_params - super(:issue) + def filter_params(issuable_ability_name: :issue, issuable: nil) + super(issuable_ability_name: :issue) end def execute_hooks(issue, action = 'open') diff --git a/app/services/merge_requests/base_service.rb b/app/services/merge_requests/base_service.rb index 800fd39c42490a9ca025d68e6a0e9e4c616cde84..791966188c2f8ca1fc5d48f7f77f61442ae17f90 100644 --- a/app/services/merge_requests/base_service.rb +++ b/app/services/merge_requests/base_service.rb @@ -38,8 +38,8 @@ def execute_hooks(merge_request, action = 'open', oldrev = nil) private - def filter_params - super(:merge_request) + def filter_params(issuable_ability_name: :issue, issuable: nil) + super(issuable_ability_name: :merge_request) end def merge_requests_for(branch) diff --git a/app/views/shared/issuable/_sidebar.html.haml b/app/views/shared/issuable/_sidebar.html.haml index 0242765021968802eb92f9ef6ad5c5ee98e5ee4b..59e8428432427805cec381d1968299405c488c5b 100644 --- a/app/views/shared/issuable/_sidebar.html.haml +++ b/app/views/shared/issuable/_sidebar.html.haml @@ -29,6 +29,8 @@ = icon('spinner spin', class: 'block-loading') - if can_edit_issuable = link_to 'Edit', '#', class: 'edit-link pull-right' + - elsif issuable.assignee_id == current_user.try(:id) + = link_to 'Unassign', '#', class: 'js-unassign-yourself pull-right' .value.hide-collapsed - if issuable.assignee = link_to_member(@project, issuable.assignee, size: 32, extra_class: 'bold') do diff --git a/changelogs/unreleased/issue_25085.yml b/changelogs/unreleased/issue_25085.yml new file mode 100644 index 0000000000000000000000000000000000000000..50aeb9b829015682515ef3f3b34a681f01ff9397 --- /dev/null +++ b/changelogs/unreleased/issue_25085.yml @@ -0,0 +1,4 @@ +--- +title: Allow non team members to unassign themselves from issuables +merge_request: +author: