]> source.dussan.org Git - redmine.git/commitdiff
Restores commits reverted when rails-4.1 branch was merged (#18174).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 24 Oct 2014 18:41:35 +0000 (18:41 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 24 Oct 2014 18:41:35 +0000 (18:41 +0000)
Patch by Mischa The Evil.

git-svn-id: http://svn.redmine.org/redmine/trunk@13504 e93f8b46-1217-0410-a6f0-8f06a7374b81

13 files changed:
app/helpers/application_helper.rb
app/helpers/projects_helper.rb
app/models/issue.rb
app/models/project.rb
app/models/user.rb
app/models/version.rb
app/views/common/_tabs.html.erb
config/initializers/30-redmine.rb
doc/CHANGELOG
lib/redmine/field_format.rb
test/object_helpers.rb
test/unit/helpers/projects_helper_test.rb
test/unit/project_copy_test.rb

index 923dff581dfe49b73315e4b53e26f12f8efe1787..3a40fd2e222a66a6f51790bf54ec396c9291f2ce 100644 (file)
@@ -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}")
index e23ebab993416557d917460f06ade8024d2d2140..8e23ccdda6c64aa48ed1d250667abff80337e77e 100644 (file)
 # 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},
index 8bdfda836ca1ab35129fe6f447917b79edce7fd4..462d7d99f7190f225152e614d4ac270b4d2cb7a6 100644 (file)
@@ -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
index 89d4a52974d291f587b48385ff32451cb179cec7..029b129452bb183c0ffd12267d6c524f1e2b7cc9 100644 (file)
@@ -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
index 3ac98620bd5423b336fcc8ddd448661ade772a33..a0a703700b0cbd75d7ebdf50517a3e644f3842a5 100644 (file)
@@ -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
index 214a987adbba3a5cfdd444ec3f6f6e788ca2a94b..c8ac6ca0ef9b92588e5631b2e6067511618c4678 100644 (file)
@@ -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
index ffb7f2afa5a17c54830238df9e15afd16d4c0b56..454b5d77219dd0a2856184a0f884d443b25f8f2b 100644 (file)
@@ -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>
 
index a736902c90d97c68f0d63394f627f0fd70c99e7b..7cf227605c7bcef24047bf695d27e5eb8c054b2b 100644 (file)
@@ -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
index c55868d09b4da373be391e25e369287d7196a61e..01f598b8c28a7d9f7c72b7a59eb3fe5602487fcd 100644 (file)
@@ -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
index e1387f2cfe5f69186636b4ea4c3e3affaebba645..34591bb5fff2facd8df2e3b432eda3984e106a2e 100644 (file)
@@ -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)
index 1469e6aff4c22cb0b674f4e916e88e3b8e098910..f3c671bf5abd3f1f96aea6be005718925efeca70 100644 (file)
@@ -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
index 20f4283febc4df44831b07df0a0507315b1947d1..b4db5d42f31b378cd891ef09a3bd4c4e8a104d20 100644 (file)
@@ -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
index 238417a2d01bd030789b1db749fdbcf409be6537..2f1f6ee59974407b280a452a2de8cf4cc44f71a1 100644 (file)
@@ -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!