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?
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'
end
def format_version_name(version)
- if version.project == @project
+ if !version.shared? || version.project == @project
h(version)
else
h("#{version.project} - #{version}")
# 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},
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
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
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
end
end
+ # Returns true if the version is shared, otherwise false
+ def shared?
+ sharing != 'none'
+ end
+
private
def load_issue_counts
<% 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>
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
* 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
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)
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
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
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
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!