Skip to content
Snippets Groups Projects
Commit 22722659 authored by Valery Sizov's avatar Valery Sizov
Browse files

fix for Follow-up from "Backport of Multiple Assignees feature

parent 92bf7dfc
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -60,17 +60,24 @@ module IssuableActions
end
 
def bulk_update_params
params.require(:update).permit(
permitted_keys = [
:issuable_ids,
:assignee_id,
:milestone_id,
:state_event,
:subscription_event,
assignee_ids: [],
label_ids: [],
add_label_ids: [],
remove_label_ids: []
)
]
if resource_name == 'issue'
permitted_keys << { assignee_ids: [] }
else
permitted_keys.unshift(:assignee_id)
end
params.require(:update).permit(permitted_keys)
end
 
def resource_name
Loading
Loading
Loading
Loading
@@ -67,9 +67,10 @@ module IssuablesHelper
end
 
def users_dropdown_label(selected_users)
if selected_users.length == 0
case selected_users.length
when 0
"Unassigned"
elsif selected_users.length == 1
when 1
selected_users[0].name
else
"#{selected_users[0].name} + #{selected_users.length - 1} more"
Loading
Loading
Loading
Loading
@@ -7,7 +7,7 @@ module Issuable
ids = params.delete(:issuable_ids).split(",")
items = model_class.where(id: ids)
 
%i(state_event milestone_id assignee_id assignee_ids add_label_ids remove_label_ids subscription_event).each do |key|
permitted_attrs(type).each do |key|
params.delete(key) unless params[key].present?
end
 
Loading
Loading
@@ -26,5 +26,17 @@ module Issuable
success: !items.count.zero?
}
end
private
def permitted_attrs(type)
attrs = %i(state_event milestone_id assignee_id assignee_ids add_label_ids remove_label_ids subscription_event)
if type == 'issue'
attrs.push(:assignee_ids)
else
attrs.push(:assignee_id)
end
end
end
end
Loading
Loading
@@ -79,7 +79,7 @@ module SystemNoteService
 
text_parts.join(' and ')
elsif old_assignees.any?
"removed all assignees"
"removed assignee"
elsif issue.assignees.any?
"assigned to #{issue.assignees.map(&:to_reference).to_sentence}"
end
Loading
Loading
- max_render = 3
- max = [max_render, issue.assignees.length].min
 
- issue.assignees.each_with_index do |assignee, index|
- if index < max
= link_to_member(@project, assignee, name: false, title: "Assigned to :name")
- issue.assignees.take(max).each do |assignee|
= link_to_member(@project, assignee, name: false, title: "Assigned to :name")
 
- if issue.assignees.length > max_render
- counter = issue.assignees.length - max_render
Loading
Loading
- if issuable.instance_of?(Issue)
- if issuable.is_a?(Issue)
#js-vue-sidebar-assignees{ data: { field: "#{issuable.to_ability_name}[assignee_ids]" } }
- else
.sidebar-collapsed-icon.sidebar-collapsed-user{ data: { toggle: "tooltip", placement: "left", container: "body" }, title: (issuable.assignee.name if issuable.assignee) }
Loading
Loading
@@ -33,17 +33,17 @@
 
- options = { toggle_class: 'js-user-search js-author-search', title: 'Assign to', filter: true, dropdown_class: 'dropdown-menu-user dropdown-menu-selectable dropdown-menu-author', placeholder: 'Search users', data: { first_user: (current_user.username if current_user), current_user: true, project_id: (@project.id if @project), author_id: issuable.author_id, field_name: "#{issuable.to_ability_name}[assignee_ids][]", issue_update: issuable_json_path(issuable), ability_name: issuable.to_ability_name, null_user: true } }
 
- if issuable.instance_of?(Issue)
- if issuable.assignees.length == 0
- title = 'Select assignee'
- if issuable.is_a?(Issue)
- unless issuable.assignees.any?
= hidden_field_tag "#{issuable.to_ability_name}[assignee_ids][]", 0, id: nil
- title = 'Select assignee'
- options[:toggle_class] += ' js-multiselect js-save-user-data'
- options[:data][:field_name] = "#{issuable.to_ability_name}[assignee_ids][]"
- options[:data][:multi_select] = true
- options[:data]['dropdown-title'] = title
- options[:data]['dropdown-header'] = 'Assignee'
- options[:data]['max-select'] = 1
- else
- title = 'Select assignee'
- data = { field_name: "#{issuable.to_ability_name}[assignee_ids][]" }
- data[:multi_select] = true
- data['dropdown-title'] = title
- data['dropdown-header'] = 'Assignee'
- data['max-select'] = 1
- options[:data].merge!(data)
 
= dropdown_tag(title, options: options)
- issue = issuable
- assignees = issue.assignees
.block.assignee
.sidebar-collapsed-icon.sidebar-collapsed-user{ data: { toggle: "tooltip", placement: "left", container: "body" }, title: (issuable.assignee_list) }
- if issue.assignees.any?
- issue.assignees.each do |assignee|
- if assignees.any?
- assignees.each do |assignee|
= link_to_member(@project, assignee, size: 24)
- else
= icon('user', 'aria-hidden': 'true')
Loading
Loading
@@ -12,8 +13,8 @@
- if can_edit_issuable
= link_to 'Edit', '#', class: 'edit-link pull-right'
.value.hide-collapsed
- if issue.assignees.any?
- issue.assignees.each do |assignee|
- if assignees.any?
- assignees.each do |assignee|
= link_to_member(@project, assignee, size: 32, extra_class: 'bold') do
%span.username
= assignee.to_reference
Loading
Loading
Loading
Loading
@@ -100,7 +100,7 @@ Example response:
]
```
 
**Note**: `assignee` column is deprecated, it shows the first assignee only.
**Note**: `assignee` column is deprecated, now we show it as a single-sized array `assignees` to conform to the GitLab EE API.
 
## List group issues
 
Loading
Loading
@@ -192,7 +192,7 @@ Example response:
]
```
 
**Note**: `assignee` column is deprecated, it shows the first assignee only.
**Note**: `assignee` column is deprecated, now we show it as a single-sized array `assignees` to conform to the GitLab EE API.
 
## List project issues
 
Loading
Loading
@@ -284,7 +284,7 @@ Example response:
]
```
 
**Note**: `assignee` column is deprecated, it shows the first assignee only.
**Note**: `assignee` column is deprecated, now we show it as a single-sized array `assignees` to conform to the GitLab EE API.
 
## Single issue
 
Loading
Loading
@@ -359,7 +359,7 @@ Example response:
}
```
 
**Note**: `assignee` column is deprecated, it shows the first assignee only.
**Note**: `assignee` column is deprecated, now we show it as a single-sized array `assignees` to conform to the GitLab EE API.
 
## New issue
 
Loading
Loading
@@ -375,7 +375,7 @@ POST /projects/:id/issues
| `title` | string | yes | The title of an issue |
| `description` | string | no | The description of an issue |
| `confidential` | boolean | no | Set an issue to be confidential. Default is `false`. |
| `assignee_ids` | Array[integer] | no | The ID of a user to assign issue |
| `assignee_ids` | Array[integer] | no | The ID of the users to assign issue |
| `milestone_id` | integer | no | The ID of a milestone to assign issue |
| `labels` | string | no | Comma-separated label names for an issue |
| `created_at` | string | no | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` (requires admin or project owner rights) |
Loading
Loading
@@ -421,7 +421,7 @@ Example response:
}
```
 
**Note**: `assignee` column is deprecated, it shows the first assignee only.
**Note**: `assignee` column is deprecated, now we show it as a single-sized array `assignees` to conform to the GitLab EE API.
 
## Edit issue
 
Loading
Loading
@@ -439,7 +439,7 @@ PUT /projects/:id/issues/:issue_iid
| `title` | string | no | The title of an issue |
| `description` | string | no | The description of an issue |
| `confidential` | boolean | no | Updates an issue to be confidential |
| `assignee_ids` | Array[integer] | no | The ID of a user to assign the issue to |
| `assignee_ids` | Array[integer] | no | The ID of the users to assign the issue to |
| `milestone_id` | integer | no | The ID of a milestone to assign the issue to |
| `labels` | string | no | Comma-separated label names for an issue |
| `state_event` | string | no | The state event of an issue. Set `close` to close the issue and `reopen` to reopen it |
Loading
Loading
@@ -484,7 +484,7 @@ Example response:
}
```
 
**Note**: `assignee` column is deprecated, it shows the first assignee only.
**Note**: `assignee` column is deprecated, now we show it as a single-sized array `assignees` to conform to the GitLab EE API.
 
## Delete an issue
 
Loading
Loading
@@ -570,7 +570,7 @@ Example response:
}
```
 
**Note**: `assignee` column is deprecated, it shows the first assignee only.
**Note**: `assignee` column is deprecated, now we show it as a single-sized array `assignees` to conform to the GitLab EE API.
 
## Subscribe to an issue
 
Loading
Loading
@@ -635,7 +635,7 @@ Example response:
}
```
 
**Note**: `assignee` column is deprecated, it shows the first assignee only.
**Note**: `assignee` column is deprecated, now we show it as a single-sized array `assignees` to conform to the GitLab EE API.
 
## Unsubscribe from an issue
 
Loading
Loading
@@ -757,7 +757,7 @@ Example response:
}
```
 
**Note**: `assignee` column is deprecated, it shows the first assignee only.
**Note**: `assignee` column is deprecated, now we show it as a single-sized array `assignees` to conform to the GitLab EE API.
 
## Set a time estimate for an issue
 
Loading
Loading
Loading
Loading
@@ -2,11 +2,11 @@ module API
module Helpers
module CommonHelpers
def convert_parameters_from_legacy_format(params)
if params[:assignee_id].present?
params[:assignee_ids] = [params.delete(:assignee_id)]
params.tap do |params|
if params[:assignee_id].present?
params[:assignee_ids] = [params.delete(:assignee_id)]
end
end
params
end
end
end
Loading
Loading
Loading
Loading
@@ -1124,7 +1124,7 @@ describe API::Issues do
end
 
context 'CE restrictions' do
it 'updates an issue with several assignee but only one has been applied' do
it 'updates an issue with several assignees but only one has been applied' do
put api("/projects/#{project.id}/issues/#{issue.iid}", user),
assignee_ids: [user2.id, guest.id]
 
Loading
Loading
Loading
Loading
@@ -62,7 +62,7 @@ describe Issuable::BulkUpdateService, services: true do
expect(result[:count]).to eq(1)
end
 
it 'updates the assignee to the use ID passed' do
it 'updates the assignee to the user ID passed' do
assignee = create(:user)
project.team << [assignee, :developer]
 
Loading
Loading
@@ -100,7 +100,7 @@ describe Issuable::BulkUpdateService, services: true do
expect(result[:count]).to eq(1)
end
 
it 'updates the assignee to the use ID passed' do
it 'updates the assignee to the user ID passed' do
assignee = create(:user)
project.team << [assignee, :developer]
expect { bulk_update(issue, assignee_ids: [assignee.id]) }
Loading
Loading
Loading
Loading
@@ -178,7 +178,7 @@ describe SystemNoteService, services: true do
end
 
it 'builds a correct phrase when assignee removed' do
expect(build_note([assignee1], [])).to eq 'removed all assignees'
expect(build_note([assignee1], [])).to eq 'removed assignee'
end
 
it 'builds a correct phrase when assignees changed' do
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment