diff --git a/app/views/issues/_attributes.html.erb b/app/views/issues/_attributes.html.erb index 332ecbf19..0fc988576 100644 --- a/app/views/issues/_attributes.html.erb +++ b/app/views/issues/_attributes.html.erb @@ -15,8 +15,13 @@ <% end %> <% if @issue.safe_attribute? 'assigned_to_id' %> -

<%= f.select :assigned_to_id, principals_options_for_select(@issue.assignable_users, @issue.assigned_to), - :include_blank => true, :required => @issue.required_attribute?('assigned_to_id') %>

+

+ <%= f.select :assigned_to_id, principals_options_for_select(@issue.assignable_users, @issue.assigned_to), + :include_blank => true, :required => @issue.required_attribute?('assigned_to_id') %> + <% if @issue.assignable_users.include?(User.current) %> + <%= l(:label_assign_to_me) %> + <% end %> +

<% end %> <% if @issue.safe_attribute?('category_id') && @issue.project.issue_categories.any? %> diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index fdf729140..214502b0a 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -60,5 +60,25 @@ $(document).ready(function(){ $("#issue_tracker_id, #issue_status_id").each(function(){ $(this).val($(this).find("option[selected=selected]").val()); }); + $(".assign-to-me-link").click(function(event){ + event.preventDefault(); + var element = $(event.target); + $('#issue_assigned_to_id').val(element.data('id')); + element.hide(); + }); + $('#issue_assigned_to_id').change(function(event){ + var assign_to_me_link = $(".assign-to-me-link"); + + if (assign_to_me_link.length > 0) { + var user_id = $(event.target).val(); + var current_user_id = assign_to_me_link.data('id'); + + if (user_id == current_user_id) { + assign_to_me_link.hide(); + } else { + assign_to_me_link.show(); + } + } + }); }); <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 3f0fd2d77..c4988e493 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1079,6 +1079,7 @@ en: label_display_type_list: List label_display_type_board: Board label_my_bookmarks: My bookmarks + label_assign_to_me: Assign to me button_login: Login button_submit: Submit diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 815bd4e15..3ad4c896d 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -539,6 +539,8 @@ div.issue.overdue .due-date .value { color: #c22; } #trackers_description dt {font-weight: bold; text-decoration: underline;} #trackers_description dd {margin: 0; padding: 0 0 1em 0;} +#issue-form .assign-to-me-link { padding-left: 5px; } + fieldset.collapsible {border-width: 1px 0 0 0;} fieldset.collapsible>legend { cursor:pointer; padding-left: 18px; background-position: 4px;} diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 488edde6d..806d92664 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -2105,6 +2105,43 @@ class IssuesControllerTest < Redmine::ControllerTest end end + def test_update_form_should_render_assign_to_me_link_when_issue_can_be_assigned_to_the_current_user + @request.session[:user_id] = 1 + get :show, :params => { + :id => 10 + } + + assert_select 'form#issue-form #attributes' do + assert_select 'a[class=?][data-id=?]', 'assign-to-me-link', '1', 1 + end + end + + def test_update_form_should_not_render_assign_to_me_link_when_issue_cannot_be_assigned_to_the_current_user + @request.session[:user_id] = 1 + get :show, :params => { + :id => 2 + } + + assert_select 'form#issue-form #attributes' do + assert_select 'a[class=?]', 'assign-to-me-link', 0 + end + end + + def test_update_form_should_not_show_assign_to_me_link_when_issue_is_assigned_to_the_current_user + issue = Issue.find(10) + issue.assigned_to_id = 1 + issue.save! + + @request.session[:user_id] = 1 + get :show, :params => { + :id => 10 + } + + assert_select 'form#issue-form #attributes' do + assert_select 'a[class=?]', 'assign-to-me-link hidden', 1 + end + end + def test_show_should_deny_anonymous_access_without_permission Role.anonymous.remove_permission!(:view_issues) get(:show, :params => {:id => 1})