Defect #18174 ยป rm18174-reintegrate_commits_on_trunk_reverted_by_r13482_merge-trunk_r13503.patch
app/helpers/application_helper.rb (working copy) | ||
---|---|---|
153 | 153 |
end |
154 | 154 |
end |
155 | 155 | |
156 |
# Generates a link to a version |
|
157 |
def link_to_version(version, options = {}) |
|
158 |
return '' unless version && version.is_a?(Version) |
|
159 |
options = {:title => format_date(version.effective_date)}.merge(options) |
|
160 |
link_to_if version.visible?, format_version_name(version), version_path(version), options |
|
161 |
end |
|
162 | ||
156 | 163 |
# Helper that formats object for html or text rendering |
157 | 164 |
def format_object(object, html=true, &block) |
158 | 165 |
if block_given? |
... | ... | |
174 | 181 |
when 'Project' |
175 | 182 |
html ? link_to_project(object) : object.to_s |
176 | 183 |
when 'Version' |
177 |
html ? link_to(object.name, version_path(object)) : object.to_s
|
|
184 |
html ? link_to_version(object) : object.to_s
|
|
178 | 185 |
when 'TrueClass' |
179 | 186 |
l(:general_text_Yes) |
180 | 187 |
when 'FalseClass' |
... | ... | |
236 | 243 |
end |
237 | 244 | |
238 | 245 |
def format_version_name(version) |
239 |
if version.project == @project |
|
246 |
if !version.shared? || version.project == @project
|
|
240 | 247 |
h(version) |
241 | 248 |
else |
242 | 249 |
h("#{version.project} - #{version}") |
app/helpers/projects_helper.rb (working copy) | ||
---|---|---|
18 | 18 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
19 | 19 | |
20 | 20 |
module ProjectsHelper |
21 |
def link_to_version(version, options = {}) |
|
22 |
return '' unless version && version.is_a?(Version) |
|
23 |
link_to_if version.visible?, format_version_name(version), version_path(version), options |
|
24 |
end |
|
25 | ||
26 | 21 |
def project_settings_tabs |
27 | 22 |
tabs = [{:name => 'info', :action => :edit_project, :partial => 'projects/edit', :label => :label_information_plural}, |
28 | 23 |
{:name => 'modules', :action => :select_project_modules, :partial => 'projects/settings/modules', :label => :label_module_plural}, |
app/models/issue.rb (working copy) | ||
---|---|---|
1132 | 1132 |
def parent_issue_id=(arg) |
1133 | 1133 |
s = arg.to_s.strip.presence |
1134 | 1134 |
if s && (m = s.match(%r{\A#?(\d+)\z})) && (@parent_issue = Issue.find_by_id(m[1])) |
1135 |
@parent_issue.id |
|
1136 | 1135 |
@invalid_parent_issue_id = nil |
1137 | 1136 |
elsif s.blank? |
1138 | 1137 |
@parent_issue = nil |
app/models/project.rb (working copy) | ||
---|---|---|
962 | 962 |
def copy_queries(project) |
963 | 963 |
project.queries.each do |query| |
964 | 964 |
new_query = IssueQuery.new |
965 |
new_query.attributes = query.attributes.dup.except("id", "project_id", "sort_criteria") |
|
965 |
new_query.attributes = query.attributes.dup.except("id", "project_id", "sort_criteria", "user_id", "type")
|
|
966 | 966 |
new_query.sort_criteria = query.sort_criteria if query.sort_criteria |
967 | 967 |
new_query.project = self |
968 | 968 |
new_query.user_id = query.user_id |
969 |
new_query.role_ids = query.role_ids if query.visibility == IssueQuery::VISIBILITY_ROLES |
|
969 | 970 |
self.queries << new_query |
970 | 971 |
end |
971 | 972 |
end |
app/models/user.rb (working copy) | ||
---|---|---|
722 | 722 |
return if self.id.nil? |
723 | 723 | |
724 | 724 |
substitute = User.anonymous |
725 |
Attachment.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id])
|
|
725 |
Attachment.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
|
726 | 726 |
Comment.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
727 | 727 |
Issue.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
728 | 728 |
Issue.where(['assigned_to_id = ?', id]).update_all('assigned_to_id = NULL') |
729 |
Journal.where(['user_id = ?', id]).update_all(['user_id = ?', substitute.id])
|
|
729 |
Journal.where(['user_id = ?', id]).update_all(['user_id = ?', substitute.id]) |
|
730 | 730 |
JournalDetail. |
731 | 731 |
where(["property = 'attr' AND prop_key = 'assigned_to_id' AND old_value = ?", id.to_s]). |
732 | 732 |
update_all(['old_value = ?', substitute.id.to_s]) |
733 | 733 |
JournalDetail. |
734 | 734 |
where(["property = 'attr' AND prop_key = 'assigned_to_id' AND value = ?", id.to_s]). |
735 |
update_all(['value = ?', substitute.id.to_s])
|
|
735 |
update_all(['value = ?', substitute.id.to_s]) |
|
736 | 736 |
Message.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
737 | 737 |
News.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
738 | 738 |
# Remove private queries and keep public ones |
app/models/version.rb (working copy) | ||
---|---|---|
220 | 220 |
end |
221 | 221 |
end |
222 | 222 | |
223 |
# Returns true if the version is shared, otherwise false |
|
224 |
def shared? |
|
225 |
sharing != 'none' |
|
226 |
end |
|
227 | ||
223 | 228 |
private |
224 | 229 | |
225 | 230 |
def load_issue_counts |
app/views/common/_tabs.html.erb (working copy) | ||
---|---|---|
8 | 8 |
<% end -%> |
9 | 9 |
</ul> |
10 | 10 |
<div class="tabs-buttons" style="display:none;"> |
11 |
<button class="tab-left" onclick="moveTabLeft(this); return false;"></button>
|
|
12 |
<button class="tab-right" onclick="moveTabRight(this); return false;"></button>
|
|
11 |
<button class="tab-left" type="button" onclick="moveTabLeft(this);"></button>
|
|
12 |
<button class="tab-right" type="button" onclick="moveTabRight(this);"></button>
|
|
13 | 13 |
</div> |
14 | 14 |
</div> |
15 | 15 |
config/initializers/30-redmine.rb (working copy) | ||
---|---|---|
22 | 22 |
unless Redmine::Configuration['mirror_plugins_assets_on_startup'] == false |
23 | 23 |
Redmine::Plugin.mirror_assets |
24 | 24 |
end |
25 | ||
26 |
Rails.application.config.to_prepare do |
|
27 |
Redmine::FieldFormat::RecordList.subclasses.each do |klass| |
|
28 |
klass.instance.reset_target_class |
|
29 |
end |
|
30 |
end |
doc/CHANGELOG (working copy) | ||
---|---|---|
86 | 86 |
* Defect #16655: start_date not set despite settings[default_issue_start_date_to_creation_date] being set. |
87 | 87 |
* Defect #16668: Redmine links broken when object name contains special characters |
88 | 88 |
* Defect #16669: Markdown formatter should use the :no_intra_emphasis extension |
89 |
* Defect #16708: Form is submitted when swithing tab |
|
89 |
* Defect #16708: Form is submitted when switching tab
|
|
90 | 90 |
* Defect #16739: custom_fields.json only returns single tracker instead of array of trackers |
91 | 91 |
* Defect #16747: Remove useless settings when editing a query from the gantt |
92 | 92 |
* Defect #16755: Field set as read-only still available in the issues list context menu |
lib/redmine/field_format.rb (working copy) | ||
---|---|---|
597 | 597 |
def target_class |
598 | 598 |
@target_class ||= self.class.name[/^(.*::)?(.+)Format$/, 2].constantize rescue nil |
599 | 599 |
end |
600 | ||
601 |
def reset_target_class |
|
602 |
@target_class = nil |
|
603 |
end |
|
600 | 604 |
|
601 | 605 |
def possible_custom_value_options(custom_value) |
602 | 606 |
options = possible_values_options(custom_value.custom_field, custom_value.customized) |
test/object_helpers.rb (working copy) | ||
---|---|---|
178 | 178 |
changeset.save! |
179 | 179 |
changeset |
180 | 180 |
end |
181 | ||
182 |
def Query.generate!(attributes={}) |
|
183 |
query = new(attributes) |
|
184 |
query.name = "Generated query" if query.name.blank? |
|
185 |
query.user ||= User.find(1) |
|
186 |
query.save! |
|
187 |
query |
|
188 |
end |
|
181 | 189 |
end |
182 | 190 | |
183 | 191 |
module IssueObjectHelpers |
test/unit/helpers/projects_helper_test.rb (working copy) | ||
---|---|---|
42 | 42 |
def test_link_to_version_within_project |
43 | 43 |
@project = Project.find(2) |
44 | 44 |
User.current = User.find(1) |
45 |
assert_equal '<a href="/versions/5">Alpha</a>', link_to_version(Version.find(5)) |
|
45 |
assert_equal '<a href="/versions/5" title="07/01/2006">Alpha</a>', link_to_version(Version.find(5))
|
|
46 | 46 |
end |
47 | 47 | |
48 | 48 |
def test_link_to_version |
49 | 49 |
User.current = User.find(1) |
50 |
assert_equal '<a href="/versions/5">OnlineStore - Alpha</a>', link_to_version(Version.find(5))
|
|
50 |
assert_equal '<a href="/versions/5" title="07/01/2006">Alpha</a>', link_to_version(Version.find(5))
|
|
51 | 51 |
end |
52 | 52 | |
53 |
def test_link_to_version_without_effective_date |
|
54 |
User.current = User.find(1) |
|
55 |
version = Version.find(5) |
|
56 |
version.effective_date = nil |
|
57 |
assert_equal '<a href="/versions/5">Alpha</a>', link_to_version(version) |
|
58 |
end |
|
59 | ||
53 | 60 |
def test_link_to_private_version |
54 |
assert_equal 'OnlineStore - Alpha', link_to_version(Version.find(5))
|
|
61 |
assert_equal 'Alpha', link_to_version(Version.find(5)) |
|
55 | 62 |
end |
56 | 63 | |
57 | 64 |
def test_link_to_version_invalid_version |
... | ... | |
64 | 71 |
end |
65 | 72 | |
66 | 73 |
def test_format_version_name |
67 |
assert_equal "eCookbook - 0.1", format_version_name(Version.find(1))
|
|
74 |
assert_equal "0.1", format_version_name(Version.find(1)) |
|
68 | 75 |
end |
69 | 76 | |
70 |
def test_format_version_name_for_system_version |
|
71 |
assert_equal "OnlineStore - Systemwide visible version", format_version_name(Version.find(7)) |
|
77 |
def test_format_version_name_for_shared_version_within_project_should_not_display_project_name |
|
78 |
@project = Project.find(1) |
|
79 |
version = Version.find(1) |
|
80 |
version.sharing = 'system' |
|
81 |
assert_equal "0.1", format_version_name(version) |
|
72 | 82 |
end |
73 | 83 | |
84 |
def test_format_version_name_for_shared_version_should_display_project_name |
|
85 |
version = Version.find(1) |
|
86 |
version.sharing = 'system' |
|
87 |
assert_equal "eCookbook - 0.1", format_version_name(version) |
|
88 |
end |
|
89 | ||
74 | 90 |
def test_version_options_for_select_with_no_versions |
75 | 91 |
assert_equal '', version_options_for_select([]) |
76 | 92 |
assert_equal '', version_options_for_select([], Version.find(1)) |
test/unit/project_copy_test.rb (working copy) | ||
---|---|---|
222 | 222 |
assert_equal @source_project.queries.map(&:user_id).sort, @project.queries.map(&:user_id).sort |
223 | 223 |
end |
224 | 224 | |
225 |
def test_copy_should_copy_queries_roles_visibility |
|
226 |
source = Project.generate! |
|
227 |
target = Project.new(:name => 'Copy Test', :identifier => 'copy-test') |
|
228 |
IssueQuery.generate!(:project => source, :visibility => Query::VISIBILITY_ROLES, :roles => Role.where(:id => [1, 3]).to_a) |
|
229 | ||
230 |
assert target.copy(source) |
|
231 |
assert_equal 1, target.queries.size |
|
232 |
query = target.queries.first |
|
233 |
assert_equal [1, 3], query.role_ids.sort |
|
234 |
end |
|
235 | ||
225 | 236 |
test "#copy should copy versions" do |
226 | 237 |
@source_project.versions << Version.generate! |
227 | 238 |
@source_project.versions << Version.generate! |