From 67c4936908e6bc9ac613b41d3ae00b48a4801daf Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Fri, 24 Oct 2014 18:41:35 +0000 Subject: [PATCH] Restores commits reverted when rails-4.1 branch was merged (#18174). Patch by Mischa The Evil. git-svn-id: http://svn.redmine.org/redmine/trunk@13504 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/helpers/application_helper.rb | 11 +++++++-- app/helpers/projects_helper.rb | 5 ---- app/models/issue.rb | 1 - app/models/project.rb | 3 ++- app/models/user.rb | 6 ++--- app/models/version.rb | 5 ++++ app/views/common/_tabs.html.erb | 4 ++-- config/initializers/30-redmine.rb | 6 +++++ doc/CHANGELOG | 2 +- lib/redmine/field_format.rb | 4 ++++ test/object_helpers.rb | 8 +++++++ test/unit/helpers/projects_helper_test.rb | 28 ++++++++++++++++++----- test/unit/project_copy_test.rb | 11 +++++++++ 13 files changed, 73 insertions(+), 21 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 923dff581..3a40fd2e2 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -153,6 +153,13 @@ module ApplicationHelper end end + # Generates a link to a version + def link_to_version(version, options = {}) + return '' unless version && version.is_a?(Version) + options = {:title => format_date(version.effective_date)}.merge(options) + link_to_if version.visible?, format_version_name(version), version_path(version), options + end + # Helper that formats object for html or text rendering def format_object(object, html=true, &block) if block_given? @@ -174,7 +181,7 @@ module ApplicationHelper when 'Project' html ? link_to_project(object) : object.to_s when 'Version' - html ? link_to(object.name, version_path(object)) : object.to_s + html ? link_to_version(object) : object.to_s when 'TrueClass' l(:general_text_Yes) when 'FalseClass' @@ -236,7 +243,7 @@ module ApplicationHelper end def format_version_name(version) - if version.project == @project + if !version.shared? || version.project == @project h(version) else h("#{version.project} - #{version}") diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index e23ebab99..8e23ccdda 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -18,11 +18,6 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. module ProjectsHelper - def link_to_version(version, options = {}) - return '' unless version && version.is_a?(Version) - link_to_if version.visible?, format_version_name(version), version_path(version), options - end - def project_settings_tabs tabs = [{:name => 'info', :action => :edit_project, :partial => 'projects/edit', :label => :label_information_plural}, {:name => 'modules', :action => :select_project_modules, :partial => 'projects/settings/modules', :label => :label_module_plural}, diff --git a/app/models/issue.rb b/app/models/issue.rb index 8bdfda836..462d7d99f 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1132,7 +1132,6 @@ class Issue < ActiveRecord::Base def parent_issue_id=(arg) s = arg.to_s.strip.presence if s && (m = s.match(%r{\A#?(\d+)\z})) && (@parent_issue = Issue.find_by_id(m[1])) - @parent_issue.id @invalid_parent_issue_id = nil elsif s.blank? @parent_issue = nil diff --git a/app/models/project.rb b/app/models/project.rb index 89d4a5297..029b12945 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -962,10 +962,11 @@ class Project < ActiveRecord::Base def copy_queries(project) project.queries.each do |query| new_query = IssueQuery.new - new_query.attributes = query.attributes.dup.except("id", "project_id", "sort_criteria") + new_query.attributes = query.attributes.dup.except("id", "project_id", "sort_criteria", "user_id", "type") new_query.sort_criteria = query.sort_criteria if query.sort_criteria new_query.project = self new_query.user_id = query.user_id + new_query.role_ids = query.role_ids if query.visibility == IssueQuery::VISIBILITY_ROLES self.queries << new_query end end diff --git a/app/models/user.rb b/app/models/user.rb index 3ac98620b..a0a703700 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -722,17 +722,17 @@ class User < Principal return if self.id.nil? substitute = User.anonymous - Attachment.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) + Attachment.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) Comment.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) Issue.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) Issue.where(['assigned_to_id = ?', id]).update_all('assigned_to_id = NULL') - Journal.where(['user_id = ?', id]).update_all(['user_id = ?', substitute.id]) + Journal.where(['user_id = ?', id]).update_all(['user_id = ?', substitute.id]) JournalDetail. where(["property = 'attr' AND prop_key = 'assigned_to_id' AND old_value = ?", id.to_s]). update_all(['old_value = ?', substitute.id.to_s]) JournalDetail. where(["property = 'attr' AND prop_key = 'assigned_to_id' AND value = ?", id.to_s]). - update_all(['value = ?', substitute.id.to_s]) + update_all(['value = ?', substitute.id.to_s]) Message.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) News.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) # Remove private queries and keep public ones diff --git a/app/models/version.rb b/app/models/version.rb index 214a987ad..c8ac6ca0e 100644 --- a/app/models/version.rb +++ b/app/models/version.rb @@ -220,6 +220,11 @@ class Version < ActiveRecord::Base end end + # Returns true if the version is shared, otherwise false + def shared? + sharing != 'none' + end + private def load_issue_counts diff --git a/app/views/common/_tabs.html.erb b/app/views/common/_tabs.html.erb index ffb7f2afa..454b5d772 100644 --- a/app/views/common/_tabs.html.erb +++ b/app/views/common/_tabs.html.erb @@ -8,8 +8,8 @@ <% end -%> diff --git a/config/initializers/30-redmine.rb b/config/initializers/30-redmine.rb index a736902c9..7cf227605 100644 --- a/config/initializers/30-redmine.rb +++ b/config/initializers/30-redmine.rb @@ -22,3 +22,9 @@ Redmine::Plugin.load unless Redmine::Configuration['mirror_plugins_assets_on_startup'] == false Redmine::Plugin.mirror_assets end + +Rails.application.config.to_prepare do + Redmine::FieldFormat::RecordList.subclasses.each do |klass| + klass.instance.reset_target_class + end +end \ No newline at end of file diff --git a/doc/CHANGELOG b/doc/CHANGELOG index c55868d09..01f598b8c 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -86,7 +86,7 @@ http://www.redmine.org/ * Defect #16655: start_date not set despite settings[default_issue_start_date_to_creation_date] being set. * Defect #16668: Redmine links broken when object name contains special characters * Defect #16669: Markdown formatter should use the :no_intra_emphasis extension -* Defect #16708: Form is submitted when swithing tab +* Defect #16708: Form is submitted when switching tab * Defect #16739: custom_fields.json only returns single tracker instead of array of trackers * Defect #16747: Remove useless settings when editing a query from the gantt * Defect #16755: Field set as read-only still available in the issues list context menu diff --git a/lib/redmine/field_format.rb b/lib/redmine/field_format.rb index e1387f2cf..34591bb5f 100644 --- a/lib/redmine/field_format.rb +++ b/lib/redmine/field_format.rb @@ -597,6 +597,10 @@ module Redmine def target_class @target_class ||= self.class.name[/^(.*::)?(.+)Format$/, 2].constantize rescue nil end + + def reset_target_class + @target_class = nil + end def possible_custom_value_options(custom_value) options = possible_values_options(custom_value.custom_field, custom_value.customized) diff --git a/test/object_helpers.rb b/test/object_helpers.rb index 1469e6aff..f3c671bf5 100644 --- a/test/object_helpers.rb +++ b/test/object_helpers.rb @@ -178,6 +178,14 @@ module ObjectHelpers changeset.save! changeset end + + def Query.generate!(attributes={}) + query = new(attributes) + query.name = "Generated query" if query.name.blank? + query.user ||= User.find(1) + query.save! + query + end end module IssueObjectHelpers diff --git a/test/unit/helpers/projects_helper_test.rb b/test/unit/helpers/projects_helper_test.rb index 20f4283fe..b4db5d42f 100644 --- a/test/unit/helpers/projects_helper_test.rb +++ b/test/unit/helpers/projects_helper_test.rb @@ -42,16 +42,23 @@ class ProjectsHelperTest < ActionView::TestCase def test_link_to_version_within_project @project = Project.find(2) User.current = User.find(1) - assert_equal 'Alpha', link_to_version(Version.find(5)) + assert_equal 'Alpha', link_to_version(Version.find(5)) end def test_link_to_version User.current = User.find(1) - assert_equal 'OnlineStore - Alpha', link_to_version(Version.find(5)) + assert_equal 'Alpha', link_to_version(Version.find(5)) + end + + def test_link_to_version_without_effective_date + User.current = User.find(1) + version = Version.find(5) + version.effective_date = nil + assert_equal 'Alpha', link_to_version(version) end def test_link_to_private_version - assert_equal 'OnlineStore - Alpha', link_to_version(Version.find(5)) + assert_equal 'Alpha', link_to_version(Version.find(5)) end def test_link_to_version_invalid_version @@ -64,11 +71,20 @@ class ProjectsHelperTest < ActionView::TestCase end def test_format_version_name - assert_equal "eCookbook - 0.1", format_version_name(Version.find(1)) + assert_equal "0.1", format_version_name(Version.find(1)) + end + + def test_format_version_name_for_shared_version_within_project_should_not_display_project_name + @project = Project.find(1) + version = Version.find(1) + version.sharing = 'system' + assert_equal "0.1", format_version_name(version) end - def test_format_version_name_for_system_version - assert_equal "OnlineStore - Systemwide visible version", format_version_name(Version.find(7)) + def test_format_version_name_for_shared_version_should_display_project_name + version = Version.find(1) + version.sharing = 'system' + assert_equal "eCookbook - 0.1", format_version_name(version) end def test_version_options_for_select_with_no_versions diff --git a/test/unit/project_copy_test.rb b/test/unit/project_copy_test.rb index 238417a2d..2f1f6ee59 100644 --- a/test/unit/project_copy_test.rb +++ b/test/unit/project_copy_test.rb @@ -222,6 +222,17 @@ class ProjectCopyTest < ActiveSupport::TestCase assert_equal @source_project.queries.map(&:user_id).sort, @project.queries.map(&:user_id).sort end + def test_copy_should_copy_queries_roles_visibility + source = Project.generate! + target = Project.new(:name => 'Copy Test', :identifier => 'copy-test') + IssueQuery.generate!(:project => source, :visibility => Query::VISIBILITY_ROLES, :roles => Role.where(:id => [1, 3]).to_a) + + assert target.copy(source) + assert_equal 1, target.queries.size + query = target.queries.first + assert_equal [1, 3], query.role_ids.sort + end + test "#copy should copy versions" do @source_project.versions << Version.generate! @source_project.versions << Version.generate! -- 2.39.5