diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index e1a3d860c0..5fb891516b 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -176,7 +176,7 @@ class IssuesController < ApplicationController if saved render_attachment_warning_if_needed(@issue) - flash[:notice] = l(:notice_successful_update) unless @issue.current_journal.new_record? + flash[:notice] = l(:notice_successful_update) unless @issue.current_journal.new_record? || params[:no_flash] respond_to do |format| format.html { redirect_back_or_default issue_path(@issue, previous_and_next_issue_ids_params) } diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index e1e0fc559b..ad19959fda 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -90,17 +90,27 @@ module IssuesHelper end def render_descendants_tree(issue) + manage_relations = User.current.allowed_to?(:manage_subtasks, issue.project) s = '' issue_list(issue.descendants.visible.preload(:status, :priority, :tracker, :assigned_to).sort_by(&:lft)) do |child, level| css = "issue issue-#{child.id} hascontextmenu #{child.css_classes}" css << " idnt idnt-#{level}" if level > 0 + buttons = manage_relations ? link_to(l(:label_delete_link_to_subtask), + issue_path({:id => child.id, :issue => {:parent_issue_id => ''}, :back_url => issue_path(issue.id), :no_flash => '1'}), + :method => :put, + :data => {:confirm => l(:text_are_you_sure)}, + :title => l(:label_delete_link_to_subtask), + :class => 'icon-only icon-link-break' + ) : "".html_safe + buttons << link_to_context_menu + s << content_tag('tr', content_tag('td', check_box_tag("ids[]", child.id, false, :id => nil), :class => 'checkbox') + content_tag('td', link_to_issue(child, :project => (issue.project_id != child.project_id)), :class => 'subject', :style => 'width: 50%') + content_tag('td', h(child.status), :class => 'status') + content_tag('td', link_to_user(child.assigned_to), :class => 'assigned_to') + content_tag('td', child.disabled_core_fields.include?('done_ratio') ? '' : progress_bar(child.done_ratio), :class=> 'done_ratio') + - content_tag('td', link_to_context_menu, :class => 'buttons'), + content_tag('td', buttons, :class => 'buttons'), :class => css) end s << '
' diff --git a/config/locales/en.yml b/config/locales/en.yml index 6e2cd75c51..37debb37b3 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -827,6 +827,7 @@ en: label_relation_new: New relation label_relation_delete: Delete relation label_relates_to: Related to + label_delete_link_to_subtask: Delete link to subtask label_duplicates: Is duplicate of label_duplicated_by: Has duplicate label_blocks: Blocks diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index a5fb68b59b..7062a5d785 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -1804,6 +1804,10 @@ class IssuesControllerTest < Redmine::ControllerTest assert_select 'div#issue_tree' do assert_select 'td.subject', :text => /Child Issue/ + assert_select 'td.buttons' do + assert_select 'a', :text => l(:label_delete_link_to_subtask) + assert_select 'a.js-contextmenu' + end end end