Compare commits

...

165 Commits

Author SHA1 Message Date
Toshi MARUYAMA 868e15ff2d remove unneeded trailing ';' from lib/redmine/export/pdf.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13132 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-07 08:25:15 +00:00
Toshi MARUYAMA 1944473eee remove unneeded trailing ';' from test/functional/repositories_git_controller_test.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13131 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-07 08:25:00 +00:00
Toshi MARUYAMA e06de47234 Gemfile: update Rails 3.2.18
git-svn-id: http://svn.redmine.org/redmine/trunk@13130 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-07 07:55:53 +00:00
Toshi MARUYAMA a87cc86b99 fix typo of app/models/repository/mercurial.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13129 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-03 23:21:01 +00:00
Toshi MARUYAMA 6eaba1137a fix typo of app/models/repository/cvs.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13128 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-03 23:20:45 +00:00
Jean-Philippe Lang ef4cacdb66 Repository identifiers can be reserved words (#16564).
Patch by Felix Schäfer.

git-svn-id: http://svn.redmine.org/redmine/trunk@13127 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-02 08:09:33 +00:00
Jean-Philippe Lang 53deb6ca88 Mailer.token_for generates invalid message_id when using from address with full name (#16619).
git-svn-id: http://svn.redmine.org/redmine/trunk@13126 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-02 07:56:11 +00:00
Jean-Philippe Lang 61776a8b7e Blank content type for attachments attached via Ajax file upload (Patch by Jens Krämer).
git-svn-id: http://svn.redmine.org/redmine/trunk@13125 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-02 07:38:04 +00:00
Jean-Philippe Lang 382ca5055a Field set as read-only still available in the issues list context menu (#16755).
git-svn-id: http://svn.redmine.org/redmine/trunk@13124 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-02 07:32:41 +00:00
Jean-Philippe Lang 2d3f3cd9aa Use async email deliveries in rake tasks (#16784).
git-svn-id: http://svn.redmine.org/redmine/trunk@13123 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-02 07:07:02 +00:00
Jean-Philippe Lang bcc5ac38f3 Crash in markdown formatter causes ruby process to end (#16781).
Patch by Jens Krämer.

git-svn-id: http://svn.redmine.org/redmine/trunk@13122 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-02 06:57:29 +00:00
Toshi MARUYAMA 9875ed9954 Gemfile: upgrade mocha version (#16685)
git-svn-id: http://svn.redmine.org/redmine/trunk@13117 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-01 11:44:06 +00:00
Toshi MARUYAMA 6b33956394 use rvm 2.0 and 2.1 instead of 2.0.0 and 2.1.0 at .travis.yml
See:
https://github.com/travis-ci/travis-ci/issues/2220

git-svn-id: http://svn.redmine.org/redmine/trunk@13116 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-01 01:59:55 +00:00
Toshi MARUYAMA 82fa2cf79a add patch for regression of Hash#reject in Ruby 2.1.1 (#16194)
git-svn-id: http://svn.redmine.org/redmine/trunk@13115 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-01 01:59:39 +00:00
Toshi MARUYAMA 4276fc306c Gemfile: use double quote for request_store (#16685)
git-svn-id: http://svn.redmine.org/redmine/trunk@13112 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-01 01:50:40 +00:00
Toshi MARUYAMA a599442d05 introduce request_store to ensure that the current user doesn't leak across request boundaries (#16685)
Contributed by Holger Just.

git-svn-id: http://svn.redmine.org/redmine/trunk@13110 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-05-01 00:44:01 +00:00
Jean-Philippe Lang 9fdd0862f7 Missing type=array attributes in custom fields API (#16739).
git-svn-id: http://svn.redmine.org/redmine/trunk@13109 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-26 07:56:00 +00:00
Jean-Philippe Lang ddd6ac8cd4 Don't submit the form when tabs are inside a form (#16708).
Patch by Nicolas Rodriguez.

git-svn-id: http://svn.redmine.org/redmine/trunk@13108 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-26 07:48:28 +00:00
Jean-Philippe Lang 613757a83d Support for the 1.x versions of mime-types gem (#16710).
Patch by Szilveszter Ördög.

git-svn-id: http://svn.redmine.org/redmine/trunk@13107 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-26 07:44:06 +00:00
Jean-Philippe Lang a4fa0364d4 Redmine links not working with html escpaed characters (#16668).
git-svn-id: http://svn.redmine.org/redmine/trunk@13106 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-26 07:34:11 +00:00
Jean-Philippe Lang d197203d79 Set Redcarpet :no_intra_emphasis to true (#16669).
git-svn-id: http://svn.redmine.org/redmine/trunk@13105 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-26 07:02:45 +00:00
Jean-Philippe Lang 43c9d69bf2 Set default start date on issues created by email if default_issue_start_date_to_creation_date is set (#16655).
git-svn-id: http://svn.redmine.org/redmine/trunk@13104 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-26 06:57:09 +00:00
Toshi MARUYAMA 709211cb9c fix non-ascii attachment file name get corrupted in IE11 (#16711)
Contributed by Go MAEDA.

git-svn-id: http://svn.redmine.org/redmine/trunk@13101 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-17 18:21:23 +00:00
Toshi MARUYAMA 9eb7f25918 remove permission_manage_documents (#16704, #7418)
git-svn-id: http://svn.redmine.org/redmine/trunk@13100 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-17 01:11:36 +00:00
Toshi MARUYAMA 771dc9b2d6 fix label_module_plural merge miss (#16704, #7418)
git-svn-id: http://svn.redmine.org/redmine/trunk@13099 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-17 00:53:03 +00:00
Toshi MARUYAMA ee8cf0f12b replace RSS by Atom (#16704, #7418)
git-svn-id: http://svn.redmine.org/redmine/trunk@13098 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-17 00:43:47 +00:00
Toshi MARUYAMA c6fb9c5f51 replace Atom by RSS (#16704, #7418)
git-svn-id: http://svn.redmine.org/redmine/trunk@13097 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-17 00:34:33 +00:00
Toshi MARUYAMA 20df9c4dbd Persian Translation updated by shakib a (#16704, #7418)
git-svn-id: http://svn.redmine.org/redmine/trunk@13096 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-17 00:21:43 +00:00
Toshi MARUYAMA 770a296f43 fix typo at lib/tasks/ciphering.rake
git-svn-id: http://svn.redmine.org/redmine/trunk@13095 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-16 00:20:49 +00:00
Toshi MARUYAMA 8c5d88160f fix typo at lib/tasks/ci.rake
git-svn-id: http://svn.redmine.org/redmine/trunk@13094 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-16 00:20:32 +00:00
Toshi MARUYAMA a581f35dff fix typo at test/unit/helpers/application_helper_test.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13093 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-16 00:20:15 +00:00
Toshi MARUYAMA 4b1f75e611 fix typo at app/controllers/repositories_controller.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13092 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-16 00:19:57 +00:00
Toshi MARUYAMA 44614b5834 fix typo at lib/redcloth3.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13091 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-15 23:57:52 +00:00
Toshi MARUYAMA 38fc2e4391 remove unneeded tabs from test/functional/repositories_cvs_controller_test.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13090 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-15 22:50:04 +00:00
Toshi MARUYAMA bec603eb9b replace tabs to spaces at app/models/repository/cvs.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13089 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-15 22:49:48 +00:00
Toshi MARUYAMA 3270a3af40 replace tabs to spaces at app/models/query.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13088 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-15 22:49:30 +00:00
Toshi MARUYAMA 8c52689d91 reorder French translation (#16553)
Contributed by Darth Vader.

git-svn-id: http://svn.redmine.org/redmine/trunk@13087 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-08 12:39:11 +00:00
Toshi MARUYAMA c777f75edd mark deprecated Enumeration#overridding_change? which was changed in r13056
git-svn-id: http://svn.redmine.org/redmine/trunk@13086 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-08 12:38:55 +00:00
Toshi MARUYAMA ce2b12957f remove trailing white-spaces from Issue#count_and_group_by SQL
git-svn-id: http://svn.redmine.org/redmine/trunk@13084 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-08 11:23:05 +00:00
Toshi MARUYAMA 05d24e64f7 remove trailing white-spaces from Issue#by_subproject SQL
git-svn-id: http://svn.redmine.org/redmine/trunk@13083 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-08 11:22:49 +00:00
Toshi MARUYAMA 3c6d46beec remove trailing white-spaces from app/models/issue.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13082 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-08 11:22:33 +00:00
Toshi MARUYAMA 20496b516f code format clean up Issue#update_versions_from_hierarchy_change
git-svn-id: http://svn.redmine.org/redmine/trunk@13081 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-08 11:22:17 +00:00
Toshi MARUYAMA 2a1a02f976 French "text_git_repository_note" translation updated by Darth Vader (#16553, #16566)
git-svn-id: http://svn.redmine.org/redmine/trunk@13080 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-08 11:22:01 +00:00
Toshi MARUYAMA e26f35860c Traditional Chinese "field_assigned_to" translation changed by ChunChang Lo (#16545, #16556)
git-svn-id: http://svn.redmine.org/redmine/trunk@13078 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-08 02:27:31 +00:00
Toshi MARUYAMA a3f57f1cbf Traditional Chinese translation updated by ChunChang Lo (#16545)
git-svn-id: http://svn.redmine.org/redmine/trunk@13077 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-08 02:27:15 +00:00
Toshi MARUYAMA cebcd67704 fix typos of source comments at Query model
git-svn-id: http://svn.redmine.org/redmine/trunk@13076 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 08:07:59 +00:00
Toshi MARUYAMA e9399e16d2 fix typos of source comments at Project model
git-svn-id: http://svn.redmine.org/redmine/trunk@13075 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 08:07:43 +00:00
Toshi MARUYAMA 3aeb85bfd5 fix typos of source comments at Member model
git-svn-id: http://svn.redmine.org/redmine/trunk@13074 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 08:07:25 +00:00
Toshi MARUYAMA 66f0a5c2ef fix typos of source comments at Issue model
git-svn-id: http://svn.redmine.org/redmine/trunk@13073 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 08:07:08 +00:00
Toshi MARUYAMA 071d2d7f47 fix typos of source comments at Enumeration model
git-svn-id: http://svn.redmine.org/redmine/trunk@13072 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 08:06:50 +00:00
Toshi MARUYAMA 9250994088 fix typos of source comments at ApplicationHelper
git-svn-id: http://svn.redmine.org/redmine/trunk@13071 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 08:06:32 +00:00
Toshi MARUYAMA 6067bfcd09 fix typos of source comments at lib/redmine/wiki_formatting.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13070 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 08:06:14 +00:00
Toshi MARUYAMA 242b440073 fix typos of source comments at lib/redmine/plugin.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13069 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 08:05:54 +00:00
Toshi MARUYAMA bf776b3304 fix typos of source comments at lib/redmine/hook.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13068 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 08:05:35 +00:00
Toshi MARUYAMA e806f8cc43 German Translation updated by Daniel Felix (#16542)
git-svn-id: http://svn.redmine.org/redmine/trunk@13065 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 07:34:47 +00:00
Toshi MARUYAMA 7dca09a135 not use non ASCII characters at CHANGELOG
git-svn-id: http://svn.redmine.org/redmine/trunk@13064 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 05:44:40 +00:00
Toshi MARUYAMA e475798769 fix character broken (MOJIBAKE) of CHANGELOG
git-svn-id: http://svn.redmine.org/redmine/trunk@13063 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 05:44:23 +00:00
Toshi MARUYAMA f773219426 fix typos of source comments at Version model
git-svn-id: http://svn.redmine.org/redmine/trunk@13062 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 00:22:11 +00:00
Toshi MARUYAMA e8e9c046af fix typos at unit version test
git-svn-id: http://svn.redmine.org/redmine/trunk@13061 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 00:21:55 +00:00
Toshi MARUYAMA 5d56f0f26f Japanese translation (email notification) updated by Go MAEDA (#16536)
git-svn-id: http://svn.redmine.org/redmine/trunk@13060 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-07 00:21:39 +00:00
Toshi MARUYAMA 82de347dfd fix typos of source comments at acts_as_event.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@13059 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-06 14:14:55 +00:00
Toshi MARUYAMA 3e89c2ff3e fix typos of source comments at WikiContent model
git-svn-id: http://svn.redmine.org/redmine/trunk@13058 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-06 14:14:40 +00:00
Toshi MARUYAMA 597d042ec2 fix typos of source comments at Project model
git-svn-id: http://svn.redmine.org/redmine/trunk@13057 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-06 14:14:23 +00:00
Toshi MARUYAMA 5e0d93b689 fix typo of Enumeration#overridding_change?
git-svn-id: http://svn.redmine.org/redmine/trunk@13056 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-06 13:32:35 +00:00
Jean-Philippe Lang 01ac064935 Exclude custom fields with multiple values from time report criteria (#16519).
git-svn-id: http://svn.redmine.org/redmine/trunk@13055 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-06 11:29:44 +00:00
Jean-Philippe Lang 22b2a1f699 Fixed that Link custom fields are not displayed as links on the issue list (#16496).
git-svn-id: http://svn.redmine.org/redmine/trunk@13054 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-06 11:11:52 +00:00
Jean-Philippe Lang 5b8a96472f Missing closing tag (#3177).
git-svn-id: http://svn.redmine.org/redmine/trunk@13052 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-06 11:03:57 +00:00
Toshi MARUYAMA 1c208fcc86 Bulgarian translation updated by Ivan Cenov (#16532)
git-svn-id: http://svn.redmine.org/redmine/trunk@13050 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-06 07:11:37 +00:00
Jean-Philippe Lang 25ddc672a1 Adds strings to locales (#3177).
git-svn-id: http://svn.redmine.org/redmine/trunk@13044 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-05 14:08:18 +00:00
Jean-Philippe Lang 64c65463a4 Adds strings to locales (#3177).
git-svn-id: http://svn.redmine.org/redmine/trunk@13043 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-05 14:05:36 +00:00
Jean-Philippe Lang 43d7036051 Adds "Check for updates" for installed plugins (#3177).
git-svn-id: http://svn.redmine.org/redmine/trunk@13042 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-05 14:00:19 +00:00
Jean-Philippe Lang 4920bb9d4d Potentiel data leak in "Invalid form authenticity token" error screen (#16511).
git-svn-id: http://svn.redmine.org/redmine/trunk@13041 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-05 08:19:55 +00:00
Jean-Philippe Lang 380b0515d1 Fixed that back_url=/ param is ignored (#16467).
git-svn-id: http://svn.redmine.org/redmine/trunk@13040 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-05 08:11:28 +00:00
Toshi MARUYAMA e739628c81 replace mail options reference URL at configuration.yml.example
wiki.rubyonrails.org seems dead.

git-svn-id: http://svn.redmine.org/redmine/trunk@13037 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-05 00:21:16 +00:00
Jean-Philippe Lang bf37fd9695 Format table list.
git-svn-id: http://svn.redmine.org/redmine/trunk@13036 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-04-03 23:11:47 +00:00
Jean-Philippe Lang 08b96d8b47 Updates for 2.5.1 release.
git-svn-id: http://svn.redmine.org/redmine/trunk@13033 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-29 16:09:30 +00:00
Jean-Philippe Lang 6d5569a46d Remove users from cc if they are already notified (#16415).
git-svn-id: http://svn.redmine.org/redmine/trunk@13029 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-29 15:27:42 +00:00
Jean-Philippe Lang 7567c3d8b2 Fixed back url verification (#16466).
git-svn-id: http://svn.redmine.org/redmine/trunk@13018 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-29 14:32:47 +00:00
Toshi MARUYAMA cecbb225a2 Czech translation for trunk updated by Karel Pičman (#16453)
git-svn-id: http://svn.redmine.org/redmine/trunk@13016 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-28 10:52:36 +00:00
Toshi MARUYAMA 279c3a2e9b Czech translation for 2.5-stable updated by Karel Pičman (#16453)
git-svn-id: http://svn.redmine.org/redmine/trunk@13015 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-28 10:52:20 +00:00
Toshi MARUYAMA 2545720afa fix awesome_nested_set test failure (#6579)
git-svn-id: http://svn.redmine.org/redmine/trunk@13014 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-26 11:46:47 +00:00
Toshi MARUYAMA 971dbfecc0 add missing awesome_nested_set 2.1.6 files (#6579)
64cc8bc8cf

git-svn-id: http://svn.redmine.org/redmine/trunk@13013 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-26 11:46:31 +00:00
Toshi MARUYAMA 92cac9011e remove unneeded Relation#all from WorkflowTransition#count_by_tracker_and_role
git-svn-id: http://svn.redmine.org/redmine/trunk@13012 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-26 10:38:04 +00:00
Toshi MARUYAMA 2ec3b3694f fix race condition of highest rgt at Issue#update_nested_set_attributes_on_parent_change (#6579)
git-svn-id: http://svn.redmine.org/redmine/trunk@13011 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-26 01:48:20 +00:00
Toshi MARUYAMA 755108566c awesome_nested_set: split highest rgt reader method (#6579)
git-svn-id: http://svn.redmine.org/redmine/trunk@13010 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-26 01:48:04 +00:00
Toshi MARUYAMA 3c83d1c646 fix always new lft and rgt are lft = 1, rgt = 2 (#6579)
git-svn-id: http://svn.redmine.org/redmine/trunk@13009 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-26 01:47:48 +00:00
Toshi MARUYAMA e4cf210fa2 use bundled awesome_nested_set (#6579)
git-svn-id: http://svn.redmine.org/redmine/trunk@13008 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-26 01:47:31 +00:00
Toshi MARUYAMA d1057bc4ad import awesome_nested_set 2.1.6 (#6579)
64cc8bc8cf

git-svn-id: http://svn.redmine.org/redmine/trunk@13007 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-26 01:47:14 +00:00
Toshi MARUYAMA 560bfa6d87 add ChangeLog note that #15781 was forgotten to merge to v2.4.3.
git-svn-id: http://svn.redmine.org/redmine/trunk@13004 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-25 08:35:49 +00:00
Toshi MARUYAMA 291de3d03f Gemfile: pin rake version 10.1
rake 10.2.0 requires Ruby version >= 1.9.

git-svn-id: http://svn.redmine.org/redmine/trunk@13001 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-25 07:14:34 +00:00
Toshi MARUYAMA 4a9d04a767 remove unneeded Relation#all from Issue#workflow_rule_by_attribute
git-svn-id: http://svn.redmine.org/redmine/trunk@13000 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-24 16:00:01 +00:00
Toshi MARUYAMA 5fb5bd0b11 remove unneeded Relation#all from WorkflowsController#edit
git-svn-id: http://svn.redmine.org/redmine/trunk@12999 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-24 15:59:45 +00:00
Jean-Philippe Lang aa9b8ea187 Use named routes.
git-svn-id: http://svn.redmine.org/redmine/trunk@12998 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-21 04:11:59 +00:00
Jean-Philippe Lang 83ce5c1687 Don't run the test if Redcarpet is not available (#16236).
git-svn-id: http://svn.redmine.org/redmine/trunk@12997 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-21 04:07:56 +00:00
Jean-Philippe Lang d50ec43dff Disable children when checking parent notifiable.
git-svn-id: http://svn.redmine.org/redmine/trunk@12996 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-21 04:05:49 +00:00
Jean-Philippe Lang ddcad64aa2 Don't abort processing of emails when an email triggers a parsing exception (#16122).
git-svn-id: http://svn.redmine.org/redmine/trunk@12995 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-21 03:04:43 +00:00
Toshi MARUYAMA 429210f03f German Translation updated by Daniel Felix (#16399)
git-svn-id: http://svn.redmine.org/redmine/trunk@12994 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-21 02:27:26 +00:00
Toshi MARUYAMA 74373c1597 move de.yml "label_link" by alphabetical order
git-svn-id: http://svn.redmine.org/redmine/trunk@12993 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-21 02:27:05 +00:00
Jean-Philippe Lang 2b0dfe948a Set same width for all buttons (#16326).
git-svn-id: http://svn.redmine.org/redmine/trunk@12992 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-21 02:22:31 +00:00
Jean-Philippe Lang 54830abd6b Custom queries: buttons to move column to top and bottom (#16326).
git-svn-id: http://svn.redmine.org/redmine/trunk@12991 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-21 02:20:56 +00:00
Jean-Philippe Lang dd70327ce4 Let user choose an issue of another project when updating a time entry (#16338).
git-svn-id: http://svn.redmine.org/redmine/trunk@12990 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-21 02:12:32 +00:00
Jean-Philippe Lang 273aa42900 Fixed: right-aligned table of contents (TOC) not working with markdown (#16236).
git-svn-id: http://svn.redmine.org/redmine/trunk@12989 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-21 01:35:21 +00:00
Jean-Philippe Lang abf24a7d92 Don't clear plugins in tests (#16258).
git-svn-id: http://svn.redmine.org/redmine/trunk@12988 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-21 01:12:11 +00:00
Jean-Philippe Lang 913c8cd2e6 Don't clear plugins in tests (#16258).
git-svn-id: http://svn.redmine.org/redmine/trunk@12987 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-21 01:06:18 +00:00
Jean-Philippe Lang f4e5025aed Extract code to render project context links to helper (#16381).
Patch by Michael Esemplare.

git-svn-id: http://svn.redmine.org/redmine/trunk@12986 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-21 00:27:42 +00:00
Jean-Philippe Lang b29c48717d Fixed: Error generated on 'search for watchers to add' after clicking add without selected users (#14298).
git-svn-id: http://svn.redmine.org/redmine/trunk@12985 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-21 00:23:46 +00:00
Toshi MARUYAMA b109fff281 Bulgarian translation updated by Ivan Cenov (#16385)
git-svn-id: http://svn.redmine.org/redmine/trunk@12984 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-19 15:14:38 +00:00
Toshi MARUYAMA d352d55f27 Traditional Chinese translation updated by ChunChang Lo (#16380)
git-svn-id: http://svn.redmine.org/redmine/trunk@12983 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-19 07:00:29 +00:00
Toshi MARUYAMA d541020982 Polish translation updated by Jan Inowolski (#16368)
git-svn-id: http://svn.redmine.org/redmine/trunk@12981 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-18 03:24:22 +00:00
Jean-Philippe Lang 509d0fbb5e Fixed test failure (#16362).
git-svn-id: http://svn.redmine.org/redmine/trunk@12980 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-17 14:11:37 +00:00
Jean-Philippe Lang 716da4622e Adds string to locales (#16362).
git-svn-id: http://svn.redmine.org/redmine/trunk@12977 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-17 08:26:50 +00:00
Jean-Philippe Lang 0b5e7d2a3c Wrong argument.
git-svn-id: http://svn.redmine.org/redmine/trunk@12976 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-17 08:23:07 +00:00
Jean-Philippe Lang 4bf18a697c Adds an option to send email on "Assignee updated" in application settings (#16362).
git-svn-id: http://svn.redmine.org/redmine/trunk@12975 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-17 08:20:27 +00:00
Jean-Philippe Lang b695878193 Adds an option to send email on "Assignee updated" in application settings (#16362).
git-svn-id: http://svn.redmine.org/redmine/trunk@12974 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-17 08:19:45 +00:00
Jean-Philippe Lang 4e5bb0e231 Fixed flawed regexp for removing pre blocks when quoting messages (#16353).
git-svn-id: http://svn.redmine.org/redmine/trunk@12973 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-17 07:49:14 +00:00
Toshi MARUYAMA b4fd6b47b1 remove garbage comment from test/integration/account_test.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@12972 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-15 22:20:46 +00:00
Jean-Philippe Lang c075626462 Fixed that requesting a specific version of a non-existent wiki page raises an error (#16255).
git-svn-id: http://svn.redmine.org/redmine/trunk@12971 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-15 11:41:24 +00:00
Jean-Philippe Lang 218e5f40a1 Select proper tracker and status for when hitting F5 with browsers that preserve select values on reload, eg. Firefox (#16259).
git-svn-id: http://svn.redmine.org/redmine/trunk@12970 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-15 11:21:16 +00:00
Jean-Philippe Lang 995ae083cd Fixed flawed regexp for removing pre blocks when quoting notes (#16353).
Patch by Stephane Lapie.

git-svn-id: http://svn.redmine.org/redmine/trunk@12969 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-15 10:36:56 +00:00
Jean-Philippe Lang d7729d6d4f Use #read/#write_attribute instead of #super when overwriting default accessors (#16319).
Patch by Felix Schäfer.

git-svn-id: http://svn.redmine.org/redmine/trunk@12968 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-15 10:25:24 +00:00
Jean-Philippe Lang 1547119627 Fixed that integer custom fields with "Link values to URL" set are displayed as escaped html in text email (#16321).
git-svn-id: http://svn.redmine.org/redmine/trunk@12967 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-15 10:21:18 +00:00
Toshi MARUYAMA 484b13cc94 Spanish translation updated by Jesus Gutierrez de la Vega (#16356)
git-svn-id: http://svn.redmine.org/redmine/trunk@12965 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-15 05:49:16 +00:00
Toshi MARUYAMA 23fd067124 Russian translation updated by Kirill Bezrukov (#16336)
git-svn-id: http://svn.redmine.org/redmine/trunk@12963 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-13 11:14:24 +00:00
Toshi MARUYAMA f3311cd1ff Korean Translation updated by Jong-Ha Ahn (#16334)
git-svn-id: http://svn.redmine.org/redmine/trunk@12961 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-13 08:27:00 +00:00
Toshi MARUYAMA 9130222480 fix Turkish translation typo by Gürkan Gür (#16320)
git-svn-id: http://svn.redmine.org/redmine/trunk@12959 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-12 00:13:43 +00:00
Toshi MARUYAMA b772319977 fix source indent of lib/redmine/views/labelled_form_builder.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@12958 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-11 09:59:56 +00:00
Toshi MARUYAMA c67043e01c fix source indent of lib/redmine/views/labelled_form_builder.rb
git-svn-id: http://svn.redmine.org/redmine/trunk@12957 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-11 09:59:40 +00:00
Toshi MARUYAMA 8a5baf9961 Japanese translation updated by Go MAEDA (#16291)
git-svn-id: http://svn.redmine.org/redmine/trunk@12955 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-11 09:30:04 +00:00
Jean-Philippe Lang 1d71564d6f Watcher search now displays project members by default.
git-svn-id: http://svn.redmine.org/redmine/trunk@12951 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-02 11:05:26 +00:00
Jean-Philippe Lang 8a2413f3b7 Updated CHANGELOG for 2.4.4 and 2.5.0.
git-svn-id: http://svn.redmine.org/redmine/trunk@12948 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-03-02 09:37:55 +00:00
Jean-Philippe Lang 2641f8ba91 Changeset comments set to longtext for handling comments > 64KB with Mysql (#16143).
git-svn-id: http://svn.redmine.org/redmine/trunk@12944 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-28 13:16:46 +00:00
Jean-Philippe Lang b0ec39fc45 Always load formatter scripts for when the description is read-only on page load (#16161).
git-svn-id: http://svn.redmine.org/redmine/trunk@12941 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-28 12:52:23 +00:00
Jean-Philippe Lang 4c7a76785d Fixed that non-empty blank strings as custom field values are not properly validated (#16169).
git-svn-id: http://svn.redmine.org/redmine/trunk@12938 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-28 10:05:27 +00:00
Toshi MARUYAMA 0cf7a27b50 use Python getattr instead of hasattr (#16177)
git-svn-id: http://svn.redmine.org/redmine/trunk@12935 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-26 16:28:43 +00:00
Toshi MARUYAMA 7b295f379b Mercurial 2.9 compatibility (#16177)
git-svn-id: http://svn.redmine.org/redmine/trunk@12930 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-26 12:01:00 +00:00
Toshi MARUYAMA e266ddb309 scm: mercurial: add one "closed" branch to test repository (#16177)
git-svn-id: http://svn.redmine.org/redmine/trunk@12929 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-26 11:27:41 +00:00
Jean-Philippe Lang 74e434b2f3 Removed hard-coded strings (#16164).
git-svn-id: http://svn.redmine.org/redmine/trunk@12928 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-25 20:17:15 +00:00
Toshi MARUYAMA 4162d8ec6b prevent issue tree hierarchy is broken in race conditions (#6579)
awesome_nested_set 2.1.6 uses lock.
Issue model uses as same way.

git-svn-id: http://svn.redmine.org/redmine/trunk@12927 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-25 06:54:40 +00:00
Jean-Philippe Lang b6c794d16b Bulk edit workflows for multiple trackers/roles (#16164).
git-svn-id: http://svn.redmine.org/redmine/trunk@12924 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-25 02:54:47 +00:00
Toshi MARUYAMA c6f71f727b explicitly set encoding UTF-8 (#16107)
Default Ruby source file encoding changed in Ruby 2.0.0.
https://bugs.ruby-lang.org/issues/6679

git-svn-id: http://svn.redmine.org/redmine/trunk@12918 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-22 15:55:35 +00:00
Toshi MARUYAMA ad8c02ca82 add "assert_response 401" to tests (#16107)
git-svn-id: http://svn.redmine.org/redmine/trunk@12917 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-22 15:55:20 +00:00
Jean-Philippe Lang 8405d57516 Strip invalid UTF-8 bytes in User#find_by_login (#16107).
git-svn-id: http://svn.redmine.org/redmine/trunk@12916 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-22 12:50:56 +00:00
Jean-Philippe Lang 58ff842d34 Trigger basic HTTP authentication only when Basic authorization header is present (#16107).
git-svn-id: http://svn.redmine.org/redmine/trunk@12915 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-22 12:09:58 +00:00
Jean-Philippe Lang 98e299857b Only notify users that can see news (#16134).
git-svn-id: http://svn.redmine.org/redmine/trunk@12914 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-22 11:32:52 +00:00
Jean-Philippe Lang 9733194cce Prevent N queries on custom_fields when call /issues API.
git-svn-id: http://svn.redmine.org/redmine/trunk@12913 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-22 11:23:39 +00:00
Jean-Philippe Lang 411ddaf701 Preload authors for /issues API calls.
git-svn-id: http://svn.redmine.org/redmine/trunk@12912 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-22 11:22:43 +00:00
Jean-Philippe Lang 9b6f53219f Preload issue authors when displayed on the issue list (#16091).
git-svn-id: http://svn.redmine.org/redmine/trunk@12911 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-22 11:21:05 +00:00
Jean-Philippe Lang 15c85ededd Preload issue relations when exporting issues to CSV with all columns (#16091).
git-svn-id: http://svn.redmine.org/redmine/trunk@12910 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-22 11:19:21 +00:00
Toshi MARUYAMA 95e44a2e57 fix typos of migrate_from_trac.rake
git-svn-id: http://svn.redmine.org/redmine/trunk@12909 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-20 04:59:33 +00:00
Toshi MARUYAMA 4dc7bc75b4 update Rails to 3.2.17
git-svn-id: http://svn.redmine.org/redmine/trunk@12906 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-19 09:32:51 +00:00
Toshi MARUYAMA 78f9d6d2ce svn propset svn:eol-style native fixture (#16122)
git-svn-id: http://svn.redmine.org/redmine/trunk@12905 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-18 23:28:23 +00:00
Toshi MARUYAMA 63a53e17fd fix newline of fixture (#16122)
git-svn-id: http://svn.redmine.org/redmine/trunk@12904 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-18 23:27:39 +00:00
Toshi MARUYAMA b5d80456ac add test of gmail ISO-8859-2 mail receiving (#16122)
git-svn-id: http://svn.redmine.org/redmine/trunk@12903 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-18 23:21:41 +00:00
Toshi MARUYAMA cce92213b0 svn propset svn:eol-style native fixture (#14675)
git-svn-id: http://svn.redmine.org/redmine/trunk@12902 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-17 12:44:58 +00:00
Toshi MARUYAMA 14c02f50cc add test of quoted printable UTF-8 mail reviving (#14675)
git-svn-id: http://svn.redmine.org/redmine/trunk@12901 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-17 12:42:44 +00:00
Toshi MARUYAMA 50ab5ec1b6 Rails4: fix time related git unit test failure
git-svn-id: http://svn.redmine.org/redmine/trunk@12900 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-15 23:13:44 +00:00
Jean-Philippe Lang e8057d41bb Fixed that collapse macro with headings breaks the table of contents (#16077).
git-svn-id: http://svn.redmine.org/redmine/trunk@12899 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-15 10:55:29 +00:00
Jean-Philippe Lang 4a2114c73b Move the field format at the top of the form.
git-svn-id: http://svn.redmine.org/redmine/trunk@12897 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-15 10:04:25 +00:00
Jean-Philippe Lang 1114bf5e99 Fixed: Export CSV - Custom field true/false not using translation (#16081).
git-svn-id: http://svn.redmine.org/redmine/trunk@12896 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-15 09:18:01 +00:00
Jean-Philippe Lang 88568da451 Always preload issues custom values (#16091).
git-svn-id: http://svn.redmine.org/redmine/trunk@12894 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-15 08:59:45 +00:00
Jean-Philippe Lang ceb7e346a7 Fixed alignments.
git-svn-id: http://svn.redmine.org/redmine/trunk@12892 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-15 08:34:30 +00:00
Jean-Philippe Lang b5e19e2d17 Removed trailing spaces in french locale.
git-svn-id: http://svn.redmine.org/redmine/trunk@12890 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-15 08:15:25 +00:00
Jean-Philippe Lang 7204f64254 Typo in french locale (#16073).
git-svn-id: http://svn.redmine.org/redmine/trunk@12889 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-15 08:08:18 +00:00
Jean-Philippe Lang a339deeacd Typo in french locale (#16073).
git-svn-id: http://svn.redmine.org/redmine/trunk@12888 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-15 08:04:11 +00:00
Jean-Philippe Lang 0b97099f8c Set version to 2.5.0.
git-svn-id: http://svn.redmine.org/redmine/trunk@12886 e93f8b46-1217-0410-a6f0-8f06a7374b81
2014-02-15 07:40:26 +00:00
194 changed files with 5022 additions and 1043 deletions

View File

@ -5,8 +5,8 @@ language: ruby
rvm:
- 1.8.7
- 1.9.3
- 2.0.0
- 2.1.0
- 2.0
- 2.1
- jruby
matrix:
allow_failures:

View File

@ -1,12 +1,13 @@
source 'https://rubygems.org'
gem "rails", "3.2.16"
gem "rails", "3.2.18"
gem "rake", "~> 10.1.1"
gem "jquery-rails", "~> 2.0.2"
gem "coderay", "~> 1.1.0"
gem "fastercsv", "~> 1.5.0", :platforms => [:mri_18, :mingw_18, :jruby]
gem "builder", "3.0.0"
gem "request_store"
gem "mime-types"
gem "awesome_nested_set", "2.1.6"
# Optional gem for LDAP authentication
group :ldap do
@ -85,7 +86,7 @@ end
group :test do
gem "shoulda", "~> 3.3.2"
gem "mocha", ">= 0.14", :require => 'mocha/api'
gem "mocha", "~> 1.0.0", :require => 'mocha/api'
if RUBY_VERSION >= '1.9.3'
gem "capybara", "~> 2.1.0"
gem "selenium-webdriver"

View File

@ -44,6 +44,7 @@ class ApplicationController < ActionController::Base
unless api_request?
super
cookies.delete(autologin_cookie_name)
self.logged_user = nil
render_error :status => 422, :message => "Invalid form authenticity token."
end
end
@ -119,7 +120,7 @@ class ApplicationController < ActionController::Base
if (key = api_key_from_request)
# Use API key
user = User.find_by_api_key(key)
else
elsif request.authorization.to_s =~ /\ABasic /i
# HTTP Basic, either username/password or API key/random
authenticate_with_http_basic do |username, password|
user = User.try_to_login(username, password) || User.find_by_api_key(username)
@ -379,7 +380,7 @@ class ApplicationController < ActionController::Base
begin
uri = URI.parse(back_url)
# do not redirect user to another host or to the login or register page
if (uri.relative? || (uri.host == request.host)) && !uri.path.match(%r{/(login|account/register)})
if ((uri.relative? && back_url.match(%r{\A/(\w.*)?\z})) || (uri.host == request.host)) && !uri.path.match(%r{/(login|account/register)})
redirect_to(back_url)
return
end
@ -557,7 +558,7 @@ class ApplicationController < ActionController::Base
# Returns a string that can be used as filename value in Content-Disposition header
def filename_for_content_disposition(name)
request.env['HTTP_USER_AGENT'] =~ %r{MSIE} ? ERB::Util.url_encode(name) : name
request.env['HTTP_USER_AGENT'] =~ %r{(MSIE|Trident)} ? ERB::Util.url_encode(name) : name
end
def api_request?

View File

@ -55,7 +55,7 @@ class ContextMenusController < ApplicationController
@options_by_custom_field = {}
if @can[:edit]
custom_fields = @issues.map(&:available_custom_fields).reduce(:&).reject(&:multiple?)
custom_fields = @issues.map(&:editable_custom_fields).reduce(:&).reject(&:multiple?)
custom_fields.each do |field|
values = field.possible_values_options(@projects)
if values.present?

View File

@ -62,10 +62,14 @@ class IssuesController < ApplicationController
case params[:format]
when 'csv', 'pdf'
@limit = Setting.issues_export_limit.to_i
if params[:columns] == 'all'
@query.column_names = @query.available_inline_columns.map(&:name)
end
when 'atom'
@limit = Setting.feeds_limit.to_i
when 'xml', 'json'
@offset, @limit = api_offset_and_limit
@query.column_names = %w(author)
else
@limit = per_page_option
end

View File

@ -66,7 +66,7 @@ class JournalsController < ApplicationController
text = @issue.description
end
# Replaces pre blocks with [...]
text = text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]')
text = text.to_s.strip.gsub(%r{<pre>(.*?)</pre>}m, '[...]')
@content = "#{ll(Setting.default_language, :text_user_wrote, user)}\n> "
@content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n"
rescue ActiveRecord::RecordNotFound

View File

@ -113,7 +113,7 @@ class MessagesController < ApplicationController
@subject = "RE: #{@subject}" unless @subject.starts_with?('RE:')
@content = "#{ll(Setting.default_language, :text_user_wrote, @message.author)}\n> "
@content << @message.content.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]').gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n"
@content << @message.content.to_s.strip.gsub(%r{<pre>(.*?)</pre>}m, '[...]').gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n"
end
def preview

View File

@ -411,7 +411,7 @@ class RepositoriesController < ApplicationController
commits_data = commits_data + [0]*(10 - commits_data.length) if commits_data.length<10
changes_data = changes_data + [0]*(10 - changes_data.length) if changes_data.length<10
# Remove email adress in usernames
# Remove email address in usernames
fields = fields.collect {|c| c.gsub(%r{<.+@.+>}, '') }
graph = SVG::Graph::BarHorizontal.new(

View File

@ -55,6 +55,9 @@ class WatchersController < ApplicationController
user_ids = params[:watcher][:user_ids] || [params[:watcher][:user_id]]
@users = User.active.where(:id => user_ids).all
end
if @users.blank?
render :nothing => true
end
end
def destroy

View File

@ -18,40 +18,30 @@
class WorkflowsController < ApplicationController
layout 'admin'
before_filter :require_admin, :find_roles, :find_trackers
before_filter :require_admin
def index
@workflow_counts = WorkflowTransition.count_by_tracker_and_role
end
def edit
@role = Role.find_by_id(params[:role_id]) if params[:role_id]
@tracker = Tracker.find_by_id(params[:tracker_id]) if params[:tracker_id]
find_trackers_roles_and_statuses_for_edit
if request.post?
WorkflowTransition.destroy_all( ["role_id=? and tracker_id=?", @role.id, @tracker.id])
(params[:issue_status] || []).each { |status_id, transitions|
transitions.each { |new_status_id, options|
author = options.is_a?(Array) && options.include?('author') && !options.include?('always')
assignee = options.is_a?(Array) && options.include?('assignee') && !options.include?('always')
WorkflowTransition.create(:role_id => @role.id, :tracker_id => @tracker.id, :old_status_id => status_id, :new_status_id => new_status_id, :author => author, :assignee => assignee)
}
}
if @role.save
flash[:notice] = l(:notice_successful_update)
redirect_to workflows_edit_path(:role_id => @role, :tracker_id => @tracker, :used_statuses_only => params[:used_statuses_only])
return
if request.post? && @roles && @trackers && params[:transitions]
transitions = params[:transitions].deep_dup
transitions.each do |old_status_id, transitions_by_new_status|
transitions_by_new_status.each do |new_status_id, transition_by_rule|
transition_by_rule.reject! {|rule, transition| transition == 'no_change'}
end
end
WorkflowTransition.replace_transitions(@trackers, @roles, transitions)
flash[:notice] = l(:notice_successful_update)
redirect_to_referer_or workflows_edit_path
return
end
@used_statuses_only = (params[:used_statuses_only] == '0' ? false : true)
if @tracker && @used_statuses_only && @tracker.issue_statuses.any?
@statuses = @tracker.issue_statuses
end
@statuses ||= IssueStatus.sorted.all
if @tracker && @role && @statuses.any?
workflows = WorkflowTransition.where(:role_id => @role.id, :tracker_id => @tracker.id).all
if @trackers && @roles && @statuses.any?
workflows = WorkflowTransition.where(:role_id => @roles.map(&:id), :tracker_id => @trackers.map(&:id))
@workflows = {}
@workflows['always'] = workflows.select {|w| !w.author && !w.assignee}
@workflows['author'] = workflows.select {|w| w.author}
@ -60,36 +50,31 @@ class WorkflowsController < ApplicationController
end
def permissions
@role = Role.find_by_id(params[:role_id]) if params[:role_id]
@tracker = Tracker.find_by_id(params[:tracker_id]) if params[:tracker_id]
find_trackers_roles_and_statuses_for_edit
if request.post? && @role && @tracker
WorkflowPermission.replace_permissions(@tracker, @role, params[:permissions] || {})
if request.post? && @roles && @trackers && params[:permissions]
permissions = params[:permissions].deep_dup
permissions.each { |field, rule_by_status_id|
rule_by_status_id.reject! {|status_id, rule| rule == 'no_change'}
}
WorkflowPermission.replace_permissions(@trackers, @roles, permissions)
flash[:notice] = l(:notice_successful_update)
redirect_to workflows_permissions_path(:role_id => @role, :tracker_id => @tracker, :used_statuses_only => params[:used_statuses_only])
redirect_to_referer_or workflows_permissions_path
return
end
@used_statuses_only = (params[:used_statuses_only] == '0' ? false : true)
if @tracker && @used_statuses_only && @tracker.issue_statuses.any?
@statuses = @tracker.issue_statuses
end
@statuses ||= IssueStatus.sorted.all
if @role && @tracker
@fields = (Tracker::CORE_FIELDS_ALL - @tracker.disabled_core_fields).map {|field| [field, l("field_"+field.sub(/_id$/, ''))]}
@custom_fields = @tracker.custom_fields
@permissions = WorkflowPermission.
where(:tracker_id => @tracker.id, :role_id => @role.id).inject({}) do |h, w|
h[w.old_status_id] ||= {}
h[w.old_status_id][w.field_name] = w.rule
h
end
if @roles && @trackers
@fields = (Tracker::CORE_FIELDS_ALL - @trackers.map(&:disabled_core_fields).reduce(:&)).map {|field| [field, l("field_"+field.sub(/_id$/, ''))]}
@custom_fields = @trackers.map(&:custom_fields).flatten.uniq.sort
@permissions = WorkflowPermission.rules_by_status_id(@trackers, @roles)
@statuses.each {|status| @permissions[status.id] ||= {}}
end
end
def copy
@roles = Role.sorted
@trackers = Tracker.sorted
if params[:source_tracker_id].blank? || params[:source_tracker_id] == 'any'
@source_tracker = nil
else
@ -119,11 +104,37 @@ class WorkflowsController < ApplicationController
private
def find_trackers_roles_and_statuses_for_edit
find_roles
find_trackers
find_statuses
end
def find_roles
@roles = Role.sorted.all
ids = Array.wrap(params[:role_id])
if ids == ['all']
@roles = Role.sorted.all
elsif ids.present?
@roles = Role.where(:id => ids).all
end
@roles = nil if @roles.blank?
end
def find_trackers
@trackers = Tracker.sorted.all
ids = Array.wrap(params[:tracker_id])
if ids == ['all']
@trackers = Tracker.sorted.all
elsif ids.present?
@trackers = Tracker.where(:id => ids).all
end
@trackers = nil if @trackers.blank?
end
def find_statuses
@used_statuses_only = (params[:used_statuses_only] == '0' ? false : true)
if @trackers && @used_statuses_only
@statuses = @trackers.map(&:issue_statuses).flatten.uniq.sort.presence
end
@statuses ||= IssueStatus.sorted.all
end
end

View File

@ -24,4 +24,12 @@ module AdminHelper
[l(:project_status_closed), '5'],
[l(:project_status_archived), '9']], selected.to_s)
end
def plugin_data_for_updates(plugins)
data = {"v" => Redmine::VERSION.to_s, "p" => {}}
plugins.each do |plugin|
data["p"].merge! plugin.id => {"v" => plugin.version, "n" => plugin.name, "a" => plugin.author}
end
data
end
end

View File

@ -158,7 +158,10 @@ module ApplicationHelper
end
# Helper that formats object for html or text rendering
def format_object(object, html=true)
def format_object(object, html=true, &block)
if block_given?
object = yield object
end
case object.class.name
when 'Array'
object.map {|o| format_object(o, html)}.join(', ').html_safe
@ -188,7 +191,7 @@ module ApplicationHelper
if f.nil? || f.is_a?(String)
f
else
format_object(f, html)
format_object(f, html, &block)
end
else
object.value.to_s
@ -819,6 +822,7 @@ module ApplicationHelper
elsif sep == ':'
# removes the double quotes if any
name = identifier.gsub(%r{^"(.*)"$}, "\\1")
name = CGI.unescapeHTML(name)
case prefix
when 'document'
if project && document = project.documents.visible.find_by_title(name)
@ -978,19 +982,20 @@ module ApplicationHelper
end
end
TOC_RE = /<p>\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE)
TOC_RE = /<p>\{\{((<|&lt;)|(>|&gt;))?toc\}\}<\/p>/i unless const_defined?(:TOC_RE)
# Renders the TOC with given headings
def replace_toc(text, headings)
text.gsub!(TOC_RE) do
left_align, right_align = $2, $3
# Keep only the 4 first levels
headings = headings.select{|level, anchor, item| level <= 4}
if headings.empty?
''
else
div_class = 'toc'
div_class << ' right' if $1 == '>'
div_class << ' left' if $1 == '<'
div_class << ' right' if right_align
div_class << ' left' if left_align
out = "<ul class=\"#{div_class}\"><li>"
root = headings.map(&:first).min
current = root
@ -1327,7 +1332,7 @@ module ApplicationHelper
def api_meta(options)
if params[:nometa].present? || request.headers['X-Redmine-Nometa']
# compatibility mode for activeresource clients that raise
# an error when unserializing an array with attributes
# an error when deserializing an array with attributes
nil
else
options

View File

@ -20,7 +20,7 @@
module ProjectsHelper
def link_to_version(version, options = {})
return '' unless version && version.is_a?(Version)
link_to_if version.visible?, format_version_name(version), { :controller => 'versions', :action => 'show', :id => version }, options
link_to_if version.visible?, format_version_name(version), version_path(version), options
end
def project_settings_tabs
@ -51,6 +51,21 @@ module ProjectsHelper
content_tag('select', options.html_safe, :name => 'project[parent_id]', :id => 'project_parent_id')
end
def render_project_action_links
links = []
if User.current.allowed_to?(:add_project, nil, :global => true)
links << link_to(l(:label_project_new), new_project_path, :class => 'icon icon-add')
end
if User.current.allowed_to?(:view_issues, nil, :global => true)
links << link_to(l(:label_issue_view_all), issues_path)
end
if User.current.allowed_to?(:view_time_entries, nil, :global => true)
links << link_to(l(:label_overall_spent_time), time_entries_path)
end
links << link_to(l(:label_overall_activity), activity_path)
links.join(" | ").html_safe
end
# Renders the projects index
def render_project_hierarchy(projects)
render_project_nested_lists(projects) do |project|

View File

@ -18,6 +18,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module QueriesHelper
include ApplicationHelper
def filters_options_for_select(query)
options_for_select(filters_options(query))
end
@ -81,7 +83,7 @@ module QueriesHelper
end
def column_content(column, issue)
value = column.value(issue)
value = column.value_object(issue)
if value.is_a?(Array)
value.collect {|v| column_value(column, issue, v)}.compact.join(', ').html_safe
else
@ -110,7 +112,7 @@ module QueriesHelper
end
def csv_content(column, issue)
value = column.value(issue)
value = column.value_object(issue)
if value.is_a?(Array)
value.collect {|v| csv_value(column, issue, v)}.compact.join(', ')
else
@ -119,18 +121,16 @@ module QueriesHelper
end
def csv_value(column, issue, value)
case value.class.name
when 'Time'
format_time(value)
when 'Date'
format_date(value)
when 'Float'
sprintf("%.2f", value).gsub('.', l(:general_csv_decimal_separator))
when 'IssueRelation'
other = value.other_issue(issue)
l(value.label_for(issue)) + " ##{other.id}"
else
value.to_s
format_object(value, false) do |value|
case value.class.name
when 'Float'
sprintf("%.2f", value).gsub('.', l(:general_csv_decimal_separator))
when 'IssueRelation'
other = value.other_issue(issue)
l(value.label_for(issue)) + " ##{other.id}"
else
value
end
end
end

View File

@ -84,12 +84,24 @@ module SettingsHelper
# Renders a notification field for a Redmine::Notifiable option
def notification_field(notifiable)
return content_tag(:label,
check_box_tag('settings[notified_events][]',
notifiable.name,
Setting.notified_events.include?(notifiable.name), :id => nil).html_safe +
l_or_humanize(notifiable.name, :prefix => 'label_').html_safe,
:class => notifiable.parent.present? ? "parent" : '').html_safe
tag_data = notifiable.parent.present? ?
{:parent_notifiable => notifiable.parent} :
{:disables => "input[data-parent-notifiable=#{notifiable.name}]"}
tag = check_box_tag('settings[notified_events][]',
notifiable.name,
Setting.notified_events.include?(notifiable.name),
:id => nil,
:data => tag_data)
text = l_or_humanize(notifiable.name, :prefix => 'label_')
options = {}
if notifiable.parent.present?
options[:class] = "parent"
end
content_tag(:label, tag + text, options)
end
def cross_project_subtasks_options

View File

@ -18,24 +18,78 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module WorkflowsHelper
def options_for_workflow_select(name, objects, selected, options={})
option_tags = ''.html_safe
multiple = false
if selected
if selected.size == objects.size
selected = 'all'
else
selected = selected.map(&:id)
if selected.size > 1
multiple = true
end
end
else
selected = objects.first.try(:id)
end
all_tag_options = {:value => 'all', :selected => (selected == 'all')}
if multiple
all_tag_options.merge!(:style => "display:none;")
end
option_tags << content_tag('option', l(:label_all), all_tag_options)
option_tags << options_from_collection_for_select(objects, "id", "name", selected)
select_tag name, option_tags, {:multiple => multiple}.merge(options)
end
def field_required?(field)
field.is_a?(CustomField) ? field.is_required? : %w(project_id tracker_id subject priority_id is_private).include?(field)
end
def field_permission_tag(permissions, status, field, role)
def field_permission_tag(permissions, status, field, roles)
name = field.is_a?(CustomField) ? field.id.to_s : field
options = [["", ""], [l(:label_readonly), "readonly"]]
options << [l(:label_required), "required"] unless field_required?(field)
html_options = {}
selected = permissions[status.id][name]
if perm = permissions[status.id][name]
if perm.uniq.size > 1 || perm.size < @roles.size * @trackers.size
options << [l(:label_no_change_option), "no_change"]
selected = 'no_change'
else
selected = perm.first
end
end
hidden = field.is_a?(CustomField) &&
!field.visible? &&
!roles.detect {|role| role.custom_fields.to_a.include?(field)}
hidden = field.is_a?(CustomField) && !field.visible? && !role.custom_fields.to_a.include?(field)
if hidden
options[0][0] = l(:label_hidden)
selected = ''
html_options[:disabled] = true
end
select_tag("permissions[#{name}][#{status.id}]", options_for_select(options, selected), html_options)
select_tag("permissions[#{status.id}][#{name}]", options_for_select(options, selected), html_options)
end
def transition_tag(workflows, old_status, new_status, name)
w = workflows.select {|w| w.old_status_id == old_status.id && w.new_status_id == new_status.id}.size
tag_name = "transitions[#{ old_status.id }][#{new_status.id}][#{name}]"
if w == 0 || w == @roles.size * @trackers.size
hidden_field_tag(tag_name, "0") +
check_box_tag(tag_name, "1", w != 0,
:class => "old-status-#{old_status.id} new-status-#{new_status.id}")
else
select_tag tag_name,
options_for_select([
[l(:general_text_Yes), "1"],
[l(:general_text_No), "0"],
[l(:label_no_change_option), "no_change"]
], "no_change")
end
end
end

View File

@ -114,7 +114,7 @@ class CustomField < ActiveRecord::Base
end
def possible_values
values = super()
values = read_attribute(:possible_values)
if values.is_a?(Array)
values.each do |value|
value.force_encoding('UTF-8') if value.respond_to?(:force_encoding)
@ -128,7 +128,8 @@ class CustomField < ActiveRecord::Base
# Makes possible_values accept a multiline string
def possible_values=(arg)
if arg.is_a?(Array)
super(arg.compact.collect(&:strip).select {|v| !v.blank?})
values = arg.compact.collect(&:strip).select {|v| !v.blank?}
write_attribute(:possible_values, values)
else
self.possible_values = arg.to_s.split(/[\n\r]+/)
end
@ -241,9 +242,7 @@ class CustomField < ActiveRecord::Base
errs << ::I18n.t('activerecord.errors.messages.blank')
end
end
if custom_value.value.present?
errs += format.validate_custom_value(custom_value)
end
errs += format.validate_custom_value(custom_value)
errs
end

View File

@ -73,7 +73,7 @@ class Enumeration < ActiveRecord::Base
self.objects_count != 0
end
# Is this enumeration overiding a system level enumeration?
# Is this enumeration overriding a system level enumeration?
def is_override?
!self.parent.nil?
end
@ -103,8 +103,14 @@ class Enumeration < ActiveRecord::Base
subclasses
end
# Does the +new+ Hash override the previous Enumeration?
# TODO: remove in Redmine 3.0
def self.overridding_change?(new, previous)
ActiveSupport::Deprecation.warn "Enumeration#overridding_change? is deprecated and will be removed in Redmine 3.0. Please use #overriding_change?."
overriding_change?(new, previous)
end
# Does the +new+ Hash override the previous Enumeration?
def self.overriding_change?(new, previous)
if (same_active_state?(new['active'], previous.active)) && same_custom_values?(new,previous)
return false
else

View File

@ -33,7 +33,7 @@ class Issue < ActiveRecord::Base
has_many :visible_journals,
:class_name => 'Journal',
:as => :journalized,
:conditions => Proc.new {
:conditions => Proc.new {
["(#{Journal.table_name}.private_notes = ? OR (#{Project.allowed_to_condition(User.current, :view_private_notes)}))", false]
},
:readonly => true
@ -94,7 +94,7 @@ class Issue < ActiveRecord::Base
before_create :default_assign
before_save :close_duplicates, :update_done_ratio_from_issue_status,
:force_updated_on_change, :update_closed_on, :set_assigned_to_was
after_save {|issue| issue.send :after_project_change if !issue.id_changed? && issue.project_id_changed?}
after_save {|issue| issue.send :after_project_change if !issue.id_changed? && issue.project_id_changed?}
after_save :reschedule_following_issues, :update_nested_set_attributes,
:update_parent_attributes, :create_journal
# Should be after_create but would be called before previous after_save callbacks
@ -200,7 +200,7 @@ class Issue < ActiveRecord::Base
# Overrides Redmine::Acts::Customizable::InstanceMethods#available_custom_fields
def available_custom_fields
(project && tracker) ? (project.all_issue_custom_fields & tracker.custom_fields.all) : []
(project && tracker) ? (project.all_issue_custom_fields & tracker.custom_fields) : []
end
def visible_custom_field_values(user=nil)
@ -218,7 +218,7 @@ class Issue < ActiveRecord::Base
self.status = issue.status
self.author = User.current
unless options[:attachments] == false
self.attachments = issue.attachments.map do |attachement|
self.attachments = issue.attachments.map do |attachement|
attachement.copy(:container => self)
end
end
@ -394,10 +394,10 @@ class Issue < ActiveRecord::Base
:if => lambda {|issue, user| user.allowed_to?(:add_issue_notes, issue.project)}
safe_attributes 'private_notes',
:if => lambda {|issue, user| !issue.new_record? && user.allowed_to?(:set_notes_private, issue.project)}
:if => lambda {|issue, user| !issue.new_record? && user.allowed_to?(:set_notes_private, issue.project)}
safe_attributes 'watcher_user_ids',
:if => lambda {|issue, user| issue.new_record? && user.allowed_to?(:add_issue_watchers, issue.project)}
:if => lambda {|issue, user| issue.new_record? && user.allowed_to?(:add_issue_watchers, issue.project)}
safe_attributes 'is_private',
:if => lambda {|issue, user|
@ -483,6 +483,11 @@ class Issue < ActiveRecord::Base
end
end
# Returns the custom fields that can be edited by the given user
def editable_custom_fields(user=nil)
editable_custom_field_values(user).map(&:custom_field).uniq
end
# Returns the names of attributes that are read-only for user or the current user
# For users with multiple roles, the read-only fields are the intersection of
# read-only fields of each role
@ -524,7 +529,7 @@ class Issue < ActiveRecord::Base
return {} if roles.empty?
result = {}
workflow_permissions = WorkflowPermission.where(:tracker_id => tracker_id, :old_status_id => status_id, :role_id => roles.map(&:id)).all
workflow_permissions = WorkflowPermission.where(:tracker_id => tracker_id, :old_status_id => status_id, :role_id => roles.map(&:id))
if workflow_permissions.any?
workflow_rules = workflow_permissions.inject({}) do |h, wp|
h[wp.field_name] ||= []
@ -762,7 +767,7 @@ class Issue < ActiveRecord::Base
initial_status ||= status
initial_assigned_to_id = assigned_to_id_changed? ? assigned_to_id_was : assigned_to_id
assignee_transitions_allowed = initial_assigned_to_id.present? &&
assignee_transitions_allowed = initial_assigned_to_id.present? &&
(user.id == initial_assigned_to_id || user.group_ids.include?(initial_assigned_to_id))
statuses = initial_status.find_new_statuses_allowed_to(
@ -1056,7 +1061,7 @@ class Issue < ActiveRecord::Base
if leaf.start_date
# Only move subtask if it starts at the same date as the parent
# or if it starts before the given date
if start_date == leaf.start_date || date > leaf.start_date
if start_date == leaf.start_date || date > leaf.start_date
leaf.reschedule_on!(date)
end
else
@ -1107,7 +1112,10 @@ class Issue < ActiveRecord::Base
def self.update_versions_from_hierarchy_change(project)
moved_project_ids = project.self_and_descendants.reload.collect(&:id)
# Update issues of the moved projects and issues assigned to a version of a moved project
Issue.update_versions(["#{Version.table_name}.project_id IN (?) OR #{Issue.table_name}.project_id IN (?)", moved_project_ids, moved_project_ids])
Issue.update_versions(
["#{Version.table_name}.project_id IN (?) OR #{Issue.table_name}.project_id IN (?)",
moved_project_ids, moved_project_ids]
)
end
def parent_issue_id=(arg)
@ -1191,13 +1199,13 @@ class Issue < ActiveRecord::Base
end
def self.by_subproject(project)
ActiveRecord::Base.connection.select_all("select s.id as status_id,
s.is_closed as closed,
ActiveRecord::Base.connection.select_all("select s.id as status_id,
s.is_closed as closed,
#{Issue.table_name}.project_id as project_id,
count(#{Issue.table_name}.id) as total
from
count(#{Issue.table_name}.id) as total
from
#{Issue.table_name}, #{Project.table_name}, #{IssueStatus.table_name} s
where
where
#{Issue.table_name}.status_id=s.id
and #{Issue.table_name}.project_id = #{Project.table_name}.id
and #{visible_condition(User.current, :project => project, :with_subprojects => true)}
@ -1287,9 +1295,7 @@ class Issue < ActiveRecord::Base
if root_id.nil?
# issue was just created
self.root_id = (@parent_issue.nil? ? id : @parent_issue.root_id)
set_default_left_and_right
Issue.where(["id = ?", id]).
update_all(["root_id = ?, lft = ?, rgt = ?", root_id, lft, rgt])
Issue.where(["id = ?", id]).update_all(["root_id = ?", root_id])
if @parent_issue
move_to_child_of(@parent_issue)
end
@ -1312,13 +1318,18 @@ class Issue < ActiveRecord::Base
move_to_right_of(root)
end
old_root_id = root_id
self.root_id = (@parent_issue.nil? ? id : @parent_issue.root_id )
target_maxright = nested_set_scope.maximum(right_column_name) || 0
offset = target_maxright + 1 - lft
Issue.where(["root_id = ? AND lft >= ? AND rgt <= ? ", old_root_id, lft, rgt]).
update_all(["root_id = ?, lft = lft + ?, rgt = rgt + ?", root_id, offset, offset])
self[left_column_name] = lft + offset
self[right_column_name] = rgt + offset
in_tenacious_transaction do
@parent_issue.reload_nested_set if @parent_issue
self.reload_nested_set
self.root_id = (@parent_issue.nil? ? id : @parent_issue.root_id)
cond = ["root_id = ? AND lft >= ? AND rgt <= ? ", old_root_id, lft, rgt]
self.class.base_class.select('id').lock(true).where(cond)
offset = right_most_bound + 1 - lft
Issue.where(cond).
update_all(["root_id = ?, lft = lft + ?, rgt = rgt + ?", root_id, offset, offset])
self[left_column_name] = lft + offset
self[right_column_name] = rgt + offset
end
if @parent_issue
move_to_child_of(@parent_issue)
end
@ -1430,7 +1441,7 @@ class Issue < ActiveRecord::Base
def close_duplicates
if closing?
duplicates.each do |duplicate|
# Reload is need in case the duplicate was updated by a previous duplicate
# Reload is needed in case the duplicate was updated by a previous duplicate
duplicate.reload
# Don't re-close it if it's already closed
next if duplicate.closed?
@ -1485,11 +1496,11 @@ class Issue < ActiveRecord::Base
before = @custom_values_before_change[c.custom_field_id]
after = c.value
next if before == after || (before.blank? && after.blank?)
if before.is_a?(Array) || after.is_a?(Array)
before = [before] unless before.is_a?(Array)
after = [after] unless after.is_a?(Array)
# values removed
(before - after).reject(&:blank?).each do |value|
@current_journal.details << JournalDetail.new(:property => 'cf',
@ -1550,14 +1561,14 @@ class Issue < ActiveRecord::Base
where = "#{Issue.table_name}.#{select_field}=j.id"
ActiveRecord::Base.connection.select_all("select s.id as status_id,
s.is_closed as closed,
ActiveRecord::Base.connection.select_all("select s.id as status_id,
s.is_closed as closed,
j.id as #{select_field},
count(#{Issue.table_name}.id) as total
from
count(#{Issue.table_name}.id) as total
from
#{Issue.table_name}, #{Project.table_name}, #{IssueStatus.table_name} s, #{joins} j
where
#{Issue.table_name}.status_id=s.id
where
#{Issue.table_name}.status_id=s.id
and #{where}
and #{Issue.table_name}.project_id=#{Project.table_name}.id
and #{visible_condition(User.current, :project => project)}

View File

@ -333,8 +333,9 @@ class IssueQuery < Query
limit(options[:limit]).
offset(options[:offset])
if has_custom_field_column?
scope = scope.preload(:custom_values)
scope = scope.preload(:custom_values)
if has_column?(:author)
scope = scope.preload(:author)
end
issues = scope.all

View File

@ -80,15 +80,20 @@ class Journal < ActiveRecord::Base
end
end
# Returns the JournalDetail for the given attribute, or nil if the attribute
# was not updated
def detail_for_attribute(attribute)
details.detect {|detail| detail.prop_key == attribute}
end
# Returns the new status if the journal contains a status change, otherwise nil
def new_status
c = details.detect {|detail| detail.prop_key == 'status_id'}
(c && c.value) ? IssueStatus.find_by_id(c.value.to_i) : nil
s = new_value_for('status_id')
s ? IssueStatus.find_by_id(s.to_i) : nil
end
def new_value_for(prop)
c = details.detect {|detail| detail.prop_key == prop}
c ? c.value : nil
detail_for_attribute(prop).try(:value)
end
def editable_by?(usr)
@ -185,6 +190,7 @@ class Journal < ActiveRecord::Base
if notify? && (Setting.notified_events.include?('issue_updated') ||
(Setting.notified_events.include?('issue_note_added') && notes.present?) ||
(Setting.notified_events.include?('issue_status_updated') && new_status.present?) ||
(Setting.notified_events.include?('issue_assigned_to_updated') && detail_for_attribute('assigned_to_id').present?) ||
(Setting.notified_events.include?('issue_priority_updated') && new_value_for('priority_id').present?)
)
Mailer.deliver_issue_edit(self)

View File

@ -46,6 +46,14 @@ class MailHandler < ActionMailer::Base
super(email)
end
# Receives an email and rescues any exception
def self.safe_receive(*args)
receive(*args)
rescue => e
logger.error "An unexpected error occurred when receiving email: #{e.message}" if logger
return false
end
# Extracts MailHandler options from environment variables
# Use when receiving emails with rake tasks
def self.extract_options_from_env(env)
@ -190,6 +198,7 @@ class MailHandler < ActionMailer::Base
issue.subject = '(no subject)'
end
issue.description = cleaned_up_text_body
issue.start_date ||= Date.today if Setting.default_issue_start_date_to_creation_date?
# add To and Cc as watchers before saving so the watchers can reply to Redmine
add_watchers(issue)

View File

@ -80,7 +80,7 @@ class Mailer < ActionMailer::Base
def self.deliver_issue_edit(journal)
issue = journal.journalized.reload
to = journal.notified_users
cc = journal.notified_watchers
cc = journal.notified_watchers - to
journal.each_notification(to + cc) do |users|
issue.each_notification(users) do |users2|
Mailer.issue_edit(journal, to & users2, cc & users2).deliver
@ -464,7 +464,7 @@ class Mailer < ActionMailer::Base
if rand
hash << Redmine::Utils.random_hex(8)
end
host = Setting.mail_from.to_s.gsub(%r{^.*@}, '')
host = Setting.mail_from.to_s.strip.gsub(%r{^.*@|>}, '')
host = "#{::Socket.gethostname}.redmine" if host.empty?
"#{hash.join('.')}@#{host}"
end

View File

@ -89,7 +89,7 @@ class Member < ActiveRecord::Base
end
end
# Find or initilize a Member with an id, attributes, and for a Principal
# Find or initialize a Member with an id, attributes, and for a Principal
def self.edit_membership(id, new_attributes, principal=nil)
@membership = id.present? ? Member.find(id) : Member.new(:principal => principal)
@membership.attributes = new_attributes

View File

@ -51,7 +51,7 @@ class News < ActiveRecord::Base
end
def recipients
project.users.select {|user| user.notify_about?(self)}.map(&:mail)
project.users.select {|user| user.notify_about?(self) && user.allowed_to?(:view_news, project)}.map(&:mail)
end
# Returns the email addresses that should be cc'd when a new news is added

View File

@ -26,7 +26,7 @@ class Project < ActiveRecord::Base
# Maximum length for project identifiers
IDENTIFIER_MAX_LENGTH = 100
# Specific overidden Activities
# Specific overridden Activities
has_many :time_entry_activities
has_many :members, :include => [:principal, :roles], :conditions => "#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{Principal::STATUS_ACTIVE}"
has_many :memberships, :class_name => 'Member'
@ -74,7 +74,7 @@ class Project < ActiveRecord::Base
validates_length_of :name, :maximum => 255
validates_length_of :homepage, :maximum => 255
validates_length_of :identifier, :in => 1..IDENTIFIER_MAX_LENGTH
# donwcase letters, digits, dashes but not digits only
# downcase letters, digits, dashes but not digits only
validates_format_of :identifier, :with => /\A(?!\d+$)[a-z0-9\-_]*\z/, :if => Proc.new { |p| p.identifier_changed? }
# reserved words
validates_exclusion_of :identifier, :in => %w( new )
@ -252,10 +252,10 @@ class Project < ActiveRecord::Base
parent_activity = TimeEntryActivity.find(activity['parent_id'])
activity['name'] = parent_activity.name
activity['position'] = parent_activity.position
if Enumeration.overridding_change?(activity, parent_activity)
if Enumeration.overriding_change?(activity, parent_activity)
project_activity = self.time_entry_activities.create(activity)
if project_activity.new_record?
raise ActiveRecord::Rollback, "Overridding TimeEntryActivity was not successfully saved"
raise ActiveRecord::Rollback, "Overriding TimeEntryActivity was not successfully saved"
else
self.time_entries.
where(["activity_id = ?", parent_activity.id]).
@ -502,7 +502,7 @@ class Project < ActiveRecord::Base
assignable.select {|m| m.roles.detect {|role| role.assignable?}}.collect {|m| m.principal}.sort
end
# Returns the mail adresses of users that should be always notified on project events
# Returns the mail addresses of users that should be always notified on project events
def recipients
notified_users.collect {|user| user.mail}
end
@ -514,7 +514,7 @@ class Project < ActiveRecord::Base
end
# Returns a scope of all custom fields enabled for project issues
# (explictly associated custom fields and custom fields enabled for all projects)
# (explicitly associated custom fields and custom fields enabled for all projects)
def all_issue_custom_fields
@all_issue_custom_fields ||= IssueCustomField.
sorted.
@ -847,7 +847,7 @@ class Project < ActiveRecord::Base
# Copies issues from +project+
def copy_issues(project)
# Stores the source issue id as a key and the copied issues as the
# value. Used to map the two togeather for issue relations.
# value. Used to map the two together for issue relations.
issues_map = {}
# Store status and reopen locked/closed versions

View File

@ -57,6 +57,10 @@ class QueryColumn
object.send name
end
def value_object(object)
object.send name
end
def css_classes
name
end
@ -80,10 +84,21 @@ class QueryCustomFieldColumn < QueryColumn
@cf
end
def value(object)
def value_object(object)
if custom_field.visible_by?(object.project, User.current)
cv = object.custom_values.select {|v| v.custom_field_id == @cf.id}.collect {|v| @cf.cast_value(v.value)}
cv.size > 1 ? cv.sort {|a,b| a.to_s <=> b.to_s} : cv.first
cv = object.custom_values.select {|v| v.custom_field_id == @cf.id}
cv.size > 1 ? cv.sort {|a,b| a.value.to_s <=> b.value.to_s} : cv.first
else
nil
end
end
def value(object)
raw = value_object(object)
if raw.is_a?(Array)
raw.map {|r| @cf.cast_value(r.value)}
elsif raw
@cf.cast_value(raw.value)
else
nil
end
@ -105,7 +120,7 @@ class QueryAssociationCustomFieldColumn < QueryCustomFieldColumn
@association = association
end
def value(object)
def value_object(object)
if assoc = object.send(@association)
super(assoc)
end
@ -144,8 +159,8 @@ class Query < ActiveRecord::Base
after_save do |query|
if query.visibility_changed? && query.visibility != VISIBILITY_ROLES
query.roles.clear
end
query.roles.clear
end
end
class_attribute :operators
@ -541,7 +556,7 @@ class Query < ActiveRecord::Base
next unless v and !v.empty?
operator = operator_for(field)
# "me" value subsitution
# "me" value substitution
if %w(assigned_to_id author_id user_id watcher_id).include?(field)
if v.delete("me")
if User.current.logged?

View File

@ -40,7 +40,7 @@ class Repository < ActiveRecord::Base
validates_length_of :identifier, :maximum => IDENTIFIER_MAX_LENGTH, :allow_blank => true
validates_presence_of :identifier, :unless => Proc.new { |r| r.is_default? || r.set_as_default? }
validates_uniqueness_of :identifier, :scope => :project_id, :allow_blank => true
validates_exclusion_of :identifier, :in => %w(show entry raw changes annotate diff show stats graph)
validates_exclusion_of :identifier, :in => %w(browse show entry raw changes annotate diff statistics graph revisions revision)
# donwcase letters, digits, dashes, underscores but not digits only
validates_format_of :identifier, :with => /\A(?!\d+$)[a-z0-9\-_]*\z/, :allow_blank => true
# Checks if the SCM is enabled when creating a repository

View File

@ -138,9 +138,9 @@ class Repository::Cvs < Repository
# is not exclusive at all.
tmp_time = revision.time.clone
unless filechanges.find_by_path_and_revision(
scm.with_leading_slash(revision.paths[0][:path]),
revision.paths[0][:revision]
)
scm.with_leading_slash(revision.paths[0][:path]),
revision.paths[0][:revision]
)
cmt = Changeset.normalize_comments(revision.message, repo_log_encoding)
author_utf8 = Changeset.to_utf8(revision.author, repo_log_encoding)
cs = changesets.where(
@ -150,7 +150,7 @@ class Repository::Cvs < Repository
).first
# create a new changeset....
unless cs
# we use a temporaray revision number here (just for inserting)
# we use a temporary revision number here (just for inserting)
# later on, we calculate a continous positive number
tmp_time2 = tmp_time.clone.gmtime
branch = revision.paths[0][:branch]

View File

@ -155,7 +155,7 @@ class Repository::Mercurial < Repository
# Revisions in root directory and sub directory are not equal.
# So, in order to get correct limit, we need to get all revisions.
# But, it is very heavy.
# Mercurial does not treat direcotry.
# Mercurial does not treat directory.
# So, "hg log DIR" is very heavy.
branch_limit = path.blank? ? limit : ( limit * 5 )
args << nodes_in_branch(rev, branch_limit)

View File

@ -77,6 +77,16 @@ class TimeEntry < ActiveRecord::Base
end
end
def safe_attributes=(attrs, user=User.current)
attrs = super
if !new_record? && issue && issue.project_id != project_id
if user.allowed_to?(:log_time, issue.project)
self.project_id = issue.project_id
end
end
attrs
end
def set_project_if_nil
self.project = issue.project if issue && project.nil?
end

View File

@ -384,8 +384,8 @@ class User < Principal
# Find a user account by matching the exact login and then a case-insensitive
# version. Exact matches will be given priority.
def self.find_by_login(login)
login = Redmine::CodesetUtil.replace_invalid_utf8(login.to_s)
if login.present?
login = login.to_s
# First look for an exact match
user = where(:login => login).detect {|u| u.login == login}
unless user
@ -626,11 +626,11 @@ class User < Principal
end
def self.current=(user)
Thread.current[:current_user] = user
RequestStore.store[:current_user] = user
end
def self.current
Thread.current[:current_user] ||= User.anonymous
RequestStore.store[:current_user] ||= User.anonymous
end
# Returns the anonymous user. If the anonymous user does not exist, it is created. There can be only

View File

@ -256,7 +256,7 @@ class Version < ActiveRecord::Base
# Returns the average estimated time of assigned issues
# or 1 if no issue has an estimated time
# Used to weigth unestimated issues in progress calculation
# Used to weight unestimated issues in progress calculation
def estimated_average
if @estimated_average.nil?
average = fixed_issues.average(:estimated_hours).to_f

View File

@ -40,7 +40,7 @@ class WikiContent < ActiveRecord::Base
page.nil? ? [] : page.attachments
end
# Returns the mail adresses of users that should be notified
# Returns the mail addresses of users that should be notified
def recipients
notified = project.notified_users
notified.reject! {|user| !visible?(user)}

View File

@ -104,9 +104,11 @@ class WikiPage < ActiveRecord::Base
end
def content_for_version(version=nil)
result = content.versions.find_by_version(version.to_i) if version
result ||= content
result
if content
result = content.versions.find_by_version(version.to_i) if version
result ||= content
result
end
end
def diff(version_to=nil, version_from=nil)

View File

@ -19,20 +19,43 @@ class WorkflowPermission < WorkflowRule
validates_inclusion_of :rule, :in => %w(readonly required)
validate :validate_field_name
# Replaces the workflow permissions for the given tracker and role
# Returns the workflow permissions for the given trackers and roles
# grouped by status_id
#
# Example:
# WorkflowPermission.replace_permissions role, tracker, {'due_date' => {'1' => 'readonly', '2' => 'required'}}
def self.replace_permissions(tracker, role, permissions)
destroy_all(:tracker_id => tracker.id, :role_id => role.id)
# WorkflowPermission.rules_by_status_id trackers, roles
# # => {1 => {'start_date' => 'required', 'due_date' => 'readonly'}}
def self.rules_by_status_id(trackers, roles)
WorkflowPermission.where(:tracker_id => trackers.map(&:id), :role_id => roles.map(&:id)).inject({}) do |h, w|
h[w.old_status_id] ||= {}
h[w.old_status_id][w.field_name] ||= []
h[w.old_status_id][w.field_name] << w.rule
h
end
end
permissions.each { |field, rule_by_status_id|
rule_by_status_id.each { |status_id, rule|
if rule.present?
WorkflowPermission.create(:role_id => role.id, :tracker_id => tracker.id, :old_status_id => status_id, :field_name => field, :rule => rule)
end
# Replaces the workflow permissions for the given trackers and roles
#
# Example:
# WorkflowPermission.replace_permissions trackers, roles, {'1' => {'start_date' => 'required', 'due_date' => 'readonly'}}
def self.replace_permissions(trackers, roles, permissions)
trackers = Array.wrap trackers
roles = Array.wrap roles
transaction do
permissions.each { |status_id, rule_by_field|
rule_by_field.each { |field, rule|
destroy_all(:tracker_id => trackers.map(&:id), :role_id => roles.map(&:id), :old_status_id => status_id, :field_name => field)
if rule.present?
trackers.each do |tracker|
roles.each do |role|
WorkflowPermission.create(:role_id => role.id, :tracker_id => tracker.id, :old_status_id => status_id, :field_name => field, :rule => rule)
end
end
end
}
}
}
end
end
protected

View File

@ -21,9 +21,8 @@ class WorkflowTransition < WorkflowRule
# Returns workflow transitions count by tracker and role
def self.count_by_tracker_and_role
counts = connection.select_all("SELECT role_id, tracker_id, count(id) AS c FROM #{table_name} WHERE type = 'WorkflowTransition' GROUP BY role_id, tracker_id")
roles = Role.sorted.all
trackers = Tracker.sorted.all
roles = Role.sorted
trackers = Tracker.sorted
result = []
trackers.each do |tracker|
t = []
@ -33,7 +32,71 @@ class WorkflowTransition < WorkflowRule
end
result << [tracker, t]
end
result
end
def self.replace_transitions(trackers, roles, transitions)
trackers = Array.wrap trackers
roles = Array.wrap roles
transaction do
records = WorkflowTransition.where(:tracker_id => trackers.map(&:id), :role_id => roles.map(&:id)).all
transitions.each do |old_status_id, transitions_by_new_status|
transitions_by_new_status.each do |new_status_id, transition_by_rule|
transition_by_rule.each do |rule, transition|
trackers.each do |tracker|
roles.each do |role|
w = records.select {|r|
r.old_status_id == old_status_id.to_i &&
r.new_status_id == new_status_id.to_i &&
r.tracker_id == tracker.id &&
r.role_id == role.id &&
!r.destroyed?
}
if rule == 'always'
w = w.select {|r| !r.author && !r.assignee}
else
w = w.select {|r| r.author || r.assignee}
end
if w.size > 1
w[1..-1].each(&:destroy)
end
w = w.first
if transition == "1" || transition == true
unless w
w = WorkflowTransition.new(:old_status_id => old_status_id, :new_status_id => new_status_id, :tracker_id => tracker.id, :role_id => role.id)
records << w
end
w.author = true if rule == "author"
w.assignee = true if rule == "assignee"
w.save if w.changed?
elsif w
if rule == 'always'
w.destroy
elsif rule == 'author'
if w.assignee
w.author = false
w.save if w.changed?
else
w.destroy
end
elsif rule == 'assignee'
if w.author
w.assignee = false
w.save if w.changed?
else
w.destroy
end
end
end
end
end
end
end
end
end
end
end

View File

@ -9,11 +9,55 @@
<%= content_tag('span', link_to(h(plugin.url), plugin.url), :class => 'url') unless plugin.url.blank? %>
</td>
<td class="author"><%= plugin.author_url.blank? ? h(plugin.author) : link_to(h(plugin.author), plugin.author_url) %></td>
<td class="version"><%=h plugin.version %></td>
<td class="version"><span class="icon"><%= plugin.version %></span></td>
<td class="configure"><%= link_to(l(:button_configure), plugin_settings_path(plugin)) if plugin.configurable? %></td>
</tr>
<% end %>
</table>
<p><a href="#" id="check-for-updates"><%= l(:label_check_for_updates) %></a></p>
<% else %>
<p class="nodata"><%= l(:label_no_data) %></p>
<% end %>
<%= javascript_tag do %>
$(document).ready(function(){
$("#check-for-updates").click(function(e){
e.preventDefault();
$.ajax({
dataType: "jsonp",
url: "http://www.redmine.org/plugins/check_updates",
data: <%= raw_json plugin_data_for_updates(@plugins) %>,
timeout: 3000,
beforeSend: function(){
$('#ajax-indicator').show();
},
success: function(data){
$('#ajax-indicator').hide();
$("table.plugins td.version span").addClass("unknown");
$.each(data, function(plugin_id, plugin_data){
var s = $("tr#plugin-"+plugin_id+" td.version span");
s.removeClass("icon-checked icon-warning unknown");
if (plugin_data.url) {
if (s.parent("a").length>0) {
s.unwrap();
}
s.addClass("found");
s.wrap($("<a></a>").attr("href", plugin_data.url).attr("target", "_blank"));
}
if (plugin_data.c == s.text()) {
s.addClass("icon-checked");
} else if (plugin_data.c) {
s.addClass("icon-warning");
s.attr("title", "<%= escape_javascript l(:label_latest_compatible_version) %>: "+plugin_data.c);
}
});
$("table.plugins td.version span.unknown").addClass("icon-help").attr("title", "<%= escape_javascript l(:label_unknown_plugin) %>");
},
error: function(){
$('#ajax-indicator').hide();
alert("Unable to retrieve plugin informations from www.redmine.org");
}
});
});
});
<% end if @plugins.any? %>

View File

@ -8,8 +8,8 @@
<% end -%>
</ul>
<div class="tabs-buttons" style="display:none;">
<button class="tab-left" onclick="moveTabLeft(this);"></button>
<button class="tab-right" onclick="moveTabRight(this);"></button>
<button class="tab-left" onclick="moveTabLeft(this); return false;"></button>
<button class="tab-right" onclick="moveTabRight(this); return false;"></button>
</div>
</div>

View File

@ -2,9 +2,9 @@
<div class="splitcontentleft">
<div class="box tabular">
<p><%= f.select :field_format, custom_field_formats_for_select(@custom_field), {}, :disabled => !@custom_field.new_record? %></p>
<p><%= f.text_field :name, :required => true %></p>
<p><%= f.text_area :description, :rows => 7 %></p>
<p><%= f.select :field_format, custom_field_formats_for_select(@custom_field), {}, :disabled => !@custom_field.new_record? %></p>
<% if @custom_field.format.multiple_supported %>
<p>

View File

@ -27,12 +27,12 @@ api.array :custom_fields do
end
if field.is_a?(IssueCustomField)
api.trackers do
api.array :trackers do
field.trackers.each do |tracker|
api.tracker :id => tracker.id, :name => tracker.name
end
end
api.roles do
api.array :roles do
field.roles.each do |role|
api.role :id => role.id, :name => role.name
end

View File

@ -8,7 +8,7 @@
<tbody>
<% @group.users.sort.each do |user| %>
<tr id="user-<%= user.id %>" class="<%= cycle 'odd', 'even' %>">
<td class="user"><%= link_to_user user %></td>
<td class="name"><%= link_to_user user %></td>
<td class="buttons">
<%= delete_link group_user_path(@group, :user_id => user), :remote => true %>
</td>

View File

@ -43,3 +43,13 @@
<%= call_hook(:view_issues_form_details_bottom, { :issue => @issue, :form => f }) %>
<% end %>
<% heads_for_wiki_formatter %>
<%= javascript_tag do %>
$(document).ready(function(){
$("#issue_tracker_id, #issue_status_id").each(function(){
$(this).val($(this).find("option[selected=selected]").val());
});
});
<% end %>

View File

@ -3,12 +3,7 @@
<% end %>
<div class="contextual">
<%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add') + ' |' if User.current.allowed_to?(:add_project, nil, :global => true) %>
<%= link_to(l(:label_issue_view_all), issues_path) + ' |' if User.current.allowed_to?(:view_issues, nil, :global => true) %>
<%= link_to(l(:label_overall_spent_time), time_entries_path) + ' |' if User.current.allowed_to?(:view_time_entries, nil, :global => true) %>
<%= link_to l(:label_overall_activity),
{ :controller => 'activities', :action => 'index',
:id => nil } %>
<%= render_project_action_links %>
</div>
<h2><%= l(:label_project_plural) %></h2>

View File

@ -23,8 +23,10 @@
:ondblclick => "moveOptions(this.form.selected_columns, this.form.available_columns);" %>
</td>
<td class="buttons">
<input type="button" value="&#8648;" onclick="moveOptionTop(this.form.selected_columns);" /><br />
<input type="button" value="&#8593;" onclick="moveOptionUp(this.form.selected_columns);" /><br />
<input type="button" value="&#8595;" onclick="moveOptionDown(this.form.selected_columns);" />
<input type="button" value="&#8595;" onclick="moveOptionDown(this.form.selected_columns);" /><br />
<input type="button" value="&#8650;" onclick="moveOptionBottom(this.form.selected_columns);" />
</td>
</tr>
</table>

View File

@ -1,4 +1,4 @@
<table class="list transitions transitions-<%= name %>">
<table class="list workflows transitions transitions-<%= name %>">
<thead>
<tr>
<th>
@ -31,8 +31,7 @@
<% for new_status in @statuses -%>
<% checked = workflows.detect {|w| w.old_status_id == old_status.id && w.new_status_id == new_status.id} %>
<td class="<%= checked ? 'enabled' : '' %>">
<%= check_box_tag "issue_status[#{ old_status.id }][#{new_status.id}][]", name, checked,
:class => "old-status-#{old_status.id} new-status-#{new_status.id}" %>
<%= transition_tag workflows, old_status, new_status, name %>
</td>
<% end -%>
</tr>

View File

@ -4,8 +4,8 @@
<div class="tabs">
<ul>
<li><%= link_to l(:label_status_transitions), {:action => 'edit', :role_id => @role, :tracker_id => @tracker}, :class => 'selected' %></li>
<li><%= link_to l(:label_fields_permissions), {:action => 'permissions', :role_id => @role, :tracker_id => @tracker} %></li>
<li><%= link_to l(:label_status_transitions), workflows_edit_path(:role_id => @roles, :tracker_id => @trackers), :class => 'selected' %></li>
<li><%= link_to l(:label_fields_permissions), workflows_permissions_path(:role_id => @roles, :tracker_id => @trackers) %></li>
</ul>
</div>
@ -14,10 +14,14 @@
<%= form_tag({}, :method => 'get') do %>
<p>
<label><%=l(:label_role)%>:
<%= select_tag 'role_id', options_from_collection_for_select(@roles, "id", "name", @role && @role.id) %></label>
<%= options_for_workflow_select 'role_id[]', Role.sorted, @roles, :id => 'role_id', :class => 'expandable' %>
</label>
<a href="#" data-expands="#role_id"><%= image_tag 'bullet_toggle_plus.png' %></a>
<label><%=l(:label_tracker)%>:
<%= select_tag 'tracker_id', options_from_collection_for_select(@trackers, "id", "name", @tracker && @tracker.id) %></label>
<%= options_for_workflow_select 'tracker_id[]', Tracker.sorted, @trackers, :id => 'tracker_id', :class => 'expandable' %>
</label>
<a href="#" data-expands="#tracker_id"><%= image_tag 'bullet_toggle_plus.png' %></a>
<%= submit_tag l(:button_edit), :name => nil %>
@ -27,10 +31,10 @@
</p>
<% end %>
<% if @tracker && @role && @statuses.any? %>
<% if @trackers && @roles && @statuses.any? %>
<%= form_tag({}, :id => 'workflow_form' ) do %>
<%= hidden_field_tag 'tracker_id', @tracker.id %>
<%= hidden_field_tag 'role_id', @role.id %>
<%= @trackers.map {|tracker| hidden_field_tag 'tracker_id[]', tracker.id}.join.html_safe %>
<%= @roles.map {|role| hidden_field_tag 'role_id[]', role.id}.join.html_safe %>
<%= hidden_field_tag 'used_statuses_only', params[:used_statuses_only] %>
<div class="autoscroll">
<%= render :partial => 'form', :locals => {:name => 'always', :workflows => @workflows['always']} %>
@ -54,3 +58,18 @@
<%= submit_tag l(:button_save) %>
<% end %>
<% end %>
<%= javascript_tag do %>
$("a[data-expands]").click(function(e){
e.preventDefault();
var target = $($(this).attr("data-expands"));
if (target.attr("multiple")) {
target.attr("multiple", false);
target.find("option[value=all]").show();
} else {
target.attr("multiple", true);
target.find("option[value=all]").attr("selected", false).hide();
}
});
<% end %>

View File

@ -4,8 +4,8 @@
<div class="tabs">
<ul>
<li><%= link_to l(:label_status_transitions), {:action => 'edit', :role_id => @role, :tracker_id => @tracker} %></li>
<li><%= link_to l(:label_fields_permissions), {:action => 'permissions', :role_id => @role, :tracker_id => @tracker}, :class => 'selected' %></li>
<li><%= link_to l(:label_status_transitions), workflows_edit_path(:role_id => @roles, :tracker_id => @trackers) %></li>
<li><%= link_to l(:label_fields_permissions), workflows_permissions_path(:role_id => @roles, :tracker_id => @trackers), :class => 'selected' %></li>
</ul>
</div>
@ -14,10 +14,14 @@
<%= form_tag({}, :method => 'get') do %>
<p>
<label><%=l(:label_role)%>:
<%= select_tag 'role_id', options_from_collection_for_select(@roles, "id", "name", @role && @role.id) %></label>
<%= options_for_workflow_select 'role_id[]', Role.sorted, @roles, :id => 'role_id', :class => 'expandable' %>
</label>
<a href="#" data-expands="#role_id"><%= image_tag 'bullet_toggle_plus.png' %></a>
<label><%=l(:label_tracker)%>:
<%= select_tag 'tracker_id', options_from_collection_for_select(@trackers, "id", "name", @tracker && @tracker.id) %></label>
<%= options_for_workflow_select 'tracker_id[]', Tracker.sorted, @trackers, :id => 'tracker_id', :class => 'expandable' %>
</label>
<a href="#" data-expands="#tracker_id"><%= image_tag 'bullet_toggle_plus.png' %></a>
<%= submit_tag l(:button_edit), :name => nil %>
@ -26,13 +30,13 @@
</p>
<% end %>
<% if @tracker && @role && @statuses.any? %>
<% if @trackers && @roles && @statuses.any? %>
<%= form_tag({}, :id => 'workflow_form' ) do %>
<%= hidden_field_tag 'tracker_id', @tracker.id %>
<%= hidden_field_tag 'role_id', @role.id %>
<%= @trackers.map {|tracker| hidden_field_tag 'tracker_id[]', tracker.id}.join.html_safe %>
<%= @roles.map {|role| hidden_field_tag 'role_id[]', role.id}.join.html_safe %>
<%= hidden_field_tag 'used_statuses_only', params[:used_statuses_only] %>
<div class="autoscroll">
<table class="list fields_permissions">
<table class="list workflows fields_permissions">
<thead>
<tr>
<th>
@ -62,7 +66,7 @@
</td>
<% for status in @statuses -%>
<td class="<%= @permissions[status.id][field] %>">
<%= field_permission_tag(@permissions, status, field, @role) %>
<%= field_permission_tag(@permissions, status, field, @roles) %>
<% unless status == @statuses.last %><a href="#" class="repeat-value">&#187;</a><% end %>
</td>
<% end -%>
@ -82,7 +86,7 @@
</td>
<% for status in @statuses -%>
<td class="<%= @permissions[status.id][field.id.to_s] %>">
<%= field_permission_tag(@permissions, status, field, @role) %>
<%= field_permission_tag(@permissions, status, field, @roles) %>
<% unless status == @statuses.last %><a href="#" class="repeat-value">&#187;</a><% end %>
</td>
<% end -%>
@ -103,4 +107,17 @@ $("a.repeat-value").click(function(e){
var selected = td.find("select").find(":selected").val();
td.nextAll('td').find("select").val(selected);
});
$("a[data-expands]").click(function(e){
e.preventDefault();
var target = $($(this).attr("data-expands"));
if (target.attr("multiple")) {
target.attr("multiple", false);
target.find("option[value=all]").show();
} else {
target.attr("multiple", true);
target.find("option[value=all]").attr("selected", false).hide();
}
});
<% end %>

View File

@ -72,10 +72,9 @@
#
# === More configuration options
#
# See the "Configuration options" at the following website for a list of the
# full options allowed:
# See following page:
#
# http://wiki.rubyonrails.org/rails/pages/HowToSendEmailsWithActionMailer
# http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration
# default configuration options for all environments

View File

@ -203,6 +203,30 @@ module ActionController
end
end
if Rails::VERSION::MAJOR < 4 && RUBY_VERSION >= "2.1"
module ActiveSupport
class HashWithIndifferentAccess
def select(*args, &block)
dup.tap { |hash| hash.select!(*args, &block) }
end
def reject(*args, &block)
dup.tap { |hash| hash.reject!(*args, &block) }
end
end
class OrderedHash
def select(*args, &block)
dup.tap { |hash| hash.select!(*args, &block) }
end
def reject(*args, &block)
dup.tap { |hash| hash.reject!(*args, &block) }
end
end
end
end
require 'awesome_nested_set/version'
module CollectiveIdea

View File

@ -1112,3 +1112,7 @@ ar:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1209,3 +1209,7 @@ az:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -511,6 +511,7 @@ bg:
label_issue_updated: Обновена задача
label_issue_note_added: Добавена бележка
label_issue_status_updated: Обновено състояние
label_issue_assigned_to_updated: Задачата е с назначен нов изпълнител
label_issue_priority_updated: Обновен приоритет
label_document: Документ
label_document_new: Нов документ
@ -914,6 +915,9 @@ bg:
label_checkboxes: чек-бокс
label_link_values_to: URL (опция)
label_custom_field_select_type: "Изберете тип на обект, към който потребителското поле да бъде асоциирано"
label_check_for_updates: Проверка за нови версии
label_latest_compatible_version: Последна съвместима версия
label_unknown_plugin: Непознат плъгин
button_login: Вход
button_submit: Изпращане

View File

@ -1125,3 +1125,7 @@ bs:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1114,3 +1114,7 @@ ca:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1,4 +1,4 @@
# Update to 2.2, 2.4 by Karel Picman <karel.picman@kontron.com>
# Update to 2.2, 2.4, 2.5 by Karel Picman <karel.picman@kontron.com>
# Update to 1.1 by Michal Gebauer <mishak@mishak.net>
# Updated by Josef Liška <jl@chl.cz>
# CZ translation by Maxim Krušina | Massimo Filippi, s.r.o. | maxim@mxm.cz
@ -1104,14 +1104,17 @@ cs:
notice_new_password_must_be_different: Nové heslo se musí lišit od stávajícího
setting_mail_handler_excluded_filenames: Vyřadit přílohy podle jména
text_convert_available: ImageMagick convert k dispozici (volitelné)
label_link: Link
label_only: only
label_drop_down_list: drop-down list
label_checkboxes: checkboxes
label_link_values_to: Link values to URL
setting_force_default_language_for_anonymous: Force default language for anonymous
label_link: Odkaz
label_only: jenom
label_drop_down_list: rozbalovací seznam
label_checkboxes: zaškrtávátka
label_link_values_to: Propojit hodnoty s URL
setting_force_default_language_for_anonymous: Vynutit výchozí jazyk pro anonymní uživatele
users
setting_force_default_language_for_loggedin: Force default language for logged-in
setting_force_default_language_for_loggedin: Vynutit výchozí jazyk pro přihlášené uživatele
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_custom_field_select_type: Vybrat typ objektu, ke kterému bude přiřazeno uživatelské pole
label_issue_assigned_to_updated: Přiřazený uživatel aktualizován
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1129,3 +1129,7 @@ da:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -460,6 +460,7 @@ de:
label_changes_details: Details aller Änderungen
label_changeset_plural: Changesets
label_checkboxes: Checkboxen
label_check_for_updates: Auf Updates prüfen
label_child_revision: Nachfolger
label_chronological_order: in zeitlicher Reihenfolge
label_close_versions: Vollständige Versionen schließen
@ -568,6 +569,7 @@ de:
label_internal: Intern
label_issue: Ticket
label_issue_added: Ticket hinzugefügt
label_issue_assigned_to_updated: Bearbeiter aktualisiert
label_issue_category: Ticket-Kategorie
label_issue_category_new: Neue Kategorie
label_issue_category_plural: Ticket-Kategorien
@ -596,11 +598,13 @@ de:
label_last_n_days: "die letzten %{count} Tage"
label_last_n_weeks: letzte %{count} Wochen
label_last_week: vorige Woche
label_latest_compatible_version: Letzte kompatible Version
label_latest_revision: Aktuellste Revision
label_latest_revision_plural: Aktuellste Revisionen
label_ldap_authentication: LDAP-Authentifizierung
label_less_or_equal: "<="
label_less_than_ago: vor weniger als
label_link: Link
label_link_values_to: Werte mit URL verknüpfen
label_list: Liste
label_loading: Lade...
@ -757,6 +761,7 @@ de:
label_tracker: Tracker
label_tracker_new: Neuer Tracker
label_tracker_plural: Tracker
label_unknown_plugin: Unbekanntes Plugin
label_update_issue_done_ratios: Ticket-Fortschritt aktualisieren
label_updated_time: "Vor %{value} aktualisiert"
label_updated_time_by: "Von %{author} vor %{age} aktualisiert"
@ -1120,4 +1125,3 @@ de:
version_status_open: offen
warning_attachments_not_saved: "%{count} Datei(en) konnten nicht gespeichert werden."
label_link: Link

View File

@ -1112,3 +1112,7 @@ el:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1114,3 +1114,7 @@ en-GB:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -508,6 +508,7 @@ en:
label_issue_updated: Issue updated
label_issue_note_added: Note added
label_issue_status_updated: Status updated
label_issue_assigned_to_updated: Assignee updated
label_issue_priority_updated: Priority updated
label_document: Document
label_document_new: New document
@ -911,6 +912,9 @@ en:
label_checkboxes: checkboxes
label_link_values_to: Link values to URL
label_custom_field_select_type: Select the type of object to which the custom field is to be attached
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin
button_login: Login
button_submit: Submit

View File

@ -1144,5 +1144,8 @@ es:
label_link_values_to: Enlazar valores a la URL
setting_force_default_language_for_anonymous: Forzar lenguaje por defecto a usuarios anónimos
setting_force_default_language_for_loggedin: Forzar lenguaje por defecto para usuarios identificados
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_custom_field_select_type: Seleccione el tipo de objeto al que unir el campo personalizado
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1125,3 +1125,7 @@ et:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1113,3 +1113,7 @@ eu:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

File diff suppressed because it is too large Load Diff

View File

@ -1133,3 +1133,7 @@ fi:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -15,8 +15,11 @@ fr:
day_names: [dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi]
abbr_day_names: [dim, lun, mar, mer, jeu, ven, sam]
# Don't forget the nil at the beginning; there's no such thing as a 0th month
month_names: [~, janvier, février, mars, avril, mai, juin, juillet, août, septembre, octobre, novembre, décembre]
abbr_month_names: [~, jan., fév., mar., avr., mai, juin, juil., août, sept., oct., nov., déc.]
# Used in date_select and datime_select.
order:
- :day
- :month
@ -100,7 +103,7 @@ fr:
units:
byte:
one: "octet"
other: "octet"
other: "octets"
kb: "ko"
mb: "Mo"
gb: "Go"
@ -146,7 +149,7 @@ fr:
not_same_project: "n'appartient pas au même projet"
circular_dependency: "Cette relation créerait une dépendance circulaire"
cant_link_an_issue_with_a_descendant: "Une demande ne peut pas être liée à l'une de ses sous-tâches"
earlier_than_minimum_start_date: "ne peut pas être antérieure au %{date} à cause des demandes qui précédent"
earlier_than_minimum_start_date: "ne peut pas être antérieure au %{date} à cause des demandes qui précèdent"
actionview_instancetag_blank_option: Choisir
@ -183,14 +186,16 @@ fr:
notice_email_sent: "Un email a été envoyé à %{value}"
notice_email_error: "Erreur lors de l'envoi de l'email (%{value})"
notice_feeds_access_key_reseted: "Votre clé d'accès aux flux Atom a été réinitialisée."
notice_api_access_key_reseted: Votre clé d'accès API a été réinitialisée.
notice_failed_to_save_issues: "%{count} demande(s) sur les %{total} sélectionnées n'ont pas pu être mise(s) à jour : %{ids}."
notice_failed_to_save_time_entries: "%{count} temps passé(s) sur les %{total} sélectionnés n'ont pas pu être mis à jour: %{ids}."
notice_failed_to_save_members: "Erreur lors de la sauvegarde des membres: %{errors}."
notice_no_issue_selected: "Aucune demande sélectionnée ! Cochez les demandes que vous voulez mettre à jour."
notice_account_pending: "Votre compte a été créé et attend l'approbation de l'administrateur."
notice_default_data_loaded: Paramétrage par défaut chargé avec succès.
notice_unable_delete_version: Impossible de supprimer cette version.
notice_unable_delete_time_entry: Impossible de supprimer le temps passé.
notice_issue_done_ratios_updated: L'avancement des demandes a été mis à jour.
notice_api_access_key_reseted: Votre clé d'accès API a été réinitialisée.
notice_gantt_chart_truncated: "Le diagramme a été tronqué car il excède le nombre maximal d'éléments pouvant être affichés (%{max})"
notice_issue_successful_create: "Demande %{id} créée."
notice_issue_update_conflict: "La demande a été mise à jour par un autre utilisateur pendant que vous la modifiez."
@ -202,15 +207,22 @@ fr:
error_scm_not_found: "L'entrée et/ou la révision demandée n'existe pas dans le dépôt."
error_scm_command_failed: "Une erreur s'est produite lors de l'accès au dépôt : %{value}"
error_scm_annotate: "L'entrée n'existe pas ou ne peut pas être annotée."
error_scm_annotate_big_text_file: Cette entrée ne peut pas être annotée car elle excède la taille maximale.
error_issue_not_found_in_project: "La demande n'existe pas ou n'appartient pas à ce projet"
error_no_tracker_in_project: "Aucun tracker n'est associé à ce projet. Vérifier la configuration du projet."
error_no_default_issue_status: "Aucun statut de demande n'est défini par défaut. Vérifier votre configuration (Administration -> Statuts de demandes)."
error_can_not_delete_custom_field: Impossible de supprimer le champ personnalisé
error_can_not_delete_tracker: Ce tracker contient des demandes et ne peut pas être supprimé.
error_can_not_remove_role: Ce rôle est utilisé et ne peut pas être supprimé.
error_can_not_reopen_issue_on_closed_version: 'Une demande assignée à une version fermée ne peut pas être réouverte'
error_can_not_archive_project: "Ce projet ne peut pas être archivé"
error_issue_done_ratios_not_updated: L'avancement des demandes n'a pas pu être mis à jour.
error_workflow_copy_source: 'Veuillez sélectionner un tracker et/ou un rôle source'
error_workflow_copy_target: 'Veuillez sélectionner les trackers et rôles cibles'
error_issue_done_ratios_not_updated: L'avancement des demandes n'a pas pu être mis à jour.
error_unable_delete_issue_status: Impossible de supprimer le statut de demande
error_unable_to_connect: Connexion impossible (%{value})
error_attachment_too_big: Ce fichier ne peut pas être attaché car il excède la taille maximale autorisée (%{max_size})
error_session_expired: "Votre session a expiré. Veuillez vous reconnecter."
warning_attachments_not_saved: "%{count} fichier(s) n'ont pas pu être sauvegardés."
mail_subject_lost_password: "Votre mot de passe %{value}"
@ -228,20 +240,19 @@ fr:
mail_subject_wiki_content_updated: "Page wiki '%{id}' mise à jour"
mail_body_wiki_content_updated: "La page wiki '%{id}' a été mise à jour par %{author}."
field_name: Nom
field_description: Description
field_summary: Résumé
field_is_required: Obligatoire
field_firstname: Prénom
field_lastname: Nom
field_mail: "Email "
field_mail: Email
field_filename: Fichier
field_filesize: Taille
field_downloads: Téléchargements
field_author: Auteur
field_created_on: "Créé "
field_updated_on: "Mis-à-jour "
field_created_on: Créé
field_updated_on: Mis-à-jour
field_closed_on: Fermé
field_field_format: Format
field_is_for_all: Pour tous les projets
@ -265,15 +276,16 @@ fr:
field_priority: Priorité
field_fixed_version: Version cible
field_user: Utilisateur
field_principal: Principal
field_role: Rôle
field_homepage: "Site web "
field_homepage: Site web
field_is_public: Public
field_parent: Sous-projet de
field_is_in_roadmap: Demandes affichées dans la roadmap
field_login: "Identifiant "
field_login: Identifiant
field_mail_notification: Notifications par mail
field_admin: Administrateur
field_last_login_on: "Dernière connexion "
field_last_login_on: Dernière connexion
field_language: Langue
field_effective_date: Date
field_password: Mot de passe
@ -309,6 +321,7 @@ fr:
field_redirect_existing_links: Rediriger les liens existants
field_estimated_hours: Temps estimé
field_column_names: Colonnes
field_time_entries: Temps passé
field_time_zone: Fuseau horaire
field_searchable: Utilisé pour les recherches
field_default_value: Valeur par défaut
@ -320,13 +333,20 @@ fr:
field_content: Contenu
field_group_by: Grouper par
field_sharing: Partage
field_active: Actif
field_parent_issue: Tâche parente
field_member_of_group: Groupe de l'assigné
field_assigned_to_role: Rôle de l'assigné
field_text: Champ texte
field_visible: Visible
field_warn_on_leaving_unsaved: "M'avertir lorsque je quitte une page contenant du texte non sauvegardé"
field_issues_visibility: Visibilité des demandes
field_is_private: Privée
field_commit_logs_encoding: Encodage des messages de commit
field_scm_path_encoding: Encodage des chemins
field_path_to_repository: Chemin du dépôt
field_root_directory: Répertoire racine
field_cvsroot: CVSROOT
field_cvs_module: Module
field_repository_is_default: Dépôt principal
field_multiple: Valeurs multiples
field_auth_source_ldap_filter: Filtre LDAP
@ -364,6 +384,8 @@ fr:
setting_cross_project_issue_relations: Autoriser les relations entre demandes de différents projets
setting_cross_project_subtasks: Autoriser les sous-tâches dans des projets différents
setting_issue_list_default_columns: Colonnes affichées par défaut sur la liste des demandes
setting_repositories_encodings: Encodages des fichiers et des dépôts
setting_emails_header: En-tête des emails
setting_emails_footer: Pied-de-page des emails
setting_protocol: Protocole
setting_per_page_options: Options d'objets affichés par page
@ -376,6 +398,7 @@ fr:
setting_mail_handler_api_key: Clé de protection de l'API
setting_sequential_project_identifiers: Générer des identifiants de projet séquentiels
setting_gravatar_enabled: Afficher les Gravatar des utilisateurs
setting_gravatar_default: Image Gravatar par défaut
setting_diff_max_lines_displayed: Nombre maximum de lignes de diff affichées
setting_file_max_size_displayed: Taille maximum des fichiers texte affichés en ligne
setting_repository_log_display_limit: "Nombre maximum de révisions affichées sur l'historique d'un fichier"
@ -384,12 +407,12 @@ fr:
setting_new_project_user_role_id: Rôle donné à un utilisateur non-administrateur qui crée un projet
setting_default_projects_modules: Modules activés par défaut pour les nouveaux projets
setting_issue_done_ratio: Calcul de l'avancement des demandes
setting_issue_done_ratio_issue_status: Utiliser le statut
setting_issue_done_ratio_issue_field: 'Utiliser le champ % effectué'
setting_rest_api_enabled: Activer l'API REST
setting_gravatar_default: Image Gravatar par défaut
setting_issue_done_ratio_issue_status: Utiliser le statut
setting_start_of_week: Jour de début des calendriers
setting_rest_api_enabled: Activer l'API REST
setting_cache_formatted_text: Mettre en cache le texte formaté
setting_default_notification_option: Option de notification par défaut
setting_commit_logtime_enabled: Permettre la saisie de temps
setting_commit_logtime_activity_id: Activité pour le temps saisi
setting_gantt_items_limit: Nombre maximum d'éléments affichés sur le gantt
@ -414,6 +437,7 @@ fr:
permission_close_project: Fermer / réouvrir le projet
permission_select_project_modules: Choisir les modules
permission_manage_members: Gérer les membres
permission_manage_project_activities: Gérer les activités
permission_manage_versions: Gérer les versions
permission_manage_categories: Gérer les catégories de demandes
permission_view_issues: Voir les demandes
@ -468,7 +492,6 @@ fr:
permission_delete_messages: Supprimer les messages
permission_delete_own_messages: Supprimer ses propres messages
permission_export_wiki_pages: Exporter les pages
permission_manage_project_activities: Gérer les activités
permission_manage_subtasks: Gérer les sous-tâches
permission_manage_related_issues: Gérer les demandes associées
@ -480,6 +503,8 @@ fr:
project_module_wiki: Wiki
project_module_repository: Dépôt de sources
project_module_boards: Forums de discussion
project_module_calendar: Calendrier
project_module_gantt: Gantt
label_user: Utilisateur
label_user_plural: Utilisateurs
@ -498,12 +523,13 @@ fr:
label_issue_new: Nouvelle demande
label_issue_plural: Demandes
label_issue_view_all: Voir toutes les demandes
label_issues_by: "Demandes par %{value}"
label_issue_added: Demande ajoutée
label_issue_updated: Demande mise à jour
label_issue_note_added: Note ajoutée
label_issue_status_updated: Statut changé
label_issue_assigned_to_updated: Assigné changé
label_issue_priority_updated: Priorité changée
label_issues_by: "Demandes par %{value}"
label_document: Document
label_document_new: Nouveau document
label_document_plural: Documents
@ -547,10 +573,10 @@ fr:
label_login: Connexion
label_logout: Déconnexion
label_help: Aide
label_reported_issues: "Demandes soumises "
label_reported_issues: Demandes soumises
label_assigned_to_me_issues: Demandes qui me sont assignées
label_last_login: "Dernière connexion "
label_registered_on: "Inscrit le "
label_last_login: Dernière connexion
label_registered_on: Inscrit le
label_activity: Activité
label_overall_activity: Activité globale
label_user_activity: "Activité de %{value}"
@ -596,6 +622,7 @@ fr:
label_version: Version
label_version_new: Nouvelle version
label_version_plural: Versions
label_close_versions: Fermer les versions terminées
label_confirmation: Confirmation
label_export_to: 'Formats disponibles :'
label_read: Lire...
@ -655,7 +682,7 @@ fr:
label_query_plural: Rapports personnalisés
label_query_new: Nouveau rapport
label_my_queries: Mes rapports personnalisés
label_filter_add: "Ajouter le filtre "
label_filter_add: Ajouter le filtre
label_filter_plural: Filtres
label_equals: égal
label_not_equals: différent
@ -663,6 +690,9 @@ fr:
label_in_more_than: dans plus de
label_in_the_next_days: dans les prochains jours
label_in_the_past_days: dans les derniers jours
label_greater_or_equal: '>='
label_less_or_equal: '<='
label_between: entre
label_in: dans
label_today: aujourd'hui
label_all_time: toute la période
@ -688,8 +718,11 @@ fr:
label_repository_new: Nouveau dépôt
label_repository_plural: Dépôts
label_browse: Parcourir
label_revision: "Révision "
label_branch: Branche
label_tag: Tag
label_revision: Révision
label_revision_plural: Révisions
label_revision_id: "Révision %{value}"
label_associated_revisions: Révisions associées
label_added: ajouté
label_modified: modifié
@ -699,6 +732,7 @@ fr:
label_latest_revision: Dernière révision
label_latest_revision_plural: Dernières révisions
label_view_revisions: Voir les révisions
label_view_all_revisions: Voir toutes les révisions
label_max_size: Taille maximale
label_sort_highest: Remonter en premier
label_sort_higher: Remonter
@ -708,7 +742,7 @@ fr:
label_roadmap_due_in: "Échéance dans %{value}"
label_roadmap_overdue: "En retard de %{value}"
label_roadmap_no_issues: Aucune demande pour cette version
label_search: "Recherche "
label_search: Recherche
label_result_plural: Résultats
label_all_words: Tous les mots
label_wiki: Wiki
@ -724,6 +758,7 @@ fr:
label_changes_details: Détails de tous les changements
label_issue_tracking: Suivi des demandes
label_spent_time: Temps passé
label_overall_spent_time: Temps passé global
label_f_hour: "%{value} heure"
label_f_hour_plural: "%{value} heures"
label_time_tracking: Suivi du temps
@ -731,6 +766,7 @@ fr:
label_statistics: Statistiques
label_commits_per_month: Commits par mois
label_commits_per_author: Commits par auteur
label_diff: diff
label_view_diff: Voir les différences
label_diff_inline: en ligne
label_diff_side_by_side: côte à côte
@ -763,6 +799,8 @@ fr:
label_board: Forum
label_board_new: Nouveau forum
label_board_plural: Forums
label_board_locked: Verrouillé
label_board_sticky: Sticky
label_topic_plural: Discussions
label_message_plural: Messages
label_message_last: Dernier message
@ -778,6 +816,8 @@ fr:
label_language_based: Basé sur la langue de l'utilisateur
label_sort_by: "Trier par %{value}"
label_send_test_email: Envoyer un email de test
label_feeds_access_key: Clé d'accès Atom
label_missing_feeds_access_key: Clé d'accès Atom manquante
label_feeds_access_key_created_on: "Clé d'accès Atom créée il y a %{value}"
label_module_plural: Modules
label_added_time_by: "Ajouté par %{author} il y a %{age}"
@ -789,11 +829,16 @@ fr:
label_default_columns: Colonnes par défaut
label_no_change_option: (Pas de changement)
label_bulk_edit_selected_issues: Modifier les demandes sélectionnées
label_bulk_edit_selected_time_entries: Modifier les temps passés sélectionnés
label_theme: Thème
label_default: Défaut
label_search_titles_only: Uniquement dans les titres
label_user_mail_option_all: "Pour tous les événements de tous mes projets"
label_user_mail_option_selected: "Pour tous les événements des projets sélectionnés..."
label_user_mail_option_none: Aucune notification
label_user_mail_option_only_my_events: Seulement pour ce que je surveille
label_user_mail_option_only_assigned: Seulement pour ce qui m'est assigné
label_user_mail_option_only_owner: Seulement pour ce que j'ai créé
label_user_mail_no_self_notified: "Je ne veux pas être notifié des changements que j'effectue"
label_registration_activation_by_email: activation du compte par email
label_registration_manual_activation: activation manuelle du compte
@ -824,8 +869,8 @@ fr:
label_date_from_to: Du %{start} au %{end}
label_wiki_content_added: Page wiki ajoutée
label_wiki_content_updated: Page wiki mise à jour
label_group_plural: Groupes
label_group: Groupe
label_group_plural: Groupes
label_group_new: Nouveau groupe
label_time_entry_plural: Temps passé
label_version_sharing_none: Non partagé
@ -833,18 +878,14 @@ fr:
label_version_sharing_hierarchy: Avec toute la hiérarchie
label_version_sharing_tree: Avec tout l'arbre
label_version_sharing_system: Avec tous les projets
label_update_issue_done_ratios: Mettre à jour l'avancement des demandes
label_copy_source: Source
label_copy_target: Cible
label_copy_same_as_target: Comme la cible
label_update_issue_done_ratios: Mettre à jour l'avancement des demandes
label_display_used_statuses_only: N'afficher que les statuts utilisés dans ce tracker
label_api_access_key: Clé d'accès API
label_api_access_key_created_on: Clé d'accès API créée il y a %{value}
label_feeds_access_key: Clé d'accès Atom
label_missing_api_access_key: Clé d'accès API manquante
label_missing_feeds_access_key: Clé d'accès Atom manquante
label_close_versions: Fermer les versions terminées
label_revision_id: Révision %{value}
label_api_access_key_created_on: Clé d'accès API créée il y a %{value}
label_profile: Profil
label_subtask_plural: Sous-tâches
label_project_copy_notifications: Envoyer les notifications durant la copie du projet
@ -855,11 +896,15 @@ fr:
label_issues_visibility_all: Toutes les demandes
label_issues_visibility_public: Toutes les demandes non privées
label_issues_visibility_own: Demandes créées par ou assignées à l'utilisateur
label_git_report_last_commit: Afficher le dernier commit des fichiers et répertoires
label_parent_revision: Parent
label_child_revision: Enfant
label_export_options: Options d'exportation %{export_format}
label_copy_attachments: Copier les fichiers
label_copy_subtasks: Copier les sous-tâches
label_item_position: "%{position} sur %{count}"
label_completed_versions: Versions passées
label_search_for_watchers: Rechercher des observateurs
label_session_expiration: Expiration des sessions
label_show_closed_projects: Voir les projets fermés
label_status_transitions: Changements de statut
@ -879,7 +924,7 @@ fr:
label_cross_project_system: Avec tous les projets
label_gantt_progress_line: Ligne de progression
label_visibility_private: par moi uniquement
label_visibility_roles: par ces roles uniquement
label_visibility_roles: par ces rôles uniquement
label_visibility_public: par tout le monde
label_link: Lien
label_only: seulement
@ -887,6 +932,9 @@ fr:
label_checkboxes: cases à cocher
label_link_values_to: Lier les valeurs vers l'URL
label_custom_field_select_type: Selectionner le type d'objet auquel attacher le champ personnalisé
label_check_for_updates: Vérifier les mises à jour
label_latest_compatible_version: Dernière version compatible
label_unknown_plugin: Plugin inconnu
button_login: Connexion
button_submit: Soumettre
@ -900,6 +948,7 @@ fr:
button_create_and_continue: Créer et continuer
button_test: Tester
button_edit: Modifier
button_edit_associated_wikipage: "Modifier la page wiki associée: %{page_title}"
button_add: Ajouter
button_change: Changer
button_apply: Appliquer
@ -952,6 +1001,8 @@ fr:
version_status_locked: verrouillé
version_status_closed: fermé
field_active: Actif
text_select_mail_notifications: Actions pour lesquelles une notification par e-mail est envoyée
text_regexp_info: ex. ^[A-Z0-9]+$
text_min_max_length_info: 0 pour aucune restriction
@ -959,6 +1010,11 @@ fr:
text_subprojects_destroy_warning: "Ses sous-projets : %{value} seront également supprimés."
text_workflow_edit: Sélectionner un tracker et un rôle pour éditer le workflow
text_are_you_sure: Êtes-vous sûr ?
text_journal_changed: "%{label} changé de %{old} à %{new}"
text_journal_changed_no_detail: "%{label} mis à jour"
text_journal_set_to: "%{label} mis à %{value}"
text_journal_deleted: "%{label} %{old} supprimé"
text_journal_added: "%{label} %{value} ajouté"
text_tip_issue_begin_day: tâche commençant ce jour
text_tip_issue_end_day: tâche finissant ce jour
text_tip_issue_begin_end_day: tâche commençant et finissant ce jour
@ -984,11 +1040,13 @@ fr:
text_time_logged_by_changeset: "Appliqué par commit %{value}"
text_issues_destroy_confirmation: 'Êtes-vous sûr de vouloir supprimer la ou les demandes(s) selectionnée(s) ?'
text_issues_destroy_descendants_confirmation: "Cela entrainera également la suppression de %{count} sous-tâche(s)."
text_time_entries_destroy_confirmation: "Etes-vous sûr de vouloir supprimer les temps passés sélectionnés ?"
text_select_project_modules: 'Sélectionner les modules à activer pour ce projet :'
text_default_administrator_account_changed: Compte administrateur par défaut changé
text_file_repository_writable: Répertoire de stockage des fichiers accessible en écriture
text_plugin_assets_writable: Répertoire public des plugins accessible en écriture
text_rmagick_available: Bibliothèque RMagick présente (optionnelle)
text_convert_available: Binaire convert de ImageMagick présent (optionel)
text_destroy_time_entries_question: "%{hours} heures ont été enregistrées sur les demandes à supprimer. Que voulez-vous faire ?"
text_destroy_time_entries: Supprimer les heures
text_assign_time_entries_to_project: Reporter les heures sur le projet
@ -1005,7 +1063,16 @@ fr:
text_wiki_page_destroy_children: "Supprimer les sous-pages et toutes leurs descedantes"
text_wiki_page_reassign_children: "Réaffecter les sous-pages à cette page"
text_own_membership_delete_confirmation: "Vous allez supprimer tout ou partie de vos permissions sur ce projet et ne serez peut-être plus autorisé à modifier ce projet.\nEtes-vous sûr de vouloir continuer ?"
text_zoom_in: Zoom avant
text_zoom_out: Zoom arrière
text_warn_on_leaving_unsaved: "Cette page contient du texte non sauvegardé qui sera perdu si vous quittez la page."
text_scm_path_encoding_note: "Défaut : UTF-8"
text_git_repository_note: "Le dépôt est vide et local (exemples : /gitrepo, c:\\gitrepo)"
text_mercurial_repository_note: "Dépôt local (exemples : /hgrepo, c:\\hgrepo)"
text_scm_command: Commande
text_scm_command_version: Version
text_scm_config: Vous pouvez configurer les commandes des SCM dans config/configuration.yml. Redémarrer l'application après modification.
text_scm_command_not_available: Ce SCM n'est pas disponible. Vérifier les paramètres dans la section administration.
text_issue_conflict_resolution_overwrite: "Appliquer quand même ma mise à jour (les notes précédentes seront conservées mais des changements pourront être écrasés)"
text_issue_conflict_resolution_add_notes: "Ajouter mes notes et ignorer mes autres changements"
text_issue_conflict_resolution_cancel: "Annuler ma mise à jour et réafficher %{link}"
@ -1014,9 +1081,9 @@ fr:
text_project_closed: Ce projet est fermé et accessible en lecture seule.
text_turning_multiple_off: "Si vous désactivez les valeurs multiples, les valeurs multiples seront supprimées pour n'en conserver qu'une par objet."
default_role_manager: "Manager "
default_role_developer: "Développeur "
default_role_reporter: "Rapporteur "
default_role_manager: Manager
default_role_developer: Développeur
default_role_reporter: Rapporteur
default_tracker_bug: Anomalie
default_tracker_feature: Evolution
default_tracker_support: Assistance
@ -1039,84 +1106,23 @@ fr:
enumeration_issue_priorities: Priorités des demandes
enumeration_doc_categories: Catégories des documents
enumeration_activities: Activités (suivi du temps)
label_greater_or_equal: ">="
label_less_or_equal: "<="
label_between: entre
label_view_all_revisions: Voir toutes les révisions
label_tag: Tag
label_branch: Branche
error_no_tracker_in_project: "Aucun tracker n'est associé à ce projet. Vérifier la configuration du projet."
error_no_default_issue_status: "Aucun statut de demande n'est défini par défaut. Vérifier votre configuration (Administration -> Statuts de demandes)."
text_journal_changed: "%{label} changé de %{old} à %{new}"
text_journal_changed_no_detail: "%{label} mis à jour"
text_journal_set_to: "%{label} mis à %{value}"
text_journal_deleted: "%{label} %{old} supprimé"
text_journal_added: "%{label} %{value} ajouté"
enumeration_system_activity: Activité système
label_board_sticky: Sticky
label_board_locked: Verrouillé
error_unable_delete_issue_status: Impossible de supprimer le statut de demande
error_can_not_delete_custom_field: Impossible de supprimer le champ personnalisé
error_unable_to_connect: Connexion impossible (%{value})
error_can_not_remove_role: Ce rôle est utilisé et ne peut pas être supprimé.
error_can_not_delete_tracker: Ce tracker contient des demandes et ne peut pas être supprimé.
field_principal: Principal
notice_failed_to_save_members: "Erreur lors de la sauvegarde des membres: %{errors}."
text_zoom_out: Zoom arrière
text_zoom_in: Zoom avant
notice_unable_delete_time_entry: Impossible de supprimer le temps passé.
label_overall_spent_time: Temps passé global
field_time_entries: Temps passé
project_module_gantt: Gantt
project_module_calendar: Calendrier
button_edit_associated_wikipage: "Modifier la page wiki associée: %{page_title}"
field_text: Champ texte
label_user_mail_option_only_owner: Seulement pour ce que j'ai créé
setting_default_notification_option: Option de notification par défaut
label_user_mail_option_only_my_events: Seulement pour ce que je surveille
label_user_mail_option_only_assigned: Seulement pour ce qui m'est assigné
label_user_mail_option_none: Aucune notification
field_member_of_group: Groupe de l'assigné
field_assigned_to_role: Rôle de l'assigné
setting_emails_header: En-tête des emails
label_bulk_edit_selected_time_entries: Modifier les temps passés sélectionnés
text_time_entries_destroy_confirmation: "Etes-vous sûr de vouloir supprimer les temps passés sélectionnés ?"
field_scm_path_encoding: Encodage des chemins
text_scm_path_encoding_note: "Défaut : UTF-8"
field_path_to_repository: Chemin du dépôt
field_root_directory: Répertoire racine
field_cvs_module: Module
field_cvsroot: CVSROOT
text_mercurial_repository_note: "Dépôt local (exemples : /hgrepo, c:\\hgrepo)"
text_scm_command: Commande
text_scm_command_version: Version
label_git_report_last_commit: Afficher le dernier commit des fichiers et répertoires
text_scm_config: Vous pouvez configurer les commandes des SCM dans config/configuration.yml. Redémarrer l'application après modification.
text_scm_command_not_available: Ce SCM n'est pas disponible. Vérifier les paramètres dans la section administration.
label_diff: diff
text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
description_query_sort_criteria_direction: Ordre de tri
description_project_scope: Périmètre de recherche
description_filter: Filtre
description_user_mail_notification: Option de notification
description_date_from: Date de début
description_message_content: Contenu du message
description_available_columns: Colonnes disponibles
description_all_columns: Toutes les colonnes
description_date_range_interval: Choisir une période
description_issue_category_reassign: Choisir une catégorie
description_search: Champ de recherche
description_notes: Notes
description_date_range_list: Choisir une période prédéfinie
description_choose_project: Projets
description_date_to: Date de fin
description_project_scope: Périmètre de recherche
description_notes: Notes
description_message_content: Contenu du message
description_query_sort_criteria_attribute: Critère de tri
description_wiki_subpages_reassign: Choisir une nouvelle page parent
description_query_sort_criteria_direction: Ordre de tri
description_user_mail_notification: Option de notification
description_available_columns: Colonnes disponibles
description_selected_columns: Colonnes sélectionnées
label_parent_revision: Parent
label_child_revision: Enfant
error_scm_annotate_big_text_file: Cette entrée ne peut pas être annotée car elle excède la taille maximale.
setting_repositories_encodings: Encodages des fichiers et des dépôts
label_search_for_watchers: Rechercher des observateurs
description_all_columns: Toutes les colonnes
description_issue_category_reassign: Choisir une catégorie
description_wiki_subpages_reassign: Choisir une nouvelle page parent
description_date_range_list: Choisir une période prédéfinie
description_date_range_interval: Choisir une période
description_date_from: Date de début
description_date_to: Date de fin
text_repository_identifier_info: 'Seuls les lettres minuscules (a-z), chiffres, tirets et tirets bas sont autorisés.<br />Un fois sauvegardé, l''identifiant ne pourra plus être modifié.'
text_convert_available: Binaire convert de ImageMagick présent (optionel)

View File

@ -1123,3 +1123,7 @@ gl:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1117,3 +1117,7 @@ he:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1113,3 +1113,7 @@ hr:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1131,3 +1131,7 @@
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1116,3 +1116,7 @@ id:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1111,3 +1111,7 @@ it:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -354,8 +354,8 @@ ja:
setting_attachment_max_size: 添付ファイルサイズの上限
setting_issues_export_limit: エクスポートするチケット数の上限
setting_mail_from: 送信元メールアドレス
setting_bcc_recipients: ブラインドカーボンコピーで受信(bcc)
setting_plain_text_mail: プレインテキストのみ(HTMLなし)
setting_bcc_recipients: 宛先を非表示(bcc)
setting_plain_text_mail: プレインテキスト形式(HTMLなし)
setting_host_name: ホスト名
setting_text_formatting: テキストの書式
setting_cache_formatted_text: 書式化されたテキストをキャッシュする
@ -489,12 +489,12 @@ ja:
label_issue_plural: チケット
label_issue_view_all: すべてのチケットを見る
label_issues_by: "%{value} 別のチケット"
label_issue_added: チケットが追加されました
label_issue_updated: チケットが更新されました
label_issue_added: チケットの追加
label_issue_updated: チケットの更新
label_document: 文書
label_document_new: 新しい文書
label_document_plural: 文書
label_document_added: 文書が追加されました
label_document_added: 文書の追加
label_role: ロール
label_role_plural: ロール
label_role_new: 新しいロール
@ -566,7 +566,7 @@ ja:
label_attachment_new: 新しいファイル
label_attachment_delete: ファイルを削除
label_attachment_plural: ファイル
label_file_added: ファイルが追加されました
label_file_added: ファイルの追加
label_report: レポート
label_report_plural: レポート
label_news: ニュース
@ -574,8 +574,8 @@ ja:
label_news_plural: ニュース
label_news_latest: 最新ニュース
label_news_view_all: すべてのニュースを見る
label_news_added: ニュースが追加されました
label_news_comment_added: ニュースにコメントが追加されました
label_news_added: ニュースの追加
label_news_comment_added: ニュースへのコメント追加
label_settings: 設定
label_overview: 概要
label_version: バージョン
@ -748,7 +748,7 @@ ja:
label_message_plural: メッセージ
label_message_last: 最新のメッセージ
label_message_new: 新しいメッセージ
label_message_posted: メッセージが追加されました
label_message_posted: メッセージの追加
label_reply_plural: 返答
label_send_information: アカウント情報をユーザーに送信
label_year:
@ -809,8 +809,8 @@ ja:
label_ascending: 昇順
label_descending: 降順
label_date_from_to: "%{start}から%{end}まで"
label_wiki_content_added: Wikiページが追加されました
label_wiki_content_updated: Wikiページが更新されました
label_wiki_content_added: Wikiページの追加
label_wiki_content_updated: Wikiページの更新
label_group: グループ
label_group_plural: グループ
label_group_new: 新しいグループ
@ -894,7 +894,7 @@ ja:
field_active: 有効
text_select_mail_notifications: どのメール通知を送信するか、アクションを選択してください。
text_select_mail_notifications: メール通知の送信対象とする操作を選択してください。
text_regexp_info: 例) ^[A-Z0-9]+$
text_min_max_length_info: 0だと無制限になります
text_project_destroy_confirmation: 本当にこのプロジェクトと関連データを削除しますか?
@ -995,9 +995,9 @@ ja:
label_role_anonymous: 匿名ユーザー
label_role_non_member: 非メンバー
label_issue_note_added: 注記が追加されました
label_issue_status_updated: ステータスが更新されました
label_issue_priority_updated: 優先度が更新されました
label_issue_note_added: 注記の追加
label_issue_status_updated: ステータスの更新
label_issue_priority_updated: 優先度の更新
label_issues_visibility_own: 作成者か担当者であるチケット
field_issues_visibility: 表示できるチケット
label_issues_visibility_all: すべてのチケット
@ -1135,5 +1135,8 @@ ja:
label_link_values_to: 値に設定するリンクURL
setting_force_default_language_for_anonymous: 匿名ユーザーに既定の言語を強制
setting_force_default_language_for_loggedin: ログインユーザーに既定の言語を強制
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_custom_field_select_type: カスタムフィールドを追加するオブジェクトを選択してください
label_issue_assigned_to_updated: 担当者の更新
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1131,33 +1131,32 @@ ko:
permission_add_documents: 문서 추가
permission_edit_documents: 문서 편집
permission_delete_documents: 문서 삭제
label_gantt_progress_line: Progress line
label_gantt_progress_line: 진행 선
setting_jsonp_enabled: JSONP 허용
field_inherit_members: 상위 프로젝트로부터 구성원을 상속
field_closed_on: 완료일
field_generate_password: Generate password
field_generate_password: 비밀번호 생성
setting_default_projects_tracker_ids: 새 프로젝트에 기본적으로 추가할 일감 유형
label_total_time: 합계
notice_account_not_activated_yet: You haven't activated your account yet. If you want
to receive a new activation email, please <a href="%{url}">click this link</a>.
notice_account_locked: Your account is locked.
label_hidden: Hidden
label_visibility_private: to me only
label_visibility_roles: to these roles only
label_visibility_public: to any users
field_must_change_passwd: Must change password at next logon
notice_new_password_must_be_different: The new password must be different from the
current password
setting_mail_handler_excluded_filenames: Exclude attachments by name
text_convert_available: ImageMagick convert available (optional)
label_link: Link
label_only: only
label_drop_down_list: drop-down list
label_checkboxes: checkboxes
label_link_values_to: Link values to URL
setting_force_default_language_for_anonymous: Force default language for anonymous
users
setting_force_default_language_for_loggedin: Force default language for logged-in
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
notice_account_not_activated_yet: 계정이 활성화되지 않았습니다. 계정을 활성화하기 위해 메일을 다시 수신하려면 <a href="%{url}">여기를 클릭해 주세요</a>.
notice_account_locked: 계정이 잠겨 있습니다.
label_hidden: 숨김
label_visibility_private: 자신 만
label_visibility_roles: 다음 역할 만
label_visibility_public: 모든 사용자
field_must_change_passwd: 다음 로그온 시 반드시 암호를 변경해야 함
notice_new_password_must_be_different: 새 암호는 현재 암호와 달라야 합니다.
setting_mail_handler_excluded_filenames: 제외할 첨부 파일명
text_convert_available: ImageMagick 변환 사용 가능 (옵션)
label_link: 링크
label_only: 다음의 것만
label_drop_down_list: 드롭다운 목록
label_checkboxes: 체크박스
label_link_values_to: URL 링크 값
setting_force_default_language_for_anonymous: 익명 사용자의 기본 언어 강제
setting_force_default_language_for_loggedin: 로그인 사용자의 기본 언어 강제
label_custom_field_select_type: 사용자 정의 필드에 추가할 대상을 선택해주세요.
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1171,3 +1171,7 @@ lt:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1106,3 +1106,7 @@ lv:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1112,3 +1112,7 @@ mk:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1113,3 +1113,7 @@ mn:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1091,3 +1091,7 @@ nl:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1102,3 +1102,7 @@
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -150,7 +150,7 @@ pl:
# Wiktor Wandachowicz <siryes@gmail.com>, 2010
actionview_instancetag_blank_option: Proszę wybrać
actionview_instancetag_blank_option: Proszę wybierz
actionview_instancetag_blank_option: wybierz
button_activate: Aktywuj
button_add: Dodaj
@ -228,18 +228,18 @@ pl:
field_attr_lastname: Nazwisko atrybut
field_attr_login: Login atrybut
field_attr_mail: E-mail atrybut
field_auth_source: Tryb identyfikacji
field_auth_source: Tryb uwierzytelniania
field_author: Autor
field_base_dn: Base DN
field_category: Kategoria
field_column_names: Nazwy kolumn
field_comments: Komentarz
field_comments_sorting: Pokazuj komentarze
field_created_on: Stworzone
field_created_on: Data utworzenia
field_default_value: Domyślny
field_delay: Opóźnienie
field_description: Opis
field_done_ratio: "% Wykonane"
field_done_ratio: "% Wykonania"
field_downloads: Pobrań
field_due_date: Data oddania
field_effective_date: Data
@ -298,7 +298,7 @@ pl:
field_title: Tytuł
field_tracker: Typ zagadnienia
field_type: Typ
field_updated_on: Zmienione
field_updated_on: Data modyfikacji
field_url: URL
field_user: Użytkownik
field_value: Wartość
@ -337,10 +337,10 @@ pl:
label_attachment_plural: Pliki
label_attribute: Atrybut
label_attribute_plural: Atrybuty
label_auth_source: Tryb identyfikacji
label_auth_source_new: Nowy tryb identyfikacji
label_auth_source_plural: Tryby identyfikacji
label_authentication: Identyfikacja
label_auth_source: Tryb uwierzytelniania
label_auth_source_new: Nowy tryb uwierzytelniania
label_auth_source_plural: Tryby uwierzytelniania
label_authentication: Uwierzytelnianie
label_blocked_by: blokowane przez
label_blocks: blokuje
label_board: Forum
@ -411,7 +411,7 @@ pl:
label_diff_inline: w linii
label_diff_side_by_side: obok siebie
label_disabled: zablokowany
label_display_per_page: "Na stronę: %{value}"
label_display_per_page: "Na stronie: %{value}"
label_document: Dokument
label_document_added: Dodano dokument
label_document_new: Nowy dokument
@ -477,8 +477,8 @@ pl:
label_last_week: ostatni tydzień
label_latest_revision: Najnowsza rewizja
label_latest_revision_plural: Najnowsze rewizje
label_ldap_authentication: Autoryzacja LDAP
label_less_than_ago: dni mniej
label_ldap_authentication: Uwierzytelnianie LDAP
label_less_than_ago: dni temu
label_list: Lista
label_loading: Ładowanie...
label_logged_as: Zalogowany jako
@ -499,7 +499,7 @@ pl:
label_month: Miesiąc
label_months_from: miesiące od
label_more: Więcej
label_more_than_ago: dni więcej
label_more_than_ago: dni od teraz
label_my_account: Moje konto
label_my_page: Moja strona
label_my_projects: Moje projekty
@ -603,7 +603,7 @@ pl:
label_string: Tekst
label_subproject_plural: Podprojekty
label_text: Długi tekst
label_theme: Temat
label_theme: Motyw
label_this_month: ten miesiąc
label_this_week: ten tydzień
label_this_year: ten rok
@ -655,7 +655,7 @@ pl:
notice_account_unknown_email: Nieznany użytkownik.
notice_account_updated: Konto prawidłowo zaktualizowane.
notice_account_wrong_password: Złe hasło
notice_can_t_change_password: To konto ma zewnętrzne źródło identyfikacji. Nie możesz zmienić hasła.
notice_can_t_change_password: To konto ma zewnętrzne źródło uwierzytelniania. Nie możesz zmienić hasła.
notice_default_data_loaded: Domyślna konfiguracja została pomyślnie załadowana.
notice_email_error: "Wystąpił błąd w trakcie wysyłania e-maila (%{value})"
notice_email_sent: "E-mail został wysłany do %{value}"
@ -666,9 +666,9 @@ pl:
notice_no_issue_selected: "Nie wybrano zagadnienia! Zaznacz zagadnienie, które chcesz edytować."
notice_not_authorized: Nie posiadasz autoryzacji do oglądania tej strony.
notice_successful_connection: Udane nawiązanie połączenia.
notice_successful_create: Utworzenie zakończone sukcesem.
notice_successful_delete: Usunięcie zakończone sukcesem.
notice_successful_update: Uaktualnienie zakończone sukcesem.
notice_successful_create: Utworzenie zakończone pomyślnie.
notice_successful_delete: Usunięcie zakończone pomyślnie.
notice_successful_update: Uaktualnienie zakończone pomyślnie.
notice_unable_delete_version: Nie można usunąć wersji
permission_add_issue_notes: Dodawanie notatek
permission_add_issue_watchers: Dodawanie obserwatorów
@ -732,7 +732,7 @@ pl:
setting_autofetch_changesets: Automatyczne pobieranie zmian
setting_autologin: Automatyczne logowanie
setting_bcc_recipients: Odbiorcy kopii tajnej (kt/bcc)
setting_commit_fix_keywords: Słowa zmieniające status
setting_commit_fix_keywords: Słowo zmieniające status
setting_commit_ref_keywords: Słowa tworzące powiązania
setting_cross_project_issue_relations: Zezwól na powiązania zagadnień między projektami
setting_date_format: Format daty
@ -758,7 +758,7 @@ pl:
setting_sys_api_enabled: Włączenie WS do zarządzania repozytorium
setting_text_formatting: Formatowanie tekstu
setting_time_format: Format czasu
setting_user_format: Własny format wyświetlania
setting_user_format: Format wyświetlania użytkownika
setting_welcome_text: Tekst powitalny
setting_wiki_compression: Kompresja historii Wiki
status_active: aktywny
@ -782,7 +782,7 @@ pl:
text_issue_category_reassign_to: Przydziel zagadnienie do tej kategorii
text_issue_updated: "Zagadnienie %{id} zostało zaktualizowane (przez %{author})."
text_issues_destroy_confirmation: 'Czy jesteś pewien, że chcesz usunąć wskazane zagadnienia?'
text_issues_ref_in_commit_messages: Odwołania do zagadnień w komentarzach zatwierdzeń
text_issues_ref_in_commit_messages: Odwołania do zagadnień Redmine w komentarzach w repozytorium
text_length_between: "Długość pomiędzy %{min} i %{max} znaków."
text_load_default_configuration: Załaduj domyślną konfigurację
text_min_max_length_info: 0 oznacza brak restrykcji
@ -888,7 +888,7 @@ pl:
label_version_sharing_system: Ze wszystkimi projektami
label_version_sharing_tree: Z drzewem projektów
notice_api_access_key_reseted: Twój klucz dostępu do API został zresetowany.
notice_issue_done_ratios_updated: Uaktualnienie % wykonania zakończone sukcesem.
notice_issue_done_ratios_updated: Uaktualnienie % wykonania zakończone pomyślnie.
permission_add_subprojects: Tworzenie podprojektów
permission_delete_issue_watchers: Usuń obserwatorów
permission_view_issues: Przeglądanie zagadnień
@ -935,45 +935,45 @@ pl:
project_module_calendar: Kalendarz
button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
field_text: Text field
label_user_mail_option_only_owner: Only for things I am the owner of
setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: "Tylko to, co obserwuję lub w czym biorę udział"
field_member_of_group: Assignee's group
field_assigned_to_role: Assignee's role
label_user_mail_option_only_owner: Tylko to, czego jestem właścicielem (autorem)
setting_default_notification_option: Domyślna opcja powiadomień
label_user_mail_option_only_my_events: "Tylko to, co obserwuję lub w czym biorę udział"
label_user_mail_option_only_assigned: "Tylko to, do czego jestem przypisany"
label_user_mail_option_none: "Brak powiadomień"
field_member_of_group: Grupa osoby przypisanej
field_assigned_to_role: Rola osoby przypisanej
notice_not_authorized_archived_project: The project you're trying to access has been archived.
label_principal_search: "Szukaj użytkownika lub grupy:"
label_user_search: "Szukaj użytkownika:"
field_visible: Visible
setting_commit_logtime_activity_id: Activity for logged time
field_visible: Widoczne
setting_commit_logtime_activity_id: Aktywność dla śledzonego czasu
text_time_logged_by_changeset: Applied in changeset %{value}.
setting_commit_logtime_enabled: Enable time logging
setting_commit_logtime_enabled: Włącz śledzenie czasu
notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
setting_gantt_items_limit: Maksymalna liczba elementów wyświetlanych na diagramie Gantta
field_warn_on_leaving_unsaved: Ostrzegaj mnie, gdy opuszczam stronę z niezapisanym tekstem
text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
label_my_queries: My custom queries
label_my_queries: Moje kwerendy
text_journal_changed_no_detail: "%{label} updated"
label_news_comment_added: Comment added to a news
button_expand_all: Expand all
button_collapse_all: Collapse all
label_news_comment_added: Dodano komentarz do komunikatu
button_expand_all: Rozwiń wszystkie
button_collapse_all: Zwiń wszystkie
label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
label_bulk_edit_selected_time_entries: Bulk edit selected time entries
text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
label_role_anonymous: Anonymous
label_role_non_member: Non member
label_issue_note_added: Note added
label_issue_status_updated: Status updated
label_issue_priority_updated: Priority updated
label_issues_visibility_own: Issues created by or assigned to the user
field_issues_visibility: Issues visibility
label_issues_visibility_all: All issues
permission_set_own_issues_private: Set own issues public or private
field_is_private: Private
permission_set_issues_private: Set issues public or private
label_issues_visibility_public: All non private issues
label_role_anonymous: Anonimowy
label_role_non_member: Bez roli
label_issue_note_added: Dodano notatkę
label_issue_status_updated: Uaktualniono status
label_issue_priority_updated: Uaktualniono priorytet
label_issues_visibility_own: Utworzone lub przypisane do użytkownika
field_issues_visibility: Widoczne zagadnienia
label_issues_visibility_all: Wszystkie
permission_set_own_issues_private: Ustawianie własnych zagadnień jako prywatne/publiczne
field_is_private: Prywatne
permission_set_issues_private: Ustawianie zagadnień jako prywatne/publiczne
label_issues_visibility_public: Wszystkie nie prywatne
text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
field_commit_logs_encoding: Kodowanie komentarzy zatwierdzeń
field_scm_path_encoding: Path encoding
@ -983,12 +983,12 @@ pl:
field_cvs_module: Module
field_cvsroot: CVSROOT
text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
text_scm_command: Command
text_scm_command_version: Version
text_scm_command: Polecenie
text_scm_command_version: Wersja
label_git_report_last_commit: Report last commit for files and directories
notice_issue_successful_create: Issue %{id} created.
label_between: between
setting_issue_group_assignment: Allow issue assignment to groups
label_between: pomiędzy
setting_issue_group_assignment: Zezwól przypisywać zagadnienia do grup
label_diff: diff
text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
description_query_sort_criteria_direction: Sort direction
@ -997,7 +997,7 @@ pl:
description_user_mail_notification: Mail notification settings
description_date_from: Enter start date
description_message_content: Message content
description_available_columns: Available Columns
description_available_columns: Dostępne kolumny
description_date_range_interval: Choose range by selecting start and end date
description_issue_category_reassign: Choose issue category
description_search: Searchfield
@ -1007,13 +1007,13 @@ pl:
description_date_to: Enter end date
description_query_sort_criteria_attribute: Sort attribute
description_wiki_subpages_reassign: Choose new parent page
description_selected_columns: Selected Columns
description_selected_columns: Wybrane kolumny
label_parent_revision: Parent
label_child_revision: Child
error_scm_annotate_big_text_file: The entry cannot be annotated, as it exceeds the maximum text file size.
setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
setting_default_issue_start_date_to_creation_date: Użyj bieżącej daty jako daty rozpoczęcia nowych zagadnień
button_edit_section: Edit this section
setting_repositories_encodings: Attachments and repositories encodings
setting_repositories_encodings: Kodowanie znaków załączników i repozytoriów
description_all_columns: All Columns
button_export: Export
label_export_options: "%{export_format} export options"
@ -1030,107 +1030,109 @@ pl:
label_completed_versions: Completed versions
text_project_identifier_info: 'Dozwolone małe litery (a-z), liczby i myślniki.<br />Raz zapisany, identyfikator nie może być zmieniony.'
field_multiple: Multiple values
setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed
setting_commit_cross_project_ref: Zezwól na odwołania do innych projektów i zamykanie zagadnień innych projektów
text_issue_conflict_resolution_add_notes: Add my notes and discard my other changes
text_issue_conflict_resolution_overwrite: Apply my changes anyway (previous notes will be kept but some changes may be overwritten)
notice_issue_update_conflict: The issue has been updated by an other user while you were editing it.
text_issue_conflict_resolution_cancel: Discard all my changes and redisplay %{link}
permission_manage_related_issues: Manage related issues
permission_manage_related_issues: Zarządzanie powiązanymi zagadnieniami
field_auth_source_ldap_filter: LDAP filter
label_search_for_watchers: Search for watchers to add
notice_account_deleted: Your account has been permanently deleted.
setting_unsubscribe: Allow users to delete their own account
button_delete_my_account: Delete my account
label_search_for_watchers: Wyszukaj obserwatorów do dodania
notice_account_deleted: Twoje konto zostało trwale usunięte.
setting_unsubscribe: Zezwól użytkownikom usuwać swoje konta
button_delete_my_account: Usuń moje konto
text_account_destroy_confirmation: |-
Are you sure you want to proceed?
Your account will be permanently deleted, with no way to reactivate it.
error_session_expired: Your session has expired. Please login again.
text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours."
setting_session_lifetime: Session maximum lifetime
setting_session_timeout: Session inactivity timeout
label_session_expiration: Session expiration
permission_close_project: Close / reopen the project
label_show_closed_projects: View closed projects
button_close: Close
button_reopen: Reopen
project_status_active: active
project_status_closed: closed
project_status_archived: archived
text_project_closed: This project is closed and read-only.
notice_user_successful_create: User %{id} created.
field_core_fields: Standard fields
field_timeout: Timeout (in seconds)
setting_thumbnails_enabled: Display attachment thumbnails
setting_thumbnails_size: Thumbnails size (in pixels)
label_status_transitions: Status transitions
label_fields_permissions: Fields permissions
label_readonly: Read-only
label_required: Required
Czy jesteś pewien?
Twoje konto zostanie trwale usunięte, bez możliwości przywrócenia go.
error_session_expired: Twoja sesja wygasła. Zaloguj się ponownie.
text_session_expiration_settings: "Uwaga: zmiana tych ustawień może spowodować przeterminowanie sesji obecnie zalogowanych użytkowników, w tym twojej."
setting_session_lifetime: Maksymalny czas życia sesji
setting_session_timeout: Maksymalny czas życia nieaktywnej sesji
label_session_expiration: Przeterminowywanie sesji
permission_close_project: Zamykanie / otwieranie projektów
label_show_closed_projects: Przeglądanie zamkniętych projektów
button_close: Zamknij projekt
button_reopen: Otwórz projekt
project_status_active: aktywny
project_status_closed: zamknięty
project_status_archived: zarchiwizowany
text_project_closed: Ten projekt jest zamknięty i dostępny tylko do odczytu.
notice_user_successful_create: Utworzono użytkownika %{id}.
field_core_fields: Pola standardowe
field_timeout: Limit czasu (w sekundach)
setting_thumbnails_enabled: Wyświetlaj miniatury załączników
setting_thumbnails_size: Rozmiar minuatury (w pikselach)
label_status_transitions: Przejścia między statusami
label_fields_permissions: Uprawnienia do pól
label_readonly: Tylko do odczytu
label_required: Wymagane
text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
field_board_parent: Parent forum
label_attribute_of_project: Project's %{name}
label_attribute_of_author: Author's %{name}
label_attribute_of_assigned_to: Assignee's %{name}
label_attribute_of_fixed_version: Target version's %{name}
label_copy_subtasks: Copy subtasks
label_copied_to: copied to
label_copied_from: copied from
label_any_issues_in_project: any issues in project
label_any_issues_not_in_project: any issues not in project
field_private_notes: Private notes
permission_view_private_notes: View private notes
permission_set_notes_private: Set notes as private
label_no_issues_in_project: no issues in project
label_copy_subtasks: Kopiuj podzagadnienia
label_copied_to: skopiowane do
label_copied_from: skopiowane z
label_any_issues_in_project: dowolne zagadnienie w projekcie
label_any_issues_not_in_project: dowolne zagadnienie w innym projekcie
field_private_notes: Prywatne notatki
permission_view_private_notes: Podgląd prywatnych notatek
permission_set_notes_private: Ustawianie notatek jako prywatnych
label_no_issues_in_project: brak zagadnień w projekcie
label_any: wszystko
label_last_n_weeks: last %{count} weeks
setting_cross_project_subtasks: Allow cross-project subtasks
label_last_n_weeks: ostatnie %{count} tygodnie
setting_cross_project_subtasks: Powiązania zagadnień między projektami
label_cross_project_descendants: Z podprojektami
label_cross_project_tree: Z drzewem projektów
label_cross_project_hierarchy: Z hierarchią projektów
label_cross_project_system: Ze wszystkimi projektami
button_hide: Hide
setting_non_working_week_days: Non-working days
label_in_the_next_days: in the next
label_in_the_past_days: in the past
button_hide: Ukryj
setting_non_working_week_days: Dni nie-robocze
label_in_the_next_days: w ciągu następnych dni
label_in_the_past_days: w ciągu poprzednich dni
label_attribute_of_user: User's %{name}
text_turning_multiple_off: If you disable multiple values, multiple values will be
removed in order to preserve only one value per item.
label_attribute_of_issue: Issue's %{name}
permission_add_documents: Add documents
permission_edit_documents: Edit documents
permission_delete_documents: Delete documents
label_gantt_progress_line: Progress line
setting_jsonp_enabled: Enable JSONP support
field_inherit_members: Inherit members
field_closed_on: Closed
field_generate_password: Generate password
setting_default_projects_tracker_ids: Default trackers for new projects
permission_add_documents: Dodawanie dokumentów
permission_edit_documents: Edycja dokumentów
permission_delete_documents: Usuwanie dokumentów
label_gantt_progress_line: Linia postępu
setting_jsonp_enabled: Uaktywnij wsparcie dla JSONP
field_inherit_members: Dziedziczenie członków
field_closed_on: Data zamknięcia
field_generate_password: Wygeneruj hasło
setting_default_projects_tracker_ids: Domyślne typy zagadnień dla nowych projektów
label_total_time: Ogółem
text_scm_config: You can configure your SCM commands in config/configuration.yml. Please restart the application after editing it.
text_scm_command_not_available: SCM command is not available. Please check settings on the administration panel.
setting_emails_header: Email header
notice_account_not_activated_yet: You haven't activated your account yet. If you want
to receive a new activation email, please <a href="%{url}">click this link</a>.
notice_account_locked: Your account is locked.
notice_account_register_done: Account was successfully created. An email containing
the instructions to activate your account was sent to %{email}.
text_scm_config: Możesz skonfigurować polecenia SCM w pliku config/configuration.yml. Zrestartuj aplikację po wykonaniu zmian.
text_scm_command_not_available: Polecenie SCM nie jest dostępne. Proszę sprawdzić ustawienia w panelu administracyjnym.
setting_emails_header: Nagłówek e-maili
notice_account_not_activated_yet: Jeszcze nie aktywowałeś swojego konta. Jeśli chcesz
otrzymać nowy e-mail aktywanyjny, <a href="%{url}">kliknij tutaj</a>.
notice_account_locked: Twoje konto jest zablokowane.
notice_account_register_done: Konto zostało pomyślnie utworzone. E-mail zawierający
instrukcję aktywacji konta został wysłany na adres %{email}.
label_hidden: Hidden
label_visibility_private: to me only
label_visibility_roles: to these roles only
label_visibility_public: to any users
field_must_change_passwd: Must change password at next logon
label_visibility_private: tylko dla mnie
label_visibility_roles: tylko dla ról
label_visibility_public: dla wszystkich
field_must_change_passwd: Musi zmienić hasło przy następnym logowaniu
notice_new_password_must_be_different: The new password must be different from the
current password
setting_mail_handler_excluded_filenames: Exclude attachments by name
text_convert_available: ImageMagick convert available (optional)
setting_mail_handler_excluded_filenames: Wyklucz załączniki wg nazwy
text_convert_available: Konwersja przez ImageMagick dostępna (optional)
label_link: Link
label_only: only
label_drop_down_list: drop-down list
label_checkboxes: checkboxes
label_link_values_to: Link values to URL
setting_force_default_language_for_anonymous: Force default language for anonymous
users
setting_force_default_language_for_loggedin: Force default language for logged-in
users
setting_force_default_language_for_anonymous: Wymuś domyślny język dla anonimowych użytkowników
setting_force_default_language_for_loggedin: Wymuś domyślny język dla zalogowanych użytkowników
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Uaktualniono osobę przypisaną
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1131,3 +1131,7 @@ pt-BR:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1118,3 +1118,7 @@ pt:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1107,3 +1107,7 @@ ro:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1217,5 +1217,8 @@ ru:
label_link_values_to: Значения ссылки для URL
setting_force_default_language_for_anonymous: Не определять язык для анонимных пользователей
setting_force_default_language_for_loggedin: Не определять язык для зарегистрированных пользователей
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_custom_field_select_type: Выберите тип объекта для которого будет создано настраиваемое поле
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1102,3 +1102,7 @@ sk:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1112,3 +1112,7 @@ sl:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1108,3 +1108,7 @@ sq:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1114,3 +1114,7 @@ sr-YU:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1113,3 +1113,7 @@ sr:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1150,3 +1150,7 @@ sv:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1109,3 +1109,7 @@ th:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -357,7 +357,7 @@ tr:
label_tracker_new: Yeni iş tipi
label_workflow: İş akışı
label_issue_status: İş durumu
label_issue_status_plural: İş durumuları
label_issue_status_plural: İş durumları
label_issue_status_new: Yeni durum
label_issue_category: İş kategorisi
label_issue_category_plural: İş kategorileri
@ -1121,3 +1121,7 @@ tr:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1107,3 +1107,7 @@ uk:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -1165,3 +1165,7 @@ vi:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -278,7 +278,7 @@
error_can_not_delete_custom_field: 無法刪除自訂欄位
error_can_not_delete_tracker: "此追蹤標籤已包含問題,無法被刪除。"
error_can_not_remove_role: "此角色已被使用,無法將其刪除。"
error_can_not_reopen_issue_on_closed_version: '派給「已結束」版本的問題,無法再將其狀態變更為「進行中」'
error_can_not_reopen_issue_on_closed_version: '派給「已結束」版本的問題,無法再將其狀態變更為「進行中」'
error_can_not_archive_project: 此專案無法被封存
error_issue_done_ratios_not_updated: "問題完成百分比未更新。"
error_workflow_copy_source: '請選擇一個來源問題追蹤標籤或角色'
@ -298,7 +298,7 @@
mail_subject_account_activation_request: Redmine 帳號啟用需求通知
mail_body_account_activation_request: "有位新用戶 (%{value}) 已經完成註冊,正等候您的審核:"
mail_subject_reminder: "您有 %{count} 個問題即將到期 (%{days})"
mail_body_reminder: "%{count} 個派給您的問題,將於 %{days} 天之內到期:"
mail_body_reminder: "%{count} 個派給您的問題,將於 %{days} 天之內到期:"
mail_subject_wiki_content_added: "'%{id}' wiki 頁面已被新增"
mail_body_wiki_content_added: "此 '%{id}' wiki 頁面已被 %{author} 新增。"
mail_subject_wiki_content_updated: "'%{id}' wiki 頁面已被更新"
@ -337,7 +337,7 @@
field_tracker: 追蹤標籤
field_subject: 主旨
field_due_date: 完成日期
field_assigned_to: 分派給
field_assigned_to: 被分派者
field_priority: 優先權
field_fixed_version: 版本
field_user: 用戶
@ -399,8 +399,8 @@
field_group_by: 結果分組方式
field_sharing: 共用
field_parent_issue: 父問題
field_member_of_group: "被派者的群組"
field_assigned_to_role: "被派者的角色"
field_member_of_group: "被派者的群組"
field_assigned_to_role: "被派者的角色"
field_text: 內容文字
field_visible: 可被看見
field_warn_on_leaving_unsaved: "提醒我將要離開的頁面中尚有未儲存的資料"
@ -469,7 +469,7 @@
setting_repository_log_display_limit: 修訂版顯示數目之最大值
setting_openid: 允許使用 OpenID 登入與註冊
setting_password_min_length: 密碼最小長度
setting_new_project_user_role_id: 管理者以外之用戶建立新專案時,將被派的角色
setting_new_project_user_role_id: 管理者以外之用戶建立新專案時,將被派的角色
setting_default_projects_modules: 新專案預設啟用的模組
setting_issue_done_ratio: 計算問題完成百分比之方式
setting_issue_done_ratio_issue_field: 依據問題完成百分比欄位
@ -481,7 +481,7 @@
setting_commit_logtime_enabled: 啟用認可中的時間記錄
setting_commit_logtime_activity_id: 時間記錄對應的活動
setting_gantt_items_limit: 甘特圖中項目顯示數量的最大值
setting_issue_group_assignment: 允許問題被派至群組
setting_issue_group_assignment: 允許問題被派至群組
setting_default_issue_start_date_to_creation_date: 設定新問題的起始日期為今天的日期
setting_commit_cross_project_ref: 允許關聯並修正其他專案的問題
setting_unsubscribe: 允許用戶取消註冊(刪除帳戶)
@ -593,6 +593,7 @@
label_issue_updated: 問題已更新
label_issue_note_added: 筆記已新增
label_issue_status_updated: 狀態已更新
label_issue_assigned_to_updated: 被分派者已更新
label_issue_priority_updated: 優先權已更新
label_document: 文件
label_document_new: 建立新文件
@ -901,7 +902,7 @@
label_user_mail_option_selected: "只提醒我所選擇專案中的事件..."
label_user_mail_option_none: "取消提醒"
label_user_mail_option_only_my_events: "只提醒我觀察中或參與中的事物"
label_user_mail_option_only_assigned: "只提醒我被派的事物"
label_user_mail_option_only_assigned: "只提醒我被派的事物"
label_user_mail_option_only_owner: "只提醒我作為擁有者的事物"
label_user_mail_no_self_notified: "不提醒我自己所做的變更"
label_registration_activation_by_email: 透過電子郵件啟用帳戶
@ -913,7 +914,7 @@
label_general: 一般
label_more: 更多 »
label_scm: 版本控管
label_plugins: 附加元件
label_plugins: 外掛程式
label_ldap_authentication: LDAP 認證
label_downloads_abbr: 下載
label_optional_description: 額外的說明
@ -956,10 +957,10 @@
label_principal_search: "搜尋用戶或群組:"
label_user_search: "搜尋用戶:"
label_additional_workflow_transitions_for_author: 用戶為作者時額外允許的流程轉換
label_additional_workflow_transitions_for_assignee: 用戶為被指定者時額外允許的流程轉換
label_additional_workflow_transitions_for_assignee: 用戶為被分派者時額外允許的流程轉換
label_issues_visibility_all: 所有問題
label_issues_visibility_public: 所有非私人問題
label_issues_visibility_own: 使用者所建立的或被派的問題
label_issues_visibility_own: 使用者所建立的或被派的問題
label_git_report_last_commit: 報告最後認可的文件和目錄
label_parent_revision: 父項
label_child_revision: 子項
@ -979,7 +980,7 @@
label_attribute_of_project: "專案是 %{name}"
label_attribute_of_issue: "問題是 %{name}"
label_attribute_of_author: "作者是 %{name}"
label_attribute_of_assigned_to: "被派者是 %{name}"
label_attribute_of_assigned_to: "被派者是 %{name}"
label_attribute_of_user: "用戶是 %{name}"
label_attribute_of_fixed_version: "版本是 %{name}"
label_cross_project_descendants: 與子專案共用
@ -996,6 +997,9 @@
label_checkboxes: 核取方塊
label_link_values_to: 連結欄位值至此網址
label_custom_field_select_type: 請選擇連結此自訂欄位的物件類型
label_check_for_updates: 檢查更新
label_latest_compatible_version: 最新的相容版本
label_unknown_plugin: 無法辨識的外掛程式
button_login: 登入
button_submit: 送出
@ -1091,10 +1095,10 @@
text_issue_added: "問題 %{id} 已被 %{author} 通報。"
text_issue_updated: "問題 %{id} 已被 %{author} 更新。"
text_wiki_destroy_confirmation: 您確定要刪除這個 wiki 和其中的所有內容?
text_issue_category_destroy_question: "有 (%{count}) 個問題被派到此分類. 請選擇您想要的動作?"
text_issue_category_destroy_question: "有 (%{count}) 個問題被派到此分類. 請選擇您想要的動作?"
text_issue_category_destroy_assignments: 移除這些問題的分類
text_issue_category_reassign_to: 重新派這些問題至其它分類
text_user_mail_option: "對於那些未被選擇的專案,將只會接收到您正在觀察中,或是參與中的問題通知。(「參與中的問題」包含您建立的或是派給您的問題)"
text_issue_category_reassign_to: 重新派這些問題至其它分類
text_user_mail_option: "對於那些未被選擇的專案,將只會接收到您正在觀察中,或是參與中的問題通知。(「參與中的問題」包含您建立的或是派給您的問題)"
text_no_configuration_data: "角色、追蹤標籤、問題狀態與流程尚未被設定完成。\n強烈建議您先載入預設的組態。將預設組態載入之後您可再變更其中之值。"
text_load_default_configuration: 載入預設組態
text_status_changed_by_changeset: "已套用至變更集 %{value}."
@ -1105,7 +1109,7 @@
text_select_project_modules: '選擇此專案可使用之模組:'
text_default_administrator_account_changed: 已變更預設管理員帳號內容
text_file_repository_writable: 可寫入附加檔案目錄
text_plugin_assets_writable: 可寫入附加元件目錄
text_plugin_assets_writable: 可寫入外掛程式目錄
text_rmagick_available: 可使用 RMagick (選配)
text_convert_available: 可使用 ImageMagick 轉換圖片格式 (選配)
text_destroy_time_entries_question: 您即將刪除的問題已報工 %{hours} 小時. 您的選擇是?

View File

@ -1113,3 +1113,7 @@ zh:
users
label_custom_field_select_type: Select the type of object to which the custom field
is to be attached
label_issue_assigned_to_updated: Assignee updated
label_check_for_updates: Check for updates
label_latest_compatible_version: Latest compatible version
label_unknown_plugin: Unknown plugin

View File

@ -0,0 +1,12 @@
class ChangeChangesetsCommentsLimit < ActiveRecord::Migration
def up
if ActiveRecord::Base.connection.adapter_name =~ /mysql/i
max_size = 16.megabytes
change_column :changesets, :comments, :text, :limit => max_size
end
end
def down
# no-op
end
end

View File

@ -4,6 +4,83 @@ Redmine - project management software
Copyright (C) 2006-2014 Jean-Philippe Lang
http://www.redmine.org/
== 2014-03-29 v2.5.1
* Defect #14298: Error generated on 'search for watchers to add' after clicking add without selected users
* Defect #16236: Right-aligned table of contents (TOC) not working with markdown
* Defect #16255: Internal Error for specific version of non-existent wiki page
* Defect #16259: Changing Tracker value on new issue form makes hidden fields appearing after hitting F5
* Defect #16321: Custom Fields with "Link values to URL" set are displayed as escaped html in email
* Defect #16338: Can't choose an issue of a different project when updating time entries
* Defect #16353: Regexp bug in JournalsController regexp handling when quoting existing journal entries
* Feature #16326: Custom queries, buttons to move column to top and bottom
* Patch #16291: Japanese translation update
* Patch #16319: Random crash when using custom fields
* Patch #16320: Turkish typo fix
* Patch #16334: Korean Translation
* Patch #16336: Russian translation
* Patch #16356: Spanish Translation: label_custom_field_select_type
* Patch #16368: Polish translation update
* Patch #16381: Extract code to render project context links to helper
* Patch #16453: Czech localisation
* Defect #16466: Fixed back url verification
== 2014-03-02 v2.5.0
* Defect #3163: Large inline images overflow
* Defect #13385: Searchable checkbox displayed on edit form for not-searchable custom field formats.
* Defect #13396: Updating an issue with user or list format custom field, currently having value that is locked or removed, clears that field
* Defect #14361: Mercurial commit ids are short (12 digits) on database
* Defect #15377: bundle install --without development test fails
* Defect #15381: Error pages improvement
* Defect #15485: HTML 5 validation multiple ids
* Defect #15551: Validating a Setting with invalid name triggers an error
* Defect #15552: Preferences are not preserved after adding user with validation error
* Defect #15704: Journal for relation should store relation type instead of i18n key
* Defect #15709: TimeEntry custom_values are not deleted from the database when destroying the associated project
* Defect #15831: Successful update notice for workflows
* Defect #15848: REST API: Cannot retrieve memberships of closed projects
* Defect #15929: REST API: Integer custom field validation fails when using non-string values
* Defect #15947: Deadlock when delete issues in same time on multiple sessions
* Defect #15983: Project.activities returns different types depending on context
* Defect #16077: Table of contents macro conflicts with collapse macro
* Defect #16091: Export CSV with many custom field runs many queries
* Defect #16107: ApplicationController mishandles non-Basic authentication information, causing an internal error
* Defect #16143: Can't insert too long comment field from repository (MySQL)
* Feature #1179: Optionally allow Text and Long Text custom fields support wiki formatting
* Feature #1358: Link_to for Custom Field
* Feature #2083: CustomField of type "external-link-to" with configurable URL prefix
* Feature #2549: Enable the watching of news
* Feature #2691: Option to disable automated language-guessing based on HTTP_ACCEPT_LANGUAGE HTTP-header
* Feature #8152: Render Version and User custom fields as links
* Feature #8562: Watchers list too big in new issue form
* Feature #8572: Configuration of which versions (by version-status) are shown in version-format custom fields
* Feature #8842: REST API: Filter issues created/updated before or after specific timestamp
* Feature #13134: Focus first text field automatically
* Feature #14309: Add favicon to Atom feeds
* Feature #15275: Improve usage of label "button_update"
* Feature #15362: Wrap filters, options and buttons with extra div on the issue list
* Feature #15520: Markdown formatting
* Feature #15699: Description for custom fields
* Feature #15701: Add project identifier substitution option to the URL-pattern property of link format custom fields
* Feature #15790: Use the mime-types gem to get mime type for unknown extension
* Feature #15815: REST API : Add project status in API response
* Feature #15926: Redirect to back_url or referer when clicking "Sign in" while already logged-in
* Patch #12753: Update config.i18n.load_path for plugin-supplied locales
* Patch #13774: Show warning if CSV-Export exceeds limit
* Patch #14766: Better block detection on my page
* Patch #15403: Czech "message" and "changeset" translation change
* Patch #15420: Don't create duplicate wikis in tests
* Patch #15689: Make favicon themeable
* Patch #15785: Support more character encodings in incoming emails
== 2014-03-02 v2.4.4
* Defect #16081: Export CSV - Custom field true/false not using translation
* Defect #16161: Parent task search and datepicker not available after changing status
* Defect #16169: Wrong validation when updating integer custom field with spaces
* Defect #16177: Mercurial 2.9 compatibility
== 2014-02-08 v2.4.3
* Defect #13544: Commit reference: autogenerated issue note has wrong commit link syntax in multi-repo or cross-project context
@ -16,6 +93,11 @@ http://www.redmine.org/
* Defect #16038: Issue#css_classes corrupts user.groups association cache
* Patch #15960: pt-BR translation for 2.4-stable
Additional note:
#15781 was forgotten to merge to v2.4.3.
It is in v2.5.0.
== 2013-12-23 v2.4.2
* Defect #15398: HTML 5 invalid <center> tag
@ -1359,7 +1441,7 @@ http://www.redmine.org/
* #819: Add a body ID and class to all pages
* #871: Commit new CSS styles!
* #3301: Add favicon to base layout
* #4656: On Issue#show page, clicking on “Add related issueâ€<C3A2> should focus on the input
* #4656: On Issue#show page, clicking on "Add related issue" should focus on the input
* #4896: Project identifier should be a limited field
* #5084: Filter all isssues by projects
* #5477: Replace Test::Unit::TestCase with ActiveSupport::TestCase
@ -2368,7 +2450,7 @@ http://www.redmine.org/
* Search engines now supports pagination. Results are sorted in reverse chronological order
* Added "Estimated hours" attribute on issues
* A category with assigned issue can now be deleted. 2 options are proposed: remove assignments or reassign issues to another category
* Forum notifications are now also sent to the authors of the thread, even if they don�t watch the board
* Forum notifications are now also sent to the authors of the thread, even if they don't watch the board
* Added an application setting to specify the application protocol (http or https) used to generate urls in emails
* Gantt chart: now starts at the current month by default
* Gantt chart: month count and zoom factor are automatically saved as user preferences
@ -2376,7 +2458,7 @@ http://www.redmine.org/
* Added wiki index by date
* Added preview on add/edit issue form
* Emails footer can now be customized from the admin interface (Admin -> Email notifications)
* Default encodings for repository files can now be set in application settings (used to convert files content and diff to UTF-8 so that they�re properly displayed)
* Default encodings for repository files can now be set in application settings (used to convert files content and diff to UTF-8 so that they're properly displayed)
* Calendar: first day of week can now be set in lang files
* Automatic closing of duplicate issues
* Added a cross-project issue list
@ -2388,7 +2470,7 @@ http://www.redmine.org/
* Added some accesskeys
* Added "Float" as a custom field format
* Added basic Theme support
* Added the ability to set the �done ratio� of issues fixed by commit (Nikolay Solakov)
* Added the ability to set the "done ratio" of issues fixed by commit (Nikolay Solakov)
* Added custom fields in issue related mail notifications
* Email notifications are now sent in plain text and html
* Gantt chart can now be exported to a graphic file (png). This functionality is only available if RMagick is installed.
@ -2421,7 +2503,7 @@ http://www.redmine.org/
* Added Korean translation (Choi Jong Yoon)
* Fixed: the link to delete issue relations is displayed even if the user is not authorized to delete relations
* Performance improvement on calendar and gantt
* Fixed: wiki preview doesn�t work on long entries
* Fixed: wiki preview doesn't work on long entries
* Fixed: queries with multiple custom fields return no result
* Fixed: Can not authenticate user against LDAP if its DN contains non-ascii characters
* Fixed: URL with ~ broken in wiki formatting
@ -2432,7 +2514,7 @@ http://www.redmine.org/
* per project forums added
* added the ability to archive projects
* added �Watch� functionality on issues. It allows users to receive notifications about issue changes
* added "Watch" functionality on issues. It allows users to receive notifications about issue changes
* custom fields for issues can now be used as filters on issue list
* added per user custom queries
* commit messages are now scanned for referenced or fixed issue IDs (keywords defined in Admin -> Settings)
@ -2473,7 +2555,7 @@ http://www.redmine.org/
* added swedish translation (Thomas Habets)
* italian translation update (Alessio Spadaro)
* japanese translation update (Satoru Kurashiki)
* fixed: error on history atom feed when there�s no notes on an issue change
* fixed: error on history atom feed when there's no notes on an issue change
* fixed: error in journalizing an issue with longtext custom fields (Postgresql)
* fixed: creation of Oracle schema
* fixed: last day of the month not included in project activity

Some files were not shown because too many files have changed in this diff Show More