Compare commits

...

1189 Commits
1.4.1 ... 2.2.2

Author SHA1 Message Date
Jean-Philippe Lang
03f6e25ca3 tagged version 2.2.2
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/tags/2.2.2@11241 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-20 19:05:40 +00:00
Jean-Philippe Lang
56b12b289f Merged r11239 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11240 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-20 18:24:43 +00:00
Jean-Philippe Lang
c99eef1aff Merged r11228 from trunk (#12851).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11236 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-20 17:09:36 +00:00
Jean-Philippe Lang
ed891e2733 Merged r11227 from trunk (#9842).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11235 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-20 17:06:46 +00:00
Jean-Philippe Lang
4620b8b8db Backported r11233 from trunk (#12833).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11234 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-20 17:03:40 +00:00
Jean-Philippe Lang
98eb2edd25 Merged r11225 from trunk (#12838).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11232 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-20 17:01:03 +00:00
Jean-Philippe Lang
ed7318fb8d Backported r11157 and r11158 from trunk (#12801).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11231 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-20 16:59:42 +00:00
Jean-Philippe Lang
5a1a2f5855 Merged r11159 from trunk (#12799).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11230 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-20 16:56:50 +00:00
Jean-Philippe Lang
f1314278d5 Backported r11196 from trunk (#7510).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11229 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-20 16:55:37 +00:00
Toshi MARUYAMA
3a8b872a09 Merged r11170 from trunk to 2.2-stable (#12818)
Swedish translation updated by Nicklas Holm.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11172 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-12 12:43:51 +00:00
Toshi MARUYAMA
56290979fc Merged r11163 from trunk to 2.2-stable (#12809)
Swedish translation updated by Nicklas Holm.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11165 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-11 13:19:18 +00:00
Toshi MARUYAMA
6e0fb415a7 Merged r11160 from trunk to 2.2-stable (#12800)
Serbian translation updated by Miodrag Milic.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11162 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-11 08:31:14 +00:00
Jean-Philippe Lang
f26654b29f Merged r11146 from trunk: Changes for 2.2.1 release.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11147 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-09 13:33:24 +00:00
Jean-Philippe Lang
5c62c1cf95 Merged r11126 from trunk (#12744).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11145 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-09 13:31:05 +00:00
Jean-Philippe Lang
2d6adbd7ff Merged r11088 from trunk (#12691).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11144 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-09 13:29:59 +00:00
Jean-Philippe Lang
b0ccaffe1b Merged r11064 from trunk (#12652).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11143 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-09 13:29:08 +00:00
Toshi MARUYAMA
2c37617973 Merged r11140 from trunk to 2.2-stable.
Upgrade to Rails 3.2.11.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11142 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-08 23:57:13 +00:00
Toshi MARUYAMA
567eb70fdb Merged r11128 from trunk to 2.2-stable.
Test fails when run at the beginning of the day.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11141 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-08 23:14:03 +00:00
Toshi MARUYAMA
de63102925 Merged r11109 from trunk to 2.2-stable
Upgrade to Rails 3.2.10.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11111 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-04 02:05:44 +00:00
Toshi MARUYAMA
a8fcf9389e Merged r11091 from trunk (#12711, #11290)
fix incorrect min_x_value of lib/SVG/Graph/TimeSeries.rb by r10439.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11093 e93f8b46-1217-0410-a6f0-8f06a7374b81
2013-01-03 00:15:32 +00:00
Toshi MARUYAMA
3e4b36de83 Merged r11051 from trunk to 2.2-stable (#12630)
Russian "x_hours" translation updated by Mikhail Velkin.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11054 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-19 00:00:04 +00:00
Jean-Philippe Lang
edd584d59e Merged r11041 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11042 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-18 12:24:17 +00:00
Toshi MARUYAMA
e2b27ab696 Merged r11036 from trunk to 2.2-stable (#12615, #12619)
Russian translation changed by Kirill Bezrukov.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11040 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-18 00:04:49 +00:00
Toshi MARUYAMA
1968d039ee Merged r11035 from trunk to 2.2-stable (#12615)
Russian translation updated by Kirill Bezrukov.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11037 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-17 23:24:31 +00:00
Toshi MARUYAMA
fddc33cd45 Merged r11022 from trunk to 2.2-stable (#12614)
Dutch translation updated.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11023 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-17 12:43:15 +00:00
Toshi MARUYAMA
29518ba0cf Merged r11015 from trunk to 2.2-stable (#12605, #12608)
Norwegian translation changed by Ketil Mehl.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11018 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-16 07:34:34 +00:00
Toshi MARUYAMA
acd27b9eb1 Merged r11014 from trunk to 2.2-stable (#12605)
Norwegian translation for 1.4-stable updated by Ketil Mehl.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11017 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-16 07:34:09 +00:00
Toshi MARUYAMA
6445b5997c Merged r11012 from trunk to 2.2-stable (#12607)
Japanese translation for 2.2-stable updated.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11016 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-16 07:33:39 +00:00
Jean-Philippe Lang
416d33973f Merged r10991 from trunk (#12568).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11009 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-15 07:55:50 +00:00
Jean-Philippe Lang
82c7dc11d2 Merged r10992 from trunk (#12400).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11006 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-15 07:52:39 +00:00
Jean-Philippe Lang
d22f782d3f Merged r10956 from trunk (#12513).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11004 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-15 07:51:12 +00:00
Jean-Philippe Lang
3717fdfa79 Merged r10975 from trunk (#12566).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11002 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-15 07:49:31 +00:00
Toshi MARUYAMA
9d3d932703 Merged r10999 from trunk (#12602)
Korean translation updated by Jongwook Choi.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@11000 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-15 01:32:43 +00:00
Jean-Philippe Lang
3a379ce4b9 Merged r10948 into 2.2-stable (#3447).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@10952 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-08 08:41:59 +00:00
Toshi MARUYAMA
daa77f0109 Merged r10946 from trunk to 2.2-stable (#12514)
Lithuanian translation updated by Egidijus Zideckas.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@10947 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-06 06:30:05 +00:00
Toshi MARUYAMA
c0d66d626b Merged r10940 from trunk to 2.2-stable (#12494)
Bulgarian "button_submit" translation changed by Ivan Cenov.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@10942 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-04 05:43:41 +00:00
Jean-Philippe Lang
bf02b76ca3 Sets stable branch.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@10908 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-02 18:01:48 +00:00
Jean-Philippe Lang
75e02ca486 branch 2.2-stable added
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.2-stable@10907 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-02 17:58:22 +00:00
Jean-Philippe Lang
ee3d6dbdbb Set version to 2.2.0.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10906 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-02 17:57:30 +00:00
Jean-Philippe Lang
e97a3ab97b Fixed find_issues logic.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10905 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-02 10:25:30 +00:00
Jean-Philippe Lang
6e1ff5bba6 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10904 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-02 09:59:22 +00:00
Jean-Philippe Lang
88d5663ad2 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10903 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-01 17:57:30 +00:00
Jean-Philippe Lang
16441b4938 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10902 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-01 16:25:20 +00:00
Jean-Philippe Lang
65d3bffad7 Moved duplicate #options_for_membership_project_select to ApplicationHelper.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10901 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-01 16:19:52 +00:00
Jean-Philippe Lang
4d71446791 Don't load all helpers.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10900 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-12-01 16:14:05 +00:00
Jean-Philippe Lang
0ef82b3dcf Removes textarea resizer in favour of built-in browser support.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10894 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-30 08:56:02 +00:00
Jean-Philippe Lang
a1d156d794 Fixed that roles API should accept API auth for when authentication is required (#12472).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10893 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-30 07:48:47 +00:00
Toshi MARUYAMA
a1119624c0 fix comment of RMagcik font configuration (#4787)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10892 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-28 11:00:57 +00:00
Toshi MARUYAMA
0a675c7c77 remove trailing white-spaces from app/models/repository.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10891 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-28 10:46:10 +00:00
Toshi MARUYAMA
c7ee26b144 add configuration of RMagcik font for CJK (Chinese, Japanese and Korean) (#4787)
Contributed by Jun NAITOH.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10890 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-28 10:11:33 +00:00
Toshi MARUYAMA
f4cf7bc6f5 code layout cleanup app/models/issue_relation.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10889 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-28 01:11:32 +00:00
Jean-Philippe Lang
c3817e620f Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10888 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-27 22:16:33 +00:00
Jean-Philippe Lang
9a270c46c0 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10887 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-27 22:13:14 +00:00
Jean-Philippe Lang
e43448f6ca Use 8+ characters long passwords in tests.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10886 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-27 21:52:38 +00:00
Jean-Philippe Lang
14e56006a1 Fixed that #extract_macro_options should not be greedy (#12451).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10885 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-27 19:59:33 +00:00
Jean-Philippe Lang
bf5b6014f7 Set the default minimum password length to 8.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10884 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-27 19:27:21 +00:00
Jean-Philippe Lang
6c0f3cd5d4 Validate email only if changed.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10883 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-27 19:25:56 +00:00
Jean-Philippe Lang
04dcdb3290 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10882 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-27 19:24:22 +00:00
Jean-Philippe Lang
457f0bb337 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10881 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-27 19:21:21 +00:00
Jean-Philippe Lang
96e01c6d4a Fixed the behaviour for when rescheduling a parent task (#4590).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10880 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-24 15:09:51 +00:00
Jean-Philippe Lang
fb9a2901e9 Fixed that autolinks and textile links ending with cyrilic characters are broken (#12397).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10879 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-24 14:20:01 +00:00
Jean-Philippe Lang
b94c971755 Precede-Follow relation should move following issues earlier when rescheduling issue earlier (#4590).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10878 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-24 13:43:52 +00:00
Jean-Philippe Lang
29fc292b18 Respond with 404 instead of 500 when requesting a wiki diff with invalid versions (#12434).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10877 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-24 12:27:00 +00:00
Jean-Philippe Lang
845d7bc645 Updates for 2.1.4 release.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10874 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-24 09:34:42 +00:00
Jean-Philippe Lang
cb24cafedc Removed duplicated test.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10869 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-23 17:53:47 +00:00
Jean-Philippe Lang
dc68be983a Use Project.rebuild_tree! instead of .rebuild! in migration.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10868 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-23 17:53:12 +00:00
Jean-Philippe Lang
25c63ec747 Adds a Project.rebuild_tree! method to force the rebuild of the nested set.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10867 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-23 17:50:46 +00:00
Jean-Philippe Lang
13f5301c09 Fixed that Project.rebuild! sorts projects by id instead of name (#12431).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10866 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-23 17:39:38 +00:00
Jean-Philippe Lang
be7895e04e Do not create projects in alphabetical order in nested set tests (#12431).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10865 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-23 17:36:04 +00:00
Toshi MARUYAMA
921ad01bde scm: git: change extra_report_last_commit type at unit test to string (#12409)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10862 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-21 23:34:27 +00:00
Jean-Philippe Lang
d00cc4d9b5 Upgrade to Rails 3.2.9 (#12393).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10860 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-21 20:22:43 +00:00
Toshi MARUYAMA
f6367b8ba7 scm: git: fix tests fail when extra_info is nil (#12409)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10857 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-21 08:17:56 +00:00
Toshi MARUYAMA
5d8d38aa60 scm: git: fix changesets aren't read after clear_changesets call (#12409)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10856 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-21 07:44:29 +00:00
Toshi MARUYAMA
7048f66619 svn propset svn:eol-style native to fixtures (#12399)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10853 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-21 05:43:36 +00:00
Toshi MARUYAMA
6740f441c4 fix non ASCII attachment filename encoding broken (MOJIBAKE) in receiving mail on Ruby 1.8 (#12399)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10852 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-21 05:37:22 +00:00
Toshi MARUYAMA
adcf54a92b remove trailing white-space from app/controllers/trackers_controller.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10851 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-18 23:15:45 +00:00
Jean-Philippe Lang
a829bfa755 Fixed that MailHandler raises an error when email has no subject header (#12396).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10850 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-18 23:09:45 +00:00
Jean-Philippe Lang
f232f56d97 Adds copyright.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10847 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-18 18:21:16 +00:00
Jean-Philippe Lang
26b3e48545 Symbols can not be sorted with ruby1.8.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10846 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-18 18:19:48 +00:00
Jean-Philippe Lang
2d1e7ff829 Adds english names for several languages.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10845 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-18 18:16:14 +00:00
Jean-Philippe Lang
a49de1c39d Cache languages names to avoid loading all translations files.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10844 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-18 18:01:24 +00:00
Jean-Philippe Lang
3739810afa Adds a custom i18n backend that lazily loads translations files.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10843 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-18 17:41:31 +00:00
Jean-Philippe Lang
f36b3fff60 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10842 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-18 16:01:07 +00:00
Jean-Philippe Lang
46d27348fd Eager-load authors.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10841 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-18 14:37:37 +00:00
Jean-Philippe Lang
1ff8bbf080 Pins mysql gem to ~> 2.8.1.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10840 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-18 14:28:45 +00:00
Jean-Philippe Lang
628b3cde71 Removed unused i18n string (#8373).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10839 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-18 10:31:20 +00:00
Jean-Philippe Lang
5f36e1fff2 Removed the limit of 75 pages when exporting wiki pages (#12274).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10838 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-18 10:18:30 +00:00
Jean-Philippe Lang
aa45516a02 Fixed that repository identifier may not be displayed in project settings (#12332).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10837 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-18 10:10:09 +00:00
Jean-Philippe Lang
3cf6a56b97 Fixed context menu for IE 7/8 (#12298).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10836 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-18 10:02:07 +00:00
Jean-Philippe Lang
98f225f6cd Updates for 2.1.3 release.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10831 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-17 12:49:08 +00:00
Jean-Philippe Lang
72ea1851b9 'None' grouped issue list section should be translated (#12358).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10829 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-17 11:18:54 +00:00
Jean-Philippe Lang
1c14dd35cf Fixes #requires_redmine comments (#12299).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10828 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-17 11:05:27 +00:00
Jean-Philippe Lang
4bd1e887d9 Makes Plugin#requires_redmine accept a range of versions (#12299).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10827 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-17 10:55:38 +00:00
Jean-Philippe Lang
b3cf67cad4 Makes Plugin#requires_redmine accept only major and minor version (#12299).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10826 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-17 10:07:21 +00:00
Jean-Philippe Lang
19bd857790 Rewrites requires_redmine tests.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10825 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-17 09:54:56 +00:00
Jean-Philippe Lang
dd96ef4248 Issue "Update" link broken focus (#12356).
Patch by Alexander Oryol.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10818 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-17 08:48:08 +00:00
Toshi MARUYAMA
70bcbd1404 replace non ASCII characters to hexadecimals at unit mail handler test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10814 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-16 06:48:46 +00:00
Toshi MARUYAMA
9f6cf296d1 svn propset svn:eol-style native to fixtures (#12375)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10813 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-16 06:26:43 +00:00
Toshi MARUYAMA
617cb7ac53 fix receiving mail subject broken which does not begin with encoding name (#12375)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10812 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-16 06:19:42 +00:00
Toshi MARUYAMA
1da74009cd add test of receiving mail subject begins with encoding name (#12375)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10811 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-16 05:25:18 +00:00
Jean-Philippe Lang
8b527ce247 Fixed version date validation (#12359).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10810 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-15 22:43:10 +00:00
Jean-Philippe Lang
e9e5d2e072 Fixed new issue form rendering with IE8.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10806 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-15 19:59:14 +00:00
Toshi MARUYAMA
fd41840434 Gemfile: remove rake
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10805 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-13 22:44:13 +00:00
Jean-Philippe Lang
b880020527 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10804 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-13 22:15:47 +00:00
Jean-Philippe Lang
547b85c4ef Adds table name to the SQL clause used by Principale.like scope.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10803 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-13 22:13:39 +00:00
Jean-Philippe Lang
d21cfe6bb4 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10802 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-13 22:03:42 +00:00
Jean-Philippe Lang
ce04c41830 Fixed that Principal#like scope does not work with cyrillic characters and Postgresql (#12349).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10801 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-13 22:01:31 +00:00
Jean-Philippe Lang
37c590bfef Unpin rake version.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10800 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-13 18:10:04 +00:00
Toshi MARUYAMA
b0b8352bc5 Gemfile: pin rake version 0.9.2.2
CI server tests fail.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10799 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-13 04:46:46 +00:00
Toshi MARUYAMA
37a600475c Gemfile: pin rake version 0.9
CI server tests fail.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10798 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-13 04:24:54 +00:00
Toshi MARUYAMA
cb68851eac remove trailing white-space from app/controllers/timelog_controller.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10797 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-13 03:58:38 +00:00
Jean-Philippe Lang
d6b1ad38a7 Adds a div that wraps everything except the footer.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10794 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-08 18:26:48 +00:00
Jean-Philippe Lang
a17f4c8375 Make sure that attachments are created in the same order they were selected (#12310).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10793 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-07 18:45:56 +00:00
Jean-Philippe Lang
00927f58af Make sure that #attachments returns attachments with same timestamp in the order they were created (#12310).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10792 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-07 18:06:42 +00:00
Toshi MARUYAMA
4ef90b6096 fix Lithuanian numeral translation (#12316)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10791 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-06 22:54:40 +00:00
Jean-Philippe Lang
d6e8a2d4e6 Fixed misleading German translation for "Registered" (#12294).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10790 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-05 16:47:14 +00:00
Jean-Philippe Lang
c8b722456c Fixed that watchers receive notifications for private comments without permission (#12286).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10789 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-05 15:49:07 +00:00
Jean-Baptiste Barth
7f3cc6e38b Fixed some more test/integration/*_test.rb breaking when run alone (#12285)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10788 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-01 22:47:59 +00:00
Jean-Baptiste Barth
7d9c45fb8a Fixed some more test/functional/*_test.rb breaking when run alone (#12285)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10787 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-01 22:47:44 +00:00
Jean-Baptiste Barth
0beef88850 Fixed some more test/unit/*_test.rb breaking when run alone (#12285)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10786 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-01 22:47:25 +00:00
Jean-Baptiste Barth
ff9b3d3a06 Fixed test/functional/welcome_controller_test.rb breaking when run alone (#12285)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10785 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-01 13:26:50 +00:00
Jean-Baptiste Barth
3ac94be04b Fixed test/functional/sessions_test.rb breaking when run alone (#12285)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10784 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-01 13:23:57 +00:00
Jean-Baptiste Barth
9280182bde Fixed test/functional/mail_handler_controller_test.rb breaking when run alone (#12285)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10783 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-01 13:20:42 +00:00
Jean-Baptiste Barth
68cd78f7cc Fixed test/functional/groups_controller_test.rb breaking when run alone (#12285)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10782 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-01 11:58:45 +00:00
Jean-Baptiste Barth
45e7c63fc4 Fixed test/unit/issue_category_test.rb breaking when run alone (#12285)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10781 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-01 10:29:55 +00:00
Jean-Baptiste Barth
0eabfc5e72 Fixed test/unit/version_test.rb breaking when run alone (#12285)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10780 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-01 10:23:49 +00:00
Jean-Baptiste Barth
6e190a76fb Fixed test/unit/watcher_test.rb breaking when run alone (#12285)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10779 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-01 10:22:37 +00:00
Jean-Baptiste Barth
e00b4acf1e Use Rake::TestTask#pattern for plugin tests instead of #test_files (#11534)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10778 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-11-01 09:40:40 +00:00
Toshi MARUYAMA
511e46e978 Bulgarian translation updated by Ivan Cenov (#12280)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10777 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-31 22:55:51 +00:00
Toshi MARUYAMA
8a66522314 fix unit issue test fails on Wednesday
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10776 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-31 10:20:59 +00:00
Toshi MARUYAMA
b49948d880 Traditional Chinese translation updated by ChunChang Lo (#12271)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10775 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-31 09:05:20 +00:00
Toshi MARUYAMA
fdff662f4e German translation updated by Daniel Felix (#12257)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10774 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-30 22:49:13 +00:00
Toshi MARUYAMA
7158a51add Japanese translation updated by Go MAEDA (#12256)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10773 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-30 22:48:43 +00:00
Jean-Philippe Lang
b5f8290f4c Fixed source indentation (#8106).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10772 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-30 15:17:11 +00:00
Jean-Philippe Lang
f909a8c006 Issues by Category should show tasks without category (#8106).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10771 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-30 14:24:33 +00:00
Jean-Philippe Lang
399223daba New user name format: firstname + first letter of lastname (#12085).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10770 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-30 08:40:12 +00:00
Jean-Philippe Lang
cdc8944a89 Filling locales (#11426).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10769 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-30 08:21:54 +00:00
Jean-Philippe Lang
d62ef6b9b1 Changes how relative date filters work and adds specific filters for filtering dates in past/next n days (#11426).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10768 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-30 08:21:15 +00:00
Jean-Philippe Lang
b9c72bf590 Validate value for date filters.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10767 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-30 07:53:14 +00:00
Toshi MARUYAMA
cb7ab9bc0c Bulgarian translation updated by Ivan Cenov (#12254)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10766 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-30 07:47:09 +00:00
Jean-Philippe Lang
9f148e098b Ability to sort issues by grouped column (#3511).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10765 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-29 18:32:41 +00:00
Toshi MARUYAMA
1fc324b74c German Translation updated by Daniel Felix (#12237)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10763 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-29 14:44:16 +00:00
Toshi MARUYAMA
69b5e929af Japanese translation updated by Go MAEDA (#12246)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10762 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-29 13:23:14 +00:00
Jean-Philippe Lang
ea0e3849e3 Limit resizing of textare vertically.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10761 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-29 13:11:29 +00:00
Jean-Philippe Lang
96b7c041c8 German Translation updated by Daniel Felix.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10758 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-29 12:12:25 +00:00
Jean-Philippe Lang
e74986391a German Translation updated by Daniel Felix.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10757 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-29 12:11:24 +00:00
Jean-Philippe Lang
c00084b80b Display non working days on gantt image according to settings (#2161).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10751 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-29 10:23:59 +00:00
Jean-Philippe Lang
1f55907f83 Display non working days on gantt according to settings (#2161).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10750 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-29 10:21:00 +00:00
Jean-Philippe Lang
5fe4aae7ba Non working days is an array of strings (#2161).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10749 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-29 10:19:40 +00:00
Jean-Philippe Lang
6b2e0333ca Filling locales (#2161).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10748 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-29 10:07:07 +00:00
Jean-Philippe Lang
b71355f10b Ignore non-working days when rescheduling an issue (#2161).
Weekly non-working days can be configured in application settings (set to saturday and sunday by default).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10747 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-29 10:06:30 +00:00
Jean-Philippe Lang
48d83884c3 Hard-coded "Back" on 404 view (#12231).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10745 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-28 20:42:18 +00:00
Jean-Philippe Lang
fe690dcf20 Use page parameter instead of p for pagination.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10744 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-28 20:27:50 +00:00
Jean-Philippe Lang
beb2610650 REST API for deleting wiki pages (#7082).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10743 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-28 20:17:38 +00:00
Toshi MARUYAMA
625eebb720 code cleanup scm_iconv (#12228)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10742 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-28 11:39:43 +00:00
Toshi MARUYAMA
123d2b318f fix scm_iconv local variable name (#12228)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10741 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-28 07:12:23 +00:00
Toshi MARUYAMA
5a2c80cb48 use String#encode at scm_iconv on Ruby 1.9 (#12228)
Unit git adapter test fails on JRuby 1.7.

<pre>
Failure:
  <"test-Ü-2.txt">("UTF-8") expected but was
  <"test-\xC3\x9C-2.txt">("ASCII-8BIT").

  diff:
  - test-Ü-2.txt
  ?      ^
  + test-Ü-2.txt
  ?      ^^
test_entries_latin_1_files(GitAdapterTest)
test/unit/lib/redmine/scm/adapters/git_adapter_test.rb:468:in `test_entries_latin_1_files'
     465:         assert entries1
     466:         assert_equal 3, entries1.size
     467:         f1 = entries1[1]
  => 468:         assert_equal "test-#{@char_1}-2.txt", f1.name
     469:         assert_equal "latin-1-dir/test-#{@char_1}-2.txt", f1.path
     470:         assert_equal 'file', f1.kind
     471:       end
</pre>

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10740 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-28 06:19:29 +00:00
Toshi MARUYAMA
a71ff93f8f fix JRuby 1.6 tests fail on CI server (#12228)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10739 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-28 03:59:09 +00:00
Toshi MARUYAMA
49f2d4729d prevent rake task error on JRuby 1.7 (#12228)
Following is "rake db:migrate RAILS_ENV=test" output
on jruby 1.7.0 (1.9.3p203) 2012-10-22 ff1ebbe on OpenJDK Client VM 1.6.0_18-b18 [linux-i386].

<pre>
ArgumentError: file not found: db:migrate
   non_options at /xxxxx/rubies/jruby-1.7.0/lib/ruby/1.9/test/unit.rb:167
          map! at org/jruby/RubyArray.java:2387
   non_options at /xxxxx/rubies/jruby-1.7.0/lib/ruby/1.9/test/unit.rb:146
   non_options at /xxxxx/rubies/jruby-1.7.0/lib/ruby/1.9/test/unit.rb:207
  process_args at /xxxxx/rubies/jruby-1.7.0/lib/ruby/1.9/test/unit.rb:52
          _run at /xxxxx/rubies/jruby-1.7.0/lib/ruby/1.9/minitest/unit.rb:891
           run at /xxxxx/rubies/jruby-1.7.0/lib/ruby/1.9/minitest/unit.rb:884
           run at /xxxxx/rubies/jruby-1.7.0/lib/ruby/1.9/test/unit.rb:21
       autorun at /xxxxx/rubies/jruby-1.7.0/lib/ruby/1.9/test/unit.rb:326
      run_once at /xxxxx/rubies/jruby-1.7.0/lib/ruby/1.9/test/unit.rb:27
       autorun at /xxxxx/rubies/jruby-1.7.0/lib/ruby/1.9/test/unit.rb:325
</pre>

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10737 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-28 01:52:01 +00:00
Toshi MARUYAMA
d840837563 remove trailing white-space from app/controllers/repositories_controller.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10736 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-28 01:12:00 +00:00
Toshi MARUYAMA
ac75aad581 German translation enhancements by Daniel Felix (#12232)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10735 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-28 00:43:53 +00:00
Toshi MARUYAMA
176e239e23 German translation for trunk updated by Daniel Felix (#12232)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10734 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-28 00:43:25 +00:00
Toshi MARUYAMA
0932689ef6 German translation for 2.1-stable updated by Daniel Felix (#12232, #12235)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10733 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-28 00:42:36 +00:00
Jean-Philippe Lang
00736951cf Adds double quotes in mysql configuration example (#12229).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10729 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-27 08:50:33 +00:00
Jean-Philippe Lang
29a474b641 Wrap issue description and its contextual menu in a div (#12211).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10728 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-27 08:35:19 +00:00
Jean-Philippe Lang
8a2786c91e Fixes that test randomly fails.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10727 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-27 07:36:06 +00:00
Jean-Philippe Lang
fb68f4703b Use textual CSS class for priorities in alternate theme (#12216).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10726 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-27 06:26:24 +00:00
Jean-Philippe Lang
2af516bd05 Use textual CSS class for priorities in alternate theme (#12216).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10725 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-27 06:25:41 +00:00
Jean-Philippe Lang
166cbfdb3c Adjusts tests for the css class added in r10720 (#12216).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10721 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-26 02:46:38 +00:00
Jean-Philippe Lang
113f8b5cf2 Adds a textual css class for issue priorities (#12216).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10720 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-26 01:25:23 +00:00
Jean-Philippe Lang
a679d19709 Adds last edit comments on the wiki page (#7082).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10719 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-25 21:17:46 +00:00
Jean-Philippe Lang
03062394fc Adds ?include=attachments option when retrieving a wiki page with the REST API (#7082).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10718 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-25 20:44:37 +00:00
Jean-Philippe Lang
eff874b29a REST API for creating/updating wiki pages (#7082).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10717 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-25 20:38:29 +00:00
Jean-Philippe Lang
9e31308720 REST API for retrieving wiki pages (#7082).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10716 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-25 19:44:04 +00:00
Jean-Philippe Lang
b2e035fa96 Don't show confirmation message when disabled delete link in the context menu (#12199).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10715 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-24 21:24:40 +00:00
Jean-Philippe Lang
1c7e4bb7f0 Javascript syntax error (#12195).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10714 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-24 21:01:37 +00:00
Toshi MARUYAMA
e0811bc80d scm: use nil instead of @rev at revision text box of "View all revisions" page
@rev is set as default branch at controller.
On Git, in most cases it is "master".
And it is set on revision text box of "View all revisions" page.
"master" branch is NOT revision, so clicking OK button causes error.
It is very confused.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10713 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-24 11:12:05 +00:00
Toshi MARUYAMA
60afbcd37f add tmp/thumbnails/* to .hgignore and .gitignore
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10712 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-24 11:11:38 +00:00
Toshi MARUYAMA
c4ce048970 fix "Page not found" on OK button in SCM "View all revisions" page (#12196)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10709 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-24 09:24:30 +00:00
Toshi MARUYAMA
2beae77c58 backout r10707 (#12196)
fix "Page not found" on OK button in SCM "View all revisions" page.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10708 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-24 09:23:59 +00:00
Toshi MARUYAMA
440232a54d fix "Page not found" on OK button in SCM "View all revisions" page (#12196)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10707 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-24 07:59:16 +00:00
Jean-Philippe Lang
881a22d248 Fixed test case class name (#10852).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10706 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-23 21:24:38 +00:00
Jean-Philippe Lang
6cccdce06e Ability to delete a version from a wiki page history (#10852).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10705 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-23 18:45:14 +00:00
Toshi MARUYAMA
9e7f71080f add tmp/pdf directory (#12189)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10702 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-23 10:50:09 +00:00
Toshi MARUYAMA
ff4a92a782 Simplified Chinese translation for trunk updated by Steven Wong (#12188)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10700 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-23 06:18:06 +00:00
Toshi MARUYAMA
a829e381be Simplified Chinese translation for 2.1-stable updated by Steven Wong (#12188)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10699 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-23 06:17:39 +00:00
Toshi MARUYAMA
1db6a0f89c gantt: remove unused issues parameter from gantt_issue_compare method
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10698 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-23 00:17:05 +00:00
Toshi MARUYAMA
8975f9c235 Traditional Chinese translation updated by ChunChang Lo (#12176)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10696 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-22 08:13:37 +00:00
Toshi MARUYAMA
4ff3c9fdb5 partial backout r10263
Backout replacing shoulda context of test/unit/helpers/issues_helper_test.rb.
Test methods in shoulda context do not run on Ruby 1.8.7-p370.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10689 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-22 02:03:23 +00:00
Toshi MARUYAMA
f188277ab2 backout r10253
Backout replacing shoulda context of test/unit/helpers/issues_helper_test.rb.
Test methods in shoulda context do not run on Ruby 1.8.7-p370.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10688 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-22 02:03:11 +00:00
Jean-Philippe Lang
d66b3452db Wiki page versions routes cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10687 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-21 18:46:26 +00:00
Toshi MARUYAMA
9ec142713d Japanese translation updated by Go MAEDA (#12171)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10686 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-21 10:12:11 +00:00
Jean-Philippe Lang
61d8e8f1f4 Don't show watch, lock/unlock, delete links on previous wiki page versions.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10685 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-21 04:56:58 +00:00
Jean-Philippe Lang
9796d18609 Handle deleted wiki page versions (#10852).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10684 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-21 04:43:15 +00:00
Jean-Philippe Lang
f09be68323 Adds cc and bcc to email log messages (#12090).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10683 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-21 03:38:54 +00:00
Jean-Philippe Lang
82eab51203 Bulgarian translation updated by Ivan Cenov (#12168).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10682 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-20 17:17:25 +00:00
Jean-Philippe Lang
d22b57a27d Filling locales (#12167).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10681 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-20 15:01:44 +00:00
Jean-Philippe Lang
d29fa4735b Adds a macro for inserting collapsed text (#12167).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10680 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-20 14:49:32 +00:00
Toshi MARUYAMA
0faab70be5 Lithuanian "label_in" translation updated by Gediminas Muižis (#12142)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10679 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-20 11:39:02 +00:00
Jean-Philippe Lang
251f263abd Let the attachment filename be specified on upload (#12125).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10678 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-18 21:06:35 +00:00
Jean-Philippe Lang
79c1ec7adc Reverts r10676 that broke a test.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10677 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-18 18:11:42 +00:00
Jean-Philippe Lang
e7dfc30c2f Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10676 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-18 17:15:26 +00:00
Jean-Philippe Lang
9b702971bf Use named route.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10675 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-18 17:12:22 +00:00
Jean-Philippe Lang
2b4389466f Use named route.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10674 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-18 17:10:00 +00:00
Jean-Philippe Lang
7729178d9d Adds links to locked users when current user is admin.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10673 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-18 17:08:42 +00:00
Jean-Philippe Lang
50037b18c4 Adds a test for start date < due date validation.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10672 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-18 16:48:19 +00:00
Jean-Philippe Lang
1a9d482fc9 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10671 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-18 16:47:41 +00:00
Jean-Philippe Lang
1737552eca Fixed that invalid start date is ignored (#12092).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10670 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-18 16:43:14 +00:00
Toshi MARUYAMA
9ff16dd411 remove duplicate keys from Lithuanian translation file (#12142)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10669 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-18 03:30:52 +00:00
Toshi MARUYAMA
59cf6dea86 Lithuanian translation updated by Gediminas Muižis (#12142)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10668 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-18 02:29:44 +00:00
Toshi MARUYAMA
f293f82c3f remove field_is_in_chlog and label_change_log from locales which removed r3162
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10667 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-18 00:31:46 +00:00
Toshi MARUYAMA
e764349a1b backout r10665
Removed field_is_in_chlog and label_change_log revision from locales is not r3147.
It is r3162.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10666 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-18 00:31:30 +00:00
Toshi MARUYAMA
c3788674ff remove field_is_in_chlog and label_change_log from locales which removed r3147
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10665 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-17 23:39:19 +00:00
Jean-Philippe Lang
d62b90db73 Makes enumerations available through the REST API.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10664 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-17 17:29:27 +00:00
Jean-Philippe Lang
fcb22595d0 Use named route (#12113).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10663 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-17 17:01:07 +00:00
Jean-Philippe Lang
ef1f14905b Use parent tracker as the default tracker when adding a subtask (#12113).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10662 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-17 17:00:24 +00:00
Jean-Philippe Lang
b8fbb41d5f Adds a helper for displaying a link to add a subtask (#12113).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10661 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-17 16:58:44 +00:00
Jean-Philippe Lang
0a000921f8 Use a local variable.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10660 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-17 16:54:26 +00:00
Toshi MARUYAMA
c945fe82b2 change Japanese translation of "admin" (#12117)
Contributed by Go MAEDA.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10659 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-17 09:16:26 +00:00
Jean-Philippe Lang
4b6b568635 Fixed that entering #nnn as parent task should validate (#11979).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10658 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-14 14:35:57 +00:00
Toshi MARUYAMA
5aaf9c734c svn propset svn:eol-style native extra/sample_plugin/test/integration/routing_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10657 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 16:29:12 +00:00
Toshi MARUYAMA
ff2d374a14 add routing test to sample plugin
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10656 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 16:22:04 +00:00
Toshi MARUYAMA
9581afe060 code layout clean up test_should_not_be_able_to_assign_a_new_issue_to_a_locked_version of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10655 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 11:20:55 +00:00
Toshi MARUYAMA
6ebfe54e6e code layout clean up test_assignable_versions of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10654 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 11:20:31 +00:00
Toshi MARUYAMA
02c770968f code layout clean up test_should_not_be_able_to_assign_a_new_issue_to_a_closed_version of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10653 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 11:20:06 +00:00
Toshi MARUYAMA
5ae73e3784 code layout clean up test_should_not_close_duplicated_issue of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10652 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 11:19:39 +00:00
Toshi MARUYAMA
d5abb11c0b code layout clean up test_should_close_duplicates of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10651 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 11:19:12 +00:00
Toshi MARUYAMA
04ac60d891 code layout clean up test_should_not_call_after_project_change_on_creation of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10650 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 11:18:45 +00:00
Toshi MARUYAMA
eedad03141 code layout clean up test_read_only_attribute_names_for_multiple_roles_should_intersect_rules of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10649 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 11:18:16 +00:00
Toshi MARUYAMA
8487a3e0e6 code layout clean up test_required_attribute_names_for_multiple_roles_should_intersect_rules of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10648 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 11:17:43 +00:00
Toshi MARUYAMA
a1b82c7650 code layout clean up test_should_be_able_to_assign_a_new_issue_to_an_open_version of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10647 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:55:49 +00:00
Toshi MARUYAMA
93daf6865e code layout clean up test_required_attributes_should_be_validated of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10646 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:55:09 +00:00
Toshi MARUYAMA
0df2c4a975 code layout clean up test_safe_attributes_should_accept_target_status_writable_fields of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10645 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:54:27 +00:00
Toshi MARUYAMA
0cf44b976f code layout clean up test_new_statuses_allowed_to_should_return_all_transitions_for_admin of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10644 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:53:44 +00:00
Toshi MARUYAMA
f76de605a0 code layout clean up test_new_statuses_allowed_to of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10643 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:53:05 +00:00
Toshi MARUYAMA
7a162b7255 code layout clean up test_safe_attributes_should_accept_target_tracker_writable_fields of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10642 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:52:31 +00:00
Toshi MARUYAMA
9da555fcb7 code layout clean up test_editable_custom_field_values_should_return_non_readonly_custom_values of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10641 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:51:57 +00:00
Toshi MARUYAMA
ed9f954c6c code layout clean up test_safe_attributes_should_not_include_readonly_custom_fields of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10640 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:51:21 +00:00
Toshi MARUYAMA
0f6be546b8 code layout clean up test_safe_attributes_should_not_include_readonly_fields of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10639 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:50:49 +00:00
Toshi MARUYAMA
a66a50eda2 code layout clean up test_should_not_update_custom_fields_on_changing_tracker_with_different_custom_fields of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10638 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:50:19 +00:00
Jean-Philippe Lang
69f863b3c8 Tests cleanup, use #assert_select instead of #assert_tag.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10637 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:24:17 +00:00
Toshi MARUYAMA
db67eff913 code layout clean up test_journalized_multi_custom_field of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10636 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:15:59 +00:00
Toshi MARUYAMA
756adebb96 code layout clean up context "#assignable_users" of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10635 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:15:34 +00:00
Toshi MARUYAMA
0bcc6115c3 code layout clean up context "#behind_schedule?" of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10634 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:15:08 +00:00
Toshi MARUYAMA
be79553f33 code layout clean up test_overdue of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10633 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:14:42 +00:00
Toshi MARUYAMA
dd887891f7 code layout clean up test_rescheduling_an_issue_should_reschedule_following_issue of unit issue test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10632 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 10:14:16 +00:00
Jean-Philippe Lang
55dbd8886f Tests cleanup, use #assert_select instead of #assert_tag.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10631 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 09:54:31 +00:00
Toshi MARUYAMA
5d9bdf888a Traditional Chinese translation updated by ChunChang Lo (#12091)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10630 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 09:40:07 +00:00
Jean-Philippe Lang
43da05f3cb Set proper locale.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10629 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 08:22:49 +00:00
Jean-Philippe Lang
6c3e38c4c0 Tests cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10628 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 08:21:18 +00:00
Jean-Philippe Lang
a88782bdec Tests cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10627 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 08:14:53 +00:00
Jean-Philippe Lang
31ee1d22eb Test moved to tests with transactional fixtures disabled.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10626 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 08:03:19 +00:00
Jean-Philippe Lang
9af6141c91 Reverts r10623 for clarity, this test does not need the default language to be forced to "en".
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10625 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 07:56:45 +00:00
Jean-Philippe Lang
8a6ce3a646 Make sure that custom field format cannot be changed.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10624 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-13 07:40:07 +00:00
Toshi MARUYAMA
e04bd297e0 set language en at test_put_update_with_spent_time_and_failure_should_not_add_spent_time at functional issues controller test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10623 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-12 23:23:32 +00:00
Toshi MARUYAMA
3bda16f825 remove trailing white-spaces from app/controllers/issue_categories_controller.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10622 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-12 22:57:15 +00:00
Jean-Philippe Lang
7b5d15eca8 Test that spent time should not be added when issue update fails (#11283).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10621 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-12 21:30:12 +00:00
Jean-Philippe Lang
ad94777d9c Expose roles details via REST API (#11502).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10620 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-12 17:22:52 +00:00
Toshi MARUYAMA
90e0d681dc code layout cleanup test/unit/issue_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10619 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-12 14:33:22 +00:00
Toshi MARUYAMA
924e5ad61b set language en at test_create_with_invalid_parent_issue_id of unit issue test (#11979)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10618 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-12 14:32:55 +00:00
Toshi MARUYAMA
b537a2f1de add test of parent issue id beginning sharp to unit issue test (#11979)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10617 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-12 14:32:24 +00:00
Jean-Philippe Lang
7af1504672 Fixed that Redmine::VERSION.revision returns nil with svn 1.7 (#12012).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10616 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-12 14:09:58 +00:00
Jean-Philippe Lang
2b797fa82f Fixed: No validation errors when entering an invalid "Parent task" (#11979).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10615 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-12 13:40:41 +00:00
Jean-Philippe Lang
8358dc1cc5 Fixed that User#allowed_to? should return true or false (#12078).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10614 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-12 09:12:03 +00:00
Jean-Philippe Lang
92391abd1e Removed issue_create! helper in favour of Issue.generate!
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10613 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-12 09:02:25 +00:00
Jean-Philippe Lang
51818cbbb6 Makes Issue.generate_with_descendants! helper accept attributes only.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10612 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-12 08:56:09 +00:00
Jean-Philippe Lang
8bde60dc56 Remove Issue.generate_for_project! test helper and use Issue.generate! instead.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10611 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-12 08:39:22 +00:00
Jean-Philippe Lang
d8f039f489 Isolate the test that actually require non transactional fixtures.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10610 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 19:07:08 +00:00
Jean-Philippe Lang
3e706adddd Preserve username when authentification failed (#11846).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10609 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 17:17:30 +00:00
Jean-Philippe Lang
5344a35f72 Adds an optional X-Redmine-Switch-User header to let admin users swicth user in API calls (#11755).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10608 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 17:07:24 +00:00
Toshi MARUYAMA
2ac9f7d6ac remove empty line and add newline at end of test/fixtures/wikis.yml
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10607 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 04:30:29 +00:00
Toshi MARUYAMA
f9b073f9d0 remove empty line and add newline at end of test/fixtures/watchers.yml
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10606 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 04:30:15 +00:00
Toshi MARUYAMA
ee3ef85157 remove empty line and add newline at end of test/fixtures/issue_categories.yml
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10605 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 04:30:00 +00:00
Toshi MARUYAMA
3ba648e2dc remove empty line and add newline at end of test/fixtures/groups_users.yml
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10604 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 04:29:45 +00:00
Toshi MARUYAMA
fd79c1b5b4 remove empty line and add newline at end of test/fixtures/comments.yml
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10603 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 04:29:30 +00:00
Toshi MARUYAMA
3a683c8ef3 remove empty line and add newline at end of test/fixtures/changesets.yml
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10602 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 04:29:14 +00:00
Toshi MARUYAMA
2f555a3183 remove empty line and add newline at end of test/fixtures/changes.yml
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10599 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 03:37:32 +00:00
Toshi MARUYAMA
da85ca221a Japanese translation updated by Go MAEDA (#12067)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10598 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 03:36:59 +00:00
Toshi MARUYAMA
54f7fe5bd3 Japanese translation improvement by Go MAEDA (#12061)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10597 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 03:36:24 +00:00
Toshi MARUYAMA
f683f956bb German translation updated by Raphael Kallensee (#9732)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10596 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 02:49:11 +00:00
Toshi MARUYAMA
667ad23f9c add newline at end of test/fixtures/user_preferences.yml
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10595 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 01:15:31 +00:00
Toshi MARUYAMA
578d15ed00 add newline at end of test/fixtures/documents.yml
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10594 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 01:15:17 +00:00
Toshi MARUYAMA
70d75ad222 remove empty line from end of test/fixtures/issue_relations.yml
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10593 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-11 01:15:02 +00:00
Toshi MARUYAMA
9a3ab9c704 Bulgarian translation updated by Ivan Cenov (#12064)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10592 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-10 23:57:41 +00:00
Toshi MARUYAMA
00100a15eb remove empty line and add newline at end of test/fixtures/projects.yml
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10591 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-10 23:57:14 +00:00
Toshi MARUYAMA
6c692d9715 remove empty line and add newline at end of test/fixtures/projects_trackers.yml
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10590 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-10 23:56:38 +00:00
Jean-Philippe Lang
b15bd840ec Filling locales (#5487).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10589 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-10 17:43:10 +00:00
Jean-Philippe Lang
d0e090eff9 Filling locales (#5487).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10588 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-10 17:38:52 +00:00
Jean-Philippe Lang
83bcc1f043 Adds a setting to allow subtasks to belong to other projects (#5487).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10587 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-10 17:38:17 +00:00
Jean-Philippe Lang
b0013d9f68 Do not show parents/subtasks subjects that are not visible.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10586 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-09 21:30:40 +00:00
Jean-Philippe Lang
5a02dcf0a9 Fixed that issue notes preview is broken by r10547 (#1554).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10585 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-09 19:11:49 +00:00
Jean-Philippe Lang
c4e040fa88 Filling locales (#11862).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10584 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-09 17:41:03 +00:00
Jean-Philippe Lang
3a178a42cf Add "last 2 weeks" preset to time entries reporting (#11862).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10583 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-09 17:40:00 +00:00
Jean-Philippe Lang
340b4a30d0 Removed invalid/duplicate test.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10582 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-09 17:38:46 +00:00
Jean-Philippe Lang
7263862ce3 Cleanup (#12050).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10581 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-09 17:03:40 +00:00
Jean-Philippe Lang
7626b21a1e Fixed that export: links are broken (#12050).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10580 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-09 17:02:22 +00:00
Toshi MARUYAMA
16befaf2e9 Traditional Chinese translation updated by ChunChang Lo (#12042)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10575 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-09 11:03:45 +00:00
Toshi MARUYAMA
92f9280352 code layout cleanup test/integration/api_test/issues_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10574 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-09 11:03:20 +00:00
Toshi MARUYAMA
178f64950f code layout cleanup test/unit/issue_relation_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10573 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-09 11:02:56 +00:00
Toshi MARUYAMA
727aad50b7 add missing fixtures to test/unit/issue_relation_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10572 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-09 10:41:16 +00:00
Toshi MARUYAMA
3599cb15a2 add missing fixture to test/integration/api_test/issues_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10571 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-09 10:14:14 +00:00
Jean-Philippe Lang
fa237901b0 Adjusts test for r10569.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10570 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-07 13:47:22 +00:00
Jean-Philippe Lang
6f13f2b842 Restyles the issue counts.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10569 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-07 13:42:40 +00:00
Toshi MARUYAMA
f26662f31f Bulgarian translation updated by Ivan Cenov (#12034)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10568 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-06 16:20:34 +00:00
Toshi MARUYAMA
4df979fdc2 fix incorrect Spanish "September" month name (#12027)
Contributed by Bruno Orcha García.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10567 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-05 12:36:10 +00:00
Toshi MARUYAMA
6d6f42c6a9 remove trailing white-spaces from app/controllers/application_controller.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10566 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-05 00:30:52 +00:00
Toshi MARUYAMA
615f8957c5 Russian translation for trunk updated (#12021)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10564 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 23:30:44 +00:00
Toshi MARUYAMA
e6596dbc43 Russian translation for 2.1-stable updated (#12021)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10563 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 23:08:09 +00:00
Jean-Philippe Lang
9d8c0f9a63 Adds label_any string for filters.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10562 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 18:50:43 +00:00
Jean-Philippe Lang
5411f93a9a Passing the format in the template name is deprecated.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10561 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 18:15:05 +00:00
Jean-Philippe Lang
cbe8226759 Filling locales (#3265).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10560 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 18:11:15 +00:00
Jean-Philippe Lang
b9d7c22297 Adds no_issue_in_project operator for relations filter (#3265).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10559 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 18:10:41 +00:00
Toshi MARUYAMA
44137cb1d4 Bulgarian translation updated by Ivan Cenov (#12020)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10558 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 12:48:44 +00:00
Toshi MARUYAMA
1503c6cce7 Traditional Chinese translation updated by ChunChang Lo (#12019)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10557 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 09:39:11 +00:00
Toshi MARUYAMA
8162d86192 Japanese translation updated by Go MAEDA (#12017)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10556 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 04:49:14 +00:00
Toshi MARUYAMA
88e1587b08 sort custom field issue filter by type and position (#12018)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10555 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 04:48:48 +00:00
Toshi MARUYAMA
fb4210b6d9 move CustomFieldsHelper tabs variable to model constant for common use (#12018)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10554 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 04:48:20 +00:00
Toshi MARUYAMA
65a045e207 svn propset svn:eol-style native test/unit/helpers/queries_helper_test.rb (#12018)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10553 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 04:18:37 +00:00
Toshi MARUYAMA
7c0c699f95 change "is_private" issue filter order from 15 to 16 (#12018)
Order 15 is duplicate with "watcher_id" filter.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10552 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 04:09:41 +00:00
Toshi MARUYAMA
eaf46c5512 change "status" issue filter order from 1 to 0 (#12018)
Order 1 is duplicate with "project" filter.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10551 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 04:09:14 +00:00
Toshi MARUYAMA
b571c3dbc9 split QueriesHelper filters_options_for_select method and add new unit test (#12018)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10550 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 04:08:38 +00:00
Toshi MARUYAMA
5ddd6e7d1f insert position field to custom_fields fixture (#12018)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10549 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-04 03:44:47 +00:00
Toshi MARUYAMA
0e87672c49 update locale files (#1554)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10548 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-03 23:21:29 +00:00
Jean-Philippe Lang
0178b5a2fe Private issue notes (#1554).
Adds 2 new permissions for viewing/adding private comments to issues.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10547 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-03 21:36:19 +00:00
Toshi MARUYAMA
bb1563f23f fix integration hook test name
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10546 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-02 22:30:44 +00:00
Toshi MARUYAMA
1d4c8abe96 code layout cleanup Query available_filters method
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10545 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-02 10:29:18 +00:00
Toshi MARUYAMA
ef988ba17c code cleanup r10542 changes (#10937)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10544 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-01 07:19:11 +00:00
Toshi MARUYAMA
a29854707b add new user format "lastname" (#10937)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10543 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-01 07:08:04 +00:00
Toshi MARUYAMA
de0e0f09a3 pin user format order at setting panel (#10937)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10542 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-01 07:07:49 +00:00
Toshi MARUYAMA
5f794b5af5 fix replacing shoulda test name at r10540
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10541 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-01 07:07:35 +00:00
Toshi MARUYAMA
df44af819c replace "User#before_create" and "User.login" shoulda contexts at unit user test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10540 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-01 06:41:18 +00:00
Toshi MARUYAMA
b04f44f944 fix 'object_daddy creation' test name at unit user test
Redmine dropped object_daddy at r9469 for Rails3 porting.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10539 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-10-01 06:41:04 +00:00
Jean-Philippe Lang
b49abf0c22 Updates for 2.1.2 release.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10535 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-30 10:42:28 +00:00
Jean-Philippe Lang
757073edef Updates for 2.1.1 release.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10531 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-30 08:06:41 +00:00
Toshi MARUYAMA
ecdd77c582 Japanese translation updated by Go MAEDA (#11995)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10530 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-30 06:04:51 +00:00
Toshi MARUYAMA
ba2330d0a0 Bulgarian translation updated by Ivan Cenov (#11994)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10529 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-29 22:49:17 +00:00
Jean-Philippe Lang
8cf8f5bdbf Fixed that autocomplete results are not reset after clearing search field (#11909).
Contributed by Jongwook Choi.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10527 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-29 16:43:11 +00:00
Jean-Philippe Lang
81782f2408 Call sort for array with more than one element only.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10519 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-29 15:28:26 +00:00
Jean-Philippe Lang
99662fa18e Test failure.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10518 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-29 15:26:52 +00:00
Jean-Philippe Lang
61248d1dbc Test failure.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10517 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-29 15:19:34 +00:00
Etienne Massip
d60b8c927c Japanese translation updated (#11992).
Contributed by Go MAEDA.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10516 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-29 14:35:57 +00:00
Jean-Philippe Lang
1d7f5e34c5 Filling locales (#3239, #3265).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10515 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-29 13:03:33 +00:00
Jean-Philippe Lang
c292971390 Display visible relations in API response.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10514 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-29 13:01:09 +00:00
Jean-Philippe Lang
1b6da80e16 Makes related issues available for display and filtering on the issue list (#3239, #3265).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10513 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-29 12:57:38 +00:00
Toshi MARUYAMA
69b8931e92 add functional test of sub repository diff path (#11966)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10503 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-28 03:43:51 +00:00
Toshi MARUYAMA
69a3941ac8 add functional test of main repository diff path (#11966)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10502 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-28 03:43:25 +00:00
Toshi MARUYAMA
086478c5a6 set user preference diff type nil at functional tests
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10501 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-28 02:02:30 +00:00
Toshi MARUYAMA
1efd303b4a scm: git: use with_settings instead of assigned setting at functional test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10498 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-27 23:16:56 +00:00
Toshi MARUYAMA
b6be866151 Bulgarian translation updated by Ivan Cenov (#11974)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10497 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-27 22:55:36 +00:00
Jean-Philippe Lang
3e7bb3c632 Missing fixtures.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10496 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-27 22:30:10 +00:00
Jean-Philippe Lang
f1fdbf8d80 Do not link copied issues when copying a project (#6899).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10495 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-27 22:27:37 +00:00
Jean-Philippe Lang
f58ed6c206 Fixed that issue author is assigned with current user when the edit form is updated (#11975).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10494 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-27 22:12:11 +00:00
Jean-Philippe Lang
d255f7f5b0 Don't display the dropdown if no transition is allowed.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10493 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-27 22:03:38 +00:00
Jean-Philippe Lang
c6ea8fbf21 Filling locales (#6899).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10492 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-27 19:10:04 +00:00
Jean-Philippe Lang
cc4cff9f11 Adds a "Copied from/to" relation when copying issue(s) (#6899).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10491 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-27 19:09:30 +00:00
Toshi MARUYAMA
c3e055bd70 explicitly define route at scm diff view (#11966)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10490 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-27 16:05:33 +00:00
Toshi MARUYAMA
fe832071d4 fix broken issue list filter (#11885)
Array indexOf() is not defined on IE8.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10487 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-27 05:42:10 +00:00
Toshi MARUYAMA
9c3543ac3f fix javascript syntax mistake in application.js (#11885)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10486 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-27 05:41:52 +00:00
Toshi MARUYAMA
7690aff8bd remove empty setup method from test/unit/changeset_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10480 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-26 11:17:53 +00:00
Toshi MARUYAMA
455738cbe9 use set_language_if_valid 'en' at test_parent_should_be_in_same_project at unit board test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10478 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-26 10:54:47 +00:00
Toshi MARUYAMA
cf52a6ccb4 set default_language en at test_commit_closing_a_subproject_issue of unit changeset test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10477 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-26 10:54:30 +00:00
Toshi MARUYAMA
c91ce512a9 fix number_to_currency() raises exception on Rails3 bs and de locale (#11922)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10476 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-26 08:45:39 +00:00
Toshi MARUYAMA
b7c71fe427 add more error message if public/plugin_assets cannot be created (#11945)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10472 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-26 04:11:14 +00:00
Toshi MARUYAMA
29292a3faf fix "can't convert Errno::EACCES into String" in case of no permission of public/plugin_assets on Ruby 1.9.3 (#11945)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10471 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-26 04:11:00 +00:00
Toshi MARUYAMA
d1d8640822 code layout cleanup app/views/issues/_list.html.erb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10470 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-25 23:32:39 +00:00
Toshi MARUYAMA
49c2f316c2 remove trailing white-spaces from app/models/query.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10469 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-25 23:32:15 +00:00
Toshi MARUYAMA
95fe4d61c9 replace tab to space at app/models/query.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10468 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-25 23:31:49 +00:00
Jean-Philippe Lang
917a89fbf7 Fixed JSON escaping of filters (#11929).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10465 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-25 18:23:11 +00:00
Jean-Philippe Lang
18d1c62ca8 Use eager loaded #principal association instead of #user (#11904).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10442 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-22 10:12:59 +00:00
Jean-Philippe Lang
5ce2f4f81c Use eager loaded #principal association instead of #user (#11904).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10441 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-22 09:48:38 +00:00
Jean-Philippe Lang
7c8ac2eecc Avoid to run one SQL query per member on Project#assignable_users (#11904).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10440 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-22 09:33:30 +00:00
Jean-Philippe Lang
3bde603029 ParseDate missing in Ruby 1.9x (#11290).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10439 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-22 07:46:52 +00:00
Jean-Philippe Lang
838025372d Potential can't dup NilClass error in UserPreference (#11905).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10438 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-22 06:16:53 +00:00
Jean-Philippe Lang
5328c4adcb Anonymous users should always see public issues only (#11872).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10437 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-20 19:26:58 +00:00
Jean-Philippe Lang
30b3e796ff New relation form Cancel link is broken with Chrome 21 (#11036).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10436 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-20 16:59:37 +00:00
Toshi MARUYAMA
c1b71e84c6 Traditional Chinese translation updated by ChunChang Lo (#11897)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10434 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-20 10:48:47 +00:00
Jean-Philippe Lang
59d8ae61ef Anonymous users should not see private issues with anonymous author (#11872).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10433 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-19 21:48:33 +00:00
Jean-Philippe Lang
fa2fe3e1e8 Slight changes to diff/file/annotate styles.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10432 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-19 18:32:34 +00:00
Toshi MARUYAMA
cb01d87ddd set svn:eol-style native to test/fixtures/files/hg-export.diff (#11868)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10431 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-19 03:08:07 +00:00
Toshi MARUYAMA
37351ddecc remove empty setup method from test/unit/lib/redmine/unified_diff_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10430 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-19 03:02:17 +00:00
Toshi MARUYAMA
551c024b45 add functional attachment test of mercurial export file (#11868)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10429 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-19 03:02:03 +00:00
Toshi MARUYAMA
f18edc4e1c use git diff format for all diff (#11868)
Mercurial diff uses git format.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10428 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-19 02:29:11 +00:00
Toshi MARUYAMA
0af04b8ae0 use radio buttons instead of a select at attachment as same as r10426 repository
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10427 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-18 23:48:52 +00:00
Jean-Philippe Lang
3586e44c1d Use radio buttons instead of a select.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10426 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-18 20:51:31 +00:00
Jean-Philippe Lang
d277d14432 Remove trailing (revision nn) from filenames in subversion diffs.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10425 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-18 19:44:08 +00:00
Jean-Philippe Lang
12de6a177a Fixed that git diff displays deleted files as /dev/null (#11868).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10424 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-18 19:32:58 +00:00
Toshi MARUYAMA
74f7fc38f0 scm: bazaar: add more comment to non ASCII path tests at unit model test (#11834)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10423 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-18 10:10:55 +00:00
Toshi MARUYAMA
1f58b94bd8 scm: bazaar: do not call super initialize method at adapter (#11834)
On Bazaar 2.0.5, in case of using non ASCII *repository* path,
following trace raise on all operation.

<pre>
Traceback (most recent call last):
  File "/usr/bin/bzr", line 142, in <module>
    exit_val = bzrlib.commands.main()
  File "/usr/lib/python2.6/site-packages/bzrlib/commands.py", line 1102, in main
    argv = osutils.get_unicode_argv()
  File "/usr/lib/python2.6/site-packages/bzrlib/osutils.py", line 90, in get_unicode_argv
    "encoding." % a))
bzrlib.errors.BzrError:
 Parameter ''/somewhere/\xe3\x83\x90\xe3\x82\xb6\xe3\x83\xbc/non_ascii/''
 is unsupported by the current encoding.
</pre>

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10422 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-18 10:10:29 +00:00
Toshi MARUYAMA
1fcd3d956f scm: bazaar: add non ASCII path test to unit model test (#11834)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10421 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-18 09:30:35 +00:00
Toshi MARUYAMA
f9208d7c5c scm: bazaar: use log encoding as path encoding (#11834)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10420 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-18 09:30:11 +00:00
Toshi MARUYAMA
cbe28d75d0 fix deprecation warning of the format in the template name
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10419 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-18 03:15:00 +00:00
Toshi MARUYAMA
a701bd5fbd scm: bazaar: convert path encoding from @path_encoding to UTF-8 at adapter entries method (#11834)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10418 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-17 23:46:53 +00:00
Toshi MARUYAMA
a3ae06921d scm: bazaar: convert path encoding from @path_encoding to UTF-8 at adapter revisions method (#11834)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10417 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-17 23:46:27 +00:00
Toshi MARUYAMA
a6368733ad scm: bazaar: convert command line character encoding to @path_encoding (#11834)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10416 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-17 23:45:59 +00:00
Toshi MARUYAMA
f230ffbd54 scm: bazaar: add @path_encoding instance value and set it UTF-8 at adapter initialize method (#11834)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10415 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-17 23:45:31 +00:00
Toshi MARUYAMA
51e6c7589e scm: bazaar: update test repository (#11834)
Add new "non_ascii" branch.
It was created by "bzr branch --no-tree branch00 non_ascii".
It is equivalent to Git bare repository and Mercurial "hg update null".
It has non ASCII path name files and directory.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10414 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-17 22:49:31 +00:00
Jean-Philippe Lang
581058f663 Fixed: load_default_data task fails to print the error message if one occurs (#11844).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10413 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-17 18:38:54 +00:00
Jean-Philippe Lang
187d5db6b4 Fixed #onthefly_creation_failed broken by r9940 (#11850).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10412 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-17 18:31:20 +00:00
Toshi MARUYAMA
01e2472c92 scm: bazaar: add entry test to unit lib test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10411 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-17 10:41:59 +00:00
Toshi MARUYAMA
2da70de1a7 scm: git: add entry test to unit lib test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10410 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-17 10:41:33 +00:00
Toshi MARUYAMA
dd89ce4594 scm: bazaar: code layout cleanup adapter revisions method
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10409 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-17 07:58:31 +00:00
Toshi MARUYAMA
55748b6fc0 scm: bazaar: add revisions test to unit lib test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10408 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-17 07:58:05 +00:00
Jean-Philippe Lang
e05e9179fd Added a test for JSON upload.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10407 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 19:14:44 +00:00
Jean-Philippe Lang
f825167003 Removed test contexts.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10406 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 19:11:59 +00:00
Jean-Philippe Lang
57c38a33e5 Adds assertions on the confirmation form.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10405 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 15:39:11 +00:00
Jean-Philippe Lang
b81a578eb6 Adjust tests for new fixture.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10404 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 15:36:05 +00:00
Jean-Philippe Lang
8593e34722 Adds missing WikiContent fixture.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10403 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 15:31:59 +00:00
Jean-Philippe Lang
34b64d646f Updates macro description (#10789).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10402 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 15:27:21 +00:00
Jean-Philippe Lang
747e4ecd3a Adds a "depth" option to the child_pages macro (#10789).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10401 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 15:24:35 +00:00
Jean-Philippe Lang
ca4f2c59b6 Attachments should be available to the text formatter when previewing an existing news.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10400 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 14:18:43 +00:00
Toshi MARUYAMA
2058c66d73 scm: bazaar: remove unused scm.revisions ":with_paths => true" option from fetch_changesets method
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10399 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 14:15:07 +00:00
Toshi MARUYAMA
53e2eb1867 scm: bazaar: add asserting entries root path at unit model test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10398 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 14:14:52 +00:00
Jean-Philippe Lang
a81da3491e Do not consider that versions that are due today are completed.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10397 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 14:09:41 +00:00
Jean-Philippe Lang
ff0989a702 Accept float in inline styles.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10396 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 13:54:04 +00:00
Jean-Philippe Lang
49d93a5cab Updates for 2.0.4 and 2.1.0 releases.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10391 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 12:42:48 +00:00
Toshi MARUYAMA
17db2dca3d scm: mercurial: add test of diff from new to old revision to unit lib test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10390 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 08:51:19 +00:00
Toshi MARUYAMA
3cd15102c6 scm: bazaar: add diff test to unit lib test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10389 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 08:50:55 +00:00
Toshi MARUYAMA
dd5844b86c scm: bazaar: separate constant repository path to repository and trunk branch at unit model test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10388 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 06:13:23 +00:00
Toshi MARUYAMA
ee0fc2e1d5 scm: bazaar: do not use file:// for repository path at unit app test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10387 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 04:12:42 +00:00
Toshi MARUYAMA
4a7e148aff scm: bazaar: add asserting entries subdirectory path at unit app test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10386 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-16 00:22:25 +00:00
Toshi MARUYAMA
c2b12d853f scm: git: remove unnecessary encoding header from unit adapter test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10385 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-15 15:42:14 +00:00
Toshi MARUYAMA
67cdaabe6f scm: git: change test author encoding in unit adapter test to ASCII-8BIT
Author encoding in adapter is ASCII-8BIT.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10384 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-15 15:41:47 +00:00
Toshi MARUYAMA
72af2730ff remove unused "require 'redmine/codeset_util'" from RepositoriesHelper
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10383 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-15 15:40:58 +00:00
Toshi MARUYAMA
5441f8de4d remove redundant empty lines from RepositoriesHelper
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10382 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-15 15:08:28 +00:00
Toshi MARUYAMA
e659aff468 remove unused "require 'iconv'" from RepositoriesHelper
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10381 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-15 15:07:29 +00:00
Toshi MARUYAMA
2566aef8ab Japanese translation updated by Go MAEDA (#11836)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10379 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-15 11:13:52 +00:00
Toshi MARUYAMA
c70bc540dd add copyright statement to test/unit/lib/redmine/scm/adapters/*.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10378 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-14 21:40:45 +00:00
Etienne Massip
597fbf0e04 Fixed comment.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10377 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-12 21:30:30 +00:00
Jean-Philippe Lang
338d81d6e3 Redmine.pm fails when permissions are NULL (#11818).
Contributed by John Yani.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10375 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-12 19:13:05 +00:00
Jean-Philippe Lang
40302566a8 Code cleanup (#11814).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10373 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 17:26:42 +00:00
Jean-Philippe Lang
6d0aed1f44 Set the first day of week in the date picker according to settings (#11814).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10372 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 17:15:54 +00:00
Jean-Philippe Lang
a3d0e82552 Use javascript_tag.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10371 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 17:01:45 +00:00
Jean-Philippe Lang
818f3564fa Moved the javascript includes in html head.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10370 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 16:59:30 +00:00
Jean-Philippe Lang
745c5d053e Revision graph sometimes broken (#11612).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10369 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 16:55:32 +00:00
Jean-Philippe Lang
049aa3971d Upgraded raphael.js to 2.1.0 (#10419).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10368 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 16:48:57 +00:00
Jean-Philippe Lang
4cd22bb53a Set version to 2.1.0.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10365 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 16:30:07 +00:00
Toshi MARUYAMA
7d8db59dae do not show estimated time if it is nil on issue page
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10364 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 14:13:30 +00:00
Toshi MARUYAMA
d1606fd3e3 add asserting that issue estimated hours is nil when creating minimal issue
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10363 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 14:13:11 +00:00
Toshi MARUYAMA
097d9661c9 gantt: use content_tag instead of html tag at the tooltip
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10362 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 03:45:06 +00:00
Toshi MARUYAMA
f8cedf00a8 gantt: use content_tag instead of html tag at the label on the right
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10361 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 03:44:52 +00:00
Toshi MARUYAMA
2461d12388 gantt: remove redundant empty lines from unit gantt helper test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10360 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 02:58:59 +00:00
Toshi MARUYAMA
bcd8ce2de2 gantt: use content_tag instead of html tag at subject for project
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10359 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 02:16:32 +00:00
Toshi MARUYAMA
0cd9149e7a gantt: use content_tag instead of html tag at the markers
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10358 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 02:16:18 +00:00
Toshi MARUYAMA
69d0660760 gantt: code layout cleanup to_pdf method of lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10357 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 02:16:03 +00:00
Toshi MARUYAMA
3f7a7d9b14 gantt: fix unit gantt helper test fails
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10356 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 01:53:34 +00:00
Toshi MARUYAMA
66f881aad3 gantt: use content_tag instead of html tag at the task bar
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10355 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 00:57:10 +00:00
Toshi MARUYAMA
d3d719c0e7 gantt: code layout cleanup image_task method of lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10354 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 00:56:56 +00:00
Toshi MARUYAMA
03aa7037a5 gantt: code layout cleanup to_image method of lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10353 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 00:56:41 +00:00
Toshi MARUYAMA
ffb981255c gantt: use content_tag instead of html tag at helper subject_for_version method
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10352 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 00:09:01 +00:00
Toshi MARUYAMA
3bbb2566c8 gantt: code layout cleanup pdf_task method of lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10351 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 00:08:46 +00:00
Toshi MARUYAMA
8cfec7ddf5 gantt: code layout cleanup pdf_subject method of lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10350 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 00:08:32 +00:00
Toshi MARUYAMA
af177c3a59 gantt: code layout cleanup to_pdf method of lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10349 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-11 00:08:16 +00:00
Toshi MARUYAMA
25aeb4c3d3 gantt: use content_tag instead of html tag at subject gravatar
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10348 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-10 22:57:24 +00:00
Toshi MARUYAMA
b75afd49de gantt: code layout cleanup html_subject method of lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10347 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-10 22:56:56 +00:00
Toshi MARUYAMA
0cd08ed08c gantt: code layout cleanup line_for_issue method of lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10346 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-10 22:56:15 +00:00
Toshi MARUYAMA
ad71bffe34 gantt: code layout cleanup line_for_version method of lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10345 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-10 22:55:44 +00:00
Toshi MARUYAMA
a2edef9035 gantt: code layout cleanup render method of lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10344 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-10 22:55:13 +00:00
Toshi MARUYAMA
abcfbd9c75 gantt: code layout cleanup params* method of lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10343 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-10 11:55:13 +00:00
Toshi MARUYAMA
d0ca8eb703 gantt: code layout cleanup initialize method of lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10342 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-10 11:54:49 +00:00
Toshi MARUYAMA
e637c15660 gantt: remove redundant empty lines from lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10341 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-10 11:54:24 +00:00
Jean-Philippe Lang
f9d0b4776f Fixed TLS configuration in example (#11034).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10340 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-09 15:24:34 +00:00
Jean-Philippe Lang
3b5fd45fae Log current user on each request.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10339 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-09 14:54:22 +00:00
Jean-Philippe Lang
6b0e8fd82a Deep headings in TOC are too small.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10338 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-09 14:13:25 +00:00
Jean-Philippe Lang
972a991a92 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10337 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-09 11:34:35 +00:00
Jean-Philippe Lang
62d5b4c710 Issues assigned to a locked/closed version are now copied (#11207).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10336 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-09 11:04:55 +00:00
Jean-Philippe Lang
197a14a82e Fixed that the reminder email excludes issues assigned to groups (#11723).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10335 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-09 11:02:13 +00:00
Jean-Philippe Lang
ff86c37ed3 Fixed: Issues associated with a locked version are not copied when copying a project (#11207).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10334 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-09 10:11:49 +00:00
Jean-Philippe Lang
5e9320137b Fixed that target version is lost on project copy for issues that are assigned to a shared version from another project.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10333 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-09 10:01:03 +00:00
Jean-Philippe Lang
18ed4cf373 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10332 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-09 09:51:44 +00:00
Toshi MARUYAMA
8303e7c168 Bulgarian translation updated by Ivan Cenov (#11799)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10331 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-08 09:21:26 +00:00
Jean-Philippe Lang
eb58c62f26 Filling locales (#6965).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10330 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-08 06:18:55 +00:00
Jean-Philippe Lang
b72d40a429 Do not copy subtasks twice when copying an issue and its descendants (#6965).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10329 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-08 06:14:35 +00:00
Jean-Philippe Lang
6a37151b5c Adapt subtasks copy when copying a project (#6965).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10328 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-08 05:56:48 +00:00
Jean-Philippe Lang
5003927f13 Option to copy subtasks when copying issue(s) (#6965).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10327 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-08 05:34:07 +00:00
Toshi MARUYAMA
ffcf1925e3 gantt: code layout cleanup html days headers
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10326 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-08 03:21:55 +00:00
Toshi MARUYAMA
ad4ee1c8d8 gantt: code layout cleanup html weeks headers
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10325 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-08 03:21:17 +00:00
Toshi MARUYAMA
d4fc347a8a gantt: use content_tag instead of html tag at days headers
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10324 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-08 02:47:27 +00:00
Toshi MARUYAMA
c25d175623 gantt: use content_tag instead of html tag at gantt header outline
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10323 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-08 02:00:32 +00:00
Toshi MARUYAMA
47e375b271 gantt: code layout cleanup ruby code at head of show.html.erb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10322 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-08 02:00:17 +00:00
Toshi MARUYAMA
eeedd287ad gantt: code layout cleanup html months headers
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10321 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-08 00:59:42 +00:00
Toshi MARUYAMA
2edb8d597a gantt: use content_tag instead of html tag at gantt subject
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10320 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-08 00:59:08 +00:00
Toshi MARUYAMA
23eae0bf3c gantt: code cleanup html today red line
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10319 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-08 00:58:41 +00:00
Toshi MARUYAMA
822a627c44 gantt: fix code indents of html today red line
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10318 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-08 00:57:57 +00:00
Toshi MARUYAMA
3431b860ad gantt: use content_tag instead of html tag at gantt today red line
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10317 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-07 23:03:40 +00:00
Toshi MARUYAMA
3483938185 gantt: use content_tag instead of html tag at gantt weeks headers
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10316 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-07 23:03:16 +00:00
Toshi MARUYAMA
2af4bb6a86 gantt: use content_tag instead of html tag at gantt months headers
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10315 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-07 14:35:33 +00:00
Toshi MARUYAMA
b9586dd570 gantt: code layout cleanup html gantt days headers
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10314 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-07 14:35:20 +00:00
Toshi MARUYAMA
40df75243b code layout cleanup app/views/gantts/show.html.erb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10313 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-07 11:59:48 +00:00
Toshi MARUYAMA
0486ce9976 code layout cleanup gantt weeks headers
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10312 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-07 11:59:34 +00:00
Toshi MARUYAMA
621b15c923 code layout cleanup gantt months headers
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10311 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-07 11:59:19 +00:00
Toshi MARUYAMA
d1eb07dd8b fix code indent of gantt days headers
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10310 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-07 11:59:05 +00:00
Toshi MARUYAMA
9c5f339efb code layout cleanup app/views/gantts/show.html.erb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10309 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-07 01:36:16 +00:00
Toshi MARUYAMA
bbed770fa4 remove redundant empty lines from app/views/repositories/_revision_graph.html.erb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10308 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-07 01:35:18 +00:00
Jean-Philippe Lang
1f7a944d14 XML output broken with builder 3.0.1.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10306 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-06 22:34:21 +00:00
Jean-Philippe Lang
ef8c393290 Let plugin override mailer views (#11776).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10304 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-06 17:34:14 +00:00
Jean-Philippe Lang
bcb4c2cde4 Parse any heading level (#11789).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10294 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-06 17:03:13 +00:00
Toshi MARUYAMA
3dfef8a00d remove redundant empty lines from revision_graph.js
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10293 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-06 06:46:28 +00:00
Toshi MARUYAMA
ee2481a3b9 replace tab to space at revision_graph.js
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10292 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-06 06:46:13 +00:00
Toshi MARUYAMA
99913e80f0 show JQuery datepicker today button
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10291 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-05 17:22:08 +00:00
Toshi MARUYAMA
48ac467981 Traditional Chinese translation updated by ChunChang Lo (#11766)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10290 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-04 09:48:44 +00:00
Toshi MARUYAMA
6e21342c60 fix redmine_plugin generator output in USAGE
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10287 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-03 17:14:42 +00:00
Toshi MARUYAMA
3f63b5ea93 fix plugin generator script name of USAGE on Rails3
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10286 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-03 17:14:28 +00:00
Jean-Philippe Lang
ca7498c2d6 Create role by copy (#9258).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10285 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-03 17:04:28 +00:00
Jean-Philippe Lang
1b64e4be5e Set radio button when selecting a date with the date picker.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10284 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-02 17:24:29 +00:00
Jean-Philippe Lang
3a32edc3bd Adds a view for editing all trackers fields.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10283 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-02 16:55:16 +00:00
Jean-Philippe Lang
462c986452 Moved link to the contextual menu.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10282 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-02 15:13:40 +00:00
Jean-Philippe Lang
c3170e9264 Redmine.pm: Allow fallback to other Apache auth providers (#11475).
Contributed by Yasin Al Farhad.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10281 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-02 14:51:56 +00:00
Jean-Philippe Lang
2a9c001625 Doc update.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10280 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-02 13:00:19 +00:00
Jean-Philippe Lang
94db7c0029 Redmine.pm: HEAD is not considered as a read-only method (#11749).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10279 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-02 12:59:27 +00:00
Toshi MARUYAMA
e1492f771c remove redundant empty lines from test/test_helper.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10278 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-02 11:09:56 +00:00
Toshi MARUYAMA
48b9b805b2 fix typo "MACROS_SUB_RE" (#11736)
Contributed by Anton Argirov.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10277 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-02 11:09:43 +00:00
Jean-Philippe Lang
8b72710d7e Fixed: New multi-line macros regexp is too eager (#11736).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10276 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-02 10:24:56 +00:00
Jean-Philippe Lang
265baa1b2c Upgrade to Rails 3.2.8 (#11758).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10275 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-02 10:08:51 +00:00
Toshi MARUYAMA
139ddd639f backout r10247
Gemfile: pin i18n gem version 0.6.0.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10265 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-01 05:33:58 +00:00
Toshi MARUYAMA
e4b7b7cc38 code cleanup test_with_a_start_date_attribute_* of unit IssuesHelperTest
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10264 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-01 05:33:43 +00:00
Toshi MARUYAMA
8eb39d682d replace shoulder "with a due_date attribute" context of unit IssuesHelperTest and use with_settings
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10263 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-01 05:33:28 +00:00
Toshi MARUYAMA
4bca584024 use date_format setting at unit IssuesHelperTest test_with_a_start_date_attribute_*
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10257 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-01 04:10:33 +00:00
Toshi MARUYAMA
935d8e594b add missing fixtures to test/unit/lib/redmine/hook_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10256 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-01 03:47:20 +00:00
Toshi MARUYAMA
374a0cc7cb add missing fixture to test/unit/lib/redmine/safe_attributes_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10255 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-01 02:55:13 +00:00
Toshi MARUYAMA
53dd8dc11a add unit query test of French label
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10254 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-01 02:37:20 +00:00
Toshi MARUYAMA
444987ce91 replace shoulder "with a start_date attribute" context of test/unit/helpers/issues_helper_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10253 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-01 02:23:59 +00:00
Toshi MARUYAMA
43add0d306 scm: git: use with_settings at test_diff_truncated of functional test (#11752)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10252 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-01 02:23:44 +00:00
Toshi MARUYAMA
3581782ec2 scm: git: use diff_max_lines_displayed setting at test_diff_with_rev_and_path of functional test (#11752)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10251 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-01 02:23:29 +00:00
Toshi MARUYAMA
8d4c0e5ecd set language en to test_label_for at test/unit/query_test.rb
Test on CI Server fails.

http://www.redmine.org/builds/logs/build_trunk_sqlite3_ruby-1.9.3-p194_581.html

<pre>
Failure:
  <"Assignee">("US-ASCII") expected but was
  <"Assigné à">("UTF-8").
test_label_for(QueryTest)
test/unit/query_test.rb:860:in `test_label_for'
</pre>

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10249 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-09-01 01:29:48 +00:00
Toshi MARUYAMA
9a57cc18e3 Gemfile: pin i18n gem version 0.6.0
Tests on CI server fails.
http://www.redmine.org/builds/logs/build_trunk_sqlite3_ruby-1.9.3-p194_580.html

<pre>
Failure:
  <"Due date changed from 01 01 2010 to 31 01 2010"> expected to be =~
  </01\/31\/2010/>.
test: IssuesHelper#show_detail with a due_date attribute should format the current date. (IssuesHelperTest)
test/unit/helpers/issues_helper_test.rb:127:in `block (3 levels) in <class:IssuesHelperTest>'
</pre>

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10247 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-31 23:44:35 +00:00
Toshi MARUYAMA
564de36c08 remove trailing white-space from app/controllers/wiki_controller.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10246 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-31 23:01:51 +00:00
Toshi MARUYAMA
6ea1bc725a scm: git: add functional test of diff with revision and path (#11752)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10245 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-31 22:22:26 +00:00
Jean-Philippe Lang
a7be337a4c Updates test for r10243.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10244 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-27 11:21:08 +00:00
Jean-Philippe Lang
3a77d543fd Code cleanup: removed the obsolete with_limit scope.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10243 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-27 10:54:01 +00:00
Jean-Philippe Lang
d33fa1f8c8 Do not build a projects_by_role Hash that gets updated when accessing a key that is not present (#11662).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10242 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-27 10:11:20 +00:00
Jean-Philippe Lang
50506ef621 Make sure we don't build an empty IN () statement (#11662).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10241 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-27 10:09:08 +00:00
Jean-Philippe Lang
c68ee7f545 Fixed that destroying a user from the edit page returns a 404 response (#11691).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10240 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-26 10:50:59 +00:00
Jean-Philippe Lang
ebc979e9b1 Do not use escaped back_url param (#11691).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10239 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-26 10:40:09 +00:00
Jean-Philippe Lang
3cc6d5e815 Reverted r10234 and r10235 that broke redirect after login (#11691).
Tests in account_controller_test.rb should not have been changed.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10238 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-26 09:29:48 +00:00
Jean-Philippe Lang
a2e59cc956 Don't use tag helper in layout (#11704).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10237 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-26 09:25:25 +00:00
Jean-Philippe Lang
5969df8142 MailHandler: Match assignee on the full display name (#11552).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10236 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-26 09:03:17 +00:00
Etienne Massip
2ed4364c8a Reverted changes made to tests for r1893 (#11691).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10235 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-24 21:41:52 +00:00
Etienne Massip
70226f1833 Use a back_url parameter instead of referrer to refresh the page after user deletion (#11691).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10234 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-24 21:23:10 +00:00
Toshi MARUYAMA
a1d8cab6c6 remove empty setup method from unit enumeration test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10232 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-22 16:31:26 +00:00
Toshi MARUYAMA
3478a21c2f add unit test that enumeration returns default in regardless of active or not
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10231 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-22 16:31:13 +00:00
Toshi MARUYAMA
44c15c7560 add check default document category is not defined on database in tests (#11665)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10230 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-22 16:18:01 +00:00
Toshi MARUYAMA
d1a52fd301 use Rails3 Active Record syntax in DocumentCategory model
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10228 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-22 00:13:31 +00:00
Toshi MARUYAMA
377ef084ad add position to DocumentCategory in enumerations fixture (#11665)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10222 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-21 16:14:33 +00:00
Toshi MARUYAMA
665a331cc4 force set default document category if it is not set on database (#11665)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10221 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-21 13:45:53 +00:00
Toshi MARUYAMA
185ab2a020 add unit test to get default document category defined on database (#11665)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10220 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-21 13:45:40 +00:00
Toshi MARUYAMA
02fb4c3b2c add functional test to create non default document category (#11665)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10219 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-21 06:15:29 +00:00
Toshi MARUYAMA
8376311ee1 add missing fixtures to test/functional/documents_controller_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10216 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-21 04:49:22 +00:00
Toshi MARUYAMA
ac5e3c2036 add missing fixtures to test/unit/document_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10213 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-21 02:15:04 +00:00
Jean-Philippe Lang
a5c4fcc8f0 Updated macro documentation.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10212 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-18 12:55:00 +00:00
Jean-Philippe Lang
29d54f5d50 Validate macro name and options.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10211 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-18 12:35:14 +00:00
Jean-Philippe Lang
fc3a09e49a Let macros optionally accept a block of text (#3061).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10210 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-18 08:25:22 +00:00
Jean-Philippe Lang
73aece0baf Macros processing overhaul (#3061, #11633).
* macro arguments are no longer parsed by text formatters
* macro output is escaped unless it's html safe

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10209 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-17 14:46:55 +00:00
Jean-Philippe Lang
af5a814f4c Prevents "Overwriting existing method Issue.open" warning (#11545).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10208 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-17 14:34:10 +00:00
Toshi MARUYAMA
91a09bd474 fix unit test fails on JRuby 1.6.7.2 (#11577)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10207 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-14 00:30:23 +00:00
Jean-Philippe Lang
3673fbd881 Fixed: Can't use non-latin anchor in wiki (#11577).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10206 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-13 19:36:00 +00:00
Jean-Philippe Lang
d79bcc4369 Fixed that text email templates are escaped (#11355).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10205 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-13 19:05:42 +00:00
Jean-Philippe Lang
327660eb7f Respond with 404 on ActionView::MissingTemplate (#11503).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10204 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-13 18:34:00 +00:00
Jean-Philippe Lang
49e80c2cea Adds .settings to svn:ignore and removes svk property.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10203 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-13 18:16:45 +00:00
Jean-Philippe Lang
3119d1996c Use abbr_day_name to get the first letter of the day name (#9839).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10202 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-13 18:13:10 +00:00
Jean-Philippe Lang
11d4d8177c Escape filter values using .text instead of .html.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10201 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-13 14:59:59 +00:00
Jean-Philippe Lang
861ca78179 Fixed that roadmap anchor links can be ambigous (#11540).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10200 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-13 14:41:53 +00:00
Jean-Philippe Lang
8fb1a7e3cc Fixed that open scope on Project#issues raises an error (#11545).
Patch by Petr Pospisil.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10199 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-13 14:23:33 +00:00
Jean-Philippe Lang
91c875437d Adds a title to the issue link in the flash message.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10198 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-13 14:04:00 +00:00
Jean-Philippe Lang
60574bfb9c Context menu style.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10197 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-13 13:48:20 +00:00
Jean-Philippe Lang
3e4cbec95e Custom JQueryUI theme.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10196 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-13 13:39:21 +00:00
Jean-Philippe Lang
dbf41dba68 Set application/javascript as javascript mime tpye (#11621).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10195 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-13 12:39:11 +00:00
Toshi MARUYAMA
163659d0a5 cherry-pick avatar test from reverted r10184
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10194 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-11 00:31:18 +00:00
Jean-Philippe Lang
ec02853141 Raised the max-height.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10193 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-10 18:49:30 +00:00
Jean-Philippe Lang
2118f3a1fd Adds a max-height to projects lists.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10192 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-10 18:48:53 +00:00
Jean-Philippe Lang
145e5997b2 Removed duplicated helper (#11539).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10191 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-10 18:41:24 +00:00
Jean-Philippe Lang
32fcdff69f Removed p around ul.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10190 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-10 18:39:49 +00:00
Jean-Philippe Lang
c0c491dd61 Display a projects tree instead of a flat list in notification preferences (#11539).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10189 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-10 17:30:35 +00:00
Jean-Philippe Lang
0a6c1d9c13 Extract code to render nested listed of projects in an helper (#11539).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10188 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-10 17:09:48 +00:00
Jean-Philippe Lang
e52219f09d Fixed that projects are not ordered alphabetically after renaming project (#11508).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10187 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-10 16:50:15 +00:00
Jean-Philippe Lang
02b2a61e15 Reverted r10184 (#9365).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10186 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-10 16:35:58 +00:00
Jean-Philippe Lang
8b12702ebe Fixed that search results are escaped twice.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10185 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-10 16:22:26 +00:00
Jean-Philippe Lang
cbfafcd5e2 Use SSL for gravatars according to the protocol in settings (#9365).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10184 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-09 18:04:54 +00:00
Jean-Philippe Lang
e06bf0c464 Don't show the project dropdown when logging time on an issue.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10183 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-09 17:12:24 +00:00
Jean-Philippe Lang
f1650b8ff4 Adds autocomplete to issue field on time logging form.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10182 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-09 16:58:36 +00:00
Jean-Philippe Lang
f82a7a35b0 Adds autocomplete to "Related issue" field on revision (#11102).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10181 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-09 16:46:13 +00:00
Jean-Philippe Lang
908b960e71 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10180 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-09 16:43:12 +00:00
Jean-Philippe Lang
0ce0b52342 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10179 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-08 21:28:07 +00:00
Jean-Philippe Lang
b907398788 Slight change to the macro regexp.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10178 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-08 18:54:01 +00:00
Jean-Philippe Lang
2e4f3d5a60 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10177 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-08 18:47:52 +00:00
Jean-Philippe Lang
e0faf5cf84 Headings style.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10176 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-08 16:50:06 +00:00
Jean-Philippe Lang
9553325ee3 Use the accessor.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10175 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-08 16:35:25 +00:00
Jean-Philippe Lang
e2d6f0af4e Adds an option to macro definition to disable arguments parsing (#11578).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10174 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-08 16:28:33 +00:00
Toshi MARUYAMA
405bcc10c0 fix plural form of the abbreviation for hours in Brazilian Portuguese (#11600)
Contributed by Mauricio Piacentini.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10169 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-08 00:00:14 +00:00
Toshi MARUYAMA
2e536a2c56 Gemfile: mocha version up 0.12.3
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10167 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-07 23:10:50 +00:00
Jean-Philippe Lang
b6be9bff35 Log successful authentications.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10166 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-07 19:50:18 +00:00
Jean-Philippe Lang
b418e27283 Filling locales.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10165 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-07 19:24:03 +00:00
Jean-Philippe Lang
3676783052 Ability to filter issues using project, author, assignee and target version custom fields (#8161).
Custom fields must be marked as "Used as filter" to show up in the filters list.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10164 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-07 19:17:59 +00:00
Jean-Philippe Lang
599736aca7 Update the new custom field form with remotely.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10163 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-07 16:58:51 +00:00
Jean-Philippe Lang
1749fbf3e6 Build issue filters using javascript.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10162 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-07 16:41:46 +00:00
Jean-Philippe Lang
e9de6c1415 Removed csshover for IE6.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10161 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-07 16:16:19 +00:00
Jean-Philippe Lang
962134ab4f Prevent "Overwriting existing method User.active" warning, scope is already defined on the base class (#11545).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10160 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-07 16:14:24 +00:00
Jean-Philippe Lang
2e35a6800f Prevents "Overwriting existing method Issue.open" warning (#11545).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10159 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-07 16:13:04 +00:00
Jean-Philippe Lang
0a5828ee4a Added SVG mime-type (#11595).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10158 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-06 21:18:24 +00:00
Jean-Philippe Lang
1949f61d0c Fixed: Custom fields of type version not proper handled in receiving e-mails (#11571).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10157 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-06 21:16:19 +00:00
Jean-Philippe Lang
3f1c35b71e Tests not running after upgrade to mocha 0.12.2.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10155 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-02 17:37:03 +00:00
Jean-Philippe Lang
1a38434d5f Error running tests with ruby 1.9.3p194 (2012-04-20) [i386-mingw32].
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10154 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-02 17:20:36 +00:00
Jean-Philippe Lang
f8183429a9 Adjust the comment.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10153 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-02 16:48:23 +00:00
Jean-Philippe Lang
2275f46138 Makes Version#<=> consistent with SQL sort.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10152 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-02 16:47:53 +00:00
Jean-Philippe Lang
34cdac1669 Sort issues by scheduled versions first then unscheduled versions.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10151 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-02 16:47:06 +00:00
Toshi MARUYAMA
c7b712067e add translator name to Bulgarian yaml (#11561)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10150 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-08-01 12:59:00 +00:00
Toshi MARUYAMA
6ca1c117ab Bulgarian translation updated by Ivan Cenov (#11556)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10149 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-31 23:04:09 +00:00
Jean-Philippe Lang
b603aa74f9 Adds sharing attribute to the versions API (#11541).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10148 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-31 18:14:28 +00:00
Jean-Philippe Lang
c57a2974d1 Fixed that Mailer.with_synched_deliveries does not use delivery settings (#11550).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10147 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-31 18:09:33 +00:00
Jean-Philippe Lang
77d94818a4 Removed AuthSourceLdap.human_attribute_name.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10146 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-31 17:30:01 +00:00
Jean-Philippe Lang
a53894dd22 Set @previewed for rendering preview partial.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10145 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-31 17:22:17 +00:00
Jean-Philippe Lang
d99dbe9f0c Eager loading and no extra count query.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10144 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-31 17:21:14 +00:00
Jean-Philippe Lang
3f88fd44ef Filling locales.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10143 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-31 17:18:35 +00:00
Jean-Philippe Lang
bc153cb61d Support for subforums (#3831).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10142 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-31 17:17:52 +00:00
Jean-Philippe Lang
9554f0133f New edit icon.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10141 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-31 16:40:05 +00:00
Toshi MARUYAMA
f50da1593e Gemfile: prevent "rake db:migrate RAILS_ENV=test" causes exception on Ruby 1.9.3 (#10320, #10818)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10137 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-31 02:32:40 +00:00
Toshi MARUYAMA
96306f9dff replace tabs to spaces at app/views/repositories/_dir_list_content.html.erb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10136 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-30 01:32:31 +00:00
Jean-Baptiste Barth
8f0947e578 Fixed rake redmine:plugins:test:* not running some tests in subdirectories (#11533)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10135 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 18:27:13 +00:00
Jean-Baptiste Barth
d048d86c50 Invoke db:schema:dump after plugin migrations so that db/schema.rb stays up-to-date
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10134 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 18:01:13 +00:00
Jean-Philippe Lang
95457c434e Stylesheet cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10133 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 15:38:32 +00:00
Jean-Philippe Lang
42570c4426 Slight changes to syntax highlightment styles.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10132 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 15:30:47 +00:00
Jean-Philippe Lang
e4518af32a Removed line numbers from syntax highlightment.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10131 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 14:52:57 +00:00
Jean-Philippe Lang
08f200c487 Fixed legend tag position.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10130 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 12:13:47 +00:00
Jean-Philippe Lang
64f66daedd Duplicate ul tags.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10129 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 12:12:32 +00:00
Jean-Philippe Lang
0c72347d61 Fixed label with invalid for attribute.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10128 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 12:10:34 +00:00
Jean-Philippe Lang
15341bd844 Make labels clickable in Adminstration/Settings (#11496).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10127 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 12:08:10 +00:00
Jean-Philippe Lang
7a4c6d2a19 Add labels on SCMs.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10126 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 12:04:49 +00:00
Jean-Philippe Lang
1e6938a119 Removed duplicate ids.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10125 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 12:04:11 +00:00
Jean-Philippe Lang
9ef719f15e Add links to forums.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10124 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 11:52:50 +00:00
Jean-Philippe Lang
2175e4a901 Add links to repositories on repository list.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10123 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 11:51:09 +00:00
Jean-Philippe Lang
3692369584 html5 compliance.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10122 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 11:34:00 +00:00
Jean-Philippe Lang
75b0c01431 Typo.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10121 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 11:33:47 +00:00
Jean-Philippe Lang
d252848b2e Removed inline styles.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10120 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 11:32:24 +00:00
Jean-Philippe Lang
3a7207672e html5 compliance.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10119 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 11:30:43 +00:00
Jean-Philippe Lang
f8de723c46 Removed inline styles.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10118 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 11:28:22 +00:00
Jean-Philippe Lang
a0b2ab338e Removed inline styles.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10117 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 11:23:59 +00:00
Jean-Philippe Lang
308010c7c9 Fixed assertion.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10116 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 11:17:36 +00:00
Jean-Philippe Lang
6918a8974c Removed self closing a tags.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10115 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 11:16:19 +00:00
Jean-Philippe Lang
ba9f1c0388 html5 compliance.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10114 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 10:53:02 +00:00
Jean-Philippe Lang
45d9763090 Removed invalid html5 meta (Rails sets an equivalent response header natively) (#10128).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10113 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 10:46:04 +00:00
Jean-Philippe Lang
62d5b359c0 html5 compliance.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10112 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 10:21:27 +00:00
Jean-Philippe Lang
33d6f9e7a1 Label should be escaped.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10111 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 10:15:20 +00:00
Jean-Philippe Lang
c6106543e1 html5 compliance.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10110 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 10:12:26 +00:00
Jean-Philippe Lang
8ee2ae1846 html5 compliance.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10109 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-29 10:06:41 +00:00
Jean-Philippe Lang
a7caf3faf0 Use assert_select instead of assert_tag.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10108 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 18:41:08 +00:00
Jean-Philippe Lang
cc79feabe2 Adds assertions for subversion annotate.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10107 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 18:36:03 +00:00
Jean-Philippe Lang
71c5d6c8ee Use assert_select instead of assert_tag.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10106 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 18:16:55 +00:00
Jean-Philippe Lang
65524cc1cc Don't repeat revision on annotate view.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10105 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 18:11:03 +00:00
Jean-Philippe Lang
138f6736b2 Restores bottom border on h4.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10104 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 17:05:42 +00:00
Jean-Philippe Lang
0880096162 Same heading on message edit/show views.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10103 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 17:00:45 +00:00
Jean-Philippe Lang
571d316b13 Removed bottom border on headings.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10102 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 16:58:02 +00:00
Jean-Philippe Lang
93d9d459c5 Fixed broken assertion.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10101 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 16:54:21 +00:00
Jean-Philippe Lang
c544e9b9c6 Lighter blue for the header.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10100 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 16:46:26 +00:00
Jean-Philippe Lang
5565a078f3 Do not scroll to the preview.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10099 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 16:42:10 +00:00
Jean-Philippe Lang
7306c733bf HTML5 doctype.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10098 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 16:38:39 +00:00
Jean-Philippe Lang
969a5be7da New icons for the repository browser.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10097 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 16:25:02 +00:00
Jean-Philippe Lang
6851b0ca81 Lighter blue for links.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10096 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 16:07:51 +00:00
Jean-Philippe Lang
a7a0d47f2e Merged and minified jstoolbar.js and textile.js.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10095 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 15:58:54 +00:00
Jean-Philippe Lang
93a65c3c82 Moved syntax highlight styles to application.css.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10094 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 15:54:23 +00:00
Jean-Philippe Lang
1a088fb31e Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10093 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 15:45:36 +00:00
Jean-Philippe Lang
6e7507d580 Adds a replacement for deprecated link_to_function helper.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10092 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 15:26:45 +00:00
Jean-Philippe Lang
42fdc1d54d Fixed API key display on my account.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10091 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 15:14:56 +00:00
Jean-Philippe Lang
afc8239bf7 Fixed apply link on gantt.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10090 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 15:06:53 +00:00
Jean-Philippe Lang
8088749f10 Fixed tests broken by r10088.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10089 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-28 14:59:36 +00:00
Jean-Philippe Lang
3c3bdb8bb0 Adds JSONP support to the API (#11469).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10088 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-27 19:56:49 +00:00
Jean-Philippe Lang
9b4d29dc0d Do not propose non-assignable version (#11506).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10087 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-27 19:41:36 +00:00
Jean-Philippe Lang
9eb041fbc7 Versions that are not shared should not be assignable when selecting another project (#11506).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10086 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-27 19:36:53 +00:00
Jean-Philippe Lang
ed165f6716 Do not user user session for API requests.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10085 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-27 18:24:42 +00:00
Toshi MARUYAMA
8ed4620bb9 fix confirmation page has broken HTML when a project folding sub project is deleted (#11511)
Contributed by Haruka Yoshihara.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10083 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-26 23:45:17 +00:00
Jean-Philippe Lang
8e1f7607ec Identifier is now frozen.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10082 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-26 18:41:44 +00:00
Jean-Philippe Lang
87f284dcb6 Repository Identifier should be frozen (#11109).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10081 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-26 17:41:47 +00:00
Jean-Philippe Lang
04f9a321b1 Adds a task to duplicate a string in locales.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10080 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-26 17:32:22 +00:00
Jean-Philippe Lang
f03e21fb45 Changed issues css class from priority-{position} to status-{id} (#2071).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10079 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-26 16:55:40 +00:00
Jean-Philippe Lang
88efd302a7 Changed issues css class from status-{position} to status-{id} (#11304).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10078 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-26 16:50:39 +00:00
Jean-Philippe Lang
28cdc8adfc Don't turn #nnn with leading zeros into link (#11494).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10077 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-24 21:51:10 +00:00
Jean-Philippe Lang
3209c4c5e4 Sort versions ascending when grouping issues by version (#11153).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10076 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-24 18:41:04 +00:00
Jean-Philippe Lang
8fa787719a Fixed broken test.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10075 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-24 18:39:14 +00:00
Jean-Philippe Lang
bdd29295b4 In case the column is not found.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10074 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-24 17:42:45 +00:00
Jean-Philippe Lang
faab8678d4 Ability to group and sort the issue list by user/version custom field (#9419).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10073 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-24 17:39:30 +00:00
Jean-Philippe Lang
44fcc8919d Adds Version.fields_for_order_statement.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10072 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-24 16:32:39 +00:00
Jean-Philippe Lang
0b31c8ac85 Adds CustomField#group_statement.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10071 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-24 16:28:34 +00:00
Jean-Philippe Lang
46b1a49453 Use JQuery Dialog (#11445).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10070 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-22 15:42:29 +00:00
Jean-Philippe Lang
cd54e15a8d Use JQuery Datepicker (#11445).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10069 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-22 14:43:19 +00:00
Jean-Philippe Lang
6a2ca5e034 JQuery in, Prototype/Scriptaculous out (#11445).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10068 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-22 13:29:26 +00:00
Jean-Philippe Lang
387836f8aa Fixed that settings raises an error if not trackers exist (#11467).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10067 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-21 15:43:44 +00:00
Toshi MARUYAMA
1f84a8d83e code layout cleanup lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10066 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-21 13:03:29 +00:00
Toshi MARUYAMA
dc393cc480 replace tabs to spaces and fix indents at lib/redmine/helpers/gantt.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10065 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-21 12:53:06 +00:00
Toshi MARUYAMA
d41d493128 code layout cleanup app/views/gantts/show.html.erb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10064 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-21 11:00:59 +00:00
Toshi MARUYAMA
dadd294a25 code layout cleanup test/unit/lib/redmine/helpers/gantt_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10063 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-21 08:08:06 +00:00
Toshi MARUYAMA
bd85428b01 add copyright statement to test/functional/gantts_controller_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10062 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-21 07:12:18 +00:00
Toshi MARUYAMA
eb62603144 replace shoulda to Rails standard tests at functional gantts controller test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10061 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-21 07:03:36 +00:00
Jean-Philippe Lang
387f09d4f4 Removed -moz-border-radius styles.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10060 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-21 06:49:18 +00:00
Jean-Philippe Lang
47e496f049 Removes RJS from UsersController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10059 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-21 06:35:49 +00:00
Jean-Philippe Lang
d3bfbb800c Removes RJS from MembersController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10058 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-21 06:35:11 +00:00
Toshi MARUYAMA
9c3045eeda Russian translation for 1.4-stable and 2.0-stable updated by Александр Закревский (#11448)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10055 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-20 09:31:39 +00:00
Jean-Philippe Lang
3eaa998c28 Removes RJS from JournalsController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10054 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-19 19:10:18 +00:00
Jean-Philippe Lang
e8469e2c5b Removes RJS from MessagesController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10053 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-19 18:23:45 +00:00
Jean-Philippe Lang
3386008491 Removes RJS from VersionsController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10052 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-19 18:13:21 +00:00
Jean-Philippe Lang
dee586e9eb Removes RJS from WikisController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10051 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-19 18:13:08 +00:00
Jean-Philippe Lang
5b6732cfaf Removes RJS from IssuesController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10050 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-19 17:54:26 +00:00
Jean-Philippe Lang
b53f9c688b Fixed migration broken by r9977.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10049 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-19 17:34:37 +00:00
Jean-Philippe Lang
87da04c808 Removes RJS from RepositoriesController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10048 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-19 17:27:14 +00:00
Jean-Philippe Lang
38060a2cf0 Removes RJS from WatchersController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10047 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-19 17:17:10 +00:00
Jean-Philippe Lang
c178aded61 Test cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10046 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-19 17:07:43 +00:00
Jean-Philippe Lang
8553107016 Removes RJS from IssueRelationsController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10045 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-19 17:06:30 +00:00
Jean-Philippe Lang
21ee2e2cf2 Removes RJS from GroupsController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10044 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-19 16:57:59 +00:00
Jean-Philippe Lang
035805fbd0 Start removing the RJS stuff.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10043 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-19 16:43:33 +00:00
Jean-Philippe Lang
51d5a52029 Do not let is_private be required.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10042 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-19 16:21:28 +00:00
Jean-Philippe Lang
6668d7ebd1 Removed deprecated #labelled_tabular_form_for helper.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10041 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 19:14:35 +00:00
Jean-Philippe Lang
1c8d03c1e9 ApplicationHelper#labelled_remote_form_for deprecated.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10040 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 19:13:30 +00:00
Jean-Philippe Lang
c790f1ca41 ApplicationHelper#link_to_remote_if_authorized deprecated.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10039 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 19:10:08 +00:00
Jean-Philippe Lang
d4f7b4af6d Removes calls to link_to_remote.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10038 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 19:09:52 +00:00
Jean-Philippe Lang
690b0fb08c Removes calls to link_to_remote.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10037 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 18:54:19 +00:00
Jean-Philippe Lang
cc553764ba Removes a call to form_remote_tag.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10036 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 18:48:39 +00:00
Jean-Philippe Lang
705f96ccde Removes calls to remote_form_for.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10035 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 18:43:13 +00:00
Jean-Philippe Lang
cd39b12f2c Removes a call to form_remote_tag.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10034 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 18:35:25 +00:00
Jean-Philippe Lang
7e5bad993d Removes most of the ajax stuff on my page layout.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10033 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 18:26:10 +00:00
Jean-Philippe Lang
c9a46950de Removes calls to link_to_remote.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10032 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 18:01:14 +00:00
Jean-Philippe Lang
ff68fff80e Adds a helper for preview links.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10031 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 17:47:19 +00:00
Jean-Philippe Lang
bb2af97dcf Removes calls to link_to_remote.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10030 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 17:34:11 +00:00
Jean-Philippe Lang
ccc5f64a99 Removes calls to link_to_remote.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10029 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 16:50:10 +00:00
Jean-Philippe Lang
6f3c339e5e Removes a call to link_to_remote.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10028 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 16:47:30 +00:00
Jean-Philippe Lang
b0757bbdf6 Removes a call to link_to_remote.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10027 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 16:36:08 +00:00
Jean-Philippe Lang
a49d50614f Removes a call to link_to_remote.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10026 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 16:31:36 +00:00
Jean-Philippe Lang
7b3aaca83c Removes a call to link_to_remote.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10025 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 16:28:07 +00:00
Jean-Philippe Lang
922f1d5243 Removes a call to link_to_remote.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10024 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 16:24:23 +00:00
Toshi MARUYAMA
ee3478f389 Traditional Chinese translation updated by ChunChang Lo (#11436)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10023 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-18 03:50:31 +00:00
Toshi MARUYAMA
07546b4943 remove trailing white-space from app/models/changeset.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10022 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-17 23:55:32 +00:00
Toshi MARUYAMA
2b642c0662 Bulgarian translation updated by Ivan Cenov (#11433)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10021 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-17 22:50:45 +00:00
Toshi MARUYAMA
3e3714c2d6 Japanese translation updated by Go MAEDA (#11427)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10020 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-17 14:47:31 +00:00
Toshi MARUYAMA
b5a4446f18 fix disordered use of long sound in Japanese "user" translation (#11411)
Contributed by Kenichi Maehashi.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10019 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-17 05:25:46 +00:00
Toshi MARUYAMA
4fdbeea686 Simplified Chinese translation updated by Steven Wong (#11417)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10018 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-17 04:59:06 +00:00
Toshi MARUYAMA
bbb14cb57c fix wrong Japanese "label_attachment" translation (#11419)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10017 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-17 04:58:36 +00:00
Toshi MARUYAMA
07ce80be2d fix unnatural Japanese message when users failed to login (#11412)
Contributed by Kenichi Maehashi.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10016 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-17 04:58:04 +00:00
Jean-Philippe Lang
c3c7f1f900 Removed debug message.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10015 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-16 17:56:08 +00:00
Jean-Philippe Lang
fe95692f10 Test if convert binary is available.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10014 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-16 17:37:24 +00:00
Jean-Philippe Lang
537be80be2 Adds a macro for inserting thumbnails in formatted text (#3510).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10013 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-16 17:15:40 +00:00
Jean-Philippe Lang
5c2de4dfc9 Adds Attachment#title.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10012 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-16 16:42:23 +00:00
Jean-Philippe Lang
570e1b1d62 Removed assertion that is susceptible to fail if test runs slowly.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10011 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-16 16:35:21 +00:00
Jean-Philippe Lang
7f1fb7ce81 Don't show "Required" option for standard/custom fields that are always required.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10010 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-16 16:33:27 +00:00
Toshi MARUYAMA
5ac4b6670f Japanese translation added for default role names by Kenichi Maehashi (#11402)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10009 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-16 14:47:04 +00:00
Toshi MARUYAMA
898873a22d Fix Japanese mistranslation for "button_submit" (#11401)
Contributed by Kenichi Maehashi.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10007 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-16 13:16:28 +00:00
Toshi MARUYAMA
74ee5c078f German translation updated by Hannes Meier (#11404)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10006 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-16 13:15:59 +00:00
Toshi MARUYAMA
185175c78e German translation for configurable session lifetime and timeout updated by Hannes Meier (#11406, #11404)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10005 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-16 13:15:27 +00:00
Jean-Philippe Lang
ba647689f4 Additional tests for custom field formats.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10004 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 19:30:47 +00:00
Jean-Philippe Lang
471f631dbd Use named routes.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10003 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 19:14:23 +00:00
Jean-Philippe Lang
54d2b07bff Test for when group does not exist.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10002 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 19:05:34 +00:00
Jean-Philippe Lang
e23511076c No blank option for custom fields marked as required on workflow settings.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10001 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 16:57:04 +00:00
Jean-Philippe Lang
072475b8a5 Remember "Only display used statuses" checkbox value after update.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9997 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 15:50:57 +00:00
Jean-Philippe Lang
071cf55fc8 Hard-coded strings.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9996 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 15:46:53 +00:00
Jean-Philippe Lang
a7bdc5e0af Adds option for displaying all statuses on workflow permissions.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9995 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 15:46:14 +00:00
Jean-Philippe Lang
712e5be29f Find role and tracker only when param is present.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9994 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 15:39:36 +00:00
Jean-Philippe Lang
5097f51784 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9993 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 15:37:49 +00:00
Jean-Philippe Lang
8a3126e175 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9992 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 15:36:45 +00:00
Jean-Philippe Lang
2f55caa1ba Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9991 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 15:35:02 +00:00
Jean-Philippe Lang
4c8c5e9187 Display all fields if tracker statuses are not yet set.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9990 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 15:34:44 +00:00
Jean-Philippe Lang
7946f4a696 Adds a sorted scope to IssueStatus model.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9989 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 15:33:17 +00:00
Jean-Philippe Lang
cb09055d60 Colorize transitions.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9988 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 15:25:26 +00:00
Jean-Philippe Lang
9e06942ef0 Moved code for replacing permissions to WorkflowPermission model.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9987 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 15:05:34 +00:00
Jean-Philippe Lang
02e7025685 Adds tmp/thumbnails directory.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9986 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 14:56:38 +00:00
Jean-Philippe Lang
88e1ae892c ruby1.8 compatibility (#703, #3521).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9985 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 14:50:38 +00:00
Jean-Philippe Lang
7f0bb136ad Validate attachment description length (#11365).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9984 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 14:42:00 +00:00
Jean-Philippe Lang
391d9b14fb Rewrites assertions with assert_select.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9983 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 14:36:13 +00:00
Jean-Philippe Lang
e0fb60c6b5 Adds maxlength=255 attribute on attachment description input field (#11365).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9982 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 14:34:28 +00:00
Jean-Philippe Lang
6c1db9c3a8 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9981 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 14:28:18 +00:00
Jean-Philippe Lang
7c6582009a Fills locales (#703, #3521).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9980 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 14:19:42 +00:00
Jean-Philippe Lang
b636695631 Removed hard-coded strings (#703, #3521).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9979 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 14:19:01 +00:00
Jean-Philippe Lang
004a13b75c Routing tests for r9977.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9978 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 14:13:48 +00:00
Jean-Philippe Lang
d7b669e50b Workflow enhancement: editable and required fields configurable by role, tracker and status (#703, #3521).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9977 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-15 14:12:17 +00:00
Jean-Philippe Lang
54d55a360a Adds assertions on response status and body.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9976 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-14 08:31:45 +00:00
Jean-Philippe Lang
18f693f9f7 Fixed that 200 API responses have a body containing one space (#11388).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9975 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-14 08:13:55 +00:00
Etienne Massip
6bf60e8c20 Fixes transparency issue.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9974 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-11 00:17:45 +00:00
Etienne Massip
823ac010c5 File handling cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9973 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-11 00:14:56 +00:00
Etienne Massip
0dbe234226 Use tabs instead of spaces for consistency.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9972 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-10 20:27:06 +00:00
Etienne Massip
9c9b0a4150 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9971 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-10 20:23:49 +00:00
Etienne Massip
7502ac484e Make sure that file handle is freed when an error is raised to prevent access exception on subsequent deletion attempt.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9970 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-10 20:16:07 +00:00
Etienne Massip
e2851a8b2a Use 1.8.7 compatible @Pathname#to_s@ alias for @Pathname#to_path@.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9969 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-10 20:14:06 +00:00
Etienne Massip
c929ab5c16 Set temporary path cache variable as a String back again so that TCPDF handles error messages fine.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9968 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-10 19:53:03 +00:00
Jean-Philippe Lang
165c2be523 Fixed that link to the assignee is escaped twice on the issue view (#11352).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9967 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-09 16:46:22 +00:00
Toshi MARUYAMA
b9d7a02b51 Traditional Chinese translation updated by ChunChang Lo (#11350)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9966 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-09 09:59:38 +00:00
Toshi MARUYAMA
2984dc903c Bulgarian translation updated by Ivan Cenov (#11347)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9965 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-09 09:59:06 +00:00
Jean-Philippe Lang
5d90228866 Test failure.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9964 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-08 17:10:58 +00:00
Jean-Philippe Lang
2dbabde7f4 Adds Etags on attachments.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9963 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-08 15:26:40 +00:00
Jean-Philippe Lang
e74d4ecf5f Compute issue ids array only once.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9962 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-08 13:31:22 +00:00
Jean-Philippe Lang
23a1ef543f Show shared versions when editing issues from different projects with the context menu (#11345).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9961 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-08 13:19:46 +00:00
Jean-Philippe Lang
7acd04fb87 Tests should not change settings.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9949 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-08 12:23:47 +00:00
Jean-Philippe Lang
133ca59edb Removed unused helper.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9948 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-08 07:58:28 +00:00
Jean-Philippe Lang
1c825df549 Adds a scope for sorting groups.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9947 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-08 07:40:31 +00:00
Jean-Philippe Lang
c11f5a23fe Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9946 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-08 07:36:58 +00:00
Jean-Philippe Lang
ab96a29460 Fixed test failure.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9945 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-08 07:20:48 +00:00
Jean-Philippe Lang
c02594af96 Test failure.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9944 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 22:08:10 +00:00
Jean-Philippe Lang
193b571e67 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9943 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 18:27:34 +00:00
Jean-Philippe Lang
a1d0acd632 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9942 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 18:05:32 +00:00
Jean-Philippe Lang
6adf61fd02 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9941 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 17:55:54 +00:00
Jean-Philippe Lang
986ffb2434 Use named routes.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9940 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 17:45:12 +00:00
Jean-Philippe Lang
efc6abea07 Fixed that deleting the last reply of a topic does not update last_reply_id.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9939 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 15:09:57 +00:00
Jean-Philippe Lang
851fbaf750 Use named routes.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9938 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 14:39:29 +00:00
Jean-Philippe Lang
7b40767428 Deprecated :confirm => 'Text' option.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9937 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 14:36:49 +00:00
Jean-Philippe Lang
56666a41b8 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9936 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 13:59:26 +00:00
Jean-Philippe Lang
7a529b24ee Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9935 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 13:53:38 +00:00
Jean-Philippe Lang
b379397d95 Fills locales (#1006).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9934 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 13:48:48 +00:00
Jean-Philippe Lang
a0c495b953 Displays thumbnails of attached images of the issue view (#1006).
This behaviour can be turned on/off in Settings -> Display (off by default). Thumbnail size can be configured there too.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9933 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 13:48:07 +00:00
Jean-Philippe Lang
b0bd506201 Fills locales (#8978).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9932 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 09:37:40 +00:00
Jean-Philippe Lang
3b207ee77c Adds a configurable timeout for LDAP authentication (#8978).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9931 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 09:36:04 +00:00
Jean-Philippe Lang
553066e804 Fixed test case name.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9930 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 09:26:26 +00:00
Jean-Philippe Lang
76a4b81cf3 Fixed: Openid registration form should not require user to enter password (#11331).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9929 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 06:22:35 +00:00
Jean-Philippe Lang
6086aa1be4 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9928 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 05:42:52 +00:00
Jean-Philippe Lang
8a080d8e53 Enable openid in test case setup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9927 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 05:41:58 +00:00
Jean-Philippe Lang
6351631ec6 Moved openid functional tests for their own test case.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9926 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 05:40:01 +00:00
Jean-Philippe Lang
5981aee06d Fixed: escaped link in conflict resolution form (#11341).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9925 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 05:23:52 +00:00
Jean-Philippe Lang
232edc6237 Ignore emails with "Auto-Submitted: auto-*" header (#11338).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9924 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-07 05:08:58 +00:00
Toshi MARUYAMA
d4dd35a78c Traditional Chinese translation updated by ChunChang Lo (#11336)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9923 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-06 13:08:14 +00:00
Toshi MARUYAMA
f4a2d1f342 Bulgarian translation updated by Ivan Cenov (#11335)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9922 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-06 13:07:36 +00:00
Toshi MARUYAMA
232d57450a sort files in locales:update rake task
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9921 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-06 13:06:48 +00:00
Jean-Philippe Lang
196f96fff1 Adds Private filter to the issue list (#8577).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9920 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-05 13:51:56 +00:00
Jean-Philippe Lang
1d7c0eb7c0 Makes Private column available on the issue list (#8577).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9919 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-05 13:29:07 +00:00
Jean-Philippe Lang
bd927eea88 Perf: don't load preferences for the anonymous user.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9917 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-05 13:05:11 +00:00
Jean-Philippe Lang
a1f17b982c Perf: use a custom decoder for Role#permissions instead of YAML.load.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9916 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-05 13:04:38 +00:00
Toshi MARUYAMA
cc2ee90f97 sort files in locales:check_interpolation and locales:check_parsing_by_psych rake tasks
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9915 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-05 12:52:28 +00:00
Toshi MARUYAMA
1eebd030ca generate translation files (#1091)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9914 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-05 12:52:06 +00:00
Jean-Philippe Lang
4cecc1beed Ability to disable standard fields on a per tracker basis (#1091).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9912 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-05 12:20:07 +00:00
Toshi MARUYAMA
51a1bf90dd fix Japanese mistranslation for 'label_language_based' (#11328)
Contributed by Go MAEDA.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9911 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-05 11:22:33 +00:00
Jean-Philippe Lang
ad68830a1b Fixed test failure.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9910 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-04 19:24:25 +00:00
Jean-Philippe Lang
1d1aef9d61 Fixed: unified diff link broken on specific file/revision diff (#11325).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9909 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-04 19:17:43 +00:00
Jean-Philippe Lang
d00ba6d2bb Fixed: Can't filter for negative numeric custom field (#11307).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9908 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-04 18:50:09 +00:00
Jean-Philippe Lang
86617fc437 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9907 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-04 18:28:05 +00:00
Jean-Philippe Lang
65b4515e1a Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9906 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-04 17:55:46 +00:00
Jean-Philippe Lang
a8e5ba0007 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9905 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-04 17:37:03 +00:00
Jean-Philippe Lang
df41255105 Perf: don't load parent message for generating a link.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9904 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-07-04 17:34:37 +00:00
Toshi MARUYAMA
bf69f9af9f Bulgarian translation updated by Ivan Cenov (#11272)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9903 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-27 13:01:03 +00:00
Toshi MARUYAMA
0c435ce630 Traditional Chinese translation updated by ChunChang Lo (#11268)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9902 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-27 13:00:37 +00:00
Jean-Philippe Lang
3e5dfed5d6 Typo in french locale.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9901 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-26 22:13:18 +00:00
Jean-Philippe Lang
a265e323ad Slight change to french locale.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9900 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-26 22:05:16 +00:00
Etienne Massip
56cf381357 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9899 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-26 17:36:29 +00:00
Jean-Philippe Lang
eb8f455c13 More specific flash message when creating a user account.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9898 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-26 17:14:44 +00:00
Jean-Philippe Lang
6c9401b624 Additional "Log time" link on project overview (#11181).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9897 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-26 17:05:02 +00:00
Jean-Philippe Lang
f9f5e9e7c6 Fixed: Link is escaped in wiki added/updated notification email (#11262).
Patch by Łukasz Jachymczyk.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9896 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-26 17:03:08 +00:00
Jean-Philippe Lang
6529035ee1 Fixed that wiki diff may produce html (#11209).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9895 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-26 16:57:09 +00:00
Jean-Philippe Lang
7f6ac407ef Fixed that root projects are escaped twice in the project drop down (#11217).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9894 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-26 16:54:30 +00:00
Toshi MARUYAMA
0ecab46229 Japanese translation updated by Go MAEDA (#11260)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9892 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-26 10:55:04 +00:00
Toshi MARUYAMA
c38c3c9436 Simplified Chinese translation updated by Steven Wong (#11259)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9891 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-26 10:37:24 +00:00
Toshi MARUYAMA
2007543539 Simplified Chinese translation updated by Steven Wong (#11261)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9890 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-26 10:36:58 +00:00
Toshi MARUYAMA
72e5b638e9 Traditional Chinese translation added and changed by ChunChang Lo (#11256)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9889 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-26 03:26:58 +00:00
Toshi MARUYAMA
66390fd0e6 Bulgarian translation updated by Ivan Cenov (#11254)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9888 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-25 23:29:57 +00:00
Jean-Philippe Lang
21ac4a3d0e Makes Redmine.pm handle project status (#3640).
Repositories of archived projects are no longer accessible. Repositories of closed projects are read-only.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9887 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-25 20:08:49 +00:00
Jean-Philippe Lang
2ceb6b8230 Moved logic relative to project status from User to Project model (#3640).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9886 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-25 18:44:25 +00:00
Jean-Philippe Lang
7fb2ddefde Visual hint for closed projects on project list (#3640).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9885 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-25 18:39:23 +00:00
Jean-Philippe Lang
8334651c4d Fills locales (#3640).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9884 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-25 17:50:14 +00:00
Jean-Philippe Lang
ac56c0c99c Ability to close projects (read-only) (#3640).
A new permission (Close/reopen project) is available to give non-admin users the ability to close their projects.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9883 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-25 17:49:35 +00:00
Toshi MARUYAMA
5961a1e70d add missing fixture to test/unit/query_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9882 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-23 23:29:42 +00:00
Etienne Massip
1221b79e98 Removed test line committed accidently (#11073).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9881 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-23 16:51:54 +00:00
Etienne Massip
0cc817fba3 Use base class name as customized type to fix @UserCustomField#order_statement@.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9880 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-23 15:47:19 +00:00
Jean-Philippe Lang
7ed2c481d8 Reversed order of priorities on the issue summary page (#11205).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9879 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-20 19:24:58 +00:00
Jean-Philippe Lang
26e75568cf Makes repository url read-only after saving.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9878 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-20 18:45:51 +00:00
Toshi MARUYAMA
37cbbcea71 Korean translation updated by Kihyun Yun (#11201)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9877 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-20 08:27:26 +00:00
Jean-Philippe Lang
585d08765e Safe attributes for repositories.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9876 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-19 19:47:54 +00:00
Jean-Philippe Lang
3b854bee59 Make repository identifier accept underscores (#11192).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9875 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-19 19:12:17 +00:00
Toshi MARUYAMA
6c6aae07a2 fix test_global_index of functional activities controller test fails around UTC 00:00
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9871 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-19 00:43:10 +00:00
Toshi MARUYAMA
9c060fe33a scm: git: fix unable to run unit lib test if git binary is not available on Windows
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9870 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-18 23:57:27 +00:00
Jean-Philippe Lang
d3aa9c6a7b Removed invalid nested p tags.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9869 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-18 21:40:16 +00:00
Jean-Philippe Lang
a787325ed2 Updates for 2.0.3 release.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9864 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-18 18:40:05 +00:00
Jean-Philippe Lang
2311f80c5d Fix: Unable to run unit and functional tests if git binary is not available.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9861 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-18 18:33:33 +00:00
Jean-Philippe Lang
f62507dae5 Fixed that deleting a project with subtasks may fail (#11185).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9858 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-18 17:16:13 +00:00
Toshi MARUYAMA
9e878a9384 Traditional Chinese translation updated by ChunChang Lo (#11186)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9856 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-18 03:45:52 +00:00
Toshi MARUYAMA
e3eab40ec4 fix PDF export tables problems (#10688)
Contributed by Jun NAITOH.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9853 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-17 13:05:05 +00:00
Toshi MARUYAMA
b93e040bb8 fix unit test fails on Ruby 1.8 and JRuby (#2190)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9850 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-17 09:34:12 +00:00
Etienne Massip
dbdc9b9da7 Display dates using user's locale if available (#2190).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9838 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-16 21:45:47 +00:00
Jean-Philippe Lang
2c07b478bb Fixed that time entries should be sorted by date and created_on (#11178).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9837 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-16 20:09:12 +00:00
Jean-Philippe Lang
542b355210 Fixed that sticky messages are not displayed first (#11170).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9836 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-16 19:34:19 +00:00
Etienne Massip
897e83a556 Added missing local variable declaration.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9835 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-14 21:12:03 +00:00
Etienne Massip
768e36caf0 Added a min-width to revision graph holder style to fix its rendering in Chrome (#11061).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9832 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-14 20:57:28 +00:00
Jean-Philippe Lang
76eeb64d1a Fixed that time report raises a SQL error if there are multiple CustomValue for a time entry (#11160).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9831 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-14 10:47:04 +00:00
Jean-Philippe Lang
c804151780 Upgrade to Rails 3.2.6 (#11162).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9830 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-14 10:33:30 +00:00
Jean-Philippe Lang
e199c4b823 Adds support for Git's smart HTTP protocol to Redmine.pm (#4905).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9829 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-14 08:13:53 +00:00
Jean-Philippe Lang
9eef74f09a Additional tests for Redmine.pm.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9828 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-14 08:04:44 +00:00
Jean-Philippe Lang
48a557a79e Use a random filename.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9827 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-12 19:59:28 +00:00
Jean-Philippe Lang
4fda1f6cd1 Start implementing tests for Redmine.pm perl module.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9826 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-12 19:33:09 +00:00
Jean-Philippe Lang
12ea96066b Doc cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9825 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-12 19:14:06 +00:00
Jean-Philippe Lang
13dced9d76 Run only unit, functional then integration tests for coverage.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9824 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-12 19:04:24 +00:00
Jean-Philippe Lang
667693b32c Fixed that Subversion#load_entries_changesets raises an error if entries is nil.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9823 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-12 17:43:23 +00:00
Jean-Philippe Lang
965ef33192 Fixed that lines with spaces only before headings break wiki section extraction (#11133).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9822 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-11 17:51:14 +00:00
Toshi MARUYAMA
462d0ddfe8 Simplified Chinese translation updated (#11130)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9817 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-11 06:30:23 +00:00
Toshi MARUYAMA
9989ae5a06 Bulgarian translation updated by Ivan Cenov (#11129)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9816 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-11 06:29:59 +00:00
Toshi MARUYAMA
89feb8a3fb Japanese translation update by Go MAEDA (#11128)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9815 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-11 06:29:33 +00:00
Toshi MARUYAMA
fdd36ce713 fix test_user_index of activities controller test fails at Japanese morning and afternoon
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9814 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-11 04:42:54 +00:00
Toshi MARUYAMA
21dac7287b remove trailing white-spaces from config/settings.yml
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9813 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-11 01:25:45 +00:00
Toshi MARUYAMA
74a2c5a521 scm: mercurial: use Rails3 ActiveRecord syntax with same as git r9807 at find_changeset_by_name
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9812 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-11 00:18:24 +00:00
Toshi MARUYAMA
96f5d315ea add some avatar tests
* the default size was 50px
* class="gravatar"'
* some tests to test the default and option parsing

Contributed Felix Schäfer.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9811 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-11 00:18:09 +00:00
Jean-Philippe Lang
9b63117856 Extract code from view.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9809 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-10 19:19:22 +00:00
Jean-Philippe Lang
888d284136 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9808 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-10 18:56:42 +00:00
Jean-Philippe Lang
f673027bc1 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9807 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-10 18:38:31 +00:00
Jean-Philippe Lang
8a491dbae9 Faster changesets loading for subversion.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9806 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-10 18:32:48 +00:00
Jean-Philippe Lang
7c105ec9e9 Adds a method to load changesets for repository entries.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9805 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-10 18:32:09 +00:00
Jean-Philippe Lang
9b60214b3a Fixed that Repository#entries returns an Array.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9804 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-10 17:01:33 +00:00
Jean-Philippe Lang
4d12bea397 Make sure we look for a feeds token.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9801 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-10 13:29:47 +00:00
Jean-Philippe Lang
490bfc2934 Stringify tokens.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9800 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-10 13:27:51 +00:00
Jean-Philippe Lang
c47293edb1 Stringify User.try_to_login arguments.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9799 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-10 13:24:28 +00:00
Jean-Philippe Lang
be4ad60058 Make sure that #api_key_from_request returns a String.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9798 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-10 13:23:01 +00:00
Jean-Philippe Lang
74645eb017 Configurable session lifetime and timeout (#6597).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9797 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-10 13:16:56 +00:00
Jean-Philippe Lang
26ff9e1c26 Fixed: German umlauts in Subject get striped with ruby1.8 (#11065).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9796 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-10 08:15:22 +00:00
Jean-Philippe Lang
c73823cd0f Set human size precision to Rails' default which is now 3 (#11118).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9794 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-09 14:09:23 +00:00
Jean-Philippe Lang
8d4e528f22 Force rendering of activity view if activity items count changed.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9787 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-09 10:53:17 +00:00
Jean-Philippe Lang
898a4164a0 Fixed that link to user is escaped in activity title (#11124).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9786 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-09 10:32:34 +00:00
Jean-Philippe Lang
d21bacb01d Fixed that content_for does not work in Hook.render_on (#11105).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9785 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-09 09:19:15 +00:00
Jean-Philippe Lang
8b381e3bd4 Restored KB instead of kB (#11118).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9784 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-09 07:57:38 +00:00
Jean-Philippe Lang
9f788310b1 Fixed that custom_fields property is ignored for time entries in REST API (#11112).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9783 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-09 07:55:26 +00:00
Jean-Philippe Lang
7fba8bc682 Change in Rails' for handling localized number precision (#11118).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9782 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-09 07:46:07 +00:00
Jean-Philippe Lang
2314e41474 Priorities have the same position and can't be reordered (#11098).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9781 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-09 07:27:43 +00:00
Jean-Philippe Lang
77bac4b14d Ability to set default column order in issue list (#11068).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9780 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-08 18:50:22 +00:00
Toshi MARUYAMA
b7a435f7a0 fix German "field_multiple" translation glitch by Andreas Deininger (#11113)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9777 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-08 07:45:39 +00:00
Jean-Philippe Lang
234e5d59ac Show repository images inline when clicking 'View' (#10362).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9776 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-07 17:00:29 +00:00
Jean-Philippe Lang
44ea32afba Updates for 2.0.2 release.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9770 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-05 17:19:00 +00:00
Jean-Philippe Lang
c8226509fd Fixed that wiki start page can't be changed (#11085).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9768 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-03 22:20:33 +00:00
Jean-Philippe Lang
327d5d2132 Makes users optional in GET /groups/:id (#8981).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9765 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-03 13:32:14 +00:00
Jean-Philippe Lang
1c5b214056 Upgrade to Rails 3.2.5 (#11084).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9764 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-03 13:16:16 +00:00
Jean-Philippe Lang
5bfe80949c Rails 3.2.5 compatibility.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9763 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-03 12:29:21 +00:00
Jean-Philippe Lang
0523ac387b Test failure due to a regression in Rails 3.2.5.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9762 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-03 12:15:55 +00:00
Jean-Philippe Lang
ef01cada8b Fixed argument to repository_path that triggers an error with Rails 3.2.5.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9761 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-03 12:02:46 +00:00
Jean-Philippe Lang
182a215c7b Renamed #changes association to #ticket_changes.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9760 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-03 11:47:26 +00:00
Jean-Philippe Lang
2cbf9c9cc4 Renamed #changes association to #filechanges (clash with AR::Base.changes that triggers errors with Rails 3.2.5).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9759 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-03 11:46:58 +00:00
Jean-Philippe Lang
dd9c2cafa7 REST Api for Groups (#8981).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9758 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-03 10:40:32 +00:00
Jean-Philippe Lang
3142183b30 Fixed that Redmine.pm does not support "bind as user" ldap authentication (#11046).
Patch contributed by Adi Kriegisch.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9755 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-03 08:49:46 +00:00
Toshi MARUYAMA
ba25d27e3a scm: git: skip Latin-1 path tests on Git for Windows above 1.7.10
Git for Windows (msysGit) changed internal API from ANSI to Unicode in 1.7.10.
http://code.google.com/p/msysgit/issues/detail?id=80

So, Latin-1 path tests fail on Japanese Windows

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9750 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-02 18:36:23 +00:00
Toshi MARUYAMA
69b46ab1be scm: mercurial: remove comment about Mercurial 0.9.5 compatibility from redminehelper.py
Redmine supports Mercurial 1.2 or higher from r7650.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9749 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-02 10:39:27 +00:00
Jean-Philippe Lang
dd1cb4a5bf Adds #find_group filter.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9748 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-01 19:41:06 +00:00
Jean-Philippe Lang
d58e5a0a1e Removed auto-generated comments.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9747 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-01 19:07:22 +00:00
Jean-Philippe Lang
9f531a4380 Use safe_attributes in GroupsController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9746 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-01 19:06:16 +00:00
Jean-Philippe Lang
733fef458c Replaced group[lastname] parameter with group[name].
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9745 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-01 18:24:33 +00:00
Etienne Massip
121ce2a390 Use time_zone_select specific helper.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9744 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-01 13:38:03 +00:00
Etienne Massip
fc7b790081 Get rid of ActiveSupport::Concern InstanceMethods deprecation warnings.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9743 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-30 18:33:26 +00:00
Jean-Philippe Lang
d915a5e36d Adds missing require 'rubygems' (#11051).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9742 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-30 17:56:39 +00:00
Jean-Philippe Lang
4ee133e77e Fixed that project, issue and activity should be preserved when logging time with "Create and continue" (#11038).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9741 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-29 18:54:26 +00:00
Jean-Philippe Lang
53a0cee57a Fixed that logging time inside redirects at global time logging (#11038).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9740 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-29 17:07:07 +00:00
Jean-Philippe Lang
251d62c2bf Adds redmine:plugins:test rake tasks for running plugins tests.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9738 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-28 10:02:24 +00:00
Jean-Philippe Lang
afbff44fb4 Fixes test templates for plugins.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9737 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-28 09:00:21 +00:00
Jean-Philippe Lang
3ba6718805 Fixed test_helper template for plugins.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9736 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-28 08:40:20 +00:00
Toshi MARUYAMA
e1268faa4a code layout cleanup app/views/users/_mail_notifications.html.erb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9735 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-28 08:24:46 +00:00
Toshi MARUYAMA
cfaa0fc23e fix project list is not shown on Email notifications (#11032)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9734 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-28 08:24:31 +00:00
Jean-Philippe Lang
cfddd2ff48 Updates for 2.0.1 release.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9731 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-28 07:23:48 +00:00
Toshi MARUYAMA
87783362cf code layout cleanup test/functional/users_controller_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9730 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-28 07:07:00 +00:00
Jean-Philippe Lang
9aef7a3242 Fixed test failures on wiki_page updated_on eager loading (#10996).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9727 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-26 19:35:25 +00:00
Jean-Philippe Lang
189be55235 Fixed time zone issues introduced by r9719 (#10996).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9726 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-26 12:07:56 +00:00
Jean-Philippe Lang
84084b0168 Restores local time zone for timestamps for 1.x compatibility (#10996).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9719 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-26 09:12:04 +00:00
Jean-Philippe Lang
3a4a708d51 Fixed that plugin model generator does not generate the migration (#11024).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9718 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-26 08:50:32 +00:00
Jean-Philippe Lang
e4332ba35f Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9717 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-25 20:54:11 +00:00
Jean-Philippe Lang
d664fdcde9 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9716 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-25 20:51:43 +00:00
Jean-Philippe Lang
aa18cd54c7 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9715 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-25 20:43:18 +00:00
Jean-Philippe Lang
59cbc68dde Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9714 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-25 20:18:55 +00:00
Jean-Philippe Lang
221585c7b5 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9713 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-25 19:48:22 +00:00
Jean-Philippe Lang
e7b9a9c6ff Replace RAILS_DEFAULT_LOGGER with ::Rails.logger (#11013).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9712 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-25 16:54:23 +00:00
Jean-Philippe Lang
472d3a00a3 Fixed that some input fields are escaped on validation failures (#11027).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9711 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-25 16:50:25 +00:00
Jean-Philippe Lang
235238b583 Fixed that project identifier can always be updated (#11028).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9710 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-25 16:43:18 +00:00
Jean-Philippe Lang
73500a349b Fixed that the issue link is escaped on my page spent time (#10991).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9709 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-25 16:34:40 +00:00
Toshi MARUYAMA
b587f693ab Korean translation added and changed by jongyoon Choi (#10988)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9708 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-25 13:50:12 +00:00
Jean-Philippe Lang
c77370a9eb Use a modal form to create a category from the issue form.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9707 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-24 17:31:53 +00:00
Jean-Philippe Lang
6206c88dfa Fixed that updated_on is not updated when updating an issue (#10964).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9703 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-21 18:23:03 +00:00
Jean-Philippe Lang
1ab9e42b9b Fixed that columns selection in not displayed on the custom query form (#10972).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9702 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-21 16:55:48 +00:00
Etienne Massip
ae8830ed61 Added yard to development gems.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9701 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-18 13:52:49 +00:00
Jean-Philippe Lang
1996af104d Fixed that watchers delete links are escaped on the issue view (#10932).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9700 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-15 19:33:42 +00:00
Jean-Philippe Lang
e68043e13c Fixed that creating a new version from project settings does not redirect to versions tab (#10923).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9699 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-15 17:25:27 +00:00
Jean-Philippe Lang
05481fe96b Updates for 2.0.0 release.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9696 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-14 22:17:57 +00:00
Jean-Philippe Lang
034539c988 CHANGELOG updated.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9691 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-13 19:08:25 +00:00
Jean-Philippe Lang
48c28f717d Removed delete_broken_cookies filter.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9689 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-13 11:26:21 +00:00
Jean-Philippe Lang
23a06ec022 Restored List-Id header in email notifications (#10888).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9687 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-13 10:44:41 +00:00
Jean-Philippe Lang
4f0aa2432c Fixes custom_field_tag helper broken by r9682.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9686 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-13 10:21:24 +00:00
Jean-Philippe Lang
426b1d6fcd Fixed that option tags are escaped.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9683 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-13 09:00:26 +00:00
Jean-Philippe Lang
478a549356 Use content_tag helper.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9682 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-13 08:47:54 +00:00
Jean-Philippe Lang
69e55fb1ef Fixed that enumerations option tags are escaped.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9681 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-13 08:45:15 +00:00
Jean-Philippe Lang
46400e355e Use content_tag helper.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9680 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-13 08:42:19 +00:00
Jean-Philippe Lang
dc7569ecae Fixed that group filter is escaped on users index.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9679 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-13 08:38:35 +00:00
Jean-Philippe Lang
7c97832002 Redirect to referer when deleting a user (#10865).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9678 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-13 08:33:55 +00:00
Jean-Philippe Lang
46e48ad3f7 Updated INSTALL and UPGRADING docs with new rake task (#10891).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9677 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-12 13:14:53 +00:00
Jean-Philippe Lang
a59257dfb6 Fixed #set_scm in reposman (#10837).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9675 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-12 12:54:46 +00:00
Jean-Philippe Lang
9382d856b4 Adds script synopsis.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9674 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-12 12:50:15 +00:00
Jean-Philippe Lang
30d2bed1fe Fixed reposman arguments parsing (#10837).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9673 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-12 12:47:51 +00:00
Jean-Philippe Lang
a99c61b471 Adds all/none operators to text custom field filters (#9790).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9671 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-12 12:23:20 +00:00
Jean-Philippe Lang
1d677ac968 Restored :generate_session_store as a deprecated rake task (#10891).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9670 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-12 07:48:21 +00:00
Toshi MARUYAMA
1ccc975f3f set svn:eol-style native to Albanian translation files (#10875)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9667 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-11 04:33:01 +00:00
Toshi MARUYAMA
dca52d6729 Albanian translation added by Dimitri Toslluku (#10875)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9666 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-11 04:25:43 +00:00
Jean-Philippe Lang
1831861eac Tests for Setting.per_page_options_array.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9665 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-10 18:53:32 +00:00
Jean-Philippe Lang
5bd90548b0 Adaptive display of "Per page" links (#7720).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9664 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-10 18:51:11 +00:00
Toshi MARUYAMA
0bb937152b change mailer model method comments to Rails3 style
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9663 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-09 15:14:45 +00:00
Toshi MARUYAMA
804864beca replace Mailer deliver syntax to Rails3 style at reminders method of mailer model
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9662 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-09 15:14:30 +00:00
Toshi MARUYAMA
2ed78d95f6 code layout cleanup app/views/wiki/edit.html.erb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9661 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-09 14:18:53 +00:00
Toshi MARUYAMA
678469cf09 additional comment at config/environments/test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9660 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-09 13:58:59 +00:00
Toshi MARUYAMA
11746c44f8 set svn:executable '*' to script/*
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9659 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-09 13:10:04 +00:00
Toshi MARUYAMA
411f0874ab replace comment "config/environment.rb" to "config/application.rb" at head of config/environments/*.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9658 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-09 12:04:10 +00:00
Toshi MARUYAMA
0ba0a7bcc9 remove commented out Rails2 including from lib/redmine/hook.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9657 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-09 10:50:10 +00:00
Jean-Philippe Lang
ddfb2315aa Replaced "Allow users to unsubscribe" with "Allow users to delete their own account" (#10787).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9654 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-08 11:03:45 +00:00
Jean-Philippe Lang
1ad003dcc7 Fixed that REST Uploads fail with fastcgi (#10832).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9652 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-08 10:11:09 +00:00
Jean-Philippe Lang
7b6d11ed6a Removed comments.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9651 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-07 17:24:20 +00:00
Jean-Philippe Lang
04fe0412e1 Use optparse instead rdoc/usage in rdm-mailhandler (#10837).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9650 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-07 17:23:30 +00:00
Jean-Philippe Lang
03e9c51776 Formatting.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9649 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-06 21:18:31 +00:00
Jean-Philippe Lang
3710bbfda1 Use optparse instead rdoc/usage in reposman (#10837).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9648 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-06 21:16:54 +00:00
Jean-Philippe Lang
df7ddf5c0e Use uppercase NAME and VERSION environment variables for plugin migration tasks (#10838).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9647 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-06 21:03:30 +00:00
Toshi MARUYAMA
31d2d1284a remove redundant code from app/models/mail_handler.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9646 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-06 13:50:30 +00:00
Jean-Philippe Lang
f6882cd69e Stub Mailer with mocha.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9645 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-06 08:43:44 +00:00
Jean-Philippe Lang
18852b765a Trackers should be sorted by position not by name.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9644 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 16:21:22 +00:00
Jean-Philippe Lang
ee8dcab9db Fixed that activities option tags on the time entry bulk edit form are escaped.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9643 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 16:09:27 +00:00
Toshi MARUYAMA
02f704bb01 add Copyright statement to test/integration/repositories_git_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9642 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 14:48:45 +00:00
Toshi MARUYAMA
f08b648cce fix error of AdminControllerTest test_test_email_failure_should_display_the_error
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9641 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 14:34:16 +00:00
Jean-Philippe Lang
19e56045dd Fixed deprecated render calls in Mailer.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9640 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 13:21:58 +00:00
Jean-Philippe Lang
6fc909a402 Adds a deprecation warning to Mailer.deliver_*.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9639 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 13:17:18 +00:00
Toshi MARUYAMA
7af8d7caf0 replace Mailer deliver syntax to Rails3 style
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9638 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 13:07:12 +00:00
Jean-Philippe Lang
e876d1bfc0 Changes RedMine to Redmine in copyright notices.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9637 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 13:02:45 +00:00
Jean-Philippe Lang
ba5a052c8c Copyright update.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9636 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 12:56:53 +00:00
Toshi MARUYAMA
6e7eadf9fb move unit mailer test last_email method to the bottom and change to private
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9635 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 12:20:18 +00:00
Toshi MARUYAMA
5ce2987ea9 add missing fixture to test/unit/mailer_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9634 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 12:20:01 +00:00
Jean-Philippe Lang
a3c25c18d7 Code cleanup, reuse the visible scope.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9633 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 09:54:50 +00:00
Jean-Philippe Lang
61a1fa1b6e Do not trigger model validations when rebuilding the nested set (#10829).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9632 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 09:39:38 +00:00
Jean-Philippe Lang
1ab261dda6 Use Mail instead of TMail in MailHandler.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9630 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 09:19:23 +00:00
Toshi MARUYAMA
255a84878d svn propset "svn:eol-style" native test/integration/repositories_git_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9629 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 05:34:17 +00:00
Toshi MARUYAMA
6bcbdd44fc route: scm: fix diff of two revisions
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9628 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 05:29:58 +00:00
Toshi MARUYAMA
66d62504ef test: route: scm: move changes action tests to non revisions path tests
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9627 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 05:29:43 +00:00
Toshi MARUYAMA
17d19febc6 fix typo of integration users test
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9626 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 05:29:28 +00:00
Toshi MARUYAMA
b0414ec1fb route: scm: split entry and raw actions
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9625 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-05 01:01:29 +00:00
Toshi MARUYAMA
569e1b37cc model: convert news finder to Rails3 syntax
Contributed by Felix Schäfer.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9624 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-04 23:35:29 +00:00
Toshi MARUYAMA
bef28f7dab test: switch to Rails3 Active Record syntax at test_destroy of unit/repository_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9623 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-04 23:07:10 +00:00
Toshi MARUYAMA
49fc255b48 test: switch to Rails3 Active Record syntax at unit/query_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9622 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-04 23:06:47 +00:00
Toshi MARUYAMA
6c6467879a scm: fix revision graph left padding
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9621 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-04 17:07:38 +00:00
Jean-Philippe Lang
9f396a6dfb Fixed undefined method `<=>' for nil:NilClass when sorting repositories with nil identifiers (#10827).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9619 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-04 16:57:15 +00:00
Toshi MARUYAMA
ad8193dcde fix label_for_field of LabelledFormBuilder always has class="error" in label tag
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9618 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-04 14:33:35 +00:00
Toshi MARUYAMA
b4350ca91a route: scm: fix git and mercurial changes action
If branch name has special character, "View revisions" link has route error.
For example, Redmine Mercurial hgsubversion mirror has "../sandbox/rails-3.2" named branch.

Git default branch of bare repository is defined at HEAD.
In most cases, it is *master*.
Mercurial GUI standard behavior is showing all revisions on top page.
So, Redmine default branch is *nil*.
Mercurial top page "View revisions" link has route error.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9617 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-03 14:49:29 +00:00
Toshi MARUYAMA
2c28d6b5d1 scm: git: fix creating and updating repository
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9616 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-03 11:48:33 +00:00
Jean-Philippe Lang
36ee2b24bd Load rake tasks from Redmine plugins (#10816).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9615 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-02 16:30:16 +00:00
Jean-Philippe Lang
d2278b63a1 Fixed path for loading plugin Gemfile (#10811).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9614 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-02 16:20:32 +00:00
Toshi MARUYAMA
d658ab22d6 scm: fix broken main repository 'root' link
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9613 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-02 15:58:03 +00:00
Toshi MARUYAMA
1446c9b7f0 scm: fix git and mercurial branch list box action
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9612 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-02 13:19:16 +00:00
Toshi MARUYAMA
9be6dfbe10 code layout clean up test/integration/routing/repositories_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9611 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-02 13:18:56 +00:00
Jean-Philippe Lang
38011c0fb1 Fixed error on commits per month graph (#10806).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9610 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-01 21:12:47 +00:00
Jean-Philippe Lang
d1372107e5 Updated test for r9608.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9609 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-01 18:01:21 +00:00
Jean-Philippe Lang
c085367bb6 Adds css class to custom field input tags.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9608 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-01 16:50:42 +00:00
Jean-Philippe Lang
bebe429472 Fixed the path displayed in error message.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9605 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-01 15:50:16 +00:00
Jean-Philippe Lang
0491488554 Updates dispatch.fcgi.example to work with Rails3 and removes CGI handlers.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9604 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-01 15:48:46 +00:00
Jean-Philippe Lang
785825900a Adds environment information display to /admin/info.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9603 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-01 14:49:53 +00:00
Toshi MARUYAMA
017d974dd8 remove trailing white-spaces from test/unit/mailer_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9602 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-01 12:45:39 +00:00
Jean-Philippe Lang
5b680625c1 Adds a simple script/about.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9601 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-01 11:41:15 +00:00
Jean-Philippe Lang
6fca028905 Make sure we don't boot with plugins in vendor/plugins.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9600 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-01 10:42:25 +00:00
Jean-Philippe Lang
b097a1753e Let redmine:plugins:assets mirror a single plugin assets with name=.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9599 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-01 10:25:22 +00:00
Jean-Philippe Lang
f54ecfc55f Fixed that sidebar with hook content only should not be hidden.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9598 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-01 10:19:06 +00:00
Jean-Philippe Lang
45093230a9 Adds deprecated tasks for plugins migration.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9597 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-01 09:02:34 +00:00
Toshi MARUYAMA
f4b9d2a7ee route: remove duplicate repository committers
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9596 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-01 05:08:07 +00:00
Toshi MARUYAMA
e1920cc9e4 recovery base.html.erb "call_hook :view_layouts_base_sidebar" changed in Rails3 r9528
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9595 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-05-01 03:58:53 +00:00
Jean-Philippe Lang
f10fed295a Fixed generated shebang in script/rails.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9594 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-30 18:52:19 +00:00
Toshi MARUYAMA
0fcc82482e Simplified Chinese translation updated (#10800)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9591 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-30 13:10:42 +00:00
Toshi MARUYAMA
ee4928d17c remove trailing white-spaces from lib/tasks/ciphering.rake
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9590 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 13:26:54 +00:00
Toshi MARUYAMA
8a67fe30af remove trailing white-spaces from lib/tasks/deprecated.rake
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9589 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 13:26:26 +00:00
Toshi MARUYAMA
db9a2c1c58 remove trailing white-spaces from lib/tasks/ci.rake
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9588 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 13:25:40 +00:00
Toshi MARUYAMA
767a057333 remove trailing white-spaces from lib/tasks/redmine.rake
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9587 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 13:25:07 +00:00
Toshi MARUYAMA
30ceec20a6 remove trailing white-spaces from lib/tasks/reminder.rake
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9586 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 13:24:34 +00:00
Toshi MARUYAMA
910cb8ff06 replace tabs to spaces at lib/tasks/migrate_from_mantis.rake
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9585 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 13:23:59 +00:00
Toshi MARUYAMA
6a1a4e006d remove trailing white-spaces from lib/tasks/migrate_from_mantis.rake
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9584 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 12:21:18 +00:00
Jean-Philippe Lang
d2378ea641 Don't send test email asynchronously.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9583 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 10:09:39 +00:00
Jean-Philippe Lang
8d17242b82 Fixed task redmine:email:test broken by r9080.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9582 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 10:04:25 +00:00
Jean-Philippe Lang
1e491c0bfd Makes migrate_from_mantis compatible with Rails3.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9581 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 09:49:02 +00:00
Jean-Philippe Lang
fb8ca0d2f8 Makes migrate_from_trac compatible with Rails3.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9580 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 09:19:08 +00:00
Jean-Philippe Lang
d8c70d7a11 Fixed openid redirect.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9579 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 08:48:50 +00:00
Jean-Philippe Lang
253b02bd22 Adds an id to the flash message divs (#9034).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9578 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 08:25:50 +00:00
Jean-Philippe Lang
99cfca6f83 Adds assertions for r9572.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9577 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 07:47:58 +00:00
Jean-Philippe Lang
6143d119fe Merged #merge! calls.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9576 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 07:42:48 +00:00
Jean-Philippe Lang
0162222bb2 Tests broken by r9573.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9575 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 07:34:57 +00:00
Toshi MARUYAMA
ab92280a7f view: labelled_remote_form_for: equals sign mandatory to print blocks and use :as
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9574 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 04:08:59 +00:00
Toshi MARUYAMA
c0891e8a78 helper: replace remote_form_for to form_for at labelled_remote_form_for
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9573 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 04:08:44 +00:00
Toshi MARUYAMA
f624d01fd8 view: labelled_form_for: equals sign mandatory to print blocks and use :as
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9572 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 02:47:36 +00:00
Toshi MARUYAMA
4b2fc90431 view: remote_form_for: equals sign mandatory to print blocks and replace to form_for and use :remote => true and :as
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9571 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-29 02:43:42 +00:00
Jean-Philippe Lang
49b28fca68 Clean up custom field format definition.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9570 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-28 16:19:32 +00:00
Jean-Philippe Lang
1e3e23d756 RecordNotFound exception still raised with Rails3.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9569 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-28 13:00:16 +00:00
Jean-Philippe Lang
68d5af3dd8 Set the default session store.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9568 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-28 12:26:24 +00:00
Jean-Philippe Lang
bceaf8be94 Let the secret token be set in configuration.yml.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9567 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-28 12:00:45 +00:00
Jean-Philippe Lang
52986e8cd1 Displays an explicit message when trying to start Redmine with an old session_store.rb.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9566 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-28 11:48:34 +00:00
Jean-Philippe Lang
10c0634413 Removed /vendor/plugins directory. Redmine plugins should be dropped in /plugins now.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9565 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-28 11:34:52 +00:00
Jean-Philippe Lang
e4a9ce6db0 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9564 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-28 11:20:13 +00:00
Jean-Philippe Lang
584fbc8f8b Fix no longer required with Rails 3.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9563 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-28 11:14:16 +00:00
Jean-Philippe Lang
5985713335 Restores plugin assets mirroring on startup, but it can now be disabled in configuration.yml.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9561 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-28 11:07:59 +00:00
Jean-Philippe Lang
68f8470d4a Makes image_tag pick the image from the current theme if it exists.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9560 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-28 09:47:09 +00:00
Jean-Philippe Lang
da43f785be Adds support for :plugin option to image_tag helper.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9559 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-28 09:18:12 +00:00
Jean-Philippe Lang
03335d014c Restores support for :plugin support to stylesheet_link_tag and javascript_include_tag helpers.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9558 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-28 09:10:46 +00:00
Jean-Philippe Lang
f12942ff40 Make sure that "today" does not change during tests.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9557 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 23:53:34 +00:00
Jean-Philippe Lang
c7d78ef094 Fixed gantt_test, Date.today and 0.day.from_now may not be the same depending on time and time zone.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9556 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 23:50:56 +00:00
Toshi MARUYAMA
5909b00a46 Gemfile: pin shoulda version
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9555 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 22:52:05 +00:00
Jean-Philippe Lang
ee0d4a12a3 Adds a message for when assertion fails.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9554 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 21:08:34 +00:00
Jean-Philippe Lang
705b6b16a5 Fixed that hr.yml and pt-BR.yml cannot be loaded with ruby-1.9.3-p194-i386-mingw32.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9553 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 21:07:57 +00:00
Jean-Philippe Lang
301e0386f5 Reverts r9547 that breaks 2 tests.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9552 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 17:04:37 +00:00
Jean-Philippe Lang
a97e2593af Added config/additional_environment.rb to svn:ignore (#10778).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9551 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 16:36:24 +00:00
Jean-Philippe Lang
f2ec23d80c set_table_name deprecated.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9550 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 16:31:51 +00:00
Jean-Philippe Lang
d940797aa7 set_table_name and set_locking_column are deprecated.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9549 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 16:28:35 +00:00
Toshi MARUYAMA
d2f779d6e8 remove trailing white-spaces from config/routes.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9548 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 16:17:31 +00:00
Toshi MARUYAMA
8047a8cd28 route: use constraints for repositories ":format => 'raw'" and :action
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9547 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 16:17:17 +00:00
Toshi MARUYAMA
dd23e07111 route: add constraints to repositories which are lost in Rails3 route
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9546 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 16:17:03 +00:00
Toshi MARUYAMA
d7e14cb7b7 Bulgarian translation (jstoolbar) updated by Ivan Cenov (#10785)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9543 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 11:44:38 +00:00
Toshi MARUYAMA
882d46661e Estonian translation updated by Heigo Toom (#10782)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9542 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 03:33:39 +00:00
Toshi MARUYAMA
6fcea5ef9d scm: git: fix test revision value of unit lib test
Hash value range is from 0 to 9 and a to f

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9541 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 01:33:04 +00:00
Toshi MARUYAMA
d19a7dee42 add fixtures to test/unit/lib/redmine/helpers/gantt_test.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9540 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-27 00:55:37 +00:00
Toshi MARUYAMA
6f8d7d6e76 remove Rails2 named_scope wrapper from config/initializers/10-patches.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9539 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-26 23:51:40 +00:00
Toshi MARUYAMA
bf4d779ea2 replace Rails2 "named_scope" to Rails3 "scope" at lib/plugins/acts_as_watchable/lib/acts_as_watchable.rb
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9538 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-26 23:51:25 +00:00
Toshi MARUYAMA
d0d01d4e70 model: replace Rails2 "named_scope" to Rails3 "scope"
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9537 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-26 23:51:10 +00:00
Jean-Philippe Lang
71649ba2f1 Removed #utf8nize! that is no longer used with Rails 3.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9536 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-26 20:11:10 +00:00
Jean-Philippe Lang
79091382cc Removed tzinfo gem requirement.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9535 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-26 18:28:41 +00:00
Jean-Philippe Lang
cb16661d36 Removes the XML declaration that breaks the parser with JRuby.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9534 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-26 17:57:49 +00:00
Jean-Philippe Lang
8d73ddf73f Moved Rails plugins required by the core to lib/plugins.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9533 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-26 17:23:24 +00:00
Jean-Philippe Lang
26868d8b14 Port async delivery methods to Rails 3.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9532 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-26 16:55:53 +00:00
Jean-Philippe Lang
abdcd7d705 Removed Rails 2.3 patch for ruby1.9.3.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9531 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-26 16:31:50 +00:00
Jean-Philippe Lang
6d41de61a5 Do not sanitize escaped text in NullFormatter.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9530 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-25 19:49:26 +00:00
Jean-Philippe Lang
d15ab86459 Manually generates the javascript that prototype_helper fails to do with ruby1.9.2.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9529 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-25 18:17:00 +00:00
Jean-Philippe Lang
5e57a1a9d9 Merged rails-3.2 branch.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9528 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-25 17:17:49 +00:00
Toshi MARUYAMA
34e20c4373 Swedish translation updated by Nicklas Holm (#10750)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9523 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-24 09:44:56 +00:00
Toshi MARUYAMA
70d98acf9a Japanese translation updated by Go MAEDA (#10745)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9520 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-24 07:27:58 +00:00
Toshi MARUYAMA
215f4adcd7 Traditional Chinese translation updated by ChunChang Lo (#10733)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9509 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-23 08:33:33 +00:00
Jean-Philippe Lang
ccf37f59a9 Methods moved.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9473 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-22 12:47:50 +00:00
Jean-Philippe Lang
0fad78f53f Removed Query.generate_default! helper.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9472 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-22 12:46:43 +00:00
Jean-Philippe Lang
2e3bf71e9a Removed #generate_with_protected helper methods.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9471 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-22 12:45:13 +00:00
Jean-Philippe Lang
95f9246a46 Renamed object_daddy_helper and removed exemplars.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9470 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-22 11:58:05 +00:00
Jean-Philippe Lang
b960470d78 Removed object_daddy dependency.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9469 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-22 11:56:47 +00:00
Jean-Philippe Lang
4a3f038595 Use create!.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9468 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-22 08:42:32 +00:00
Jean-Philippe Lang
1c31e32df7 No need to save journal details.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9467 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-22 08:26:45 +00:00
Jean-Philippe Lang
4598c64ebd Additional tests for IssuesHelper#show_detail.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9466 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-22 08:24:39 +00:00
Jean-Philippe Lang
9305c84093 Reverted r9464 that broke a test. Project identifiers or ids can be used as parameters.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9465 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-22 07:19:45 +00:00
Toshi MARUYAMA
72ab3e22b1 Rails3: use Project.visible.find_by_identifier instead of .find for adding watchers dialog on new issue
On Rails 3.0.12, find_project method returns render_404

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9464 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-22 04:01:04 +00:00
Toshi MARUYAMA
e95ab31983 Rails3: helper: html_safe for watchers_checkboxes in WatchersHelper
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9463 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-22 02:57:39 +00:00
Toshi MARUYAMA
fcbeee78c1 Rails3: view: html_safe for principals_options_for_select in ApplicationHelper
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9462 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-21 01:44:38 +00:00
Jean-Philippe Lang
306af1d017 Updates for 1.4.1 release.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9459 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-20 09:59:51 +00:00
Jean-Philippe Lang
5a35c5b2e2 Fixed that date range fields don't get enabled when using the calendar popup (#8574).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9452 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-19 12:26:19 +00:00
Jean-Philippe Lang
b3bddcd31f Load Gemfile.local with absolute path.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9450 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-19 09:22:55 +00:00
Jean-Philippe Lang
b0f35a3cde Fixed that users with different case logins cannot update their accounts (#10711).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9449 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-19 08:42:07 +00:00
Jean-Philippe Lang
62eb536e32 Additional test for MailHandler.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9448 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-19 08:26:53 +00:00
Jean-Philippe Lang
67f90df175 Additional test for memberships API.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9447 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-19 08:18:27 +00:00
Jean-Philippe Lang
c88fbfbdad Additional tests for Principal scopes.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9446 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-19 08:01:28 +00:00
Jean-Philippe Lang
424a70978e Additional tests for the PDF export of an issue.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9445 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-19 07:58:02 +00:00
Jean-Philippe Lang
24e6dbc709 Updated ru and uk locales (#10664).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9444 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-19 07:25:32 +00:00
Jean-Philippe Lang
d856e62ccf Fixed that "Create and continue" buttons are broken by r9391 (#10675).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9442 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-19 07:17:48 +00:00
Jean-Philippe Lang
143c29d8e1 Additional test for TrackersController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9441 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-18 19:49:10 +00:00
Jean-Philippe Lang
f79961f1c5 Additional tests for TimelogController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9440 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-18 19:42:18 +00:00
Jean-Philippe Lang
327a74b406 Additional test for Tracker model.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9439 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-18 19:33:29 +00:00
Jean-Philippe Lang
864054c005 Additional test for MyController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9438 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-18 19:30:08 +00:00
Jean-Philippe Lang
6f71a508eb Additional tests for CustomFieldsController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9437 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-18 19:25:54 +00:00
Toshi MARUYAMA
7366fb23bb fix typo of German "text_account_destroy_confirmation" (#10693, #10664)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9433 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-18 13:15:56 +00:00
Jean-Philippe Lang
0a4a49992e Removed invalid css property.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9431 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-18 12:05:00 +00:00
Jean-Philippe Lang
2cc294aa27 Fixed that textile nested lists are not properly closed in output (#10642).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9430 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-18 12:00:54 +00:00
Toshi MARUYAMA
ee559c6820 German translation changed by Hannes Meier (#10693)
* mail_body_account_information_external
* label_overall_activity
* label_send_information

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9427 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-17 23:47:38 +00:00
Toshi MARUYAMA
2581d00c69 German translation for #10664 updated by Hannes Meier (#10693)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9426 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-17 23:47:06 +00:00
Toshi MARUYAMA
41b986db06 German translation for 1.4.0 updated by Hannes Meier (#10693)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9425 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-17 23:46:43 +00:00
Toshi MARUYAMA
b949d49ed3 Bulgarian translation updated by Ivan Cenov (#10671, #10664)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9424 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-16 08:05:18 +00:00
Jean-Philippe Lang
f529cdddb3 Cleanup in rake scripts.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9423 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-15 15:57:35 +00:00
Jean-Philippe Lang
147f717c86 Adds a rake task to remove expired tokens: redmine:tokens:prune.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9422 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-15 15:56:58 +00:00
Jean-Philippe Lang
0cb633c688 Adds new strings to locales.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9421 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-15 15:47:25 +00:00
Jean-Philippe Lang
c7149f4184 Fixed that Token.destroy_expired destroys API tokens.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9420 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-15 15:44:51 +00:00
Jean-Philippe Lang
24c361eb0a Fixed that rss key is generated twice when user is not reloaded (#10668).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9419 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-15 15:34:14 +00:00
Jean-Philippe Lang
9817e1d744 Additional test for Watcher.prune.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9418 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-15 15:13:28 +00:00
Jean-Philippe Lang
28f0c4f131 Adds the ability for users to delete their own account (#10664). Can be disabled in application settings.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9417 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-15 14:31:54 +00:00
Jean-Philippe Lang
638583012a French local update.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9412 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-14 08:07:56 +00:00
Jean-Philippe Lang
55ea557fe8 Note about the mysql2 adapter in database.yml.example.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9409 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-14 06:51:16 +00:00
Jean-Philippe Lang
552ed9693e Updated trunk CHANGELOG.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9406 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-14 06:31:33 +00:00
Jean-Philippe Lang
231282ddcb Fixed MissingFeatureException: let user choose to copy attachments or not when bulk copying issues.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9405 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-14 06:21:03 +00:00
Jean-Philippe Lang
09375960d6 When copying issues, let the status be changed to default or left unchanged.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9404 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-14 05:45:16 +00:00
Jean-Philippe Lang
354e09811b Removed deprecated accept_key_auth methods.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9392 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-13 19:40:18 +00:00
Jean-Philippe Lang
43c677b489 Disable submit buttons when submitting a form (#6555).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9391 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-13 17:01:46 +00:00
Jean-Philippe Lang
4edc30d157 Ignore emails with Auto-Submitted: auto-replied header (#10607).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9390 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-13 16:55:04 +00:00
Etienne Massip
dd8d8e0560 Updated CodeRay to 1.0.6.
Fixed multiline comments highlighting issue in file view (#7495).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9389 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-12 17:54:55 +00:00
Jean-Philippe Lang
de0689d4f4 Makes time syntax case insensitive (#10635).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9387 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-11 17:37:13 +00:00
Jean-Philippe Lang
1511b1435a Additional assertions on creation of relations.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9385 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-11 17:27:11 +00:00
Jean-Philippe Lang
12b71ebc8e Strip issue id when adding a relation.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9384 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-11 17:25:05 +00:00
Jean-Philippe Lang
04e7b18869 Fixed that export links include page parameter.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9382 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-11 17:02:21 +00:00
Jean-Philippe Lang
d88ffd11e2 CSV export breaks custom columns (#10168).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9381 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-09 21:32:54 +00:00
Jean-Philippe Lang
e4ba838c6b Fixed that rake redmine:send_reminders fails if an issue is assigned to a group (#10555).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9380 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-09 20:23:36 +00:00
Jean-Philippe Lang
269e9057dd Fixed that "Default administrator account changed" is always true (#10622).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9379 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-09 15:53:48 +00:00
Jean-Philippe Lang
ea307619be Fixed that improper statuses are proposed when changing status before tracker on the issue form (#10619).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9378 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-09 09:39:27 +00:00
Jean-Philippe Lang
6d62ab64e6 Upgrade required pg gem (#6941).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9374 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-08 21:10:02 +00:00
Jean-Philippe Lang
78dd564a82 Disable IE 8 compatibility mode (#10128).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9372 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-08 20:13:38 +00:00
Jean-Philippe Lang
d2cb9d5289 Adds missing route to project search.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9371 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-08 20:06:53 +00:00
Jean-Philippe Lang
d427d8e567 Reverted r9368.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9370 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-08 19:29:26 +00:00
Jean-Philippe Lang
e436285b6f Slight changes to the plain text issue notification.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9369 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-08 19:25:26 +00:00
Jean-Philippe Lang
1334cbf78c Adds double quotes around issue change details in plain text notifications (#10603).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9368 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-08 17:30:08 +00:00
Jean-Philippe Lang
fde9c7315a Fixed: reminder mails are not sent when delivery_method is :async_smtp (#5058).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9367 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 18:57:05 +00:00
Jean-Philippe Lang
cfb06a2607 Additional test for gzipped wiki history.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9366 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 17:53:25 +00:00
Jean-Philippe Lang
5e4bb16a7f Additional tests for WatchersController.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9365 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 16:55:53 +00:00
Jean-Philippe Lang
2e240103f3 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9364 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 16:53:12 +00:00
Jean-Philippe Lang
18270ee587 Code cleanup.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9363 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 16:51:10 +00:00
Jean-Philippe Lang
eabbab6e2b Adds assertions on the content of a versioned wiki page export (#6941).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9362 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 15:31:06 +00:00
Jean-Philippe Lang
d25defe276 Adds assertions on the content of a wiki page export (#6941).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9361 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 14:09:15 +00:00
Jean-Philippe Lang
ab28a55b4e Fixed test_show_with_permission_should_display_the_new_message_form broken by r9351.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9359 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 13:51:16 +00:00
Jean-Philippe Lang
dd1163b58a Makes the mail handler ignore out-of-office emails (#10607).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9358 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 13:24:30 +00:00
Toshi MARUYAMA
051794dffc remove 1.3-stable merged issues from CHANGELOG 1.4.0 list
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9355 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 12:57:39 +00:00
Jean-Philippe Lang
54bb145c76 Removed permissions logic from view.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9351 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 12:21:45 +00:00
Jean-Philippe Lang
a7bacf70fb Fixed: Unable to change locked, sticky flags and board when editing a message (#10564).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9350 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 12:20:47 +00:00
Jean-Philippe Lang
07d20cc5f7 Let non required list/user/version custom fields to be set to blank when bulk editing (#10605).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9349 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 11:56:30 +00:00
Jean-Philippe Lang
dee17f4677 Adds a note about Gemfile.local in the INSTALL doc.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9347 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 11:16:58 +00:00
Jean-Philippe Lang
2658730302 Load Gemfile.local if present.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9346 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 11:12:50 +00:00
Toshi MARUYAMA
e06b60d1b9 Simplified Chinese translation updated by fangzheng (#10611)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9343 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 10:41:16 +00:00
Jean-Philippe Lang
7d458e0b27 Do not install rmagick gem with jruby.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9341 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 10:26:55 +00:00
Jean-Philippe Lang
725ff27c37 Typo in database rake task.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9339 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-04-06 10:24:36 +00:00
1397 changed files with 29248 additions and 31523 deletions

3
.gitignore vendored
View File

@@ -5,6 +5,7 @@
/config/database.yml
/config/email.yml
/config/initializers/session_store.rb
/config/initializers/secret_token.rb
/coverage
/db/*.db
/db/*.sqlite3
@@ -18,9 +19,11 @@
/public/plugin_assets
/tmp/*
/tmp/cache/*
/tmp/pdf/*
/tmp/sessions/*
/tmp/sockets/*
/tmp/test/*
/tmp/thumbnails/*
/vendor/cache
/vendor/rails
*.rbc

View File

@@ -7,6 +7,7 @@ config/configuration.yml
config/database.yml
config/email.yml
config/initializers/session_store.rb
config/initializers/secret_token.rb
coverage
db/*.db
db/*.sqlite3
@@ -20,9 +21,11 @@ public/dispatch.*
public/plugin_assets
tmp/*
tmp/cache/*
tmp/pdf/*
tmp/sessions/*
tmp/sockets/*
tmp/test/*
tmp/thumbnails/*
vendor/cache
vendor/rails
*.rbc

51
Gemfile
View File

@@ -1,10 +1,11 @@
source :rubygems
source 'http://rubygems.org'
gem "rails", "2.3.14"
gem "i18n", "~> 0.4.2"
gem "coderay", "~> 1.0.0"
gem 'rails', '3.2.11'
gem "jquery-rails", "~> 2.0.2"
gem "i18n", "~> 0.6.0"
gem "coderay", "~> 1.0.6"
gem "fastercsv", "~> 1.5.0", :platforms => [:mri_18, :mingw_18, :jruby]
gem "tzinfo", "~> 0.3.31"
gem "builder", "3.0.0"
# Optional gem for LDAP authentication
group :ldap do
@@ -14,20 +15,23 @@ end
# Optional gem for OpenID authentication
group :openid do
gem "ruby-openid", "~> 2.1.4", :require => "openid"
gem "rack-openid"
end
# Optional gem for exporting the gantt to a PNG file
group :rmagick do
# RMagick 2 supports ruby 1.9
# RMagick 1 would be fine for ruby 1.8 but Bundler does not support
# different requirements for the same gem on different platforms
gem "rmagick", ">= 2.0.0"
# Optional gem for exporting the gantt to a PNG file, not supported with jruby
platforms :mri, :mingw do
group :rmagick do
# RMagick 2 supports ruby 1.9
# RMagick 1 would be fine for ruby 1.8 but Bundler does not support
# different requirements for the same gem on different platforms
gem "rmagick", ">= 2.0.0"
end
end
# Database gems
platforms :mri, :mingw do
group :postgresql do
gem "pg", "~> 0.9.0"
gem "pg", ">= 0.11.0"
end
group :sqlite do
@@ -37,13 +41,13 @@ end
platforms :mri_18, :mingw_18 do
group :mysql do
gem "mysql"
gem "mysql", "~> 2.8.1"
end
end
platforms :mri_19, :mingw_19 do
group :mysql do
gem "mysql2", "~> 0.2.7"
gem "mysql2", "~> 0.3.11"
end
end
@@ -65,16 +69,27 @@ end
group :development do
gem "rdoc", ">= 2.4.2"
gem "yard"
end
group :test do
gem "shoulda", "~> 2.10.3"
gem "edavis10-object_daddy", :require => "object_daddy"
gem "mocha"
gem "shoulda", "~> 2.11"
# Shoulda does not work nice on Ruby 1.9.3 and JRuby 1.7.
# It seems to need test-unit explicitely.
platforms = [:mri_19]
platforms << :jruby if defined?(JRUBY_VERSION) && JRUBY_VERSION >= "1.7"
gem "test-unit", :platforms => platforms
gem "mocha", "0.12.3"
end
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
if File.exists?(local_gemfile)
puts "Loading Gemfile.local ..." if $DEBUG # `ruby -d` or `bundle -v`
instance_eval File.read(local_gemfile)
end
# Load plugins' Gemfiles
Dir.glob File.expand_path("../vendor/plugins/*/Gemfile", __FILE__) do |file|
Dir.glob File.expand_path("../plugins/*/Gemfile", __FILE__) do |file|
puts "Loading #{file} ..." if $DEBUG # `ruby -d` or `bundle -v`
instance_eval File.read(file)
end

View File

@@ -1,15 +1,7 @@
#!/usr/bin/env rake
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/switchtower.rake, and they will automatically be available to Rake.
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require(File.join(File.dirname(__FILE__), 'config', 'boot'))
require File.expand_path('../config/application', __FILE__)
require 'rake'
require 'rake/testtask'
begin
require 'rdoc/task'
rescue LoadError
# RDoc is not available
end
require 'tasks/rails'
RedmineApp::Application.load_tasks

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -40,19 +40,26 @@ class AccountController < ApplicationController
redirect_to home_url
end
# Enable user to choose a new password
# Lets user choose a new password
def lost_password
redirect_to(home_url) && return unless Setting.lost_password?
if params[:token]
@token = Token.find_by_action_and_value("recovery", params[:token])
redirect_to(home_url) && return unless @token and !@token.expired?
@token = Token.find_by_action_and_value("recovery", params[:token].to_s)
if @token.nil? || @token.expired?
redirect_to home_url
return
end
@user = @token.user
unless @user && @user.active?
redirect_to home_url
return
end
if request.post?
@user.password, @user.password_confirmation = params[:new_password], params[:new_password_confirmation]
if @user.save
@token.destroy
flash[:notice] = l(:notice_account_password_updated)
redirect_to :action => 'login'
redirect_to signin_path
return
end
end
@@ -60,17 +67,23 @@ class AccountController < ApplicationController
return
else
if request.post?
user = User.find_by_mail(params[:mail])
# user not found in db
(flash.now[:error] = l(:notice_account_unknown_email); return) unless user
# user uses an external authentification
(flash.now[:error] = l(:notice_can_t_change_password); return) if user.auth_source_id
user = User.find_by_mail(params[:mail].to_s)
# user not found or not active
unless user && user.active?
flash.now[:error] = l(:notice_account_unknown_email)
return
end
# user cannot change its password
unless user.change_password_allowed?
flash.now[:error] = l(:notice_can_t_change_password)
return
end
# create a new token for password recovery
token = Token.new(:user => user, :action => "recovery")
if token.save
Mailer.deliver_lost_password(token)
Mailer.lost_password(token).deliver
flash[:notice] = l(:notice_account_lost_email_sent)
redirect_to :action => 'login'
redirect_to signin_path
return
end
end
@@ -84,8 +97,9 @@ class AccountController < ApplicationController
session[:auth_source_registration] = nil
@user = User.new(:language => Setting.default_language)
else
user_params = params[:user] || {}
@user = User.new
@user.safe_attributes = params[:user]
@user.safe_attributes = user_params
@user.admin = false
@user.register
if session[:auth_source_registration]
@@ -100,7 +114,9 @@ class AccountController < ApplicationController
end
else
@user.login = params[:user][:login]
@user.password, @user.password_confirmation = params[:user][:password], params[:user][:password_confirmation]
unless user_params[:identity_url].present? && user_params[:password].blank? && user_params[:password_confirmation].blank?
@user.password, @user.password_confirmation = user_params[:password], user_params[:password_confirmation]
end
case Setting.self_registration
when '1'
@@ -126,19 +142,11 @@ class AccountController < ApplicationController
token.destroy
flash[:notice] = l(:notice_account_activated)
end
redirect_to :action => 'login'
redirect_to signin_path
end
private
def logout_user
if User.current.logged?
cookies.delete :autologin
Token.delete_all(["user_id = ? AND action = ?", User.current.id, 'autologin'])
self.logged_user = nil
end
end
def authenticate_user
if Setting.openid? && using_open_id?
open_id_authenticate(params[:openid_url])
@@ -161,7 +169,7 @@ class AccountController < ApplicationController
end
def open_id_authenticate(openid_url)
authenticate_with_open_id(openid_url, :required => [:nickname, :fullname, :email], :return_to => signin_url) do |result, identity_url, registration|
authenticate_with_open_id(openid_url, :required => [:nickname, :fullname, :email], :return_to => signin_url, :method => :post) do |result, identity_url, registration|
if result.successful?
user = User.find_or_initialize_by_identity_url(identity_url)
if user.new_record?
@@ -202,6 +210,7 @@ class AccountController < ApplicationController
end
def successful_authentication(user)
logger.info "Successful authentication for '#{user.login}' from #{request.remote_ip} at #{Time.now.utc}"
# Valid user
self.logged_user = user
# generate a key and set cookie if autologin
@@ -243,9 +252,9 @@ class AccountController < ApplicationController
def register_by_email_activation(user, &block)
token = Token.new(:user => user, :action => "register")
if user.save and token.save
Mailer.deliver_register(token)
Mailer.register(token).deliver
flash[:notice] = l(:notice_account_register_done)
redirect_to :action => 'login'
redirect_to signin_path
else
yield if block_given?
end
@@ -273,7 +282,7 @@ class AccountController < ApplicationController
def register_manually_by_administrator(user, &block)
if user.save
# Sends an email to the administrators
Mailer.deliver_account_activation_request(user)
Mailer.account_activation_request(user).deliver
account_pending
else
yield if block_given?
@@ -282,6 +291,6 @@ class AccountController < ApplicationController
def account_pending
flash[:notice] = l(:notice_account_pending)
redirect_to :action => 'login'
redirect_to signin_path
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -40,10 +40,10 @@ class ActivitiesController < ApplicationController
events = @activity.events(@date_from, @date_to)
if events.empty? || stale?(:etag => [@activity.scope, @date_to, @date_from, @with_subprojects, @author, events.first, User.current, current_language])
if events.empty? || stale?(:etag => [@activity.scope, @date_to, @date_from, @with_subprojects, @author, events.first, events.size, User.current, current_language])
respond_to do |format|
format.html {
@events_by_day = events.group_by(&:event_date)
@events_by_day = events.group_by {|event| User.current.time_to_date(event.event_datetime)}
render :layout => false if request.xhr?
}
format.atom {

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -63,7 +63,7 @@ class AdminController < ApplicationController
# Force ActionMailer to raise delivery errors so we can catch it
ActionMailer::Base.raise_delivery_errors = true
begin
@test = Mailer.deliver_test_email(User.current)
@test = Mailer.test_email(User.current).deliver
flash[:notice] = l(:notice_email_sent, User.current.mail)
rescue Exception => e
flash[:error] = l(:notice_email_error, e.message)
@@ -75,9 +75,7 @@ class AdminController < ApplicationController
def info
@db_adapter_name = ActiveRecord::Base.connection.adapter_name
@checklist = [
[:text_default_administrator_account_changed,
User.find(:first,
:conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?],
[:text_default_administrator_account_changed, User.default_admin_account_changed?],
[:text_file_repository_writable, File.writable?(Attachment.storage_path)],
[:text_plugin_assets_writable, File.writable?(Redmine::Plugin.public_directory)],
[:text_rmagick_available, Object.const_defined?(:Magick)]

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -23,62 +23,58 @@ class Unauthorized < Exception; end
class ApplicationController < ActionController::Base
include Redmine::I18n
class_attribute :accept_api_auth_actions
class_attribute :accept_rss_auth_actions
class_attribute :model_object
layout 'base'
exempt_from_layout 'builder', 'rsb'
protect_from_forgery
def handle_unverified_request
super
cookies.delete(:autologin)
end
# Remove broken cookie after upgrade from 0.8.x (#4292)
# See https://rails.lighthouseapp.com/projects/8994/tickets/3360
# TODO: remove it when Rails is fixed
before_filter :delete_broken_cookies
def delete_broken_cookies
if cookies['_redmine_session'] && cookies['_redmine_session'] !~ /--/
cookies.delete '_redmine_session'
redirect_to home_path
return false
end
end
# FIXME: Remove this when all of Rack and Rails have learned how to
# properly use encodings
before_filter :params_filter
def params_filter
if RUBY_VERSION >= '1.9' && defined?(Rails) && Rails::VERSION::MAJOR < 3
self.utf8nize!(params)
end
end
def utf8nize!(obj)
if obj.frozen?
obj
elsif obj.is_a? String
obj.respond_to?(:force_encoding) ? obj.force_encoding("UTF-8") : obj
elsif obj.is_a? Hash
obj.each {|k, v| obj[k] = self.utf8nize!(v)}
elsif obj.is_a? Array
obj.each {|v| self.utf8nize!(v)}
else
obj
end
end
before_filter :user_setup, :check_if_login_required, :set_localization
filter_parameter_logging :password
before_filter :session_expiration, :user_setup, :check_if_login_required, :set_localization
rescue_from ActionController::InvalidAuthenticityToken, :with => :invalid_authenticity_token
rescue_from ::Unauthorized, :with => :deny_access
rescue_from ::ActionView::MissingTemplate, :with => :missing_template
include Redmine::Search::Controller
include Redmine::MenuManager::MenuController
helper Redmine::MenuManager::MenuHelper
Redmine::Scm::Base.all.each do |scm|
require_dependency "repository/#{scm.underscore}"
def session_expiration
if session[:user_id]
if session_expired? && !try_to_autologin
reset_session
flash[:error] = l(:error_session_expired)
redirect_to signin_url
else
session[:atime] = Time.now.utc.to_i
end
end
end
def session_expired?
if Setting.session_lifetime?
unless session[:ctime] && (Time.now.utc.to_i - session[:ctime].to_i <= Setting.session_lifetime.to_i * 60)
return true
end
end
if Setting.session_timeout?
unless session[:atime] && (Time.now.utc.to_i - session[:atime].to_i <= Setting.session_timeout.to_i * 60)
return true
end
end
false
end
def start_user_session(user)
session[:user_id] = user.id
session[:ctime] = Time.now.utc.to_i
session[:atime] = Time.now.utc.to_i
end
def user_setup
@@ -86,32 +82,57 @@ class ApplicationController < ActionController::Base
Setting.check_cache
# Find the current user
User.current = find_current_user
logger.info(" Current user: " + (User.current.logged? ? "#{User.current.login} (id=#{User.current.id})" : "anonymous")) if logger
end
# Returns the current user or nil if no user is logged in
# and starts a session if needed
def find_current_user
if session[:user_id]
# existing session
(User.active.find(session[:user_id]) rescue nil)
elsif cookies[:autologin] && Setting.autologin?
# auto-login feature starts a new session
user = User.try_to_autologin(cookies[:autologin])
session[:user_id] = user.id if user
user
elsif params[:format] == 'atom' && params[:key] && request.get? && accept_rss_auth?
# RSS key authentication does not start a session
User.find_by_rss_key(params[:key])
elsif Setting.rest_api_enabled? && accept_api_auth?
user = nil
unless api_request?
if session[:user_id]
# existing session
user = (User.active.find(session[:user_id]) rescue nil)
elsif autologin_user = try_to_autologin
user = autologin_user
elsif params[:format] == 'atom' && params[:key] && request.get? && accept_rss_auth?
# RSS key authentication does not start a session
user = User.find_by_rss_key(params[:key])
end
end
if user.nil? && Setting.rest_api_enabled? && accept_api_auth?
if (key = api_key_from_request)
# Use API key
User.find_by_api_key(key)
user = User.find_by_api_key(key)
else
# HTTP Basic, either username/password or API key/random
authenticate_with_http_basic do |username, password|
User.try_to_login(username, password) || User.find_by_api_key(username)
user = User.try_to_login(username, password) || User.find_by_api_key(username)
end
end
# Switch user if requested by an admin user
if user && user.admin? && (username = api_switch_user_from_request)
su = User.find_by_login(username)
if su && su.active?
logger.info(" User switched by: #{user.login} (id=#{user.id})") if logger
user = su
else
render_error :message => 'Invalid X-Redmine-Switch-User header', :status => 412
end
end
end
user
end
def try_to_autologin
if cookies[:autologin] && Setting.autologin?
# auto-login feature starts a new session
user = User.try_to_autologin(cookies[:autologin])
if user
reset_session
start_user_session(user)
end
user
end
end
@@ -120,12 +141,21 @@ class ApplicationController < ActionController::Base
reset_session
if user && user.is_a?(User)
User.current = user
session[:user_id] = user.id
start_user_session(user)
else
User.current = User.anonymous
end
end
# Logs out current user
def logout_user
if User.current.logged?
cookies.delete :autologin
Token.delete_all(["user_id = ? AND action = ?", User.current.id, 'autologin'])
self.logged_user = nil
end
end
# check if login is globally required to access the application
def check_if_login_required
# no check needed if user is already logged in
@@ -233,7 +263,7 @@ class ApplicationController < ActionController::Base
end
def find_model_object
model = self.class.read_inheritable_attribute('model_object')
model = self.class.model_object
if model
@object = model.find(params[:id])
self.instance_variable_set('@' + controller_name.singularize, @object) if @object
@@ -243,17 +273,27 @@ class ApplicationController < ActionController::Base
end
def self.model_object(model)
write_inheritable_attribute('model_object', model)
self.model_object = model
end
# Filter for bulk issue operations
# Find the issue whose id is the :id parameter
# Raises a Unauthorized exception if the issue is not visible
def find_issue
# Issue.visible.find(...) can not be used to redirect user to the login form
# if the issue actually exists but requires authentication
@issue = Issue.find(params[:id])
raise Unauthorized unless @issue.visible?
@project = @issue.project
rescue ActiveRecord::RecordNotFound
render_404
end
# Find issues with a single :id param or :ids array param
# Raises a Unauthorized exception if one of the issues is not visible
def find_issues
@issues = Issue.find_all_by_id(params[:id] || params[:ids])
raise ActiveRecord::RecordNotFound if @issues.empty?
if @issues.detect {|issue| !issue.visible?}
deny_access
return
end
raise Unauthorized unless @issues.all?(&:visible?)
@projects = @issues.collect(&:project).compact.uniq
@project = @projects.first if @projects.size == 1
rescue ActiveRecord::RecordNotFound
@@ -263,7 +303,7 @@ class ApplicationController < ActionController::Base
# make sure that the user is a member of the project (or admin) if project is private
# used as a before_filter for actions that do not require any particular permission on the project
def check_project_privacy
if @project && @project.active?
if @project && !@project.archived?
if @project.visible?
true
else
@@ -277,12 +317,16 @@ class ApplicationController < ActionController::Base
end
def back_url
params[:back_url] || request.env['HTTP_REFERER']
url = params[:back_url]
if url.nil? && referer = request.env['HTTP_REFERER']
url = CGI.unescape(referer.to_s)
end
url
end
def redirect_back_or_default(default)
back_url = CGI.unescape(params[:back_url].to_s)
if !back_url.blank?
back_url = params[:back_url].to_s
if back_url.present?
begin
uri = URI.parse(back_url)
# do not redirect user to another host or to the login or register page
@@ -291,6 +335,7 @@ class ApplicationController < ActionController::Base
return
end
rescue URI::InvalidURIError
logger.warn("Could not redirect to invalid URL #{back_url}")
# redirect to default
end
end
@@ -298,6 +343,19 @@ class ApplicationController < ActionController::Base
false
end
# Redirects to the request referer if present, redirects to args or call block otherwise.
def redirect_to_referer_or(*args, &block)
redirect_to :back
rescue ::ActionController::RedirectBackError
if args.any?
redirect_to *args
elsif block_given?
block.call
else
raise "#redirect_to_referer_or takes arguments or a block"
end
end
def render_403(options={})
@project = nil
render_error({:message => :notice_not_authorized, :status => 403}.merge(options))
@@ -321,13 +379,17 @@ class ApplicationController < ActionController::Base
format.html {
render :template => 'common/error', :layout => use_layout, :status => @status
}
format.atom { head @status }
format.xml { head @status }
format.js { head @status }
format.json { head @status }
format.any { head @status }
end
end
# Handler for ActionView::MissingTemplate exception
def missing_template
logger.warn "Missing template, responding with 404"
@project = nil
render_404
end
# Filter for actions that provide an API response
# but have no HTML representation for non admin users
def require_admin_or_api_request
@@ -360,27 +422,15 @@ class ApplicationController < ActionController::Base
@items.sort! {|x,y| y.event_datetime <=> x.event_datetime }
@items = @items.slice(0, Setting.feeds_limit.to_i)
@title = options[:title] || Setting.app_title
render :template => "common/feed.atom", :layout => false,
render :template => "common/feed", :formats => [:atom], :layout => false,
:content_type => 'application/atom+xml'
end
# TODO: remove in Redmine 1.4
def self.accept_key_auth(*actions)
ActiveSupport::Deprecation.warn "ApplicationController.accept_key_auth is deprecated and will be removed in Redmine 1.4. Use accept_rss_auth (or accept_api_auth) instead."
accept_rss_auth(*actions)
end
# TODO: remove in Redmine 1.4
def accept_key_auth_actions
ActiveSupport::Deprecation.warn "ApplicationController.accept_key_auth_actions is deprecated and will be removed in Redmine 1.4. Use accept_rss_auth (or accept_api_auth) instead."
self.class.accept_rss_auth
end
def self.accept_rss_auth(*actions)
if actions.any?
write_inheritable_attribute('accept_rss_auth_actions', actions)
self.accept_rss_auth_actions = actions
else
read_inheritable_attribute('accept_rss_auth_actions') || []
self.accept_rss_auth_actions || []
end
end
@@ -390,9 +440,9 @@ class ApplicationController < ActionController::Base
def self.accept_api_auth(*actions)
if actions.any?
write_inheritable_attribute('accept_api_auth_actions', actions)
self.accept_api_auth_actions = actions
else
read_inheritable_attribute('accept_api_auth_actions') || []
self.accept_api_auth_actions || []
end
end
@@ -472,12 +522,17 @@ class ApplicationController < ActionController::Base
# Returns the API key present in the request
def api_key_from_request
if params[:key].present?
params[:key]
params[:key].to_s
elsif request.headers["X-Redmine-API-Key"].present?
request.headers["X-Redmine-API-Key"]
request.headers["X-Redmine-API-Key"].to_s
end
end
# Returns the API 'switch user' value if present
def api_switch_user_from_request
request.headers["X-Redmine-Switch-User"].to_s.presence
end
# Renders a warning flash if obj has unsaved attachments
def render_attachment_warning_if_needed(obj)
flash[:warning] = l(:warning_attachments_not_saved, obj.unsaved_attachments.size) if obj.unsaved_attachments.present?
@@ -506,6 +561,17 @@ class ApplicationController < ActionController::Base
render_error "An error occurred while executing the query and has been logged. Please report this error to your Redmine administrator."
end
# Renders a 200 response for successfull updates or deletions via the API
def render_api_ok
render_api_head :ok
end
# Renders a head API response
def render_api_head(status)
# #head would return a response body with one space
render :text => '', :status => status, :layout => nil
end
# Renders API response on validation failure
def render_validation_errors(objects)
if objects.is_a?(Array)
@@ -513,26 +579,12 @@ class ApplicationController < ActionController::Base
else
@error_messages = objects.errors.full_messages
end
render :template => 'common/error_messages.api', :status => :unprocessable_entity, :layout => false
render :template => 'common/error_messages.api', :status => :unprocessable_entity, :layout => nil
end
# Overrides #default_template so that the api template
# is used automatically if it exists
def default_template(action_name = self.action_name)
if api_request?
begin
return self.view_paths.find_template(default_template_name(action_name), 'api')
rescue ::ActionView::MissingTemplate
# the api template was not found
# fallback to the default behaviour
end
end
super
end
# Overrides #pick_layout so that #render with no arguments
# Overrides #_include_layout? so that #render with no arguments
# doesn't use the layout for api requests
def pick_layout(*args)
api_request? ? nil : super
def _include_layout?(*args)
api_request? ? false : super
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -17,7 +17,7 @@
class AttachmentsController < ApplicationController
before_filter :find_project, :except => :upload
before_filter :file_readable, :read_authorize, :only => [:show, :download]
before_filter :file_readable, :read_authorize, :only => [:show, :download, :thumbnail]
before_filter :delete_authorize, :only => :destroy
before_filter :authorize_global, :only => :upload
@@ -52,11 +52,26 @@ class AttachmentsController < ApplicationController
@attachment.increment_download
end
# images are sent inline
send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename),
:type => detect_content_type(@attachment),
:disposition => (@attachment.image? ? 'inline' : 'attachment')
if stale?(:etag => @attachment.digest)
# images are sent inline
send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename),
:type => detect_content_type(@attachment),
:disposition => (@attachment.image? ? 'inline' : 'attachment')
end
end
def thumbnail
if @attachment.thumbnailable? && thumbnail = @attachment.thumbnail(:size => params[:size])
if stale?(:etag => thumbnail)
send_file thumbnail,
:filename => filename_for_content_disposition(@attachment.filename),
:type => detect_content_type(@attachment),
:disposition => 'inline'
end
else
# No thumbnail for the attachment or thumbnail could not be created
render :nothing => true, :status => 404
end
end
def upload
@@ -67,9 +82,9 @@ class AttachmentsController < ApplicationController
return
end
@attachment = Attachment.new(:file => request.body)
@attachment = Attachment.new(:file => request.raw_post)
@attachment.author = User.current
@attachment.filename = Redmine::Utils.random_hex(16)
@attachment.filename = params[:filename].presence || Redmine::Utils.random_hex(16)
if @attachment.save
respond_to do |format|
@@ -88,9 +103,7 @@ class AttachmentsController < ApplicationController
end
# Make sure association callbacks are called
@attachment.container.attachments.delete(@attachment)
redirect_to :back
rescue ::ActionController::RedirectBackError
redirect_to :controller => 'projects', :action => 'show', :id => @project
redirect_to_referer_or project_path(@project)
end
private

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,27 +1,44 @@
# Redmine - project management software
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class AutoCompletesController < ApplicationController
before_filter :find_project
def issues
@issues = []
q = params[:q].to_s
query = (params[:scope] == "all" && Setting.cross_project_issue_relations?) ? Issue : @project.issues
if q.match(/^\d+$/)
@issues << query.visible.find_by_id(q.to_i)
q = (params[:q] || params[:term]).to_s.strip
if q.present?
scope = (params[:scope] == "all" || @project.nil? ? Issue : @project.issues).visible
if q.match(/^\d+$/)
@issues << scope.find_by_id(q.to_i)
end
@issues += scope.where("LOWER(#{Issue.table_name}.subject) LIKE ?", "%#{q.downcase}%").order("#{Issue.table_name}.id DESC").limit(10).all
@issues.compact!
end
unless q.blank?
@issues += query.visible.find(:all, :conditions => ["LOWER(#{Issue.table_name}.subject) LIKE ?", "%#{q.downcase}%"], :limit => 10)
end
@issues.compact!
render :layout => false
end
private
def find_project
project_id = (params[:issue] && params[:issue][:project_id]) || params[:project_id]
@project = Project.find(project_id)
if params[:project_id].present?
@project = Project.find(params[:project_id])
end
rescue ActiveRecord::RecordNotFound
render_404
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -25,7 +25,7 @@ class BoardsController < ApplicationController
helper :watchers
def index
@boards = @project.boards
@boards = @project.boards.includes(:last_message => :author).all
# show the board if there is only one
if @boards.size == 1
@board = @boards.first
@@ -43,11 +43,11 @@ class BoardsController < ApplicationController
@topic_count = @board.topics.count
@topic_pages = Paginator.new self, @topic_count, per_page_option, params['page']
@topics = @board.topics.find :all, :order => ["#{Message.table_name}.sticky DESC", sort_clause].compact.join(', '),
@topics = @board.topics.reorder("#{Message.table_name}.sticky DESC").order(sort_clause).all(
:include => [:author, {:last_reply => :author}],
:limit => @topic_pages.items_per_page,
:offset => @topic_pages.current.offset
@message = Message.new
:offset => @topic_pages.current.offset)
@message = Message.new(:board => @board)
render :action => 'show', :layout => !request.xhr?
}
format.atom {

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,3 +1,20 @@
# Redmine - project management software
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class ContextMenusController < ApplicationController
helper :watchers
helper :issues
@@ -7,6 +24,7 @@ class ContextMenusController < ApplicationController
if (@issues.size == 1)
@issue = @issues.first
end
@issue_ids = @issues.map(&:id).sort
@allowed_statuses = @issues.map(&:new_statuses_allowed_to).reduce(:&)
@projects = @issues.collect(&:project).compact.uniq
@@ -31,6 +49,7 @@ class ContextMenusController < ApplicationController
@assignables = @projects.map(&:assignable_users).reduce(:&)
@trackers = @projects.map(&:trackers).reduce(:&)
end
@versions = @projects.map {|p| p.shared_versions.open}.reduce(:&)
@priorities = IssuePriority.active.reverse
@back = back_url
@@ -48,6 +67,7 @@ class ContextMenusController < ApplicationController
end
end
@safe_attributes = @issues.map(&:safe_attribute_names).reduce(:&)
render :layout => false
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -86,7 +86,9 @@ class DocumentsController < ApplicationController
attachments = Attachment.attach_files(@document, params[:attachments])
render_attachment_warning_if_needed(@document)
Mailer.deliver_attachments_added(attachments[:files]) if attachments.present? && attachments[:files].present? && Setting.notified_events.include?('document_added')
if attachments.present? && attachments[:files].present? && Setting.notified_events.include?('document_added')
Mailer.attachments_added(attachments[:files]).deliver
end
redirect_to :action => 'show', :id => @document
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -18,13 +18,26 @@
class EnumerationsController < ApplicationController
layout 'admin'
before_filter :require_admin
before_filter :require_admin, :except => :index
before_filter :require_admin_or_api_request, :only => :index
before_filter :build_new_enumeration, :only => [:new, :create]
before_filter :find_enumeration, :only => [:edit, :update, :destroy]
accept_api_auth :index
helper :custom_fields
def index
respond_to do |format|
format.html
format.api {
@klass = Enumeration.get_subclass(params[:type])
if @klass
@enumerations = @klass.shared.sorted.all
else
render_404
end
}
end
end
def new
@@ -33,7 +46,7 @@ class EnumerationsController < ApplicationController
def create
if request.post? && @enumeration.save
flash[:notice] = l(:notice_successful_create)
redirect_to :action => 'index', :type => @enumeration.type
redirect_to :action => 'index'
else
render :action => 'new'
end
@@ -45,7 +58,7 @@ class EnumerationsController < ApplicationController
def update
if request.put? && @enumeration.update_attributes(params[:enumeration])
flash[:notice] = l(:notice_successful_update)
redirect_to :action => 'index', :type => @enumeration.type
redirect_to :action => 'index'
else
render :action => 'edit'
end

View File

@@ -1,3 +1,20 @@
# Redmine - project management software
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class FilesController < ApplicationController
menu_item :files
@@ -29,7 +46,7 @@ class FilesController < ApplicationController
render_attachment_warning_if_needed(container)
if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added')
Mailer.deliver_attachments_added(attachments[:files])
Mailer.attachments_added(attachments[:files]).deliver
end
redirect_to project_files_path(@project)
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -19,51 +19,34 @@ class GroupsController < ApplicationController
layout 'admin'
before_filter :require_admin
before_filter :find_group, :except => [:index, :new, :create]
accept_api_auth :index, :show, :create, :update, :destroy, :add_users, :remove_user
helper :custom_fields
# GET /groups
# GET /groups.xml
def index
@groups = Group.find(:all, :order => 'lastname')
@groups = Group.sorted.all
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @groups }
format.html
format.api
end
end
# GET /groups/1
# GET /groups/1.xml
def show
@group = Group.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @group }
format.html
format.api
end
end
# GET /groups/new
# GET /groups/new.xml
def new
@group = Group.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @group }
end
end
# GET /groups/1/edit
def edit
@group = Group.find(params[:id], :include => :projects)
end
# POST /groups
# POST /groups.xml
def create
@group = Group.new(params[:group])
@group = Group.new
@group.safe_attributes = params[:group]
respond_to do |format|
if @group.save
@@ -71,102 +54,87 @@ class GroupsController < ApplicationController
flash[:notice] = l(:notice_successful_create)
redirect_to(params[:continue] ? new_group_path : groups_path)
}
format.xml { render :xml => @group, :status => :created, :location => @group }
format.api { render :action => 'show', :status => :created, :location => group_url(@group) }
else
format.html { render :action => "new" }
format.xml { render :xml => @group.errors, :status => :unprocessable_entity }
format.api { render_validation_errors(@group) }
end
end
end
# PUT /groups/1
# PUT /groups/1.xml
def edit
end
def update
@group = Group.find(params[:id])
@group.safe_attributes = params[:group]
respond_to do |format|
if @group.update_attributes(params[:group])
if @group.save
flash[:notice] = l(:notice_successful_update)
format.html { redirect_to(groups_path) }
format.xml { head :ok }
format.api { render_api_ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @group.errors, :status => :unprocessable_entity }
format.api { render_validation_errors(@group) }
end
end
end
# DELETE /groups/1
# DELETE /groups/1.xml
def destroy
@group = Group.find(params[:id])
@group.destroy
respond_to do |format|
format.html { redirect_to(groups_url) }
format.xml { head :ok }
format.api { render_api_ok }
end
end
def add_users
@group = Group.find(params[:id])
users = User.find_all_by_id(params[:user_ids])
@group.users << users if request.post?
@users = User.find_all_by_id(params[:user_id] || params[:user_ids])
@group.users << @users if request.post?
respond_to do |format|
format.html { redirect_to :controller => 'groups', :action => 'edit', :id => @group, :tab => 'users' }
format.js {
render(:update) {|page|
page.replace_html "tab-content-users", :partial => 'groups/users'
users.each {|user| page.visual_effect(:highlight, "user-#{user.id}") }
}
}
format.js
format.api { render_api_ok }
end
end
def remove_user
@group = Group.find(params[:id])
@group.users.delete(User.find(params[:user_id])) if request.delete?
respond_to do |format|
format.html { redirect_to :controller => 'groups', :action => 'edit', :id => @group, :tab => 'users' }
format.js { render(:update) {|page| page.replace_html "tab-content-users", :partial => 'groups/users'} }
format.js
format.api { render_api_ok }
end
end
def autocomplete_for_user
@group = Group.find(params[:id])
@users = User.active.not_in_group(@group).like(params[:q]).all(:limit => 100)
render :layout => false
end
def edit_membership
@group = Group.find(params[:id])
@membership = Member.edit_membership(params[:membership_id], params[:membership], @group)
@membership.save if request.post?
respond_to do |format|
if @membership.valid?
format.html { redirect_to :controller => 'groups', :action => 'edit', :id => @group, :tab => 'memberships' }
format.js {
render(:update) {|page|
page.replace_html "tab-content-memberships", :partial => 'groups/memberships'
page.visual_effect(:highlight, "member-#{@membership.id}")
}
}
else
format.js {
render(:update) {|page|
page.alert(l(:notice_failed_to_save_members, :errors => @membership.errors.full_messages.join(', ')))
}
}
end
format.html { redirect_to :controller => 'groups', :action => 'edit', :id => @group, :tab => 'memberships' }
format.js
end
end
def destroy_membership
@group = Group.find(params[:id])
Member.find(params[:membership_id]).destroy if request.post?
respond_to do |format|
format.html { redirect_to :controller => 'groups', :action => 'edit', :id => @group, :tab => 'memberships' }
format.js { render(:update) {|page| page.replace_html "tab-content-memberships", :partial => 'groups/memberships'} }
format.js
end
end
private
def find_group
@group = Group.find(params[:id])
rescue ActiveRecord::RecordNotFound
render_404
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -23,7 +23,7 @@ class IssueCategoriesController < ApplicationController
before_filter :find_project_by_project_id, :only => [:index, :new, :create]
before_filter :authorize
accept_api_auth :index, :show, :create, :update, :destroy
def index
respond_to do |format|
format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'categories', :id => @project }
@@ -41,6 +41,11 @@ class IssueCategoriesController < ApplicationController
def new
@category = @project.issue_categories.build
@category.safe_attributes = params[:issue_category]
respond_to do |format|
format.html
format.js
end
end
def create
@@ -52,20 +57,13 @@ class IssueCategoriesController < ApplicationController
flash[:notice] = l(:notice_successful_create)
redirect_to :controller => 'projects', :action => 'settings', :tab => 'categories', :id => @project
end
format.js do
# IE doesn't support the replace_html rjs method for select box options
render(:update) {|page| page.replace "issue_category_id",
content_tag('select', content_tag('option') + options_from_collection_for_select(@project.issue_categories, 'id', 'name', @category.id), :id => 'issue_category_id', :name => 'issue[category_id]')
}
end
format.js
format.api { render :action => 'show', :status => :created, :location => issue_category_path(@category) }
end
else
respond_to do |format|
format.html { render :action => 'new'}
format.js do
render(:update) {|page| page.alert(@category.errors.full_messages.join('\n')) }
end
format.js { render :action => 'new'}
format.api { render_validation_errors(@category) }
end
end
@@ -82,7 +80,7 @@ class IssueCategoriesController < ApplicationController
flash[:notice] = l(:notice_successful_update)
redirect_to :controller => 'projects', :action => 'settings', :tab => 'categories', :id => @project
}
format.api { head :ok }
format.api { render_api_ok }
end
else
respond_to do |format|
@@ -94,7 +92,7 @@ class IssueCategoriesController < ApplicationController
def destroy
@issue_count = @category.issues.size
if @issue_count == 0 || params[:todo] || api_request?
if @issue_count == 0 || params[:todo] || api_request?
reassign_to = nil
if params[:reassign_to_id] && (params[:todo] == 'reassign' || params[:todo].blank?)
reassign_to = @project.issue_categories.find_by_id(params[:reassign_to_id])
@@ -102,7 +100,7 @@ class IssueCategoriesController < ApplicationController
@category.destroy(reassign_to)
respond_to do |format|
format.html { redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'categories' }
format.api { head :ok }
format.api { render_api_ok }
end
return
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -42,23 +42,16 @@ class IssueRelationsController < ApplicationController
def create
@relation = IssueRelation.new(params[:relation])
@relation.issue_from = @issue
if params[:relation] && m = params[:relation][:issue_to_id].to_s.match(/^#?(\d+)$/)
if params[:relation] && m = params[:relation][:issue_to_id].to_s.strip.match(/^#?(\d+)$/)
@relation.issue_to = Issue.visible.find_by_id(m[1].to_i)
end
saved = @relation.save
respond_to do |format|
format.html { redirect_to :controller => 'issues', :action => 'show', :id => @issue }
format.js do
format.js {
@relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
render :update do |page|
page.replace_html "relations", :partial => 'issues/relations'
if @relation.errors.empty?
page << "$('relation_delay').value = ''"
page << "$('relation_issue_to_id').value = ''"
end
end
end
}
format.api {
if saved
render :action => 'show', :status => :created, :location => relation_url(@relation)
@@ -75,8 +68,8 @@ class IssueRelationsController < ApplicationController
respond_to do |format|
format.html { redirect_to issue_path } # TODO : does this really work since @issue is always nil? What is it useful to?
format.js { render(:update) {|page| page.remove "relation-#{@relation.id}"} }
format.api { head :ok }
format.js
format.api { render_api_ok }
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -50,13 +50,13 @@ class IssuesController < ApplicationController
include SortHelper
include IssuesHelper
helper :timelog
helper :gantt
include Redmine::Export::PDF
def index
retrieve_query
sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria)
sort_update(@query.sortable_columns)
@query.sort_criteria = sort_criteria.to_a
if @query.valid?
case params[:format]
@@ -82,7 +82,7 @@ class IssuesController < ApplicationController
respond_to do |format|
format.html { render :template => 'issues/index', :layout => !request.xhr? }
format.api {
Issue.load_relations(@issues) if include_in_api_response?('relations')
Issue.load_visible_relations(@issues) if include_in_api_response?('relations')
}
format.atom { render_feed(@issues, :title => "#{@project || Setting.app_title}: #{l(:label_issue_plural)}") }
format.csv { send_data(issues_to_csv(@issues, @project, @query, params), :type => 'text/csv; header=present', :filename => 'export.csv') }
@@ -100,8 +100,9 @@ class IssuesController < ApplicationController
end
def show
@journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
@journals = @issue.journals.includes(:user, :details).reorder("#{Journal.table_name}.id ASC").all
@journals.each_with_index {|j,i| j.indice = i+1}
@journals.reject!(&:private_notes?) unless User.current.allowed_to?(:view_private_notes, @issue.project)
@journals.reverse! if User.current.wants_comments_in_reverse_order?
@changesets = @issue.changesets.visible.all
@@ -119,7 +120,10 @@ class IssuesController < ApplicationController
}
format.api
format.atom { render :template => 'journals/index', :layout => false, :content_type => 'application/atom+xml' }
format.pdf { send_data(issue_to_pdf(@issue), :type => 'application/pdf', :filename => "#{@project.identifier}-#{@issue.id}.pdf") }
format.pdf {
pdf = issue_to_pdf(@issue, :journals => @journals)
send_data(pdf, :type => 'application/pdf', :filename => "#{@project.identifier}-#{@issue.id}.pdf")
}
end
end
@@ -128,17 +132,7 @@ class IssuesController < ApplicationController
def new
respond_to do |format|
format.html { render :action => 'new', :layout => !request.xhr? }
format.js {
render(:update) { |page|
if params[:project_change]
page.replace_html 'all_attributes', :partial => 'form'
else
page.replace_html 'attributes', :partial => 'attributes'
end
m = User.current.allowed_to?(:log_time, @issue.project) ? 'show' : 'hide'
page << "if ($('log_time')) {Element.#{m}('log_time');}"
}
}
format.js { render :partial => 'update_form' }
end
end
@@ -150,7 +144,7 @@ class IssuesController < ApplicationController
respond_to do |format|
format.html {
render_attachment_warning_if_needed(@issue)
flash[:notice] = l(:notice_issue_successful_create, :id => "<a href='#{issue_path(@issue)}'>##{@issue.id}</a>")
flash[:notice] = l(:notice_issue_successful_create, :id => view_context.link_to("##{@issue.id}", issue_path(@issue), :title => @issue.subject))
redirect_to(params[:continue] ? { :action => 'new', :project_id => @issue.project, :issue => {:tracker_id => @issue.tracker, :parent_issue_id => @issue.parent_issue_id}.reject {|k,v| v.nil?} } :
{ :action => 'show', :id => @issue })
}
@@ -183,12 +177,8 @@ class IssuesController < ApplicationController
rescue ActiveRecord::StaleObjectError
@conflict = true
if params[:last_journal_id]
if params[:last_journal_id].present?
last_journal_id = params[:last_journal_id].to_i
@conflict_journals = @issue.journals.all(:conditions => ["#{Journal.table_name}.id > ?", last_journal_id])
else
@conflict_journals = @issue.journals.all
end
@conflict_journals = @issue.journals_after(params[:last_journal_id]).all
@conflict_journals.reject!(&:private_notes?) unless User.current.allowed_to?(:view_private_notes, @issue.project)
end
end
@@ -198,7 +188,7 @@ class IssuesController < ApplicationController
respond_to do |format|
format.html { redirect_back_or_default({:action => 'show', :id => @issue}) }
format.api { head :ok }
format.api { render_api_ok }
end
else
respond_to do |format|
@@ -225,12 +215,20 @@ class IssuesController < ApplicationController
end
target_projects ||= @projects
@available_statuses = @issues.map(&:new_statuses_allowed_to).reduce(:&)
if @copy
@available_statuses = [IssueStatus.default]
else
@available_statuses = @issues.map(&:new_statuses_allowed_to).reduce(:&)
end
@custom_fields = target_projects.map{|p|p.all_issue_custom_fields}.reduce(:&)
@assignables = target_projects.map(&:assignable_users).reduce(:&)
@trackers = target_projects.map(&:trackers).reduce(:&)
@versions = target_projects.map {|p| p.shared_versions.open}.reduce(:&)
@categories = target_projects.map {|p| p.issue_categories}.reduce(:&)
if @copy
@attachments_present = @issues.detect {|i| i.attachments.any?}.present?
@subtasks_present = @issues.detect {|i| !i.leaf?}.present?
end
@safe_attributes = @issues.map(&:safe_attribute_names).reduce(:&)
render :layout => false if request.xhr?
@@ -243,10 +241,20 @@ class IssuesController < ApplicationController
unsaved_issue_ids = []
moved_issues = []
if @copy && params[:copy_subtasks].present?
# Descendant issues will be copied with the parent task
# Don't copy them twice
@issues.reject! {|issue| @issues.detect {|other| issue.is_descendant_of?(other)}}
end
@issues.each do |issue|
issue.reload
if @copy
issue = issue.copy
issue = issue.copy({},
:attachments => params[:copy_attachments].present?,
:subtasks => params[:copy_subtasks].present?
)
end
journal = issue.init_journal(User.current, params[:notes])
issue.safe_attributes = attributes
@@ -301,23 +309,11 @@ class IssuesController < ApplicationController
end
respond_to do |format|
format.html { redirect_back_or_default(:action => 'index', :project_id => @project) }
format.api { head :ok }
format.api { render_api_ok }
end
end
private
def find_issue
# Issue.visible.find(...) can not be used to redirect user to the login form
# if the issue actually exists but requires authentication
@issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])
unless @issue.visible?
deny_access
return
end
@project = @issue.project
rescue ActiveRecord::RecordNotFound
render_404
end
private
def find_project
project_id = params[:project_id] || (params[:issue] && params[:issue][:project_id])
@@ -348,14 +344,11 @@ private
# from the params
# TODO: Refactor, not everything in here is needed by #edit
def update_issue_from_params
@allowed_statuses = @issue.new_statuses_allowed_to(User.current)
@priorities = IssuePriority.active
@edit_allowed = User.current.allowed_to?(:edit_issues, @project)
@time_entry = TimeEntry.new(:issue => @issue, :project => @issue.project)
@time_entry.attributes = params[:time_entry]
@notes = params[:notes] || (params[:issue].present? ? params[:issue][:notes] : nil)
@issue.init_journal(User.current, @notes)
@issue.init_journal(User.current)
issue_attributes = params[:issue]
if issue_attributes && params[:conflict_resolution]
@@ -364,13 +357,15 @@ private
issue_attributes = issue_attributes.dup
issue_attributes.delete(:lock_version)
when 'add_notes'
issue_attributes = {}
issue_attributes = issue_attributes.slice(:notes)
when 'cancel'
redirect_to issue_path(@issue)
return false
end
end
@issue.safe_attributes = issue_attributes
@priorities = IssuePriority.active
@allowed_statuses = @issue.new_statuses_allowed_to(User.current)
true
end
@@ -383,7 +378,8 @@ private
begin
@copy_from = Issue.visible.find(params[:copy_from])
@copy_attachments = params[:copy_attachments].present? || request.get?
@issue.copy_from(@copy_from, :attachments => @copy_attachments)
@copy_subtasks = params[:copy_subtasks].present? || request.get?
@issue.copy_from(@copy_from, :attachments => @copy_attachments, :subtasks => @copy_subtasks)
rescue ActiveRecord::RecordNotFound
render_404
return
@@ -395,7 +391,7 @@ private
end
@issue.project = @project
@issue.author = User.current
@issue.author ||= User.current
# Tracker must be set before custom field values
@issue.tracker ||= @project.trackers.find((params[:issue] && params[:issue][:tracker_id]) || params[:tracker_id] || :first)
if @issue.tracker.nil?
@@ -420,7 +416,16 @@ private
def parse_params_for_bulk_issue_attributes(params)
attributes = (params[:issue] || {}).reject {|k,v| v.blank?}
attributes.keys.each {|k| attributes[k] = '' if attributes[k] == 'none'}
attributes[:custom_field_values].reject! {|k,v| v.blank?} if attributes[:custom_field_values]
if custom = attributes[:custom_field_values]
custom.reject! {|k,v| v.blank?}
custom.keys.each do |k|
if custom[k].is_a?(Array)
custom[k] << '' if custom[k].delete('__none__')
else
custom[k] = '' if custom[k] == '__none__'
end
end
end
attributes
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -57,26 +57,20 @@ class JournalsController < ApplicationController
end
def new
journal = Journal.find(params[:journal_id]) if params[:journal_id]
if journal
user = journal.user
text = journal.notes
@journal = Journal.visible.find(params[:journal_id]) if params[:journal_id]
if @journal
user = @journal.user
text = @journal.notes
else
user = @issue.author
text = @issue.description
end
# Replaces pre blocks with [...]
text = text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]')
content = "#{ll(Setting.default_language, :text_user_wrote, user)}\n> "
content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n"
render(:update) { |page|
page.<< "$('notes').value = \"#{escape_javascript content}\";"
page.show 'update'
page << "Form.Element.focus('notes');"
page << "Element.scrollTo('update');"
page << "$('notes').scrollTop = $('notes').scrollHeight - $('notes').clientHeight;"
}
@content = "#{ll(Setting.default_language, :text_user_wrote, user)}\n> "
@content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n"
rescue ActiveRecord::RecordNotFound
render_404
end
def edit
@@ -103,17 +97,9 @@ class JournalsController < ApplicationController
private
def find_journal
@journal = Journal.find(params[:id])
@journal = Journal.visible.find(params[:id])
@project = @journal.journalized.project
rescue ActiveRecord::RecordNotFound
render_404
end
# TODO: duplicated in IssuesController
def find_issue
@issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])
@project = @issue.project
rescue ActiveRecord::RecordNotFound
render_404
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -63,31 +63,16 @@ class MembersController < ApplicationController
end
respond_to do |format|
if members.present? && members.all? {|m| m.valid? }
format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
format.js {
render(:update) {|page|
page.replace_html "tab-content-members", :partial => 'projects/settings/members'
page << 'hideOnLoad()'
members.each {|member| page.visual_effect(:highlight, "member-#{member.id}") }
}
}
format.api {
@member = members.first
format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
format.js { @members = members }
format.api {
@member = members.first
if @member.valid?
render :action => 'show', :status => :created, :location => membership_url(@member)
}
else
format.js {
render(:update) {|page|
errors = members.collect {|m|
m.errors.full_messages
}.flatten.uniq
page.alert(l(:notice_failed_to_save_members, :errors => errors.join(', ')))
}
}
format.api { render_validation_errors(members.first) }
end
else
render_validation_errors(@member)
end
}
end
end
@@ -98,16 +83,10 @@ class MembersController < ApplicationController
saved = @member.save
respond_to do |format|
format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
format.js {
render(:update) {|page|
page.replace_html "tab-content-members", :partial => 'projects/settings/members'
page << 'hideOnLoad()'
page.visual_effect(:highlight, "member-#{@member.id}")
}
}
format.js
format.api {
if saved
head :ok
render_api_ok
else
render_validation_errors(@member)
end
@@ -121,14 +100,10 @@ class MembersController < ApplicationController
end
respond_to do |format|
format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
format.js { render(:update) {|page|
page.replace_html "tab-content-members", :partial => 'projects/settings/members'
page << 'hideOnLoad()'
}
}
format.js
format.api {
if @member.destroyed?
head :ok
render_api_ok
else
head :unprocessable_entity
end
@@ -140,5 +115,4 @@ class MembersController < ApplicationController
@principals = Principal.active.not_member_of(@project).like(params[:q]).all(:limit => 100)
render :layout => false
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -22,6 +22,7 @@ class MessagesController < ApplicationController
before_filter :find_message, :except => [:new, :preview]
before_filter :authorize, :except => [:preview, :edit, :destroy]
helper :boards
helper :watchers
helper :attachments
include AttachmentsHelper
@@ -59,7 +60,7 @@ class MessagesController < ApplicationController
if @message.save
call_hook(:controller_messages_new_after_save, { :params => params, :message => @message})
render_attachment_warning_if_needed(@message)
redirect_to :action => 'show', :id => @message
redirect_to board_message_path(@board, @message)
end
end
end
@@ -76,7 +77,7 @@ class MessagesController < ApplicationController
attachments = Attachment.attach_files(@reply, params[:attachments])
render_attachment_warning_if_needed(@reply)
end
redirect_to :action => 'show', :id => @topic, :r => @reply
redirect_to board_message_path(@board, @topic, :r => @reply)
end
# Edit a message
@@ -88,40 +89,35 @@ class MessagesController < ApplicationController
render_attachment_warning_if_needed(@message)
flash[:notice] = l(:notice_successful_update)
@message.reload
redirect_to :action => 'show', :board_id => @message.board, :id => @message.root, :r => (@message.parent_id && @message.id)
redirect_to board_message_path(@message.board, @message.root, :r => (@message.parent_id && @message.id))
end
end
# Delete a messages
def destroy
(render_403; return false) unless @message.destroyable_by?(User.current)
r = @message.to_param
@message.destroy
redirect_to @message.parent.nil? ?
{ :controller => 'boards', :action => 'show', :project_id => @project, :id => @board } :
{ :action => 'show', :id => @message.parent, :r => @message }
if @message.parent
redirect_to board_message_path(@board, @message.parent, :r => r)
else
redirect_to project_board_path(@project, @board)
end
end
def quote
user = @message.author
text = @message.content
subject = @message.subject.gsub('"', '\"')
subject = "RE: #{subject}" unless subject.starts_with?('RE:')
content = "#{ll(Setting.default_language, :text_user_wrote, user)}\\n> "
content << text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]').gsub('"', '\"').gsub(/(\r?\n|\r\n?)/, "\\n> ") + "\\n\\n"
render(:update) { |page|
page << "$('message_subject').value = \"#{subject}\";"
page.<< "$('message_content').value = \"#{content}\";"
page.show 'reply'
page << "Form.Element.focus('message_content');"
page << "Element.scrollTo('reply');"
page << "$('message_content').scrollTop = $('message_content').scrollHeight - $('message_content').clientHeight;"
}
@subject = @message.subject
@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"
end
def preview
message = @board.messages.find_by_id(params[:id])
@attachements = message.attachments if message
@text = (params[:message] || params[:reply])[:content]
@previewed = message
render :partial => 'common/preview'
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -65,6 +65,24 @@ class MyController < ApplicationController
end
end
# Destroys user's account
def destroy
@user = User.current
unless @user.own_account_deletable?
redirect_to :action => 'account'
return
end
if request.post? && params[:confirm]
@user.destroy
if @user.destroyed?
logout_user
flash[:notice] = l(:notice_account_deleted)
end
redirect_to home_path
end
end
# Manage user's password
def password
@user = User.current
@@ -117,7 +135,11 @@ class MyController < ApplicationController
@user = User.current
@blocks = @user.pref[:my_page_layout] || DEFAULT_LAYOUT.dup
@block_options = []
BLOCKS.each {|k, v| @block_options << [l("my.blocks.#{v}", :default => [v, v.to_s.humanize]), k.dasherize]}
BLOCKS.each do |k, v|
unless %w(top left right).detect {|f| (@blocks[f] ||= []).include?(k)}
@block_options << [l("my.blocks.#{v}", :default => [v, v.to_s.humanize]), k.dasherize]
end
end
end
# Add a block to user's page
@@ -125,16 +147,17 @@ class MyController < ApplicationController
# params[:block] : id of the block to add
def add_block
block = params[:block].to_s.underscore
(render :nothing => true; return) unless block && (BLOCKS.keys.include? block)
@user = User.current
layout = @user.pref[:my_page_layout] || {}
# remove if already present in a group
%w(top left right).each {|f| (layout[f] ||= []).delete block }
# add it on top
layout['top'].unshift block
@user.pref[:my_page_layout] = layout
@user.pref.save
render :partial => "block", :locals => {:user => @user, :block_name => block}
if block.present? && BLOCKS.key?(block)
@user = User.current
layout = @user.pref[:my_page_layout] || {}
# remove if already present in a group
%w(top left right).each {|f| (layout[f] ||= []).delete block }
# add it on top
layout['top'].unshift block
@user.pref[:my_page_layout] = layout
@user.pref.save
end
redirect_to :action => 'page_layout'
end
# Remove a block to user's page
@@ -147,7 +170,7 @@ class MyController < ApplicationController
%w(top left right).each {|f| (layout[f] ||= []).delete block }
@user.pref[:my_page_layout] = layout
@user.pref.save
render :nothing => true
redirect_to :action => 'page_layout'
end
# Change blocks order on user's page
@@ -157,7 +180,8 @@ class MyController < ApplicationController
group = params[:group]
@user = User.current
if group.is_a?(String)
group_items = (params["list-#{group}"] || []).collect(&:underscore)
group_items = (params["blocks"] || []).collect(&:underscore)
group_items.each {|s| s.sub!(/^block_/, '')}
if group_items and group_items.is_a? Array
layout = @user.pref[:my_page_layout] || {}
# remove group blocks if they are presents in other groups

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -26,7 +26,8 @@ class PreviewsController < ApplicationController
if @description && @description.gsub(/(\r?\n|\n\r?)/, "\n") == @issue.description.to_s.gsub(/(\r?\n|\n\r?)/, "\n")
@description = nil
end
@notes = params[:notes]
# params[:notes] is useful for preview of notes in issue history
@notes = params[:notes] || (params[:issue] ? params[:issue][:notes] : nil)
else
@description = (params[:issue] ? params[:issue][:description] : nil)
end
@@ -34,6 +35,10 @@ class PreviewsController < ApplicationController
end
def news
if params[:id].present? && news = News.visible.find_by_id(params[:id])
@previewed = news
@attachments = news.attachments
end
@text = (params[:news] ? params[:news][:description] : nil)
render :partial => 'common/preview'
end

View File

@@ -1,3 +1,20 @@
# Redmine - project management software
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class ProjectEnumerationsController < ApplicationController
before_filter :find_project_by_project_id
before_filter :authorize

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -48,7 +48,11 @@ class ProjectsController < ApplicationController
def index
respond_to do |format|
format.html {
@projects = Project.visible.find(:all, :order => 'lft')
scope = Project
unless params[:closed]
scope = scope.active
end
@projects = scope.visible.order('lft').all
}
format.api {
@offset, @limit = api_offset_and_limit
@@ -65,14 +69,14 @@ class ProjectsController < ApplicationController
def new
@issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
@trackers = Tracker.all
@trackers = Tracker.sorted.all
@project = Project.new
@project.safe_attributes = params[:project]
end
def create
@issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
@trackers = Tracker.all
@trackers = Tracker.sorted.all
@project = Project.new
@project.safe_attributes = params[:project]
@@ -105,18 +109,14 @@ class ProjectsController < ApplicationController
def copy
@issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
@trackers = Tracker.all
@trackers = Tracker.sorted.all
@root_projects = Project.find(:all,
:conditions => "parent_id IS NULL AND status = #{Project::STATUS_ACTIVE}",
:order => 'name')
@source_project = Project.find(params[:id])
if request.get?
@project = Project.copy_from(@source_project)
if @project
@project.identifier = Project.next_identifier if Setting.sequential_project_identifiers?
else
redirect_to :controller => 'admin', :action => 'projects'
end
@project.identifier = Project.next_identifier if Setting.sequential_project_identifiers?
else
Mailer.with_deliveries(params[:notifications] == '1') do
@project = Project.new
@@ -135,7 +135,8 @@ class ProjectsController < ApplicationController
end
end
rescue ActiveRecord::RecordNotFound
redirect_to :controller => 'admin', :action => 'projects'
# source_project not found
render_404
end
# Show @project
@@ -152,12 +153,8 @@ class ProjectsController < ApplicationController
cond = @project.project_condition(Setting.display_subprojects_issues?)
@open_issues_by_tracker = Issue.visible.count(:group => :tracker,
:include => [:project, :status, :tracker],
:conditions => ["(#{cond}) AND #{IssueStatus.table_name}.is_closed=?", false])
@total_issues_by_tracker = Issue.visible.count(:group => :tracker,
:include => [:project, :status, :tracker],
:conditions => cond)
@open_issues_by_tracker = Issue.visible.open.where(cond).count(:group => :tracker)
@total_issues_by_tracker = Issue.visible.where(cond).count(:group => :tracker)
if User.current.allowed_to?(:view_time_entries, @project)
@total_hours = TimeEntry.visible.sum(:hours, :include => :project, :conditions => cond).to_f
@@ -175,7 +172,7 @@ class ProjectsController < ApplicationController
@issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
@issue_category ||= IssueCategory.new
@member ||= @project.members.new
@trackers = Tracker.all
@trackers = Tracker.sorted.all
@wiki ||= @project.wiki
end
@@ -191,7 +188,7 @@ class ProjectsController < ApplicationController
flash[:notice] = l(:notice_successful_update)
redirect_to :action => 'settings', :id => @project
}
format.api { head :ok }
format.api { render_api_ok }
end
else
respond_to do |format|
@@ -224,6 +221,16 @@ class ProjectsController < ApplicationController
redirect_to(url_for(:controller => 'admin', :action => 'projects', :status => params[:status]))
end
def close
@project.close
redirect_to project_path(@project)
end
def reopen
@project.reopen
redirect_to project_path(@project)
end
# Delete @project
def destroy
@project_to_destroy = @project
@@ -231,7 +238,7 @@ class ProjectsController < ApplicationController
@project_to_destroy.destroy
respond_to do |format|
format.html { redirect_to :controller => 'admin', :action => 'projects' }
format.api { head :ok }
format.api { render_api_ok }
end
end
# hide project in layout

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -22,7 +22,7 @@ class ReportsController < ApplicationController
def issue_report
@trackers = @project.trackers
@versions = @project.shared_versions.sort
@priorities = IssuePriority.all
@priorities = IssuePriority.all.reverse
@categories = @project.issue_categories
@assignees = (Setting.issue_group_assignment? ? @project.principals : @project.users).sort
@authors = @project.users.sort
@@ -53,7 +53,7 @@ class ReportsController < ApplicationController
@report_title = l(:field_version)
when "priority"
@field = "priority_id"
@rows = IssuePriority.all
@rows = IssuePriority.all.reverse
@data = Issue.by_priority(@project)
@report_title = l(:field_priority)
when "category"

View File

@@ -18,6 +18,7 @@
require 'SVG/Graph/Bar'
require 'SVG/Graph/BarHorizontal'
require 'digest/sha1'
require 'redmine/scm/adapters/abstract_adapter'
class ChangesetNotFound < Exception; end
class InvalidRevisionParam < Exception; end
@@ -41,11 +42,15 @@ class RepositoriesController < ApplicationController
@repository = Repository.factory(scm)
@repository.is_default = @project.repository.nil?
@repository.project = @project
render :layout => !request.xhr?
end
def create
@repository = Repository.factory(params[:repository_scm], params[:repository])
attrs = pickup_extra_info
@repository = Repository.factory(params[:repository_scm])
@repository.safe_attributes = params[:repository]
if attrs[:attrs_extra].keys.any?
@repository.merge_extra_info(attrs[:attrs_extra])
end
@repository.project = @project
if request.post? && @repository.save
redirect_to settings_project_path(@project, :tab => 'repositories')
@@ -58,7 +63,11 @@ class RepositoriesController < ApplicationController
end
def update
@repository.attributes = params[:repository]
attrs = pickup_extra_info
@repository.safe_attributes = attrs[:attrs]
if attrs[:attrs_extra].keys.any?
@repository.merge_extra_info(attrs[:attrs_extra])
end
@repository.project = @project
if request.put? && @repository.save
redirect_to settings_project_path(@project, :tab => 'repositories')
@@ -67,6 +76,20 @@ class RepositoriesController < ApplicationController
end
end
def pickup_extra_info
p = {}
p_extra = {}
params[:repository].each do |k, v|
if k =~ /^extra_/
p_extra[k] = v
else
p[k] = v
end
end
{:attrs => p, :attrs_extra => p_extra}
end
private :pickup_extra_info
def committers
@committers = @repository.committers
@users = @project.users
@@ -129,7 +152,15 @@ class RepositoriesController < ApplicationController
end
end
def raw
entry_and_raw(true)
end
def entry
entry_and_raw(false)
end
def entry_and_raw(is_raw)
@entry = @repository.entry(@path, @rev)
(show_error_not_found; return) unless @entry
@@ -138,13 +169,14 @@ class RepositoriesController < ApplicationController
@content = @repository.cat(@path, @rev)
(show_error_not_found; return) unless @content
if 'raw' == params[:format] ||
if is_raw ||
(@content.size && @content.size > Setting.file_max_size_displayed.to_i.kilobyte) ||
! is_entry_text_data?(@content, @path)
# Force the download
send_opt = { :filename => filename_for_content_disposition(@path.split('/').last) }
send_type = Redmine::MimeType.of(@path)
send_opt[:type] = send_type.to_s if send_type
send_opt[:disposition] = (Redmine::MimeType.is_type?('image', @path) && !is_raw ? 'inline' : 'attachment')
send_data @content, send_opt
else
# Prevent empty lines when displaying a file with Windows style eol
@@ -154,6 +186,7 @@ class RepositoriesController < ApplicationController
@changeset = @repository.find_changeset_by_name(@rev)
end
end
private :entry_and_raw
def is_entry_text_data?(ent, path)
# UTF-16 contains "\x00".
@@ -202,22 +235,6 @@ class RepositoriesController < ApplicationController
if @issue
@changeset.issues << @issue
respond_to do |format|
format.js {
render :update do |page|
page.replace_html "related-issues", :partial => "related_issues"
page.visual_effect :highlight, "related-issue-#{@issue.id}"
end
}
end
else
respond_to do |format|
format.js {
render :update do |page|
page.alert(l(:label_issue) + ' ' + l('activerecord.errors.messages.invalid'))
end
}
end
end
end
@@ -225,17 +242,9 @@ class RepositoriesController < ApplicationController
# DELETE /projects/:project_id/repository/(:repository_id/)revisions/:rev/issues/:issue_id
def remove_related_issue
@issue = Issue.visible.find_by_id(params[:issue_id])
if @issue
if @issue
@changeset.issues.delete(@issue)
end
respond_to do |format|
format.js {
render :update do |page|
page.remove "related-issue-#{@issue.id}"
end if @issue
}
end
end
def diff
@@ -307,8 +316,7 @@ class RepositoriesController < ApplicationController
@repository = @project.repository
end
(render_404; return false) unless @repository
@path = params[:path].join('/') unless params[:path].nil?
@path ||= ''
@path = params[:path].is_a?(Array) ? params[:path].join('/') : params[:path].to_s
@rev = params[:rev].blank? ? @repository.default_branch : params[:rev].to_s.strip
@rev_to = params[:rev_to]
@@ -343,17 +351,17 @@ class RepositoriesController < ApplicationController
@date_to = Date.today
@date_from = @date_to << 11
@date_from = Date.civil(@date_from.year, @date_from.month, 1)
commits_by_day = repository.changesets.count(
commits_by_day = Changeset.count(
:all, :group => :commit_date,
:conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to])
:conditions => ["repository_id = ? AND commit_date BETWEEN ? AND ?", repository.id, @date_from, @date_to])
commits_by_month = [0] * 12
commits_by_day.each {|c| commits_by_month[c.first.to_date.months_ago] += c.last }
commits_by_day.each {|c| commits_by_month[(@date_to.month - c.first.to_date.month) % 12] += c.last }
changes_by_day = repository.changes.count(
:all, :group => :commit_date,
:conditions => ["commit_date BETWEEN ? AND ?", @date_from, @date_to])
changes_by_day = Change.count(
:all, :group => :commit_date, :include => :changeset,
:conditions => ["#{Changeset.table_name}.repository_id = ? AND #{Changeset.table_name}.commit_date BETWEEN ? AND ?", repository.id, @date_from, @date_to])
changes_by_month = [0] * 12
changes_by_day.each {|c| changes_by_month[c.first.to_date.months_ago] += c.last }
changes_by_day.each {|c| changes_by_month[(@date_to.month - c.first.to_date.month) % 12] += c.last }
fields = []
12.times {|m| fields << month_name(((Date.today.month - 1 - m) % 12) + 1)}
@@ -384,10 +392,10 @@ class RepositoriesController < ApplicationController
end
def graph_commits_per_author(repository)
commits_by_author = repository.changesets.count(:all, :group => :committer)
commits_by_author = Changeset.count(:all, :group => :committer, :conditions => ["repository_id = ?", repository.id])
commits_by_author.to_a.sort! {|x, y| x.last <=> y.last}
changes_by_author = repository.changes.count(:all, :group => :committer)
changes_by_author = Change.count(:all, :group => :committer, :include => :changeset, :conditions => ["#{Changeset.table_name}.repository_id = ?", repository.id])
h = changes_by_author.inject({}) {|o, i| o[i.first] = i.last; o}
fields = commits_by_author.collect {|r| r.first}
@@ -423,4 +431,3 @@ class RepositoriesController < ApplicationController
graph.burn
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -18,10 +18,10 @@
class RolesController < ApplicationController
layout 'admin'
before_filter :require_admin, :except => :index
before_filter :require_admin_or_api_request, :only => :index
before_filter :find_role, :only => [:edit, :update, :destroy]
accept_api_auth :index
before_filter :require_admin, :except => [:index, :show]
before_filter :require_admin_or_api_request, :only => [:index, :show]
before_filter :find_role, :only => [:show, :edit, :update, :destroy]
accept_api_auth :index, :show
def index
respond_to do |format|
@@ -35,9 +35,18 @@ class RolesController < ApplicationController
end
end
def show
respond_to do |format|
format.api
end
end
def new
# Prefills the form with 'Non member' role permissions
# Prefills the form with 'Non member' role permissions by default
@role = Role.new(params[:role] || {:permissions => Role.non_member.permissions})
if params[:copy].present? && @copy_from = Role.find_by_id(params[:copy])
@role.copy_from(@copy_from)
end
@roles = Role.sorted.all
end
@@ -46,7 +55,7 @@ class RolesController < ApplicationController
if request.post? && @role.save
# workflow copy
if !params[:copy_workflow_from].blank? && (copy_from = Role.find_by_id(params[:copy_workflow_from]))
@role.workflows.copy(copy_from)
@role.workflow_rules.copy(copy_from)
end
flash[:notice] = l(:notice_successful_create)
redirect_to :action => 'index'

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -39,7 +39,8 @@ class SettingsController < ApplicationController
redirect_to :action => 'edit', :tab => params[:tab]
else
@options = {}
@options[:user_format] = User::USER_FORMATS.keys.collect {|f| [User.current.name(f), f.to_s] }
user_format = User::USER_FORMATS.collect{|key, value| [key, value[:setting_order]]}.sort{|a, b| a[1] <=> b[1]}
@options[:user_format] = user_format.collect{|f| [User.current.name(f[0]), f[0].to_s]}
@deliveries = ActionMailer::Base.perform_deliveries
@guessed_host_and_path = request.host_with_port.dup

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -18,12 +18,13 @@
class TimelogController < ApplicationController
menu_item :issues
before_filter :find_project, :only => [:create]
before_filter :find_project_for_new_time_entry, :only => [:create]
before_filter :find_time_entry, :only => [:show, :edit, :update]
before_filter :find_time_entries, :only => [:bulk_edit, :bulk_update, :destroy]
before_filter :authorize, :except => [:new, :index, :report]
before_filter :find_optional_project, :only => [:new, :index, :report]
before_filter :find_optional_project, :only => [:index, :report]
before_filter :find_optional_project_for_new_time_entry, :only => [:new]
before_filter :authorize_global, :only => [:new, :index, :report]
accept_rss_auth :index
@@ -38,7 +39,7 @@ class TimelogController < ApplicationController
def index
sort_init 'spent_on', 'desc'
sort_update 'spent_on' => 'spent_on',
sort_update 'spent_on' => ['spent_on', "#{TimeEntry.table_name}.created_on"],
'user' => 'user_id',
'activity' => 'activity_id',
'project' => "#{Project.table_name}.name",
@@ -133,9 +134,13 @@ class TimelogController < ApplicationController
flash[:notice] = l(:notice_successful_create)
if params[:continue]
if params[:project_id]
redirect_to :action => 'new', :project_id => @time_entry.project, :issue_id => @time_entry.issue, :back_url => params[:back_url]
redirect_to :action => 'new', :project_id => @time_entry.project, :issue_id => @time_entry.issue,
:time_entry => {:issue_id => @time_entry.issue_id, :activity_id => @time_entry.activity_id},
:back_url => params[:back_url]
else
redirect_to :action => 'new', :back_url => params[:back_url]
redirect_to :action => 'new',
:time_entry => {:project_id => @time_entry.project_id, :issue_id => @time_entry.issue_id, :activity_id => @time_entry.activity_id},
:back_url => params[:back_url]
end
else
redirect_back_or_default :action => 'index', :project_id => @time_entry.project
@@ -166,7 +171,7 @@ class TimelogController < ApplicationController
flash[:notice] = l(:notice_successful_update)
redirect_back_or_default :action => 'index', :project_id => @time_entry.project
}
format.api { head :ok }
format.api { render_api_ok }
end
else
respond_to do |format|
@@ -218,7 +223,7 @@ class TimelogController < ApplicationController
}
format.api {
if destroyed
head :ok
render_api_ok
else
render_validation_errors(@time_entries)
end
@@ -258,7 +263,7 @@ private
end
end
def find_project
def find_optional_project_for_new_time_entry
if (project_id = (params[:project_id] || params[:time_entry] && params[:time_entry][:project_id])).present?
@project = Project.find(project_id)
end
@@ -266,14 +271,17 @@ private
@issue = Issue.find(issue_id)
@project ||= @issue.project
end
if @project.nil?
render_404
return false
end
rescue ActiveRecord::RecordNotFound
render_404
end
def find_project_for_new_time_entry
find_optional_project_for_new_time_entry
if @project.nil?
render_404
end
end
def find_optional_project
if !params[:issue_id].blank?
@issue = Issue.find(params[:issue_id])
@@ -300,6 +308,9 @@ private
when 'last_week'
@from = Date.today - 7 - (Date.today.cwday - 1)%7
@to = @from + 6
when 'last_2_weeks'
@from = Date.today - 14 - (Date.today.cwday - 1)%7
@to = @from + 13
when '7_days'
@from = Date.today - 7
@to = Date.today

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -29,7 +29,7 @@ class TrackersController < ApplicationController
render :action => "index", :layout => false if request.xhr?
}
format.api {
@trackers = Tracker.all
@trackers = Tracker.sorted.all
}
end
end
@@ -45,7 +45,7 @@ class TrackersController < ApplicationController
if request.post? and @tracker.save
# workflow copy
if !params[:copy_workflow_from].blank? && (copy_from = Tracker.find_by_id(params[:copy_workflow_from]))
@tracker.workflows.copy(copy_from)
@tracker.workflow_rules.copy(copy_from)
end
flash[:notice] = l(:notice_successful_create)
redirect_to :action => 'index'
@@ -59,7 +59,7 @@ class TrackersController < ApplicationController
@tracker ||= Tracker.find(params[:id])
@projects = Project.find(:all)
end
def update
@tracker = Tracker.find(params[:id])
if request.put? and @tracker.update_attributes(params[:tracker])
@@ -80,4 +80,22 @@ class TrackersController < ApplicationController
end
redirect_to :action => 'index'
end
def fields
if request.post? && params[:trackers]
params[:trackers].each do |tracker_id, tracker_params|
tracker = Tracker.find_by_id(tracker_id)
if tracker
tracker.core_fields = tracker_params[:core_fields]
tracker.custom_field_ids = tracker_params[:custom_field_ids]
tracker.save
end
end
flash[:notice] = l(:notice_successful_update)
redirect_to :action => 'fields'
return
end
@trackers = Tracker.sorted.all
@custom_fields = IssueCustomField.all.sort
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -99,11 +99,11 @@ class UsersController < ApplicationController
@user.pref.save
@user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
Mailer.deliver_account_information(@user, params[:user][:password]) if params[:send_information]
Mailer.account_information(@user, params[:user][:password]).deliver if params[:send_information]
respond_to do |format|
format.html {
flash[:notice] = l(:notice_successful_create)
flash[:notice] = l(:notice_user_successful_create, :id => view_context.link_to(@user.login, user_path(@user)))
redirect_to(params[:continue] ?
{:controller => 'users', :action => 'new'} :
{:controller => 'users', :action => 'edit', :id => @user}
@@ -146,17 +146,17 @@ class UsersController < ApplicationController
@user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
if was_activated
Mailer.deliver_account_activated(@user)
Mailer.account_activated(@user).deliver
elsif @user.active? && params[:send_information] && !params[:user][:password].blank? && @user.auth_source_id.nil?
Mailer.deliver_account_information(@user, params[:user][:password])
Mailer.account_information(@user, params[:user][:password]).deliver
end
respond_to do |format|
format.html {
flash[:notice] = l(:notice_successful_update)
redirect_to :back
redirect_to_referer_or edit_user_path(@user)
}
format.api { head :ok }
format.api { render_api_ok }
end
else
@auth_sources = AuthSource.find(:all)
@@ -169,15 +169,13 @@ class UsersController < ApplicationController
format.api { render_validation_errors(@user) }
end
end
rescue ::ActionController::RedirectBackError
redirect_to :controller => 'users', :action => 'edit', :id => @user
end
def destroy
@user.destroy
respond_to do |format|
format.html { redirect_to(users_url) }
format.api { head :ok }
format.html { redirect_back_or_default(users_url) }
format.api { render_api_ok }
end
end
@@ -185,21 +183,8 @@ class UsersController < ApplicationController
@membership = Member.edit_membership(params[:membership_id], params[:membership], @user)
@membership.save
respond_to do |format|
if @membership.valid?
format.html { redirect_to :controller => 'users', :action => 'edit', :id => @user, :tab => 'memberships' }
format.js {
render(:update) {|page|
page.replace_html "tab-content-memberships", :partial => 'users/memberships'
page.visual_effect(:highlight, "member-#{@membership.id}")
}
}
else
format.js {
render(:update) {|page|
page.alert(l(:notice_failed_to_save_members, :errors => @membership.errors.full_messages.join(', ')))
}
}
end
format.html { redirect_to :controller => 'users', :action => 'edit', :id => @user, :tab => 'memberships' }
format.js
end
end
@@ -210,7 +195,7 @@ class UsersController < ApplicationController
end
respond_to do |format|
format.html { redirect_to :controller => 'users', :action => 'edit', :id => @user, :tab => 'memberships' }
format.js { render(:update) {|page| page.replace_html "tab-content-memberships", :partial => 'users/memberships'} }
format.js
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -20,7 +20,7 @@ class VersionsController < ApplicationController
model_object Version
before_filter :find_model_object, :except => [:index, :new, :create, :close_completed]
before_filter :find_project_from_association, :except => [:index, :new, :create, :close_completed]
before_filter :find_project, :only => [:index, :new, :create, :close_completed]
before_filter :find_project_by_project_id, :only => [:index, :new, :create, :close_completed]
before_filter :authorize
accept_api_auth :index, :show, :create, :update, :destroy
@@ -78,13 +78,7 @@ class VersionsController < ApplicationController
respond_to do |format|
format.html
format.js do
render :update do |page|
page.replace_html 'ajax-modal', :partial => 'versions/new_modal'
page << "showModal('ajax-modal', '600px');"
page << "Form.Element.focus('version_name');"
end
end
format.js
end
end
@@ -103,14 +97,7 @@ class VersionsController < ApplicationController
flash[:notice] = l(:notice_successful_create)
redirect_back_or_default :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
end
format.js do
render(:update) {|page|
page << 'hideModal();'
# IE doesn't support the replace_html rjs method for select box options
page.replace "issue_fixed_version_id",
content_tag('select', content_tag('option') + version_options_for_select(@project.shared_versions.open, @version), :id => 'issue_fixed_version_id', :name => 'issue[fixed_version_id]')
}
end
format.js
format.api do
render :action => 'show', :status => :created, :location => version_url(@version)
end
@@ -118,12 +105,7 @@ class VersionsController < ApplicationController
else
respond_to do |format|
format.html { render :action => 'new' }
format.js do
render :update do |page|
page.replace_html 'ajax-modal', :partial => 'versions/new_modal'
page << "Form.Element.focus('version_name');"
end
end
format.js { render :action => 'new' }
format.api { render_validation_errors(@version) }
end
end
@@ -144,7 +126,7 @@ class VersionsController < ApplicationController
flash[:notice] = l(:notice_successful_update)
redirect_back_or_default :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
}
format.api { head :ok }
format.api { render_api_ok }
end
else
respond_to do |format|
@@ -167,7 +149,7 @@ class VersionsController < ApplicationController
@version.destroy
respond_to do |format|
format.html { redirect_back_or_default :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project }
format.api { head :ok }
format.api { render_api_ok }
end
else
respond_to do |format|
@@ -183,16 +165,11 @@ class VersionsController < ApplicationController
def status_by
respond_to do |format|
format.html { render :action => 'show' }
format.js { render(:update) {|page| page.replace_html 'status_by', render_issue_status_by(@version, params[:status_by])} }
format.js
end
end
private
def find_project
@project = Project.find(params[:project_id])
rescue ActiveRecord::RecordNotFound
render_404
end
private
def retrieve_selected_tracker_ids(selectable_trackers, default_trackers=nil)
if ids = params[:tracker_ids]
@@ -201,5 +178,4 @@ private
@selected_tracker_ids = (default_trackers || selectable_trackers).collect {|t| t.id.to_s }
end
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -33,15 +33,6 @@ class WatchersController < ApplicationController
end
def new
respond_to do |format|
format.js do
render :update do |page|
page.replace_html 'ajax-modal', :partial => 'watchers/new', :locals => {:watched => @watched}
page << "showModal('ajax-modal', '400px');"
page << "$('ajax-modal').addClassName('new-watcher');"
end
end
end
end
def create
@@ -52,34 +43,15 @@ class WatchersController < ApplicationController
end
end
respond_to do |format|
format.html { redirect_to :back }
format.js do
render :update do |page|
page.replace_html 'ajax-modal', :partial => 'watchers/new', :locals => {:watched => @watched}
page.replace_html 'watchers', :partial => 'watchers/watchers', :locals => {:watched => @watched}
end
end
format.html { redirect_to_referer_or {render :text => 'Watcher added.', :layout => true}}
format.js
end
rescue ::ActionController::RedirectBackError
render :text => 'Watcher added.', :layout => true
end
def append
if params[:watcher].is_a?(Hash)
user_ids = params[:watcher][:user_ids] || [params[:watcher][:user_id]]
users = User.active.find_all_by_id(user_ids)
respond_to do |format|
format.js do
render :update do |page|
users.each do |user|
page.select("#issue_watcher_user_ids_#{user.id}").each do |item|
page.remove item
end
end
page.insert_html :bottom, 'watchers_inputs', :text => watchers_checkboxes(nil, users, true)
end
end
end
@users = User.active.find_all_by_id(user_ids)
end
end
@@ -87,11 +59,7 @@ class WatchersController < ApplicationController
@watched.set_watcher(User.find(params[:user_id]), false) if request.post?
respond_to do |format|
format.html { redirect_to :back }
format.js do
render :update do |page|
page.replace_html 'watchers', :partial => 'watchers/watchers', :locals => {:watched => @watched}
end
end
format.js
end
end
@@ -111,7 +79,7 @@ private
@watched = klass.find(params[:object_id])
@project = @watched.project
elsif params[:project_id]
@project = Project.visible.find(params[:project_id])
@project = Project.visible.find_by_param(params[:project_id])
end
rescue
render_404
@@ -120,17 +88,8 @@ private
def set_watcher(user, watching)
@watched.set_watcher(user, watching)
respond_to do |format|
format.html { redirect_to :back }
format.js do
render(:update) do |page|
c = watcher_css(@watched)
page.select(".#{c}").each do |item|
page.replace_html item, watcher_link(@watched, user)
end
end
end
format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
format.js { render :partial => 'set_watcher', :locals => {:user => user, :watched => @watched} }
end
rescue ::ActionController::RedirectBackError
render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -35,7 +35,8 @@ class WikiController < ApplicationController
default_search_scope :wiki_pages
before_filter :find_wiki, :authorize
before_filter :find_existing_or_new_page, :only => [:show, :edit, :update]
before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy]
before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy, :destroy_version]
accept_api_auth :index, :show, :update, :destroy
helper :attachments
include AttachmentsHelper
@@ -45,7 +46,13 @@ class WikiController < ApplicationController
# List of pages, sorted alphabetically and by parent (hierarchy)
def index
load_pages_for_index
@pages_by_parent_id = @pages.group_by(&:parent_id)
respond_to do |format|
format.html {
@pages_by_parent_id = @pages.group_by(&:parent_id)
}
format.api
end
end
# List of page, by last update
@@ -57,7 +64,7 @@ class WikiController < ApplicationController
# display a page (in editing mode if it doesn't exist)
def show
if @page.new_record?
if User.current.allowed_to?(:edit_wiki_pages, @project) && editable?
if User.current.allowed_to?(:edit_wiki_pages, @project) && editable? && !api_request?
edit
render :action => 'edit'
else
@@ -66,8 +73,7 @@ class WikiController < ApplicationController
return
end
if params[:version] && !User.current.allowed_to?(:view_wiki_edits, @project)
# Redirects user to the current version if he's not allowed to view previous versions
redirect_to :version => nil
deny_access
return
end
@content = @page.content_for_version(params[:version])
@@ -89,7 +95,10 @@ class WikiController < ApplicationController
@content.current_version? &&
Redmine::WikiFormatting.supports_section_edit?
render :action => 'show'
respond_to do |format|
format.html
format.api
end
end
# edit an existing page or a new one
@@ -109,7 +118,7 @@ class WikiController < ApplicationController
# To prevent StaleObjectError exception when reverting to a previous version
@content.version = @page.content.version
@text = @content.text
if params[:section].present? && Redmine::WikiFormatting.supports_section_edit?
@section = params[:section].to_i
@@ -121,48 +130,65 @@ class WikiController < ApplicationController
# Creates a new page or updates an existing one
def update
return render_403 unless editable?
was_new_page = @page.new_record?
@page.content = WikiContent.new(:page => @page) if @page.new_record?
@page.safe_attributes = params[:wiki_page]
@content = @page.content_for_version(params[:version])
@content.text = initial_page_content(@page) if @content.text.blank?
# don't keep previous comment
@content.comments = nil
if !@page.new_record? && params[:content].present? && @content.text == params[:content][:text]
attachments = Attachment.attach_files(@page, params[:attachments])
render_attachment_warning_if_needed(@page)
# don't save content if text wasn't changed
@page.save
redirect_to :action => 'show', :project_id => @project, :id => @page.title
return
@content = @page.content
content_params = params[:content]
if content_params.nil? && params[:wiki_page].is_a?(Hash)
content_params = params[:wiki_page].slice(:text, :comments, :version)
end
content_params ||= {}
@content.comments = params[:content][:comments]
@text = params[:content][:text]
@content.comments = content_params[:comments]
@text = content_params[:text]
if params[:section].present? && Redmine::WikiFormatting.supports_section_edit?
@section = params[:section].to_i
@section_hash = params[:section_hash]
@content.text = Redmine::WikiFormatting.formatter.new(@content.text).update_section(params[:section].to_i, @text, @section_hash)
else
@content.version = params[:content][:version]
@content.version = content_params[:version] if content_params[:version]
@content.text = @text
end
@content.author = User.current
@page.content = @content
if @page.save
if @page.save_with_content
attachments = Attachment.attach_files(@page, params[:attachments])
render_attachment_warning_if_needed(@page)
call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page})
redirect_to :action => 'show', :project_id => @project, :id => @page.title
respond_to do |format|
format.html { redirect_to :action => 'show', :project_id => @project, :id => @page.title }
format.api {
if was_new_page
render :action => 'show', :status => :created, :location => url_for(:controller => 'wiki', :action => 'show', :project_id => @project, :id => @page.title)
else
render_api_ok
end
}
end
else
render :action => 'edit'
respond_to do |format|
format.html { render :action => 'edit' }
format.api { render_validation_errors(@content) }
end
end
rescue ActiveRecord::StaleObjectError, Redmine::WikiFormatting::StaleSectionError
# Optimistic locking exception
flash.now[:error] = l(:notice_locking_conflict)
render :action => 'edit'
respond_to do |format|
format.html {
flash.now[:error] = l(:notice_locking_conflict)
render :action => 'edit'
}
format.api { render_api_head :conflict }
end
rescue ActiveRecord::RecordNotSaved
respond_to do |format|
format.html { render :action => 'edit' }
format.api { render_validation_errors(@content) }
end
end
# rename a page
@@ -185,7 +211,7 @@ class WikiController < ApplicationController
# show page history
def history
@version_count = @page.content.versions.count
@version_pages = Paginator.new self, @version_count, per_page_option, params['p']
@version_pages = Paginator.new self, @version_count, per_page_option, params['page']
# don't load text
@versions = @page.content.versions.find :all,
:select => "id, author_id, comments, updated_on, version",
@@ -228,16 +254,28 @@ class WikiController < ApplicationController
end
else
@reassignable_to = @wiki.pages - @page.self_and_descendants
return
# display the destroy form if it's a user request
return unless api_request?
end
end
@page.destroy
redirect_to :action => 'index', :project_id => @project
respond_to do |format|
format.html { redirect_to :action => 'index', :project_id => @project }
format.api { render_api_ok }
end
end
def destroy_version
return render_403 unless editable?
@content = @page.content_for_version(params[:version])
@content.destroy
redirect_to_referer_or :action => 'history', :id => @page.title, :project_id => @project
end
# Export wiki to a single pdf or html file
def export
@pages = @wiki.pages.all(:order => 'title', :include => [:content, :attachments], :limit => 75)
@pages = @wiki.pages.all(:order => 'title', :include => [:content, {:attachments => :author}])
respond_to do |format|
format.html {
export = render_to_string :action => 'export_multiple', :layout => false
@@ -311,6 +349,6 @@ private
end
def load_pages_for_index
@pages = @wiki.pages.with_updated_on.all(:order => 'title', :include => {:wiki => :project})
@pages = @wiki.pages.with_updated_on.order("#{WikiPage.table_name}.title").includes(:wiki => :project).includes(:parent).all
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -24,7 +24,6 @@ class WikisController < ApplicationController
@wiki = @project.wiki || Wiki.new(:project => @project)
@wiki.safe_attributes = params[:wiki]
@wiki.save if request.post?
render(:update) {|page| page.replace_html "tab-content-wiki", :partial => 'projects/settings/wiki'}
end
# Delete a project's wiki

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -18,30 +18,27 @@
class WorkflowsController < ApplicationController
layout 'admin'
before_filter :require_admin
before_filter :find_roles
before_filter :find_trackers
before_filter :require_admin, :find_roles, :find_trackers
def index
@workflow_counts = Workflow.count_by_tracker_and_role
@workflow_counts = WorkflowTransition.count_by_tracker_and_role
end
def edit
@role = Role.find_by_id(params[:role_id])
@tracker = Tracker.find_by_id(params[:tracker_id])
@role = Role.find_by_id(params[:role_id]) if params[:role_id]
@tracker = Tracker.find_by_id(params[:tracker_id]) if params[:tracker_id]
if request.post?
Workflow.destroy_all( ["role_id=? and tracker_id=?", @role.id, @tracker.id])
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')
@role.workflows.build(:tracker_id => @tracker.id, :old_status_id => status_id, :new_status_id => new_status_id, :author => author, :assignee => assignee)
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 :action => 'edit', :role_id => @role, :tracker_id => @tracker
redirect_to :action => 'edit', :role_id => @role, :tracker_id => @tracker, :used_statuses_only => params[:used_statuses_only]
return
end
end
@@ -50,10 +47,10 @@ class WorkflowsController < ApplicationController
if @tracker && @used_statuses_only && @tracker.issue_statuses.any?
@statuses = @tracker.issue_statuses
end
@statuses ||= IssueStatus.find(:all, :order => 'position')
@statuses ||= IssueStatus.sorted.all
if @tracker && @role && @statuses.any?
workflows = Workflow.all(:conditions => {:role_id => @role.id, :tracker_id => @tracker.id})
workflows = WorkflowTransition.where(:role_id => @role.id, :tracker_id => @tracker.id).all
@workflows = {}
@workflows['always'] = workflows.select {|w| !w.author && !w.assignee}
@workflows['author'] = workflows.select {|w| w.author}
@@ -61,6 +58,35 @@ class WorkflowsController < ApplicationController
end
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]
if request.post? && @role && @tracker
WorkflowPermission.replace_permissions(@tracker, @role, params[:permissions] || {})
redirect_to :action => 'permissions', :role_id => @role, :tracker_id => @tracker, :used_statuses_only => params[:used_statuses_only]
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).all.inject({}) do |h, w|
h[w.old_status_id] ||= {}
h[w.old_status_id][w.field_name] = w.rule
h
end
@statuses.each {|status| @permissions[status.id] ||= {}}
end
end
def copy
if params[:source_tracker_id].blank? || params[:source_tracker_id] == 'any'
@@ -83,7 +109,7 @@ class WorkflowsController < ApplicationController
elsif @target_trackers.nil? || @target_roles.nil?
flash.now[:error] = l(:error_workflow_copy_target)
else
Workflow.copy(@source_tracker, @source_role, @target_trackers, @target_roles)
WorkflowRule.copy(@source_tracker, @source_role, @target_trackers, @target_roles)
flash[:notice] = l(:notice_successful_update)
redirect_to :action => 'copy', :source_tracker_id => @source_tracker, :source_role_id => @source_role
end
@@ -93,10 +119,10 @@ class WorkflowsController < ApplicationController
private
def find_roles
@roles = Role.find(:all, :order => 'builtin, position')
@roles = Role.sorted.all
end
def find_trackers
@trackers = Tracker.find(:all, :order => 'position')
@trackers = Tracker.sorted.all
end
end

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -20,6 +20,8 @@
module AdminHelper
def project_status_options_for_select(selected)
options_for_select([[l(:label_all), ''],
[l(:status_active), '1']], selected.to_s)
[l(:project_status_active), '1'],
[l(:project_status_closed), '5'],
[l(:project_status_archived), '9']], selected.to_s)
end
end

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -43,18 +43,12 @@ module ApplicationHelper
link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action])
end
# Display a link to remote if user is authorized
def link_to_remote_if_authorized(name, options = {}, html_options = nil)
url = options[:url] || {}
link_to_remote(name, options, html_options) if authorize_for(url[:controller] || params[:controller], url[:action])
end
# Displays a link to user's account page if active
def link_to_user(user, options={})
if user.is_a?(User)
name = h(user.name(options[:format]))
if user.active?
link_to name, :controller => 'users', :action => 'show', :id => user
if user.active? || (User.current.admin? && user.logged?)
link_to name, user_path(user), :class => user.css_classes
else
name
end
@@ -70,10 +64,12 @@ module ApplicationHelper
# link_to_issue(issue, :truncate => 6) # => Defect #6: This i...
# link_to_issue(issue, :subject => false) # => Defect #6
# link_to_issue(issue, :project => true) # => Foo - Defect #6
# link_to_issue(issue, :subject => false, :tracker => false) # => #6
#
def link_to_issue(issue, options={})
title = nil
subject = nil
text = options[:tracker] == false ? "##{issue.id}" : "#{issue.tracker} ##{issue.id}"
if options[:subject] == false
title = truncate(issue.subject, :length => 60)
else
@@ -82,9 +78,7 @@ module ApplicationHelper
subject = truncate(subject, :length => options[:truncate])
end
end
s = link_to "#{h(issue.tracker)} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue},
:class => issue.css_classes,
:title => title
s = link_to text, issue_path(issue), :class => issue.css_classes, :title => title
s << h(": #{subject}") if subject
s = h("#{issue.project} - ") + s if options[:project]
s
@@ -128,7 +122,7 @@ module ApplicationHelper
h(truncate(message.subject, :length => 60)),
{ :controller => 'messages', :action => 'show',
:board_id => message.board_id,
:id => message.root,
:id => (message.parent_id || message.id),
:r => (message.parent_id && message.id),
:anchor => (message.parent_id ? "message-#{message.id}" : nil)
}.merge(options),
@@ -145,17 +139,27 @@ module ApplicationHelper
# link_to_project(project, {}, :class => "project") # => html options with default url (project overview)
#
def link_to_project(project, options={}, html_options = nil)
if project.active?
if project.archived?
h(project)
else
url = {:controller => 'projects', :action => 'show', :id => project}.merge(options)
link_to(h(project), url, html_options)
else
h(project)
end
end
def wiki_page_path(page, options={})
url_for({:controller => 'wiki', :action => 'show', :project_id => page.project, :id => page.title}.merge(options))
end
def thumbnail_tag(attachment)
link_to image_tag(url_for(:controller => 'attachments', :action => 'thumbnail', :id => attachment)),
{:controller => 'attachments', :action => 'show', :id => attachment, :filename => attachment.filename},
:title => attachment.filename
end
def toggle_link(name, id, options={})
onclick = "Element.toggle('#{id}'); "
onclick << (options[:focus] ? "Form.Element.focus('#{options[:focus]}'); " : "this.blur(); ")
onclick = "$('##{id}').toggle(); "
onclick << (options[:focus] ? "$('##{options[:focus]}').focus(); " : "this.blur(); ")
onclick << "return false;"
link_to(name, "#", :onclick => onclick)
end
@@ -168,17 +172,12 @@ module ApplicationHelper
}))
end
def prompt_to_remote(name, text, param, url, html_options = {})
html_options[:onclick] = "promptToRemote('#{text}', '#{param}', '#{url_for(url)}'); return false;"
link_to name, {}, html_options
end
def format_activity_title(text)
h(truncate_single_line(text, :length => 100))
end
def format_activity_day(date)
date == Date.today ? l(:label_today).titleize : format_date(date)
date == User.current.today ? l(:label_today).titleize : format_date(date)
end
def format_activity_description(text)
@@ -200,13 +199,46 @@ module ApplicationHelper
end
end
# Renders a tree of projects as a nested set of unordered lists
# The given collection may be a subset of the whole project tree
# (eg. some intermediate nodes are private and can not be seen)
def render_project_nested_lists(projects)
s = ''
if projects.any?
ancestors = []
original_project = @project
projects.sort_by(&:lft).each do |project|
# set the project environment to please macros.
@project = project
if (ancestors.empty? || project.is_descendant_of?(ancestors.last))
s << "<ul class='projects #{ ancestors.empty? ? 'root' : nil}'>\n"
else
ancestors.pop
s << "</li>"
while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
ancestors.pop
s << "</ul></li>\n"
end
end
classes = (ancestors.empty? ? 'root' : 'child')
s << "<li class='#{classes}'><div class='#{classes}'>"
s << h(block_given? ? yield(project) : project.name)
s << "</div>\n"
ancestors << project
end
s << ("</li></ul>\n" * ancestors.size)
@project = original_project
end
s.html_safe
end
def render_page_hierarchy(pages, node=nil, options={})
content = ''
if pages[node]
content << "<ul class=\"pages-hierarchy\">\n"
pages[node].each do |page|
content << "<li>"
content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'show', :project_id => page.project, :id => page.title},
content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'show', :project_id => page.project, :id => page.title, :version => nil},
:title => (options[:timestamp] && page.updated_on ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil))
content << "\n" + render_page_hierarchy(pages, page.id, options) if pages[page.id]
content << "</li>\n"
@@ -220,7 +252,7 @@ module ApplicationHelper
def render_flash_messages
s = ''
flash.each do |k,v|
s << (content_tag('div', v.html_safe, :class => "flash #{k}"))
s << content_tag('div', v.html_safe, :class => "flash #{k}", :id => "flash_#{k}")
end
s.html_safe
end
@@ -237,23 +269,24 @@ module ApplicationHelper
# Renders the project quick-jump box
def render_project_jump_box
return unless User.current.logged?
projects = User.current.memberships.collect(&:project).compact.uniq
projects = User.current.memberships.collect(&:project).compact.select(&:active?).uniq
if projects.any?
s = '<select onchange="if (this.value != \'\') { window.location = this.value; }">' +
"<option value=''>#{ l(:label_jump_to_a_project) }</option>" +
'<option value="" disabled="disabled">---</option>'
s << project_tree_options_for_select(projects, :selected => @project) do |p|
{ :value => url_for(:controller => 'projects', :action => 'show', :id => p, :jump => current_menu_item) }
options =
("<option value=''>#{ l(:label_jump_to_a_project) }</option>" +
'<option value="" disabled="disabled">---</option>').html_safe
options << project_tree_options_for_select(projects, :selected => @project) do |p|
{ :value => project_path(:id => p, :jump => current_menu_item) }
end
s << '</select>'
s.html_safe
select_tag('project_quick_jump_box', options, :onchange => 'if (this.value != \'\') { window.location = this.value; }')
end
end
def project_tree_options_for_select(projects, options = {})
s = ''
project_tree(projects) do |project, level|
name_prefix = (level > 0 ? ('&nbsp;' * 2 * level + '&#187; ').html_safe : '')
name_prefix = (level > 0 ? '&nbsp;' * 2 * level + '&#187; ' : '').html_safe
tag_options = {:value => project.id}
if project == options[:selected] || (options[:selected].respond_to?(:include?) && options[:selected].include?(project))
tag_options[:selected] = 'selected'
@@ -273,30 +306,6 @@ module ApplicationHelper
Project.project_tree(projects, &block)
end
def project_nested_ul(projects, &block)
s = ''
if projects.any?
ancestors = []
projects.sort_by(&:lft).each do |project|
if (ancestors.empty? || project.is_descendant_of?(ancestors.last))
s << "<ul>\n"
else
ancestors.pop
s << "</li>"
while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
ancestors.pop
s << "</ul></li>\n"
end
end
s << "<li>"
s << yield(project).to_s
ancestors << project
end
s << ("</li></ul>\n" * ancestors.size)
end
s.html_safe
end
def principals_check_box_tags(name, principals)
s = ''
principals.sort.each do |principal|
@@ -309,7 +318,7 @@ module ApplicationHelper
def principals_options_for_select(collection, selected=nil)
s = ''
if collection.include?(User.current)
s << content_tag('option', "<< #{l(:label_me)} >>".html_safe, :value => User.current.id)
s << content_tag('option', "<< #{l(:label_me)} >>", :value => User.current.id)
end
groups = ''
collection.sort.each do |element|
@@ -319,7 +328,16 @@ module ApplicationHelper
unless groups.empty?
s << %(<optgroup label="#{h(l(:label_group_plural))}">#{groups}</optgroup>)
end
s
s.html_safe
end
# Options for the new membership projects combo-box
def options_for_membership_project_select(principal, projects)
options = content_tag('option', "--- #{l(:actionview_instancetag_blank_option)} ---")
options << project_tree_options_for_select(projects) do |p|
{:disabled => principal.projects.include?(p)}
end
options
end
# Truncates and returns the string as a single line
@@ -352,7 +370,7 @@ module ApplicationHelper
def time_tag(time)
text = distance_of_time_in_words(Time.now, time)
if @project
link_to(text, {:controller => 'activities', :action => 'index', :id => @project, :from => time.to_date}, :title => format_time(time))
link_to(text, {:controller => 'activities', :action => 'index', :id => @project, :from => User.current.time_to_date(time)}, :title => format_time(time))
else
content_tag('acronym', text, :title => format_time(time))
end
@@ -369,7 +387,8 @@ module ApplicationHelper
end
def to_path_param(path)
path.to_s.split(%r{[/\\]}).select {|p| !p.blank?}
str = path.to_s.split(%r{[/\\]}).select{|p| !p.blank?}.join("/")
str.blank? ? nil : str
end
def pagination_links_full(paginator, count=nil, options={})
@@ -398,7 +417,7 @@ module ApplicationHelper
unless count.nil?
html << " (#{paginator.current.first_item}-#{paginator.current.last_item}/#{count})"
if per_page_links != false && links = per_page_links(paginator.items_per_page)
if per_page_links != false && links = per_page_links(paginator.items_per_page, count)
html << " | #{links}"
end
end
@@ -406,11 +425,23 @@ module ApplicationHelper
html.html_safe
end
def per_page_links(selected=nil)
links = Setting.per_page_options_array.collect do |n|
def per_page_links(selected=nil, item_count=nil)
values = Setting.per_page_options_array
if item_count && values.any?
if item_count > values.first
max = values.detect {|value| value >= item_count} || item_count
else
max = item_count
end
values = values.select {|value| value <= max || value == selected}
end
if values.empty? || (values.size == 1 && values.first == selected)
return nil
end
links = values.collect do |n|
n == selected ? n : link_to_content_update(n, params.merge(:per_page => n))
end
links.size > 1 ? l(:label_display_per_page, links.join(', ')) : nil
l(:label_display_per_page, links.join(', '))
end
def reorder_links(name, url, method = :post)
@@ -509,6 +540,8 @@ module ApplicationHelper
project = options[:project] || @project || (obj && obj.respond_to?(:project) ? obj.project : nil)
only_path = options.delete(:only_path) == false ? false : true
text = text.dup
macros = catch_macros(text)
text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text, :object => obj, :attribute => attr)
@parsed_headings = []
@@ -516,8 +549,8 @@ module ApplicationHelper
@current_section = 0 if options[:edit_section_links]
parse_sections(text, project, obj, attr, only_path, options)
text = parse_non_pre_blocks(text) do |text|
[:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_macros].each do |method_name|
text = parse_non_pre_blocks(text, obj, macros) do |text|
[:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links].each do |method_name|
send method_name, text, project, obj, attr, only_path, options
end
end
@@ -530,7 +563,7 @@ module ApplicationHelper
text.html_safe
end
def parse_non_pre_blocks(text)
def parse_non_pre_blocks(text, obj, macros)
s = StringScanner.new(text)
tags = []
parsed = ''
@@ -539,6 +572,9 @@ module ApplicationHelper
text, full_tag, closing, tag = s[1], s[2], s[3], s[4]
if tags.empty?
yield text
inject_macros(text, obj, macros) if macros.any?
else
inject_macros(text, obj, macros, false) if macros.any?
end
parsed << text
if tag
@@ -561,8 +597,9 @@ module ApplicationHelper
def parse_inline_attachments(text, project, obj, attr, only_path, options)
# when using an image link, try to use an attachment, if possible
if options[:attachments] || (obj && obj.respond_to?(:attachments))
attachments = options[:attachments] || obj.attachments
attachments = options[:attachments] || []
attachments += obj.attachments if obj.respond_to?(:attachments)
if attachments.present?
text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpe|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m|
filename, ext, alt, alttext = $1.downcase, $2, $3, $4
# search for the picture in attachments
@@ -621,7 +658,7 @@ module ApplicationHelper
wiki_page_id = page.present? ? Wiki.titleize(page) : nil
parent = wiki_page.nil? && obj.is_a?(WikiContent) && obj.page && project == link_project ? obj.page.title : nil
url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project,
:id => wiki_page_id, :anchor => anchor, :parent => parent)
:id => wiki_page_id, :version => nil, :anchor => anchor, :parent => parent)
end
end
link_to(title.present? ? title.html_safe : h(page), url, :class => ('wiki-page' + (wiki_page ? '' : ' new')))
@@ -694,7 +731,7 @@ module ApplicationHelper
oid = identifier.to_i
case prefix
when nil
if issue = Issue.visible.find_by_id(oid, :include => :status)
if oid.to_s == identifier && issue = Issue.visible.find_by_id(oid, :include => :status)
anchor = comment_id ? "note-#{comment_id}" : nil
link = link_to("##{oid}", {:only_path => only_path, :controller => 'issues', :action => 'show', :id => oid, :anchor => anchor},
:class => issue.css_classes,
@@ -772,11 +809,10 @@ module ApplicationHelper
if repository && User.current.allowed_to?(:browse_repository, project)
name =~ %r{^[/\\]*(.*?)(@([0-9a-f]+))?(#(L\d+))?$}
path, rev, anchor = $1, $3, $5
link = link_to h("#{project_prefix}#{prefix}:#{repo_prefix}#{name}"), {:controller => 'repositories', :action => 'entry', :id => project, :repository_id => repository.identifier_param,
link = link_to h("#{project_prefix}#{prefix}:#{repo_prefix}#{name}"), {:controller => 'repositories', :action => (prefix == 'export' ? 'raw' : 'entry'), :id => project, :repository_id => repository.identifier_param,
:path => to_path_param(path),
:rev => rev,
:anchor => anchor,
:format => (prefix == 'export' ? 'raw' : nil)},
:anchor => anchor},
:class => (prefix == 'export' ? 'source download' : 'source')
end
end
@@ -784,7 +820,7 @@ module ApplicationHelper
end
when 'attachment'
attachments = options[:attachments] || (obj && obj.respond_to?(:attachments) ? obj.attachments : nil)
if attachments && attachment = attachments.detect {|a| a.filename == name }
if attachments && attachment = Attachment.latest_attach(attachments, name)
link = link_to h(attachment.filename), {:only_path => only_path, :controller => 'attachments', :action => 'download', :id => attachment},
:class => 'attachment'
end
@@ -799,7 +835,7 @@ module ApplicationHelper
end
end
HEADING_RE = /(<h(1|2|3|4)( [^>]+)?>(.+?)<\/h(1|2|3|4)>)/i unless const_defined?(:HEADING_RE)
HEADING_RE = /(<h(\d)( [^>]+)?>(.+?)<\/h(\d)>)/i unless const_defined?(:HEADING_RE)
def parse_sections(text, project, obj, attr, only_path, options)
return unless options[:edit_section_links]
@@ -838,31 +874,57 @@ module ApplicationHelper
end
end
MACROS_RE = /
MACROS_RE = /(
(!)? # escaping
(
\{\{ # opening tag
([\w]+) # macro name
(\(([^\}]*)\))? # optional arguments
(\(([^\n\r]*?)\))? # optional arguments
([\n\r].*?[\n\r])? # optional block of text
\}\} # closing tag
)
/x unless const_defined?(:MACROS_RE)
)/mx unless const_defined?(:MACROS_RE)
# Macros substitution
def parse_macros(text, project, obj, attr, only_path, options)
MACRO_SUB_RE = /(
\{\{
macro\((\d+)\)
\}\}
)/x unless const_defined?(:MACRO_SUB_RE)
# Extracts macros from text
def catch_macros(text)
macros = {}
text.gsub!(MACROS_RE) do
esc, all, macro = $1, $2, $3.downcase
args = ($5 || '').split(',').each(&:strip)
if esc.nil?
begin
exec_macro(macro, obj, args)
rescue => e
"<div class=\"flash error\">Error executing the <strong>#{macro}</strong> macro (#{e})</div>"
end || all
all, macro = $1, $4.downcase
if macro_exists?(macro) || all =~ MACRO_SUB_RE
index = macros.size
macros[index] = all
"{{macro(#{index})}}"
else
all
end
end
macros
end
# Executes and replaces macros in text
def inject_macros(text, obj, macros, execute=true)
text.gsub!(MACRO_SUB_RE) do
all, index = $1, $2.to_i
orig = macros.delete(index)
if execute && orig && orig =~ MACROS_RE
esc, all, macro, args, block = $2, $3, $4.downcase, $6.to_s, $7.try(:strip)
if esc.nil?
h(exec_macro(macro, obj, args, block) || all)
else
h(all)
end
elsif orig
h(orig)
else
h(all)
end
end
end
TOC_RE = /<p>\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE)
@@ -870,6 +932,8 @@ module ApplicationHelper
# Renders the TOC with given headings
def replace_toc(text, headings)
text.gsub!(TOC_RE) do
# Keep only the 4 first levels
headings = headings.select{|level, anchor, item| level <= 4}
if headings.empty?
''
else
@@ -908,8 +972,7 @@ module ApplicationHelper
end
def lang_options_for_select(blank=true)
(blank ? [["(auto)", ""]] : []) +
valid_languages.collect{|lang| [ ll(lang.to_s, :general_lang_name), lang.to_s]}.sort{|x,y| x.last <=> y.last }
(blank ? [["(auto)", ""]] : []) + languages_options
end
def label_tag_for(name, option_tags = nil, options = {})
@@ -917,19 +980,12 @@ module ApplicationHelper
content_tag("label", label_text)
end
def labelled_tabular_form_for(*args, &proc)
ActiveSupport::Deprecation.warn "ApplicationHelper#labelled_tabular_form_for is deprecated and will be removed in Redmine 1.5. Use #labelled_form_for instead."
args << {} unless args.last.is_a?(Hash)
options = args.last
options[:html] ||= {}
options[:html][:class] = 'tabular' unless options[:html].has_key?(:class)
options.merge!({:builder => Redmine::Views::LabelledFormBuilder})
form_for(*args, &proc)
end
def labelled_form_for(*args, &proc)
args << {} unless args.last.is_a?(Hash)
options = args.last
if args.first.is_a?(Symbol)
options.merge!(:as => args.shift)
end
options.merge!({:builder => Redmine::Views::LabelledFormBuilder})
form_for(*args, &proc)
end
@@ -942,10 +998,11 @@ module ApplicationHelper
end
def labelled_remote_form_for(*args, &proc)
ActiveSupport::Deprecation.warn "ApplicationHelper#labelled_remote_form_for is deprecated and will be removed in Redmine 2.2."
args << {} unless args.last.is_a?(Hash)
options = args.last
options.merge!({:builder => Redmine::Views::LabelledFormBuilder})
remote_form_for(*args, &proc)
options.merge!({:builder => Redmine::Views::LabelledFormBuilder, :remote => true})
form_for(*args, &proc)
end
def error_messages_for(*objects)
@@ -962,10 +1019,44 @@ module ApplicationHelper
html.html_safe
end
def delete_link(url, options={})
options = {
:method => :delete,
:data => {:confirm => l(:text_are_you_sure)},
:class => 'icon icon-del'
}.merge(options)
link_to l(:button_delete), url, options
end
def preview_link(url, form, target='preview', options={})
content_tag 'a', l(:label_preview), {
:href => "#",
:onclick => %|submitPreview("#{escape_javascript url_for(url)}", "#{escape_javascript form}", "#{escape_javascript target}"); return false;|,
:accesskey => accesskey(:preview)
}.merge(options)
end
def link_to_function(name, function, html_options={})
content_tag(:a, name, {:href => '#', :onclick => "#{function}; return false;"}.merge(html_options))
end
# Helper to render JSON in views
def raw_json(arg)
arg.to_json.to_s.gsub('/', '\/').html_safe
end
def back_url
url = params[:back_url]
if url.nil? && referer = request.env['HTTP_REFERER']
url = CGI.unescape(referer.to_s)
end
url
end
def back_url_hidden_field_tag
back_url = params[:back_url] || request.env['HTTP_REFERER']
back_url = CGI.unescape(back_url.to_s)
hidden_field_tag('back_url', CGI.escape(back_url), :id => nil) unless back_url.blank?
url = back_url
hidden_field_tag('back_url', url, :id => nil) unless url.blank?
end
def check_all_links(form_name)
@@ -1009,39 +1100,91 @@ module ApplicationHelper
end
@context_menu_included = true
end
javascript_tag "new ContextMenu('#{ url_for(url) }')"
javascript_tag "contextMenuInit('#{ url_for(url) }')"
end
def calendar_for(field_id)
include_calendar_headers_tags
image_tag("calendar.png", {:id => "#{field_id}_trigger",:class => "calendar-trigger"}) +
javascript_tag("Calendar.setup({inputField : '#{field_id}', ifFormat : '%Y-%m-%d', button : '#{field_id}_trigger' });")
javascript_tag("$(function() { $('##{field_id}').datepicker(datepickerOptions); });")
end
def include_calendar_headers_tags
unless @calendar_headers_tags_included
@calendar_headers_tags_included = true
content_for :header_tags do
start_of_week = case Setting.start_of_week.to_i
when 1
'Calendar._FD = 1;' # Monday
when 7
'Calendar._FD = 0;' # Sunday
when 6
'Calendar._FD = 6;' # Saturday
else
'' # use language
end
start_of_week = Setting.start_of_week
start_of_week = l(:general_first_day_of_week, :default => '1') if start_of_week.blank?
# Redmine uses 1..7 (monday..sunday) in settings and locales
# JQuery uses 0..6 (sunday..saturday), 7 needs to be changed to 0
start_of_week = start_of_week.to_i % 7
javascript_include_tag('calendar/calendar') +
javascript_include_tag("calendar/lang/calendar-#{current_language.to_s.downcase}.js") +
javascript_tag(start_of_week) +
javascript_include_tag('calendar/calendar-setup') +
stylesheet_link_tag('calendar')
tags = javascript_tag(
"var datepickerOptions={dateFormat: 'yy-mm-dd', firstDay: #{start_of_week}, " +
"showOn: 'button', buttonImageOnly: true, buttonImage: '" +
path_to_image('/images/calendar.png') +
"', showButtonPanel: true};")
jquery_locale = l('jquery.locale', :default => current_language.to_s)
unless jquery_locale == 'en'
tags << javascript_include_tag("i18n/jquery.ui.datepicker-#{jquery_locale}.js")
end
tags
end
end
end
# Overrides Rails' stylesheet_link_tag with themes and plugins support.
# Examples:
# stylesheet_link_tag('styles') # => picks styles.css from the current theme or defaults
# stylesheet_link_tag('styles', :plugin => 'foo) # => picks styles.css from plugin's assets
#
def stylesheet_link_tag(*sources)
options = sources.last.is_a?(Hash) ? sources.pop : {}
plugin = options.delete(:plugin)
sources = sources.map do |source|
if plugin
"/plugin_assets/#{plugin}/stylesheets/#{source}"
elsif current_theme && current_theme.stylesheets.include?(source)
current_theme.stylesheet_path(source)
else
source
end
end
super sources, options
end
# Overrides Rails' image_tag with themes and plugins support.
# Examples:
# image_tag('image.png') # => picks image.png from the current theme or defaults
# image_tag('image.png', :plugin => 'foo) # => picks image.png from plugin's assets
#
def image_tag(source, options={})
if plugin = options.delete(:plugin)
source = "/plugin_assets/#{plugin}/images/#{source}"
elsif current_theme && current_theme.images.include?(source)
source = current_theme.image_path(source)
end
super source, options
end
# Overrides Rails' javascript_include_tag with plugins support
# Examples:
# javascript_include_tag('scripts') # => picks scripts.js from defaults
# javascript_include_tag('scripts', :plugin => 'foo) # => picks scripts.js from plugin's assets
#
def javascript_include_tag(*sources)
options = sources.last.is_a?(Hash) ? sources.pop : {}
if plugin = options.delete(:plugin)
sources = sources.map do |source|
if plugin
"/plugin_assets/#{plugin}/javascripts/#{source}"
else
source
end
end
end
super sources, options
end
def content_for(name, content = nil, &block)
@has_content ||= {}
@has_content[name] = true
@@ -1052,6 +1195,14 @@ module ApplicationHelper
(@has_content && @has_content[name]) || false
end
def sidebar_content?
has_content?(:sidebar) || view_layouts_base_sidebar_hook_response.present?
end
def view_layouts_base_sidebar_hook_response
@view_layouts_base_sidebar_hook_response ||= call_hook(:view_layouts_base_sidebar)
end
def email_delivery_enabled?
!!ActionMailer::Base.perform_deliveries
end
@@ -1060,7 +1211,7 @@ module ApplicationHelper
# +user+ can be a User or a string that will be scanned for an email address (eg. 'joe <joe@foo.bar>')
def avatar(user, options = { })
if Setting.gravatar_enabled?
options.merge!({:ssl => (defined?(request) && request.ssl?), :default => Setting.gravatar_default})
options.merge!({:ssl => (request && request.ssl?), :default => Setting.gravatar_default})
email = nil
if user.respond_to?(:mail)
email = user.mail
@@ -1074,14 +1225,19 @@ module ApplicationHelper
end
def sanitize_anchor_name(anchor)
anchor.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
if ''.respond_to?(:encoding) || RUBY_PLATFORM == 'java'
anchor.gsub(%r{[^\p{Word}\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
else
# TODO: remove when ruby1.8 is no longer supported
anchor.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
end
end
# Returns the javascript tags that are included in the html layout head
def javascript_heads
tags = javascript_include_tag(:defaults)
tags = javascript_include_tag('jquery-1.7.2-ui-1.8.21-ujs-2.0.3', 'application')
unless User.current.pref.warn_on_leaving_unsaved == '0'
tags << "\n".html_safe + javascript_tag("Event.observe(window, 'load', function(){ new WarnLeavingUnsaved('#{escape_javascript( l(:text_warn_on_leaving_unsaved) )}'); });")
tags << "\n".html_safe + javascript_tag("$(window).load(function(){ warnLeavingUnsaved('#{escape_javascript l(:text_warn_on_leaving_unsaved)}'); });")
end
tags
end

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -21,12 +21,14 @@ module AttachmentsHelper
# Displays view/delete links to the attachments of the given object
# Options:
# :author -- author names are not displayed if set to false
# :thumbails -- display thumbnails if enabled in settings
def link_to_attachments(container, options = {})
options.assert_valid_keys(:author)
options.assert_valid_keys(:author, :thumbnails)
if container.attachments.any?
options = {:deletable => container.attachments_deletable?, :author => true}.merge(options)
render :partial => 'attachments/links', :locals => {:attachments => container.attachments, :options => options}
render :partial => 'attachments/links',
:locals => {:attachments => container.attachments, :options => options, :thumbnails => (options[:thumbnails] && Setting.thumbnails_enabled?)}
end
end

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -18,4 +18,24 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module BoardsHelper
def board_breadcrumb(item)
board = item.is_a?(Message) ? item.board : item
links = [link_to(l(:label_board_plural), project_boards_path(item.project))]
boards = board.ancestors.reverse
if item.is_a?(Message)
boards << board
end
links += boards.map {|ancestor| link_to(h(ancestor.name), project_board_path(ancestor.project, ancestor))}
breadcrumb links
end
def boards_options_for_select(boards)
options = []
Board.board_tree(boards) do |board, level|
label = (level > 0 ? '&nbsp;' * 2 * level + '&#187; ' : '').html_safe
label << board.name
options << [label, board.id]
end
options
end
end

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -26,8 +26,8 @@ module ContextMenusHelper
end
if options.delete(:disabled)
options.delete(:method)
options.delete(:confirm)
options.delete(:onclick)
options.delete(:data)
options[:onclick] = 'return false;'
options[:class] << ' disabled'
url = '#'
end
@@ -36,7 +36,7 @@ module ContextMenusHelper
def bulk_update_custom_field_context_menu_link(field, text, value)
context_menu_link h(text),
{:controller => 'issues', :action => 'bulk_update', :ids => @issues.collect(&:id), :issue => {'custom_field_values' => {field.id => value}}, :back_url => @back},
{:controller => 'issues', :action => 'bulk_update', :ids => @issue_ids, :issue => {'custom_field_values' => {field.id => value}}, :back_url => @back},
:method => :post,
:selected => (@issue && @issue.custom_field_value(field) == value)
end

View File

@@ -20,16 +20,7 @@
module CustomFieldsHelper
def custom_fields_tabs
tabs = [{:name => 'IssueCustomField', :partial => 'custom_fields/index', :label => :label_issue_plural},
{:name => 'TimeEntryCustomField', :partial => 'custom_fields/index', :label => :label_spent_time},
{:name => 'ProjectCustomField', :partial => 'custom_fields/index', :label => :label_project_plural},
{:name => 'VersionCustomField', :partial => 'custom_fields/index', :label => :label_version_plural},
{:name => 'UserCustomField', :partial => 'custom_fields/index', :label => :label_user_plural},
{:name => 'GroupCustomField', :partial => 'custom_fields/index', :label => :label_group_plural},
{:name => 'TimeEntryActivityCustomField', :partial => 'custom_fields/index', :label => TimeEntryActivity::OptionName},
{:name => 'IssuePriorityCustomField', :partial => 'custom_fields/index', :label => IssuePriority::OptionName},
{:name => 'DocumentCategoryCustomField', :partial => 'custom_fields/index', :label => DocumentCategory::OptionName}
]
CustomField::CUSTOM_FIELDS_TABS
end
# Return custom field html tag corresponding to its format
@@ -39,72 +30,79 @@ module CustomFieldsHelper
field_name << "[]" if custom_field.multiple?
field_id = "#{name}_custom_field_values_#{custom_field.id}"
tag_options = {:id => field_id, :class => "#{custom_field.field_format}_cf"}
field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format)
case field_format.try(:edit_as)
when "date"
text_field_tag(field_name, custom_value.value, :id => field_id, :size => 10) +
text_field_tag(field_name, custom_value.value, tag_options.merge(:size => 10)) +
calendar_for(field_id)
when "text"
text_area_tag(field_name, custom_value.value, :id => field_id, :rows => 3, :style => 'width:90%')
text_area_tag(field_name, custom_value.value, tag_options.merge(:rows => 3))
when "bool"
hidden_field_tag(field_name, '0') + check_box_tag(field_name, '1', custom_value.true?, :id => field_id)
hidden_field_tag(field_name, '0') + check_box_tag(field_name, '1', custom_value.true?, tag_options)
when "list"
blank_option = ''
blank_option = ''.html_safe
unless custom_field.multiple?
if custom_field.is_required?
unless custom_field.default_value.present?
blank_option = "<option value=\"\">--- #{l(:actionview_instancetag_blank_option)} ---</option>"
blank_option = content_tag('option', "--- #{l(:actionview_instancetag_blank_option)} ---", :value => '')
end
else
blank_option = '<option></option>'
blank_option = content_tag('option')
end
end
s = select_tag(field_name, blank_option.html_safe + options_for_select(custom_field.possible_values_options(custom_value.customized), custom_value.value),
:id => field_id, :multiple => custom_field.multiple?)
s = select_tag(field_name, blank_option + options_for_select(custom_field.possible_values_options(custom_value.customized), custom_value.value),
tag_options.merge(:multiple => custom_field.multiple?))
if custom_field.multiple?
s << hidden_field_tag(field_name, '')
end
s
else
text_field_tag(field_name, custom_value.value, :id => field_id)
text_field_tag(field_name, custom_value.value, tag_options)
end
end
# Return custom field label tag
def custom_field_label_tag(name, custom_value)
def custom_field_label_tag(name, custom_value, options={})
required = options[:required] || custom_value.custom_field.is_required?
content_tag "label", h(custom_value.custom_field.name) +
(custom_value.custom_field.is_required? ? " <span class=\"required\">*</span>".html_safe : ""),
:for => "#{name}_custom_field_values_#{custom_value.custom_field.id}"
(required ? " <span class=\"required\">*</span>".html_safe : ""),
:for => "#{name}_custom_field_values_#{custom_value.custom_field.id}"
end
# Return custom field tag with its label tag
def custom_field_tag_with_label(name, custom_value)
custom_field_label_tag(name, custom_value) + custom_field_tag(name, custom_value)
def custom_field_tag_with_label(name, custom_value, options={})
custom_field_label_tag(name, custom_value, options) + custom_field_tag(name, custom_value)
end
def custom_field_tag_for_bulk_edit(name, custom_field, projects=nil)
field_name = "#{name}[custom_field_values][#{custom_field.id}]"
field_name << "[]" if custom_field.multiple?
field_id = "#{name}_custom_field_values_#{custom_field.id}"
tag_options = {:id => field_id, :class => "#{custom_field.field_format}_cf"}
field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format)
case field_format.try(:edit_as)
when "date"
text_field_tag(field_name, '', :id => field_id, :size => 10) +
text_field_tag(field_name, '', tag_options.merge(:size => 10)) +
calendar_for(field_id)
when "text"
text_area_tag(field_name, '', :id => field_id, :rows => 3, :style => 'width:90%')
text_area_tag(field_name, '', tag_options.merge(:rows => 3))
when "bool"
select_tag(field_name, options_for_select([[l(:label_no_change_option), ''],
[l(:general_text_yes), '1'],
[l(:general_text_no), '0']]), :id => field_id)
[l(:general_text_no), '0']]), tag_options)
when "list"
options = []
options << [l(:label_no_change_option), ''] unless custom_field.multiple?
options << [l(:label_none), '__none__'] unless custom_field.is_required?
options += custom_field.possible_values_options(projects)
select_tag(field_name, options_for_select(options),
:id => field_id, :multiple => custom_field.multiple?)
select_tag(field_name, options_for_select(options), tag_options.merge(:multiple => custom_field.multiple?))
else
text_field_tag(field_name, '', :id => field_id)
text_field_tag(field_name, '', tag_options)
end
end

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -18,15 +18,6 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module GroupsHelper
# Options for the new membership projects combo-box
def options_for_membership_project_select(user, projects)
options = content_tag('option', "--- #{l(:actionview_instancetag_blank_option)} ---")
options << project_tree_options_for_select(projects) do |p|
{:disabled => (user.projects.include?(p))}
end
options
end
def group_settings_tabs
tabs = [{:name => 'general', :partial => 'groups/general', :label => :label_general},
{:name => 'users', :partial => 'groups/users', :label => :label_user_plural},

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -65,7 +65,7 @@ module IssuesHelper
s = ''
ancestors = issue.root? ? [] : issue.ancestors.visible.all
ancestors.each do |ancestor|
s << '<div>' + content_tag('p', link_to_issue(ancestor))
s << '<div>' + content_tag('p', link_to_issue(ancestor, :project => (issue.project_id != ancestor.project_id)))
end
s << '<div>'
subject = h(issue.subject)
@@ -80,18 +80,71 @@ module IssuesHelper
def render_descendants_tree(issue)
s = '<form><table class="list issues">'
issue_list(issue.descendants.visible.sort_by(&:lft)) do |child, level|
css = "issue issue-#{child.id} hascontextmenu"
css << " idnt idnt-#{level}" if level > 0
s << content_tag('tr',
content_tag('td', check_box_tag("ids[]", child.id, false, :id => nil), :class => 'checkbox') +
content_tag('td', link_to_issue(child, :truncate => 60), :class => 'subject') +
content_tag('td', link_to_issue(child, :truncate => 60, :project => (issue.project_id != child.project_id)), :class => 'subject') +
content_tag('td', h(child.status)) +
content_tag('td', link_to_user(child.assigned_to)) +
content_tag('td', progress_bar(child.done_ratio, :width => '80px')),
:class => "issue issue-#{child.id} hascontextmenu #{level > 0 ? "idnt idnt-#{level}" : nil}")
:class => css)
end
s << '</table></form>'
s.html_safe
end
# Returns a link for adding a new subtask to the given issue
def link_to_new_subtask(issue)
attrs = {
:tracker_id => issue.tracker,
:parent_issue_id => issue
}
link_to(l(:button_add), new_project_issue_path(issue.project, :issue => attrs))
end
class IssueFieldsRows
include ActionView::Helpers::TagHelper
def initialize
@left = []
@right = []
end
def left(*args)
args.any? ? @left << cells(*args) : @left
end
def right(*args)
args.any? ? @right << cells(*args) : @right
end
def size
@left.size > @right.size ? @left.size : @right.size
end
def to_html
html = ''.html_safe
blank = content_tag('th', '') + content_tag('td', '')
size.times do |i|
left = @left[i] || blank
right = @right[i] || blank
html << content_tag('tr', left + right)
end
html
end
def cells(label, text, options={})
content_tag('th', "#{label}:", options) + content_tag('td', text, options)
end
end
def issue_fields_rows
r = IssueFieldsRows.new
yield r
r.to_html
end
def render_custom_fields_rows(issue)
return if issue.custom_field_values.empty?
ordered_values = []
@@ -248,7 +301,7 @@ module IssuesHelper
unless no_html
label = content_tag('strong', label)
old_value = content_tag("i", h(old_value)) if detail.old_value
old_value = content_tag("strike", old_value) if detail.old_value and detail.value.blank?
old_value = content_tag("del", old_value) if detail.old_value and detail.value.blank?
if detail.property == 'attachment' && !value.blank? && atta = Attachment.find_by_id(detail.prop_key)
# Link to the attachment if it has not been removed
value = link_to_attachment(atta, :download => true, :only_path => options[:only_path])
@@ -318,12 +371,16 @@ module IssuesHelper
def issues_to_csv(issues, project, query, options={})
decimal_separator = l(:general_csv_decimal_separator)
encoding = l(:general_csv_encoding)
columns = (options[:columns] == 'all' ? query.available_columns : query.columns)
columns = (options[:columns] == 'all' ? query.available_inline_columns : query.inline_columns)
if options[:description]
if description = query.available_columns.detect {|q| q.name == :description}
columns << description
end
end
export = FCSV.generate(:col_sep => l(:general_csv_separator)) do |csv|
# csv header fields
csv << [ "#" ] + columns.collect {|c| Redmine::CodesetUtil.from_utf8(c.caption.to_s, encoding) } +
(options[:description] ? [Redmine::CodesetUtil.from_utf8(l(:field_description), encoding)] : [])
csv << [ "#" ] + columns.collect {|c| Redmine::CodesetUtil.from_utf8(c.caption.to_s, encoding) }
# csv lines
issues.each do |issue|
@@ -332,7 +389,7 @@ module IssuesHelper
cv = issue.custom_field_values.detect {|v| v.custom_field_id == column.custom_field.id}
show_value(cv)
else
value = issue.send(column.name)
value = column.value(issue)
if value.is_a?(Date)
format_date(value)
elsif value.is_a?(Time)
@@ -345,8 +402,7 @@ module IssuesHelper
end
s.to_s
end
csv << [ issue.id.to_s ] + col_values.collect {|c| Redmine::CodesetUtil.from_utf8(c.to_s, encoding) } +
(options[:description] ? [Redmine::CodesetUtil.from_utf8(issue.description, encoding)] : [])
csv << [ issue.id.to_s ] + col_values.collect {|c| Redmine::CodesetUtil.from_utf8(c.to_s, encoding) }
end
end
export

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -23,11 +23,13 @@ module JournalsHelper
editable = User.current.logged? && (User.current.allowed_to?(:edit_issue_notes, issue.project) || (journal.user == User.current && User.current.allowed_to?(:edit_own_issue_notes, issue.project)))
links = []
if !journal.notes.blank?
links << link_to_remote(image_tag('comment.png'),
{ :url => {:controller => 'journals', :action => 'new', :id => issue, :journal_id => journal} },
:title => l(:button_quote)) if options[:reply_links]
links << link_to(image_tag('comment.png'),
{:controller => 'journals', :action => 'new', :id => issue, :journal_id => journal},
:remote => true,
:method => 'post',
:title => l(:button_quote)) if options[:reply_links]
links << link_to_in_place_notes_editor(image_tag('edit.png'), "journal-#{journal.id}-notes",
{ :controller => 'journals', :action => 'edit', :id => journal },
{ :controller => 'journals', :action => 'edit', :id => journal, :format => 'js' },
:title => l(:button_edit)) if editable
end
content << content_tag('div', links.join(' ').html_safe, :class => 'contextual') unless links.empty?
@@ -38,7 +40,7 @@ module JournalsHelper
end
def link_to_in_place_notes_editor(text, field_id, url, options={})
onclick = "new Ajax.Request('#{url_for(url)}', {asynchronous:true, evalScripts:true, method:'get'}); return false;"
onclick = "$.ajax({url: '#{url_for(url)}', type: 'get'}); return false;"
link_to text, '#', options.merge(:onclick => onclick)
end
end

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -51,38 +51,15 @@ module ProjectsHelper
content_tag('select', options.html_safe, :name => 'project[parent_id]', :id => 'project_parent_id')
end
# Renders a tree of projects as a nested set of unordered lists
# The given collection may be a subset of the whole project tree
# (eg. some intermediate nodes are private and can not be seen)
# Renders the projects index
def render_project_hierarchy(projects)
s = ''
if projects.any?
ancestors = []
original_project = @project
projects.each do |project|
# set the project environment to please macros.
@project = project
if (ancestors.empty? || project.is_descendant_of?(ancestors.last))
s << "<ul class='projects #{ ancestors.empty? ? 'root' : nil}'>\n"
else
ancestors.pop
s << "</li>"
while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
ancestors.pop
s << "</ul></li>\n"
end
end
classes = (ancestors.empty? ? 'root' : 'child')
s << "<li class='#{classes}'><div class='#{classes}'>" +
link_to_project(project, {}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}")
s << "<div class='wiki description'>#{textilizable(project.short_description, :project => project)}</div>" unless project.description.blank?
s << "</div>\n"
ancestors << project
render_project_nested_lists(projects) do |project|
s = link_to_project(project, {}, :class => "#{project.css_classes} #{User.current.member_of?(project) ? 'my-project' : nil}")
if project.description.present?
s << content_tag('div', textilizable(project.short_description, :project => project), :class => 'wiki description')
end
s << ("</li></ul>\n" * ancestors.size)
@project = original_project
s
end
s.html_safe
end
# Returns a set of options for a select field, grouped by project.
@@ -91,10 +68,6 @@ module ProjectsHelper
versions.each do |version|
grouped[version.project.name] << [version.name, version.id]
end
# Add in the selected
if selected && !versions.include?(selected)
grouped[selected.project.name] << [selected.name, selected.id]
end
if grouped.keys.size > 1
grouped_options_for_select(grouped, selected && selected.id)

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -18,9 +18,44 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module QueriesHelper
def filters_options_for_select(query)
options_for_select(filters_options(query))
end
def operators_for_select(filter_type)
Query.operators_by_filter_type[filter_type].collect {|o| [l(Query.operators[o]), o]}
def filters_options(query)
options = [[]]
sorted_options = query.available_filters.sort do |a, b|
ord = 0
if !(a[1][:order] == 20 && b[1][:order] == 20)
ord = a[1][:order] <=> b[1][:order]
else
cn = (CustomField::CUSTOM_FIELDS_NAMES.index(a[1][:field].class.name) <=>
CustomField::CUSTOM_FIELDS_NAMES.index(b[1][:field].class.name))
if cn != 0
ord = cn
else
f = (a[1][:field] <=> b[1][:field])
if f != 0
ord = f
else
# assigned_to or author
ord = (a[0] <=> b[0])
end
end
end
ord
end
options += sorted_options.map do |field, field_options|
[field_options[:name], field]
end
end
def available_block_columns_tags(query)
tags = ''.html_safe
query.available_block_columns.each do |column|
tags << content_tag('label', check_box_tag('c[]', column.name.to_s, query.has_column?(column)) + " #{column.caption}", :class => 'inline')
end
tags
end
def column_header(column)
@@ -32,7 +67,7 @@ module QueriesHelper
def column_content(column, issue)
value = column.value(issue)
if value.is_a?(Array)
value.collect {|v| column_value(column, issue, v)}.compact.sort.join(', ').html_safe
value.collect {|v| column_value(column, issue, v)}.compact.join(', ').html_safe
else
column_value(column, issue, value)
end
@@ -43,6 +78,8 @@ module QueriesHelper
when 'String'
if column.name == :subject
link_to(h(value), :controller => 'issues', :action => 'show', :id => issue)
elsif column.name == :description
issue.description? ? content_tag('div', textilizable(issue, :description), :class => "wiki") : ''
else
h(value)
end
@@ -70,6 +107,11 @@ module QueriesHelper
l(:general_text_No)
when 'Issue'
link_to_issue(value, :subject => false)
when 'IssueRelation'
other = value.other_issue(issue)
content_tag('span',
(l(value.label_for(issue)) + " " + link_to_issue(other, :subject => false, :tracker => false)).html_safe,
:class => value.css_classes_for(issue))
else
h(value)
end

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -17,9 +17,6 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require 'iconv'
require 'redmine/codeset_util'
module RepositoriesHelper
def format_revision(revision)
if revision.respond_to? :format_identifier
@@ -46,17 +43,17 @@ module RepositoriesHelper
end
def render_changeset_changes
changes = @changeset.changes.find(:all, :limit => 1000, :order => 'path').collect do |change|
changes = @changeset.filechanges.find(:all, :limit => 1000, :order => 'path').collect do |change|
case change.action
when 'A'
# Detects moved/copied files
if !change.from_path.blank?
change.action =
@changeset.changes.detect {|c| c.action == 'D' && c.path == change.from_path} ? 'R' : 'C'
@changeset.filechanges.detect {|c| c.action == 'D' && c.path == change.from_path} ? 'R' : 'C'
end
change
when 'D'
@changeset.changes.detect {|c| c.from_path == change.path} ? nil : change
@changeset.filechanges.detect {|c| c.from_path == change.path} ? nil : change
else
change
end
@@ -141,12 +138,7 @@ module RepositoriesHelper
select_tag('repository_scm',
options_for_select(scm_options, repository.class.name.demodulize),
:disabled => (repository && !repository.new_record?),
:onchange => remote_function(
:url => new_project_repository_path(@project),
:method => :get,
:update => 'content',
:with => "Form.serialize(this.form)")
)
:data => {:remote => true, :method => 'get'})
end
def with_leading_slash(path)
@@ -159,7 +151,7 @@ module RepositoriesHelper
def subversion_field_tags(form, repository)
content_tag('p', form.text_field(:url, :size => 60, :required => true,
:disabled => (repository && !repository.root_url.blank?)) +
:disabled => !repository.safe_attribute?('url')) +
'<br />'.html_safe +
'(file:///, http://, https://, svn://, svn+[tunnelscheme]://)') +
content_tag('p', form.text_field(:login, :size => 30)) +
@@ -174,7 +166,7 @@ module RepositoriesHelper
content_tag('p', form.text_field(
:url, :label => l(:field_path_to_repository),
:size => 60, :required => true,
:disabled => (repository && !repository.new_record?))) +
:disabled => !repository.safe_attribute?('url'))) +
content_tag('p', form.select(
:log_encoding, [nil] + Setting::ENCODINGS,
:label => l(:field_commit_logs_encoding), :required => true))
@@ -184,7 +176,7 @@ module RepositoriesHelper
content_tag('p', form.text_field(
:url, :label => l(:field_path_to_repository),
:size => 60, :required => true,
:disabled => (repository && !repository.root_url.blank?)
:disabled => !repository.safe_attribute?('url')
) +
'<br />'.html_safe + l(:text_mercurial_repository_note)) +
content_tag('p', form.select(
@@ -198,7 +190,7 @@ module RepositoriesHelper
content_tag('p', form.text_field(
:url, :label => l(:field_path_to_repository),
:size => 60, :required => true,
:disabled => (repository && !repository.root_url.blank?)
:disabled => !repository.safe_attribute?('url')
) +
'<br />'.html_safe +
l(:text_git_repository_note)) +
@@ -218,12 +210,12 @@ module RepositoriesHelper
:root_url,
:label => l(:field_cvsroot),
:size => 60, :required => true,
:disabled => !repository.new_record?)) +
:disabled => !repository.safe_attribute?('root_url'))) +
content_tag('p', form.text_field(
:url,
:label => l(:field_cvs_module),
:size => 30, :required => true,
:disabled => !repository.new_record?)) +
:disabled => !repository.safe_attribute?('url'))) +
content_tag('p', form.select(
:log_encoding, [nil] + Setting::ENCODINGS,
:label => l(:field_commit_logs_encoding), :required => true)) +
@@ -238,7 +230,7 @@ module RepositoriesHelper
content_tag('p', form.text_field(
:url, :label => l(:field_path_to_repository),
:size => 60, :required => true,
:disabled => (repository && !repository.new_record?))) +
:disabled => !repository.safe_attribute?('url'))) +
content_tag('p', form.select(
:log_encoding, [nil] + Setting::ENCODINGS,
:label => l(:field_commit_logs_encoding), :required => true))
@@ -248,7 +240,7 @@ module RepositoriesHelper
content_tag('p', form.text_field(
:url, :label => l(:field_root_directory),
:size => 60, :required => true,
:disabled => (repository && !repository.root_url.blank?))) +
:disabled => !repository.safe_attribute?('url'))) +
content_tag('p', form.select(
:path_encoding, [nil] + Setting::ENCODINGS,
:label => l(:field_scm_path_encoding)
@@ -258,16 +250,13 @@ module RepositoriesHelper
def index_commits(commits, heads)
return nil if commits.nil? or commits.first.parents.nil?
refs_map = {}
heads.each do |head|
refs_map[head.scmid] ||= []
refs_map[head.scmid] << head
end
commits_by_scmid = {}
commits.reverse.each_with_index do |commit, commit_index|
commits_by_scmid[commit.scmid] = {
:parent_scmids => commit.parents.collect { |parent| parent.scmid },
:rdmid => commit_index,
@@ -276,38 +265,28 @@ module RepositoriesHelper
:href => block_given? ? yield(commit.scmid) : commit.scmid
}
end
heads.sort! { |head1, head2| head1.to_s <=> head2.to_s }
space = nil
heads.each do |head|
if commits_by_scmid.include? head.scmid
space = index_head((space || -1) + 1, head, commits_by_scmid)
end
end
# when no head matched anything use first commit
space ||= index_head(0, commits.first, commits_by_scmid)
return commits_by_scmid, space
end
def index_head(space, commit, commits_by_scmid)
stack = [[space, commits_by_scmid[commit.scmid]]]
max_space = space
until stack.empty?
space, commit = stack.pop
commit[:space] = space if commit[:space].nil?
space -= 1
commit[:parent_scmids].each_with_index do |parent_scmid, parent_index|
parent_commit = commits_by_scmid[parent_scmid]
if parent_commit and parent_commit[:space].nil?
stack.unshift [space += 1, parent_commit]
end
end

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -44,7 +44,7 @@ module SettingsHelper
setting_values = Setting.send(setting)
setting_values = [] unless setting_values.is_a?(Array)
setting_label(setting, options).html_safe +
content_tag("label", l(options[:label] || "setting_#{setting}")) +
hidden_field_tag("settings[#{setting}][]", '').html_safe +
choices.collect do |choice|
text, value = (choice.is_a?(Array) ? choice : [choice, choice])
@@ -53,9 +53,10 @@ module SettingsHelper
check_box_tag(
"settings[#{setting}][]",
value,
Setting.send(setting).include?(value)
Setting.send(setting).include?(value),
:id => nil
) + text.to_s,
:class => 'block'
:class => (options[:inline] ? 'inline' : 'block')
)
end.join.html_safe
end
@@ -72,13 +73,13 @@ module SettingsHelper
def setting_check_box(setting, options={})
setting_label(setting, options).html_safe +
hidden_field_tag("settings[#{setting}]", 0).html_safe +
hidden_field_tag("settings[#{setting}]", 0, :id => nil).html_safe +
check_box_tag("settings[#{setting}]", 1, Setting.send("#{setting}?"), options).html_safe
end
def setting_label(setting, options={})
label = options.delete(:label)
label != false ? content_tag("label", l(label || "setting_#{setting}")).html_safe : ''
label != false ? label_tag("settings_#{setting}", l(label || "setting_#{setting}")).html_safe : ''
end
# Renders a notification field for a Redmine::Notifiable option
@@ -86,8 +87,20 @@ module SettingsHelper
return content_tag(:label,
check_box_tag('settings[notified_events][]',
notifiable.name,
Setting.notified_events.include?(notifiable.name)).html_safe +
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
end
def cross_project_subtasks_options
options = [
[:label_disabled, ''],
[:label_cross_project_system, 'system'],
[:label_cross_project_tree, 'tree'],
[:label_cross_project_hierarchy, 'hierarchy'],
[:label_cross_project_descendants, 'descendants']
]
options.map {|label, value| [l(label), value.to_s]}
end
end

View File

@@ -89,6 +89,10 @@ module SortHelper
sql.blank? ? nil : sql
end
def to_a
@criteria.dup
end
def add!(key, asc)
@criteria.delete_if {|k,o| k == key}
@criteria = [[key, asc]] + @criteria
@@ -182,6 +186,10 @@ module SortHelper
@sort_criteria.to_sql
end
def sort_criteria
@sort_criteria
end
# Returns a link which sorts by the named column.
#
# - column is the name of an attribute in the sorted record collection.

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -77,6 +77,7 @@ module TimelogHelper
[l(:label_yesterday), 'yesterday'],
[l(:label_this_week), 'current_week'],
[l(:label_last_week), 'last_week'],
[l(:label_last_n_weeks, 2), 'last_2_weeks'],
[l(:label_last_n_days, 7), '7_days'],
[l(:label_this_month), 'current_month'],
[l(:label_last_month), 'last_month'],

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -26,15 +26,6 @@ module UsersHelper
["#{l(:status_locked)} (#{user_count_by_status[3].to_i})", '3']], selected.to_s)
end
# Options for the new membership projects combo-box
def options_for_membership_project_select(user, projects)
options = content_tag('option', "--- #{l(:actionview_instancetag_blank_option)} ---")
options << project_tree_options_for_select(projects) do |p|
{:disabled => (user.projects.include?(p))}
end
options
end
def user_mail_notification_options(user)
user.valid_notification_options.collect {|o| [l(o.last), o.first]}
end

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -19,10 +19,18 @@
module VersionsHelper
STATUS_BY_CRITERIAS = %w(category tracker status priority author assigned_to)
def version_anchor(version)
if @project == version.project
anchor version.name
else
anchor "#{version.project.try(:identifier)}-#{version.name}"
end
end
STATUS_BY_CRITERIAS = %w(tracker status priority author assigned_to category)
def render_issue_status_by(version, criteria)
criteria = 'category' unless STATUS_BY_CRITERIAS.include?(criteria)
criteria = 'tracker' unless STATUS_BY_CRITERIAS.include?(criteria)
h = Hash.new {|k,v| k[v] = [0, 0]}
begin
@@ -36,7 +44,8 @@ module VersionsHelper
rescue ActiveRecord::RecordNotFound
# When grouping by an association, Rails throws this exception if there's no result (bug)
end
counts = h.keys.compact.sort.collect {|k| {:group => k, :total => h[k][0], :open => h[k][1], :closed => (h[k][0] - h[k][1])}}
# Sort with nil keys in last position
counts = h.keys.sort {|a,b| a.nil? ? 1 : (b.nil? ? -1 : a <=> b)}.collect {|k| {:group => k, :total => h[k][0], :open => h[k][1], :closed => (h[k][0] - h[k][1])}}
max = counts.collect {|c| c[:total]}.max
render :partial => 'issue_counts', :locals => {:version => version, :criteria => criteria, :counts => counts, :max => max}

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -30,10 +30,8 @@ module WatchersHelper
:action => (watched ? 'unwatch' : 'watch'),
:object_type => object.class.to_s.underscore,
:object_id => object.id}
link_to_remote((watched ? l(:button_unwatch) : l(:button_watch)),
{:url => url},
:href => url_for(url),
:class => (watched ? 'icon icon-fav' : 'icon icon-fav-off'))
link_to((watched ? l(:button_unwatch) : l(:button_watch)), url,
:remote => true, :method => 'post', :class => (watched ? 'icon icon-fav' : 'icon icon-fav-off'))
end
@@ -45,30 +43,33 @@ module WatchersHelper
# Returns a comma separated list of users watching the given object
def watchers_list(object)
remove_allowed = User.current.allowed_to?("delete_#{object.class.name.underscore}_watchers".to_sym, object.project)
content = ''.html_safe
lis = object.watcher_users.collect do |user|
s = avatar(user, :size => "16").to_s + link_to_user(user, :class => 'user').to_s
s = ''.html_safe
s << avatar(user, :size => "16").to_s
s << link_to_user(user, :class => 'user')
if remove_allowed
url = {:controller => 'watchers',
:action => 'destroy',
:object_type => object.class.to_s.underscore,
:object_id => object.id,
:user_id => user}
s += ' ' + link_to_remote(image_tag('delete.png'),
{:url => url},
:href => url_for(url),
:style => "vertical-align: middle",
:class => "delete")
s << ' '
s << link_to(image_tag('delete.png'), url,
:remote => true, :method => 'post', :style => "vertical-align: middle", :class => "delete")
end
content_tag :li, s.html_safe
content << content_tag('li', s)
end
(lis.empty? ? "" : "<ul>#{ lis.join("\n") }</ul>").html_safe
content.present? ? content_tag('ul', content) : content
end
def watchers_checkboxes(object, users, checked=nil)
users.map do |user|
c = checked.nil? ? object.watched_by?(user) : checked
tag = check_box_tag 'issue[watcher_user_ids][]', user.id, c, :id => nil
content_tag 'label', "#{tag} #{h(user)}", :id => "issue_watcher_user_ids_#{user.id}", :class => "floating"
end.join
content_tag 'label', "#{tag} #{h(user)}".html_safe,
:id => "issue_watcher_user_ids_#{user.id}",
:class => "floating"
end.join.html_safe
end
end

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -21,14 +21,14 @@ module WikiHelper
def wiki_page_options_for_select(pages, selected = nil, parent = nil, level = 0)
pages = pages.group_by(&:parent) unless pages.is_a?(Hash)
s = ''
s = ''.html_safe
if pages.has_key?(parent)
pages[parent].each do |page|
attrs = "value='#{page.id}'"
attrs << " selected='selected'" if selected == page
indent = (level > 0) ? ('&nbsp;' * level * 2 + '&#187; ') : nil
indent = (level > 0) ? ('&nbsp;' * level * 2 + '&#187; ') : ''
s << "<option #{attrs}>#{indent}#{h page.pretty_title}</option>\n" +
s << content_tag('option', (indent + h(page.pretty_title)).html_safe, :value => page.id.to_s, :selected => selected == page) +
wiki_page_options_for_select(pages, selected, page, level + 1)
end
end
@@ -37,7 +37,7 @@ module WikiHelper
def wiki_page_breadcrumb(page)
breadcrumb(page.ancestors.reverse.collect {|parent|
link_to(h(parent.pretty_title), {:controller => 'wiki', :action => 'show', :id => parent.title, :project_id => parent.project})
link_to(h(parent.pretty_title), {:controller => 'wiki', :action => 'show', :id => parent.title, :project_id => parent.project, :version => nil})
})
end
end

View File

@@ -1,7 +1,7 @@
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -18,4 +18,15 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module WorkflowsHelper
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)
name = field.is_a?(CustomField) ? field.id.to_s : field
options = [["", ""], [l(:label_readonly), "readonly"]]
options << [l(:label_required), "required"] unless field_required?(field)
select_tag("permissions[#{name}][#{status.id}]", options_for_select(options, permissions[status.id][name]))
end
end

View File

@@ -24,6 +24,7 @@ class Attachment < ActiveRecord::Base
validates_presence_of :filename, :author
validates_length_of :filename, :maximum => 255
validates_length_of :disk_filename, :maximum => 255
validates_length_of :description, :maximum => 255
validate :validate_max_file_size
acts_as_event :title => :filename,
@@ -44,20 +45,14 @@ class Attachment < ActiveRecord::Base
"LEFT JOIN #{Project.table_name} ON #{Document.table_name}.project_id = #{Project.table_name}.id"}
cattr_accessor :storage_path
@@storage_path = Redmine::Configuration['attachments_storage_path'] || "#{Rails.root}/files"
@@storage_path = Redmine::Configuration['attachments_storage_path'] || File.join(Rails.root, "files")
cattr_accessor :thumbnails_storage_path
@@thumbnails_storage_path = File.join(Rails.root, "tmp", "thumbnails")
before_save :files_to_final_location
after_destroy :delete_from_disk
def container_with_blank_type_check
if container_type.blank?
nil
else
container_without_blank_type_check
end
end
alias_method_chain :container, :blank_type_check unless method_defined?(:container_without_blank_type_check)
# Returns an unsaved copy of the attachment
def copy(attributes=nil)
copy = self.class.new
@@ -110,10 +105,15 @@ class Attachment < ActiveRecord::Base
logger.info("Saving attachment '#{self.diskfile}' (#{@temp_file.size} bytes)")
md5 = Digest::MD5.new
File.open(diskfile, "wb") do |f|
buffer = ""
while (buffer = @temp_file.read(8192))
f.write(buffer)
md5.update(buffer)
if @temp_file.respond_to?(:read)
buffer = ""
while (buffer = @temp_file.read(8192))
f.write(buffer)
md5.update(buffer)
end
else
f.write(@temp_file)
md5.update(@temp_file)
end
end
self.digest = md5.hexdigest
@@ -127,14 +127,22 @@ class Attachment < ActiveRecord::Base
# Deletes the file from the file system if it's not referenced by other attachments
def delete_from_disk
if Attachment.first(:conditions => ["disk_filename = ? AND id <> ?", disk_filename, id]).nil?
if Attachment.where("disk_filename = ? AND id <> ?", disk_filename, id).empty?
delete_from_disk!
end
end
# Returns file's location on disk
def diskfile
"#{@@storage_path}/#{self.disk_filename}"
File.join(self.class.storage_path, disk_filename.to_s)
end
def title
title = filename.to_s
if description.present?
title << " (#{description})"
end
title
end
def increment_download
@@ -154,7 +162,43 @@ class Attachment < ActiveRecord::Base
end
def image?
self.filename =~ /\.(bmp|gif|jpg|jpe|jpeg|png)$/i
!!(self.filename =~ /\.(bmp|gif|jpg|jpe|jpeg|png)$/i)
end
def thumbnailable?
image?
end
# Returns the full path the attachment thumbnail, or nil
# if the thumbnail cannot be generated.
def thumbnail(options={})
if thumbnailable? && readable?
size = options[:size].to_i
if size > 0
# Limit the number of thumbnails per image
size = (size / 50) * 50
# Maximum thumbnail size
size = 800 if size > 800
else
size = Setting.thumbnails_size.to_i
end
size = 100 unless size > 0
target = File.join(self.class.thumbnails_storage_path, "#{id}_#{digest}_#{size}.thumb")
begin
Redmine::Thumbnail.generate(self.diskfile, target, size)
rescue => e
logger.error "An error occured while generating thumbnail for #{disk_filename} to #{target}\nException was: #{e.message}" if logger
return nil
end
end
end
# Deletes all thumbnails
def self.clear_thumbnails
Dir.glob(File.join(thumbnails_storage_path, "*.thumb")).each do |file|
File.delete file
end
end
def is_text?
@@ -179,7 +223,7 @@ class Attachment < ActiveRecord::Base
def self.find_by_token(token)
if token.to_s =~ /^(\d+)\.([0-9a-f]+)$/
attachment_id, attachment_digest = $1, $2
attachment = Attachment.first(:conditions => {:id => attachment_id, :digest => attachment_digest})
attachment = Attachment.where(:id => attachment_id, :digest => attachment_digest).first
if attachment && attachment.container.nil?
attachment
end
@@ -204,8 +248,7 @@ class Attachment < ActiveRecord::Base
end
def self.prune(age=1.day)
attachments = Attachment.all(:conditions => ["created_on < ? AND (container_type IS NULL OR container_type = '')", Time.now - age])
attachments.each(&:destroy)
Attachment.where("created_on < ? AND (container_type IS NULL OR container_type = '')", Time.now - age).destroy_all
end
private

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -18,6 +18,7 @@
# Generic exception for when the AuthSource can not be reached
# (eg. can not connect to the LDAP)
class AuthSourceException < Exception; end
class AuthSourceTimeoutException < AuthSourceException; end
class AuthSource < ActiveRecord::Base
include Redmine::SubclassFactory
@@ -58,7 +59,7 @@ class AuthSource < ActiveRecord::Base
# Try to authenticate a user not yet registered against available sources
def self.authenticate(login, password)
AuthSource.find(:all, :conditions => ["onthefly_register=?", true]).each do |source|
AuthSource.where(:onthefly_register => true).all.each do |source|
begin
logger.debug "Authenticating '#{login}' against '#{source.name}'" if logger && logger.debug?
attrs = source.authenticate(login, password)

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -18,6 +18,7 @@
require 'iconv'
require 'net/ldap'
require 'net/ldap/dn'
require 'timeout'
class AuthSourceLdap < AuthSource
validates_presence_of :host, :port, :attr_login
@@ -25,18 +26,11 @@ class AuthSourceLdap < AuthSource
validates_length_of :account, :account_password, :base_dn, :filter, :maximum => 255, :allow_blank => true
validates_length_of :attr_login, :attr_firstname, :attr_lastname, :attr_mail, :maximum => 30, :allow_nil => true
validates_numericality_of :port, :only_integer => true
validates_numericality_of :timeout, :only_integer => true, :allow_blank => true
validate :validate_filter
before_validation :strip_ldap_attributes
def self.human_attribute_name(attribute_key_name, *args)
attr_name = attribute_key_name.to_s
if attr_name == "filter"
attr_name = "ldap_filter"
end
super(attr_name, *args)
end
def initialize(attributes=nil, *args)
super
self.port = 389 if self.port == 0
@@ -44,22 +38,26 @@ class AuthSourceLdap < AuthSource
def authenticate(login, password)
return nil if login.blank? || password.blank?
attrs = get_user_dn(login, password)
if attrs && attrs[:dn] && authenticate_dn(attrs[:dn], password)
logger.debug "Authentication successful for '#{login}'" if logger && logger.debug?
return attrs.except(:dn)
with_timeout do
attrs = get_user_dn(login, password)
if attrs && attrs[:dn] && authenticate_dn(attrs[:dn], password)
logger.debug "Authentication successful for '#{login}'" if logger && logger.debug?
return attrs.except(:dn)
end
end
rescue Net::LDAP::LdapError => e
rescue Net::LDAP::LdapError => e
raise AuthSourceException.new(e.message)
end
# test the connection to the LDAP
def test_connection
ldap_con = initialize_ldap_con(self.account, self.account_password)
ldap_con.open { }
rescue Net::LDAP::LdapError => e
raise "LdapError: " + e.message
with_timeout do
ldap_con = initialize_ldap_con(self.account, self.account_password)
ldap_con.open { }
end
rescue Net::LDAP::LdapError => e
raise AuthSourceException.new(e.message)
end
def auth_method_name
@@ -68,6 +66,16 @@ class AuthSourceLdap < AuthSource
private
def with_timeout(&block)
timeout = self.timeout
timeout = 20 unless timeout && timeout > 0
Timeout.timeout(timeout) do
return yield
end
rescue Timeout::Error => e
raise AuthSourceTimeoutException.new(e.message)
end
def ldap_filter
if filter.present?
Net::LDAP::Filter.construct(filter)

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -21,26 +21,37 @@ class Board < ActiveRecord::Base
has_many :topics, :class_name => 'Message', :conditions => "#{Message.table_name}.parent_id IS NULL", :order => "#{Message.table_name}.created_on DESC"
has_many :messages, :dependent => :destroy, :order => "#{Message.table_name}.created_on DESC"
belongs_to :last_message, :class_name => 'Message', :foreign_key => :last_message_id
acts_as_list :scope => :project_id
acts_as_tree :dependent => :nullify
acts_as_list :scope => '(project_id = #{project_id} AND parent_id #{parent_id ? "= #{parent_id}" : "IS NULL"})'
acts_as_watchable
validates_presence_of :name, :description
validates_length_of :name, :maximum => 30
validates_length_of :description, :maximum => 255
validate :validate_board
named_scope :visible, lambda {|*args| { :include => :project,
scope :visible, lambda {|*args| { :include => :project,
:conditions => Project.allowed_to_condition(args.shift || User.current, :view_messages, *args) } }
safe_attributes 'name', 'description', 'move_to'
safe_attributes 'name', 'description', 'parent_id', 'move_to'
def visible?(user=User.current)
!user.nil? && user.allowed_to?(:view_messages, project)
end
def reload(*args)
@valid_parents = nil
super
end
def to_s
name
end
def valid_parents
@valid_parents ||= project.boards - self_and_descendants
end
def reset_counters!
self.class.reset_counters!(id)
end
@@ -53,4 +64,26 @@ class Board < ActiveRecord::Base
" last_message_id = (SELECT MAX(id) FROM #{Message.table_name} WHERE board_id=#{board_id})",
["id = ?", board_id])
end
def self.board_tree(boards, parent_id=nil, level=0)
tree = []
boards.select {|board| board.parent_id == parent_id}.sort_by(&:position).each do |board|
tree << [board, level]
tree += board_tree(boards, board.id, level+1)
end
if block_given?
tree.each do |board, level|
yield board, level
end
end
tree
end
protected
def validate_board
if parent_id && parent_id_changed?
errors.add(:parent_id, :invalid) unless valid_parents.include?(parent)
end
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -20,7 +20,7 @@ require 'iconv'
class Changeset < ActiveRecord::Base
belongs_to :repository
belongs_to :user
has_many :changes, :dependent => :delete_all
has_many :filechanges, :class_name => 'Change', :dependent => :delete_all
has_and_belongs_to_many :issues
has_and_belongs_to_many :parents,
:class_name => "Changeset",
@@ -49,7 +49,8 @@ class Changeset < ActiveRecord::Base
validates_uniqueness_of :revision, :scope => :repository_id
validates_uniqueness_of :scmid, :scope => :repository_id, :allow_nil => true
named_scope :visible, lambda {|*args| { :include => {:repository => :project},
scope :visible,
lambda {|*args| { :include => {:repository => :project},
:conditions => Project.allowed_to_condition(args.shift || User.current, :view_changesets, *args) } }
after_create :scan_for_issues
@@ -161,7 +162,7 @@ class Changeset < ActiveRecord::Base
tag = "#{repository.identifier}|#{tag}"
end
if ref_project && project && ref_project != project
tag = "#{project.identifier}:#{tag}"
tag = "#{project.identifier}:#{tag}"
end
tag
end
@@ -175,18 +176,12 @@ class Changeset < ActiveRecord::Base
# Returns the previous changeset
def previous
@previous ||= Changeset.find(:first,
:conditions => ['id < ? AND repository_id = ?',
self.id, self.repository_id],
:order => 'id DESC')
@previous ||= Changeset.where(["id < ? AND repository_id = ?", id, repository_id]).order('id DESC').first
end
# Returns the next changeset
def next
@next ||= Changeset.find(:first,
:conditions => ['id > ? AND repository_id = ?',
self.id, self.repository_id],
:order => 'id ASC')
@next ||= Changeset.where(["id > ? AND repository_id = ?", id, repository_id]).order('id ASC').first
end
# Creates a new Change from it's common parameters

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -18,7 +18,7 @@
class CommentObserver < ActiveRecord::Observer
def after_create(comment)
if comment.commented.is_a?(News) && Setting.notified_events.include?('news_comment_added')
Mailer.deliver_news_comment_added(comment)
Mailer.news_comment_added(comment).deliver
end
end
end

View File

@@ -30,9 +30,32 @@ class CustomField < ActiveRecord::Base
validate :validate_custom_field
before_validation :set_searchable
def initialize(attributes=nil, *args)
super
self.possible_values ||= []
CUSTOM_FIELDS_TABS = [
{:name => 'IssueCustomField', :partial => 'custom_fields/index',
:label => :label_issue_plural},
{:name => 'TimeEntryCustomField', :partial => 'custom_fields/index',
:label => :label_spent_time},
{:name => 'ProjectCustomField', :partial => 'custom_fields/index',
:label => :label_project_plural},
{:name => 'VersionCustomField', :partial => 'custom_fields/index',
:label => :label_version_plural},
{:name => 'UserCustomField', :partial => 'custom_fields/index',
:label => :label_user_plural},
{:name => 'GroupCustomField', :partial => 'custom_fields/index',
:label => :label_group_plural},
{:name => 'TimeEntryActivityCustomField', :partial => 'custom_fields/index',
:label => TimeEntryActivity::OptionName},
{:name => 'IssuePriorityCustomField', :partial => 'custom_fields/index',
:label => IssuePriority::OptionName},
{:name => 'DocumentCategoryCustomField', :partial => 'custom_fields/index',
:label => DocumentCategory::OptionName}
]
CUSTOM_FIELDS_NAMES = CUSTOM_FIELDS_TABS.collect{|v| v[:name]}
def field_format=(arg)
# cannot change format of a saved custom field
super if new_record?
end
def set_searchable
@@ -80,7 +103,7 @@ class CustomField < ActiveRecord::Base
when 'bool'
[[l(:general_text_Yes), '1'], [l(:general_text_No), '0']]
else
read_possible_values_utf8_encoded || []
possible_values || []
end
end
@@ -91,14 +114,20 @@ class CustomField < ActiveRecord::Base
when 'bool'
['1', '0']
else
read_possible_values_utf8_encoded
values = super()
if values.is_a?(Array)
values.each do |value|
value.force_encoding('UTF-8') if value.respond_to?(:force_encoding)
end
end
values || []
end
end
# Makes possible_values accept a multiline string
def possible_values=(arg)
if arg.is_a?(Array)
write_attribute(:possible_values, arg.compact.collect(&:strip).select {|v| !v.blank?})
super(arg.compact.collect(&:strip).select {|v| !v.blank?})
else
self.possible_values = arg.to_s.split(/[\n\r]+/)
end
@@ -125,16 +154,32 @@ class CustomField < ActiveRecord::Base
casted
end
def value_from_keyword(keyword, customized)
possible_values_options = possible_values_options(customized)
if possible_values_options.present?
keyword = keyword.to_s.downcase
if v = possible_values_options.detect {|text, id| text.downcase == keyword}
if v.is_a?(Array)
v.last
else
v
end
end
else
keyword
end
end
# Returns a ORDER BY clause that can used to sort customized
# objects by their value of the custom field.
# Returns false, if the custom field can not be used for sorting.
# Returns nil if the custom field can not be used for sorting.
def order_statement
return nil if multiple?
case field_format
when 'string', 'text', 'list', 'date', 'bool'
# COALESCE is here to make sure that blank and NULL values are sorted equally
"COALESCE((SELECT cv_sort.value FROM #{CustomValue.table_name} cv_sort" +
" WHERE cv_sort.customized_type='#{self.class.customized_class.name}'" +
" WHERE cv_sort.customized_type='#{self.class.customized_class.base_class.name}'" +
" AND cv_sort.customized_id=#{self.class.customized_class.table_name}.id" +
" AND cv_sort.custom_field_id=#{id} LIMIT 1), '')"
when 'int', 'float'
@@ -142,18 +187,74 @@ class CustomField < ActiveRecord::Base
# Postgresql will raise an error if a value can not be casted!
# CustomValue validations should ensure that it doesn't occur
"(SELECT CAST(cv_sort.value AS decimal(60,3)) FROM #{CustomValue.table_name} cv_sort" +
" WHERE cv_sort.customized_type='#{self.class.customized_class.name}'" +
" WHERE cv_sort.customized_type='#{self.class.customized_class.base_class.name}'" +
" AND cv_sort.customized_id=#{self.class.customized_class.table_name}.id" +
" AND cv_sort.custom_field_id=#{id} AND cv_sort.value <> '' AND cv_sort.value IS NOT NULL LIMIT 1)"
when 'user', 'version'
value_class.fields_for_order_statement(value_join_alias)
else
nil
end
end
# Returns a GROUP BY clause that can used to group by custom value
# Returns nil if the custom field can not be used for grouping.
def group_statement
return nil if multiple?
case field_format
when 'list', 'date', 'bool', 'int'
order_statement
when 'user', 'version'
"COALESCE((SELECT cv_sort.value FROM #{CustomValue.table_name} cv_sort" +
" WHERE cv_sort.customized_type='#{self.class.customized_class.base_class.name}'" +
" AND cv_sort.customized_id=#{self.class.customized_class.table_name}.id" +
" AND cv_sort.custom_field_id=#{id} LIMIT 1), '')"
else
nil
end
end
def join_for_order_statement
case field_format
when 'user', 'version'
"LEFT OUTER JOIN #{CustomValue.table_name} #{join_alias}" +
" ON #{join_alias}.customized_type = '#{self.class.customized_class.base_class.name}'" +
" AND #{join_alias}.customized_id = #{self.class.customized_class.table_name}.id" +
" AND #{join_alias}.custom_field_id = #{id}" +
" AND #{join_alias}.value <> ''" +
" AND #{join_alias}.id = (SELECT max(#{join_alias}_2.id) FROM #{CustomValue.table_name} #{join_alias}_2" +
" WHERE #{join_alias}_2.customized_type = #{join_alias}.customized_type" +
" AND #{join_alias}_2.customized_id = #{join_alias}.customized_id" +
" AND #{join_alias}_2.custom_field_id = #{join_alias}.custom_field_id)" +
" LEFT OUTER JOIN #{value_class.table_name} #{value_join_alias}" +
" ON CAST(#{join_alias}.value as decimal(60,0)) = #{value_join_alias}.id"
else
nil
end
end
def join_alias
"cf_#{id}"
end
def value_join_alias
join_alias + "_" + field_format
end
def <=>(field)
position <=> field.position
end
# Returns the class that values represent
def value_class
case field_format
when 'user', 'version'
field_format.classify.constantize
else
nil
end
end
def self.customized_class
self.name =~ /^(.+)CustomField$/
begin; $1.constantize; rescue nil; end
@@ -194,6 +295,10 @@ class CustomField < ActiveRecord::Base
validate_field_value(value).empty?
end
def format_in?(*args)
args.include?(field_format)
end
protected
# Returns the error message for the given value regarding its format
@@ -218,14 +323,4 @@ class CustomField < ActiveRecord::Base
end
errs
end
def read_possible_values_utf8_encoded
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)
end
end
values
end
end

View File

@@ -1,5 +1,5 @@
# RedMine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Redmine - project management software
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -30,7 +30,7 @@ class Document < ActiveRecord::Base
validates_presence_of :project, :title, :category
validates_length_of :title, :maximum => 60
named_scope :visible, lambda {|*args| { :include => :project,
scope :visible, lambda {|*args| { :include => :project,
:conditions => Project.allowed_to_condition(args.shift || User.current, :view_documents, *args) } }
safe_attributes 'category_id', 'title', 'description'

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -31,4 +31,10 @@ class DocumentCategory < Enumeration
def transfer_relations(to)
documents.update_all("category_id = #{to.id}")
end
def self.default
d = super
d = first if d.nil?
d
end
end

View File

@@ -1,5 +1,5 @@
# Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
# Copyright (C) 2006-2012 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

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