Patch #18134 » 5. merge-missing-in-41-from-trunk_to_rails-4.1_at_r13451.patch
| app/helpers/application_helper.rb (working copy) | ||
|---|---|---|
| 155 | 155 |
end |
| 156 | 156 |
end |
| 157 | 157 | |
| 158 |
# Generates a link to a version |
|
| 159 |
def link_to_version(version, options = {})
|
|
| 160 |
return '' unless version && version.is_a?(Version) |
|
| 161 |
options = {:title => format_date(version.effective_date)}.merge(options)
|
|
| 162 |
link_to_if version.visible?, format_version_name(version), version_path(version), options |
|
| 163 |
end |
|
| 164 | ||
| 158 | 165 |
# Helper that formats object for html or text rendering |
| 159 | 166 |
def format_object(object, html=true, &block) |
| 160 | 167 |
if block_given? |
| ... | ... | |
| 176 | 183 |
when 'Project' |
| 177 | 184 |
html ? link_to_project(object) : object.to_s |
| 178 | 185 |
when 'Version' |
| 179 |
html ? link_to(object.name, version_path(object)) : object.to_s
|
|
| 186 |
html ? link_to_version(object) : object.to_s
|
|
| 180 | 187 |
when 'TrueClass' |
| 181 | 188 |
l(:general_text_Yes) |
| 182 | 189 |
when 'FalseClass' |
| ... | ... | |
| 238 | 245 |
end |
| 239 | 246 | |
| 240 | 247 |
def format_version_name(version) |
| 241 |
if version.project == @project |
|
| 248 |
if !version.shared? || version.project == @project
|
|
| 242 | 249 |
h(version) |
| 243 | 250 |
else |
| 244 | 251 |
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) | ||
|---|---|---|
| 1136 | 1136 |
def parent_issue_id=(arg) |
| 1137 | 1137 |
s = arg.to_s.strip.presence |
| 1138 | 1138 |
if s && (m = s.match(%r{\A#?(\d+)\z})) && (@parent_issue = Issue.find_by_id(m[1]))
|
| 1139 |
@parent_issue.id |
|
| 1140 | 1139 |
@invalid_parent_issue_id = nil |
| 1141 | 1140 |
elsif s.blank? |
| 1142 | 1141 |
@parent_issue = nil |
| app/models/project.rb (working copy) | ||
|---|---|---|
| 969 | 969 |
def copy_queries(project) |
| 970 | 970 |
project.queries.each do |query| |
| 971 | 971 |
new_query = IssueQuery.new |
| 972 |
new_query.attributes = query.attributes.dup.except("id", "project_id", "sort_criteria")
|
|
| 972 |
new_query.attributes = query.attributes.dup.except("id", "project_id", "sort_criteria", "user_id", "type")
|
|
| 973 | 973 |
new_query.sort_criteria = query.sort_criteria if query.sort_criteria |
| 974 | 974 |
new_query.project = self |
| 975 | 975 |
new_query.user_id = query.user_id |
| 976 |
new_query.role_ids = query.role_ids if query.visibility == IssueQuery::VISIBILITY_ROLES |
|
| 976 | 977 |
self.queries << new_query |
| 977 | 978 |
end |
| 978 | 979 |
end |
| app/models/user.rb (working copy) | ||
|---|---|---|
| 727 | 727 |
return if self.id.nil? |
| 728 | 728 | |
| 729 | 729 |
substitute = User.anonymous |
| 730 |
Attachment.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id])
|
|
| 730 |
Attachment.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
|
| 731 | 731 |
Comment.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
| 732 | 732 |
Issue.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
| 733 | 733 |
Issue.where(['assigned_to_id = ?', id]).update_all('assigned_to_id = NULL')
|
| 734 |
Journal.where(['user_id = ?', id]).update_all(['user_id = ?', substitute.id])
|
|
| 734 |
Journal.where(['user_id = ?', id]).update_all(['user_id = ?', substitute.id]) |
|
| 735 | 735 |
JournalDetail. |
| 736 | 736 |
where(["property = 'attr' AND prop_key = 'assigned_to_id' AND old_value = ?", id.to_s]). |
| 737 | 737 |
update_all(['old_value = ?', substitute.id.to_s]) |
| 738 | 738 |
JournalDetail. |
| 739 | 739 |
where(["property = 'attr' AND prop_key = 'assigned_to_id' AND value = ?", id.to_s]). |
| 740 |
update_all(['value = ?', substitute.id.to_s])
|
|
| 740 |
update_all(['value = ?', substitute.id.to_s]) |
|
| 741 | 741 |
Message.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
| 742 | 742 |
News.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
| 743 | 743 |
# Remove private queries and keep public ones |
| app/models/version.rb (working copy) | ||
|---|---|---|
| 233 | 233 |
end |
| 234 | 234 |
end |
| 235 | 235 | |
| 236 |
# Returns true if the version is shared, otherwise false |
|
| 237 |
def shared? |
|
| 238 |
sharing != 'none' |
|
| 239 |
end |
|
| 240 | ||
| 236 | 241 |
private |
| 237 | 242 | |
| 238 | 243 |
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 |
|
| config/locales/bg.yml (working copy) | ||
|---|---|---|
| 914 | 914 |
label_only: само |
| 915 | 915 |
label_drop_down_list: drop-down списък |
| 916 | 916 |
label_checkboxes: чек-бокс |
| 917 |
label_radio_buttons: радио-бутони |
|
| 917 | 918 |
label_link_values_to: URL (опция) |
| 918 | 919 |
label_custom_field_select_type: "Изберете тип на обект, към който потребителското поле да бъде асоциирано" |
| 919 | 920 |
label_check_for_updates: Проверка за нови версии |
| ... | ... | |
| 1111 | 1112 |
description_date_from: Въведете начална дата |
| 1112 | 1113 |
description_date_to: Въведете крайна дата |
| 1113 | 1114 |
text_repository_identifier_info: 'Позволени са малки букви (a-z), цифри, тирета и _.<br />Промяна след създаването му не е възможна.' |
| 1114 |
label_radio_buttons: radio buttons |
|
| config/locales/de.yml (working copy) | ||
|---|---|---|
| 684 | 684 |
label_query: Benutzerdefinierte Abfrage |
| 685 | 685 |
label_query_new: Neue Abfrage |
| 686 | 686 |
label_query_plural: Benutzerdefinierte Abfragen |
| 687 |
label_radio_buttons: Radio-Buttons |
|
| 687 | 688 |
label_read: Lesen... |
| 688 | 689 |
label_readonly: Nur-Lese-Zugriff |
| 689 | 690 |
label_register: Registrieren |
| ... | ... | |
| 1124 | 1125 |
version_status_open: offen |
| 1125 | 1126 | |
| 1126 | 1127 |
warning_attachments_not_saved: "%{count} Datei(en) konnten nicht gespeichert werden."
|
| 1127 |
label_radio_buttons: radio buttons |
|
| 1128 | 1128 |
label_group_anonymous: Anonymous users |
| 1129 | 1129 |
label_group_non_member: Non member users |
| config/locales/ja.yml (working copy) | ||
|---|---|---|
| 249 | 249 |
field_is_for_all: 全プロジェクト向け |
| 250 | 250 |
field_possible_values: 選択肢 |
| 251 | 251 |
field_regexp: 正規表現 |
| 252 |
field_min_length: 最小値
|
|
| 253 |
field_max_length: 最大値
|
|
| 252 |
field_min_length: 最短長
|
|
| 253 |
field_max_length: 最大長
|
|
| 254 | 254 |
field_value: 値 |
| 255 | 255 |
field_category: カテゴリ |
| 256 | 256 |
field_title: タイトル |
| ... | ... | |
| 305 | 305 |
field_activity: 活動 |
| 306 | 306 |
field_spent_on: 日付 |
| 307 | 307 |
field_identifier: 識別子 |
| 308 |
field_is_filter: フィルタとして使う
|
|
| 308 |
field_is_filter: フィルタとして使用
|
|
| 309 | 309 |
field_issue_to: 関連するチケット |
| 310 | 310 |
field_delay: 遅延 |
| 311 | 311 |
field_assignable: このロールにチケットを割り当て可能 |
| ... | ... | |
| 314 | 314 |
field_column_names: 項目 |
| 315 | 315 |
field_time_entries: 時間を記録 |
| 316 | 316 |
field_time_zone: タイムゾーン |
| 317 |
field_searchable: 検索条件に設定可能とする
|
|
| 317 |
field_searchable: 検索対象
|
|
| 318 | 318 |
field_default_value: デフォルト値 |
| 319 | 319 |
field_comments_sorting: コメントの表示順 |
| 320 | 320 |
field_parent_title: 親ページ |
| ... | ... | |
| 541 | 541 |
label_subproject_plural: サブプロジェクト |
| 542 | 542 |
label_subproject_new: 新しいサブプロジェクト |
| 543 | 543 |
label_and_its_subprojects: "%{value} とサブプロジェクト"
|
| 544 |
label_min_max_length: 最小値 - 最大値の長さ
|
|
| 544 |
label_min_max_length: 最短 - 最大長
|
|
| 545 | 545 |
label_list: リストから選択 |
| 546 | 546 |
label_date: 日付 |
| 547 | 547 |
label_integer: 整数 |
| config/locales/zh-TW.yml (working copy) | ||
|---|---|---|
| 996 | 996 |
label_only: 僅於 |
| 997 | 997 |
label_drop_down_list: 下拉式清單 |
| 998 | 998 |
label_checkboxes: 核取方塊 |
| 999 |
label_radio_buttons: 選項按鈕 |
|
| 999 | 1000 |
label_link_values_to: 連結欄位值至此網址 |
| 1000 | 1001 |
label_custom_field_select_type: 請選擇連結此自訂欄位的物件類型 |
| 1001 | 1002 |
label_check_for_updates: 檢查更新 |
| ... | ... | |
| 1194 | 1195 |
description_date_from: 輸入起始日期 |
| 1195 | 1196 |
description_date_to: 輸入結束日期 |
| 1196 | 1197 |
text_repository_identifier_info: '僅允許使用小寫英文字母 (a-z), 阿拉伯數字, 虛線與底線。<br />一旦儲存之後, 代碼便無法再次被更改。' |
| 1197 |
label_radio_buttons: radio buttons |
|
| doc/CHANGELOG (working copy) | ||
|---|---|---|
| 14 | 14 |
* Defect #16655: start_date not set despite settings[default_issue_start_date_to_creation_date] being set. |
| 15 | 15 |
* Defect #16668: Redmine links broken when object name contains special characters |
| 16 | 16 |
* Defect #16669: Markdown formatter should use the :no_intra_emphasis extension |
| 17 |
* Defect #16708: Form is submitted when swithing tab |
|
| 17 |
* Defect #16708: Form is submitted when switching tab
|
|
| 18 | 18 |
* Defect #16739: custom_fields.json only returns single tracker instead of array of trackers |
| 19 | 19 |
* Defect #16747: Remove useless settings when editing a query from the gantt |
| 20 | 20 |
* 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! |
- « Previous
- 1
- …
- 3
- 4
- 5
- Next »