##// END OF EJS Templates
Merged r3298 to r3302 from trunk....
Jean-Philippe Lang -
r3189:1efb25a4334e
parent child
Show More
@@ -1,70 +1,70
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
3 <head>
3 <head>
4 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
4 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
5 <title><%=h html_title %></title>
5 <title><%=h html_title %></title>
6 <meta name="description" content="<%= Redmine::Info.app_name %>" />
6 <meta name="description" content="<%= Redmine::Info.app_name %>" />
7 <meta name="keywords" content="issue,bug,tracker" />
7 <meta name="keywords" content="issue,bug,tracker" />
8 <%= stylesheet_link_tag 'application', :media => 'all' %>
8 <%= stylesheet_link_tag 'application', :media => 'all' %>
9 <%= javascript_include_tag :defaults %>
9 <%= javascript_include_tag :defaults %>
10 <%= heads_for_wiki_formatter %>
10 <%= heads_for_wiki_formatter %>
11 <!--[if IE]>
11 <!--[if IE]>
12 <style type="text/css">
12 <style type="text/css">
13 * html body{ width: expression( document.documentElement.clientWidth < 900 ? '900px' : '100%' ); }
13 * html body{ width: expression( document.documentElement.clientWidth < 900 ? '900px' : '100%' ); }
14 body {behavior: url(<%= stylesheet_path "csshover.htc" %>);}
14 body {behavior: url(<%= stylesheet_path "csshover.htc" %>);}
15 </style>
15 </style>
16 <![endif]-->
16 <![endif]-->
17 <%= call_hook :view_layouts_base_html_head %>
17 <%= call_hook :view_layouts_base_html_head %>
18 <!-- page specific tags -->
18 <!-- page specific tags -->
19 <%= yield :header_tags -%>
19 <%= yield :header_tags -%>
20 </head>
20 </head>
21 <body>
21 <body>
22 <div id="wrapper">
22 <div id="wrapper">
23 <div id="top-menu">
23 <div id="top-menu">
24 <div id="account">
24 <div id="account">
25 <%= render_menu :account_menu -%>
25 <%= render_menu :account_menu -%>
26 </div>
26 </div>
27 <%= content_tag('div', "#{l(:label_logged_as)} #{link_to_user(User.current, :format => :username)}", :id => 'loggedas') if User.current.logged? %>
27 <%= content_tag('div', "#{l(:label_logged_as)} #{link_to_user(User.current, :format => :username)}", :id => 'loggedas') if User.current.logged? %>
28 <%= render_menu :top_menu -%>
28 <%= render_menu :top_menu -%>
29 </div>
29 </div>
30
30
31 <div id="header">
31 <div id="header">
32 <div id="quick-search">
32 <div id="quick-search">
33 <% form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get ) do %>
33 <% form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get ) do %>
34 <%= hidden_field_tag(controller.default_search_scope, 1, :id => nil) if controller.default_search_scope %>
34 <%= hidden_field_tag(controller.default_search_scope, 1, :id => nil) if controller.default_search_scope %>
35 <%= link_to l(:label_search), {:controller => 'search', :action => 'index', :id => @project}, :accesskey => accesskey(:search) %>:
35 <%= link_to l(:label_search), {:controller => 'search', :action => 'index', :id => @project}, :accesskey => accesskey(:search) %>:
36 <%= text_field_tag 'q', @question, :size => 20, :class => 'small', :accesskey => accesskey(:quick_search) %>
36 <%= text_field_tag 'q', @question, :size => 20, :class => 'small', :accesskey => accesskey(:quick_search) %>
37 <% end %>
37 <% end %>
38 <%= render_project_jump_box %>
38 <%= render_project_jump_box %>
39 </div>
39 </div>
40
40
41 <h1><%= page_header_title %></h1>
41 <h1><%= page_header_title %></h1>
42
42
43 <div id="main-menu">
43 <div id="main-menu">
44 <%= render_main_menu(@project) %>
44 <%= render_main_menu(@project) %>
45 </div>
45 </div>
46 </div>
46 </div>
47
47
48 <%= tag('div', {:id => 'main', :class => (has_content?(:sidebar) ? '' : 'nosidebar')}, true) %>
48 <%= tag('div', {:id => 'main', :class => (has_content?(:sidebar) ? '' : 'nosidebar')}, true) %>
49 <div id="sidebar">
49 <div id="sidebar">
50 <%= yield :sidebar %>
50 <%= yield :sidebar %>
51 <%= call_hook :view_layouts_base_sidebar %>
51 <%= call_hook :view_layouts_base_sidebar %>
52 </div>
52 </div>
53
53
54 <div id="content">
54 <div id="content">
55 <%= render_flash_messages %>
55 <%= render_flash_messages %>
56 <%= yield %>
56 <%= yield %>
57 <%= call_hook :view_layouts_base_content %>
57 <%= call_hook :view_layouts_base_content %>
58 <div style="clear:both;"></div>
58 <div style="clear:both;"></div>
59 </div>
59 </div>
60 </div>
60 </div>
61
61
62 <div id="ajax-indicator" style="display:none;"><span><%= l(:label_loading) %></span></div>
62 <div id="ajax-indicator" style="display:none;"><span><%= l(:label_loading) %></span></div>
63
63
64 <div id="footer">
64 <div id="footer">
65 Powered by <%= link_to Redmine::Info.app_name, Redmine::Info.url %> &copy; 2006-2009 Jean-Philippe Lang
65 Powered by <%= link_to Redmine::Info.app_name, Redmine::Info.url %> &copy; 2006-2010 Jean-Philippe Lang
66 </div>
66 </div>
67 </div>
67 </div>
68 <%= call_hook :view_layouts_base_body_bottom %>
68 <%= call_hook :view_layouts_base_body_bottom %>
69 </body>
69 </body>
70 </html>
70 </html>
@@ -1,1064 +1,1071
1 == Redmine changelog
1 == Redmine changelog
2
2
3 Redmine - project management software
3 Redmine - project management software
4 Copyright (C) 2006-2010 Jean-Philippe Lang
4 Copyright (C) 2006-2010 Jean-Philippe Lang
5 http://www.redmine.org/
5 http://www.redmine.org/
6
6
7 == 0.9.1
8
9 * Vertical alignment for inline images in formatted text set to 'middle'
10 * Fixed: Redmine.pm error "closing dbh with active statement handles at /usr/lib/perl5/Apache/Redmine.pm"
11 * Fixed: copyright year in footer set to 2010
12
13
7 == 2010-01-09 v0.9.0 (Release candidate)
14 == 2010-01-09 v0.9.0 (Release candidate)
8
15
9 * Unlimited subproject nesting
16 * Unlimited subproject nesting
10 * Multiple roles per user per project
17 * Multiple roles per user per project
11 * User groups
18 * User groups
12 * Inheritence of versions
19 * Inheritence of versions
13 * OpenID login
20 * OpenID login
14 * "Watched by me" issue filter
21 * "Watched by me" issue filter
15 * Project copy
22 * Project copy
16 * Project creation by non admin users
23 * Project creation by non admin users
17 * Accept emails from anyone on a private project
24 * Accept emails from anyone on a private project
18 * Add email notification on Wiki changes
25 * Add email notification on Wiki changes
19 * Make issue description non-required field
26 * Make issue description non-required field
20 * Custom fields for Versions
27 * Custom fields for Versions
21 * Being able to sort the issue list by custom fields
28 * Being able to sort the issue list by custom fields
22 * Ability to close versions
29 * Ability to close versions
23 * User display/editing of custom fields attached to their user profile
30 * User display/editing of custom fields attached to their user profile
24 * Add "follows" issue relation
31 * Add "follows" issue relation
25 * Copy workflows between trackers and roles
32 * Copy workflows between trackers and roles
26 * Defaults enabled modules list for project creation
33 * Defaults enabled modules list for project creation
27 * Weighted version completion percentage on the roadmap
34 * Weighted version completion percentage on the roadmap
28 * Autocreate user account when user submits email that creates new issue
35 * Autocreate user account when user submits email that creates new issue
29 * CSS class on overdue issues on the issue list
36 * CSS class on overdue issues on the issue list
30 * Enable tracker update on issue edit form
37 * Enable tracker update on issue edit form
31 * Remove issue watchers
38 * Remove issue watchers
32 * Ability to move threads between project forums
39 * Ability to move threads between project forums
33 * Changed custom field "Possible values" to a textarea
40 * Changed custom field "Possible values" to a textarea
34 * Adds projects association on tracker form
41 * Adds projects association on tracker form
35 * Set session store to cookie store by default
42 * Set session store to cookie store by default
36 * Set a default wiki page on project creation
43 * Set a default wiki page on project creation
37 * Roadmap for main project should see Roadmaps for sub projects
44 * Roadmap for main project should see Roadmaps for sub projects
38 * Ticket grouping on the issue list
45 * Ticket grouping on the issue list
39 * Hierarchical Project links in the page header
46 * Hierarchical Project links in the page header
40 * Allow My Page blocks to be added to from a plugin
47 * Allow My Page blocks to be added to from a plugin
41 * Sort issues by multiple columns
48 * Sort issues by multiple columns
42 * Filters of saved query are now visible and be adjusted without editing the query
49 * Filters of saved query are now visible and be adjusted without editing the query
43 * Saving "sort order" in custom queries
50 * Saving "sort order" in custom queries
44 * Url to fetch changesets for a repository
51 * Url to fetch changesets for a repository
45 * Managers able to create subprojects
52 * Managers able to create subprojects
46 * Issue Totals on My Page Modules
53 * Issue Totals on My Page Modules
47 * Convert Enumerations to single table inheritance (STI)
54 * Convert Enumerations to single table inheritance (STI)
48 * Allow custom my_page blocks to define drop-down names
55 * Allow custom my_page blocks to define drop-down names
49 * "View Issues" user permission added
56 * "View Issues" user permission added
50 * Ask user what to do with child pages when deleting a parent wiki page
57 * Ask user what to do with child pages when deleting a parent wiki page
51 * Contextual quick search
58 * Contextual quick search
52 * Allow resending of password by email
59 * Allow resending of password by email
53 * Change reply subject to be a link to the reply itself
60 * Change reply subject to be a link to the reply itself
54 * Include Logged Time as part of the project's Activity history
61 * Include Logged Time as part of the project's Activity history
55 * REST API for authentication
62 * REST API for authentication
56 * Browse through Git branches
63 * Browse through Git branches
57 * Setup Object Daddy to replace test fixtures
64 * Setup Object Daddy to replace test fixtures
58 * Setup shoulda to make it easier to test
65 * Setup shoulda to make it easier to test
59 * Custom fields and overrides on Enumerations
66 * Custom fields and overrides on Enumerations
60 * Add or remove columns from the issue list
67 * Add or remove columns from the issue list
61 * Ability to add new version from issues screen
68 * Ability to add new version from issues screen
62 * Setting to choose which day calendars start
69 * Setting to choose which day calendars start
63 * Asynchronous email delivery method
70 * Asynchronous email delivery method
64 * RESTful URLs for (almost) everything
71 * RESTful URLs for (almost) everything
65 * Include issue status in search results and activity pages
72 * Include issue status in search results and activity pages
66 * Add email to admin user search filter
73 * Add email to admin user search filter
67 * Proper content type for plain text mails
74 * Proper content type for plain text mails
68 * Default value of project jump box
75 * Default value of project jump box
69 * Tree based menus
76 * Tree based menus
70 * Ability to use issue status to update percent done
77 * Ability to use issue status to update percent done
71 * Second set of issue "Action Links" at the bottom of an issue page
78 * Second set of issue "Action Links" at the bottom of an issue page
72 * Proper exist status code for rdm-mailhandler.rb
79 * Proper exist status code for rdm-mailhandler.rb
73 * Remove incoming email body via a delimiter
80 * Remove incoming email body via a delimiter
74 * Fixed: Custom querry 'Export to PDF' ignores field selection
81 * Fixed: Custom querry 'Export to PDF' ignores field selection
75 * Fixed: Related e-mail notifications aren't threaded
82 * Fixed: Related e-mail notifications aren't threaded
76 * Fixed: No warning when the creation of a categories from the issue form fails
83 * Fixed: No warning when the creation of a categories from the issue form fails
77 * Fixed: Actually block issues from closing when relation 'blocked by' isn't closed
84 * Fixed: Actually block issues from closing when relation 'blocked by' isn't closed
78 * Fixed: Include both first and last name when sorting by users
85 * Fixed: Include both first and last name when sorting by users
79 * Fixed: Table cell with multiple line text
86 * Fixed: Table cell with multiple line text
80 * Fixed: Project overview page shows disabled trackers
87 * Fixed: Project overview page shows disabled trackers
81 * Fixed: Cross project issue relations and user permissions
88 * Fixed: Cross project issue relations and user permissions
82 * Fixed: My page shows tickets the user doesn't have access to
89 * Fixed: My page shows tickets the user doesn't have access to
83 * Fixed: TOC does not parse wiki page reference links with description
90 * Fixed: TOC does not parse wiki page reference links with description
84 * Fixed: Target version-list on bulk edit form is incorrectly sorted
91 * Fixed: Target version-list on bulk edit form is incorrectly sorted
85 * Fixed: Cannot modify/delete project named "Documents"
92 * Fixed: Cannot modify/delete project named "Documents"
86 * Fixed: Email address in brackets breaks html
93 * Fixed: Email address in brackets breaks html
87 * Fixed: Timelog detail loose issue filter passing to report tab
94 * Fixed: Timelog detail loose issue filter passing to report tab
88 * Fixed: Inform about custom field's name maximum length
95 * Fixed: Inform about custom field's name maximum length
89 * Fixed: Activity page and Atom feed links contain project id instead of identifier
96 * Fixed: Activity page and Atom feed links contain project id instead of identifier
90 * Fixed: no Atom key for forums with only 1 forum
97 * Fixed: no Atom key for forums with only 1 forum
91 * Fixed: When reading RSS feed in MS Outlook, the inline links are broken.
98 * Fixed: When reading RSS feed in MS Outlook, the inline links are broken.
92 * Fixed: Sometimes new posts don't show up in the topic list of a forum.
99 * Fixed: Sometimes new posts don't show up in the topic list of a forum.
93 * Fixed: The all/active filter selection in the project view does not stick.
100 * Fixed: The all/active filter selection in the project view does not stick.
94 * Fixed: Login box has Different width
101 * Fixed: Login box has Different width
95 * Fixed: User removed from project - still getting project update emails
102 * Fixed: User removed from project - still getting project update emails
96 * Fixed: Project with the identifier of 'new' cannot be viewed
103 * Fixed: Project with the identifier of 'new' cannot be viewed
97 * Fixed: Artefacts in search view (Cyrillic)
104 * Fixed: Artefacts in search view (Cyrillic)
98 * Fixed: Allow [#id] as subject to reply by email
105 * Fixed: Allow [#id] as subject to reply by email
99 * Fixed: Wrong language used when closing an issue via a commit message
106 * Fixed: Wrong language used when closing an issue via a commit message
100 * Fixed: email handler drops emails for new issues with no subject
107 * Fixed: email handler drops emails for new issues with no subject
101 * Fixed: Calendar misspelled under Roles/Permissions
108 * Fixed: Calendar misspelled under Roles/Permissions
102 * Fixed: Emails from no-reply redmine's address hell cycle
109 * Fixed: Emails from no-reply redmine's address hell cycle
103 * Fixed: child_pages macro fails on wiki page history
110 * Fixed: child_pages macro fails on wiki page history
104 * Fixed: Pre-filled time tracking date ignores timezone
111 * Fixed: Pre-filled time tracking date ignores timezone
105 * Fixed: Links on locked users lead to 404 page
112 * Fixed: Links on locked users lead to 404 page
106 * Fixed: Page changes in issue-list when using context menu
113 * Fixed: Page changes in issue-list when using context menu
107 * Fixed: diff parser removes lines starting with multiple dashes
114 * Fixed: diff parser removes lines starting with multiple dashes
108 * Fixed: Quoting in forums resets message subject
115 * Fixed: Quoting in forums resets message subject
109 * Fixed: Editing issue comment removes quote link
116 * Fixed: Editing issue comment removes quote link
110 * Fixed: Redmine.pm ignore browse_repository permission
117 * Fixed: Redmine.pm ignore browse_repository permission
111 * Fixed: text formatting breaks on [msg1][msg2]
118 * Fixed: text formatting breaks on [msg1][msg2]
112 * Fixed: Spent Time Default Value of 0.0
119 * Fixed: Spent Time Default Value of 0.0
113 * Fixed: Wiki pages in search results are referenced by project number, not by project identifier.
120 * Fixed: Wiki pages in search results are referenced by project number, not by project identifier.
114 * Fixed: When logging in via an autologin cookie the user's last_login_on should be updated
121 * Fixed: When logging in via an autologin cookie the user's last_login_on should be updated
115 * Fixed: 50k users cause problems in project->settings->members screen
122 * Fixed: 50k users cause problems in project->settings->members screen
116 * Fixed: Document timestamp needs to show updated timestamps
123 * Fixed: Document timestamp needs to show updated timestamps
117 * Fixed: Users getting notifications for issues they are no longer allowed to view
124 * Fixed: Users getting notifications for issues they are no longer allowed to view
118 * Fixed: issue summary counts should link to the issue list without subprojects
125 * Fixed: issue summary counts should link to the issue list without subprojects
119 * Fixed: 'Delete' link on LDAP list has no effect
126 * Fixed: 'Delete' link on LDAP list has no effect
120
127
121
128
122 == 2009-11-15 v0.8.7
129 == 2009-11-15 v0.8.7
123
130
124 * Fixed: Hide paragraph terminator at the end of headings on html export
131 * Fixed: Hide paragraph terminator at the end of headings on html export
125 * Fixed: pre tags containing "<pre*"
132 * Fixed: pre tags containing "<pre*"
126 * Fixed: First date of the date range not included in the time report with SQLite
133 * Fixed: First date of the date range not included in the time report with SQLite
127 * Fixed: Password field not styled correctly on alternative stylesheet
134 * Fixed: Password field not styled correctly on alternative stylesheet
128 * Fixed: Error when sumbitting a POST request that requires a login
135 * Fixed: Error when sumbitting a POST request that requires a login
129 * Fixed: CSRF vulnerabilities
136 * Fixed: CSRF vulnerabilities
130
137
131
138
132 == 2009-11-04 v0.8.6
139 == 2009-11-04 v0.8.6
133
140
134 * Change links to closed issues to be a grey color
141 * Change links to closed issues to be a grey color
135 * Change subversion adapter to not cache authentication and run non interactively
142 * Change subversion adapter to not cache authentication and run non interactively
136 * Fixed: Custom Values with a nil value cause HTTP error 500
143 * Fixed: Custom Values with a nil value cause HTTP error 500
137 * Fixed: Failure to convert HTML entities when editing an Issue reply
144 * Fixed: Failure to convert HTML entities when editing an Issue reply
138 * Fixed: Error trying to show repository when there are no comments in a changeset
145 * Fixed: Error trying to show repository when there are no comments in a changeset
139 * Fixed: account/show/:user_id should not be accessible for other users not in your projects
146 * Fixed: account/show/:user_id should not be accessible for other users not in your projects
140 * Fixed: XSS vulnerabilities
147 * Fixed: XSS vulnerabilities
141 * Fixed: IssuesController#destroy should accept POST only
148 * Fixed: IssuesController#destroy should accept POST only
142 * Fixed: Inline images in wiki headings
149 * Fixed: Inline images in wiki headings
143
150
144
151
145 == 2009-09-13 v0.8.5
152 == 2009-09-13 v0.8.5
146
153
147 * Incoming mail handler : Allow spaces between keywords and colon
154 * Incoming mail handler : Allow spaces between keywords and colon
148 * Do not require a non-word character after a comma in Redmine links
155 * Do not require a non-word character after a comma in Redmine links
149 * Include issue hyperlinks in reminder emails
156 * Include issue hyperlinks in reminder emails
150 * Prevent nil error when retrieving svn version
157 * Prevent nil error when retrieving svn version
151 * Various plugin hooks added
158 * Various plugin hooks added
152 * Add plugins information to script/about
159 * Add plugins information to script/about
153 * Fixed: 500 Internal Server Error is raised if add an empty comment to the news
160 * Fixed: 500 Internal Server Error is raised if add an empty comment to the news
154 * Fixed: Atom links for wiki pages are not correct
161 * Fixed: Atom links for wiki pages are not correct
155 * Fixed: Atom feeds leak email address
162 * Fixed: Atom feeds leak email address
156 * Fixed: Case sensitivity in Issue filtering
163 * Fixed: Case sensitivity in Issue filtering
157 * Fixed: When reading RSS feed, the inline-embedded images are not properly shown
164 * Fixed: When reading RSS feed, the inline-embedded images are not properly shown
158
165
159
166
160 == 2009-05-17 v0.8.4
167 == 2009-05-17 v0.8.4
161
168
162 * Allow textile mailto links
169 * Allow textile mailto links
163 * Fixed: memory consumption when uploading file
170 * Fixed: memory consumption when uploading file
164 * Fixed: Mercurial integration doesn't work if Redmine is installed in folder path containing space
171 * Fixed: Mercurial integration doesn't work if Redmine is installed in folder path containing space
165 * Fixed: an error is raised when no tab is available on project settings
172 * Fixed: an error is raised when no tab is available on project settings
166 * Fixed: insert image macro corrupts urls with excalamation marks
173 * Fixed: insert image macro corrupts urls with excalamation marks
167 * Fixed: error on cross-project gantt PNG export
174 * Fixed: error on cross-project gantt PNG export
168 * Fixed: self and alternate links in atom feeds do not respect Atom specs
175 * Fixed: self and alternate links in atom feeds do not respect Atom specs
169 * Fixed: accept any svn tunnel scheme in repository URL
176 * Fixed: accept any svn tunnel scheme in repository URL
170 * Fixed: issues/show should accept user's rss key
177 * Fixed: issues/show should accept user's rss key
171 * Fixed: consistency of custom fields display on the issue detail view
178 * Fixed: consistency of custom fields display on the issue detail view
172 * Fixed: wiki comments length validation is missing
179 * Fixed: wiki comments length validation is missing
173 * Fixed: weak autologin token generation algorithm causes duplicate tokens
180 * Fixed: weak autologin token generation algorithm causes duplicate tokens
174
181
175
182
176 == 2009-04-05 v0.8.3
183 == 2009-04-05 v0.8.3
177
184
178 * Separate project field and subject in cross-project issue view
185 * Separate project field and subject in cross-project issue view
179 * Ability to set language for redmine:load_default_data task using REDMINE_LANG environment variable
186 * Ability to set language for redmine:load_default_data task using REDMINE_LANG environment variable
180 * Rescue Redmine::DefaultData::DataAlreadyLoaded in redmine:load_default_data task
187 * Rescue Redmine::DefaultData::DataAlreadyLoaded in redmine:load_default_data task
181 * CSS classes to highlight own and assigned issues
188 * CSS classes to highlight own and assigned issues
182 * Hide "New file" link on wiki pages from printing
189 * Hide "New file" link on wiki pages from printing
183 * Flush buffer when asking for language in redmine:load_default_data task
190 * Flush buffer when asking for language in redmine:load_default_data task
184 * Minimum project identifier length set to 1
191 * Minimum project identifier length set to 1
185 * Include headers so that emails don't trigger vacation auto-responders
192 * Include headers so that emails don't trigger vacation auto-responders
186 * Fixed: Time entries csv export links for all projects are malformed
193 * Fixed: Time entries csv export links for all projects are malformed
187 * Fixed: Files without Version aren't visible in the Activity page
194 * Fixed: Files without Version aren't visible in the Activity page
188 * Fixed: Commit logs are centered in the repo browser
195 * Fixed: Commit logs are centered in the repo browser
189 * Fixed: News summary field content is not searchable
196 * Fixed: News summary field content is not searchable
190 * Fixed: Journal#save has a wrong signature
197 * Fixed: Journal#save has a wrong signature
191 * Fixed: Email footer signature convention
198 * Fixed: Email footer signature convention
192 * Fixed: Timelog report do not show time for non-versioned issues
199 * Fixed: Timelog report do not show time for non-versioned issues
193
200
194
201
195 == 2009-03-07 v0.8.2
202 == 2009-03-07 v0.8.2
196
203
197 * Send an email to the user when an administrator activates a registered user
204 * Send an email to the user when an administrator activates a registered user
198 * Strip keywords from received email body
205 * Strip keywords from received email body
199 * Footer updated to 2009
206 * Footer updated to 2009
200 * Show RSS-link even when no issues is found
207 * Show RSS-link even when no issues is found
201 * One click filter action in activity view
208 * One click filter action in activity view
202 * Clickable/linkable line #'s while browsing the repo or viewing a file
209 * Clickable/linkable line #'s while browsing the repo or viewing a file
203 * Links to versions on files list
210 * Links to versions on files list
204 * Added request and controller objects to the hooks by default
211 * Added request and controller objects to the hooks by default
205 * Fixed: exporting an issue with attachments to PDF raises an error
212 * Fixed: exporting an issue with attachments to PDF raises an error
206 * Fixed: "too few arguments" error may occur on activerecord error translation
213 * Fixed: "too few arguments" error may occur on activerecord error translation
207 * Fixed: "Default columns Displayed on the Issues list" setting is not easy to read
214 * Fixed: "Default columns Displayed on the Issues list" setting is not easy to read
208 * Fixed: visited links to closed tickets are not striked through with IE6
215 * Fixed: visited links to closed tickets are not striked through with IE6
209 * Fixed: MailHandler#plain_text_body returns nil if there was nothing to strip
216 * Fixed: MailHandler#plain_text_body returns nil if there was nothing to strip
210 * Fixed: MailHandler raises an error when processing an email without From header
217 * Fixed: MailHandler raises an error when processing an email without From header
211
218
212
219
213 == 2009-02-15 v0.8.1
220 == 2009-02-15 v0.8.1
214
221
215 * Select watchers on new issue form
222 * Select watchers on new issue form
216 * Issue description is no longer a required field
223 * Issue description is no longer a required field
217 * Files module: ability to add files without version
224 * Files module: ability to add files without version
218 * Jump to the current tab when using the project quick-jump combo
225 * Jump to the current tab when using the project quick-jump combo
219 * Display a warning if some attachments were not saved
226 * Display a warning if some attachments were not saved
220 * Import custom fields values from emails on issue creation
227 * Import custom fields values from emails on issue creation
221 * Show view/annotate/download links on entry and annotate views
228 * Show view/annotate/download links on entry and annotate views
222 * Admin Info Screen: Display if plugin assets directory is writable
229 * Admin Info Screen: Display if plugin assets directory is writable
223 * Adds a 'Create and continue' button on the new issue form
230 * Adds a 'Create and continue' button on the new issue form
224 * IMAP: add options to move received emails
231 * IMAP: add options to move received emails
225 * Do not show Category field when categories are not defined
232 * Do not show Category field when categories are not defined
226 * Lower the project identifier limit to a minimum of two characters
233 * Lower the project identifier limit to a minimum of two characters
227 * Add "closed" html class to closed entries in issue list
234 * Add "closed" html class to closed entries in issue list
228 * Fixed: broken redirect URL on login failure
235 * Fixed: broken redirect URL on login failure
229 * Fixed: Deleted files are shown when using Darcs
236 * Fixed: Deleted files are shown when using Darcs
230 * Fixed: Darcs adapter works on Win32 only
237 * Fixed: Darcs adapter works on Win32 only
231 * Fixed: syntax highlight doesn't appear in new ticket preview
238 * Fixed: syntax highlight doesn't appear in new ticket preview
232 * Fixed: email notification for changes I make still occurs when running Repository.fetch_changesets
239 * Fixed: email notification for changes I make still occurs when running Repository.fetch_changesets
233 * Fixed: no error is raised when entering invalid hours on the issue update form
240 * Fixed: no error is raised when entering invalid hours on the issue update form
234 * Fixed: Details time log report CSV export doesn't honour date format from settings
241 * Fixed: Details time log report CSV export doesn't honour date format from settings
235 * Fixed: invalid css classes on issue details
242 * Fixed: invalid css classes on issue details
236 * Fixed: Trac importer creates duplicate custom values
243 * Fixed: Trac importer creates duplicate custom values
237 * Fixed: inline attached image should not match partial filename
244 * Fixed: inline attached image should not match partial filename
238
245
239
246
240 == 2008-12-30 v0.8.0
247 == 2008-12-30 v0.8.0
241
248
242 * Setting added in order to limit the number of diff lines that should be displayed
249 * Setting added in order to limit the number of diff lines that should be displayed
243 * Makes logged-in username in topbar linking to
250 * Makes logged-in username in topbar linking to
244 * Mail handler: strip tags when receiving a html-only email
251 * Mail handler: strip tags when receiving a html-only email
245 * Mail handler: add watchers before sending notification
252 * Mail handler: add watchers before sending notification
246 * Adds a css class (overdue) to overdue issues on issue lists and detail views
253 * Adds a css class (overdue) to overdue issues on issue lists and detail views
247 * Fixed: project activity truncated after viewing user's activity
254 * Fixed: project activity truncated after viewing user's activity
248 * Fixed: email address entered for password recovery shouldn't be case-sensitive
255 * Fixed: email address entered for password recovery shouldn't be case-sensitive
249 * Fixed: default flag removed when editing a default enumeration
256 * Fixed: default flag removed when editing a default enumeration
250 * Fixed: default category ignored when adding a document
257 * Fixed: default category ignored when adding a document
251 * Fixed: error on repository user mapping when a repository username is blank
258 * Fixed: error on repository user mapping when a repository username is blank
252 * Fixed: Firefox cuts off large diffs
259 * Fixed: Firefox cuts off large diffs
253 * Fixed: CVS browser should not show dead revisions (deleted files)
260 * Fixed: CVS browser should not show dead revisions (deleted files)
254 * Fixed: escape double-quotes in image titles
261 * Fixed: escape double-quotes in image titles
255 * Fixed: escape textarea content when editing a issue note
262 * Fixed: escape textarea content when editing a issue note
256 * Fixed: JS error on context menu with IE
263 * Fixed: JS error on context menu with IE
257 * Fixed: bold syntax around single character in series doesn't work
264 * Fixed: bold syntax around single character in series doesn't work
258 * Fixed several XSS vulnerabilities
265 * Fixed several XSS vulnerabilities
259 * Fixed a SQL injection vulnerability
266 * Fixed a SQL injection vulnerability
260
267
261
268
262 == 2008-12-07 v0.8.0-rc1
269 == 2008-12-07 v0.8.0-rc1
263
270
264 * Wiki page protection
271 * Wiki page protection
265 * Wiki page hierarchy. Parent page can be assigned on the Rename screen
272 * Wiki page hierarchy. Parent page can be assigned on the Rename screen
266 * Adds support for issue creation via email
273 * Adds support for issue creation via email
267 * Adds support for free ticket filtering and custom queries on Gantt chart and calendar
274 * Adds support for free ticket filtering and custom queries on Gantt chart and calendar
268 * Cross-project search
275 * Cross-project search
269 * Ability to search a project and its subprojects
276 * Ability to search a project and its subprojects
270 * Ability to search the projects the user belongs to
277 * Ability to search the projects the user belongs to
271 * Adds custom fields on time entries
278 * Adds custom fields on time entries
272 * Adds boolean and list custom fields for time entries as criteria on time report
279 * Adds boolean and list custom fields for time entries as criteria on time report
273 * Cross-project time reports
280 * Cross-project time reports
274 * Display latest user's activity on account/show view
281 * Display latest user's activity on account/show view
275 * Show last connexion time on user's page
282 * Show last connexion time on user's page
276 * Obfuscates email address on user's account page using javascript
283 * Obfuscates email address on user's account page using javascript
277 * wiki TOC rendered as an unordered list
284 * wiki TOC rendered as an unordered list
278 * Adds the ability to search for a user on the administration users list
285 * Adds the ability to search for a user on the administration users list
279 * Adds the ability to search for a project name or identifier on the administration projects list
286 * Adds the ability to search for a project name or identifier on the administration projects list
280 * Redirect user to the previous page after logging in
287 * Redirect user to the previous page after logging in
281 * Adds a permission 'view wiki edits' so that wiki history can be hidden to certain users
288 * Adds a permission 'view wiki edits' so that wiki history can be hidden to certain users
282 * Adds permissions for viewing the watcher list and adding new watchers on the issue detail view
289 * Adds permissions for viewing the watcher list and adding new watchers on the issue detail view
283 * Adds permissions to let users edit and/or delete their messages
290 * Adds permissions to let users edit and/or delete their messages
284 * Link to activity view when displaying dates
291 * Link to activity view when displaying dates
285 * Hide Redmine version in atom feeds and pdf properties
292 * Hide Redmine version in atom feeds and pdf properties
286 * Maps repository users to Redmine users. Users with same username or email are automatically mapped. Mapping can be manually adjusted in repository settings. Multiple usernames can be mapped to the same Redmine user.
293 * Maps repository users to Redmine users. Users with same username or email are automatically mapped. Mapping can be manually adjusted in repository settings. Multiple usernames can be mapped to the same Redmine user.
287 * Sort users by their display names so that user dropdown lists are sorted alphabetically
294 * Sort users by their display names so that user dropdown lists are sorted alphabetically
288 * Adds estimated hours to issue filters
295 * Adds estimated hours to issue filters
289 * Switch order of current and previous revisions in side-by-side diff
296 * Switch order of current and previous revisions in side-by-side diff
290 * Render the commit changes list as a tree
297 * Render the commit changes list as a tree
291 * Adds watch/unwatch functionality at forum topic level
298 * Adds watch/unwatch functionality at forum topic level
292 * When moving an issue to another project, reassign it to the category with same name if any
299 * When moving an issue to another project, reassign it to the category with same name if any
293 * Adds child_pages macro for wiki pages
300 * Adds child_pages macro for wiki pages
294 * Use GET instead of POST on roadmap (#718), gantt and calendar forms
301 * Use GET instead of POST on roadmap (#718), gantt and calendar forms
295 * Search engine: display total results count and count by result type
302 * Search engine: display total results count and count by result type
296 * Email delivery configuration moved to an unversioned YAML file (config/email.yml, see the sample file)
303 * Email delivery configuration moved to an unversioned YAML file (config/email.yml, see the sample file)
297 * Adds icons on search results
304 * Adds icons on search results
298 * Adds 'Edit' link on account/show for admin users
305 * Adds 'Edit' link on account/show for admin users
299 * Adds Lock/Unlock/Activate link on user edit screen
306 * Adds Lock/Unlock/Activate link on user edit screen
300 * Adds user count in status drop down on admin user list
307 * Adds user count in status drop down on admin user list
301 * Adds multi-levels blockquotes support by using > at the beginning of lines
308 * Adds multi-levels blockquotes support by using > at the beginning of lines
302 * Adds a Reply link to each issue note
309 * Adds a Reply link to each issue note
303 * Adds plain text only option for mail notifications
310 * Adds plain text only option for mail notifications
304 * Gravatar support for issue detail, user grid, and activity stream (disabled by default)
311 * Gravatar support for issue detail, user grid, and activity stream (disabled by default)
305 * Adds 'Delete wiki pages attachments' permission
312 * Adds 'Delete wiki pages attachments' permission
306 * Show the most recent file when displaying an inline image
313 * Show the most recent file when displaying an inline image
307 * Makes permission screens localized
314 * Makes permission screens localized
308 * AuthSource list: display associated users count and disable 'Delete' buton if any
315 * AuthSource list: display associated users count and disable 'Delete' buton if any
309 * Make the 'duplicates of' relation asymmetric
316 * Make the 'duplicates of' relation asymmetric
310 * Adds username to the password reminder email
317 * Adds username to the password reminder email
311 * Adds links to forum messages using message#id syntax
318 * Adds links to forum messages using message#id syntax
312 * Allow same name for custom fields on different object types
319 * Allow same name for custom fields on different object types
313 * One-click bulk edition using the issue list context menu within the same project
320 * One-click bulk edition using the issue list context menu within the same project
314 * Adds support for commit logs reencoding to UTF-8 before insertion in the database. Source encoding of commit logs can be selected in Application settings -> Repositories.
321 * Adds support for commit logs reencoding to UTF-8 before insertion in the database. Source encoding of commit logs can be selected in Application settings -> Repositories.
315 * Adds checkboxes toggle links on permissions report
322 * Adds checkboxes toggle links on permissions report
316 * Adds Trac-Like anchors on wiki headings
323 * Adds Trac-Like anchors on wiki headings
317 * Adds support for wiki links with anchor
324 * Adds support for wiki links with anchor
318 * Adds category to the issue context menu
325 * Adds category to the issue context menu
319 * Adds a workflow overview screen
326 * Adds a workflow overview screen
320 * Appends the filename to the attachment url so that clients that ignore content-disposition http header get the real filename
327 * Appends the filename to the attachment url so that clients that ignore content-disposition http header get the real filename
321 * Dots allowed in custom field name
328 * Dots allowed in custom field name
322 * Adds posts quoting functionality
329 * Adds posts quoting functionality
323 * Adds an option to generate sequential project identifiers
330 * Adds an option to generate sequential project identifiers
324 * Adds mailto link on the user administration list
331 * Adds mailto link on the user administration list
325 * Ability to remove enumerations (activities, priorities, document categories) that are in use. Associated objects can be reassigned to another value
332 * Ability to remove enumerations (activities, priorities, document categories) that are in use. Associated objects can be reassigned to another value
326 * Gantt chart: display issues that don't have a due date if they are assigned to a version with a date
333 * Gantt chart: display issues that don't have a due date if they are assigned to a version with a date
327 * Change projects homepage limit to 255 chars
334 * Change projects homepage limit to 255 chars
328 * Improved on-the-fly account creation. If some attributes are missing (eg. not present in the LDAP) or are invalid, the registration form is displayed so that the user is able to fill or fix these attributes
335 * Improved on-the-fly account creation. If some attributes are missing (eg. not present in the LDAP) or are invalid, the registration form is displayed so that the user is able to fill or fix these attributes
329 * Adds "please select" to activity select box if no activity is set as default
336 * Adds "please select" to activity select box if no activity is set as default
330 * Do not silently ignore timelog validation failure on issue edit
337 * Do not silently ignore timelog validation failure on issue edit
331 * Adds a rake task to send reminder emails
338 * Adds a rake task to send reminder emails
332 * Allow empty cells in wiki tables
339 * Allow empty cells in wiki tables
333 * Makes wiki text formatter pluggable
340 * Makes wiki text formatter pluggable
334 * Adds back textile acronyms support
341 * Adds back textile acronyms support
335 * Remove pre tag attributes
342 * Remove pre tag attributes
336 * Plugin hooks
343 * Plugin hooks
337 * Pluggable admin menu
344 * Pluggable admin menu
338 * Plugins can provide activity content
345 * Plugins can provide activity content
339 * Moves plugin list to its own administration menu item
346 * Moves plugin list to its own administration menu item
340 * Adds url and author_url plugin attributes
347 * Adds url and author_url plugin attributes
341 * Adds Plugin#requires_redmine method so that plugin compatibility can be checked against current Redmine version
348 * Adds Plugin#requires_redmine method so that plugin compatibility can be checked against current Redmine version
342 * Adds atom feed on time entries details
349 * Adds atom feed on time entries details
343 * Adds project name to issues feed title
350 * Adds project name to issues feed title
344 * Adds a css class on menu items in order to apply item specific styles (eg. icons)
351 * Adds a css class on menu items in order to apply item specific styles (eg. icons)
345 * Adds a Redmine plugin generators
352 * Adds a Redmine plugin generators
346 * Adds timelog link to the issue context menu
353 * Adds timelog link to the issue context menu
347 * Adds links to the user page on various views
354 * Adds links to the user page on various views
348 * Turkish translation by Ismail Sezen
355 * Turkish translation by Ismail Sezen
349 * Catalan translation
356 * Catalan translation
350 * Vietnamese translation
357 * Vietnamese translation
351 * Slovak translation
358 * Slovak translation
352 * Better naming of activity feed if only one kind of event is displayed
359 * Better naming of activity feed if only one kind of event is displayed
353 * Enable syntax highlight on issues, messages and news
360 * Enable syntax highlight on issues, messages and news
354 * Add target version to the issue list context menu
361 * Add target version to the issue list context menu
355 * Hide 'Target version' filter if no version is defined
362 * Hide 'Target version' filter if no version is defined
356 * Add filters on cross-project issue list for custom fields marked as 'For all projects'
363 * Add filters on cross-project issue list for custom fields marked as 'For all projects'
357 * Turn ftp urls into links
364 * Turn ftp urls into links
358 * Hiding the View Differences button when a wiki page's history only has one version
365 * Hiding the View Differences button when a wiki page's history only has one version
359 * Messages on a Board can now be sorted by the number of replies
366 * Messages on a Board can now be sorted by the number of replies
360 * Adds a class ('me') to events of the activity view created by current user
367 * Adds a class ('me') to events of the activity view created by current user
361 * Strip pre/code tags content from activity view events
368 * Strip pre/code tags content from activity view events
362 * Display issue notes in the activity view
369 * Display issue notes in the activity view
363 * Adds links to changesets atom feed on repository browser
370 * Adds links to changesets atom feed on repository browser
364 * Track project and tracker changes in issue history
371 * Track project and tracker changes in issue history
365 * Adds anchor to atom feed messages links
372 * Adds anchor to atom feed messages links
366 * Adds a key in lang files to set the decimal separator (point or comma) in csv exports
373 * Adds a key in lang files to set the decimal separator (point or comma) in csv exports
367 * Makes importer work with Trac 0.8.x
374 * Makes importer work with Trac 0.8.x
368 * Upgraded to Prototype 1.6.0.1
375 * Upgraded to Prototype 1.6.0.1
369 * File viewer for attached text files
376 * File viewer for attached text files
370 * Menu mapper: add support for :before, :after and :last options to #push method and add #delete method
377 * Menu mapper: add support for :before, :after and :last options to #push method and add #delete method
371 * Removed inconsistent revision numbers on diff view
378 * Removed inconsistent revision numbers on diff view
372 * CVS: add support for modules names with spaces
379 * CVS: add support for modules names with spaces
373 * Log the user in after registration if account activation is not needed
380 * Log the user in after registration if account activation is not needed
374 * Mercurial adapter improvements
381 * Mercurial adapter improvements
375 * Trac importer: read session_attribute table to find user's email and real name
382 * Trac importer: read session_attribute table to find user's email and real name
376 * Ability to disable unused SCM adapters in application settings
383 * Ability to disable unused SCM adapters in application settings
377 * Adds Filesystem adapter
384 * Adds Filesystem adapter
378 * Clear changesets and changes with raw sql when deleting a repository for performance
385 * Clear changesets and changes with raw sql when deleting a repository for performance
379 * Redmine.pm now uses the 'commit access' permission defined in Redmine
386 * Redmine.pm now uses the 'commit access' permission defined in Redmine
380 * Reposman can create any type of scm (--scm option)
387 * Reposman can create any type of scm (--scm option)
381 * Reposman creates a repository if the 'repository' module is enabled at project level only
388 * Reposman creates a repository if the 'repository' module is enabled at project level only
382 * Display svn properties in the browser, svn >= 1.5.0 only
389 * Display svn properties in the browser, svn >= 1.5.0 only
383 * Reduces memory usage when importing large git repositories
390 * Reduces memory usage when importing large git repositories
384 * Wider SVG graphs in repository stats
391 * Wider SVG graphs in repository stats
385 * SubversionAdapter#entries performance improvement
392 * SubversionAdapter#entries performance improvement
386 * SCM browser: ability to download raw unified diffs
393 * SCM browser: ability to download raw unified diffs
387 * More detailed error message in log when scm command fails
394 * More detailed error message in log when scm command fails
388 * Adds support for file viewing with Darcs 2.0+
395 * Adds support for file viewing with Darcs 2.0+
389 * Check that git changeset is not in the database before creating it
396 * Check that git changeset is not in the database before creating it
390 * Unified diff viewer for attached files with .patch or .diff extension
397 * Unified diff viewer for attached files with .patch or .diff extension
391 * File size display with Bazaar repositories
398 * File size display with Bazaar repositories
392 * Git adapter: use commit time instead of author time
399 * Git adapter: use commit time instead of author time
393 * Prettier url for changesets
400 * Prettier url for changesets
394 * Makes changes link to entries on the revision view
401 * Makes changes link to entries on the revision view
395 * Adds a field on the repository view to browse at specific revision
402 * Adds a field on the repository view to browse at specific revision
396 * Adds new projects atom feed
403 * Adds new projects atom feed
397 * Added rake tasks to generate rcov code coverage reports
404 * Added rake tasks to generate rcov code coverage reports
398 * Add Redcloth's :block_markdown_rule to allow horizontal rules in wiki
405 * Add Redcloth's :block_markdown_rule to allow horizontal rules in wiki
399 * Show the project hierarchy in the drop down list for new membership on user administration screen
406 * Show the project hierarchy in the drop down list for new membership on user administration screen
400 * Split user edit screen into tabs
407 * Split user edit screen into tabs
401 * Renames bundled RedCloth to RedCloth3 to avoid RedCloth 4 to be loaded instead
408 * Renames bundled RedCloth to RedCloth3 to avoid RedCloth 4 to be loaded instead
402 * Fixed: Roadmap crashes when a version has a due date > 2037
409 * Fixed: Roadmap crashes when a version has a due date > 2037
403 * Fixed: invalid effective date (eg. 99999-01-01) causes an error on version edition screen
410 * Fixed: invalid effective date (eg. 99999-01-01) causes an error on version edition screen
404 * Fixed: login filter providing incorrect back_url for Redmine installed in sub-directory
411 * Fixed: login filter providing incorrect back_url for Redmine installed in sub-directory
405 * Fixed: logtime entry duplicated when edited from parent project
412 * Fixed: logtime entry duplicated when edited from parent project
406 * Fixed: wrong digest for text files under Windows
413 * Fixed: wrong digest for text files under Windows
407 * Fixed: associated revisions are displayed in wrong order on issue view
414 * Fixed: associated revisions are displayed in wrong order on issue view
408 * Fixed: Git Adapter date parsing ignores timezone
415 * Fixed: Git Adapter date parsing ignores timezone
409 * Fixed: Printing long roadmap doesn't split across pages
416 * Fixed: Printing long roadmap doesn't split across pages
410 * Fixes custom fields display order at several places
417 * Fixes custom fields display order at several places
411 * Fixed: urls containing @ are parsed as email adress by the wiki formatter
418 * Fixed: urls containing @ are parsed as email adress by the wiki formatter
412 * Fixed date filters accuracy with SQLite
419 * Fixed date filters accuracy with SQLite
413 * Fixed: tokens not escaped in highlight_tokens regexp
420 * Fixed: tokens not escaped in highlight_tokens regexp
414 * Fixed Bazaar shared repository browsing
421 * Fixed Bazaar shared repository browsing
415 * Fixes platform determination under JRuby
422 * Fixes platform determination under JRuby
416 * Fixed: Estimated time in issue's journal should be rounded to two decimals
423 * Fixed: Estimated time in issue's journal should be rounded to two decimals
417 * Fixed: 'search titles only' box ignored after one search is done on titles only
424 * Fixed: 'search titles only' box ignored after one search is done on titles only
418 * Fixed: non-ASCII subversion path can't be displayed
425 * Fixed: non-ASCII subversion path can't be displayed
419 * Fixed: Inline images don't work if file name has upper case letters or if image is in BMP format
426 * Fixed: Inline images don't work if file name has upper case letters or if image is in BMP format
420 * Fixed: document listing shows on "my page" when viewing documents is disabled for the role
427 * Fixed: document listing shows on "my page" when viewing documents is disabled for the role
421 * Fixed: Latest news appear on the homepage for projects with the News module disabled
428 * Fixed: Latest news appear on the homepage for projects with the News module disabled
422 * Fixed: cross-project issue list should not show issues of projects for which the issue tracking module was disabled
429 * Fixed: cross-project issue list should not show issues of projects for which the issue tracking module was disabled
423 * Fixed: the default status is lost when reordering issue statuses
430 * Fixed: the default status is lost when reordering issue statuses
424 * Fixes error with Postgresql and non-UTF8 commit logs
431 * Fixes error with Postgresql and non-UTF8 commit logs
425 * Fixed: textile footnotes no longer work
432 * Fixed: textile footnotes no longer work
426 * Fixed: http links containing parentheses fail to reder correctly
433 * Fixed: http links containing parentheses fail to reder correctly
427 * Fixed: GitAdapter#get_rev should use current branch instead of hardwiring master
434 * Fixed: GitAdapter#get_rev should use current branch instead of hardwiring master
428
435
429
436
430 == 2008-07-06 v0.7.3
437 == 2008-07-06 v0.7.3
431
438
432 * Allow dot in firstnames and lastnames
439 * Allow dot in firstnames and lastnames
433 * Add project name to cross-project Atom feeds
440 * Add project name to cross-project Atom feeds
434 * Encoding set to utf8 in example database.yml
441 * Encoding set to utf8 in example database.yml
435 * HTML titles on forums related views
442 * HTML titles on forums related views
436 * Fixed: various XSS vulnerabilities
443 * Fixed: various XSS vulnerabilities
437 * Fixed: Entourage (and some old client) fails to correctly render notification styles
444 * Fixed: Entourage (and some old client) fails to correctly render notification styles
438 * Fixed: Fixed: timelog redirects inappropriately when :back_url is blank
445 * Fixed: Fixed: timelog redirects inappropriately when :back_url is blank
439 * Fixed: wrong relative paths to images in wiki_syntax.html
446 * Fixed: wrong relative paths to images in wiki_syntax.html
440
447
441
448
442 == 2008-06-15 v0.7.2
449 == 2008-06-15 v0.7.2
443
450
444 * "New Project" link on Projects page
451 * "New Project" link on Projects page
445 * Links to repository directories on the repo browser
452 * Links to repository directories on the repo browser
446 * Move status to front in Activity View
453 * Move status to front in Activity View
447 * Remove edit step from Status context menu
454 * Remove edit step from Status context menu
448 * Fixed: No way to do textile horizontal rule
455 * Fixed: No way to do textile horizontal rule
449 * Fixed: Repository: View differences doesn't work
456 * Fixed: Repository: View differences doesn't work
450 * Fixed: attachement's name maybe invalid.
457 * Fixed: attachement's name maybe invalid.
451 * Fixed: Error when creating a new issue
458 * Fixed: Error when creating a new issue
452 * Fixed: NoMethodError on @available_filters.has_key?
459 * Fixed: NoMethodError on @available_filters.has_key?
453 * Fixed: Check All / Uncheck All in Email Settings
460 * Fixed: Check All / Uncheck All in Email Settings
454 * Fixed: "View differences" of one file at /repositories/revision/ fails
461 * Fixed: "View differences" of one file at /repositories/revision/ fails
455 * Fixed: Column width in "my page"
462 * Fixed: Column width in "my page"
456 * Fixed: private subprojects are listed on Issues view
463 * Fixed: private subprojects are listed on Issues view
457 * Fixed: Textile: bold, italics, underline, etc... not working after parentheses
464 * Fixed: Textile: bold, italics, underline, etc... not working after parentheses
458 * Fixed: Update issue form: comment field from log time end out of screen
465 * Fixed: Update issue form: comment field from log time end out of screen
459 * Fixed: Editing role: "issue can be assigned to this role" out of box
466 * Fixed: Editing role: "issue can be assigned to this role" out of box
460 * Fixed: Unable use angular braces after include word
467 * Fixed: Unable use angular braces after include word
461 * Fixed: Using '*' as keyword for repository referencing keywords doesn't work
468 * Fixed: Using '*' as keyword for repository referencing keywords doesn't work
462 * Fixed: Subversion repository "View differences" on each file rise ERROR
469 * Fixed: Subversion repository "View differences" on each file rise ERROR
463 * Fixed: View differences for individual file of a changeset fails if the repository URL doesn't point to the repository root
470 * Fixed: View differences for individual file of a changeset fails if the repository URL doesn't point to the repository root
464 * Fixed: It is possible to lock out the last admin account
471 * Fixed: It is possible to lock out the last admin account
465 * Fixed: Wikis are viewable for anonymous users on public projects, despite not granting access
472 * Fixed: Wikis are viewable for anonymous users on public projects, despite not granting access
466 * Fixed: Issue number display clipped on 'my issues'
473 * Fixed: Issue number display clipped on 'my issues'
467 * Fixed: Roadmap version list links not carrying state
474 * Fixed: Roadmap version list links not carrying state
468 * Fixed: Log Time fieldset in IssueController#edit doesn't set default Activity as default
475 * Fixed: Log Time fieldset in IssueController#edit doesn't set default Activity as default
469 * Fixed: git's "get_rev" API should use repo's current branch instead of hardwiring "master"
476 * Fixed: git's "get_rev" API should use repo's current branch instead of hardwiring "master"
470 * Fixed: browser's language subcodes ignored
477 * Fixed: browser's language subcodes ignored
471 * Fixed: Error on project selection with numeric (only) identifier.
478 * Fixed: Error on project selection with numeric (only) identifier.
472 * Fixed: Link to PDF doesn't work after creating new issue
479 * Fixed: Link to PDF doesn't work after creating new issue
473 * Fixed: "Replies" should not be shown on forum threads that are locked
480 * Fixed: "Replies" should not be shown on forum threads that are locked
474 * Fixed: SVN errors lead to svn username/password being displayed to end users (security issue)
481 * Fixed: SVN errors lead to svn username/password being displayed to end users (security issue)
475 * Fixed: http links containing hashes don't display correct
482 * Fixed: http links containing hashes don't display correct
476 * Fixed: Allow ampersands in Enumeration names
483 * Fixed: Allow ampersands in Enumeration names
477 * Fixed: Atom link on saved query does not include query_id
484 * Fixed: Atom link on saved query does not include query_id
478 * Fixed: Logtime info lost when there's an error updating an issue
485 * Fixed: Logtime info lost when there's an error updating an issue
479 * Fixed: TOC does not parse colorization markups
486 * Fixed: TOC does not parse colorization markups
480 * Fixed: CVS: add support for modules names with spaces
487 * Fixed: CVS: add support for modules names with spaces
481 * Fixed: Bad rendering on projects/add
488 * Fixed: Bad rendering on projects/add
482 * Fixed: exception when viewing differences on cvs
489 * Fixed: exception when viewing differences on cvs
483 * Fixed: export issue to pdf will messup when use Chinese language
490 * Fixed: export issue to pdf will messup when use Chinese language
484 * Fixed: Redmine::Scm::Adapters::GitAdapter#get_rev ignored GIT_BIN constant
491 * Fixed: Redmine::Scm::Adapters::GitAdapter#get_rev ignored GIT_BIN constant
485 * Fixed: Adding non-ASCII new issue type in the New Issue page have encoding error using IE
492 * Fixed: Adding non-ASCII new issue type in the New Issue page have encoding error using IE
486 * Fixed: Importing from trac : some wiki links are messed
493 * Fixed: Importing from trac : some wiki links are messed
487 * Fixed: Incorrect weekend definition in Hebrew calendar locale
494 * Fixed: Incorrect weekend definition in Hebrew calendar locale
488 * Fixed: Atom feeds don't provide author section for repository revisions
495 * Fixed: Atom feeds don't provide author section for repository revisions
489 * Fixed: In Activity views, changesets titles can be multiline while they should not
496 * Fixed: In Activity views, changesets titles can be multiline while they should not
490 * Fixed: Ignore unreadable subversion directories (read disabled using authz)
497 * Fixed: Ignore unreadable subversion directories (read disabled using authz)
491 * Fixed: lib/SVG/Graph/Graph.rb can't externalize stylesheets
498 * Fixed: lib/SVG/Graph/Graph.rb can't externalize stylesheets
492 * Fixed: Close statement handler in Redmine.pm
499 * Fixed: Close statement handler in Redmine.pm
493
500
494
501
495 == 2008-05-04 v0.7.1
502 == 2008-05-04 v0.7.1
496
503
497 * Thai translation added (Gampol Thitinilnithi)
504 * Thai translation added (Gampol Thitinilnithi)
498 * Translations updates
505 * Translations updates
499 * Escape HTML comment tags
506 * Escape HTML comment tags
500 * Prevent "can't convert nil into String" error when :sort_order param is not present
507 * Prevent "can't convert nil into String" error when :sort_order param is not present
501 * Fixed: Updating tickets add a time log with zero hours
508 * Fixed: Updating tickets add a time log with zero hours
502 * Fixed: private subprojects names are revealed on the project overview
509 * Fixed: private subprojects names are revealed on the project overview
503 * Fixed: Search for target version of "none" fails with postgres 8.3
510 * Fixed: Search for target version of "none" fails with postgres 8.3
504 * Fixed: Home, Logout, Login links shouldn't be absolute links
511 * Fixed: Home, Logout, Login links shouldn't be absolute links
505 * Fixed: 'Latest projects' box on the welcome screen should be hidden if there are no projects
512 * Fixed: 'Latest projects' box on the welcome screen should be hidden if there are no projects
506 * Fixed: error when using upcase language name in coderay
513 * Fixed: error when using upcase language name in coderay
507 * Fixed: error on Trac import when :due attribute is nil
514 * Fixed: error on Trac import when :due attribute is nil
508
515
509
516
510 == 2008-04-28 v0.7.0
517 == 2008-04-28 v0.7.0
511
518
512 * Forces Redmine to use rails 2.0.2 gem when vendor/rails is not present
519 * Forces Redmine to use rails 2.0.2 gem when vendor/rails is not present
513 * Queries can be marked as 'For all projects'. Such queries will be available on all projects and on the global issue list.
520 * Queries can be marked as 'For all projects'. Such queries will be available on all projects and on the global issue list.
514 * Add predefined date ranges to the time report
521 * Add predefined date ranges to the time report
515 * Time report can be done at issue level
522 * Time report can be done at issue level
516 * Various timelog report enhancements
523 * Various timelog report enhancements
517 * Accept the following formats for "hours" field: 1h, 1 h, 1 hour, 2 hours, 30m, 30min, 1h30, 1h30m, 1:30
524 * Accept the following formats for "hours" field: 1h, 1 h, 1 hour, 2 hours, 30m, 30min, 1h30, 1h30m, 1:30
518 * Display the context menu above and/or to the left of the click if needed
525 * Display the context menu above and/or to the left of the click if needed
519 * Make the admin project files list sortable
526 * Make the admin project files list sortable
520 * Mercurial: display working directory files sizes unless browsing a specific revision
527 * Mercurial: display working directory files sizes unless browsing a specific revision
521 * Preserve status filter and page number when using lock/unlock/activate links on the users list
528 * Preserve status filter and page number when using lock/unlock/activate links on the users list
522 * Redmine.pm support for LDAP authentication
529 * Redmine.pm support for LDAP authentication
523 * Better error message and AR errors in log for failed LDAP on-the-fly user creation
530 * Better error message and AR errors in log for failed LDAP on-the-fly user creation
524 * Redirected user to where he is coming from after logging hours
531 * Redirected user to where he is coming from after logging hours
525 * Warn user that subprojects are also deleted when deleting a project
532 * Warn user that subprojects are also deleted when deleting a project
526 * Include subprojects versions on calendar and gantt
533 * Include subprojects versions on calendar and gantt
527 * Notify project members when a message is posted if they want to receive notifications
534 * Notify project members when a message is posted if they want to receive notifications
528 * Fixed: Feed content limit setting has no effect
535 * Fixed: Feed content limit setting has no effect
529 * Fixed: Priorities not ordered when displayed as a filter in issue list
536 * Fixed: Priorities not ordered when displayed as a filter in issue list
530 * Fixed: can not display attached images inline in message replies
537 * Fixed: can not display attached images inline in message replies
531 * Fixed: Boards are not deleted when project is deleted
538 * Fixed: Boards are not deleted when project is deleted
532 * Fixed: trying to preview a new issue raises an exception with postgresql
539 * Fixed: trying to preview a new issue raises an exception with postgresql
533 * Fixed: single file 'View difference' links do not work because of duplicate slashes in url
540 * Fixed: single file 'View difference' links do not work because of duplicate slashes in url
534 * Fixed: inline image not displayed when including a wiki page
541 * Fixed: inline image not displayed when including a wiki page
535 * Fixed: CVS duplicate key violation
542 * Fixed: CVS duplicate key violation
536 * Fixed: ActiveRecord::StaleObjectError exception on closing a set of circular duplicate issues
543 * Fixed: ActiveRecord::StaleObjectError exception on closing a set of circular duplicate issues
537 * Fixed: custom field filters behaviour
544 * Fixed: custom field filters behaviour
538 * Fixed: Postgresql 8.3 compatibility
545 * Fixed: Postgresql 8.3 compatibility
539 * Fixed: Links to repository directories don't work
546 * Fixed: Links to repository directories don't work
540
547
541
548
542 == 2008-03-29 v0.7.0-rc1
549 == 2008-03-29 v0.7.0-rc1
543
550
544 * Overall activity view and feed added, link is available on the project list
551 * Overall activity view and feed added, link is available on the project list
545 * Git VCS support
552 * Git VCS support
546 * Rails 2.0 sessions cookie store compatibility
553 * Rails 2.0 sessions cookie store compatibility
547 * Use project identifiers in urls instead of ids
554 * Use project identifiers in urls instead of ids
548 * Default configuration data can now be loaded from the administration screen
555 * Default configuration data can now be loaded from the administration screen
549 * Administration settings screen split to tabs (email notifications options moved to 'Settings')
556 * Administration settings screen split to tabs (email notifications options moved to 'Settings')
550 * Project description is now unlimited and optional
557 * Project description is now unlimited and optional
551 * Wiki annotate view
558 * Wiki annotate view
552 * Escape HTML tag in textile content
559 * Escape HTML tag in textile content
553 * Add Redmine links to documents, versions, attachments and repository files
560 * Add Redmine links to documents, versions, attachments and repository files
554 * New setting to specify how many objects should be displayed on paginated lists. There are 2 ways to select a set of issues on the issue list:
561 * New setting to specify how many objects should be displayed on paginated lists. There are 2 ways to select a set of issues on the issue list:
555 * by using checkbox and/or the little pencil that will select/unselect all issues
562 * by using checkbox and/or the little pencil that will select/unselect all issues
556 * by clicking on the rows (but not on the links), Ctrl and Shift keys can be used to select multiple issues
563 * by clicking on the rows (but not on the links), Ctrl and Shift keys can be used to select multiple issues
557 * Context menu disabled on links so that the default context menu of the browser is displayed when right-clicking on a link (click anywhere else on the row to display the context menu)
564 * Context menu disabled on links so that the default context menu of the browser is displayed when right-clicking on a link (click anywhere else on the row to display the context menu)
558 * User display format is now configurable in administration settings
565 * User display format is now configurable in administration settings
559 * Issue list now supports bulk edit/move/delete (for a set of issues that belong to the same project)
566 * Issue list now supports bulk edit/move/delete (for a set of issues that belong to the same project)
560 * Merged 'change status', 'edit issue' and 'add note' actions:
567 * Merged 'change status', 'edit issue' and 'add note' actions:
561 * Users with 'edit issues' permission can now update any property including custom fields when adding a note or changing the status
568 * Users with 'edit issues' permission can now update any property including custom fields when adding a note or changing the status
562 * 'Change issue status' permission removed. To change an issue status, a user just needs to have either 'Edit' or 'Add note' permissions and some workflow transitions allowed
569 * 'Change issue status' permission removed. To change an issue status, a user just needs to have either 'Edit' or 'Add note' permissions and some workflow transitions allowed
563 * Details by assignees on issue summary view
570 * Details by assignees on issue summary view
564 * 'New issue' link in the main menu (accesskey 7). The drop-down lists to add an issue on the project overview and the issue list are removed
571 * 'New issue' link in the main menu (accesskey 7). The drop-down lists to add an issue on the project overview and the issue list are removed
565 * Change status select box default to current status
572 * Change status select box default to current status
566 * Preview for issue notes, news and messages
573 * Preview for issue notes, news and messages
567 * Optional description for attachments
574 * Optional description for attachments
568 * 'Fixed version' label changed to 'Target version'
575 * 'Fixed version' label changed to 'Target version'
569 * Let the user choose when deleting issues with reported hours to:
576 * Let the user choose when deleting issues with reported hours to:
570 * delete the hours
577 * delete the hours
571 * assign the hours to the project
578 * assign the hours to the project
572 * reassign the hours to another issue
579 * reassign the hours to another issue
573 * Date range filter and pagination on time entries detail view
580 * Date range filter and pagination on time entries detail view
574 * Propagate time tracking to the parent project
581 * Propagate time tracking to the parent project
575 * Switch added on the project activity view to include subprojects
582 * Switch added on the project activity view to include subprojects
576 * Display total estimated and spent hours on the version detail view
583 * Display total estimated and spent hours on the version detail view
577 * Weekly time tracking block for 'My page'
584 * Weekly time tracking block for 'My page'
578 * Permissions to edit time entries
585 * Permissions to edit time entries
579 * Include subprojects on the issue list, calendar, gantt and timelog by default (can be turned off is administration settings)
586 * Include subprojects on the issue list, calendar, gantt and timelog by default (can be turned off is administration settings)
580 * Roadmap enhancements (separate related issues from wiki contents, leading h1 in version wiki pages is hidden, smaller wiki headings)
587 * Roadmap enhancements (separate related issues from wiki contents, leading h1 in version wiki pages is hidden, smaller wiki headings)
581 * Make versions with same date sorted by name
588 * Make versions with same date sorted by name
582 * Allow issue list to be sorted by target version
589 * Allow issue list to be sorted by target version
583 * Related changesets messages displayed on the issue details view
590 * Related changesets messages displayed on the issue details view
584 * Create a journal and send an email when an issue is closed by commit
591 * Create a journal and send an email when an issue is closed by commit
585 * Add 'Author' to the available columns for the issue list
592 * Add 'Author' to the available columns for the issue list
586 * More appropriate default sort order on sortable columns
593 * More appropriate default sort order on sortable columns
587 * Add issue subject to the time entries view and issue subject, description and tracker to the csv export
594 * Add issue subject to the time entries view and issue subject, description and tracker to the csv export
588 * Permissions to edit issue notes
595 * Permissions to edit issue notes
589 * Display date/time instead of date on files list
596 * Display date/time instead of date on files list
590 * Do not show Roadmap menu item if the project doesn't define any versions
597 * Do not show Roadmap menu item if the project doesn't define any versions
591 * Allow longer version names (60 chars)
598 * Allow longer version names (60 chars)
592 * Ability to copy an existing workflow when creating a new role
599 * Ability to copy an existing workflow when creating a new role
593 * Display custom fields in two columns on the issue form
600 * Display custom fields in two columns on the issue form
594 * Added 'estimated time' in the csv export of the issue list
601 * Added 'estimated time' in the csv export of the issue list
595 * Display the last 30 days on the activity view rather than the current month (number of days can be configured in the application settings)
602 * Display the last 30 days on the activity view rather than the current month (number of days can be configured in the application settings)
596 * Setting for whether new projects should be public by default
603 * Setting for whether new projects should be public by default
597 * User preference to choose how comments/replies are displayed: in chronological or reverse chronological order
604 * User preference to choose how comments/replies are displayed: in chronological or reverse chronological order
598 * Added default value for custom fields
605 * Added default value for custom fields
599 * Added tabindex property on wiki toolbar buttons (to easily move from field to field using the tab key)
606 * Added tabindex property on wiki toolbar buttons (to easily move from field to field using the tab key)
600 * Redirect to issue page after creating a new issue
607 * Redirect to issue page after creating a new issue
601 * Wiki toolbar improvements (mainly for Firefox)
608 * Wiki toolbar improvements (mainly for Firefox)
602 * Display wiki syntax quick ref link on all wiki textareas
609 * Display wiki syntax quick ref link on all wiki textareas
603 * Display links to Atom feeds
610 * Display links to Atom feeds
604 * Breadcrumb nav for the forums
611 * Breadcrumb nav for the forums
605 * Show replies when choosing to display messages in the activity
612 * Show replies when choosing to display messages in the activity
606 * Added 'include' macro to include another wiki page
613 * Added 'include' macro to include another wiki page
607 * RedmineWikiFormatting page available as a static HTML file locally
614 * RedmineWikiFormatting page available as a static HTML file locally
608 * Wrap diff content
615 * Wrap diff content
609 * Strip out email address from authors in repository screens
616 * Strip out email address from authors in repository screens
610 * Highlight the current item of the main menu
617 * Highlight the current item of the main menu
611 * Added simple syntax highlighters for php and java languages
618 * Added simple syntax highlighters for php and java languages
612 * Do not show empty diffs
619 * Do not show empty diffs
613 * Show explicit error message when the scm command failed (eg. when svn binary is not available)
620 * Show explicit error message when the scm command failed (eg. when svn binary is not available)
614 * Lithuanian translation added (Sergej Jegorov)
621 * Lithuanian translation added (Sergej Jegorov)
615 * Ukrainan translation added (Natalia Konovka & Mykhaylo Sorochan)
622 * Ukrainan translation added (Natalia Konovka & Mykhaylo Sorochan)
616 * Danish translation added (Mads Vestergaard)
623 * Danish translation added (Mads Vestergaard)
617 * Added i18n support to the jstoolbar and various settings screen
624 * Added i18n support to the jstoolbar and various settings screen
618 * RedCloth's glyphs no longer user
625 * RedCloth's glyphs no longer user
619 * New icons for the wiki toolbar (from http://www.famfamfam.com/lab/icons/silk/)
626 * New icons for the wiki toolbar (from http://www.famfamfam.com/lab/icons/silk/)
620 * The following menus can now be extended by plugins: top_menu, account_menu, application_menu
627 * The following menus can now be extended by plugins: top_menu, account_menu, application_menu
621 * Added a simple rake task to fetch changesets from the repositories: rake redmine:fetch_changesets
628 * Added a simple rake task to fetch changesets from the repositories: rake redmine:fetch_changesets
622 * Remove hardcoded "Redmine" strings in account related emails and use application title instead
629 * Remove hardcoded "Redmine" strings in account related emails and use application title instead
623 * Mantis importer preserve bug ids
630 * Mantis importer preserve bug ids
624 * Trac importer: Trac guide wiki pages skipped
631 * Trac importer: Trac guide wiki pages skipped
625 * Trac importer: wiki attachments migration added
632 * Trac importer: wiki attachments migration added
626 * Trac importer: support database schema for Trac migration
633 * Trac importer: support database schema for Trac migration
627 * Trac importer: support CamelCase links
634 * Trac importer: support CamelCase links
628 * Removes the Redmine version from the footer (can be viewed on admin -> info)
635 * Removes the Redmine version from the footer (can be viewed on admin -> info)
629 * Rescue and display an error message when trying to delete a role that is in use
636 * Rescue and display an error message when trying to delete a role that is in use
630 * Add various 'X-Redmine' headers to email notifications: X-Redmine-Host, X-Redmine-Site, X-Redmine-Project, X-Redmine-Issue-Id, -Author, -Assignee, X-Redmine-Topic-Id
637 * Add various 'X-Redmine' headers to email notifications: X-Redmine-Host, X-Redmine-Site, X-Redmine-Project, X-Redmine-Issue-Id, -Author, -Assignee, X-Redmine-Topic-Id
631 * Add "--encoding utf8" option to the Mercurial "hg log" command in order to get utf8 encoded commit logs
638 * Add "--encoding utf8" option to the Mercurial "hg log" command in order to get utf8 encoded commit logs
632 * Fixed: Gantt and calendar not properly refreshed (fragment caching removed)
639 * Fixed: Gantt and calendar not properly refreshed (fragment caching removed)
633 * Fixed: Textile image with style attribute cause internal server error
640 * Fixed: Textile image with style attribute cause internal server error
634 * Fixed: wiki TOC not rendered properly when used in an issue or document description
641 * Fixed: wiki TOC not rendered properly when used in an issue or document description
635 * Fixed: 'has already been taken' error message on username and email fields if left empty
642 * Fixed: 'has already been taken' error message on username and email fields if left empty
636 * Fixed: non-ascii attachement filename with IE
643 * Fixed: non-ascii attachement filename with IE
637 * Fixed: wrong url for wiki syntax pop-up when Redmine urls are prefixed
644 * Fixed: wrong url for wiki syntax pop-up when Redmine urls are prefixed
638 * Fixed: search for all words doesn't work
645 * Fixed: search for all words doesn't work
639 * Fixed: Do not show sticky and locked checkboxes when replying to a message
646 * Fixed: Do not show sticky and locked checkboxes when replying to a message
640 * Fixed: Mantis importer: do not duplicate Mantis username in firstname and lastname if realname is blank
647 * Fixed: Mantis importer: do not duplicate Mantis username in firstname and lastname if realname is blank
641 * Fixed: Date custom fields not displayed as specified in application settings
648 * Fixed: Date custom fields not displayed as specified in application settings
642 * Fixed: titles not escaped in the activity view
649 * Fixed: titles not escaped in the activity view
643 * Fixed: issue queries can not use custom fields marked as 'for all projects' in a project context
650 * Fixed: issue queries can not use custom fields marked as 'for all projects' in a project context
644 * Fixed: on calendar, gantt and in the tracker filter on the issue list, only active trackers of the project (and its sub projects) should be available
651 * Fixed: on calendar, gantt and in the tracker filter on the issue list, only active trackers of the project (and its sub projects) should be available
645 * Fixed: locked users should not receive email notifications
652 * Fixed: locked users should not receive email notifications
646 * Fixed: custom field selection is not saved when unchecking them all on project settings
653 * Fixed: custom field selection is not saved when unchecking them all on project settings
647 * Fixed: can not lock a topic when creating it
654 * Fixed: can not lock a topic when creating it
648 * Fixed: Incorrect filtering for unset values when using 'is not' filter
655 * Fixed: Incorrect filtering for unset values when using 'is not' filter
649 * Fixed: PostgreSQL issues_seq_id not updated when using Trac importer
656 * Fixed: PostgreSQL issues_seq_id not updated when using Trac importer
650 * Fixed: ajax pagination does not scroll up
657 * Fixed: ajax pagination does not scroll up
651 * Fixed: error when uploading a file with no content-type specified by the browser
658 * Fixed: error when uploading a file with no content-type specified by the browser
652 * Fixed: wiki and changeset links not displayed when previewing issue description or notes
659 * Fixed: wiki and changeset links not displayed when previewing issue description or notes
653 * Fixed: 'LdapError: no bind result' error when authenticating
660 * Fixed: 'LdapError: no bind result' error when authenticating
654 * Fixed: 'LdapError: invalid binding information' when no username/password are set on the LDAP account
661 * Fixed: 'LdapError: invalid binding information' when no username/password are set on the LDAP account
655 * Fixed: CVS repository doesn't work if port is used in the url
662 * Fixed: CVS repository doesn't work if port is used in the url
656 * Fixed: Email notifications: host name is missing in generated links
663 * Fixed: Email notifications: host name is missing in generated links
657 * Fixed: Email notifications: referenced changesets, wiki pages, attachments... are not turned into links
664 * Fixed: Email notifications: referenced changesets, wiki pages, attachments... are not turned into links
658 * Fixed: Do not clear issue relations when moving an issue to another project if cross-project issue relations are allowed
665 * Fixed: Do not clear issue relations when moving an issue to another project if cross-project issue relations are allowed
659 * Fixed: "undefined method 'textilizable'" error on email notification when running Repository#fetch_changesets from the console
666 * Fixed: "undefined method 'textilizable'" error on email notification when running Repository#fetch_changesets from the console
660 * Fixed: Do not send an email with no recipient, cc or bcc
667 * Fixed: Do not send an email with no recipient, cc or bcc
661 * Fixed: fetch_changesets fails on commit comments that close 2 duplicates issues.
668 * Fixed: fetch_changesets fails on commit comments that close 2 duplicates issues.
662 * Fixed: Mercurial browsing under unix-like os and for directory depth > 2
669 * Fixed: Mercurial browsing under unix-like os and for directory depth > 2
663 * Fixed: Wiki links with pipe can not be used in wiki tables
670 * Fixed: Wiki links with pipe can not be used in wiki tables
664 * Fixed: migrate_from_trac doesn't import timestamps of wiki and tickets
671 * Fixed: migrate_from_trac doesn't import timestamps of wiki and tickets
665 * Fixed: when bulk editing, setting "Assigned to" to "nobody" causes an sql error with Postgresql
672 * Fixed: when bulk editing, setting "Assigned to" to "nobody" causes an sql error with Postgresql
666
673
667
674
668 == 2008-03-12 v0.6.4
675 == 2008-03-12 v0.6.4
669
676
670 * Fixed: private projects name are displayed on account/show even if the current user doesn't have access to these private projects
677 * Fixed: private projects name are displayed on account/show even if the current user doesn't have access to these private projects
671 * Fixed: potential LDAP authentication security flaw
678 * Fixed: potential LDAP authentication security flaw
672 * Fixed: context submenus on the issue list don't show up with IE6.
679 * Fixed: context submenus on the issue list don't show up with IE6.
673 * Fixed: Themes are not applied with Rails 2.0
680 * Fixed: Themes are not applied with Rails 2.0
674 * Fixed: crash when fetching Mercurial changesets if changeset[:files] is nil
681 * Fixed: crash when fetching Mercurial changesets if changeset[:files] is nil
675 * Fixed: Mercurial repository browsing
682 * Fixed: Mercurial repository browsing
676 * Fixed: undefined local variable or method 'log' in CvsAdapter when a cvs command fails
683 * Fixed: undefined local variable or method 'log' in CvsAdapter when a cvs command fails
677 * Fixed: not null constraints not removed with Postgresql
684 * Fixed: not null constraints not removed with Postgresql
678 * Doctype set to transitional
685 * Doctype set to transitional
679
686
680
687
681 == 2007-12-18 v0.6.3
688 == 2007-12-18 v0.6.3
682
689
683 * Fixed: upload doesn't work in 'Files' section
690 * Fixed: upload doesn't work in 'Files' section
684
691
685
692
686 == 2007-12-16 v0.6.2
693 == 2007-12-16 v0.6.2
687
694
688 * Search engine: issue custom fields can now be searched
695 * Search engine: issue custom fields can now be searched
689 * News comments are now textilized
696 * News comments are now textilized
690 * Updated Japanese translation (Satoru Kurashiki)
697 * Updated Japanese translation (Satoru Kurashiki)
691 * Updated Chinese translation (Shortie Lo)
698 * Updated Chinese translation (Shortie Lo)
692 * Fixed Rails 2.0 compatibility bugs:
699 * Fixed Rails 2.0 compatibility bugs:
693 * Unable to create a wiki
700 * Unable to create a wiki
694 * Gantt and calendar error
701 * Gantt and calendar error
695 * Trac importer error (readonly? is defined by ActiveRecord)
702 * Trac importer error (readonly? is defined by ActiveRecord)
696 * Fixed: 'assigned to me' filter broken
703 * Fixed: 'assigned to me' filter broken
697 * Fixed: crash when validation fails on issue edition with no custom fields
704 * Fixed: crash when validation fails on issue edition with no custom fields
698 * Fixed: reposman "can't find group" error
705 * Fixed: reposman "can't find group" error
699 * Fixed: 'LDAP account password is too long' error when leaving the field empty on creation
706 * Fixed: 'LDAP account password is too long' error when leaving the field empty on creation
700 * Fixed: empty lines when displaying repository files with Windows style eol
707 * Fixed: empty lines when displaying repository files with Windows style eol
701 * Fixed: missing body closing tag in repository annotate and entry views
708 * Fixed: missing body closing tag in repository annotate and entry views
702
709
703
710
704 == 2007-12-10 v0.6.1
711 == 2007-12-10 v0.6.1
705
712
706 * Rails 2.0 compatibility
713 * Rails 2.0 compatibility
707 * Custom fields can now be displayed as columns on the issue list
714 * Custom fields can now be displayed as columns on the issue list
708 * Added version details view (accessible from the roadmap)
715 * Added version details view (accessible from the roadmap)
709 * Roadmap: more accurate completion percentage calculation (done ratio of open issues is now taken into account)
716 * Roadmap: more accurate completion percentage calculation (done ratio of open issues is now taken into account)
710 * Added per-project tracker selection. Trackers can be selected on project settings
717 * Added per-project tracker selection. Trackers can be selected on project settings
711 * Anonymous users can now be allowed to create, edit, comment issues, comment news and post messages in the forums
718 * Anonymous users can now be allowed to create, edit, comment issues, comment news and post messages in the forums
712 * Forums: messages can now be edited/deleted (explicit permissions need to be given)
719 * Forums: messages can now be edited/deleted (explicit permissions need to be given)
713 * Forums: topics can be locked so that no reply can be added
720 * Forums: topics can be locked so that no reply can be added
714 * Forums: topics can be marked as sticky so that they always appear at the top of the list
721 * Forums: topics can be marked as sticky so that they always appear at the top of the list
715 * Forums: attachments can now be added to replies
722 * Forums: attachments can now be added to replies
716 * Added time zone support
723 * Added time zone support
717 * Added a setting to choose the account activation strategy (available in application settings)
724 * Added a setting to choose the account activation strategy (available in application settings)
718 * Added 'Classic' theme (inspired from the v0.51 design)
725 * Added 'Classic' theme (inspired from the v0.51 design)
719 * Added an alternate theme which provides issue list colorization based on issues priority
726 * Added an alternate theme which provides issue list colorization based on issues priority
720 * Added Bazaar SCM adapter
727 * Added Bazaar SCM adapter
721 * Added Annotate/Blame view in the repository browser (except for Darcs SCM)
728 * Added Annotate/Blame view in the repository browser (except for Darcs SCM)
722 * Diff style (inline or side by side) automatically saved as a user preference
729 * Diff style (inline or side by side) automatically saved as a user preference
723 * Added issues status changes on the activity view (by Cyril Mougel)
730 * Added issues status changes on the activity view (by Cyril Mougel)
724 * Added forums topics on the activity view (disabled by default)
731 * Added forums topics on the activity view (disabled by default)
725 * Added an option on 'My account' for users who don't want to be notified of changes that they make
732 * Added an option on 'My account' for users who don't want to be notified of changes that they make
726 * Trac importer now supports mysql and postgresql databases
733 * Trac importer now supports mysql and postgresql databases
727 * Trac importer improvements (by Mat Trudel)
734 * Trac importer improvements (by Mat Trudel)
728 * 'fixed version' field can now be displayed on the issue list
735 * 'fixed version' field can now be displayed on the issue list
729 * Added a couple of new formats for the 'date format' setting
736 * Added a couple of new formats for the 'date format' setting
730 * Added Traditional Chinese translation (by Shortie Lo)
737 * Added Traditional Chinese translation (by Shortie Lo)
731 * Added Russian translation (iGor kMeta)
738 * Added Russian translation (iGor kMeta)
732 * Project name format limitation removed (name can now contain any character)
739 * Project name format limitation removed (name can now contain any character)
733 * Project identifier maximum length changed from 12 to 20
740 * Project identifier maximum length changed from 12 to 20
734 * Changed the maximum length of LDAP account to 255 characters
741 * Changed the maximum length of LDAP account to 255 characters
735 * Removed the 12 characters limit on passwords
742 * Removed the 12 characters limit on passwords
736 * Added wiki macros support
743 * Added wiki macros support
737 * Performance improvement on workflow setup screen
744 * Performance improvement on workflow setup screen
738 * More detailed html title on several views
745 * More detailed html title on several views
739 * Custom fields can now be reordered
746 * Custom fields can now be reordered
740 * Search engine: search can be restricted to an exact phrase by using quotation marks
747 * Search engine: search can be restricted to an exact phrase by using quotation marks
741 * Added custom fields marked as 'For all projects' to the csv export of the cross project issue list
748 * Added custom fields marked as 'For all projects' to the csv export of the cross project issue list
742 * Email notifications are now sent as Blind carbon copy by default
749 * Email notifications are now sent as Blind carbon copy by default
743 * Fixed: all members (including non active) should be deleted when deleting a project
750 * Fixed: all members (including non active) should be deleted when deleting a project
744 * Fixed: Error on wiki syntax link (accessible from wiki/edit)
751 * Fixed: Error on wiki syntax link (accessible from wiki/edit)
745 * Fixed: 'quick jump to a revision' form on the revisions list
752 * Fixed: 'quick jump to a revision' form on the revisions list
746 * Fixed: error on admin/info if there's more than 1 plugin installed
753 * Fixed: error on admin/info if there's more than 1 plugin installed
747 * Fixed: svn or ldap password can be found in clear text in the html source in editing mode
754 * Fixed: svn or ldap password can be found in clear text in the html source in editing mode
748 * Fixed: 'Assigned to' drop down list is not sorted
755 * Fixed: 'Assigned to' drop down list is not sorted
749 * Fixed: 'View all issues' link doesn't work on issues/show
756 * Fixed: 'View all issues' link doesn't work on issues/show
750 * Fixed: error on account/register when validation fails
757 * Fixed: error on account/register when validation fails
751 * Fixed: Error when displaying the issue list if a float custom field is marked as 'used as filter'
758 * Fixed: Error when displaying the issue list if a float custom field is marked as 'used as filter'
752 * Fixed: Mercurial adapter breaks on missing :files entry in changeset hash (James Britt)
759 * Fixed: Mercurial adapter breaks on missing :files entry in changeset hash (James Britt)
753 * Fixed: Wrong feed URLs on the home page
760 * Fixed: Wrong feed URLs on the home page
754 * Fixed: Update of time entry fails when the issue has been moved to an other project
761 * Fixed: Update of time entry fails when the issue has been moved to an other project
755 * Fixed: Error when moving an issue without changing its tracker (Postgresql)
762 * Fixed: Error when moving an issue without changing its tracker (Postgresql)
756 * Fixed: Changes not recorded when using :pserver string (CVS adapter)
763 * Fixed: Changes not recorded when using :pserver string (CVS adapter)
757 * Fixed: admin should be able to move issues to any project
764 * Fixed: admin should be able to move issues to any project
758 * Fixed: adding an attachment is not possible when changing the status of an issue
765 * Fixed: adding an attachment is not possible when changing the status of an issue
759 * Fixed: No mime-types in documents/files downloading
766 * Fixed: No mime-types in documents/files downloading
760 * Fixed: error when sorting the messages if there's only one board for the project
767 * Fixed: error when sorting the messages if there's only one board for the project
761 * Fixed: 'me' doesn't appear in the drop down filters on a project issue list.
768 * Fixed: 'me' doesn't appear in the drop down filters on a project issue list.
762
769
763 == 2007-11-04 v0.6.0
770 == 2007-11-04 v0.6.0
764
771
765 * Permission model refactoring.
772 * Permission model refactoring.
766 * Permissions: there are now 2 builtin roles that can be used to specify permissions given to other users than members of projects
773 * Permissions: there are now 2 builtin roles that can be used to specify permissions given to other users than members of projects
767 * Permissions: some permissions (eg. browse the repository) can be removed for certain roles
774 * Permissions: some permissions (eg. browse the repository) can be removed for certain roles
768 * Permissions: modules (eg. issue tracking, news, documents...) can be enabled/disabled at project level
775 * Permissions: modules (eg. issue tracking, news, documents...) can be enabled/disabled at project level
769 * Added Mantis and Trac importers
776 * Added Mantis and Trac importers
770 * New application layout
777 * New application layout
771 * Added "Bulk edit" functionality on the issue list
778 * Added "Bulk edit" functionality on the issue list
772 * More flexible mail notifications settings at user level
779 * More flexible mail notifications settings at user level
773 * Added AJAX based context menu on the project issue list that provide shortcuts for editing, re-assigning, changing the status or the priority, moving or deleting an issue
780 * Added AJAX based context menu on the project issue list that provide shortcuts for editing, re-assigning, changing the status or the priority, moving or deleting an issue
774 * Added the hability to copy an issue. It can be done from the "issue/show" view or from the context menu on the issue list
781 * Added the hability to copy an issue. It can be done from the "issue/show" view or from the context menu on the issue list
775 * Added the ability to customize issue list columns (at application level or for each saved query)
782 * Added the ability to customize issue list columns (at application level or for each saved query)
776 * Overdue versions (date reached and open issues > 0) are now always displayed on the roadmap
783 * Overdue versions (date reached and open issues > 0) are now always displayed on the roadmap
777 * Added the ability to rename wiki pages (specific permission required)
784 * Added the ability to rename wiki pages (specific permission required)
778 * Search engines now supports pagination. Results are sorted in reverse chronological order
785 * Search engines now supports pagination. Results are sorted in reverse chronological order
779 * Added "Estimated hours" attribute on issues
786 * Added "Estimated hours" attribute on issues
780 * A category with assigned issue can now be deleted. 2 options are proposed: remove assignments or reassign issues to another category
787 * A category with assigned issue can now be deleted. 2 options are proposed: remove assignments or reassign issues to another category
781 * Forum notifications are now also sent to the authors of the thread, even if they donοΏ½t watch the board
788 * Forum notifications are now also sent to the authors of the thread, even if they donοΏ½t watch the board
782 * Added an application setting to specify the application protocol (http or https) used to generate urls in emails
789 * Added an application setting to specify the application protocol (http or https) used to generate urls in emails
783 * Gantt chart: now starts at the current month by default
790 * Gantt chart: now starts at the current month by default
784 * Gantt chart: month count and zoom factor are automatically saved as user preferences
791 * Gantt chart: month count and zoom factor are automatically saved as user preferences
785 * Wiki links can now refer to other project wikis
792 * Wiki links can now refer to other project wikis
786 * Added wiki index by date
793 * Added wiki index by date
787 * Added preview on add/edit issue form
794 * Added preview on add/edit issue form
788 * Emails footer can now be customized from the admin interface (Admin -> Email notifications)
795 * Emails footer can now be customized from the admin interface (Admin -> Email notifications)
789 * Default encodings for repository files can now be set in application settings (used to convert files content and diff to UTF-8 so that theyοΏ½re properly displayed)
796 * Default encodings for repository files can now be set in application settings (used to convert files content and diff to UTF-8 so that theyοΏ½re properly displayed)
790 * Calendar: first day of week can now be set in lang files
797 * Calendar: first day of week can now be set in lang files
791 * Automatic closing of duplicate issues
798 * Automatic closing of duplicate issues
792 * Added a cross-project issue list
799 * Added a cross-project issue list
793 * AJAXified the SCM browser (tree view)
800 * AJAXified the SCM browser (tree view)
794 * Pretty URL for the repository browser (Cyril Mougel)
801 * Pretty URL for the repository browser (Cyril Mougel)
795 * Search engine: added a checkbox to search titles only
802 * Search engine: added a checkbox to search titles only
796 * Added "% done" in the filter list
803 * Added "% done" in the filter list
797 * Enumerations: values can now be reordered and a default value can be specified (eg. default issue priority)
804 * Enumerations: values can now be reordered and a default value can be specified (eg. default issue priority)
798 * Added some accesskeys
805 * Added some accesskeys
799 * Added "Float" as a custom field format
806 * Added "Float" as a custom field format
800 * Added basic Theme support
807 * Added basic Theme support
801 * Added the ability to set the οΏ½done ratioοΏ½ of issues fixed by commit (Nikolay Solakov)
808 * Added the ability to set the οΏ½done ratioοΏ½ of issues fixed by commit (Nikolay Solakov)
802 * Added custom fields in issue related mail notifications
809 * Added custom fields in issue related mail notifications
803 * Email notifications are now sent in plain text and html
810 * Email notifications are now sent in plain text and html
804 * Gantt chart can now be exported to a graphic file (png). This functionality is only available if RMagick is installed.
811 * Gantt chart can now be exported to a graphic file (png). This functionality is only available if RMagick is installed.
805 * Added syntax highlightment for repository files and wiki
812 * Added syntax highlightment for repository files and wiki
806 * Improved automatic Redmine links
813 * Improved automatic Redmine links
807 * Added automatic table of content support on wiki pages
814 * Added automatic table of content support on wiki pages
808 * Added radio buttons on the documents list to sort documents by category, date, title or author
815 * Added radio buttons on the documents list to sort documents by category, date, title or author
809 * Added basic plugin support, with a sample plugin
816 * Added basic plugin support, with a sample plugin
810 * Added a link to add a new category when creating or editing an issue
817 * Added a link to add a new category when creating or editing an issue
811 * Added a "Assignable" boolean on the Role model. If unchecked, issues can not be assigned to users having this role.
818 * Added a "Assignable" boolean on the Role model. If unchecked, issues can not be assigned to users having this role.
812 * Added an option to be able to relate issues in different projects
819 * Added an option to be able to relate issues in different projects
813 * Added the ability to move issues (to another project) without changing their trackers.
820 * Added the ability to move issues (to another project) without changing their trackers.
814 * Atom feeds added on project activity, news and changesets
821 * Atom feeds added on project activity, news and changesets
815 * Added the ability to reset its own RSS access key
822 * Added the ability to reset its own RSS access key
816 * Main project list now displays root projects with their subprojects
823 * Main project list now displays root projects with their subprojects
817 * Added anchor links to issue notes
824 * Added anchor links to issue notes
818 * Added reposman Ruby version. This script can now register created repositories in Redmine (Nicolas Chuche)
825 * Added reposman Ruby version. This script can now register created repositories in Redmine (Nicolas Chuche)
819 * Issue notes are now included in search
826 * Issue notes are now included in search
820 * Added email sending test functionality
827 * Added email sending test functionality
821 * Added LDAPS support for LDAP authentication
828 * Added LDAPS support for LDAP authentication
822 * Removed hard-coded URLs in mail templates
829 * Removed hard-coded URLs in mail templates
823 * Subprojects are now grouped by projects in the navigation drop-down menu
830 * Subprojects are now grouped by projects in the navigation drop-down menu
824 * Added a new value for date filters: this week
831 * Added a new value for date filters: this week
825 * Added cache for application settings
832 * Added cache for application settings
826 * Added Polish translation (Tomasz Gawryl)
833 * Added Polish translation (Tomasz Gawryl)
827 * Added Czech translation (Jan Kadlecek)
834 * Added Czech translation (Jan Kadlecek)
828 * Added Romanian translation (Csongor Bartus)
835 * Added Romanian translation (Csongor Bartus)
829 * Added Hebrew translation (Bob Builder)
836 * Added Hebrew translation (Bob Builder)
830 * Added Serbian translation (Dragan Matic)
837 * Added Serbian translation (Dragan Matic)
831 * Added Korean translation (Choi Jong Yoon)
838 * Added Korean translation (Choi Jong Yoon)
832 * Fixed: the link to delete issue relations is displayed even if the user is not authorized to delete relations
839 * Fixed: the link to delete issue relations is displayed even if the user is not authorized to delete relations
833 * Performance improvement on calendar and gantt
840 * Performance improvement on calendar and gantt
834 * Fixed: wiki preview doesnοΏ½t work on long entries
841 * Fixed: wiki preview doesnοΏ½t work on long entries
835 * Fixed: queries with multiple custom fields return no result
842 * Fixed: queries with multiple custom fields return no result
836 * Fixed: Can not authenticate user against LDAP if its DN contains non-ascii characters
843 * Fixed: Can not authenticate user against LDAP if its DN contains non-ascii characters
837 * Fixed: URL with ~ broken in wiki formatting
844 * Fixed: URL with ~ broken in wiki formatting
838 * Fixed: some quotation marks are rendered as strange characters in pdf
845 * Fixed: some quotation marks are rendered as strange characters in pdf
839
846
840
847
841 == 2007-07-15 v0.5.1
848 == 2007-07-15 v0.5.1
842
849
843 * per project forums added
850 * per project forums added
844 * added the ability to archive projects
851 * added the ability to archive projects
845 * added οΏ½WatchοΏ½ functionality on issues. It allows users to receive notifications about issue changes
852 * added οΏ½WatchοΏ½ functionality on issues. It allows users to receive notifications about issue changes
846 * custom fields for issues can now be used as filters on issue list
853 * custom fields for issues can now be used as filters on issue list
847 * added per user custom queries
854 * added per user custom queries
848 * commit messages are now scanned for referenced or fixed issue IDs (keywords defined in Admin -> Settings)
855 * commit messages are now scanned for referenced or fixed issue IDs (keywords defined in Admin -> Settings)
849 * projects list now shows the list of public projects and private projects for which the user is a member
856 * projects list now shows the list of public projects and private projects for which the user is a member
850 * versions can now be created with no date
857 * versions can now be created with no date
851 * added issue count details for versions on Reports view
858 * added issue count details for versions on Reports view
852 * added time report, by member/activity/tracker/version and year/month/week for the selected period
859 * added time report, by member/activity/tracker/version and year/month/week for the selected period
853 * each category can now be associated to a user, so that new issues in that category are automatically assigned to that user
860 * each category can now be associated to a user, so that new issues in that category are automatically assigned to that user
854 * added autologin feature (disabled by default)
861 * added autologin feature (disabled by default)
855 * optimistic locking added for wiki edits
862 * optimistic locking added for wiki edits
856 * added wiki diff
863 * added wiki diff
857 * added the ability to destroy wiki pages (requires permission)
864 * added the ability to destroy wiki pages (requires permission)
858 * a wiki page can now be attached to each version, and displayed on the roadmap
865 * a wiki page can now be attached to each version, and displayed on the roadmap
859 * attachments can now be added to wiki pages (original patch by Pavol Murin) and displayed online
866 * attachments can now be added to wiki pages (original patch by Pavol Murin) and displayed online
860 * added an option to see all versions in the roadmap view (including completed ones)
867 * added an option to see all versions in the roadmap view (including completed ones)
861 * added basic issue relations
868 * added basic issue relations
862 * added the ability to log time when changing an issue status
869 * added the ability to log time when changing an issue status
863 * account information can now be sent to the user when creating an account
870 * account information can now be sent to the user when creating an account
864 * author and assignee of an issue always receive notifications (even if they turned of mail notifications)
871 * author and assignee of an issue always receive notifications (even if they turned of mail notifications)
865 * added a quick search form in page header
872 * added a quick search form in page header
866 * added 'me' value for 'assigned to' and 'author' query filters
873 * added 'me' value for 'assigned to' and 'author' query filters
867 * added a link on revision screen to see the entire diff for the revision
874 * added a link on revision screen to see the entire diff for the revision
868 * added last commit message for each entry in repository browser
875 * added last commit message for each entry in repository browser
869 * added the ability to view a file diff with free to/from revision selection.
876 * added the ability to view a file diff with free to/from revision selection.
870 * text files can now be viewed online when browsing the repository
877 * text files can now be viewed online when browsing the repository
871 * added basic support for other SCM: CVS (Ralph Vater), Mercurial and Darcs
878 * added basic support for other SCM: CVS (Ralph Vater), Mercurial and Darcs
872 * added fragment caching for svn diffs
879 * added fragment caching for svn diffs
873 * added fragment caching for calendar and gantt views
880 * added fragment caching for calendar and gantt views
874 * login field automatically focused on login form
881 * login field automatically focused on login form
875 * subproject name displayed on issue list, calendar and gantt
882 * subproject name displayed on issue list, calendar and gantt
876 * added an option to choose the date format: language based or ISO 8601
883 * added an option to choose the date format: language based or ISO 8601
877 * added a simple mail handler. It lets users add notes to an existing issue by replying to the initial notification email.
884 * added a simple mail handler. It lets users add notes to an existing issue by replying to the initial notification email.
878 * a 403 error page is now displayed (instead of a blank page) when trying to access a protected page
885 * a 403 error page is now displayed (instead of a blank page) when trying to access a protected page
879 * added portuguese translation (Joao Carlos Clementoni)
886 * added portuguese translation (Joao Carlos Clementoni)
880 * added partial online help japanese translation (Ken Date)
887 * added partial online help japanese translation (Ken Date)
881 * added bulgarian translation (Nikolay Solakov)
888 * added bulgarian translation (Nikolay Solakov)
882 * added dutch translation (Linda van den Brink)
889 * added dutch translation (Linda van den Brink)
883 * added swedish translation (Thomas Habets)
890 * added swedish translation (Thomas Habets)
884 * italian translation update (Alessio Spadaro)
891 * italian translation update (Alessio Spadaro)
885 * japanese translation update (Satoru Kurashiki)
892 * japanese translation update (Satoru Kurashiki)
886 * fixed: error on history atom feed when thereοΏ½s no notes on an issue change
893 * fixed: error on history atom feed when thereοΏ½s no notes on an issue change
887 * fixed: error in journalizing an issue with longtext custom fields (Postgresql)
894 * fixed: error in journalizing an issue with longtext custom fields (Postgresql)
888 * fixed: creation of Oracle schema
895 * fixed: creation of Oracle schema
889 * fixed: last day of the month not included in project activity
896 * fixed: last day of the month not included in project activity
890 * fixed: files with an apostrophe in their names can't be accessed in SVN repository
897 * fixed: files with an apostrophe in their names can't be accessed in SVN repository
891 * fixed: performance issue on RepositoriesController#revisions when a changeset has a great number of changes (eg. 100,000)
898 * fixed: performance issue on RepositoriesController#revisions when a changeset has a great number of changes (eg. 100,000)
892 * fixed: open/closed issue counts are always 0 on reports view (postgresql)
899 * fixed: open/closed issue counts are always 0 on reports view (postgresql)
893 * fixed: date query filters (wrong results and sql error with postgresql)
900 * fixed: date query filters (wrong results and sql error with postgresql)
894 * fixed: confidentiality issue on account/show (private project names displayed to anyone)
901 * fixed: confidentiality issue on account/show (private project names displayed to anyone)
895 * fixed: Long text custom fields displayed without line breaks
902 * fixed: Long text custom fields displayed without line breaks
896 * fixed: Error when editing the wokflow after deleting a status
903 * fixed: Error when editing the wokflow after deleting a status
897 * fixed: SVN commit dates are now stored as local time
904 * fixed: SVN commit dates are now stored as local time
898
905
899
906
900 == 2007-04-11 v0.5.0
907 == 2007-04-11 v0.5.0
901
908
902 * added per project Wiki
909 * added per project Wiki
903 * added rss/atom feeds at project level (custom queries can be used as feeds)
910 * added rss/atom feeds at project level (custom queries can be used as feeds)
904 * added search engine (search in issues, news, commits, wiki pages, documents)
911 * added search engine (search in issues, news, commits, wiki pages, documents)
905 * simple time tracking functionality added
912 * simple time tracking functionality added
906 * added version due dates on calendar and gantt
913 * added version due dates on calendar and gantt
907 * added subprojects issue count on project Reports page
914 * added subprojects issue count on project Reports page
908 * added the ability to copy an existing workflow when creating a new tracker
915 * added the ability to copy an existing workflow when creating a new tracker
909 * added the ability to include subprojects on calendar and gantt
916 * added the ability to include subprojects on calendar and gantt
910 * added the ability to select trackers to display on calendar and gantt (Jeffrey Jones)
917 * added the ability to select trackers to display on calendar and gantt (Jeffrey Jones)
911 * added side by side svn diff view (Cyril Mougel)
918 * added side by side svn diff view (Cyril Mougel)
912 * added back subproject filter on issue list
919 * added back subproject filter on issue list
913 * added permissions report in admin area
920 * added permissions report in admin area
914 * added a status filter on users list
921 * added a status filter on users list
915 * support for password-protected SVN repositories
922 * support for password-protected SVN repositories
916 * SVN commits are now stored in the database
923 * SVN commits are now stored in the database
917 * added simple svn statistics SVG graphs
924 * added simple svn statistics SVG graphs
918 * progress bars for roadmap versions (Nick Read)
925 * progress bars for roadmap versions (Nick Read)
919 * issue history now shows file uploads and deletions
926 * issue history now shows file uploads and deletions
920 * #id patterns are turned into links to issues in descriptions and commit messages
927 * #id patterns are turned into links to issues in descriptions and commit messages
921 * japanese translation added (Satoru Kurashiki)
928 * japanese translation added (Satoru Kurashiki)
922 * chinese simplified translation added (Andy Wu)
929 * chinese simplified translation added (Andy Wu)
923 * italian translation added (Alessio Spadaro)
930 * italian translation added (Alessio Spadaro)
924 * added scripts to manage SVN repositories creation and user access control using ssh+svn (Nicolas Chuche)
931 * added scripts to manage SVN repositories creation and user access control using ssh+svn (Nicolas Chuche)
925 * better calendar rendering time
932 * better calendar rendering time
926 * fixed migration scripts to work with mysql 5 running in strict mode
933 * fixed migration scripts to work with mysql 5 running in strict mode
927 * fixed: error when clicking "add" with no block selected on my/page_layout
934 * fixed: error when clicking "add" with no block selected on my/page_layout
928 * fixed: hard coded links in navigation bar
935 * fixed: hard coded links in navigation bar
929 * fixed: table_name pre/suffix support
936 * fixed: table_name pre/suffix support
930
937
931
938
932 == 2007-02-18 v0.4.2
939 == 2007-02-18 v0.4.2
933
940
934 * Rails 1.2 is now required
941 * Rails 1.2 is now required
935 * settings are now stored in the database and editable through the application in: Admin -> Settings (config_custom.rb is no longer used)
942 * settings are now stored in the database and editable through the application in: Admin -> Settings (config_custom.rb is no longer used)
936 * added project roadmap view
943 * added project roadmap view
937 * mail notifications added when a document, a file or an attachment is added
944 * mail notifications added when a document, a file or an attachment is added
938 * tooltips added on Gantt chart and calender to view the details of the issues
945 * tooltips added on Gantt chart and calender to view the details of the issues
939 * ability to set the sort order for roles, trackers, issue statuses
946 * ability to set the sort order for roles, trackers, issue statuses
940 * added missing fields to csv export: priority, start date, due date, done ratio
947 * added missing fields to csv export: priority, start date, due date, done ratio
941 * added total number of issues per tracker on project overview
948 * added total number of issues per tracker on project overview
942 * all icons replaced (new icons are based on GPL icon set: "KDE Crystal Diamond 2.5" -by paolino- and "kNeu! Alpha v0.1" -by Pablo Fabregat-)
949 * all icons replaced (new icons are based on GPL icon set: "KDE Crystal Diamond 2.5" -by paolino- and "kNeu! Alpha v0.1" -by Pablo Fabregat-)
943 * added back "fixed version" field on issue screen and in filters
950 * added back "fixed version" field on issue screen and in filters
944 * project settings screen split in 4 tabs
951 * project settings screen split in 4 tabs
945 * custom fields screen split in 3 tabs (one for each kind of custom field)
952 * custom fields screen split in 3 tabs (one for each kind of custom field)
946 * multiple issues pdf export now rendered as a table
953 * multiple issues pdf export now rendered as a table
947 * added a button on users/list to manually activate an account
954 * added a button on users/list to manually activate an account
948 * added a setting option to disable "password lost" functionality
955 * added a setting option to disable "password lost" functionality
949 * added a setting option to set max number of issues in csv/pdf exports
956 * added a setting option to set max number of issues in csv/pdf exports
950 * fixed: subprojects count is always 0 on projects list
957 * fixed: subprojects count is always 0 on projects list
951 * fixed: locked users are proposed when adding a member to a project
958 * fixed: locked users are proposed when adding a member to a project
952 * fixed: setting an issue status as default status leads to an sql error with SQLite
959 * fixed: setting an issue status as default status leads to an sql error with SQLite
953 * fixed: unable to delete an issue status even if it's not used yet
960 * fixed: unable to delete an issue status even if it's not used yet
954 * fixed: filters ignored when exporting a predefined query to csv/pdf
961 * fixed: filters ignored when exporting a predefined query to csv/pdf
955 * fixed: crash when french "issue_edit" email notification is sent
962 * fixed: crash when french "issue_edit" email notification is sent
956 * fixed: hide mail preference not saved (my/account)
963 * fixed: hide mail preference not saved (my/account)
957 * fixed: crash when a new user try to edit its "my page" layout
964 * fixed: crash when a new user try to edit its "my page" layout
958
965
959
966
960 == 2007-01-03 v0.4.1
967 == 2007-01-03 v0.4.1
961
968
962 * fixed: emails have no recipient when one of the project members has notifications disabled
969 * fixed: emails have no recipient when one of the project members has notifications disabled
963
970
964
971
965 == 2007-01-02 v0.4.0
972 == 2007-01-02 v0.4.0
966
973
967 * simple SVN browser added (just needs svn binaries in PATH)
974 * simple SVN browser added (just needs svn binaries in PATH)
968 * comments can now be added on news
975 * comments can now be added on news
969 * "my page" is now customizable
976 * "my page" is now customizable
970 * more powerfull and savable filters for issues lists
977 * more powerfull and savable filters for issues lists
971 * improved issues change history
978 * improved issues change history
972 * new functionality: move an issue to another project or tracker
979 * new functionality: move an issue to another project or tracker
973 * new functionality: add a note to an issue
980 * new functionality: add a note to an issue
974 * new report: project activity
981 * new report: project activity
975 * "start date" and "% done" fields added on issues
982 * "start date" and "% done" fields added on issues
976 * project calendar added
983 * project calendar added
977 * gantt chart added (exportable to pdf)
984 * gantt chart added (exportable to pdf)
978 * single/multiple issues pdf export added
985 * single/multiple issues pdf export added
979 * issues reports improvements
986 * issues reports improvements
980 * multiple file upload for issues, documents and files
987 * multiple file upload for issues, documents and files
981 * option to set maximum size of uploaded files
988 * option to set maximum size of uploaded files
982 * textile formating of issue and news descritions (RedCloth required)
989 * textile formating of issue and news descritions (RedCloth required)
983 * integration of DotClear jstoolbar for textile formatting
990 * integration of DotClear jstoolbar for textile formatting
984 * calendar date picker for date fields (LGPL DHTML Calendar http://sourceforge.net/projects/jscalendar)
991 * calendar date picker for date fields (LGPL DHTML Calendar http://sourceforge.net/projects/jscalendar)
985 * new filter in issues list: Author
992 * new filter in issues list: Author
986 * ajaxified paginators
993 * ajaxified paginators
987 * news rss feed added
994 * news rss feed added
988 * option to set number of results per page on issues list
995 * option to set number of results per page on issues list
989 * localized csv separator (comma/semicolon)
996 * localized csv separator (comma/semicolon)
990 * csv output encoded to ISO-8859-1
997 * csv output encoded to ISO-8859-1
991 * user custom field displayed on account/show
998 * user custom field displayed on account/show
992 * default configuration improved (default roles, trackers, status, permissions and workflows)
999 * default configuration improved (default roles, trackers, status, permissions and workflows)
993 * language for default configuration data can now be chosen when running 'load_default_data' task
1000 * language for default configuration data can now be chosen when running 'load_default_data' task
994 * javascript added on custom field form to show/hide fields according to the format of custom field
1001 * javascript added on custom field form to show/hide fields according to the format of custom field
995 * fixed: custom fields not in csv exports
1002 * fixed: custom fields not in csv exports
996 * fixed: project settings now displayed according to user's permissions
1003 * fixed: project settings now displayed according to user's permissions
997 * fixed: application error when no version is selected on projects/add_file
1004 * fixed: application error when no version is selected on projects/add_file
998 * fixed: public actions not authorized for members of non public projects
1005 * fixed: public actions not authorized for members of non public projects
999 * fixed: non public projects were shown on welcome screen even if current user is not a member
1006 * fixed: non public projects were shown on welcome screen even if current user is not a member
1000
1007
1001
1008
1002 == 2006-10-08 v0.3.0
1009 == 2006-10-08 v0.3.0
1003
1010
1004 * user authentication against multiple LDAP (optional)
1011 * user authentication against multiple LDAP (optional)
1005 * token based "lost password" functionality
1012 * token based "lost password" functionality
1006 * user self-registration functionality (optional)
1013 * user self-registration functionality (optional)
1007 * custom fields now available for issues, users and projects
1014 * custom fields now available for issues, users and projects
1008 * new custom field format "text" (displayed as a textarea field)
1015 * new custom field format "text" (displayed as a textarea field)
1009 * project & administration drop down menus in navigation bar for quicker access
1016 * project & administration drop down menus in navigation bar for quicker access
1010 * text formatting is preserved for long text fields (issues, projects and news descriptions)
1017 * text formatting is preserved for long text fields (issues, projects and news descriptions)
1011 * urls and emails are turned into clickable links in long text fields
1018 * urls and emails are turned into clickable links in long text fields
1012 * "due date" field added on issues
1019 * "due date" field added on issues
1013 * tracker selection filter added on change log
1020 * tracker selection filter added on change log
1014 * Localization plugin replaced with GLoc 1.1.0 (iconv required)
1021 * Localization plugin replaced with GLoc 1.1.0 (iconv required)
1015 * error messages internationalization
1022 * error messages internationalization
1016 * german translation added (thanks to Karim Trott)
1023 * german translation added (thanks to Karim Trott)
1017 * data locking for issues to prevent update conflicts (using ActiveRecord builtin optimistic locking)
1024 * data locking for issues to prevent update conflicts (using ActiveRecord builtin optimistic locking)
1018 * new filter in issues list: "Fixed version"
1025 * new filter in issues list: "Fixed version"
1019 * active filters are displayed with colored background on issues list
1026 * active filters are displayed with colored background on issues list
1020 * custom configuration is now defined in config/config_custom.rb
1027 * custom configuration is now defined in config/config_custom.rb
1021 * user object no more stored in session (only user_id)
1028 * user object no more stored in session (only user_id)
1022 * news summary field is no longer required
1029 * news summary field is no longer required
1023 * tables and forms redesign
1030 * tables and forms redesign
1024 * Fixed: boolean custom field not working
1031 * Fixed: boolean custom field not working
1025 * Fixed: error messages for custom fields are not displayed
1032 * Fixed: error messages for custom fields are not displayed
1026 * Fixed: invalid custom fields should have a red border
1033 * Fixed: invalid custom fields should have a red border
1027 * Fixed: custom fields values are not validated on issue update
1034 * Fixed: custom fields values are not validated on issue update
1028 * Fixed: unable to choose an empty value for 'List' custom fields
1035 * Fixed: unable to choose an empty value for 'List' custom fields
1029 * Fixed: no issue categories sorting
1036 * Fixed: no issue categories sorting
1030 * Fixed: incorrect versions sorting
1037 * Fixed: incorrect versions sorting
1031
1038
1032
1039
1033 == 2006-07-12 - v0.2.2
1040 == 2006-07-12 - v0.2.2
1034
1041
1035 * Fixed: bug in "issues list"
1042 * Fixed: bug in "issues list"
1036
1043
1037
1044
1038 == 2006-07-09 - v0.2.1
1045 == 2006-07-09 - v0.2.1
1039
1046
1040 * new databases supported: Oracle, PostgreSQL, SQL Server
1047 * new databases supported: Oracle, PostgreSQL, SQL Server
1041 * projects/subprojects hierarchy (1 level of subprojects only)
1048 * projects/subprojects hierarchy (1 level of subprojects only)
1042 * environment information display in admin/info
1049 * environment information display in admin/info
1043 * more filter options in issues list (rev6)
1050 * more filter options in issues list (rev6)
1044 * default language based on browser settings (Accept-Language HTTP header)
1051 * default language based on browser settings (Accept-Language HTTP header)
1045 * issues list exportable to CSV (rev6)
1052 * issues list exportable to CSV (rev6)
1046 * simple_format and auto_link on long text fields
1053 * simple_format and auto_link on long text fields
1047 * more data validations
1054 * more data validations
1048 * Fixed: error when all mail notifications are unchecked in admin/mail_options
1055 * Fixed: error when all mail notifications are unchecked in admin/mail_options
1049 * Fixed: all project news are displayed on project summary
1056 * Fixed: all project news are displayed on project summary
1050 * Fixed: Can't change user password in users/edit
1057 * Fixed: Can't change user password in users/edit
1051 * Fixed: Error on tables creation with PostgreSQL (rev5)
1058 * Fixed: Error on tables creation with PostgreSQL (rev5)
1052 * Fixed: SQL error in "issue reports" view with PostgreSQL (rev5)
1059 * Fixed: SQL error in "issue reports" view with PostgreSQL (rev5)
1053
1060
1054
1061
1055 == 2006-06-25 - v0.1.0
1062 == 2006-06-25 - v0.1.0
1056
1063
1057 * multiple users/multiple projects
1064 * multiple users/multiple projects
1058 * role based access control
1065 * role based access control
1059 * issue tracking system
1066 * issue tracking system
1060 * fully customizable workflow
1067 * fully customizable workflow
1061 * documents/files repository
1068 * documents/files repository
1062 * email notifications on issue creation and update
1069 * email notifications on issue creation and update
1063 * multilanguage support (except for error messages):english, french, spanish
1070 * multilanguage support (except for error messages):english, french, spanish
1064 * online manual in french (unfinished)
1071 * online manual in french (unfinished)
@@ -1,350 +1,355
1 package Apache::Authn::Redmine;
1 package Apache::Authn::Redmine;
2
2
3 =head1 Apache::Authn::Redmine
3 =head1 Apache::Authn::Redmine
4
4
5 Redmine - a mod_perl module to authenticate webdav subversion users
5 Redmine - a mod_perl module to authenticate webdav subversion users
6 against redmine database
6 against redmine database
7
7
8 =head1 SYNOPSIS
8 =head1 SYNOPSIS
9
9
10 This module allow anonymous users to browse public project and
10 This module allow anonymous users to browse public project and
11 registred users to browse and commit their project. Authentication is
11 registred users to browse and commit their project. Authentication is
12 done against the redmine database or the LDAP configured in redmine.
12 done against the redmine database or the LDAP configured in redmine.
13
13
14 This method is far simpler than the one with pam_* and works with all
14 This method is far simpler than the one with pam_* and works with all
15 database without an hassle but you need to have apache/mod_perl on the
15 database without an hassle but you need to have apache/mod_perl on the
16 svn server.
16 svn server.
17
17
18 =head1 INSTALLATION
18 =head1 INSTALLATION
19
19
20 For this to automagically work, you need to have a recent reposman.rb
20 For this to automagically work, you need to have a recent reposman.rb
21 (after r860) and if you already use reposman, read the last section to
21 (after r860) and if you already use reposman, read the last section to
22 migrate.
22 migrate.
23
23
24 Sorry ruby users but you need some perl modules, at least mod_perl2,
24 Sorry ruby users but you need some perl modules, at least mod_perl2,
25 DBI and DBD::mysql (or the DBD driver for you database as it should
25 DBI and DBD::mysql (or the DBD driver for you database as it should
26 work on allmost all databases).
26 work on allmost all databases).
27
27
28 On debian/ubuntu you must do :
28 On debian/ubuntu you must do :
29
29
30 aptitude install libapache-dbi-perl libapache2-mod-perl2 libdbd-mysql-perl
30 aptitude install libapache-dbi-perl libapache2-mod-perl2 libdbd-mysql-perl
31
31
32 If your Redmine users use LDAP authentication, you will also need
32 If your Redmine users use LDAP authentication, you will also need
33 Authen::Simple::LDAP (and IO::Socket::SSL if LDAPS is used):
33 Authen::Simple::LDAP (and IO::Socket::SSL if LDAPS is used):
34
34
35 aptitude install libauthen-simple-ldap-perl libio-socket-ssl-perl
35 aptitude install libauthen-simple-ldap-perl libio-socket-ssl-perl
36
36
37 =head1 CONFIGURATION
37 =head1 CONFIGURATION
38
38
39 ## This module has to be in your perl path
39 ## This module has to be in your perl path
40 ## eg: /usr/lib/perl5/Apache/Authn/Redmine.pm
40 ## eg: /usr/lib/perl5/Apache/Authn/Redmine.pm
41 PerlLoadModule Apache::Authn::Redmine
41 PerlLoadModule Apache::Authn::Redmine
42 <Location /svn>
42 <Location /svn>
43 DAV svn
43 DAV svn
44 SVNParentPath "/var/svn"
44 SVNParentPath "/var/svn"
45
45
46 AuthType Basic
46 AuthType Basic
47 AuthName redmine
47 AuthName redmine
48 Require valid-user
48 Require valid-user
49
49
50 PerlAccessHandler Apache::Authn::Redmine::access_handler
50 PerlAccessHandler Apache::Authn::Redmine::access_handler
51 PerlAuthenHandler Apache::Authn::Redmine::authen_handler
51 PerlAuthenHandler Apache::Authn::Redmine::authen_handler
52
52
53 ## for mysql
53 ## for mysql
54 RedmineDSN "DBI:mysql:database=databasename;host=my.db.server"
54 RedmineDSN "DBI:mysql:database=databasename;host=my.db.server"
55 ## for postgres
55 ## for postgres
56 # RedmineDSN "DBI:Pg:dbname=databasename;host=my.db.server"
56 # RedmineDSN "DBI:Pg:dbname=databasename;host=my.db.server"
57
57
58 RedmineDbUser "redmine"
58 RedmineDbUser "redmine"
59 RedmineDbPass "password"
59 RedmineDbPass "password"
60 ## Optional where clause (fulltext search would be slow and
60 ## Optional where clause (fulltext search would be slow and
61 ## database dependant).
61 ## database dependant).
62 # RedmineDbWhereClause "and members.role_id IN (1,2)"
62 # RedmineDbWhereClause "and members.role_id IN (1,2)"
63 ## Optional credentials cache size
63 ## Optional credentials cache size
64 # RedmineCacheCredsMax 50
64 # RedmineCacheCredsMax 50
65 </Location>
65 </Location>
66
66
67 To be able to browse repository inside redmine, you must add something
67 To be able to browse repository inside redmine, you must add something
68 like that :
68 like that :
69
69
70 <Location /svn-private>
70 <Location /svn-private>
71 DAV svn
71 DAV svn
72 SVNParentPath "/var/svn"
72 SVNParentPath "/var/svn"
73 Order deny,allow
73 Order deny,allow
74 Deny from all
74 Deny from all
75 # only allow reading orders
75 # only allow reading orders
76 <Limit GET PROPFIND OPTIONS REPORT>
76 <Limit GET PROPFIND OPTIONS REPORT>
77 Allow from redmine.server.ip
77 Allow from redmine.server.ip
78 </Limit>
78 </Limit>
79 </Location>
79 </Location>
80
80
81 and you will have to use this reposman.rb command line to create repository :
81 and you will have to use this reposman.rb command line to create repository :
82
82
83 reposman.rb --redmine my.redmine.server --svn-dir /var/svn --owner www-data -u http://svn.server/svn-private/
83 reposman.rb --redmine my.redmine.server --svn-dir /var/svn --owner www-data -u http://svn.server/svn-private/
84
84
85 =head1 MIGRATION FROM OLDER RELEASES
85 =head1 MIGRATION FROM OLDER RELEASES
86
86
87 If you use an older reposman.rb (r860 or before), you need to change
87 If you use an older reposman.rb (r860 or before), you need to change
88 rights on repositories to allow the apache user to read and write
88 rights on repositories to allow the apache user to read and write
89 S<them :>
89 S<them :>
90
90
91 sudo chown -R www-data /var/svn/*
91 sudo chown -R www-data /var/svn/*
92 sudo chmod -R u+w /var/svn/*
92 sudo chmod -R u+w /var/svn/*
93
93
94 And you need to upgrade at least reposman.rb (after r860).
94 And you need to upgrade at least reposman.rb (after r860).
95
95
96 =cut
96 =cut
97
97
98 use strict;
98 use strict;
99 use warnings FATAL => 'all', NONFATAL => 'redefine';
99 use warnings FATAL => 'all', NONFATAL => 'redefine';
100
100
101 use DBI;
101 use DBI;
102 use Digest::SHA1;
102 use Digest::SHA1;
103 # optional module for LDAP authentication
103 # optional module for LDAP authentication
104 my $CanUseLDAPAuth = eval("use Authen::Simple::LDAP; 1");
104 my $CanUseLDAPAuth = eval("use Authen::Simple::LDAP; 1");
105
105
106 use Apache2::Module;
106 use Apache2::Module;
107 use Apache2::Access;
107 use Apache2::Access;
108 use Apache2::ServerRec qw();
108 use Apache2::ServerRec qw();
109 use Apache2::RequestRec qw();
109 use Apache2::RequestRec qw();
110 use Apache2::RequestUtil qw();
110 use Apache2::RequestUtil qw();
111 use Apache2::Const qw(:common :override :cmd_how);
111 use Apache2::Const qw(:common :override :cmd_how);
112 use APR::Pool ();
112 use APR::Pool ();
113 use APR::Table ();
113 use APR::Table ();
114
114
115 # use Apache2::Directive qw();
115 # use Apache2::Directive qw();
116
116
117 my @directives = (
117 my @directives = (
118 {
118 {
119 name => 'RedmineDSN',
119 name => 'RedmineDSN',
120 req_override => OR_AUTHCFG,
120 req_override => OR_AUTHCFG,
121 args_how => TAKE1,
121 args_how => TAKE1,
122 errmsg => 'Dsn in format used by Perl DBI. eg: "DBI:Pg:dbname=databasename;host=my.db.server"',
122 errmsg => 'Dsn in format used by Perl DBI. eg: "DBI:Pg:dbname=databasename;host=my.db.server"',
123 },
123 },
124 {
124 {
125 name => 'RedmineDbUser',
125 name => 'RedmineDbUser',
126 req_override => OR_AUTHCFG,
126 req_override => OR_AUTHCFG,
127 args_how => TAKE1,
127 args_how => TAKE1,
128 },
128 },
129 {
129 {
130 name => 'RedmineDbPass',
130 name => 'RedmineDbPass',
131 req_override => OR_AUTHCFG,
131 req_override => OR_AUTHCFG,
132 args_how => TAKE1,
132 args_how => TAKE1,
133 },
133 },
134 {
134 {
135 name => 'RedmineDbWhereClause',
135 name => 'RedmineDbWhereClause',
136 req_override => OR_AUTHCFG,
136 req_override => OR_AUTHCFG,
137 args_how => TAKE1,
137 args_how => TAKE1,
138 },
138 },
139 {
139 {
140 name => 'RedmineCacheCredsMax',
140 name => 'RedmineCacheCredsMax',
141 req_override => OR_AUTHCFG,
141 req_override => OR_AUTHCFG,
142 args_how => TAKE1,
142 args_how => TAKE1,
143 errmsg => 'RedmineCacheCredsMax must be decimal number',
143 errmsg => 'RedmineCacheCredsMax must be decimal number',
144 },
144 },
145 );
145 );
146
146
147 sub RedmineDSN {
147 sub RedmineDSN {
148 my ($self, $parms, $arg) = @_;
148 my ($self, $parms, $arg) = @_;
149 $self->{RedmineDSN} = $arg;
149 $self->{RedmineDSN} = $arg;
150 my $query = "SELECT
150 my $query = "SELECT
151 hashed_password, auth_source_id, permissions
151 hashed_password, auth_source_id, permissions
152 FROM members, projects, users, roles, member_roles
152 FROM members, projects, users, roles, member_roles
153 WHERE
153 WHERE
154 projects.id=members.project_id
154 projects.id=members.project_id
155 AND member_roles.member_id=members.id
155 AND member_roles.member_id=members.id
156 AND users.id=members.user_id
156 AND users.id=members.user_id
157 AND roles.id=member_roles.role_id
157 AND roles.id=member_roles.role_id
158 AND users.status=1
158 AND users.status=1
159 AND login=?
159 AND login=?
160 AND identifier=? ";
160 AND identifier=? ";
161 $self->{RedmineQuery} = trim($query);
161 $self->{RedmineQuery} = trim($query);
162 }
162 }
163
163
164 sub RedmineDbUser { set_val('RedmineDbUser', @_); }
164 sub RedmineDbUser { set_val('RedmineDbUser', @_); }
165 sub RedmineDbPass { set_val('RedmineDbPass', @_); }
165 sub RedmineDbPass { set_val('RedmineDbPass', @_); }
166 sub RedmineDbWhereClause {
166 sub RedmineDbWhereClause {
167 my ($self, $parms, $arg) = @_;
167 my ($self, $parms, $arg) = @_;
168 $self->{RedmineQuery} = trim($self->{RedmineQuery}.($arg ? $arg : "")." ");
168 $self->{RedmineQuery} = trim($self->{RedmineQuery}.($arg ? $arg : "")." ");
169 }
169 }
170
170
171 sub RedmineCacheCredsMax {
171 sub RedmineCacheCredsMax {
172 my ($self, $parms, $arg) = @_;
172 my ($self, $parms, $arg) = @_;
173 if ($arg) {
173 if ($arg) {
174 $self->{RedmineCachePool} = APR::Pool->new;
174 $self->{RedmineCachePool} = APR::Pool->new;
175 $self->{RedmineCacheCreds} = APR::Table::make($self->{RedmineCachePool}, $arg);
175 $self->{RedmineCacheCreds} = APR::Table::make($self->{RedmineCachePool}, $arg);
176 $self->{RedmineCacheCredsCount} = 0;
176 $self->{RedmineCacheCredsCount} = 0;
177 $self->{RedmineCacheCredsMax} = $arg;
177 $self->{RedmineCacheCredsMax} = $arg;
178 }
178 }
179 }
179 }
180
180
181 sub trim {
181 sub trim {
182 my $string = shift;
182 my $string = shift;
183 $string =~ s/\s{2,}/ /g;
183 $string =~ s/\s{2,}/ /g;
184 return $string;
184 return $string;
185 }
185 }
186
186
187 sub set_val {
187 sub set_val {
188 my ($key, $self, $parms, $arg) = @_;
188 my ($key, $self, $parms, $arg) = @_;
189 $self->{$key} = $arg;
189 $self->{$key} = $arg;
190 }
190 }
191
191
192 Apache2::Module::add(__PACKAGE__, \@directives);
192 Apache2::Module::add(__PACKAGE__, \@directives);
193
193
194
194
195 my %read_only_methods = map { $_ => 1 } qw/GET PROPFIND REPORT OPTIONS/;
195 my %read_only_methods = map { $_ => 1 } qw/GET PROPFIND REPORT OPTIONS/;
196
196
197 sub access_handler {
197 sub access_handler {
198 my $r = shift;
198 my $r = shift;
199
199
200 unless ($r->some_auth_required) {
200 unless ($r->some_auth_required) {
201 $r->log_reason("No authentication has been configured");
201 $r->log_reason("No authentication has been configured");
202 return FORBIDDEN;
202 return FORBIDDEN;
203 }
203 }
204
204
205 my $method = $r->method;
205 my $method = $r->method;
206 return OK unless defined $read_only_methods{$method};
206 return OK unless defined $read_only_methods{$method};
207
207
208 my $project_id = get_project_identifier($r);
208 my $project_id = get_project_identifier($r);
209
209
210 $r->set_handlers(PerlAuthenHandler => [\&OK])
210 $r->set_handlers(PerlAuthenHandler => [\&OK])
211 if is_public_project($project_id, $r);
211 if is_public_project($project_id, $r);
212
212
213 return OK
213 return OK
214 }
214 }
215
215
216 sub authen_handler {
216 sub authen_handler {
217 my $r = shift;
217 my $r = shift;
218
218
219 my ($res, $redmine_pass) = $r->get_basic_auth_pw();
219 my ($res, $redmine_pass) = $r->get_basic_auth_pw();
220 return $res unless $res == OK;
220 return $res unless $res == OK;
221
221
222 if (is_member($r->user, $redmine_pass, $r)) {
222 if (is_member($r->user, $redmine_pass, $r)) {
223 return OK;
223 return OK;
224 } else {
224 } else {
225 $r->note_auth_failure();
225 $r->note_auth_failure();
226 return AUTH_REQUIRED;
226 return AUTH_REQUIRED;
227 }
227 }
228 }
228 }
229
229
230 sub is_public_project {
230 sub is_public_project {
231 my $project_id = shift;
231 my $project_id = shift;
232 my $r = shift;
232 my $r = shift;
233
233
234 my $dbh = connect_database($r);
234 my $dbh = connect_database($r);
235 my $sth = $dbh->prepare(
235 my $sth = $dbh->prepare(
236 "SELECT is_public FROM projects WHERE projects.identifier = ?;"
236 "SELECT is_public FROM projects WHERE projects.identifier = ?;"
237 );
237 );
238
238
239 $sth->execute($project_id);
239 $sth->execute($project_id);
240 my $ret = 0;
240 my $ret = 0;
241 if (my @row = $sth->fetchrow_array) {
241 if (my @row = $sth->fetchrow_array) {
242 if ($row[0] eq "1" || $row[0] eq "t") {
242 if ($row[0] eq "1" || $row[0] eq "t") {
243 $ret = 1;
243 $ret = 1;
244 }
244 }
245 }
245 }
246 $sth->finish();
246 $sth->finish();
247 undef $sth;
247 $dbh->disconnect();
248 $dbh->disconnect();
249 undef $dbh;
248
250
249 $ret;
251 $ret;
250 }
252 }
251
253
252 # perhaps we should use repository right (other read right) to check public access.
254 # perhaps we should use repository right (other read right) to check public access.
253 # it could be faster BUT it doesn't work for the moment.
255 # it could be faster BUT it doesn't work for the moment.
254 # sub is_public_project_by_file {
256 # sub is_public_project_by_file {
255 # my $project_id = shift;
257 # my $project_id = shift;
256 # my $r = shift;
258 # my $r = shift;
257
259
258 # my $tree = Apache2::Directive::conftree();
260 # my $tree = Apache2::Directive::conftree();
259 # my $node = $tree->lookup('Location', $r->location);
261 # my $node = $tree->lookup('Location', $r->location);
260 # my $hash = $node->as_hash;
262 # my $hash = $node->as_hash;
261
263
262 # my $svnparentpath = $hash->{SVNParentPath};
264 # my $svnparentpath = $hash->{SVNParentPath};
263 # my $repos_path = $svnparentpath . "/" . $project_id;
265 # my $repos_path = $svnparentpath . "/" . $project_id;
264 # return 1 if (stat($repos_path))[2] & 00007;
266 # return 1 if (stat($repos_path))[2] & 00007;
265 # }
267 # }
266
268
267 sub is_member {
269 sub is_member {
268 my $redmine_user = shift;
270 my $redmine_user = shift;
269 my $redmine_pass = shift;
271 my $redmine_pass = shift;
270 my $r = shift;
272 my $r = shift;
271
273
272 my $dbh = connect_database($r);
274 my $dbh = connect_database($r);
273 my $project_id = get_project_identifier($r);
275 my $project_id = get_project_identifier($r);
274
276
275 my $pass_digest = Digest::SHA1::sha1_hex($redmine_pass);
277 my $pass_digest = Digest::SHA1::sha1_hex($redmine_pass);
276
278
277 my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config);
279 my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config);
278 my $usrprojpass;
280 my $usrprojpass;
279 if ($cfg->{RedmineCacheCredsMax}) {
281 if ($cfg->{RedmineCacheCredsMax}) {
280 $usrprojpass = $cfg->{RedmineCacheCreds}->get($redmine_user.":".$project_id);
282 $usrprojpass = $cfg->{RedmineCacheCreds}->get($redmine_user.":".$project_id);
281 return 1 if (defined $usrprojpass and ($usrprojpass eq $pass_digest));
283 return 1 if (defined $usrprojpass and ($usrprojpass eq $pass_digest));
282 }
284 }
283 my $query = $cfg->{RedmineQuery};
285 my $query = $cfg->{RedmineQuery};
284 my $sth = $dbh->prepare($query);
286 my $sth = $dbh->prepare($query);
285 $sth->execute($redmine_user, $project_id);
287 $sth->execute($redmine_user, $project_id);
286
288
287 my $ret;
289 my $ret;
288 while (my ($hashed_password, $auth_source_id, $permissions) = $sth->fetchrow_array) {
290 while (my ($hashed_password, $auth_source_id, $permissions) = $sth->fetchrow_array) {
289
291
290 unless ($auth_source_id) {
292 unless ($auth_source_id) {
291 my $method = $r->method;
293 my $method = $r->method;
292 if ($hashed_password eq $pass_digest && ((defined $read_only_methods{$method} && $permissions =~ /:browse_repository/) || $permissions =~ /:commit_access/) ) {
294 if ($hashed_password eq $pass_digest && ((defined $read_only_methods{$method} && $permissions =~ /:browse_repository/) || $permissions =~ /:commit_access/) ) {
293 $ret = 1;
295 $ret = 1;
294 last;
296 last;
295 }
297 }
296 } elsif ($CanUseLDAPAuth) {
298 } elsif ($CanUseLDAPAuth) {
297 my $sthldap = $dbh->prepare(
299 my $sthldap = $dbh->prepare(
298 "SELECT host,port,tls,account,account_password,base_dn,attr_login from auth_sources WHERE id = ?;"
300 "SELECT host,port,tls,account,account_password,base_dn,attr_login from auth_sources WHERE id = ?;"
299 );
301 );
300 $sthldap->execute($auth_source_id);
302 $sthldap->execute($auth_source_id);
301 while (my @rowldap = $sthldap->fetchrow_array) {
303 while (my @rowldap = $sthldap->fetchrow_array) {
302 my $ldap = Authen::Simple::LDAP->new(
304 my $ldap = Authen::Simple::LDAP->new(
303 host => ($rowldap[2] eq "1" || $rowldap[2] eq "t") ? "ldaps://$rowldap[0]" : $rowldap[0],
305 host => ($rowldap[2] eq "1" || $rowldap[2] eq "t") ? "ldaps://$rowldap[0]" : $rowldap[0],
304 port => $rowldap[1],
306 port => $rowldap[1],
305 basedn => $rowldap[5],
307 basedn => $rowldap[5],
306 binddn => $rowldap[3] ? $rowldap[3] : "",
308 binddn => $rowldap[3] ? $rowldap[3] : "",
307 bindpw => $rowldap[4] ? $rowldap[4] : "",
309 bindpw => $rowldap[4] ? $rowldap[4] : "",
308 filter => "(".$rowldap[6]."=%s)"
310 filter => "(".$rowldap[6]."=%s)"
309 );
311 );
310 $ret = 1 if ($ldap->authenticate($redmine_user, $redmine_pass));
312 $ret = 1 if ($ldap->authenticate($redmine_user, $redmine_pass));
311 }
313 }
312 $sthldap->finish();
314 $sthldap->finish();
315 undef $sthldap;
313 }
316 }
314 }
317 }
315 $sth->finish();
318 $sth->finish();
319 undef $sth;
316 $dbh->disconnect();
320 $dbh->disconnect();
321 undef $dbh;
317
322
318 if ($cfg->{RedmineCacheCredsMax} and $ret) {
323 if ($cfg->{RedmineCacheCredsMax} and $ret) {
319 if (defined $usrprojpass) {
324 if (defined $usrprojpass) {
320 $cfg->{RedmineCacheCreds}->set($redmine_user.":".$project_id, $pass_digest);
325 $cfg->{RedmineCacheCreds}->set($redmine_user.":".$project_id, $pass_digest);
321 } else {
326 } else {
322 if ($cfg->{RedmineCacheCredsCount} < $cfg->{RedmineCacheCredsMax}) {
327 if ($cfg->{RedmineCacheCredsCount} < $cfg->{RedmineCacheCredsMax}) {
323 $cfg->{RedmineCacheCreds}->set($redmine_user.":".$project_id, $pass_digest);
328 $cfg->{RedmineCacheCreds}->set($redmine_user.":".$project_id, $pass_digest);
324 $cfg->{RedmineCacheCredsCount}++;
329 $cfg->{RedmineCacheCredsCount}++;
325 } else {
330 } else {
326 $cfg->{RedmineCacheCreds}->clear();
331 $cfg->{RedmineCacheCreds}->clear();
327 $cfg->{RedmineCacheCredsCount} = 0;
332 $cfg->{RedmineCacheCredsCount} = 0;
328 }
333 }
329 }
334 }
330 }
335 }
331
336
332 $ret;
337 $ret;
333 }
338 }
334
339
335 sub get_project_identifier {
340 sub get_project_identifier {
336 my $r = shift;
341 my $r = shift;
337
342
338 my $location = $r->location;
343 my $location = $r->location;
339 my ($identifier) = $r->uri =~ m{$location/*([^/]+)};
344 my ($identifier) = $r->uri =~ m{$location/*([^/]+)};
340 $identifier;
345 $identifier;
341 }
346 }
342
347
343 sub connect_database {
348 sub connect_database {
344 my $r = shift;
349 my $r = shift;
345
350
346 my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config);
351 my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config);
347 return DBI->connect($cfg->{RedmineDSN}, $cfg->{RedmineDbUser}, $cfg->{RedmineDbPass});
352 return DBI->connect($cfg->{RedmineDSN}, $cfg->{RedmineDbUser}, $cfg->{RedmineDbPass});
348 }
353 }
349
354
350 1;
355 1;
@@ -1,850 +1,852
1 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
1 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
2
2
3 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
3 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
4 h1 {margin:0; padding:0; font-size: 24px;}
4 h1 {margin:0; padding:0; font-size: 24px;}
5 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
5 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
6 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
6 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
7 h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
7 h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
8
8
9 /***** Layout *****/
9 /***** Layout *****/
10 #wrapper {background: white;}
10 #wrapper {background: white;}
11
11
12 #top-menu {background: #2C4056; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
12 #top-menu {background: #2C4056; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
13 #top-menu ul {margin: 0; padding: 0;}
13 #top-menu ul {margin: 0; padding: 0;}
14 #top-menu li {
14 #top-menu li {
15 float:left;
15 float:left;
16 list-style-type:none;
16 list-style-type:none;
17 margin: 0px 0px 0px 0px;
17 margin: 0px 0px 0px 0px;
18 padding: 0px 0px 0px 0px;
18 padding: 0px 0px 0px 0px;
19 white-space:nowrap;
19 white-space:nowrap;
20 }
20 }
21 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
21 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
22 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
22 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
23
23
24 #account {float:right;}
24 #account {float:right;}
25
25
26 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative;}
26 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative;}
27 #header a {color:#f8f8f8;}
27 #header a {color:#f8f8f8;}
28 #header h1 a.ancestor { font-size: 80%; }
28 #header h1 a.ancestor { font-size: 80%; }
29 #quick-search {float:right;}
29 #quick-search {float:right;}
30
30
31 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
31 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
32 #main-menu ul {margin: 0; padding: 0;}
32 #main-menu ul {margin: 0; padding: 0;}
33 #main-menu li {
33 #main-menu li {
34 float:left;
34 float:left;
35 list-style-type:none;
35 list-style-type:none;
36 margin: 0px 2px 0px 0px;
36 margin: 0px 2px 0px 0px;
37 padding: 0px 0px 0px 0px;
37 padding: 0px 0px 0px 0px;
38 white-space:nowrap;
38 white-space:nowrap;
39 }
39 }
40 #main-menu li a {
40 #main-menu li a {
41 display: block;
41 display: block;
42 color: #fff;
42 color: #fff;
43 text-decoration: none;
43 text-decoration: none;
44 font-weight: bold;
44 font-weight: bold;
45 margin: 0;
45 margin: 0;
46 padding: 4px 10px 4px 10px;
46 padding: 4px 10px 4px 10px;
47 }
47 }
48 #main-menu li a:hover {background:#759FCF; color:#fff;}
48 #main-menu li a:hover {background:#759FCF; color:#fff;}
49 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
49 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
50
50
51 #admin-menu ul {margin: 0; padding: 0;}
51 #admin-menu ul {margin: 0; padding: 0;}
52 #admin-menu li {margin: 0; padding: 0 0 12px 0; list-style-type:none;}
52 #admin-menu li {margin: 0; padding: 0 0 12px 0; list-style-type:none;}
53
53
54 #admin-menu a { background-position: 0% 40%; background-repeat: no-repeat; padding-left: 20px; padding-top: 2px; padding-bottom: 3px;}
54 #admin-menu a { background-position: 0% 40%; background-repeat: no-repeat; padding-left: 20px; padding-top: 2px; padding-bottom: 3px;}
55 #admin-menu a.projects { background-image: url(../images/projects.png); }
55 #admin-menu a.projects { background-image: url(../images/projects.png); }
56 #admin-menu a.users { background-image: url(../images/user.png); }
56 #admin-menu a.users { background-image: url(../images/user.png); }
57 #admin-menu a.groups { background-image: url(../images/group.png); }
57 #admin-menu a.groups { background-image: url(../images/group.png); }
58 #admin-menu a.roles { background-image: url(../images/database_key.png); }
58 #admin-menu a.roles { background-image: url(../images/database_key.png); }
59 #admin-menu a.trackers { background-image: url(../images/ticket.png); }
59 #admin-menu a.trackers { background-image: url(../images/ticket.png); }
60 #admin-menu a.issue_statuses { background-image: url(../images/ticket_edit.png); }
60 #admin-menu a.issue_statuses { background-image: url(../images/ticket_edit.png); }
61 #admin-menu a.workflows { background-image: url(../images/ticket_go.png); }
61 #admin-menu a.workflows { background-image: url(../images/ticket_go.png); }
62 #admin-menu a.custom_fields { background-image: url(../images/textfield.png); }
62 #admin-menu a.custom_fields { background-image: url(../images/textfield.png); }
63 #admin-menu a.enumerations { background-image: url(../images/text_list_bullets.png); }
63 #admin-menu a.enumerations { background-image: url(../images/text_list_bullets.png); }
64 #admin-menu a.settings { background-image: url(../images/changeset.png); }
64 #admin-menu a.settings { background-image: url(../images/changeset.png); }
65 #admin-menu a.plugins { background-image: url(../images/plugin.png); }
65 #admin-menu a.plugins { background-image: url(../images/plugin.png); }
66 #admin-menu a.info { background-image: url(../images/help.png); }
66 #admin-menu a.info { background-image: url(../images/help.png); }
67
67
68 #main {background-color:#EEEEEE;}
68 #main {background-color:#EEEEEE;}
69
69
70 #sidebar{ float: right; width: 17%; position: relative; z-index: 9; min-height: 600px; padding: 0; margin: 0;}
70 #sidebar{ float: right; width: 17%; position: relative; z-index: 9; min-height: 600px; padding: 0; margin: 0;}
71 * html #sidebar{ width: 17%; }
71 * html #sidebar{ width: 17%; }
72 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
72 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
73 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
73 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
74 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
74 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
75
75
76 #content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
76 #content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
77 * html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
77 * html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
78 html>body #content { min-height: 600px; overflow: auto; }
78 html>body #content { min-height: 600px; overflow: auto; }
79 * html body #content { height: 600px; } /* IE */
79 * html body #content { height: 600px; } /* IE */
80
80
81 #main.nosidebar #sidebar{ display: none; }
81 #main.nosidebar #sidebar{ display: none; }
82 #main.nosidebar #content{ width: auto; border-right: 0; }
82 #main.nosidebar #content{ width: auto; border-right: 0; }
83
83
84 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
84 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
85
85
86 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
86 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
87 #login-form table td {padding: 6px;}
87 #login-form table td {padding: 6px;}
88 #login-form label {font-weight: bold;}
88 #login-form label {font-weight: bold;}
89 #login-form input#username, #login-form input#password { width: 300px; }
89 #login-form input#username, #login-form input#password { width: 300px; }
90
90
91 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
91 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
92
92
93 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
93 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
94
94
95 /***** Links *****/
95 /***** Links *****/
96 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
96 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
97 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
97 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
98 a img{ border: 0; }
98 a img{ border: 0; }
99
99
100 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
100 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
101
101
102 /***** Tables *****/
102 /***** Tables *****/
103 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
103 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
104 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
104 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
105 table.list td { vertical-align: top; }
105 table.list td { vertical-align: top; }
106 table.list td.id { width: 2%; text-align: center;}
106 table.list td.id { width: 2%; text-align: center;}
107 table.list td.checkbox { width: 15px; padding: 0px;}
107 table.list td.checkbox { width: 15px; padding: 0px;}
108 table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; }
108 table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; }
109 table.list td.buttons a { padding-right: 0.6em; }
109 table.list td.buttons a { padding-right: 0.6em; }
110
110
111 tr.project td.name a { padding-left: 16px; white-space:nowrap; }
111 tr.project td.name a { padding-left: 16px; white-space:nowrap; }
112 tr.project.parent td.name a { background: url('../images/bullet_toggle_minus.png') no-repeat; }
112 tr.project.parent td.name a { background: url('../images/bullet_toggle_minus.png') no-repeat; }
113
113
114 tr.issue { text-align: center; white-space: nowrap; }
114 tr.issue { text-align: center; white-space: nowrap; }
115 tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; }
115 tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; }
116 tr.issue td.subject { text-align: left; }
116 tr.issue td.subject { text-align: left; }
117 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
117 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
118
118
119 tr.entry { border: 1px solid #f8f8f8; }
119 tr.entry { border: 1px solid #f8f8f8; }
120 tr.entry td { white-space: nowrap; }
120 tr.entry td { white-space: nowrap; }
121 tr.entry td.filename { width: 30%; }
121 tr.entry td.filename { width: 30%; }
122 tr.entry td.size { text-align: right; font-size: 90%; }
122 tr.entry td.size { text-align: right; font-size: 90%; }
123 tr.entry td.revision, tr.entry td.author { text-align: center; }
123 tr.entry td.revision, tr.entry td.author { text-align: center; }
124 tr.entry td.age { text-align: right; }
124 tr.entry td.age { text-align: right; }
125 tr.entry.file td.filename a { margin-left: 16px; }
125 tr.entry.file td.filename a { margin-left: 16px; }
126
126
127 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
127 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
128 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
128 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
129
129
130 tr.changeset td.author { text-align: center; width: 15%; }
130 tr.changeset td.author { text-align: center; width: 15%; }
131 tr.changeset td.committed_on { text-align: center; width: 15%; }
131 tr.changeset td.committed_on { text-align: center; width: 15%; }
132
132
133 table.files tr.file td { text-align: center; }
133 table.files tr.file td { text-align: center; }
134 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
134 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
135 table.files tr.file td.digest { font-size: 80%; }
135 table.files tr.file td.digest { font-size: 80%; }
136
136
137 table.members td.roles, table.memberships td.roles { width: 45%; }
137 table.members td.roles, table.memberships td.roles { width: 45%; }
138
138
139 tr.message { height: 2.6em; }
139 tr.message { height: 2.6em; }
140 tr.message td.last_message { font-size: 80%; }
140 tr.message td.last_message { font-size: 80%; }
141 tr.message.locked td.subject a { background-image: url(../images/locked.png); }
141 tr.message.locked td.subject a { background-image: url(../images/locked.png); }
142 tr.message.sticky td.subject a { background-image: url(../images/sticky.png); font-weight: bold; }
142 tr.message.sticky td.subject a { background-image: url(../images/sticky.png); font-weight: bold; }
143
143
144 tr.version.closed, tr.version.closed a { color: #999; }
144 tr.version.closed, tr.version.closed a { color: #999; }
145 tr.version td.name { padding-left: 20px; }
145 tr.version td.name { padding-left: 20px; }
146 tr.version.shared td.name { background: url(../images/link.png) no-repeat 0% 70%; }
146 tr.version.shared td.name { background: url(../images/link.png) no-repeat 0% 70%; }
147 tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; }
147 tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; }
148
148
149 tr.user td { width:13%; }
149 tr.user td { width:13%; }
150 tr.user td.email { width:18%; }
150 tr.user td.email { width:18%; }
151 tr.user td { white-space: nowrap; }
151 tr.user td { white-space: nowrap; }
152 tr.user.locked, tr.user.registered { color: #aaa; }
152 tr.user.locked, tr.user.registered { color: #aaa; }
153 tr.user.locked a, tr.user.registered a { color: #aaa; }
153 tr.user.locked a, tr.user.registered a { color: #aaa; }
154
154
155 tr.time-entry { text-align: center; white-space: nowrap; }
155 tr.time-entry { text-align: center; white-space: nowrap; }
156 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
156 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
157 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
157 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
158 td.hours .hours-dec { font-size: 0.9em; }
158 td.hours .hours-dec { font-size: 0.9em; }
159
159
160 table.plugins td { vertical-align: middle; }
160 table.plugins td { vertical-align: middle; }
161 table.plugins td.configure { text-align: right; padding-right: 1em; }
161 table.plugins td.configure { text-align: right; padding-right: 1em; }
162 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
162 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
163 table.plugins span.description { display: block; font-size: 0.9em; }
163 table.plugins span.description { display: block; font-size: 0.9em; }
164 table.plugins span.url { display: block; font-size: 0.9em; }
164 table.plugins span.url { display: block; font-size: 0.9em; }
165
165
166 table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; }
166 table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; }
167 table.list tbody tr.group span.count { color: #aaa; font-size: 80%; }
167 table.list tbody tr.group span.count { color: #aaa; font-size: 80%; }
168
168
169 table.list tbody tr:hover { background-color:#ffffdd; }
169 table.list tbody tr:hover { background-color:#ffffdd; }
170 table.list tbody tr.group:hover { background-color:inherit; }
170 table.list tbody tr.group:hover { background-color:inherit; }
171 table td {padding:2px;}
171 table td {padding:2px;}
172 table p {margin:0;}
172 table p {margin:0;}
173 .odd {background-color:#f6f7f8;}
173 .odd {background-color:#f6f7f8;}
174 .even {background-color: #fff;}
174 .even {background-color: #fff;}
175
175
176 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
176 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
177 a.sort.asc { background-image: url(../images/sort_asc.png); }
177 a.sort.asc { background-image: url(../images/sort_asc.png); }
178 a.sort.desc { background-image: url(../images/sort_desc.png); }
178 a.sort.desc { background-image: url(../images/sort_desc.png); }
179
179
180 table.attributes { width: 100% }
180 table.attributes { width: 100% }
181 table.attributes th { vertical-align: top; text-align: left; }
181 table.attributes th { vertical-align: top; text-align: left; }
182 table.attributes td { vertical-align: top; }
182 table.attributes td { vertical-align: top; }
183
183
184 table.boards a.board, h3.comments { background: url(../images/comment.png) no-repeat 0% 50%; padding-left: 20px; }
184 table.boards a.board, h3.comments { background: url(../images/comment.png) no-repeat 0% 50%; padding-left: 20px; }
185
185
186 td.center {text-align:center;}
186 td.center {text-align:center;}
187
187
188 h3.version { background: url(../images/package.png) no-repeat 0% 50%; padding-left: 20px; }
188 h3.version { background: url(../images/package.png) no-repeat 0% 50%; padding-left: 20px; }
189
189
190 div.issues h3 { background: url(../images/ticket.png) no-repeat 0% 50%; padding-left: 20px; }
190 div.issues h3 { background: url(../images/ticket.png) no-repeat 0% 50%; padding-left: 20px; }
191 div.members h3 { background: url(../images/group.png) no-repeat 0% 50%; padding-left: 20px; }
191 div.members h3 { background: url(../images/group.png) no-repeat 0% 50%; padding-left: 20px; }
192 div.news h3 { background: url(../images/news.png) no-repeat 0% 50%; padding-left: 20px; }
192 div.news h3 { background: url(../images/news.png) no-repeat 0% 50%; padding-left: 20px; }
193 div.projects h3 { background: url(../images/projects.png) no-repeat 0% 50%; padding-left: 20px; }
193 div.projects h3 { background: url(../images/projects.png) no-repeat 0% 50%; padding-left: 20px; }
194
194
195 .highlight { background-color: #FCFD8D;}
195 .highlight { background-color: #FCFD8D;}
196 .highlight.token-1 { background-color: #faa;}
196 .highlight.token-1 { background-color: #faa;}
197 .highlight.token-2 { background-color: #afa;}
197 .highlight.token-2 { background-color: #afa;}
198 .highlight.token-3 { background-color: #aaf;}
198 .highlight.token-3 { background-color: #aaf;}
199
199
200 .box{
200 .box{
201 padding:6px;
201 padding:6px;
202 margin-bottom: 10px;
202 margin-bottom: 10px;
203 background-color:#f6f6f6;
203 background-color:#f6f6f6;
204 color:#505050;
204 color:#505050;
205 line-height:1.5em;
205 line-height:1.5em;
206 border: 1px solid #e4e4e4;
206 border: 1px solid #e4e4e4;
207 }
207 }
208
208
209 div.square {
209 div.square {
210 border: 1px solid #999;
210 border: 1px solid #999;
211 float: left;
211 float: left;
212 margin: .3em .4em 0 .4em;
212 margin: .3em .4em 0 .4em;
213 overflow: hidden;
213 overflow: hidden;
214 width: .6em; height: .6em;
214 width: .6em; height: .6em;
215 }
215 }
216 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
216 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
217 .contextual input, .contextual select {font-size:0.9em;}
217 .contextual input, .contextual select {font-size:0.9em;}
218 .message .contextual { margin-top: 0; }
218 .message .contextual { margin-top: 0; }
219
219
220 .splitcontentleft{float:left; width:49%;}
220 .splitcontentleft{float:left; width:49%;}
221 .splitcontentright{float:right; width:49%;}
221 .splitcontentright{float:right; width:49%;}
222 form {display: inline;}
222 form {display: inline;}
223 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
223 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
224 fieldset {border: 1px solid #e4e4e4; margin:0;}
224 fieldset {border: 1px solid #e4e4e4; margin:0;}
225 legend {color: #484848;}
225 legend {color: #484848;}
226 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
226 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
227 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
227 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
228 blockquote blockquote { margin-left: 0;}
228 blockquote blockquote { margin-left: 0;}
229 acronym { border-bottom: 1px dotted; cursor: help; }
229 acronym { border-bottom: 1px dotted; cursor: help; }
230 textarea.wiki-edit { width: 99%; }
230 textarea.wiki-edit { width: 99%; }
231 li p {margin-top: 0;}
231 li p {margin-top: 0;}
232 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
232 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
233 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
233 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
234 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
234 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
235 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
235 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
236
236
237 fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; }
237 fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; }
238 fieldset.collapsible legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
238 fieldset.collapsible legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
239 fieldset.collapsible.collapsed legend { background-image: url(../images/arrow_collapsed.png); }
239 fieldset.collapsible.collapsed legend { background-image: url(../images/arrow_collapsed.png); }
240
240
241 fieldset#date-range p { margin: 2px 0 2px 0; }
241 fieldset#date-range p { margin: 2px 0 2px 0; }
242 fieldset#filters table { border-collapse: collapse; }
242 fieldset#filters table { border-collapse: collapse; }
243 fieldset#filters table td { padding: 0; vertical-align: middle; }
243 fieldset#filters table td { padding: 0; vertical-align: middle; }
244 fieldset#filters tr.filter { height: 2em; }
244 fieldset#filters tr.filter { height: 2em; }
245 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
245 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
246 .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
246 .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
247
247
248 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
248 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
249 div#issue-changesets .changeset { padding: 4px;}
249 div#issue-changesets .changeset { padding: 4px;}
250 div#issue-changesets .changeset { border-bottom: 1px solid #ddd; }
250 div#issue-changesets .changeset { border-bottom: 1px solid #ddd; }
251 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
251 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
252
252
253 div#activity dl, #search-results { margin-left: 2em; }
253 div#activity dl, #search-results { margin-left: 2em; }
254 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
254 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
255 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
255 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
256 div#activity dt.me .time { border-bottom: 1px solid #999; }
256 div#activity dt.me .time { border-bottom: 1px solid #999; }
257 div#activity dt .time { color: #777; font-size: 80%; }
257 div#activity dt .time { color: #777; font-size: 80%; }
258 div#activity dd .description, #search-results dd .description { font-style: italic; }
258 div#activity dd .description, #search-results dd .description { font-style: italic; }
259 div#activity span.project:after, #search-results span.project:after { content: " -"; }
259 div#activity span.project:after, #search-results span.project:after { content: " -"; }
260 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
260 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
261
261
262 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
262 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
263
263
264 div#search-results-counts {float:right;}
264 div#search-results-counts {float:right;}
265 div#search-results-counts ul { margin-top: 0.5em; }
265 div#search-results-counts ul { margin-top: 0.5em; }
266 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
266 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
267
267
268 dt.issue { background-image: url(../images/ticket.png); }
268 dt.issue { background-image: url(../images/ticket.png); }
269 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
269 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
270 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
270 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
271 dt.issue-note { background-image: url(../images/ticket_note.png); }
271 dt.issue-note { background-image: url(../images/ticket_note.png); }
272 dt.changeset { background-image: url(../images/changeset.png); }
272 dt.changeset { background-image: url(../images/changeset.png); }
273 dt.news { background-image: url(../images/news.png); }
273 dt.news { background-image: url(../images/news.png); }
274 dt.message { background-image: url(../images/message.png); }
274 dt.message { background-image: url(../images/message.png); }
275 dt.reply { background-image: url(../images/comments.png); }
275 dt.reply { background-image: url(../images/comments.png); }
276 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
276 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
277 dt.attachment { background-image: url(../images/attachment.png); }
277 dt.attachment { background-image: url(../images/attachment.png); }
278 dt.document { background-image: url(../images/document.png); }
278 dt.document { background-image: url(../images/document.png); }
279 dt.project { background-image: url(../images/projects.png); }
279 dt.project { background-image: url(../images/projects.png); }
280 dt.time-entry { background-image: url(../images/time.png); }
280 dt.time-entry { background-image: url(../images/time.png); }
281
281
282 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
282 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
283
283
284 div#roadmap fieldset.related-issues { margin-bottom: 1em; }
284 div#roadmap fieldset.related-issues { margin-bottom: 1em; }
285 div#roadmap fieldset.related-issues ul { margin-top: 0.3em; margin-bottom: 0.3em; }
285 div#roadmap fieldset.related-issues ul { margin-top: 0.3em; margin-bottom: 0.3em; }
286 div#roadmap .wiki h1:first-child { display: none; }
286 div#roadmap .wiki h1:first-child { display: none; }
287 div#roadmap .wiki h1 { font-size: 120%; }
287 div#roadmap .wiki h1 { font-size: 120%; }
288 div#roadmap .wiki h2 { font-size: 110%; }
288 div#roadmap .wiki h2 { font-size: 110%; }
289
289
290 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
290 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
291 div#version-summary fieldset { margin-bottom: 1em; }
291 div#version-summary fieldset { margin-bottom: 1em; }
292 div#version-summary .total-hours { text-align: right; }
292 div#version-summary .total-hours { text-align: right; }
293
293
294 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
294 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
295 table#time-report tbody tr { font-style: italic; color: #777; }
295 table#time-report tbody tr { font-style: italic; color: #777; }
296 table#time-report tbody tr.last-level { font-style: normal; color: #555; }
296 table#time-report tbody tr.last-level { font-style: normal; color: #555; }
297 table#time-report tbody tr.total { font-style: normal; font-weight: bold; color: #555; background-color:#EEEEEE; }
297 table#time-report tbody tr.total { font-style: normal; font-weight: bold; color: #555; background-color:#EEEEEE; }
298 table#time-report .hours-dec { font-size: 0.9em; }
298 table#time-report .hours-dec { font-size: 0.9em; }
299
299
300 form#issue-form .attributes { margin-bottom: 8px; }
300 form#issue-form .attributes { margin-bottom: 8px; }
301 form#issue-form .attributes p { padding-top: 1px; padding-bottom: 2px; }
301 form#issue-form .attributes p { padding-top: 1px; padding-bottom: 2px; }
302 form#issue-form .attributes select { min-width: 30%; }
302 form#issue-form .attributes select { min-width: 30%; }
303
303
304 ul.projects { margin: 0; padding-left: 1em; }
304 ul.projects { margin: 0; padding-left: 1em; }
305 ul.projects.root { margin: 0; padding: 0; }
305 ul.projects.root { margin: 0; padding: 0; }
306 ul.projects ul { border-left: 3px solid #e0e0e0; }
306 ul.projects ul { border-left: 3px solid #e0e0e0; }
307 ul.projects li { list-style-type:none; }
307 ul.projects li { list-style-type:none; }
308 ul.projects li.root { margin-bottom: 1em; }
308 ul.projects li.root { margin-bottom: 1em; }
309 ul.projects li.child { margin-top: 1em;}
309 ul.projects li.child { margin-top: 1em;}
310 ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
310 ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
311 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
311 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
312
312
313 #tracker_project_ids ul { margin: 0; padding-left: 1em; }
313 #tracker_project_ids ul { margin: 0; padding-left: 1em; }
314 #tracker_project_ids li { list-style-type:none; }
314 #tracker_project_ids li { list-style-type:none; }
315
315
316 ul.properties {padding:0; font-size: 0.9em; color: #777;}
316 ul.properties {padding:0; font-size: 0.9em; color: #777;}
317 ul.properties li {list-style-type:none;}
317 ul.properties li {list-style-type:none;}
318 ul.properties li span {font-style:italic;}
318 ul.properties li span {font-style:italic;}
319
319
320 .total-hours { font-size: 110%; font-weight: bold; }
320 .total-hours { font-size: 110%; font-weight: bold; }
321 .total-hours span.hours-int { font-size: 120%; }
321 .total-hours span.hours-int { font-size: 120%; }
322
322
323 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
323 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
324 #user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
324 #user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
325
325
326 #workflow_copy_form select { width: 200px; }
326 #workflow_copy_form select { width: 200px; }
327
327
328 .pagination {font-size: 90%}
328 .pagination {font-size: 90%}
329 p.pagination {margin-top:8px;}
329 p.pagination {margin-top:8px;}
330
330
331 /***** Tabular forms ******/
331 /***** Tabular forms ******/
332 .tabular p{
332 .tabular p{
333 margin: 0;
333 margin: 0;
334 padding: 5px 0 8px 0;
334 padding: 5px 0 8px 0;
335 padding-left: 180px; /*width of left column containing the label elements*/
335 padding-left: 180px; /*width of left column containing the label elements*/
336 height: 1%;
336 height: 1%;
337 clear:left;
337 clear:left;
338 }
338 }
339
339
340 html>body .tabular p {overflow:hidden;}
340 html>body .tabular p {overflow:hidden;}
341
341
342 .tabular label{
342 .tabular label{
343 font-weight: bold;
343 font-weight: bold;
344 float: left;
344 float: left;
345 text-align: right;
345 text-align: right;
346 margin-left: -180px; /*width of left column*/
346 margin-left: -180px; /*width of left column*/
347 width: 175px; /*width of labels. Should be smaller than left column to create some right
347 width: 175px; /*width of labels. Should be smaller than left column to create some right
348 margin*/
348 margin*/
349 }
349 }
350
350
351 .tabular label.floating{
351 .tabular label.floating{
352 font-weight: normal;
352 font-weight: normal;
353 margin-left: 0px;
353 margin-left: 0px;
354 text-align: left;
354 text-align: left;
355 width: 270px;
355 width: 270px;
356 }
356 }
357
357
358 .tabular label.block{
358 .tabular label.block{
359 font-weight: normal;
359 font-weight: normal;
360 margin-left: 0px !important;
360 margin-left: 0px !important;
361 text-align: left;
361 text-align: left;
362 float: none;
362 float: none;
363 display: block;
363 display: block;
364 width: auto;
364 width: auto;
365 }
365 }
366
366
367 input#time_entry_comments { width: 90%;}
367 input#time_entry_comments { width: 90%;}
368
368
369 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
369 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
370
370
371 .tabular.settings p{ padding-left: 300px; }
371 .tabular.settings p{ padding-left: 300px; }
372 .tabular.settings label{ margin-left: -300px; width: 295px; }
372 .tabular.settings label{ margin-left: -300px; width: 295px; }
373 .tabular.settings textarea { width: 99%; }
373 .tabular.settings textarea { width: 99%; }
374
374
375 fieldset.settings label { display: block; }
375 fieldset.settings label { display: block; }
376
376
377 .required {color: #bb0000;}
377 .required {color: #bb0000;}
378 .summary {font-style: italic;}
378 .summary {font-style: italic;}
379
379
380 #attachments_fields input[type=text] {margin-left: 8px; }
380 #attachments_fields input[type=text] {margin-left: 8px; }
381
381
382 div.attachments { margin-top: 12px; }
382 div.attachments { margin-top: 12px; }
383 div.attachments p { margin:4px 0 2px 0; }
383 div.attachments p { margin:4px 0 2px 0; }
384 div.attachments img { vertical-align: middle; }
384 div.attachments img { vertical-align: middle; }
385 div.attachments span.author { font-size: 0.9em; color: #888; }
385 div.attachments span.author { font-size: 0.9em; color: #888; }
386
386
387 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
387 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
388 .other-formats span + span:before { content: "| "; }
388 .other-formats span + span:before { content: "| "; }
389
389
390 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
390 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
391
391
392 /* Project members tab */
392 /* Project members tab */
393 div#tab-content-members .splitcontentleft, div#tab-content-memberships .splitcontentleft, div#tab-content-users .splitcontentleft { width: 64% }
393 div#tab-content-members .splitcontentleft, div#tab-content-memberships .splitcontentleft, div#tab-content-users .splitcontentleft { width: 64% }
394 div#tab-content-members .splitcontentright, div#tab-content-memberships .splitcontentright, div#tab-content-users .splitcontentright { width: 34% }
394 div#tab-content-members .splitcontentright, div#tab-content-memberships .splitcontentright, div#tab-content-users .splitcontentright { width: 34% }
395 div#tab-content-members fieldset, div#tab-content-memberships fieldset, div#tab-content-users fieldset { padding:1em; margin-bottom: 1em; }
395 div#tab-content-members fieldset, div#tab-content-memberships fieldset, div#tab-content-users fieldset { padding:1em; margin-bottom: 1em; }
396 div#tab-content-members fieldset legend, div#tab-content-memberships fieldset legend, div#tab-content-users fieldset legend { font-weight: bold; }
396 div#tab-content-members fieldset legend, div#tab-content-memberships fieldset legend, div#tab-content-users fieldset legend { font-weight: bold; }
397 div#tab-content-members fieldset label, div#tab-content-memberships fieldset label, div#tab-content-users fieldset label { display: block; }
397 div#tab-content-members fieldset label, div#tab-content-memberships fieldset label, div#tab-content-users fieldset label { display: block; }
398 div#tab-content-members fieldset div, div#tab-content-users fieldset div { max-height: 400px; overflow:auto; }
398 div#tab-content-members fieldset div, div#tab-content-users fieldset div { max-height: 400px; overflow:auto; }
399
399
400 table.members td.group { padding-left: 20px; background: url(../images/group.png) no-repeat 0% 50%; }
400 table.members td.group { padding-left: 20px; background: url(../images/group.png) no-repeat 0% 50%; }
401
401
402 * html div#tab-content-members fieldset div { height: 450px; }
402 * html div#tab-content-members fieldset div { height: 450px; }
403
403
404 /***** Flash & error messages ****/
404 /***** Flash & error messages ****/
405 #errorExplanation, div.flash, .nodata, .warning {
405 #errorExplanation, div.flash, .nodata, .warning {
406 padding: 4px 4px 4px 30px;
406 padding: 4px 4px 4px 30px;
407 margin-bottom: 12px;
407 margin-bottom: 12px;
408 font-size: 1.1em;
408 font-size: 1.1em;
409 border: 2px solid;
409 border: 2px solid;
410 }
410 }
411
411
412 div.flash {margin-top: 8px;}
412 div.flash {margin-top: 8px;}
413
413
414 div.flash.error, #errorExplanation {
414 div.flash.error, #errorExplanation {
415 background: url(../images/exclamation.png) 8px 50% no-repeat;
415 background: url(../images/exclamation.png) 8px 50% no-repeat;
416 background-color: #ffe3e3;
416 background-color: #ffe3e3;
417 border-color: #dd0000;
417 border-color: #dd0000;
418 color: #880000;
418 color: #880000;
419 }
419 }
420
420
421 div.flash.notice {
421 div.flash.notice {
422 background: url(../images/true.png) 8px 5px no-repeat;
422 background: url(../images/true.png) 8px 5px no-repeat;
423 background-color: #dfffdf;
423 background-color: #dfffdf;
424 border-color: #9fcf9f;
424 border-color: #9fcf9f;
425 color: #005f00;
425 color: #005f00;
426 }
426 }
427
427
428 div.flash.warning {
428 div.flash.warning {
429 background: url(../images/warning.png) 8px 5px no-repeat;
429 background: url(../images/warning.png) 8px 5px no-repeat;
430 background-color: #FFEBC1;
430 background-color: #FFEBC1;
431 border-color: #FDBF3B;
431 border-color: #FDBF3B;
432 color: #A6750C;
432 color: #A6750C;
433 text-align: left;
433 text-align: left;
434 }
434 }
435
435
436 .nodata, .warning {
436 .nodata, .warning {
437 text-align: center;
437 text-align: center;
438 background-color: #FFEBC1;
438 background-color: #FFEBC1;
439 border-color: #FDBF3B;
439 border-color: #FDBF3B;
440 color: #A6750C;
440 color: #A6750C;
441 }
441 }
442
442
443 #errorExplanation ul { font-size: 0.9em;}
443 #errorExplanation ul { font-size: 0.9em;}
444 #errorExplanation h2, #errorExplanation p { display: none; }
444 #errorExplanation h2, #errorExplanation p { display: none; }
445
445
446 /***** Ajax indicator ******/
446 /***** Ajax indicator ******/
447 #ajax-indicator {
447 #ajax-indicator {
448 position: absolute; /* fixed not supported by IE */
448 position: absolute; /* fixed not supported by IE */
449 background-color:#eee;
449 background-color:#eee;
450 border: 1px solid #bbb;
450 border: 1px solid #bbb;
451 top:35%;
451 top:35%;
452 left:40%;
452 left:40%;
453 width:20%;
453 width:20%;
454 font-weight:bold;
454 font-weight:bold;
455 text-align:center;
455 text-align:center;
456 padding:0.6em;
456 padding:0.6em;
457 z-index:100;
457 z-index:100;
458 filter:alpha(opacity=50);
458 filter:alpha(opacity=50);
459 opacity: 0.5;
459 opacity: 0.5;
460 }
460 }
461
461
462 html>body #ajax-indicator { position: fixed; }
462 html>body #ajax-indicator { position: fixed; }
463
463
464 #ajax-indicator span {
464 #ajax-indicator span {
465 background-position: 0% 40%;
465 background-position: 0% 40%;
466 background-repeat: no-repeat;
466 background-repeat: no-repeat;
467 background-image: url(../images/loading.gif);
467 background-image: url(../images/loading.gif);
468 padding-left: 26px;
468 padding-left: 26px;
469 vertical-align: bottom;
469 vertical-align: bottom;
470 }
470 }
471
471
472 /***** Calendar *****/
472 /***** Calendar *****/
473 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
473 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
474 table.cal thead th {width: 14%;}
474 table.cal thead th {width: 14%;}
475 table.cal tbody tr {height: 100px;}
475 table.cal tbody tr {height: 100px;}
476 table.cal th { background-color:#EEEEEE; padding: 4px; }
476 table.cal th { background-color:#EEEEEE; padding: 4px; }
477 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
477 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
478 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
478 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
479 table.cal td.odd p.day-num {color: #bbb;}
479 table.cal td.odd p.day-num {color: #bbb;}
480 table.cal td.today {background:#ffffdd;}
480 table.cal td.today {background:#ffffdd;}
481 table.cal td.today p.day-num {font-weight: bold;}
481 table.cal td.today p.day-num {font-weight: bold;}
482
482
483 /***** Tooltips ******/
483 /***** Tooltips ******/
484 .tooltip{position:relative;z-index:24;}
484 .tooltip{position:relative;z-index:24;}
485 .tooltip:hover{z-index:25;color:#000;}
485 .tooltip:hover{z-index:25;color:#000;}
486 .tooltip span.tip{display: none; text-align:left;}
486 .tooltip span.tip{display: none; text-align:left;}
487
487
488 div.tooltip:hover span.tip{
488 div.tooltip:hover span.tip{
489 display:block;
489 display:block;
490 position:absolute;
490 position:absolute;
491 top:12px; left:24px; width:270px;
491 top:12px; left:24px; width:270px;
492 border:1px solid #555;
492 border:1px solid #555;
493 background-color:#fff;
493 background-color:#fff;
494 padding: 4px;
494 padding: 4px;
495 font-size: 0.8em;
495 font-size: 0.8em;
496 color:#505050;
496 color:#505050;
497 }
497 }
498
498
499 /***** Progress bar *****/
499 /***** Progress bar *****/
500 table.progress {
500 table.progress {
501 border: 1px solid #D7D7D7;
501 border: 1px solid #D7D7D7;
502 border-collapse: collapse;
502 border-collapse: collapse;
503 border-spacing: 0pt;
503 border-spacing: 0pt;
504 empty-cells: show;
504 empty-cells: show;
505 text-align: center;
505 text-align: center;
506 float:left;
506 float:left;
507 margin: 1px 6px 1px 0px;
507 margin: 1px 6px 1px 0px;
508 }
508 }
509
509
510 table.progress td { height: 0.9em; }
510 table.progress td { height: 0.9em; }
511 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
511 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
512 table.progress td.done { background: #DEF0DE none repeat scroll 0%; }
512 table.progress td.done { background: #DEF0DE none repeat scroll 0%; }
513 table.progress td.open { background: #FFF none repeat scroll 0%; }
513 table.progress td.open { background: #FFF none repeat scroll 0%; }
514 p.pourcent {font-size: 80%;}
514 p.pourcent {font-size: 80%;}
515 p.progress-info {clear: left; font-style: italic; font-size: 80%;}
515 p.progress-info {clear: left; font-style: italic; font-size: 80%;}
516
516
517 /***** Tabs *****/
517 /***** Tabs *****/
518 #content .tabs {height: 2.6em; border-bottom: 1px solid #bbbbbb; margin-bottom:1.2em; position:relative; overflow:hidden;}
518 #content .tabs {height: 2.6em; border-bottom: 1px solid #bbbbbb; margin-bottom:1.2em; position:relative; overflow:hidden;}
519 #content .tabs ul {margin:0; position:absolute; bottom:-2px; padding-left:1em; width: 2000px;}
519 #content .tabs ul {margin:0; position:absolute; bottom:-2px; padding-left:1em; width: 2000px;}
520 #content .tabs>ul { bottom:-1px; } /* others */
520 #content .tabs>ul { bottom:-1px; } /* others */
521 #content .tabs ul li {
521 #content .tabs ul li {
522 float:left;
522 float:left;
523 list-style-type:none;
523 list-style-type:none;
524 white-space:nowrap;
524 white-space:nowrap;
525 margin-right:8px;
525 margin-right:8px;
526 background:#fff;
526 background:#fff;
527 }
527 }
528 #content .tabs ul li a{
528 #content .tabs ul li a{
529 display:block;
529 display:block;
530 font-size: 0.9em;
530 font-size: 0.9em;
531 text-decoration:none;
531 text-decoration:none;
532 line-height:1.3em;
532 line-height:1.3em;
533 padding:4px 6px 4px 6px;
533 padding:4px 6px 4px 6px;
534 border: 1px solid #ccc;
534 border: 1px solid #ccc;
535 border-bottom: 1px solid #bbbbbb;
535 border-bottom: 1px solid #bbbbbb;
536 background-color: #eeeeee;
536 background-color: #eeeeee;
537 color:#777;
537 color:#777;
538 font-weight:bold;
538 font-weight:bold;
539 }
539 }
540
540
541 #content .tabs ul li a:hover {
541 #content .tabs ul li a:hover {
542 background-color: #ffffdd;
542 background-color: #ffffdd;
543 text-decoration:none;
543 text-decoration:none;
544 }
544 }
545
545
546 #content .tabs ul li a.selected {
546 #content .tabs ul li a.selected {
547 background-color: #fff;
547 background-color: #fff;
548 border: 1px solid #bbbbbb;
548 border: 1px solid #bbbbbb;
549 border-bottom: 1px solid #fff;
549 border-bottom: 1px solid #fff;
550 }
550 }
551
551
552 #content .tabs ul li a.selected:hover {
552 #content .tabs ul li a.selected:hover {
553 background-color: #fff;
553 background-color: #fff;
554 }
554 }
555
555
556 div.tabs-buttons { position:absolute; right: 0; width: 48px; height: 24px; background: white; bottom: -1px; }
556 div.tabs-buttons { position:absolute; right: 0; width: 48px; height: 24px; background: white; bottom: -1px; }
557
557
558 button.tab-left, button.tab-right {
558 button.tab-left, button.tab-right {
559 font-size: 0.9em;
559 font-size: 0.9em;
560 cursor: pointer;
560 cursor: pointer;
561 height:24px;
561 height:24px;
562 border: 1px solid #ccc;
562 border: 1px solid #ccc;
563 border-bottom: 1px solid #bbbbbb;
563 border-bottom: 1px solid #bbbbbb;
564 position:absolute;
564 position:absolute;
565 padding:4px;
565 padding:4px;
566 width: 20px;
566 width: 20px;
567 }
567 }
568
568
569 button.tab-left {
569 button.tab-left {
570 right: 20px;
570 right: 20px;
571 bottom: 0;
571 bottom: 0;
572 background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%;
572 background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%;
573 }
573 }
574
574
575 button.tab-right {
575 button.tab-right {
576 right: 0;
576 right: 0;
577 bottom: 0;
577 bottom: 0;
578 background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%;}
578 background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%;}
579 }
579 }
580
580
581 /***** Auto-complete *****/
581 /***** Auto-complete *****/
582 div.autocomplete {
582 div.autocomplete {
583 position:absolute;
583 position:absolute;
584 width:250px;
584 width:250px;
585 background-color:white;
585 background-color:white;
586 margin:0;
586 margin:0;
587 padding:0;
587 padding:0;
588 }
588 }
589 div.autocomplete ul {
589 div.autocomplete ul {
590 list-style-type:none;
590 list-style-type:none;
591 margin:0;
591 margin:0;
592 padding:0;
592 padding:0;
593 }
593 }
594 div.autocomplete ul li.selected { background-color: #ffb;}
594 div.autocomplete ul li.selected { background-color: #ffb;}
595 div.autocomplete ul li {
595 div.autocomplete ul li {
596 list-style-type:none;
596 list-style-type:none;
597 display:block;
597 display:block;
598 margin:0;
598 margin:0;
599 padding:2px;
599 padding:2px;
600 cursor:pointer;
600 cursor:pointer;
601 font-size: 90%;
601 font-size: 90%;
602 border-bottom: 1px solid #ccc;
602 border-bottom: 1px solid #ccc;
603 border-left: 1px solid #ccc;
603 border-left: 1px solid #ccc;
604 border-right: 1px solid #ccc;
604 border-right: 1px solid #ccc;
605 }
605 }
606 div.autocomplete ul li span.informal {
606 div.autocomplete ul li span.informal {
607 font-size: 80%;
607 font-size: 80%;
608 color: #aaa;
608 color: #aaa;
609 }
609 }
610
610
611 /***** Diff *****/
611 /***** Diff *****/
612 .diff_out { background: #fcc; }
612 .diff_out { background: #fcc; }
613 .diff_in { background: #cfc; }
613 .diff_in { background: #cfc; }
614
614
615 /***** Wiki *****/
615 /***** Wiki *****/
616 div.wiki table {
616 div.wiki table {
617 border: 1px solid #505050;
617 border: 1px solid #505050;
618 border-collapse: collapse;
618 border-collapse: collapse;
619 margin-bottom: 1em;
619 margin-bottom: 1em;
620 }
620 }
621
621
622 div.wiki table, div.wiki td, div.wiki th {
622 div.wiki table, div.wiki td, div.wiki th {
623 border: 1px solid #bbb;
623 border: 1px solid #bbb;
624 padding: 4px;
624 padding: 4px;
625 }
625 }
626
626
627 div.wiki .external {
627 div.wiki .external {
628 background-position: 0% 60%;
628 background-position: 0% 60%;
629 background-repeat: no-repeat;
629 background-repeat: no-repeat;
630 padding-left: 12px;
630 padding-left: 12px;
631 background-image: url(../images/external.png);
631 background-image: url(../images/external.png);
632 }
632 }
633
633
634 div.wiki a.new {
634 div.wiki a.new {
635 color: #b73535;
635 color: #b73535;
636 }
636 }
637
637
638 div.wiki pre {
638 div.wiki pre {
639 margin: 1em 1em 1em 1.6em;
639 margin: 1em 1em 1em 1.6em;
640 padding: 2px;
640 padding: 2px;
641 background-color: #fafafa;
641 background-color: #fafafa;
642 border: 1px solid #dadada;
642 border: 1px solid #dadada;
643 width:95%;
643 width:95%;
644 overflow-x: auto;
644 overflow-x: auto;
645 }
645 }
646
646
647 div.wiki ul.toc {
647 div.wiki ul.toc {
648 background-color: #ffffdd;
648 background-color: #ffffdd;
649 border: 1px solid #e4e4e4;
649 border: 1px solid #e4e4e4;
650 padding: 4px;
650 padding: 4px;
651 line-height: 1.2em;
651 line-height: 1.2em;
652 margin-bottom: 12px;
652 margin-bottom: 12px;
653 margin-right: 12px;
653 margin-right: 12px;
654 margin-left: 0;
654 margin-left: 0;
655 display: table
655 display: table
656 }
656 }
657 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
657 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
658
658
659 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
659 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
660 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
660 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
661 div.wiki ul.toc li { list-style-type:none;}
661 div.wiki ul.toc li { list-style-type:none;}
662 div.wiki ul.toc li.heading2 { margin-left: 6px; }
662 div.wiki ul.toc li.heading2 { margin-left: 6px; }
663 div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; }
663 div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; }
664
664
665 div.wiki ul.toc a {
665 div.wiki ul.toc a {
666 font-size: 0.9em;
666 font-size: 0.9em;
667 font-weight: normal;
667 font-weight: normal;
668 text-decoration: none;
668 text-decoration: none;
669 color: #606060;
669 color: #606060;
670 }
670 }
671 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
671 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
672
672
673 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
673 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
674 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
674 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
675 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
675 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
676
676
677 div.wiki img { vertical-align: middle; }
678
677 /***** My page layout *****/
679 /***** My page layout *****/
678 .block-receiver {
680 .block-receiver {
679 border:1px dashed #c0c0c0;
681 border:1px dashed #c0c0c0;
680 margin-bottom: 20px;
682 margin-bottom: 20px;
681 padding: 15px 0 15px 0;
683 padding: 15px 0 15px 0;
682 }
684 }
683
685
684 .mypage-box {
686 .mypage-box {
685 margin:0 0 20px 0;
687 margin:0 0 20px 0;
686 color:#505050;
688 color:#505050;
687 line-height:1.5em;
689 line-height:1.5em;
688 }
690 }
689
691
690 .handle {
692 .handle {
691 cursor: move;
693 cursor: move;
692 }
694 }
693
695
694 a.close-icon {
696 a.close-icon {
695 display:block;
697 display:block;
696 margin-top:3px;
698 margin-top:3px;
697 overflow:hidden;
699 overflow:hidden;
698 width:12px;
700 width:12px;
699 height:12px;
701 height:12px;
700 background-repeat: no-repeat;
702 background-repeat: no-repeat;
701 cursor:pointer;
703 cursor:pointer;
702 background-image:url('../images/close.png');
704 background-image:url('../images/close.png');
703 }
705 }
704
706
705 a.close-icon:hover {
707 a.close-icon:hover {
706 background-image:url('../images/close_hl.png');
708 background-image:url('../images/close_hl.png');
707 }
709 }
708
710
709 /***** Gantt chart *****/
711 /***** Gantt chart *****/
710 .gantt_hdr {
712 .gantt_hdr {
711 position:absolute;
713 position:absolute;
712 top:0;
714 top:0;
713 height:16px;
715 height:16px;
714 border-top: 1px solid #c0c0c0;
716 border-top: 1px solid #c0c0c0;
715 border-bottom: 1px solid #c0c0c0;
717 border-bottom: 1px solid #c0c0c0;
716 border-right: 1px solid #c0c0c0;
718 border-right: 1px solid #c0c0c0;
717 text-align: center;
719 text-align: center;
718 overflow: hidden;
720 overflow: hidden;
719 }
721 }
720
722
721 .task {
723 .task {
722 position: absolute;
724 position: absolute;
723 height:8px;
725 height:8px;
724 font-size:0.8em;
726 font-size:0.8em;
725 color:#888;
727 color:#888;
726 padding:0;
728 padding:0;
727 margin:0;
729 margin:0;
728 line-height:0.8em;
730 line-height:0.8em;
729 }
731 }
730
732
731 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
733 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
732 .task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; }
734 .task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; }
733 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
735 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
734 .milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; }
736 .milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; }
735
737
736 /***** Icons *****/
738 /***** Icons *****/
737 .icon {
739 .icon {
738 background-position: 0% 50%;
740 background-position: 0% 50%;
739 background-repeat: no-repeat;
741 background-repeat: no-repeat;
740 padding-left: 20px;
742 padding-left: 20px;
741 padding-top: 2px;
743 padding-top: 2px;
742 padding-bottom: 3px;
744 padding-bottom: 3px;
743 }
745 }
744
746
745 .icon-add { background-image: url(../images/add.png); }
747 .icon-add { background-image: url(../images/add.png); }
746 .icon-edit { background-image: url(../images/edit.png); }
748 .icon-edit { background-image: url(../images/edit.png); }
747 .icon-copy { background-image: url(../images/copy.png); }
749 .icon-copy { background-image: url(../images/copy.png); }
748 .icon-duplicate { background-image: url(../images/duplicate.png); }
750 .icon-duplicate { background-image: url(../images/duplicate.png); }
749 .icon-del { background-image: url(../images/delete.png); }
751 .icon-del { background-image: url(../images/delete.png); }
750 .icon-move { background-image: url(../images/move.png); }
752 .icon-move { background-image: url(../images/move.png); }
751 .icon-save { background-image: url(../images/save.png); }
753 .icon-save { background-image: url(../images/save.png); }
752 .icon-cancel { background-image: url(../images/cancel.png); }
754 .icon-cancel { background-image: url(../images/cancel.png); }
753 .icon-multiple { background-image: url(../images/table_multiple.png); }
755 .icon-multiple { background-image: url(../images/table_multiple.png); }
754 .icon-folder { background-image: url(../images/folder.png); }
756 .icon-folder { background-image: url(../images/folder.png); }
755 .open .icon-folder { background-image: url(../images/folder_open.png); }
757 .open .icon-folder { background-image: url(../images/folder_open.png); }
756 .icon-package { background-image: url(../images/package.png); }
758 .icon-package { background-image: url(../images/package.png); }
757 .icon-home { background-image: url(../images/home.png); }
759 .icon-home { background-image: url(../images/home.png); }
758 .icon-user { background-image: url(../images/user.png); }
760 .icon-user { background-image: url(../images/user.png); }
759 .icon-projects { background-image: url(../images/projects.png); }
761 .icon-projects { background-image: url(../images/projects.png); }
760 .icon-help { background-image: url(../images/help.png); }
762 .icon-help { background-image: url(../images/help.png); }
761 .icon-attachment { background-image: url(../images/attachment.png); }
763 .icon-attachment { background-image: url(../images/attachment.png); }
762 .icon-history { background-image: url(../images/history.png); }
764 .icon-history { background-image: url(../images/history.png); }
763 .icon-time { background-image: url(../images/time.png); }
765 .icon-time { background-image: url(../images/time.png); }
764 .icon-time-add { background-image: url(../images/time_add.png); }
766 .icon-time-add { background-image: url(../images/time_add.png); }
765 .icon-stats { background-image: url(../images/stats.png); }
767 .icon-stats { background-image: url(../images/stats.png); }
766 .icon-warning { background-image: url(../images/warning.png); }
768 .icon-warning { background-image: url(../images/warning.png); }
767 .icon-fav { background-image: url(../images/fav.png); }
769 .icon-fav { background-image: url(../images/fav.png); }
768 .icon-fav-off { background-image: url(../images/fav_off.png); }
770 .icon-fav-off { background-image: url(../images/fav_off.png); }
769 .icon-reload { background-image: url(../images/reload.png); }
771 .icon-reload { background-image: url(../images/reload.png); }
770 .icon-lock { background-image: url(../images/locked.png); }
772 .icon-lock { background-image: url(../images/locked.png); }
771 .icon-unlock { background-image: url(../images/unlock.png); }
773 .icon-unlock { background-image: url(../images/unlock.png); }
772 .icon-checked { background-image: url(../images/true.png); }
774 .icon-checked { background-image: url(../images/true.png); }
773 .icon-details { background-image: url(../images/zoom_in.png); }
775 .icon-details { background-image: url(../images/zoom_in.png); }
774 .icon-report { background-image: url(../images/report.png); }
776 .icon-report { background-image: url(../images/report.png); }
775 .icon-comment { background-image: url(../images/comment.png); }
777 .icon-comment { background-image: url(../images/comment.png); }
776 .icon-summary { background-image: url(../images/lightning.png); }
778 .icon-summary { background-image: url(../images/lightning.png); }
777
779
778 .icon-file { background-image: url(../images/files/default.png); }
780 .icon-file { background-image: url(../images/files/default.png); }
779 .icon-file.text-plain { background-image: url(../images/files/text.png); }
781 .icon-file.text-plain { background-image: url(../images/files/text.png); }
780 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
782 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
781 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
783 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
782 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
784 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
783 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
785 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
784 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
786 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
785 .icon-file.image-gif { background-image: url(../images/files/image.png); }
787 .icon-file.image-gif { background-image: url(../images/files/image.png); }
786 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
788 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
787 .icon-file.image-png { background-image: url(../images/files/image.png); }
789 .icon-file.image-png { background-image: url(../images/files/image.png); }
788 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
790 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
789 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
791 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
790 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
792 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
791 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
793 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
792
794
793 img.gravatar {
795 img.gravatar {
794 padding: 2px;
796 padding: 2px;
795 border: solid 1px #d5d5d5;
797 border: solid 1px #d5d5d5;
796 background: #fff;
798 background: #fff;
797 }
799 }
798
800
799 div.issue img.gravatar {
801 div.issue img.gravatar {
800 float: right;
802 float: right;
801 margin: 0 0 0 1em;
803 margin: 0 0 0 1em;
802 padding: 5px;
804 padding: 5px;
803 }
805 }
804
806
805 div.issue table img.gravatar {
807 div.issue table img.gravatar {
806 height: 14px;
808 height: 14px;
807 width: 14px;
809 width: 14px;
808 padding: 2px;
810 padding: 2px;
809 float: left;
811 float: left;
810 margin: 0 0.5em 0 0;
812 margin: 0 0.5em 0 0;
811 }
813 }
812
814
813 h2 img.gravatar {
815 h2 img.gravatar {
814 padding: 3px;
816 padding: 3px;
815 margin: -2px 4px 0 0;
817 margin: -2px 4px 0 0;
816 float: left;
818 float: left;
817 }
819 }
818
820
819 h4 img.gravatar {
821 h4 img.gravatar {
820 padding: 3px;
822 padding: 3px;
821 margin: -6px 4px 0 0;
823 margin: -6px 4px 0 0;
822 float: left;
824 float: left;
823 }
825 }
824
826
825 td.username img.gravatar {
827 td.username img.gravatar {
826 float: left;
828 float: left;
827 margin: 0 1em 0 0;
829 margin: 0 1em 0 0;
828 }
830 }
829
831
830 #activity dt img.gravatar {
832 #activity dt img.gravatar {
831 float: left;
833 float: left;
832 margin: 0 1em 1em 0;
834 margin: 0 1em 1em 0;
833 }
835 }
834
836
835 #activity dt,
837 #activity dt,
836 .journal {
838 .journal {
837 clear: left;
839 clear: left;
838 }
840 }
839
841
840 h2 img { vertical-align:middle; }
842 h2 img { vertical-align:middle; }
841
843
842 .hascontextmenu { cursor: context-menu; }
844 .hascontextmenu { cursor: context-menu; }
843
845
844 /***** Media print specific styles *****/
846 /***** Media print specific styles *****/
845 @media print {
847 @media print {
846 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
848 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
847 #main { background: #fff; }
849 #main { background: #fff; }
848 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
850 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
849 #wiki_add_attachment { display:none; }
851 #wiki_add_attachment { display:none; }
850 }
852 }
General Comments 0
You need to be logged in to leave comments. Login now