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 »