diff options
-rw-r--r-- | app/controllers/issues_controller.rb | 17 | ||||
-rw-r--r-- | app/helpers/settings_helper.rb | 10 | ||||
-rw-r--r-- | app/views/issues/bulk_edit.html.erb | 8 | ||||
-rw-r--r-- | app/views/issues/new.html.erb | 6 | ||||
-rw-r--r-- | app/views/settings/_issues.html.erb | 2 | ||||
-rw-r--r-- | config/locales/en.yml | 3 | ||||
-rw-r--r-- | config/locales/fr.yml | 3 | ||||
-rw-r--r-- | config/settings.yml | 2 | ||||
-rw-r--r-- | test/functional/issues_controller_test.rb | 81 |
9 files changed, 95 insertions, 37 deletions
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 78f7c27ea..ff04d0504 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -273,7 +273,8 @@ class IssuesController < ApplicationController if @copy issue = orig_issue.copy({}, :attachments => params[:copy_attachments].present?, - :subtasks => params[:copy_subtasks].present? + :subtasks => params[:copy_subtasks].present?, + :link => link_copy?(params[:link_copy]) ) else issue = orig_issue @@ -410,9 +411,10 @@ class IssuesController < ApplicationController if params[:copy_from] begin @copy_from = Issue.visible.find(params[:copy_from]) + @link_copy = link_copy?(params[:link_copy]) || request.get? @copy_attachments = params[:copy_attachments].present? || request.get? @copy_subtasks = params[:copy_subtasks].present? || request.get? - @issue.copy_from(@copy_from, :attachments => @copy_attachments, :subtasks => @copy_subtasks) + @issue.copy_from(@copy_from, :attachments => @copy_attachments, :subtasks => @copy_subtasks, :link => @link_copy) rescue ActiveRecord::RecordNotFound render_404 return @@ -486,4 +488,15 @@ class IssuesController < ApplicationController end end end + + def link_copy?(param) + case Setting.link_copied_issue + when 'yes' + true + when 'no' + false + when 'ask' + param == '1' + end + end end diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index 3e672b951..3183a2b13 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -104,6 +104,16 @@ module SettingsHelper content_tag(:label, tag + text, options) end + def link_copied_issue_options + options = [ + [:general_text_Yes, 'yes'], + [:general_text_No, 'no'], + [:label_ask, 'ask'] + ] + + options.map {|label, value| [l(label), value.to_s]} + end + def cross_project_subtasks_options options = [ [:label_disabled, ''], diff --git a/app/views/issues/bulk_edit.html.erb b/app/views/issues/bulk_edit.html.erb index dfd76371e..c16f48cbc 100644 --- a/app/views/issues/bulk_edit.html.erb +++ b/app/views/issues/bulk_edit.html.erb @@ -97,6 +97,14 @@ </p> <% end %> +<% if @copy && Setting.link_copied_issue == 'ask' %> +<p> + <label for='link_copy'><%= l(:label_link_copied_issue) %></label> + <%= hidden_field_tag 'link_copy', '0' %> + <%= check_box_tag 'link_copy', '1', params[:link_copy] != 0 %> +</p> +<% end %> + <% if @copy && @attachments_present %> <%= hidden_field_tag 'copy_attachments', '0' %> <p> diff --git a/app/views/issues/new.html.erb b/app/views/issues/new.html.erb index 40dae18b2..206df8d18 100644 --- a/app/views/issues/new.html.erb +++ b/app/views/issues/new.html.erb @@ -11,6 +11,12 @@ <%= render :partial => 'issues/form', :locals => {:f => f} %> </div> + <% if @copy_from && Setting.link_copied_issue == 'ask' %> + <p> + <label for="link_copy"><%= l(:label_link_copied_issue) %></label> + <%= check_box_tag 'link_copy', '1', @link_copy %> + </p> + <% end %> <% if @copy_from && @copy_from.attachments.any? %> <p> <label for="copy_attachments"><%= l(:label_copy_attachments) %></label> diff --git a/app/views/settings/_issues.html.erb b/app/views/settings/_issues.html.erb index fac6d6dea..c1e802238 100644 --- a/app/views/settings/_issues.html.erb +++ b/app/views/settings/_issues.html.erb @@ -3,6 +3,8 @@ <div class="box tabular settings"> <p><%= setting_check_box :cross_project_issue_relations %></p> +<p><%= setting_select :link_copied_issue, link_copied_issue_options %></p> + <p><%= setting_select :cross_project_subtasks, cross_project_subtasks_options %></p> <p><%= setting_check_box :issue_group_assignment %></p> diff --git a/config/locales/en.yml b/config/locales/en.yml index 7fdbc2895..fa33cc9de 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -412,6 +412,7 @@ en: setting_mail_handler_excluded_filenames: Exclude attachments by name setting_force_default_language_for_anonymous: Force default language for anonymous users setting_force_default_language_for_loggedin: Force default language for logged-in users + setting_link_copied_issue: Link issues on copy permission_add_project: Create project permission_add_subprojects: Create subprojects @@ -924,6 +925,8 @@ en: label_users_visibility_all: All active users label_users_visibility_members_of_visible_projects: Members of visible projects label_edit_attachments: Edit attached files + label_link_copied_issue: Link copied issue + label_ask: Ask button_login: Login button_submit: Submit diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 2e70ea2c7..a167fa0e9 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -432,6 +432,7 @@ fr: setting_mail_handler_excluded_filenames: Exclure les fichiers attachés par leur nom setting_force_default_language_for_anonymous: Forcer la langue par défault pour les utilisateurs anonymes setting_force_default_language_for_loggedin: Forcer la langue par défault pour les utilisateurs identifiés + setting_link_copied_issue: Lier les demandes lors de la copie permission_add_project: Créer un projet permission_add_subprojects: Créer des sous-projets @@ -944,6 +945,8 @@ fr: label_users_visibility_all: Tous les utilisateurs actifs label_users_visibility_members_of_visible_projects: Membres des projets visibles label_edit_attachments: Modifier les fichiers attachés + label_link_copied_issue: Lier la demande copiée + label_ask: Demander button_login: Connexion button_submit: Soumettre diff --git a/config/settings.yml b/config/settings.yml index d0c30185a..bc4e7502a 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -136,6 +136,8 @@ cross_project_issue_relations: # Enables subtasks to be in other projects cross_project_subtasks: default: 'tree' +link_copied_issue: + default: 'ask' issue_group_assignment: default: 0 default_issue_start_date_to_creation_date: diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 1c3702c67..06ac5b3b8 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -2540,12 +2540,10 @@ class IssuesControllerTest < ActionController::TestCase assert count > 0 assert_difference 'Issue.count' do assert_difference 'Attachment.count', count do - assert_difference 'Journal.count', 2 do - post :create, :project_id => 1, :copy_from => 3, - :issue => {:project_id => '1', :tracker_id => '3', - :status_id => '1', :subject => 'Copy with attachments'}, - :copy_attachments => '1' - end + post :create, :project_id => 1, :copy_from => 3, + :issue => {:project_id => '1', :tracker_id => '3', + :status_id => '1', :subject => 'Copy with attachments'}, + :copy_attachments => '1' end end copy = Issue.order('id DESC').first @@ -2560,33 +2558,29 @@ class IssuesControllerTest < ActionController::TestCase assert count > 0 assert_difference 'Issue.count' do assert_no_difference 'Attachment.count' do - assert_difference 'Journal.count', 2 do - post :create, :project_id => 1, :copy_from => 3, - :issue => {:project_id => '1', :tracker_id => '3', - :status_id => '1', :subject => 'Copy with attachments'} - end + post :create, :project_id => 1, :copy_from => 3, + :issue => {:project_id => '1', :tracker_id => '3', + :status_id => '1', :subject => 'Copy with attachments'} end end copy = Issue.order('id DESC').first assert_equal 0, copy.attachments.count end - def test_create_as_copy_with_attachments_should_add_new_files + def test_create_as_copy_with_attachments_should_also_add_new_files @request.session[:user_id] = 2 issue = Issue.find(3) count = issue.attachments.count assert count > 0 assert_difference 'Issue.count' do assert_difference 'Attachment.count', count + 1 do - assert_difference 'Journal.count', 2 do - post :create, :project_id => 1, :copy_from => 3, - :issue => {:project_id => '1', :tracker_id => '3', - :status_id => '1', :subject => 'Copy with attachments'}, - :copy_attachments => '1', - :attachments => {'1' => - {'file' => uploaded_test_file('testfile.txt', 'text/plain'), - 'description' => 'test file'}} - end + post :create, :project_id => 1, :copy_from => 3, + :issue => {:project_id => '1', :tracker_id => '3', + :status_id => '1', :subject => 'Copy with attachments'}, + :copy_attachments => '1', + :attachments => {'1' => + {'file' => uploaded_test_file('testfile.txt', 'text/plain'), + 'description' => 'test file'}} end end copy = Issue.order('id DESC').first @@ -2597,7 +2591,7 @@ class IssuesControllerTest < ActionController::TestCase @request.session[:user_id] = 2 assert_difference 'Issue.count' do assert_difference 'IssueRelation.count' do - post :create, :project_id => 1, :copy_from => 1, + post :create, :project_id => 1, :copy_from => 1, :link_copy => '1', :issue => {:project_id => '1', :tracker_id => '3', :status_id => '1', :subject => 'Copy'} end @@ -2606,17 +2600,37 @@ class IssuesControllerTest < ActionController::TestCase assert_equal 1, copy.relations.size end + def test_create_as_copy_should_allow_not_to_add_relation_with_copied_issue + @request.session[:user_id] = 2 + assert_difference 'Issue.count' do + assert_no_difference 'IssueRelation.count' do + post :create, :project_id => 1, :copy_from => 1, + :issue => {:subject => 'Copy'} + end + end + end + + def test_create_as_copy_should_always_add_relation_with_copied_issue_by_setting + with_settings :link_copied_issue => 'yes' do + @request.session[:user_id] = 2 + assert_difference 'Issue.count' do + assert_difference 'IssueRelation.count' do + post :create, :project_id => 1, :copy_from => 1, + :issue => {:subject => 'Copy'} + end + end + end + end + def test_create_as_copy_should_copy_subtasks @request.session[:user_id] = 2 issue = Issue.generate_with_descendants! count = issue.descendants.count assert_difference 'Issue.count', count + 1 do - assert_difference 'Journal.count', (count + 1) * 2 do - post :create, :project_id => 1, :copy_from => issue.id, - :issue => {:project_id => '1', :tracker_id => '3', - :status_id => '1', :subject => 'Copy with subtasks'}, - :copy_subtasks => '1' - end + post :create, :project_id => 1, :copy_from => issue.id, + :issue => {:project_id => '1', :tracker_id => '3', + :status_id => '1', :subject => 'Copy with subtasks'}, + :copy_subtasks => '1' end copy = Issue.where(:parent_id => nil).order('id DESC').first assert_equal count, copy.descendants.count @@ -2627,11 +2641,9 @@ class IssuesControllerTest < ActionController::TestCase @request.session[:user_id] = 2 issue = Issue.generate_with_descendants! assert_difference 'Issue.count', 1 do - assert_difference 'Journal.count', 2 do - post :create, :project_id => 1, :copy_from => 3, - :issue => {:project_id => '1', :tracker_id => '3', - :status_id => '1', :subject => 'Copy with subtasks'} - end + post :create, :project_id => 1, :copy_from => 3, + :issue => {:project_id => '1', :tracker_id => '3', + :status_id => '1', :subject => 'Copy with subtasks'} end copy = Issue.where(:parent_id => nil).order('id DESC').first assert_equal 0, copy.descendants.count @@ -3840,7 +3852,6 @@ class IssuesControllerTest < ActionController::TestCase issue = Issue.order('id DESC').first assert_equal 1, issue.journals.size journal = issue.journals.first - assert_equal 1, journal.details.size assert_equal 'Copying one issue', journal.notes end @@ -3879,7 +3890,7 @@ class IssuesControllerTest < ActionController::TestCase assert_difference 'Issue.count', 2 do assert_difference 'IssueRelation.count', 2 do - post :bulk_update, :ids => [1, 3], :copy => '1', + post :bulk_update, :ids => [1, 3], :copy => '1', :link_copy => '1', :issue => { :project_id => '1' } |