summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/helpers/application_helper.rb11
-rw-r--r--app/helpers/projects_helper.rb5
-rw-r--r--app/models/issue.rb1
-rw-r--r--app/models/project.rb3
-rw-r--r--app/models/user.rb6
-rw-r--r--app/models/version.rb5
-rw-r--r--app/views/common/_tabs.html.erb4
-rw-r--r--config/initializers/30-redmine.rb6
-rw-r--r--doc/CHANGELOG2
-rw-r--r--lib/redmine/field_format.rb4
-rw-r--r--test/object_helpers.rb8
-rw-r--r--test/unit/helpers/projects_helper_test.rb28
-rw-r--r--test/unit/project_copy_test.rb11
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 -%>
</ul>
<div class="tabs-buttons" style="display:none;">
- <button class="tab-left" onclick="moveTabLeft(this); return false;"></button>
- <button class="tab-right" onclick="moveTabRight(this); return false;"></button>
+ <button class="tab-left" type="button" onclick="moveTabLeft(this);"></button>
+ <button class="tab-right" type="button" onclick="moveTabRight(this);"></button>
</div>
</div>
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 '<a href="/versions/5">Alpha</a>', link_to_version(Version.find(5))
+ assert_equal '<a href="/versions/5" title="07/01/2006">Alpha</a>', link_to_version(Version.find(5))
end
def test_link_to_version
User.current = User.find(1)
- assert_equal '<a href="/versions/5">OnlineStore - Alpha</a>', link_to_version(Version.find(5))
+ assert_equal '<a href="/versions/5" title="07/01/2006">Alpha</a>', 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 '<a href="/versions/5">Alpha</a>', 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!