##// END OF EJS Templates
Merged r2574, r2578, r2589, r2615, r2641, r2645, r2646 from trunk....
Jean-Philippe Lang -
r2562:2679cc2045a7
parent child
Show More
@@ -1,68 +1,68
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006 Jean-Philippe Lang
2 # Copyright (C) 2006 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 class Journal < ActiveRecord::Base
18 class Journal < ActiveRecord::Base
19 belongs_to :journalized, :polymorphic => true
19 belongs_to :journalized, :polymorphic => true
20 # added as a quick fix to allow eager loading of the polymorphic association
20 # added as a quick fix to allow eager loading of the polymorphic association
21 # since always associated to an issue, for now
21 # since always associated to an issue, for now
22 belongs_to :issue, :foreign_key => :journalized_id
22 belongs_to :issue, :foreign_key => :journalized_id
23
23
24 belongs_to :user
24 belongs_to :user
25 has_many :details, :class_name => "JournalDetail", :dependent => :delete_all
25 has_many :details, :class_name => "JournalDetail", :dependent => :delete_all
26 attr_accessor :indice
26 attr_accessor :indice
27
27
28 acts_as_event :title => Proc.new {|o| status = ((s = o.new_status) ? " (#{s})" : nil); "#{o.issue.tracker} ##{o.issue.id}#{status}: #{o.issue.subject}" },
28 acts_as_event :title => Proc.new {|o| status = ((s = o.new_status) ? " (#{s})" : nil); "#{o.issue.tracker} ##{o.issue.id}#{status}: #{o.issue.subject}" },
29 :description => :notes,
29 :description => :notes,
30 :author => :user,
30 :author => :user,
31 :type => Proc.new {|o| (s = o.new_status) ? (s.is_closed? ? 'issue-closed' : 'issue-edit') : 'issue-note' },
31 :type => Proc.new {|o| (s = o.new_status) ? (s.is_closed? ? 'issue-closed' : 'issue-edit') : 'issue-note' },
32 :url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o.issue.id, :anchor => "change-#{o.id}"}}
32 :url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o.issue.id, :anchor => "change-#{o.id}"}}
33
33
34 acts_as_activity_provider :type => 'issues',
34 acts_as_activity_provider :type => 'issues',
35 :permission => :view_issues,
35 :permission => :view_issues,
36 :author_key => :user_id,
36 :author_key => :user_id,
37 :find_options => {:include => [{:issue => :project}, :details, :user],
37 :find_options => {:include => [{:issue => :project}, :details, :user],
38 :conditions => "#{Journal.table_name}.journalized_type = 'Issue' AND" +
38 :conditions => "#{Journal.table_name}.journalized_type = 'Issue' AND" +
39 " (#{JournalDetail.table_name}.prop_key = 'status_id' OR #{Journal.table_name}.notes <> '')"}
39 " (#{JournalDetail.table_name}.prop_key = 'status_id' OR #{Journal.table_name}.notes <> '')"}
40
40
41 def save
41 def save(*args)
42 # Do not save an empty journal
42 # Do not save an empty journal
43 (details.empty? && notes.blank?) ? false : super
43 (details.empty? && notes.blank?) ? false : super
44 end
44 end
45
45
46 # Returns the new status if the journal contains a status change, otherwise nil
46 # Returns the new status if the journal contains a status change, otherwise nil
47 def new_status
47 def new_status
48 c = details.detect {|detail| detail.prop_key == 'status_id'}
48 c = details.detect {|detail| detail.prop_key == 'status_id'}
49 (c && c.value) ? IssueStatus.find_by_id(c.value.to_i) : nil
49 (c && c.value) ? IssueStatus.find_by_id(c.value.to_i) : nil
50 end
50 end
51
51
52 def new_value_for(prop)
52 def new_value_for(prop)
53 c = details.detect {|detail| detail.prop_key == prop}
53 c = details.detect {|detail| detail.prop_key == prop}
54 c ? c.value : nil
54 c ? c.value : nil
55 end
55 end
56
56
57 def editable_by?(usr)
57 def editable_by?(usr)
58 usr && usr.logged? && (usr.allowed_to?(:edit_issue_notes, project) || (self.user == usr && usr.allowed_to?(:edit_own_issue_notes, project)))
58 usr && usr.logged? && (usr.allowed_to?(:edit_issue_notes, project) || (self.user == usr && usr.allowed_to?(:edit_own_issue_notes, project)))
59 end
59 end
60
60
61 def project
61 def project
62 journalized.respond_to?(:project) ? journalized.project : nil
62 journalized.respond_to?(:project) ? journalized.project : nil
63 end
63 end
64
64
65 def attachments
65 def attachments
66 journalized.respond_to?(:attachments) ? journalized.attachments : nil
66 journalized.respond_to?(:attachments) ? journalized.attachments : nil
67 end
67 end
68 end
68 end
@@ -1,36 +1,36
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2008 Jean-Philippe Lang
2 # Copyright (C) 2006-2008 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 class News < ActiveRecord::Base
18 class News < ActiveRecord::Base
19 belongs_to :project
19 belongs_to :project
20 belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
20 belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
21 has_many :comments, :as => :commented, :dependent => :delete_all, :order => "created_on"
21 has_many :comments, :as => :commented, :dependent => :delete_all, :order => "created_on"
22
22
23 validates_presence_of :title, :description
23 validates_presence_of :title, :description
24 validates_length_of :title, :maximum => 60
24 validates_length_of :title, :maximum => 60
25 validates_length_of :summary, :maximum => 255
25 validates_length_of :summary, :maximum => 255
26
26
27 acts_as_searchable :columns => ['title', "#{table_name}.description"], :include => :project
27 acts_as_searchable :columns => ['title', 'summary', "#{table_name}.description"], :include => :project
28 acts_as_event :url => Proc.new {|o| {:controller => 'news', :action => 'show', :id => o.id}}
28 acts_as_event :url => Proc.new {|o| {:controller => 'news', :action => 'show', :id => o.id}}
29 acts_as_activity_provider :find_options => {:include => [:project, :author]},
29 acts_as_activity_provider :find_options => {:include => [:project, :author]},
30 :author_key => :author_id
30 :author_key => :author_id
31
31
32 # returns latest news for projects visible by user
32 # returns latest news for projects visible by user
33 def self.latest(user = User.current, count = 5)
33 def self.latest(user = User.current, count = 5)
34 find(:all, :limit => count, :conditions => Project.allowed_to_condition(user, :view_news), :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC")
34 find(:all, :limit => count, :conditions => Project.allowed_to_condition(user, :view_news), :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC")
35 end
35 end
36 end
36 end
@@ -1,276 +1,276
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006 Jean-Philippe Lang
2 # Copyright (C) 2006 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 class Project < ActiveRecord::Base
18 class Project < ActiveRecord::Base
19 # Project statuses
19 # Project statuses
20 STATUS_ACTIVE = 1
20 STATUS_ACTIVE = 1
21 STATUS_ARCHIVED = 9
21 STATUS_ARCHIVED = 9
22
22
23 has_many :members, :include => :user, :conditions => "#{User.table_name}.status=#{User::STATUS_ACTIVE}"
23 has_many :members, :include => :user, :conditions => "#{User.table_name}.status=#{User::STATUS_ACTIVE}"
24 has_many :users, :through => :members
24 has_many :users, :through => :members
25 has_many :enabled_modules, :dependent => :delete_all
25 has_many :enabled_modules, :dependent => :delete_all
26 has_and_belongs_to_many :trackers, :order => "#{Tracker.table_name}.position"
26 has_and_belongs_to_many :trackers, :order => "#{Tracker.table_name}.position"
27 has_many :issues, :dependent => :destroy, :order => "#{Issue.table_name}.created_on DESC", :include => [:status, :tracker]
27 has_many :issues, :dependent => :destroy, :order => "#{Issue.table_name}.created_on DESC", :include => [:status, :tracker]
28 has_many :issue_changes, :through => :issues, :source => :journals
28 has_many :issue_changes, :through => :issues, :source => :journals
29 has_many :versions, :dependent => :destroy, :order => "#{Version.table_name}.effective_date DESC, #{Version.table_name}.name DESC"
29 has_many :versions, :dependent => :destroy, :order => "#{Version.table_name}.effective_date DESC, #{Version.table_name}.name DESC"
30 has_many :time_entries, :dependent => :delete_all
30 has_many :time_entries, :dependent => :delete_all
31 has_many :queries, :dependent => :delete_all
31 has_many :queries, :dependent => :delete_all
32 has_many :documents, :dependent => :destroy
32 has_many :documents, :dependent => :destroy
33 has_many :news, :dependent => :delete_all, :include => :author
33 has_many :news, :dependent => :delete_all, :include => :author
34 has_many :issue_categories, :dependent => :delete_all, :order => "#{IssueCategory.table_name}.name"
34 has_many :issue_categories, :dependent => :delete_all, :order => "#{IssueCategory.table_name}.name"
35 has_many :boards, :dependent => :destroy, :order => "position ASC"
35 has_many :boards, :dependent => :destroy, :order => "position ASC"
36 has_one :repository, :dependent => :destroy
36 has_one :repository, :dependent => :destroy
37 has_many :changesets, :through => :repository
37 has_many :changesets, :through => :repository
38 has_one :wiki, :dependent => :destroy
38 has_one :wiki, :dependent => :destroy
39 # Custom field for the project issues
39 # Custom field for the project issues
40 has_and_belongs_to_many :issue_custom_fields,
40 has_and_belongs_to_many :issue_custom_fields,
41 :class_name => 'IssueCustomField',
41 :class_name => 'IssueCustomField',
42 :order => "#{CustomField.table_name}.position",
42 :order => "#{CustomField.table_name}.position",
43 :join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}",
43 :join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}",
44 :association_foreign_key => 'custom_field_id'
44 :association_foreign_key => 'custom_field_id'
45
45
46 acts_as_tree :order => "name", :counter_cache => true
46 acts_as_tree :order => "name", :counter_cache => true
47 acts_as_attachable :view_permission => :view_files,
47 acts_as_attachable :view_permission => :view_files,
48 :delete_permission => :manage_files
48 :delete_permission => :manage_files
49
49
50 acts_as_customizable
50 acts_as_customizable
51 acts_as_searchable :columns => ['name', 'description'], :project_key => 'id', :permission => nil
51 acts_as_searchable :columns => ['name', 'description'], :project_key => 'id', :permission => nil
52 acts_as_event :title => Proc.new {|o| "#{l(:label_project)}: #{o.name}"},
52 acts_as_event :title => Proc.new {|o| "#{l(:label_project)}: #{o.name}"},
53 :url => Proc.new {|o| {:controller => 'projects', :action => 'show', :id => o.id}},
53 :url => Proc.new {|o| {:controller => 'projects', :action => 'show', :id => o.id}},
54 :author => nil
54 :author => nil
55
55
56 attr_protected :status, :enabled_module_names
56 attr_protected :status, :enabled_module_names
57
57
58 validates_presence_of :name, :identifier
58 validates_presence_of :name, :identifier
59 validates_uniqueness_of :name, :identifier
59 validates_uniqueness_of :name, :identifier
60 validates_associated :repository, :wiki
60 validates_associated :repository, :wiki
61 validates_length_of :name, :maximum => 30
61 validates_length_of :name, :maximum => 30
62 validates_length_of :homepage, :maximum => 255
62 validates_length_of :homepage, :maximum => 255
63 validates_length_of :identifier, :in => 2..20
63 validates_length_of :identifier, :in => 1..20
64 validates_format_of :identifier, :with => /^[a-z0-9\-]*$/
64 validates_format_of :identifier, :with => /^[a-z0-9\-]*$/
65
65
66 before_destroy :delete_all_members
66 before_destroy :delete_all_members
67
67
68 named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } }
68 named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } }
69
69
70 def identifier=(identifier)
70 def identifier=(identifier)
71 super unless identifier_frozen?
71 super unless identifier_frozen?
72 end
72 end
73
73
74 def identifier_frozen?
74 def identifier_frozen?
75 errors[:identifier].nil? && !(new_record? || identifier.blank?)
75 errors[:identifier].nil? && !(new_record? || identifier.blank?)
76 end
76 end
77
77
78 def issues_with_subprojects(include_subprojects=false)
78 def issues_with_subprojects(include_subprojects=false)
79 conditions = nil
79 conditions = nil
80 if include_subprojects
80 if include_subprojects
81 ids = [id] + child_ids
81 ids = [id] + child_ids
82 conditions = ["#{Project.table_name}.id IN (#{ids.join(',')}) AND #{Project.visible_by}"]
82 conditions = ["#{Project.table_name}.id IN (#{ids.join(',')}) AND #{Project.visible_by}"]
83 end
83 end
84 conditions ||= ["#{Project.table_name}.id = ?", id]
84 conditions ||= ["#{Project.table_name}.id = ?", id]
85 # Quick and dirty fix for Rails 2 compatibility
85 # Quick and dirty fix for Rails 2 compatibility
86 Issue.send(:with_scope, :find => { :conditions => conditions }) do
86 Issue.send(:with_scope, :find => { :conditions => conditions }) do
87 Version.send(:with_scope, :find => { :conditions => conditions }) do
87 Version.send(:with_scope, :find => { :conditions => conditions }) do
88 yield
88 yield
89 end
89 end
90 end
90 end
91 end
91 end
92
92
93 # returns latest created projects
93 # returns latest created projects
94 # non public projects will be returned only if user is a member of those
94 # non public projects will be returned only if user is a member of those
95 def self.latest(user=nil, count=5)
95 def self.latest(user=nil, count=5)
96 find(:all, :limit => count, :conditions => visible_by(user), :order => "created_on DESC")
96 find(:all, :limit => count, :conditions => visible_by(user), :order => "created_on DESC")
97 end
97 end
98
98
99 def self.visible_by(user=nil)
99 def self.visible_by(user=nil)
100 user ||= User.current
100 user ||= User.current
101 if user && user.admin?
101 if user && user.admin?
102 return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"
102 return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"
103 elsif user && user.memberships.any?
103 elsif user && user.memberships.any?
104 return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND (#{Project.table_name}.is_public = #{connection.quoted_true} or #{Project.table_name}.id IN (#{user.memberships.collect{|m| m.project_id}.join(',')}))"
104 return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND (#{Project.table_name}.is_public = #{connection.quoted_true} or #{Project.table_name}.id IN (#{user.memberships.collect{|m| m.project_id}.join(',')}))"
105 else
105 else
106 return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND #{Project.table_name}.is_public = #{connection.quoted_true}"
106 return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE} AND #{Project.table_name}.is_public = #{connection.quoted_true}"
107 end
107 end
108 end
108 end
109
109
110 def self.allowed_to_condition(user, permission, options={})
110 def self.allowed_to_condition(user, permission, options={})
111 statements = []
111 statements = []
112 base_statement = "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"
112 base_statement = "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"
113 if perm = Redmine::AccessControl.permission(permission)
113 if perm = Redmine::AccessControl.permission(permission)
114 unless perm.project_module.nil?
114 unless perm.project_module.nil?
115 # If the permission belongs to a project module, make sure the module is enabled
115 # If the permission belongs to a project module, make sure the module is enabled
116 base_statement << " AND EXISTS (SELECT em.id FROM #{EnabledModule.table_name} em WHERE em.name='#{perm.project_module}' AND em.project_id=#{Project.table_name}.id)"
116 base_statement << " AND EXISTS (SELECT em.id FROM #{EnabledModule.table_name} em WHERE em.name='#{perm.project_module}' AND em.project_id=#{Project.table_name}.id)"
117 end
117 end
118 end
118 end
119 if options[:project]
119 if options[:project]
120 project_statement = "#{Project.table_name}.id = #{options[:project].id}"
120 project_statement = "#{Project.table_name}.id = #{options[:project].id}"
121 project_statement << " OR #{Project.table_name}.parent_id = #{options[:project].id}" if options[:with_subprojects]
121 project_statement << " OR #{Project.table_name}.parent_id = #{options[:project].id}" if options[:with_subprojects]
122 base_statement = "(#{project_statement}) AND (#{base_statement})"
122 base_statement = "(#{project_statement}) AND (#{base_statement})"
123 end
123 end
124 if user.admin?
124 if user.admin?
125 # no restriction
125 # no restriction
126 else
126 else
127 statements << "1=0"
127 statements << "1=0"
128 if user.logged?
128 if user.logged?
129 statements << "#{Project.table_name}.is_public = #{connection.quoted_true}" if Role.non_member.allowed_to?(permission)
129 statements << "#{Project.table_name}.is_public = #{connection.quoted_true}" if Role.non_member.allowed_to?(permission)
130 allowed_project_ids = user.memberships.select {|m| m.role.allowed_to?(permission)}.collect {|m| m.project_id}
130 allowed_project_ids = user.memberships.select {|m| m.role.allowed_to?(permission)}.collect {|m| m.project_id}
131 statements << "#{Project.table_name}.id IN (#{allowed_project_ids.join(',')})" if allowed_project_ids.any?
131 statements << "#{Project.table_name}.id IN (#{allowed_project_ids.join(',')})" if allowed_project_ids.any?
132 elsif Role.anonymous.allowed_to?(permission)
132 elsif Role.anonymous.allowed_to?(permission)
133 # anonymous user allowed on public project
133 # anonymous user allowed on public project
134 statements << "#{Project.table_name}.is_public = #{connection.quoted_true}"
134 statements << "#{Project.table_name}.is_public = #{connection.quoted_true}"
135 else
135 else
136 # anonymous user is not authorized
136 # anonymous user is not authorized
137 end
137 end
138 end
138 end
139 statements.empty? ? base_statement : "((#{base_statement}) AND (#{statements.join(' OR ')}))"
139 statements.empty? ? base_statement : "((#{base_statement}) AND (#{statements.join(' OR ')}))"
140 end
140 end
141
141
142 def project_condition(with_subprojects)
142 def project_condition(with_subprojects)
143 cond = "#{Project.table_name}.id = #{id}"
143 cond = "#{Project.table_name}.id = #{id}"
144 cond = "(#{cond} OR #{Project.table_name}.parent_id = #{id})" if with_subprojects
144 cond = "(#{cond} OR #{Project.table_name}.parent_id = #{id})" if with_subprojects
145 cond
145 cond
146 end
146 end
147
147
148 def self.find(*args)
148 def self.find(*args)
149 if args.first && args.first.is_a?(String) && !args.first.match(/^\d*$/)
149 if args.first && args.first.is_a?(String) && !args.first.match(/^\d*$/)
150 project = find_by_identifier(*args)
150 project = find_by_identifier(*args)
151 raise ActiveRecord::RecordNotFound, "Couldn't find Project with identifier=#{args.first}" if project.nil?
151 raise ActiveRecord::RecordNotFound, "Couldn't find Project with identifier=#{args.first}" if project.nil?
152 project
152 project
153 else
153 else
154 super
154 super
155 end
155 end
156 end
156 end
157
157
158 def to_param
158 def to_param
159 # id is used for projects with a numeric identifier (compatibility)
159 # id is used for projects with a numeric identifier (compatibility)
160 @to_param ||= (identifier.to_s =~ %r{^\d*$} ? id : identifier)
160 @to_param ||= (identifier.to_s =~ %r{^\d*$} ? id : identifier)
161 end
161 end
162
162
163 def active?
163 def active?
164 self.status == STATUS_ACTIVE
164 self.status == STATUS_ACTIVE
165 end
165 end
166
166
167 def archive
167 def archive
168 # Archive subprojects if any
168 # Archive subprojects if any
169 children.each do |subproject|
169 children.each do |subproject|
170 subproject.archive
170 subproject.archive
171 end
171 end
172 update_attribute :status, STATUS_ARCHIVED
172 update_attribute :status, STATUS_ARCHIVED
173 end
173 end
174
174
175 def unarchive
175 def unarchive
176 return false if parent && !parent.active?
176 return false if parent && !parent.active?
177 update_attribute :status, STATUS_ACTIVE
177 update_attribute :status, STATUS_ACTIVE
178 end
178 end
179
179
180 def active_children
180 def active_children
181 children.select {|child| child.active?}
181 children.select {|child| child.active?}
182 end
182 end
183
183
184 # Returns an array of the trackers used by the project and its sub projects
184 # Returns an array of the trackers used by the project and its sub projects
185 def rolled_up_trackers
185 def rolled_up_trackers
186 @rolled_up_trackers ||=
186 @rolled_up_trackers ||=
187 Tracker.find(:all, :include => :projects,
187 Tracker.find(:all, :include => :projects,
188 :select => "DISTINCT #{Tracker.table_name}.*",
188 :select => "DISTINCT #{Tracker.table_name}.*",
189 :conditions => ["#{Project.table_name}.id = ? OR #{Project.table_name}.parent_id = ?", id, id],
189 :conditions => ["#{Project.table_name}.id = ? OR #{Project.table_name}.parent_id = ?", id, id],
190 :order => "#{Tracker.table_name}.position")
190 :order => "#{Tracker.table_name}.position")
191 end
191 end
192
192
193 # Deletes all project's members
193 # Deletes all project's members
194 def delete_all_members
194 def delete_all_members
195 Member.delete_all(['project_id = ?', id])
195 Member.delete_all(['project_id = ?', id])
196 end
196 end
197
197
198 # Users issues can be assigned to
198 # Users issues can be assigned to
199 def assignable_users
199 def assignable_users
200 members.select {|m| m.role.assignable?}.collect {|m| m.user}.sort
200 members.select {|m| m.role.assignable?}.collect {|m| m.user}.sort
201 end
201 end
202
202
203 # Returns the mail adresses of users that should be always notified on project events
203 # Returns the mail adresses of users that should be always notified on project events
204 def recipients
204 def recipients
205 members.select {|m| m.mail_notification? || m.user.mail_notification?}.collect {|m| m.user.mail}
205 members.select {|m| m.mail_notification? || m.user.mail_notification?}.collect {|m| m.user.mail}
206 end
206 end
207
207
208 # Returns an array of all custom fields enabled for project issues
208 # Returns an array of all custom fields enabled for project issues
209 # (explictly associated custom fields and custom fields enabled for all projects)
209 # (explictly associated custom fields and custom fields enabled for all projects)
210 def all_issue_custom_fields
210 def all_issue_custom_fields
211 @all_issue_custom_fields ||= (IssueCustomField.for_all + issue_custom_fields).uniq.sort
211 @all_issue_custom_fields ||= (IssueCustomField.for_all + issue_custom_fields).uniq.sort
212 end
212 end
213
213
214 def project
214 def project
215 self
215 self
216 end
216 end
217
217
218 def <=>(project)
218 def <=>(project)
219 name.downcase <=> project.name.downcase
219 name.downcase <=> project.name.downcase
220 end
220 end
221
221
222 def to_s
222 def to_s
223 name
223 name
224 end
224 end
225
225
226 # Returns a short description of the projects (first lines)
226 # Returns a short description of the projects (first lines)
227 def short_description(length = 255)
227 def short_description(length = 255)
228 description.gsub(/^(.{#{length}}[^\n]*).*$/m, '\1').strip if description
228 description.gsub(/^(.{#{length}}[^\n]*).*$/m, '\1').strip if description
229 end
229 end
230
230
231 def allows_to?(action)
231 def allows_to?(action)
232 if action.is_a? Hash
232 if action.is_a? Hash
233 allowed_actions.include? "#{action[:controller]}/#{action[:action]}"
233 allowed_actions.include? "#{action[:controller]}/#{action[:action]}"
234 else
234 else
235 allowed_permissions.include? action
235 allowed_permissions.include? action
236 end
236 end
237 end
237 end
238
238
239 def module_enabled?(module_name)
239 def module_enabled?(module_name)
240 module_name = module_name.to_s
240 module_name = module_name.to_s
241 enabled_modules.detect {|m| m.name == module_name}
241 enabled_modules.detect {|m| m.name == module_name}
242 end
242 end
243
243
244 def enabled_module_names=(module_names)
244 def enabled_module_names=(module_names)
245 enabled_modules.clear
245 enabled_modules.clear
246 module_names = [] unless module_names && module_names.is_a?(Array)
246 module_names = [] unless module_names && module_names.is_a?(Array)
247 module_names.each do |name|
247 module_names.each do |name|
248 enabled_modules << EnabledModule.new(:name => name.to_s)
248 enabled_modules << EnabledModule.new(:name => name.to_s)
249 end
249 end
250 end
250 end
251
251
252 # Returns an auto-generated project identifier based on the last identifier used
252 # Returns an auto-generated project identifier based on the last identifier used
253 def self.next_identifier
253 def self.next_identifier
254 p = Project.find(:first, :order => 'created_on DESC')
254 p = Project.find(:first, :order => 'created_on DESC')
255 p.nil? ? nil : p.identifier.to_s.succ
255 p.nil? ? nil : p.identifier.to_s.succ
256 end
256 end
257
257
258 protected
258 protected
259 def validate
259 def validate
260 errors.add(parent_id, " must be a root project") if parent and parent.parent
260 errors.add(parent_id, " must be a root project") if parent and parent.parent
261 errors.add_to_base("A project with subprojects can't be a subproject") if parent and children.size > 0
261 errors.add_to_base("A project with subprojects can't be a subproject") if parent and children.size > 0
262 errors.add(:identifier, :activerecord_error_invalid) if !identifier.blank? && identifier.match(/^\d*$/)
262 errors.add(:identifier, :activerecord_error_invalid) if !identifier.blank? && identifier.match(/^\d*$/)
263 end
263 end
264
264
265 private
265 private
266 def allowed_permissions
266 def allowed_permissions
267 @allowed_permissions ||= begin
267 @allowed_permissions ||= begin
268 module_names = enabled_modules.collect {|m| m.name}
268 module_names = enabled_modules.collect {|m| m.name}
269 Redmine::AccessControl.modules_permissions(module_names).collect {|p| p.name}
269 Redmine::AccessControl.modules_permissions(module_names).collect {|p| p.name}
270 end
270 end
271 end
271 end
272
272
273 def allowed_actions
273 def allowed_actions
274 @actions_allowed ||= allowed_permissions.inject([]) { |actions, permission| actions += Redmine::AccessControl.allowed_actions(permission) }.flatten
274 @actions_allowed ||= allowed_permissions.inject([]) { |actions, permission| actions += Redmine::AccessControl.allowed_actions(permission) }.flatten
275 end
275 end
276 end
276 end
@@ -1,26 +1,26
1 <h3><%= l(:label_issue_plural) %></h3>
1 <h3><%= l(:label_issue_plural) %></h3>
2 <%= link_to l(:label_issue_view_all), { :controller => 'issues', :action => 'index', :project_id => @project, :set_filter => 1 } %><br />
2 <%= link_to l(:label_issue_view_all), { :controller => 'issues', :action => 'index', :project_id => @project, :set_filter => 1 } %><br />
3 <% if @project %>
3 <% if @project %>
4 <%= link_to l(:field_summary), :controller => 'reports', :action => 'issue_report', :id => @project %><br />
4 <%= link_to l(:field_summary), :controller => 'reports', :action => 'issue_report', :id => @project %><br />
5 <%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %><br />
5 <%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %><br />
6 <% end %>
6 <% end %>
7 <%= call_hook(:view_issues_sidebar_issues_bottom) %>
7 <%= call_hook(:view_issues_sidebar_issues_bottom) %>
8
8
9 <% planning_links = []
9 <% planning_links = []
10 planning_links << link_to(l(:label_calendar), :action => 'calendar', :project_id => @project) if User.current.allowed_to?(:view_calendar, @project, :global => true)
10 planning_links << link_to(l(:label_calendar), :controller => 'issues', :action => 'calendar', :project_id => @project) if User.current.allowed_to?(:view_calendar, @project, :global => true)
11 planning_links << link_to(l(:label_gantt), :action => 'gantt', :project_id => @project) if User.current.allowed_to?(:view_gantt, @project, :global => true)
11 planning_links << link_to(l(:label_gantt), :controller => 'issues', :action => 'gantt', :project_id => @project) if User.current.allowed_to?(:view_gantt, @project, :global => true)
12 %>
12 %>
13 <% unless planning_links.empty? %>
13 <% unless planning_links.empty? %>
14 <h3><%= l(:label_planning) %></h3>
14 <h3><%= l(:label_planning) %></h3>
15 <p><%= planning_links.join(' | ') %></p>
15 <p><%= planning_links.join(' | ') %></p>
16 <%= call_hook(:view_issues_sidebar_planning_bottom) %>
16 <%= call_hook(:view_issues_sidebar_planning_bottom) %>
17 <% end %>
17 <% end %>
18
18
19 <% unless sidebar_queries.empty? -%>
19 <% unless sidebar_queries.empty? -%>
20 <h3><%= l(:label_query_plural) %></h3>
20 <h3><%= l(:label_query_plural) %></h3>
21
21
22 <% sidebar_queries.each do |query| -%>
22 <% sidebar_queries.each do |query| -%>
23 <%= link_to(h(query.name), :controller => 'issues', :action => 'index', :project_id => @project, :query_id => query) %><br />
23 <%= link_to(h(query.name), :controller => 'issues', :action => 'index', :project_id => @project, :query_id => query) %><br />
24 <% end -%>
24 <% end -%>
25 <%= call_hook(:view_issues_sidebar_queries_bottom) %>
25 <%= call_hook(:view_issues_sidebar_queries_bottom) %>
26 <% end -%>
26 <% end -%>
@@ -1,3 +1,3
1 <%= yield %>
1 <%= yield %>
2 ----------------------------------------
2 --
3 <%= Setting.emails_footer %>
3 <%= Setting.emails_footer %>
@@ -1,49 +1,49
1 <%= error_messages_for 'project' %>
1 <%= error_messages_for 'project' %>
2
2
3 <div class="box">
3 <div class="box">
4 <!--[form:project]-->
4 <!--[form:project]-->
5 <p><%= f.text_field :name, :required => true %><br /><em><%= l(:text_caracters_maximum, 30) %></em></p>
5 <p><%= f.text_field :name, :required => true %><br /><em><%= l(:text_caracters_maximum, 30) %></em></p>
6
6
7 <% if User.current.admin? and !@root_projects.empty? %>
7 <% if User.current.admin? and !@root_projects.empty? %>
8 <p><%= f.select :parent_id, (@root_projects.collect {|p| [p.name, p.id]}), { :include_blank => true } %></p>
8 <p><%= f.select :parent_id, (@root_projects.collect {|p| [p.name, p.id]}), { :include_blank => true } %></p>
9 <% end %>
9 <% end %>
10
10
11 <p><%= f.text_area :description, :rows => 5, :class => 'wiki-edit' %></p>
11 <p><%= f.text_area :description, :rows => 5, :class => 'wiki-edit' %></p>
12 <p><%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen? %>
12 <p><%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen? %>
13 <% unless @project.identifier_frozen? %>
13 <% unless @project.identifier_frozen? %>
14 <br /><em><%= l(:text_length_between, 2, 20) %> <%= l(:text_project_identifier_info) %></em>
14 <br /><em><%= l(:text_length_between, 1, 20) %> <%= l(:text_project_identifier_info) %></em>
15 <% end %></p>
15 <% end %></p>
16 <p><%= f.text_field :homepage, :size => 60 %></p>
16 <p><%= f.text_field :homepage, :size => 60 %></p>
17 <p><%= f.check_box :is_public %></p>
17 <p><%= f.check_box :is_public %></p>
18 <%= wikitoolbar_for 'project_description' %>
18 <%= wikitoolbar_for 'project_description' %>
19
19
20 <% @project.custom_field_values.each do |value| %>
20 <% @project.custom_field_values.each do |value| %>
21 <p><%= custom_field_tag_with_label :project, value %></p>
21 <p><%= custom_field_tag_with_label :project, value %></p>
22 <% end %>
22 <% end %>
23 <%= call_hook(:view_projects_form, :project => @project, :form => f) %>
23 <%= call_hook(:view_projects_form, :project => @project, :form => f) %>
24 </div>
24 </div>
25
25
26 <% unless @trackers.empty? %>
26 <% unless @trackers.empty? %>
27 <fieldset class="box"><legend><%=l(:label_tracker_plural)%></legend>
27 <fieldset class="box"><legend><%=l(:label_tracker_plural)%></legend>
28 <% @trackers.each do |tracker| %>
28 <% @trackers.each do |tracker| %>
29 <label class="floating">
29 <label class="floating">
30 <%= check_box_tag 'project[tracker_ids][]', tracker.id, @project.trackers.include?(tracker) %>
30 <%= check_box_tag 'project[tracker_ids][]', tracker.id, @project.trackers.include?(tracker) %>
31 <%= tracker %>
31 <%= tracker %>
32 </label>
32 </label>
33 <% end %>
33 <% end %>
34 <%= hidden_field_tag 'project[tracker_ids][]', '' %>
34 <%= hidden_field_tag 'project[tracker_ids][]', '' %>
35 </fieldset>
35 </fieldset>
36 <% end %>
36 <% end %>
37
37
38 <% unless @issue_custom_fields.empty? %>
38 <% unless @issue_custom_fields.empty? %>
39 <fieldset class="box"><legend><%=l(:label_custom_field_plural)%></legend>
39 <fieldset class="box"><legend><%=l(:label_custom_field_plural)%></legend>
40 <% @issue_custom_fields.each do |custom_field| %>
40 <% @issue_custom_fields.each do |custom_field| %>
41 <label class="floating">
41 <label class="floating">
42 <%= check_box_tag 'project[issue_custom_field_ids][]', custom_field.id, (@project.all_issue_custom_fields.include? custom_field), (custom_field.is_for_all? ? {:disabled => "disabled"} : {}) %>
42 <%= check_box_tag 'project[issue_custom_field_ids][]', custom_field.id, (@project.all_issue_custom_fields.include? custom_field), (custom_field.is_for_all? ? {:disabled => "disabled"} : {}) %>
43 <%= custom_field.name %>
43 <%= custom_field.name %>
44 </label>
44 </label>
45 <% end %>
45 <% end %>
46 <%= hidden_field_tag 'project[issue_custom_field_ids][]', '' %>
46 <%= hidden_field_tag 'project[issue_custom_field_ids][]', '' %>
47 </fieldset>
47 </fieldset>
48 <% end %>
48 <% end %>
49 <!--[eoform:project]-->
49 <!--[eoform:project]-->
@@ -1,59 +1,61
1 <div class="contextual">
1 <div class="contextual">
2 <% if @editable %>
2 <% if @editable %>
3 <%= link_to_if_authorized(l(:button_edit), {:action => 'edit', :page => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) if @content.version == @page.content.version %>
3 <%= link_to_if_authorized(l(:button_edit), {:action => 'edit', :page => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) if @content.version == @page.content.version %>
4 <%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :page => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %>
4 <%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :page => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %>
5 <%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :page => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %>
5 <%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :page => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %>
6 <%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :page => @page.title}, :class => 'icon icon-move') if @content.version == @page.content.version %>
6 <%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :page => @page.title}, :class => 'icon icon-move') if @content.version == @page.content.version %>
7 <%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :page => @page.title}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %>
7 <%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :page => @page.title}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %>
8 <%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :page => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %>
8 <%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :page => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %>
9 <% end %>
9 <% end %>
10 <%= link_to_if_authorized(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %>
10 <%= link_to_if_authorized(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %>
11 </div>
11 </div>
12
12
13 <%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:page => parent.title}}) %>
13 <%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:page => parent.title}}) %>
14
14
15 <% if @content.version != @page.content.version %>
15 <% if @content.version != @page.content.version %>
16 <p>
16 <p>
17 <%= link_to(('&#171; ' + l(:label_previous)), :action => 'index', :page => @page.title, :version => (@content.version - 1)) + " - " if @content.version > 1 %>
17 <%= link_to(('&#171; ' + l(:label_previous)), :action => 'index', :page => @page.title, :version => (@content.version - 1)) + " - " if @content.version > 1 %>
18 <%= "#{l(:label_version)} #{@content.version}/#{@page.content.version}" %>
18 <%= "#{l(:label_version)} #{@content.version}/#{@page.content.version}" %>
19 <%= '(' + link_to('diff', :controller => 'wiki', :action => 'diff', :page => @page.title, :version => @content.version) + ')' if @content.version > 1 %> -
19 <%= '(' + link_to('diff', :controller => 'wiki', :action => 'diff', :page => @page.title, :version => @content.version) + ')' if @content.version > 1 %> -
20 <%= link_to((l(:label_next) + ' &#187;'), :action => 'index', :page => @page.title, :version => (@content.version + 1)) + " - " if @content.version < @page.content.version %>
20 <%= link_to((l(:label_next) + ' &#187;'), :action => 'index', :page => @page.title, :version => (@content.version + 1)) + " - " if @content.version < @page.content.version %>
21 <%= link_to(l(:label_current_version), :action => 'index', :page => @page.title) %>
21 <%= link_to(l(:label_current_version), :action => 'index', :page => @page.title) %>
22 <br />
22 <br />
23 <em><%= @content.author ? @content.author.name : "anonyme" %>, <%= format_time(@content.updated_on) %> </em><br />
23 <em><%= @content.author ? @content.author.name : "anonyme" %>, <%= format_time(@content.updated_on) %> </em><br />
24 <%=h @content.comments %>
24 <%=h @content.comments %>
25 </p>
25 </p>
26 <hr />
26 <hr />
27 <% end %>
27 <% end %>
28
28
29 <%= render(:partial => "wiki/content", :locals => {:content => @content}) %>
29 <%= render(:partial => "wiki/content", :locals => {:content => @content}) %>
30
30
31 <%= link_to_attachments @page %>
31 <%= link_to_attachments @page %>
32
32
33 <% if @editable && authorize_for('wiki', 'add_attachment') %>
33 <% if @editable && authorize_for('wiki', 'add_attachment') %>
34 <div id="wiki_add_attachment">
34 <p><%= link_to l(:label_attachment_new), {}, :onclick => "Element.show('add_attachment_form'); Element.hide(this); Element.scrollTo('add_attachment_form'); return false;",
35 <p><%= link_to l(:label_attachment_new), {}, :onclick => "Element.show('add_attachment_form'); Element.hide(this); Element.scrollTo('add_attachment_form'); return false;",
35 :id => 'attach_files_link' %></p>
36 :id => 'attach_files_link' %></p>
36 <% form_tag({ :controller => 'wiki', :action => 'add_attachment', :page => @page.title }, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %>
37 <% form_tag({ :controller => 'wiki', :action => 'add_attachment', :page => @page.title }, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %>
37 <div class="box">
38 <div class="box">
38 <p><%= render :partial => 'attachments/form' %></p>
39 <p><%= render :partial => 'attachments/form' %></p>
39 </div>
40 </div>
40 <%= submit_tag l(:button_add) %>
41 <%= submit_tag l(:button_add) %>
41 <%= link_to l(:button_cancel), {}, :onclick => "Element.hide('add_attachment_form'); Element.show('attach_files_link'); return false;" %>
42 <%= link_to l(:button_cancel), {}, :onclick => "Element.hide('add_attachment_form'); Element.show('attach_files_link'); return false;" %>
42 <% end %>
43 <% end %>
44 </div>
43 <% end %>
45 <% end %>
44
46
45 <p class="other-formats">
47 <p class="other-formats">
46 <%= l(:label_export_to) %>
48 <%= l(:label_export_to) %>
47 <span><%= link_to 'HTML', {:page => @page.title, :export => 'html', :version => @content.version}, :class => 'html' %></span>
49 <span><%= link_to 'HTML', {:page => @page.title, :export => 'html', :version => @content.version}, :class => 'html' %></span>
48 <span><%= link_to 'TXT', {:page => @page.title, :export => 'txt', :version => @content.version}, :class => 'text' %></span>
50 <span><%= link_to 'TXT', {:page => @page.title, :export => 'txt', :version => @content.version}, :class => 'text' %></span>
49 </p>
51 </p>
50
52
51 <% content_for :header_tags do %>
53 <% content_for :header_tags do %>
52 <%= stylesheet_link_tag 'scm' %>
54 <%= stylesheet_link_tag 'scm' %>
53 <% end %>
55 <% end %>
54
56
55 <% content_for :sidebar do %>
57 <% content_for :sidebar do %>
56 <%= render :partial => 'sidebar' %>
58 <%= render :partial => 'sidebar' %>
57 <% end %>
59 <% end %>
58
60
59 <% html_title @page.pretty_title %>
61 <% html_title @page.pretty_title %>
@@ -1,888 +1,894
1 == Redmine changelog
1 == Redmine changelog
2
2
3 Redmine - project management software
3 Redmine - project management software
4 Copyright (C) 2006-2009 Jean-Philippe Lang
4 Copyright (C) 2006-2009 Jean-Philippe Lang
5 http://www.redmine.org/
5 http://www.redmine.org/
6
6
7
7
8 == 2009-xx-xx v0.8.3
8 == 2009-xx-xx v0.8.3
9
9
10 * Separate project field and subject in cross-project issue view
10 * Separate project field and subject in cross-project issue view
11 * Ability to set language for redmine:load_default_data task using REDMINE_LANG environment variable
11 * Ability to set language for redmine:load_default_data task using REDMINE_LANG environment variable
12 * Rescue Redmine::DefaultData::DataAlreadyLoaded in redmine:load_default_data task
12 * Rescue Redmine::DefaultData::DataAlreadyLoaded in redmine:load_default_data task
13 * CSS classes to highlight own and assigned issues
13 * CSS classes to highlight own and assigned issues
14 * Hide "New file" link on wiki pages from printing
14 * Flush buffer when asking for language in redmine:load_default_data task
15 * Flush buffer when asking for language in redmine:load_default_data task
16 * Minimum project identifier length set to 1
15 * Fixed: Time entries csv export links for all projects are malformed
17 * Fixed: Time entries csv export links for all projects are malformed
16 * Fixed: Files without Version aren't visible in the Activity page
18 * Fixed: Files without Version aren't visible in the Activity page
19 * Fixed: Commit logs are centered in the repo browser
20 * Fixed: News summary field content is not searchable
21 * Fixed: Journal#save has a wrong signature
22 * Fixed: Email footer signature convention
17
23
18
24
19 == 2009-03-07 v0.8.2
25 == 2009-03-07 v0.8.2
20
26
21 * Send an email to the user when an administrator activates a registered user
27 * Send an email to the user when an administrator activates a registered user
22 * Strip keywords from received email body
28 * Strip keywords from received email body
23 * Footer updated to 2009
29 * Footer updated to 2009
24 * Show RSS-link even when no issues is found
30 * Show RSS-link even when no issues is found
25 * One click filter action in activity view
31 * One click filter action in activity view
26 * Clickable/linkable line #'s while browsing the repo or viewing a file
32 * Clickable/linkable line #'s while browsing the repo or viewing a file
27 * Links to versions on files list
33 * Links to versions on files list
28 * Added request and controller objects to the hooks by default
34 * Added request and controller objects to the hooks by default
29 * Fixed: exporting an issue with attachments to PDF raises an error
35 * Fixed: exporting an issue with attachments to PDF raises an error
30 * Fixed: "too few arguments" error may occur on activerecord error translation
36 * Fixed: "too few arguments" error may occur on activerecord error translation
31 * Fixed: "Default columns Displayed on the Issues list" setting is not easy to read
37 * Fixed: "Default columns Displayed on the Issues list" setting is not easy to read
32 * Fixed: visited links to closed tickets are not striked through with IE6
38 * Fixed: visited links to closed tickets are not striked through with IE6
33 * Fixed: MailHandler#plain_text_body returns nil if there was nothing to strip
39 * Fixed: MailHandler#plain_text_body returns nil if there was nothing to strip
34 * Fixed: MailHandler raises an error when processing an email without From header
40 * Fixed: MailHandler raises an error when processing an email without From header
35
41
36
42
37 == 2009-02-15 v0.8.1
43 == 2009-02-15 v0.8.1
38
44
39 * Select watchers on new issue form
45 * Select watchers on new issue form
40 * Issue description is no longer a required field
46 * Issue description is no longer a required field
41 * Files module: ability to add files without version
47 * Files module: ability to add files without version
42 * Jump to the current tab when using the project quick-jump combo
48 * Jump to the current tab when using the project quick-jump combo
43 * Display a warning if some attachments were not saved
49 * Display a warning if some attachments were not saved
44 * Import custom fields values from emails on issue creation
50 * Import custom fields values from emails on issue creation
45 * Show view/annotate/download links on entry and annotate views
51 * Show view/annotate/download links on entry and annotate views
46 * Admin Info Screen: Display if plugin assets directory is writable
52 * Admin Info Screen: Display if plugin assets directory is writable
47 * Adds a 'Create and continue' button on the new issue form
53 * Adds a 'Create and continue' button on the new issue form
48 * IMAP: add options to move received emails
54 * IMAP: add options to move received emails
49 * Do not show Category field when categories are not defined
55 * Do not show Category field when categories are not defined
50 * Lower the project identifier limit to a minimum of two characters
56 * Lower the project identifier limit to a minimum of two characters
51 * Add "closed" html class to closed entries in issue list
57 * Add "closed" html class to closed entries in issue list
52 * Fixed: broken redirect URL on login failure
58 * Fixed: broken redirect URL on login failure
53 * Fixed: Deleted files are shown when using Darcs
59 * Fixed: Deleted files are shown when using Darcs
54 * Fixed: Darcs adapter works on Win32 only
60 * Fixed: Darcs adapter works on Win32 only
55 * Fixed: syntax highlight doesn't appear in new ticket preview
61 * Fixed: syntax highlight doesn't appear in new ticket preview
56 * Fixed: email notification for changes I make still occurs when running Repository.fetch_changesets
62 * Fixed: email notification for changes I make still occurs when running Repository.fetch_changesets
57 * Fixed: no error is raised when entering invalid hours on the issue update form
63 * Fixed: no error is raised when entering invalid hours on the issue update form
58 * Fixed: Details time log report CSV export doesn't honour date format from settings
64 * Fixed: Details time log report CSV export doesn't honour date format from settings
59 * Fixed: invalid css classes on issue details
65 * Fixed: invalid css classes on issue details
60 * Fixed: Trac importer creates duplicate custom values
66 * Fixed: Trac importer creates duplicate custom values
61 * Fixed: inline attached image should not match partial filename
67 * Fixed: inline attached image should not match partial filename
62
68
63
69
64 == 2008-12-30 v0.8.0
70 == 2008-12-30 v0.8.0
65
71
66 * Setting added in order to limit the number of diff lines that should be displayed
72 * Setting added in order to limit the number of diff lines that should be displayed
67 * Makes logged-in username in topbar linking to
73 * Makes logged-in username in topbar linking to
68 * Mail handler: strip tags when receiving a html-only email
74 * Mail handler: strip tags when receiving a html-only email
69 * Mail handler: add watchers before sending notification
75 * Mail handler: add watchers before sending notification
70 * Adds a css class (overdue) to overdue issues on issue lists and detail views
76 * Adds a css class (overdue) to overdue issues on issue lists and detail views
71 * Fixed: project activity truncated after viewing user's activity
77 * Fixed: project activity truncated after viewing user's activity
72 * Fixed: email address entered for password recovery shouldn't be case-sensitive
78 * Fixed: email address entered for password recovery shouldn't be case-sensitive
73 * Fixed: default flag removed when editing a default enumeration
79 * Fixed: default flag removed when editing a default enumeration
74 * Fixed: default category ignored when adding a document
80 * Fixed: default category ignored when adding a document
75 * Fixed: error on repository user mapping when a repository username is blank
81 * Fixed: error on repository user mapping when a repository username is blank
76 * Fixed: Firefox cuts off large diffs
82 * Fixed: Firefox cuts off large diffs
77 * Fixed: CVS browser should not show dead revisions (deleted files)
83 * Fixed: CVS browser should not show dead revisions (deleted files)
78 * Fixed: escape double-quotes in image titles
84 * Fixed: escape double-quotes in image titles
79 * Fixed: escape textarea content when editing a issue note
85 * Fixed: escape textarea content when editing a issue note
80 * Fixed: JS error on context menu with IE
86 * Fixed: JS error on context menu with IE
81 * Fixed: bold syntax around single character in series doesn't work
87 * Fixed: bold syntax around single character in series doesn't work
82 * Fixed several XSS vulnerabilities
88 * Fixed several XSS vulnerabilities
83 * Fixed a SQL injection vulnerability
89 * Fixed a SQL injection vulnerability
84
90
85
91
86 == 2008-12-07 v0.8.0-rc1
92 == 2008-12-07 v0.8.0-rc1
87
93
88 * Wiki page protection
94 * Wiki page protection
89 * Wiki page hierarchy. Parent page can be assigned on the Rename screen
95 * Wiki page hierarchy. Parent page can be assigned on the Rename screen
90 * Adds support for issue creation via email
96 * Adds support for issue creation via email
91 * Adds support for free ticket filtering and custom queries on Gantt chart and calendar
97 * Adds support for free ticket filtering and custom queries on Gantt chart and calendar
92 * Cross-project search
98 * Cross-project search
93 * Ability to search a project and its subprojects
99 * Ability to search a project and its subprojects
94 * Ability to search the projects the user belongs to
100 * Ability to search the projects the user belongs to
95 * Adds custom fields on time entries
101 * Adds custom fields on time entries
96 * Adds boolean and list custom fields for time entries as criteria on time report
102 * Adds boolean and list custom fields for time entries as criteria on time report
97 * Cross-project time reports
103 * Cross-project time reports
98 * Display latest user's activity on account/show view
104 * Display latest user's activity on account/show view
99 * Show last connexion time on user's page
105 * Show last connexion time on user's page
100 * Obfuscates email address on user's account page using javascript
106 * Obfuscates email address on user's account page using javascript
101 * wiki TOC rendered as an unordered list
107 * wiki TOC rendered as an unordered list
102 * Adds the ability to search for a user on the administration users list
108 * Adds the ability to search for a user on the administration users list
103 * Adds the ability to search for a project name or identifier on the administration projects list
109 * Adds the ability to search for a project name or identifier on the administration projects list
104 * Redirect user to the previous page after logging in
110 * Redirect user to the previous page after logging in
105 * Adds a permission 'view wiki edits' so that wiki history can be hidden to certain users
111 * Adds a permission 'view wiki edits' so that wiki history can be hidden to certain users
106 * Adds permissions for viewing the watcher list and adding new watchers on the issue detail view
112 * Adds permissions for viewing the watcher list and adding new watchers on the issue detail view
107 * Adds permissions to let users edit and/or delete their messages
113 * Adds permissions to let users edit and/or delete their messages
108 * Link to activity view when displaying dates
114 * Link to activity view when displaying dates
109 * Hide Redmine version in atom feeds and pdf properties
115 * Hide Redmine version in atom feeds and pdf properties
110 * 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.
116 * 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.
111 * Sort users by their display names so that user dropdown lists are sorted alphabetically
117 * Sort users by their display names so that user dropdown lists are sorted alphabetically
112 * Adds estimated hours to issue filters
118 * Adds estimated hours to issue filters
113 * Switch order of current and previous revisions in side-by-side diff
119 * Switch order of current and previous revisions in side-by-side diff
114 * Render the commit changes list as a tree
120 * Render the commit changes list as a tree
115 * Adds watch/unwatch functionality at forum topic level
121 * Adds watch/unwatch functionality at forum topic level
116 * When moving an issue to another project, reassign it to the category with same name if any
122 * When moving an issue to another project, reassign it to the category with same name if any
117 * Adds child_pages macro for wiki pages
123 * Adds child_pages macro for wiki pages
118 * Use GET instead of POST on roadmap (#718), gantt and calendar forms
124 * Use GET instead of POST on roadmap (#718), gantt and calendar forms
119 * Search engine: display total results count and count by result type
125 * Search engine: display total results count and count by result type
120 * Email delivery configuration moved to an unversioned YAML file (config/email.yml, see the sample file)
126 * Email delivery configuration moved to an unversioned YAML file (config/email.yml, see the sample file)
121 * Adds icons on search results
127 * Adds icons on search results
122 * Adds 'Edit' link on account/show for admin users
128 * Adds 'Edit' link on account/show for admin users
123 * Adds Lock/Unlock/Activate link on user edit screen
129 * Adds Lock/Unlock/Activate link on user edit screen
124 * Adds user count in status drop down on admin user list
130 * Adds user count in status drop down on admin user list
125 * Adds multi-levels blockquotes support by using > at the beginning of lines
131 * Adds multi-levels blockquotes support by using > at the beginning of lines
126 * Adds a Reply link to each issue note
132 * Adds a Reply link to each issue note
127 * Adds plain text only option for mail notifications
133 * Adds plain text only option for mail notifications
128 * Gravatar support for issue detail, user grid, and activity stream (disabled by default)
134 * Gravatar support for issue detail, user grid, and activity stream (disabled by default)
129 * Adds 'Delete wiki pages attachments' permission
135 * Adds 'Delete wiki pages attachments' permission
130 * Show the most recent file when displaying an inline image
136 * Show the most recent file when displaying an inline image
131 * Makes permission screens localized
137 * Makes permission screens localized
132 * AuthSource list: display associated users count and disable 'Delete' buton if any
138 * AuthSource list: display associated users count and disable 'Delete' buton if any
133 * Make the 'duplicates of' relation asymmetric
139 * Make the 'duplicates of' relation asymmetric
134 * Adds username to the password reminder email
140 * Adds username to the password reminder email
135 * Adds links to forum messages using message#id syntax
141 * Adds links to forum messages using message#id syntax
136 * Allow same name for custom fields on different object types
142 * Allow same name for custom fields on different object types
137 * One-click bulk edition using the issue list context menu within the same project
143 * One-click bulk edition using the issue list context menu within the same project
138 * 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.
144 * 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.
139 * Adds checkboxes toggle links on permissions report
145 * Adds checkboxes toggle links on permissions report
140 * Adds Trac-Like anchors on wiki headings
146 * Adds Trac-Like anchors on wiki headings
141 * Adds support for wiki links with anchor
147 * Adds support for wiki links with anchor
142 * Adds category to the issue context menu
148 * Adds category to the issue context menu
143 * Adds a workflow overview screen
149 * Adds a workflow overview screen
144 * Appends the filename to the attachment url so that clients that ignore content-disposition http header get the real filename
150 * Appends the filename to the attachment url so that clients that ignore content-disposition http header get the real filename
145 * Dots allowed in custom field name
151 * Dots allowed in custom field name
146 * Adds posts quoting functionality
152 * Adds posts quoting functionality
147 * Adds an option to generate sequential project identifiers
153 * Adds an option to generate sequential project identifiers
148 * Adds mailto link on the user administration list
154 * Adds mailto link on the user administration list
149 * Ability to remove enumerations (activities, priorities, document categories) that are in use. Associated objects can be reassigned to another value
155 * Ability to remove enumerations (activities, priorities, document categories) that are in use. Associated objects can be reassigned to another value
150 * Gantt chart: display issues that don't have a due date if they are assigned to a version with a date
156 * Gantt chart: display issues that don't have a due date if they are assigned to a version with a date
151 * Change projects homepage limit to 255 chars
157 * Change projects homepage limit to 255 chars
152 * 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
158 * 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
153 * Adds "please select" to activity select box if no activity is set as default
159 * Adds "please select" to activity select box if no activity is set as default
154 * Do not silently ignore timelog validation failure on issue edit
160 * Do not silently ignore timelog validation failure on issue edit
155 * Adds a rake task to send reminder emails
161 * Adds a rake task to send reminder emails
156 * Allow empty cells in wiki tables
162 * Allow empty cells in wiki tables
157 * Makes wiki text formatter pluggable
163 * Makes wiki text formatter pluggable
158 * Adds back textile acronyms support
164 * Adds back textile acronyms support
159 * Remove pre tag attributes
165 * Remove pre tag attributes
160 * Plugin hooks
166 * Plugin hooks
161 * Pluggable admin menu
167 * Pluggable admin menu
162 * Plugins can provide activity content
168 * Plugins can provide activity content
163 * Moves plugin list to its own administration menu item
169 * Moves plugin list to its own administration menu item
164 * Adds url and author_url plugin attributes
170 * Adds url and author_url plugin attributes
165 * Adds Plugin#requires_redmine method so that plugin compatibility can be checked against current Redmine version
171 * Adds Plugin#requires_redmine method so that plugin compatibility can be checked against current Redmine version
166 * Adds atom feed on time entries details
172 * Adds atom feed on time entries details
167 * Adds project name to issues feed title
173 * Adds project name to issues feed title
168 * Adds a css class on menu items in order to apply item specific styles (eg. icons)
174 * Adds a css class on menu items in order to apply item specific styles (eg. icons)
169 * Adds a Redmine plugin generators
175 * Adds a Redmine plugin generators
170 * Adds timelog link to the issue context menu
176 * Adds timelog link to the issue context menu
171 * Adds links to the user page on various views
177 * Adds links to the user page on various views
172 * Turkish translation by Ismail Sezen
178 * Turkish translation by Ismail Sezen
173 * Catalan translation
179 * Catalan translation
174 * Vietnamese translation
180 * Vietnamese translation
175 * Slovak translation
181 * Slovak translation
176 * Better naming of activity feed if only one kind of event is displayed
182 * Better naming of activity feed if only one kind of event is displayed
177 * Enable syntax highlight on issues, messages and news
183 * Enable syntax highlight on issues, messages and news
178 * Add target version to the issue list context menu
184 * Add target version to the issue list context menu
179 * Hide 'Target version' filter if no version is defined
185 * Hide 'Target version' filter if no version is defined
180 * Add filters on cross-project issue list for custom fields marked as 'For all projects'
186 * Add filters on cross-project issue list for custom fields marked as 'For all projects'
181 * Turn ftp urls into links
187 * Turn ftp urls into links
182 * Hiding the View Differences button when a wiki page's history only has one version
188 * Hiding the View Differences button when a wiki page's history only has one version
183 * Messages on a Board can now be sorted by the number of replies
189 * Messages on a Board can now be sorted by the number of replies
184 * Adds a class ('me') to events of the activity view created by current user
190 * Adds a class ('me') to events of the activity view created by current user
185 * Strip pre/code tags content from activity view events
191 * Strip pre/code tags content from activity view events
186 * Display issue notes in the activity view
192 * Display issue notes in the activity view
187 * Adds links to changesets atom feed on repository browser
193 * Adds links to changesets atom feed on repository browser
188 * Track project and tracker changes in issue history
194 * Track project and tracker changes in issue history
189 * Adds anchor to atom feed messages links
195 * Adds anchor to atom feed messages links
190 * Adds a key in lang files to set the decimal separator (point or comma) in csv exports
196 * Adds a key in lang files to set the decimal separator (point or comma) in csv exports
191 * Makes importer work with Trac 0.8.x
197 * Makes importer work with Trac 0.8.x
192 * Upgraded to Prototype 1.6.0.1
198 * Upgraded to Prototype 1.6.0.1
193 * File viewer for attached text files
199 * File viewer for attached text files
194 * Menu mapper: add support for :before, :after and :last options to #push method and add #delete method
200 * Menu mapper: add support for :before, :after and :last options to #push method and add #delete method
195 * Removed inconsistent revision numbers on diff view
201 * Removed inconsistent revision numbers on diff view
196 * CVS: add support for modules names with spaces
202 * CVS: add support for modules names with spaces
197 * Log the user in after registration if account activation is not needed
203 * Log the user in after registration if account activation is not needed
198 * Mercurial adapter improvements
204 * Mercurial adapter improvements
199 * Trac importer: read session_attribute table to find user's email and real name
205 * Trac importer: read session_attribute table to find user's email and real name
200 * Ability to disable unused SCM adapters in application settings
206 * Ability to disable unused SCM adapters in application settings
201 * Adds Filesystem adapter
207 * Adds Filesystem adapter
202 * Clear changesets and changes with raw sql when deleting a repository for performance
208 * Clear changesets and changes with raw sql when deleting a repository for performance
203 * Redmine.pm now uses the 'commit access' permission defined in Redmine
209 * Redmine.pm now uses the 'commit access' permission defined in Redmine
204 * Reposman can create any type of scm (--scm option)
210 * Reposman can create any type of scm (--scm option)
205 * Reposman creates a repository if the 'repository' module is enabled at project level only
211 * Reposman creates a repository if the 'repository' module is enabled at project level only
206 * Display svn properties in the browser, svn >= 1.5.0 only
212 * Display svn properties in the browser, svn >= 1.5.0 only
207 * Reduces memory usage when importing large git repositories
213 * Reduces memory usage when importing large git repositories
208 * Wider SVG graphs in repository stats
214 * Wider SVG graphs in repository stats
209 * SubversionAdapter#entries performance improvement
215 * SubversionAdapter#entries performance improvement
210 * SCM browser: ability to download raw unified diffs
216 * SCM browser: ability to download raw unified diffs
211 * More detailed error message in log when scm command fails
217 * More detailed error message in log when scm command fails
212 * Adds support for file viewing with Darcs 2.0+
218 * Adds support for file viewing with Darcs 2.0+
213 * Check that git changeset is not in the database before creating it
219 * Check that git changeset is not in the database before creating it
214 * Unified diff viewer for attached files with .patch or .diff extension
220 * Unified diff viewer for attached files with .patch or .diff extension
215 * File size display with Bazaar repositories
221 * File size display with Bazaar repositories
216 * Git adapter: use commit time instead of author time
222 * Git adapter: use commit time instead of author time
217 * Prettier url for changesets
223 * Prettier url for changesets
218 * Makes changes link to entries on the revision view
224 * Makes changes link to entries on the revision view
219 * Adds a field on the repository view to browse at specific revision
225 * Adds a field on the repository view to browse at specific revision
220 * Adds new projects atom feed
226 * Adds new projects atom feed
221 * Added rake tasks to generate rcov code coverage reports
227 * Added rake tasks to generate rcov code coverage reports
222 * Add Redcloth's :block_markdown_rule to allow horizontal rules in wiki
228 * Add Redcloth's :block_markdown_rule to allow horizontal rules in wiki
223 * Show the project hierarchy in the drop down list for new membership on user administration screen
229 * Show the project hierarchy in the drop down list for new membership on user administration screen
224 * Split user edit screen into tabs
230 * Split user edit screen into tabs
225 * Renames bundled RedCloth to RedCloth3 to avoid RedCloth 4 to be loaded instead
231 * Renames bundled RedCloth to RedCloth3 to avoid RedCloth 4 to be loaded instead
226 * Fixed: Roadmap crashes when a version has a due date > 2037
232 * Fixed: Roadmap crashes when a version has a due date > 2037
227 * Fixed: invalid effective date (eg. 99999-01-01) causes an error on version edition screen
233 * Fixed: invalid effective date (eg. 99999-01-01) causes an error on version edition screen
228 * Fixed: login filter providing incorrect back_url for Redmine installed in sub-directory
234 * Fixed: login filter providing incorrect back_url for Redmine installed in sub-directory
229 * Fixed: logtime entry duplicated when edited from parent project
235 * Fixed: logtime entry duplicated when edited from parent project
230 * Fixed: wrong digest for text files under Windows
236 * Fixed: wrong digest for text files under Windows
231 * Fixed: associated revisions are displayed in wrong order on issue view
237 * Fixed: associated revisions are displayed in wrong order on issue view
232 * Fixed: Git Adapter date parsing ignores timezone
238 * Fixed: Git Adapter date parsing ignores timezone
233 * Fixed: Printing long roadmap doesn't split across pages
239 * Fixed: Printing long roadmap doesn't split across pages
234 * Fixes custom fields display order at several places
240 * Fixes custom fields display order at several places
235 * Fixed: urls containing @ are parsed as email adress by the wiki formatter
241 * Fixed: urls containing @ are parsed as email adress by the wiki formatter
236 * Fixed date filters accuracy with SQLite
242 * Fixed date filters accuracy with SQLite
237 * Fixed: tokens not escaped in highlight_tokens regexp
243 * Fixed: tokens not escaped in highlight_tokens regexp
238 * Fixed Bazaar shared repository browsing
244 * Fixed Bazaar shared repository browsing
239 * Fixes platform determination under JRuby
245 * Fixes platform determination under JRuby
240 * Fixed: Estimated time in issue's journal should be rounded to two decimals
246 * Fixed: Estimated time in issue's journal should be rounded to two decimals
241 * Fixed: 'search titles only' box ignored after one search is done on titles only
247 * Fixed: 'search titles only' box ignored after one search is done on titles only
242 * Fixed: non-ASCII subversion path can't be displayed
248 * Fixed: non-ASCII subversion path can't be displayed
243 * Fixed: Inline images don't work if file name has upper case letters or if image is in BMP format
249 * Fixed: Inline images don't work if file name has upper case letters or if image is in BMP format
244 * Fixed: document listing shows on "my page" when viewing documents is disabled for the role
250 * Fixed: document listing shows on "my page" when viewing documents is disabled for the role
245 * Fixed: Latest news appear on the homepage for projects with the News module disabled
251 * Fixed: Latest news appear on the homepage for projects with the News module disabled
246 * Fixed: cross-project issue list should not show issues of projects for which the issue tracking module was disabled
252 * Fixed: cross-project issue list should not show issues of projects for which the issue tracking module was disabled
247 * Fixed: the default status is lost when reordering issue statuses
253 * Fixed: the default status is lost when reordering issue statuses
248 * Fixes error with Postgresql and non-UTF8 commit logs
254 * Fixes error with Postgresql and non-UTF8 commit logs
249 * Fixed: textile footnotes no longer work
255 * Fixed: textile footnotes no longer work
250 * Fixed: http links containing parentheses fail to reder correctly
256 * Fixed: http links containing parentheses fail to reder correctly
251 * Fixed: GitAdapter#get_rev should use current branch instead of hardwiring master
257 * Fixed: GitAdapter#get_rev should use current branch instead of hardwiring master
252
258
253
259
254 == 2008-07-06 v0.7.3
260 == 2008-07-06 v0.7.3
255
261
256 * Allow dot in firstnames and lastnames
262 * Allow dot in firstnames and lastnames
257 * Add project name to cross-project Atom feeds
263 * Add project name to cross-project Atom feeds
258 * Encoding set to utf8 in example database.yml
264 * Encoding set to utf8 in example database.yml
259 * HTML titles on forums related views
265 * HTML titles on forums related views
260 * Fixed: various XSS vulnerabilities
266 * Fixed: various XSS vulnerabilities
261 * Fixed: Entourage (and some old client) fails to correctly render notification styles
267 * Fixed: Entourage (and some old client) fails to correctly render notification styles
262 * Fixed: Fixed: timelog redirects inappropriately when :back_url is blank
268 * Fixed: Fixed: timelog redirects inappropriately when :back_url is blank
263 * Fixed: wrong relative paths to images in wiki_syntax.html
269 * Fixed: wrong relative paths to images in wiki_syntax.html
264
270
265
271
266 == 2008-06-15 v0.7.2
272 == 2008-06-15 v0.7.2
267
273
268 * "New Project" link on Projects page
274 * "New Project" link on Projects page
269 * Links to repository directories on the repo browser
275 * Links to repository directories on the repo browser
270 * Move status to front in Activity View
276 * Move status to front in Activity View
271 * Remove edit step from Status context menu
277 * Remove edit step from Status context menu
272 * Fixed: No way to do textile horizontal rule
278 * Fixed: No way to do textile horizontal rule
273 * Fixed: Repository: View differences doesn't work
279 * Fixed: Repository: View differences doesn't work
274 * Fixed: attachement's name maybe invalid.
280 * Fixed: attachement's name maybe invalid.
275 * Fixed: Error when creating a new issue
281 * Fixed: Error when creating a new issue
276 * Fixed: NoMethodError on @available_filters.has_key?
282 * Fixed: NoMethodError on @available_filters.has_key?
277 * Fixed: Check All / Uncheck All in Email Settings
283 * Fixed: Check All / Uncheck All in Email Settings
278 * Fixed: "View differences" of one file at /repositories/revision/ fails
284 * Fixed: "View differences" of one file at /repositories/revision/ fails
279 * Fixed: Column width in "my page"
285 * Fixed: Column width in "my page"
280 * Fixed: private subprojects are listed on Issues view
286 * Fixed: private subprojects are listed on Issues view
281 * Fixed: Textile: bold, italics, underline, etc... not working after parentheses
287 * Fixed: Textile: bold, italics, underline, etc... not working after parentheses
282 * Fixed: Update issue form: comment field from log time end out of screen
288 * Fixed: Update issue form: comment field from log time end out of screen
283 * Fixed: Editing role: "issue can be assigned to this role" out of box
289 * Fixed: Editing role: "issue can be assigned to this role" out of box
284 * Fixed: Unable use angular braces after include word
290 * Fixed: Unable use angular braces after include word
285 * Fixed: Using '*' as keyword for repository referencing keywords doesn't work
291 * Fixed: Using '*' as keyword for repository referencing keywords doesn't work
286 * Fixed: Subversion repository "View differences" on each file rise ERROR
292 * Fixed: Subversion repository "View differences" on each file rise ERROR
287 * Fixed: View differences for individual file of a changeset fails if the repository URL doesn't point to the repository root
293 * Fixed: View differences for individual file of a changeset fails if the repository URL doesn't point to the repository root
288 * Fixed: It is possible to lock out the last admin account
294 * Fixed: It is possible to lock out the last admin account
289 * Fixed: Wikis are viewable for anonymous users on public projects, despite not granting access
295 * Fixed: Wikis are viewable for anonymous users on public projects, despite not granting access
290 * Fixed: Issue number display clipped on 'my issues'
296 * Fixed: Issue number display clipped on 'my issues'
291 * Fixed: Roadmap version list links not carrying state
297 * Fixed: Roadmap version list links not carrying state
292 * Fixed: Log Time fieldset in IssueController#edit doesn't set default Activity as default
298 * Fixed: Log Time fieldset in IssueController#edit doesn't set default Activity as default
293 * Fixed: git's "get_rev" API should use repo's current branch instead of hardwiring "master"
299 * Fixed: git's "get_rev" API should use repo's current branch instead of hardwiring "master"
294 * Fixed: browser's language subcodes ignored
300 * Fixed: browser's language subcodes ignored
295 * Fixed: Error on project selection with numeric (only) identifier.
301 * Fixed: Error on project selection with numeric (only) identifier.
296 * Fixed: Link to PDF doesn't work after creating new issue
302 * Fixed: Link to PDF doesn't work after creating new issue
297 * Fixed: "Replies" should not be shown on forum threads that are locked
303 * Fixed: "Replies" should not be shown on forum threads that are locked
298 * Fixed: SVN errors lead to svn username/password being displayed to end users (security issue)
304 * Fixed: SVN errors lead to svn username/password being displayed to end users (security issue)
299 * Fixed: http links containing hashes don't display correct
305 * Fixed: http links containing hashes don't display correct
300 * Fixed: Allow ampersands in Enumeration names
306 * Fixed: Allow ampersands in Enumeration names
301 * Fixed: Atom link on saved query does not include query_id
307 * Fixed: Atom link on saved query does not include query_id
302 * Fixed: Logtime info lost when there's an error updating an issue
308 * Fixed: Logtime info lost when there's an error updating an issue
303 * Fixed: TOC does not parse colorization markups
309 * Fixed: TOC does not parse colorization markups
304 * Fixed: CVS: add support for modules names with spaces
310 * Fixed: CVS: add support for modules names with spaces
305 * Fixed: Bad rendering on projects/add
311 * Fixed: Bad rendering on projects/add
306 * Fixed: exception when viewing differences on cvs
312 * Fixed: exception when viewing differences on cvs
307 * Fixed: export issue to pdf will messup when use Chinese language
313 * Fixed: export issue to pdf will messup when use Chinese language
308 * Fixed: Redmine::Scm::Adapters::GitAdapter#get_rev ignored GIT_BIN constant
314 * Fixed: Redmine::Scm::Adapters::GitAdapter#get_rev ignored GIT_BIN constant
309 * Fixed: Adding non-ASCII new issue type in the New Issue page have encoding error using IE
315 * Fixed: Adding non-ASCII new issue type in the New Issue page have encoding error using IE
310 * Fixed: Importing from trac : some wiki links are messed
316 * Fixed: Importing from trac : some wiki links are messed
311 * Fixed: Incorrect weekend definition in Hebrew calendar locale
317 * Fixed: Incorrect weekend definition in Hebrew calendar locale
312 * Fixed: Atom feeds don't provide author section for repository revisions
318 * Fixed: Atom feeds don't provide author section for repository revisions
313 * Fixed: In Activity views, changesets titles can be multiline while they should not
319 * Fixed: In Activity views, changesets titles can be multiline while they should not
314 * Fixed: Ignore unreadable subversion directories (read disabled using authz)
320 * Fixed: Ignore unreadable subversion directories (read disabled using authz)
315 * Fixed: lib/SVG/Graph/Graph.rb can't externalize stylesheets
321 * Fixed: lib/SVG/Graph/Graph.rb can't externalize stylesheets
316 * Fixed: Close statement handler in Redmine.pm
322 * Fixed: Close statement handler in Redmine.pm
317
323
318
324
319 == 2008-05-04 v0.7.1
325 == 2008-05-04 v0.7.1
320
326
321 * Thai translation added (Gampol Thitinilnithi)
327 * Thai translation added (Gampol Thitinilnithi)
322 * Translations updates
328 * Translations updates
323 * Escape HTML comment tags
329 * Escape HTML comment tags
324 * Prevent "can't convert nil into String" error when :sort_order param is not present
330 * Prevent "can't convert nil into String" error when :sort_order param is not present
325 * Fixed: Updating tickets add a time log with zero hours
331 * Fixed: Updating tickets add a time log with zero hours
326 * Fixed: private subprojects names are revealed on the project overview
332 * Fixed: private subprojects names are revealed on the project overview
327 * Fixed: Search for target version of "none" fails with postgres 8.3
333 * Fixed: Search for target version of "none" fails with postgres 8.3
328 * Fixed: Home, Logout, Login links shouldn't be absolute links
334 * Fixed: Home, Logout, Login links shouldn't be absolute links
329 * Fixed: 'Latest projects' box on the welcome screen should be hidden if there are no projects
335 * Fixed: 'Latest projects' box on the welcome screen should be hidden if there are no projects
330 * Fixed: error when using upcase language name in coderay
336 * Fixed: error when using upcase language name in coderay
331 * Fixed: error on Trac import when :due attribute is nil
337 * Fixed: error on Trac import when :due attribute is nil
332
338
333
339
334 == 2008-04-28 v0.7.0
340 == 2008-04-28 v0.7.0
335
341
336 * Forces Redmine to use rails 2.0.2 gem when vendor/rails is not present
342 * Forces Redmine to use rails 2.0.2 gem when vendor/rails is not present
337 * Queries can be marked as 'For all projects'. Such queries will be available on all projects and on the global issue list.
343 * Queries can be marked as 'For all projects'. Such queries will be available on all projects and on the global issue list.
338 * Add predefined date ranges to the time report
344 * Add predefined date ranges to the time report
339 * Time report can be done at issue level
345 * Time report can be done at issue level
340 * Various timelog report enhancements
346 * Various timelog report enhancements
341 * Accept the following formats for "hours" field: 1h, 1 h, 1 hour, 2 hours, 30m, 30min, 1h30, 1h30m, 1:30
347 * Accept the following formats for "hours" field: 1h, 1 h, 1 hour, 2 hours, 30m, 30min, 1h30, 1h30m, 1:30
342 * Display the context menu above and/or to the left of the click if needed
348 * Display the context menu above and/or to the left of the click if needed
343 * Make the admin project files list sortable
349 * Make the admin project files list sortable
344 * Mercurial: display working directory files sizes unless browsing a specific revision
350 * Mercurial: display working directory files sizes unless browsing a specific revision
345 * Preserve status filter and page number when using lock/unlock/activate links on the users list
351 * Preserve status filter and page number when using lock/unlock/activate links on the users list
346 * Redmine.pm support for LDAP authentication
352 * Redmine.pm support for LDAP authentication
347 * Better error message and AR errors in log for failed LDAP on-the-fly user creation
353 * Better error message and AR errors in log for failed LDAP on-the-fly user creation
348 * Redirected user to where he is coming from after logging hours
354 * Redirected user to where he is coming from after logging hours
349 * Warn user that subprojects are also deleted when deleting a project
355 * Warn user that subprojects are also deleted when deleting a project
350 * Include subprojects versions on calendar and gantt
356 * Include subprojects versions on calendar and gantt
351 * Notify project members when a message is posted if they want to receive notifications
357 * Notify project members when a message is posted if they want to receive notifications
352 * Fixed: Feed content limit setting has no effect
358 * Fixed: Feed content limit setting has no effect
353 * Fixed: Priorities not ordered when displayed as a filter in issue list
359 * Fixed: Priorities not ordered when displayed as a filter in issue list
354 * Fixed: can not display attached images inline in message replies
360 * Fixed: can not display attached images inline in message replies
355 * Fixed: Boards are not deleted when project is deleted
361 * Fixed: Boards are not deleted when project is deleted
356 * Fixed: trying to preview a new issue raises an exception with postgresql
362 * Fixed: trying to preview a new issue raises an exception with postgresql
357 * Fixed: single file 'View difference' links do not work because of duplicate slashes in url
363 * Fixed: single file 'View difference' links do not work because of duplicate slashes in url
358 * Fixed: inline image not displayed when including a wiki page
364 * Fixed: inline image not displayed when including a wiki page
359 * Fixed: CVS duplicate key violation
365 * Fixed: CVS duplicate key violation
360 * Fixed: ActiveRecord::StaleObjectError exception on closing a set of circular duplicate issues
366 * Fixed: ActiveRecord::StaleObjectError exception on closing a set of circular duplicate issues
361 * Fixed: custom field filters behaviour
367 * Fixed: custom field filters behaviour
362 * Fixed: Postgresql 8.3 compatibility
368 * Fixed: Postgresql 8.3 compatibility
363 * Fixed: Links to repository directories don't work
369 * Fixed: Links to repository directories don't work
364
370
365
371
366 == 2008-03-29 v0.7.0-rc1
372 == 2008-03-29 v0.7.0-rc1
367
373
368 * Overall activity view and feed added, link is available on the project list
374 * Overall activity view and feed added, link is available on the project list
369 * Git VCS support
375 * Git VCS support
370 * Rails 2.0 sessions cookie store compatibility
376 * Rails 2.0 sessions cookie store compatibility
371 * Use project identifiers in urls instead of ids
377 * Use project identifiers in urls instead of ids
372 * Default configuration data can now be loaded from the administration screen
378 * Default configuration data can now be loaded from the administration screen
373 * Administration settings screen split to tabs (email notifications options moved to 'Settings')
379 * Administration settings screen split to tabs (email notifications options moved to 'Settings')
374 * Project description is now unlimited and optional
380 * Project description is now unlimited and optional
375 * Wiki annotate view
381 * Wiki annotate view
376 * Escape HTML tag in textile content
382 * Escape HTML tag in textile content
377 * Add Redmine links to documents, versions, attachments and repository files
383 * Add Redmine links to documents, versions, attachments and repository files
378 * 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:
384 * 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:
379 * by using checkbox and/or the little pencil that will select/unselect all issues
385 * by using checkbox and/or the little pencil that will select/unselect all issues
380 * by clicking on the rows (but not on the links), Ctrl and Shift keys can be used to select multiple issues
386 * by clicking on the rows (but not on the links), Ctrl and Shift keys can be used to select multiple issues
381 * 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)
387 * 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)
382 * User display format is now configurable in administration settings
388 * User display format is now configurable in administration settings
383 * Issue list now supports bulk edit/move/delete (for a set of issues that belong to the same project)
389 * Issue list now supports bulk edit/move/delete (for a set of issues that belong to the same project)
384 * Merged 'change status', 'edit issue' and 'add note' actions:
390 * Merged 'change status', 'edit issue' and 'add note' actions:
385 * Users with 'edit issues' permission can now update any property including custom fields when adding a note or changing the status
391 * Users with 'edit issues' permission can now update any property including custom fields when adding a note or changing the status
386 * '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
392 * '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
387 * Details by assignees on issue summary view
393 * Details by assignees on issue summary view
388 * '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
394 * '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
389 * Change status select box default to current status
395 * Change status select box default to current status
390 * Preview for issue notes, news and messages
396 * Preview for issue notes, news and messages
391 * Optional description for attachments
397 * Optional description for attachments
392 * 'Fixed version' label changed to 'Target version'
398 * 'Fixed version' label changed to 'Target version'
393 * Let the user choose when deleting issues with reported hours to:
399 * Let the user choose when deleting issues with reported hours to:
394 * delete the hours
400 * delete the hours
395 * assign the hours to the project
401 * assign the hours to the project
396 * reassign the hours to another issue
402 * reassign the hours to another issue
397 * Date range filter and pagination on time entries detail view
403 * Date range filter and pagination on time entries detail view
398 * Propagate time tracking to the parent project
404 * Propagate time tracking to the parent project
399 * Switch added on the project activity view to include subprojects
405 * Switch added on the project activity view to include subprojects
400 * Display total estimated and spent hours on the version detail view
406 * Display total estimated and spent hours on the version detail view
401 * Weekly time tracking block for 'My page'
407 * Weekly time tracking block for 'My page'
402 * Permissions to edit time entries
408 * Permissions to edit time entries
403 * Include subprojects on the issue list, calendar, gantt and timelog by default (can be turned off is administration settings)
409 * Include subprojects on the issue list, calendar, gantt and timelog by default (can be turned off is administration settings)
404 * Roadmap enhancements (separate related issues from wiki contents, leading h1 in version wiki pages is hidden, smaller wiki headings)
410 * Roadmap enhancements (separate related issues from wiki contents, leading h1 in version wiki pages is hidden, smaller wiki headings)
405 * Make versions with same date sorted by name
411 * Make versions with same date sorted by name
406 * Allow issue list to be sorted by target version
412 * Allow issue list to be sorted by target version
407 * Related changesets messages displayed on the issue details view
413 * Related changesets messages displayed on the issue details view
408 * Create a journal and send an email when an issue is closed by commit
414 * Create a journal and send an email when an issue is closed by commit
409 * Add 'Author' to the available columns for the issue list
415 * Add 'Author' to the available columns for the issue list
410 * More appropriate default sort order on sortable columns
416 * More appropriate default sort order on sortable columns
411 * Add issue subject to the time entries view and issue subject, description and tracker to the csv export
417 * Add issue subject to the time entries view and issue subject, description and tracker to the csv export
412 * Permissions to edit issue notes
418 * Permissions to edit issue notes
413 * Display date/time instead of date on files list
419 * Display date/time instead of date on files list
414 * Do not show Roadmap menu item if the project doesn't define any versions
420 * Do not show Roadmap menu item if the project doesn't define any versions
415 * Allow longer version names (60 chars)
421 * Allow longer version names (60 chars)
416 * Ability to copy an existing workflow when creating a new role
422 * Ability to copy an existing workflow when creating a new role
417 * Display custom fields in two columns on the issue form
423 * Display custom fields in two columns on the issue form
418 * Added 'estimated time' in the csv export of the issue list
424 * Added 'estimated time' in the csv export of the issue list
419 * Display the last 30 days on the activity view rather than the current month (number of days can be configured in the application settings)
425 * Display the last 30 days on the activity view rather than the current month (number of days can be configured in the application settings)
420 * Setting for whether new projects should be public by default
426 * Setting for whether new projects should be public by default
421 * User preference to choose how comments/replies are displayed: in chronological or reverse chronological order
427 * User preference to choose how comments/replies are displayed: in chronological or reverse chronological order
422 * Added default value for custom fields
428 * Added default value for custom fields
423 * Added tabindex property on wiki toolbar buttons (to easily move from field to field using the tab key)
429 * Added tabindex property on wiki toolbar buttons (to easily move from field to field using the tab key)
424 * Redirect to issue page after creating a new issue
430 * Redirect to issue page after creating a new issue
425 * Wiki toolbar improvements (mainly for Firefox)
431 * Wiki toolbar improvements (mainly for Firefox)
426 * Display wiki syntax quick ref link on all wiki textareas
432 * Display wiki syntax quick ref link on all wiki textareas
427 * Display links to Atom feeds
433 * Display links to Atom feeds
428 * Breadcrumb nav for the forums
434 * Breadcrumb nav for the forums
429 * Show replies when choosing to display messages in the activity
435 * Show replies when choosing to display messages in the activity
430 * Added 'include' macro to include another wiki page
436 * Added 'include' macro to include another wiki page
431 * RedmineWikiFormatting page available as a static HTML file locally
437 * RedmineWikiFormatting page available as a static HTML file locally
432 * Wrap diff content
438 * Wrap diff content
433 * Strip out email address from authors in repository screens
439 * Strip out email address from authors in repository screens
434 * Highlight the current item of the main menu
440 * Highlight the current item of the main menu
435 * Added simple syntax highlighters for php and java languages
441 * Added simple syntax highlighters for php and java languages
436 * Do not show empty diffs
442 * Do not show empty diffs
437 * Show explicit error message when the scm command failed (eg. when svn binary is not available)
443 * Show explicit error message when the scm command failed (eg. when svn binary is not available)
438 * Lithuanian translation added (Sergej Jegorov)
444 * Lithuanian translation added (Sergej Jegorov)
439 * Ukrainan translation added (Natalia Konovka & Mykhaylo Sorochan)
445 * Ukrainan translation added (Natalia Konovka & Mykhaylo Sorochan)
440 * Danish translation added (Mads Vestergaard)
446 * Danish translation added (Mads Vestergaard)
441 * Added i18n support to the jstoolbar and various settings screen
447 * Added i18n support to the jstoolbar and various settings screen
442 * RedCloth's glyphs no longer user
448 * RedCloth's glyphs no longer user
443 * New icons for the wiki toolbar (from http://www.famfamfam.com/lab/icons/silk/)
449 * New icons for the wiki toolbar (from http://www.famfamfam.com/lab/icons/silk/)
444 * The following menus can now be extended by plugins: top_menu, account_menu, application_menu
450 * The following menus can now be extended by plugins: top_menu, account_menu, application_menu
445 * Added a simple rake task to fetch changesets from the repositories: rake redmine:fetch_changesets
451 * Added a simple rake task to fetch changesets from the repositories: rake redmine:fetch_changesets
446 * Remove hardcoded "Redmine" strings in account related emails and use application title instead
452 * Remove hardcoded "Redmine" strings in account related emails and use application title instead
447 * Mantis importer preserve bug ids
453 * Mantis importer preserve bug ids
448 * Trac importer: Trac guide wiki pages skipped
454 * Trac importer: Trac guide wiki pages skipped
449 * Trac importer: wiki attachments migration added
455 * Trac importer: wiki attachments migration added
450 * Trac importer: support database schema for Trac migration
456 * Trac importer: support database schema for Trac migration
451 * Trac importer: support CamelCase links
457 * Trac importer: support CamelCase links
452 * Removes the Redmine version from the footer (can be viewed on admin -> info)
458 * Removes the Redmine version from the footer (can be viewed on admin -> info)
453 * Rescue and display an error message when trying to delete a role that is in use
459 * Rescue and display an error message when trying to delete a role that is in use
454 * 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
460 * 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
455 * Add "--encoding utf8" option to the Mercurial "hg log" command in order to get utf8 encoded commit logs
461 * Add "--encoding utf8" option to the Mercurial "hg log" command in order to get utf8 encoded commit logs
456 * Fixed: Gantt and calendar not properly refreshed (fragment caching removed)
462 * Fixed: Gantt and calendar not properly refreshed (fragment caching removed)
457 * Fixed: Textile image with style attribute cause internal server error
463 * Fixed: Textile image with style attribute cause internal server error
458 * Fixed: wiki TOC not rendered properly when used in an issue or document description
464 * Fixed: wiki TOC not rendered properly when used in an issue or document description
459 * Fixed: 'has already been taken' error message on username and email fields if left empty
465 * Fixed: 'has already been taken' error message on username and email fields if left empty
460 * Fixed: non-ascii attachement filename with IE
466 * Fixed: non-ascii attachement filename with IE
461 * Fixed: wrong url for wiki syntax pop-up when Redmine urls are prefixed
467 * Fixed: wrong url for wiki syntax pop-up when Redmine urls are prefixed
462 * Fixed: search for all words doesn't work
468 * Fixed: search for all words doesn't work
463 * Fixed: Do not show sticky and locked checkboxes when replying to a message
469 * Fixed: Do not show sticky and locked checkboxes when replying to a message
464 * Fixed: Mantis importer: do not duplicate Mantis username in firstname and lastname if realname is blank
470 * Fixed: Mantis importer: do not duplicate Mantis username in firstname and lastname if realname is blank
465 * Fixed: Date custom fields not displayed as specified in application settings
471 * Fixed: Date custom fields not displayed as specified in application settings
466 * Fixed: titles not escaped in the activity view
472 * Fixed: titles not escaped in the activity view
467 * Fixed: issue queries can not use custom fields marked as 'for all projects' in a project context
473 * Fixed: issue queries can not use custom fields marked as 'for all projects' in a project context
468 * 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
474 * 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
469 * Fixed: locked users should not receive email notifications
475 * Fixed: locked users should not receive email notifications
470 * Fixed: custom field selection is not saved when unchecking them all on project settings
476 * Fixed: custom field selection is not saved when unchecking them all on project settings
471 * Fixed: can not lock a topic when creating it
477 * Fixed: can not lock a topic when creating it
472 * Fixed: Incorrect filtering for unset values when using 'is not' filter
478 * Fixed: Incorrect filtering for unset values when using 'is not' filter
473 * Fixed: PostgreSQL issues_seq_id not updated when using Trac importer
479 * Fixed: PostgreSQL issues_seq_id not updated when using Trac importer
474 * Fixed: ajax pagination does not scroll up
480 * Fixed: ajax pagination does not scroll up
475 * Fixed: error when uploading a file with no content-type specified by the browser
481 * Fixed: error when uploading a file with no content-type specified by the browser
476 * Fixed: wiki and changeset links not displayed when previewing issue description or notes
482 * Fixed: wiki and changeset links not displayed when previewing issue description or notes
477 * Fixed: 'LdapError: no bind result' error when authenticating
483 * Fixed: 'LdapError: no bind result' error when authenticating
478 * Fixed: 'LdapError: invalid binding information' when no username/password are set on the LDAP account
484 * Fixed: 'LdapError: invalid binding information' when no username/password are set on the LDAP account
479 * Fixed: CVS repository doesn't work if port is used in the url
485 * Fixed: CVS repository doesn't work if port is used in the url
480 * Fixed: Email notifications: host name is missing in generated links
486 * Fixed: Email notifications: host name is missing in generated links
481 * Fixed: Email notifications: referenced changesets, wiki pages, attachments... are not turned into links
487 * Fixed: Email notifications: referenced changesets, wiki pages, attachments... are not turned into links
482 * Fixed: Do not clear issue relations when moving an issue to another project if cross-project issue relations are allowed
488 * Fixed: Do not clear issue relations when moving an issue to another project if cross-project issue relations are allowed
483 * Fixed: "undefined method 'textilizable'" error on email notification when running Repository#fetch_changesets from the console
489 * Fixed: "undefined method 'textilizable'" error on email notification when running Repository#fetch_changesets from the console
484 * Fixed: Do not send an email with no recipient, cc or bcc
490 * Fixed: Do not send an email with no recipient, cc or bcc
485 * Fixed: fetch_changesets fails on commit comments that close 2 duplicates issues.
491 * Fixed: fetch_changesets fails on commit comments that close 2 duplicates issues.
486 * Fixed: Mercurial browsing under unix-like os and for directory depth > 2
492 * Fixed: Mercurial browsing under unix-like os and for directory depth > 2
487 * Fixed: Wiki links with pipe can not be used in wiki tables
493 * Fixed: Wiki links with pipe can not be used in wiki tables
488 * Fixed: migrate_from_trac doesn't import timestamps of wiki and tickets
494 * Fixed: migrate_from_trac doesn't import timestamps of wiki and tickets
489 * Fixed: when bulk editing, setting "Assigned to" to "nobody" causes an sql error with Postgresql
495 * Fixed: when bulk editing, setting "Assigned to" to "nobody" causes an sql error with Postgresql
490
496
491
497
492 == 2008-03-12 v0.6.4
498 == 2008-03-12 v0.6.4
493
499
494 * Fixed: private projects name are displayed on account/show even if the current user doesn't have access to these private projects
500 * Fixed: private projects name are displayed on account/show even if the current user doesn't have access to these private projects
495 * Fixed: potential LDAP authentication security flaw
501 * Fixed: potential LDAP authentication security flaw
496 * Fixed: context submenus on the issue list don't show up with IE6.
502 * Fixed: context submenus on the issue list don't show up with IE6.
497 * Fixed: Themes are not applied with Rails 2.0
503 * Fixed: Themes are not applied with Rails 2.0
498 * Fixed: crash when fetching Mercurial changesets if changeset[:files] is nil
504 * Fixed: crash when fetching Mercurial changesets if changeset[:files] is nil
499 * Fixed: Mercurial repository browsing
505 * Fixed: Mercurial repository browsing
500 * Fixed: undefined local variable or method 'log' in CvsAdapter when a cvs command fails
506 * Fixed: undefined local variable or method 'log' in CvsAdapter when a cvs command fails
501 * Fixed: not null constraints not removed with Postgresql
507 * Fixed: not null constraints not removed with Postgresql
502 * Doctype set to transitional
508 * Doctype set to transitional
503
509
504
510
505 == 2007-12-18 v0.6.3
511 == 2007-12-18 v0.6.3
506
512
507 * Fixed: upload doesn't work in 'Files' section
513 * Fixed: upload doesn't work in 'Files' section
508
514
509
515
510 == 2007-12-16 v0.6.2
516 == 2007-12-16 v0.6.2
511
517
512 * Search engine: issue custom fields can now be searched
518 * Search engine: issue custom fields can now be searched
513 * News comments are now textilized
519 * News comments are now textilized
514 * Updated Japanese translation (Satoru Kurashiki)
520 * Updated Japanese translation (Satoru Kurashiki)
515 * Updated Chinese translation (Shortie Lo)
521 * Updated Chinese translation (Shortie Lo)
516 * Fixed Rails 2.0 compatibility bugs:
522 * Fixed Rails 2.0 compatibility bugs:
517 * Unable to create a wiki
523 * Unable to create a wiki
518 * Gantt and calendar error
524 * Gantt and calendar error
519 * Trac importer error (readonly? is defined by ActiveRecord)
525 * Trac importer error (readonly? is defined by ActiveRecord)
520 * Fixed: 'assigned to me' filter broken
526 * Fixed: 'assigned to me' filter broken
521 * Fixed: crash when validation fails on issue edition with no custom fields
527 * Fixed: crash when validation fails on issue edition with no custom fields
522 * Fixed: reposman "can't find group" error
528 * Fixed: reposman "can't find group" error
523 * Fixed: 'LDAP account password is too long' error when leaving the field empty on creation
529 * Fixed: 'LDAP account password is too long' error when leaving the field empty on creation
524 * Fixed: empty lines when displaying repository files with Windows style eol
530 * Fixed: empty lines when displaying repository files with Windows style eol
525 * Fixed: missing body closing tag in repository annotate and entry views
531 * Fixed: missing body closing tag in repository annotate and entry views
526
532
527
533
528 == 2007-12-10 v0.6.1
534 == 2007-12-10 v0.6.1
529
535
530 * Rails 2.0 compatibility
536 * Rails 2.0 compatibility
531 * Custom fields can now be displayed as columns on the issue list
537 * Custom fields can now be displayed as columns on the issue list
532 * Added version details view (accessible from the roadmap)
538 * Added version details view (accessible from the roadmap)
533 * Roadmap: more accurate completion percentage calculation (done ratio of open issues is now taken into account)
539 * Roadmap: more accurate completion percentage calculation (done ratio of open issues is now taken into account)
534 * Added per-project tracker selection. Trackers can be selected on project settings
540 * Added per-project tracker selection. Trackers can be selected on project settings
535 * Anonymous users can now be allowed to create, edit, comment issues, comment news and post messages in the forums
541 * Anonymous users can now be allowed to create, edit, comment issues, comment news and post messages in the forums
536 * Forums: messages can now be edited/deleted (explicit permissions need to be given)
542 * Forums: messages can now be edited/deleted (explicit permissions need to be given)
537 * Forums: topics can be locked so that no reply can be added
543 * Forums: topics can be locked so that no reply can be added
538 * Forums: topics can be marked as sticky so that they always appear at the top of the list
544 * Forums: topics can be marked as sticky so that they always appear at the top of the list
539 * Forums: attachments can now be added to replies
545 * Forums: attachments can now be added to replies
540 * Added time zone support
546 * Added time zone support
541 * Added a setting to choose the account activation strategy (available in application settings)
547 * Added a setting to choose the account activation strategy (available in application settings)
542 * Added 'Classic' theme (inspired from the v0.51 design)
548 * Added 'Classic' theme (inspired from the v0.51 design)
543 * Added an alternate theme which provides issue list colorization based on issues priority
549 * Added an alternate theme which provides issue list colorization based on issues priority
544 * Added Bazaar SCM adapter
550 * Added Bazaar SCM adapter
545 * Added Annotate/Blame view in the repository browser (except for Darcs SCM)
551 * Added Annotate/Blame view in the repository browser (except for Darcs SCM)
546 * Diff style (inline or side by side) automatically saved as a user preference
552 * Diff style (inline or side by side) automatically saved as a user preference
547 * Added issues status changes on the activity view (by Cyril Mougel)
553 * Added issues status changes on the activity view (by Cyril Mougel)
548 * Added forums topics on the activity view (disabled by default)
554 * Added forums topics on the activity view (disabled by default)
549 * Added an option on 'My account' for users who don't want to be notified of changes that they make
555 * Added an option on 'My account' for users who don't want to be notified of changes that they make
550 * Trac importer now supports mysql and postgresql databases
556 * Trac importer now supports mysql and postgresql databases
551 * Trac importer improvements (by Mat Trudel)
557 * Trac importer improvements (by Mat Trudel)
552 * 'fixed version' field can now be displayed on the issue list
558 * 'fixed version' field can now be displayed on the issue list
553 * Added a couple of new formats for the 'date format' setting
559 * Added a couple of new formats for the 'date format' setting
554 * Added Traditional Chinese translation (by Shortie Lo)
560 * Added Traditional Chinese translation (by Shortie Lo)
555 * Added Russian translation (iGor kMeta)
561 * Added Russian translation (iGor kMeta)
556 * Project name format limitation removed (name can now contain any character)
562 * Project name format limitation removed (name can now contain any character)
557 * Project identifier maximum length changed from 12 to 20
563 * Project identifier maximum length changed from 12 to 20
558 * Changed the maximum length of LDAP account to 255 characters
564 * Changed the maximum length of LDAP account to 255 characters
559 * Removed the 12 characters limit on passwords
565 * Removed the 12 characters limit on passwords
560 * Added wiki macros support
566 * Added wiki macros support
561 * Performance improvement on workflow setup screen
567 * Performance improvement on workflow setup screen
562 * More detailed html title on several views
568 * More detailed html title on several views
563 * Custom fields can now be reordered
569 * Custom fields can now be reordered
564 * Search engine: search can be restricted to an exact phrase by using quotation marks
570 * Search engine: search can be restricted to an exact phrase by using quotation marks
565 * Added custom fields marked as 'For all projects' to the csv export of the cross project issue list
571 * Added custom fields marked as 'For all projects' to the csv export of the cross project issue list
566 * Email notifications are now sent as Blind carbon copy by default
572 * Email notifications are now sent as Blind carbon copy by default
567 * Fixed: all members (including non active) should be deleted when deleting a project
573 * Fixed: all members (including non active) should be deleted when deleting a project
568 * Fixed: Error on wiki syntax link (accessible from wiki/edit)
574 * Fixed: Error on wiki syntax link (accessible from wiki/edit)
569 * Fixed: 'quick jump to a revision' form on the revisions list
575 * Fixed: 'quick jump to a revision' form on the revisions list
570 * Fixed: error on admin/info if there's more than 1 plugin installed
576 * Fixed: error on admin/info if there's more than 1 plugin installed
571 * Fixed: svn or ldap password can be found in clear text in the html source in editing mode
577 * Fixed: svn or ldap password can be found in clear text in the html source in editing mode
572 * Fixed: 'Assigned to' drop down list is not sorted
578 * Fixed: 'Assigned to' drop down list is not sorted
573 * Fixed: 'View all issues' link doesn't work on issues/show
579 * Fixed: 'View all issues' link doesn't work on issues/show
574 * Fixed: error on account/register when validation fails
580 * Fixed: error on account/register when validation fails
575 * Fixed: Error when displaying the issue list if a float custom field is marked as 'used as filter'
581 * Fixed: Error when displaying the issue list if a float custom field is marked as 'used as filter'
576 * Fixed: Mercurial adapter breaks on missing :files entry in changeset hash (James Britt)
582 * Fixed: Mercurial adapter breaks on missing :files entry in changeset hash (James Britt)
577 * Fixed: Wrong feed URLs on the home page
583 * Fixed: Wrong feed URLs on the home page
578 * Fixed: Update of time entry fails when the issue has been moved to an other project
584 * Fixed: Update of time entry fails when the issue has been moved to an other project
579 * Fixed: Error when moving an issue without changing its tracker (Postgresql)
585 * Fixed: Error when moving an issue without changing its tracker (Postgresql)
580 * Fixed: Changes not recorded when using :pserver string (CVS adapter)
586 * Fixed: Changes not recorded when using :pserver string (CVS adapter)
581 * Fixed: admin should be able to move issues to any project
587 * Fixed: admin should be able to move issues to any project
582 * Fixed: adding an attachment is not possible when changing the status of an issue
588 * Fixed: adding an attachment is not possible when changing the status of an issue
583 * Fixed: No mime-types in documents/files downloading
589 * Fixed: No mime-types in documents/files downloading
584 * Fixed: error when sorting the messages if there's only one board for the project
590 * Fixed: error when sorting the messages if there's only one board for the project
585 * Fixed: 'me' doesn't appear in the drop down filters on a project issue list.
591 * Fixed: 'me' doesn't appear in the drop down filters on a project issue list.
586
592
587 == 2007-11-04 v0.6.0
593 == 2007-11-04 v0.6.0
588
594
589 * Permission model refactoring.
595 * Permission model refactoring.
590 * Permissions: there are now 2 builtin roles that can be used to specify permissions given to other users than members of projects
596 * Permissions: there are now 2 builtin roles that can be used to specify permissions given to other users than members of projects
591 * Permissions: some permissions (eg. browse the repository) can be removed for certain roles
597 * Permissions: some permissions (eg. browse the repository) can be removed for certain roles
592 * Permissions: modules (eg. issue tracking, news, documents...) can be enabled/disabled at project level
598 * Permissions: modules (eg. issue tracking, news, documents...) can be enabled/disabled at project level
593 * Added Mantis and Trac importers
599 * Added Mantis and Trac importers
594 * New application layout
600 * New application layout
595 * Added "Bulk edit" functionality on the issue list
601 * Added "Bulk edit" functionality on the issue list
596 * More flexible mail notifications settings at user level
602 * More flexible mail notifications settings at user level
597 * 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
603 * 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
598 * 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
604 * 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
599 * Added the ability to customize issue list columns (at application level or for each saved query)
605 * Added the ability to customize issue list columns (at application level or for each saved query)
600 * Overdue versions (date reached and open issues > 0) are now always displayed on the roadmap
606 * Overdue versions (date reached and open issues > 0) are now always displayed on the roadmap
601 * Added the ability to rename wiki pages (specific permission required)
607 * Added the ability to rename wiki pages (specific permission required)
602 * Search engines now supports pagination. Results are sorted in reverse chronological order
608 * Search engines now supports pagination. Results are sorted in reverse chronological order
603 * Added "Estimated hours" attribute on issues
609 * Added "Estimated hours" attribute on issues
604 * A category with assigned issue can now be deleted. 2 options are proposed: remove assignments or reassign issues to another category
610 * A category with assigned issue can now be deleted. 2 options are proposed: remove assignments or reassign issues to another category
605 * Forum notifications are now also sent to the authors of the thread, even if they donοΏ½t watch the board
611 * Forum notifications are now also sent to the authors of the thread, even if they donοΏ½t watch the board
606 * Added an application setting to specify the application protocol (http or https) used to generate urls in emails
612 * Added an application setting to specify the application protocol (http or https) used to generate urls in emails
607 * Gantt chart: now starts at the current month by default
613 * Gantt chart: now starts at the current month by default
608 * Gantt chart: month count and zoom factor are automatically saved as user preferences
614 * Gantt chart: month count and zoom factor are automatically saved as user preferences
609 * Wiki links can now refer to other project wikis
615 * Wiki links can now refer to other project wikis
610 * Added wiki index by date
616 * Added wiki index by date
611 * Added preview on add/edit issue form
617 * Added preview on add/edit issue form
612 * Emails footer can now be customized from the admin interface (Admin -> Email notifications)
618 * Emails footer can now be customized from the admin interface (Admin -> Email notifications)
613 * 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)
619 * 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)
614 * Calendar: first day of week can now be set in lang files
620 * Calendar: first day of week can now be set in lang files
615 * Automatic closing of duplicate issues
621 * Automatic closing of duplicate issues
616 * Added a cross-project issue list
622 * Added a cross-project issue list
617 * AJAXified the SCM browser (tree view)
623 * AJAXified the SCM browser (tree view)
618 * Pretty URL for the repository browser (Cyril Mougel)
624 * Pretty URL for the repository browser (Cyril Mougel)
619 * Search engine: added a checkbox to search titles only
625 * Search engine: added a checkbox to search titles only
620 * Added "% done" in the filter list
626 * Added "% done" in the filter list
621 * Enumerations: values can now be reordered and a default value can be specified (eg. default issue priority)
627 * Enumerations: values can now be reordered and a default value can be specified (eg. default issue priority)
622 * Added some accesskeys
628 * Added some accesskeys
623 * Added "Float" as a custom field format
629 * Added "Float" as a custom field format
624 * Added basic Theme support
630 * Added basic Theme support
625 * Added the ability to set the οΏ½done ratioοΏ½ of issues fixed by commit (Nikolay Solakov)
631 * Added the ability to set the οΏ½done ratioοΏ½ of issues fixed by commit (Nikolay Solakov)
626 * Added custom fields in issue related mail notifications
632 * Added custom fields in issue related mail notifications
627 * Email notifications are now sent in plain text and html
633 * Email notifications are now sent in plain text and html
628 * Gantt chart can now be exported to a graphic file (png). This functionality is only available if RMagick is installed.
634 * Gantt chart can now be exported to a graphic file (png). This functionality is only available if RMagick is installed.
629 * Added syntax highlightment for repository files and wiki
635 * Added syntax highlightment for repository files and wiki
630 * Improved automatic Redmine links
636 * Improved automatic Redmine links
631 * Added automatic table of content support on wiki pages
637 * Added automatic table of content support on wiki pages
632 * Added radio buttons on the documents list to sort documents by category, date, title or author
638 * Added radio buttons on the documents list to sort documents by category, date, title or author
633 * Added basic plugin support, with a sample plugin
639 * Added basic plugin support, with a sample plugin
634 * Added a link to add a new category when creating or editing an issue
640 * Added a link to add a new category when creating or editing an issue
635 * Added a "Assignable" boolean on the Role model. If unchecked, issues can not be assigned to users having this role.
641 * Added a "Assignable" boolean on the Role model. If unchecked, issues can not be assigned to users having this role.
636 * Added an option to be able to relate issues in different projects
642 * Added an option to be able to relate issues in different projects
637 * Added the ability to move issues (to another project) without changing their trackers.
643 * Added the ability to move issues (to another project) without changing their trackers.
638 * Atom feeds added on project activity, news and changesets
644 * Atom feeds added on project activity, news and changesets
639 * Added the ability to reset its own RSS access key
645 * Added the ability to reset its own RSS access key
640 * Main project list now displays root projects with their subprojects
646 * Main project list now displays root projects with their subprojects
641 * Added anchor links to issue notes
647 * Added anchor links to issue notes
642 * Added reposman Ruby version. This script can now register created repositories in Redmine (Nicolas Chuche)
648 * Added reposman Ruby version. This script can now register created repositories in Redmine (Nicolas Chuche)
643 * Issue notes are now included in search
649 * Issue notes are now included in search
644 * Added email sending test functionality
650 * Added email sending test functionality
645 * Added LDAPS support for LDAP authentication
651 * Added LDAPS support for LDAP authentication
646 * Removed hard-coded URLs in mail templates
652 * Removed hard-coded URLs in mail templates
647 * Subprojects are now grouped by projects in the navigation drop-down menu
653 * Subprojects are now grouped by projects in the navigation drop-down menu
648 * Added a new value for date filters: this week
654 * Added a new value for date filters: this week
649 * Added cache for application settings
655 * Added cache for application settings
650 * Added Polish translation (Tomasz Gawryl)
656 * Added Polish translation (Tomasz Gawryl)
651 * Added Czech translation (Jan Kadlecek)
657 * Added Czech translation (Jan Kadlecek)
652 * Added Romanian translation (Csongor Bartus)
658 * Added Romanian translation (Csongor Bartus)
653 * Added Hebrew translation (Bob Builder)
659 * Added Hebrew translation (Bob Builder)
654 * Added Serbian translation (Dragan Matic)
660 * Added Serbian translation (Dragan Matic)
655 * Added Korean translation (Choi Jong Yoon)
661 * Added Korean translation (Choi Jong Yoon)
656 * Fixed: the link to delete issue relations is displayed even if the user is not authorized to delete relations
662 * Fixed: the link to delete issue relations is displayed even if the user is not authorized to delete relations
657 * Performance improvement on calendar and gantt
663 * Performance improvement on calendar and gantt
658 * Fixed: wiki preview doesnοΏ½t work on long entries
664 * Fixed: wiki preview doesnοΏ½t work on long entries
659 * Fixed: queries with multiple custom fields return no result
665 * Fixed: queries with multiple custom fields return no result
660 * Fixed: Can not authenticate user against LDAP if its DN contains non-ascii characters
666 * Fixed: Can not authenticate user against LDAP if its DN contains non-ascii characters
661 * Fixed: URL with ~ broken in wiki formatting
667 * Fixed: URL with ~ broken in wiki formatting
662 * Fixed: some quotation marks are rendered as strange characters in pdf
668 * Fixed: some quotation marks are rendered as strange characters in pdf
663
669
664
670
665 == 2007-07-15 v0.5.1
671 == 2007-07-15 v0.5.1
666
672
667 * per project forums added
673 * per project forums added
668 * added the ability to archive projects
674 * added the ability to archive projects
669 * added οΏ½WatchοΏ½ functionality on issues. It allows users to receive notifications about issue changes
675 * added οΏ½WatchοΏ½ functionality on issues. It allows users to receive notifications about issue changes
670 * custom fields for issues can now be used as filters on issue list
676 * custom fields for issues can now be used as filters on issue list
671 * added per user custom queries
677 * added per user custom queries
672 * commit messages are now scanned for referenced or fixed issue IDs (keywords defined in Admin -> Settings)
678 * commit messages are now scanned for referenced or fixed issue IDs (keywords defined in Admin -> Settings)
673 * projects list now shows the list of public projects and private projects for which the user is a member
679 * projects list now shows the list of public projects and private projects for which the user is a member
674 * versions can now be created with no date
680 * versions can now be created with no date
675 * added issue count details for versions on Reports view
681 * added issue count details for versions on Reports view
676 * added time report, by member/activity/tracker/version and year/month/week for the selected period
682 * added time report, by member/activity/tracker/version and year/month/week for the selected period
677 * each category can now be associated to a user, so that new issues in that category are automatically assigned to that user
683 * each category can now be associated to a user, so that new issues in that category are automatically assigned to that user
678 * added autologin feature (disabled by default)
684 * added autologin feature (disabled by default)
679 * optimistic locking added for wiki edits
685 * optimistic locking added for wiki edits
680 * added wiki diff
686 * added wiki diff
681 * added the ability to destroy wiki pages (requires permission)
687 * added the ability to destroy wiki pages (requires permission)
682 * a wiki page can now be attached to each version, and displayed on the roadmap
688 * a wiki page can now be attached to each version, and displayed on the roadmap
683 * attachments can now be added to wiki pages (original patch by Pavol Murin) and displayed online
689 * attachments can now be added to wiki pages (original patch by Pavol Murin) and displayed online
684 * added an option to see all versions in the roadmap view (including completed ones)
690 * added an option to see all versions in the roadmap view (including completed ones)
685 * added basic issue relations
691 * added basic issue relations
686 * added the ability to log time when changing an issue status
692 * added the ability to log time when changing an issue status
687 * account information can now be sent to the user when creating an account
693 * account information can now be sent to the user when creating an account
688 * author and assignee of an issue always receive notifications (even if they turned of mail notifications)
694 * author and assignee of an issue always receive notifications (even if they turned of mail notifications)
689 * added a quick search form in page header
695 * added a quick search form in page header
690 * added 'me' value for 'assigned to' and 'author' query filters
696 * added 'me' value for 'assigned to' and 'author' query filters
691 * added a link on revision screen to see the entire diff for the revision
697 * added a link on revision screen to see the entire diff for the revision
692 * added last commit message for each entry in repository browser
698 * added last commit message for each entry in repository browser
693 * added the ability to view a file diff with free to/from revision selection.
699 * added the ability to view a file diff with free to/from revision selection.
694 * text files can now be viewed online when browsing the repository
700 * text files can now be viewed online when browsing the repository
695 * added basic support for other SCM: CVS (Ralph Vater), Mercurial and Darcs
701 * added basic support for other SCM: CVS (Ralph Vater), Mercurial and Darcs
696 * added fragment caching for svn diffs
702 * added fragment caching for svn diffs
697 * added fragment caching for calendar and gantt views
703 * added fragment caching for calendar and gantt views
698 * login field automatically focused on login form
704 * login field automatically focused on login form
699 * subproject name displayed on issue list, calendar and gantt
705 * subproject name displayed on issue list, calendar and gantt
700 * added an option to choose the date format: language based or ISO 8601
706 * added an option to choose the date format: language based or ISO 8601
701 * added a simple mail handler. It lets users add notes to an existing issue by replying to the initial notification email.
707 * added a simple mail handler. It lets users add notes to an existing issue by replying to the initial notification email.
702 * a 403 error page is now displayed (instead of a blank page) when trying to access a protected page
708 * a 403 error page is now displayed (instead of a blank page) when trying to access a protected page
703 * added portuguese translation (Joao Carlos Clementoni)
709 * added portuguese translation (Joao Carlos Clementoni)
704 * added partial online help japanese translation (Ken Date)
710 * added partial online help japanese translation (Ken Date)
705 * added bulgarian translation (Nikolay Solakov)
711 * added bulgarian translation (Nikolay Solakov)
706 * added dutch translation (Linda van den Brink)
712 * added dutch translation (Linda van den Brink)
707 * added swedish translation (Thomas Habets)
713 * added swedish translation (Thomas Habets)
708 * italian translation update (Alessio Spadaro)
714 * italian translation update (Alessio Spadaro)
709 * japanese translation update (Satoru Kurashiki)
715 * japanese translation update (Satoru Kurashiki)
710 * fixed: error on history atom feed when thereοΏ½s no notes on an issue change
716 * fixed: error on history atom feed when thereοΏ½s no notes on an issue change
711 * fixed: error in journalizing an issue with longtext custom fields (Postgresql)
717 * fixed: error in journalizing an issue with longtext custom fields (Postgresql)
712 * fixed: creation of Oracle schema
718 * fixed: creation of Oracle schema
713 * fixed: last day of the month not included in project activity
719 * fixed: last day of the month not included in project activity
714 * fixed: files with an apostrophe in their names can't be accessed in SVN repository
720 * fixed: files with an apostrophe in their names can't be accessed in SVN repository
715 * fixed: performance issue on RepositoriesController#revisions when a changeset has a great number of changes (eg. 100,000)
721 * fixed: performance issue on RepositoriesController#revisions when a changeset has a great number of changes (eg. 100,000)
716 * fixed: open/closed issue counts are always 0 on reports view (postgresql)
722 * fixed: open/closed issue counts are always 0 on reports view (postgresql)
717 * fixed: date query filters (wrong results and sql error with postgresql)
723 * fixed: date query filters (wrong results and sql error with postgresql)
718 * fixed: confidentiality issue on account/show (private project names displayed to anyone)
724 * fixed: confidentiality issue on account/show (private project names displayed to anyone)
719 * fixed: Long text custom fields displayed without line breaks
725 * fixed: Long text custom fields displayed without line breaks
720 * fixed: Error when editing the wokflow after deleting a status
726 * fixed: Error when editing the wokflow after deleting a status
721 * fixed: SVN commit dates are now stored as local time
727 * fixed: SVN commit dates are now stored as local time
722
728
723
729
724 == 2007-04-11 v0.5.0
730 == 2007-04-11 v0.5.0
725
731
726 * added per project Wiki
732 * added per project Wiki
727 * added rss/atom feeds at project level (custom queries can be used as feeds)
733 * added rss/atom feeds at project level (custom queries can be used as feeds)
728 * added search engine (search in issues, news, commits, wiki pages, documents)
734 * added search engine (search in issues, news, commits, wiki pages, documents)
729 * simple time tracking functionality added
735 * simple time tracking functionality added
730 * added version due dates on calendar and gantt
736 * added version due dates on calendar and gantt
731 * added subprojects issue count on project Reports page
737 * added subprojects issue count on project Reports page
732 * added the ability to copy an existing workflow when creating a new tracker
738 * added the ability to copy an existing workflow when creating a new tracker
733 * added the ability to include subprojects on calendar and gantt
739 * added the ability to include subprojects on calendar and gantt
734 * added the ability to select trackers to display on calendar and gantt (Jeffrey Jones)
740 * added the ability to select trackers to display on calendar and gantt (Jeffrey Jones)
735 * added side by side svn diff view (Cyril Mougel)
741 * added side by side svn diff view (Cyril Mougel)
736 * added back subproject filter on issue list
742 * added back subproject filter on issue list
737 * added permissions report in admin area
743 * added permissions report in admin area
738 * added a status filter on users list
744 * added a status filter on users list
739 * support for password-protected SVN repositories
745 * support for password-protected SVN repositories
740 * SVN commits are now stored in the database
746 * SVN commits are now stored in the database
741 * added simple svn statistics SVG graphs
747 * added simple svn statistics SVG graphs
742 * progress bars for roadmap versions (Nick Read)
748 * progress bars for roadmap versions (Nick Read)
743 * issue history now shows file uploads and deletions
749 * issue history now shows file uploads and deletions
744 * #id patterns are turned into links to issues in descriptions and commit messages
750 * #id patterns are turned into links to issues in descriptions and commit messages
745 * japanese translation added (Satoru Kurashiki)
751 * japanese translation added (Satoru Kurashiki)
746 * chinese simplified translation added (Andy Wu)
752 * chinese simplified translation added (Andy Wu)
747 * italian translation added (Alessio Spadaro)
753 * italian translation added (Alessio Spadaro)
748 * added scripts to manage SVN repositories creation and user access control using ssh+svn (Nicolas Chuche)
754 * added scripts to manage SVN repositories creation and user access control using ssh+svn (Nicolas Chuche)
749 * better calendar rendering time
755 * better calendar rendering time
750 * fixed migration scripts to work with mysql 5 running in strict mode
756 * fixed migration scripts to work with mysql 5 running in strict mode
751 * fixed: error when clicking "add" with no block selected on my/page_layout
757 * fixed: error when clicking "add" with no block selected on my/page_layout
752 * fixed: hard coded links in navigation bar
758 * fixed: hard coded links in navigation bar
753 * fixed: table_name pre/suffix support
759 * fixed: table_name pre/suffix support
754
760
755
761
756 == 2007-02-18 v0.4.2
762 == 2007-02-18 v0.4.2
757
763
758 * Rails 1.2 is now required
764 * Rails 1.2 is now required
759 * settings are now stored in the database and editable through the application in: Admin -> Settings (config_custom.rb is no longer used)
765 * settings are now stored in the database and editable through the application in: Admin -> Settings (config_custom.rb is no longer used)
760 * added project roadmap view
766 * added project roadmap view
761 * mail notifications added when a document, a file or an attachment is added
767 * mail notifications added when a document, a file or an attachment is added
762 * tooltips added on Gantt chart and calender to view the details of the issues
768 * tooltips added on Gantt chart and calender to view the details of the issues
763 * ability to set the sort order for roles, trackers, issue statuses
769 * ability to set the sort order for roles, trackers, issue statuses
764 * added missing fields to csv export: priority, start date, due date, done ratio
770 * added missing fields to csv export: priority, start date, due date, done ratio
765 * added total number of issues per tracker on project overview
771 * added total number of issues per tracker on project overview
766 * 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-)
772 * 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-)
767 * added back "fixed version" field on issue screen and in filters
773 * added back "fixed version" field on issue screen and in filters
768 * project settings screen split in 4 tabs
774 * project settings screen split in 4 tabs
769 * custom fields screen split in 3 tabs (one for each kind of custom field)
775 * custom fields screen split in 3 tabs (one for each kind of custom field)
770 * multiple issues pdf export now rendered as a table
776 * multiple issues pdf export now rendered as a table
771 * added a button on users/list to manually activate an account
777 * added a button on users/list to manually activate an account
772 * added a setting option to disable "password lost" functionality
778 * added a setting option to disable "password lost" functionality
773 * added a setting option to set max number of issues in csv/pdf exports
779 * added a setting option to set max number of issues in csv/pdf exports
774 * fixed: subprojects count is always 0 on projects list
780 * fixed: subprojects count is always 0 on projects list
775 * fixed: locked users are proposed when adding a member to a project
781 * fixed: locked users are proposed when adding a member to a project
776 * fixed: setting an issue status as default status leads to an sql error with SQLite
782 * fixed: setting an issue status as default status leads to an sql error with SQLite
777 * fixed: unable to delete an issue status even if it's not used yet
783 * fixed: unable to delete an issue status even if it's not used yet
778 * fixed: filters ignored when exporting a predefined query to csv/pdf
784 * fixed: filters ignored when exporting a predefined query to csv/pdf
779 * fixed: crash when french "issue_edit" email notification is sent
785 * fixed: crash when french "issue_edit" email notification is sent
780 * fixed: hide mail preference not saved (my/account)
786 * fixed: hide mail preference not saved (my/account)
781 * fixed: crash when a new user try to edit its "my page" layout
787 * fixed: crash when a new user try to edit its "my page" layout
782
788
783
789
784 == 2007-01-03 v0.4.1
790 == 2007-01-03 v0.4.1
785
791
786 * fixed: emails have no recipient when one of the project members has notifications disabled
792 * fixed: emails have no recipient when one of the project members has notifications disabled
787
793
788
794
789 == 2007-01-02 v0.4.0
795 == 2007-01-02 v0.4.0
790
796
791 * simple SVN browser added (just needs svn binaries in PATH)
797 * simple SVN browser added (just needs svn binaries in PATH)
792 * comments can now be added on news
798 * comments can now be added on news
793 * "my page" is now customizable
799 * "my page" is now customizable
794 * more powerfull and savable filters for issues lists
800 * more powerfull and savable filters for issues lists
795 * improved issues change history
801 * improved issues change history
796 * new functionality: move an issue to another project or tracker
802 * new functionality: move an issue to another project or tracker
797 * new functionality: add a note to an issue
803 * new functionality: add a note to an issue
798 * new report: project activity
804 * new report: project activity
799 * "start date" and "% done" fields added on issues
805 * "start date" and "% done" fields added on issues
800 * project calendar added
806 * project calendar added
801 * gantt chart added (exportable to pdf)
807 * gantt chart added (exportable to pdf)
802 * single/multiple issues pdf export added
808 * single/multiple issues pdf export added
803 * issues reports improvements
809 * issues reports improvements
804 * multiple file upload for issues, documents and files
810 * multiple file upload for issues, documents and files
805 * option to set maximum size of uploaded files
811 * option to set maximum size of uploaded files
806 * textile formating of issue and news descritions (RedCloth required)
812 * textile formating of issue and news descritions (RedCloth required)
807 * integration of DotClear jstoolbar for textile formatting
813 * integration of DotClear jstoolbar for textile formatting
808 * calendar date picker for date fields (LGPL DHTML Calendar http://sourceforge.net/projects/jscalendar)
814 * calendar date picker for date fields (LGPL DHTML Calendar http://sourceforge.net/projects/jscalendar)
809 * new filter in issues list: Author
815 * new filter in issues list: Author
810 * ajaxified paginators
816 * ajaxified paginators
811 * news rss feed added
817 * news rss feed added
812 * option to set number of results per page on issues list
818 * option to set number of results per page on issues list
813 * localized csv separator (comma/semicolon)
819 * localized csv separator (comma/semicolon)
814 * csv output encoded to ISO-8859-1
820 * csv output encoded to ISO-8859-1
815 * user custom field displayed on account/show
821 * user custom field displayed on account/show
816 * default configuration improved (default roles, trackers, status, permissions and workflows)
822 * default configuration improved (default roles, trackers, status, permissions and workflows)
817 * language for default configuration data can now be chosen when running 'load_default_data' task
823 * language for default configuration data can now be chosen when running 'load_default_data' task
818 * javascript added on custom field form to show/hide fields according to the format of custom field
824 * javascript added on custom field form to show/hide fields according to the format of custom field
819 * fixed: custom fields not in csv exports
825 * fixed: custom fields not in csv exports
820 * fixed: project settings now displayed according to user's permissions
826 * fixed: project settings now displayed according to user's permissions
821 * fixed: application error when no version is selected on projects/add_file
827 * fixed: application error when no version is selected on projects/add_file
822 * fixed: public actions not authorized for members of non public projects
828 * fixed: public actions not authorized for members of non public projects
823 * fixed: non public projects were shown on welcome screen even if current user is not a member
829 * fixed: non public projects were shown on welcome screen even if current user is not a member
824
830
825
831
826 == 2006-10-08 v0.3.0
832 == 2006-10-08 v0.3.0
827
833
828 * user authentication against multiple LDAP (optional)
834 * user authentication against multiple LDAP (optional)
829 * token based "lost password" functionality
835 * token based "lost password" functionality
830 * user self-registration functionality (optional)
836 * user self-registration functionality (optional)
831 * custom fields now available for issues, users and projects
837 * custom fields now available for issues, users and projects
832 * new custom field format "text" (displayed as a textarea field)
838 * new custom field format "text" (displayed as a textarea field)
833 * project & administration drop down menus in navigation bar for quicker access
839 * project & administration drop down menus in navigation bar for quicker access
834 * text formatting is preserved for long text fields (issues, projects and news descriptions)
840 * text formatting is preserved for long text fields (issues, projects and news descriptions)
835 * urls and emails are turned into clickable links in long text fields
841 * urls and emails are turned into clickable links in long text fields
836 * "due date" field added on issues
842 * "due date" field added on issues
837 * tracker selection filter added on change log
843 * tracker selection filter added on change log
838 * Localization plugin replaced with GLoc 1.1.0 (iconv required)
844 * Localization plugin replaced with GLoc 1.1.0 (iconv required)
839 * error messages internationalization
845 * error messages internationalization
840 * german translation added (thanks to Karim Trott)
846 * german translation added (thanks to Karim Trott)
841 * data locking for issues to prevent update conflicts (using ActiveRecord builtin optimistic locking)
847 * data locking for issues to prevent update conflicts (using ActiveRecord builtin optimistic locking)
842 * new filter in issues list: "Fixed version"
848 * new filter in issues list: "Fixed version"
843 * active filters are displayed with colored background on issues list
849 * active filters are displayed with colored background on issues list
844 * custom configuration is now defined in config/config_custom.rb
850 * custom configuration is now defined in config/config_custom.rb
845 * user object no more stored in session (only user_id)
851 * user object no more stored in session (only user_id)
846 * news summary field is no longer required
852 * news summary field is no longer required
847 * tables and forms redesign
853 * tables and forms redesign
848 * Fixed: boolean custom field not working
854 * Fixed: boolean custom field not working
849 * Fixed: error messages for custom fields are not displayed
855 * Fixed: error messages for custom fields are not displayed
850 * Fixed: invalid custom fields should have a red border
856 * Fixed: invalid custom fields should have a red border
851 * Fixed: custom fields values are not validated on issue update
857 * Fixed: custom fields values are not validated on issue update
852 * Fixed: unable to choose an empty value for 'List' custom fields
858 * Fixed: unable to choose an empty value for 'List' custom fields
853 * Fixed: no issue categories sorting
859 * Fixed: no issue categories sorting
854 * Fixed: incorrect versions sorting
860 * Fixed: incorrect versions sorting
855
861
856
862
857 == 2006-07-12 - v0.2.2
863 == 2006-07-12 - v0.2.2
858
864
859 * Fixed: bug in "issues list"
865 * Fixed: bug in "issues list"
860
866
861
867
862 == 2006-07-09 - v0.2.1
868 == 2006-07-09 - v0.2.1
863
869
864 * new databases supported: Oracle, PostgreSQL, SQL Server
870 * new databases supported: Oracle, PostgreSQL, SQL Server
865 * projects/subprojects hierarchy (1 level of subprojects only)
871 * projects/subprojects hierarchy (1 level of subprojects only)
866 * environment information display in admin/info
872 * environment information display in admin/info
867 * more filter options in issues list (rev6)
873 * more filter options in issues list (rev6)
868 * default language based on browser settings (Accept-Language HTTP header)
874 * default language based on browser settings (Accept-Language HTTP header)
869 * issues list exportable to CSV (rev6)
875 * issues list exportable to CSV (rev6)
870 * simple_format and auto_link on long text fields
876 * simple_format and auto_link on long text fields
871 * more data validations
877 * more data validations
872 * Fixed: error when all mail notifications are unchecked in admin/mail_options
878 * Fixed: error when all mail notifications are unchecked in admin/mail_options
873 * Fixed: all project news are displayed on project summary
879 * Fixed: all project news are displayed on project summary
874 * Fixed: Can't change user password in users/edit
880 * Fixed: Can't change user password in users/edit
875 * Fixed: Error on tables creation with PostgreSQL (rev5)
881 * Fixed: Error on tables creation with PostgreSQL (rev5)
876 * Fixed: SQL error in "issue reports" view with PostgreSQL (rev5)
882 * Fixed: SQL error in "issue reports" view with PostgreSQL (rev5)
877
883
878
884
879 == 2006-06-25 - v0.1.0
885 == 2006-06-25 - v0.1.0
880
886
881 * multiple users/multiple projects
887 * multiple users/multiple projects
882 * role based access control
888 * role based access control
883 * issue tracking system
889 * issue tracking system
884 * fully customizable workflow
890 * fully customizable workflow
885 * documents/files repository
891 * documents/files repository
886 * email notifications on issue creation and update
892 * email notifications on issue creation and update
887 * multilanguage support (except for error messages):english, french, spanish
893 * multilanguage support (except for error messages):english, french, spanish
888 * online manual in french (unfinished)
894 * online manual in french (unfinished)
@@ -1,686 +1,687
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 #quick-search {float:right;}
28 #quick-search {float:right;}
29
29
30 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
30 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
31 #main-menu ul {margin: 0; padding: 0;}
31 #main-menu ul {margin: 0; padding: 0;}
32 #main-menu li {
32 #main-menu li {
33 float:left;
33 float:left;
34 list-style-type:none;
34 list-style-type:none;
35 margin: 0px 2px 0px 0px;
35 margin: 0px 2px 0px 0px;
36 padding: 0px 0px 0px 0px;
36 padding: 0px 0px 0px 0px;
37 white-space:nowrap;
37 white-space:nowrap;
38 }
38 }
39 #main-menu li a {
39 #main-menu li a {
40 display: block;
40 display: block;
41 color: #fff;
41 color: #fff;
42 text-decoration: none;
42 text-decoration: none;
43 font-weight: bold;
43 font-weight: bold;
44 margin: 0;
44 margin: 0;
45 padding: 4px 10px 4px 10px;
45 padding: 4px 10px 4px 10px;
46 }
46 }
47 #main-menu li a:hover {background:#759FCF; color:#fff;}
47 #main-menu li a:hover {background:#759FCF; color:#fff;}
48 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
48 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
49
49
50 #main {background-color:#EEEEEE;}
50 #main {background-color:#EEEEEE;}
51
51
52 #sidebar{ float: right; width: 17%; position: relative; z-index: 9; min-height: 600px; padding: 0; margin: 0;}
52 #sidebar{ float: right; width: 17%; position: relative; z-index: 9; min-height: 600px; padding: 0; margin: 0;}
53 * html #sidebar{ width: 17%; }
53 * html #sidebar{ width: 17%; }
54 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
54 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
55 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
55 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
56 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
56 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
57
57
58 #content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
58 #content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
59 * html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
59 * html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
60 html>body #content { min-height: 600px; }
60 html>body #content { min-height: 600px; }
61 * html body #content { height: 600px; } /* IE */
61 * html body #content { height: 600px; } /* IE */
62
62
63 #main.nosidebar #sidebar{ display: none; }
63 #main.nosidebar #sidebar{ display: none; }
64 #main.nosidebar #content{ width: auto; border-right: 0; }
64 #main.nosidebar #content{ width: auto; border-right: 0; }
65
65
66 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
66 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
67
67
68 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
68 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
69 #login-form table td {padding: 6px;}
69 #login-form table td {padding: 6px;}
70 #login-form label {font-weight: bold;}
70 #login-form label {font-weight: bold;}
71
71
72 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
72 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
73
73
74 /***** Links *****/
74 /***** Links *****/
75 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
75 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
76 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
76 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
77 a img{ border: 0; }
77 a img{ border: 0; }
78
78
79 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { text-decoration: line-through; }
79 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { text-decoration: line-through; }
80
80
81 /***** Tables *****/
81 /***** Tables *****/
82 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
82 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
83 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
83 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
84 table.list td { vertical-align: top; }
84 table.list td { vertical-align: top; }
85 table.list td.id { width: 2%; text-align: center;}
85 table.list td.id { width: 2%; text-align: center;}
86 table.list td.checkbox { width: 15px; padding: 0px;}
86 table.list td.checkbox { width: 15px; padding: 0px;}
87
87
88 tr.issue { text-align: center; white-space: nowrap; }
88 tr.issue { text-align: center; white-space: nowrap; }
89 tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; }
89 tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; }
90 tr.issue td.subject { text-align: left; }
90 tr.issue td.subject { text-align: left; }
91 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
91 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
92
92
93 tr.entry { border: 1px solid #f8f8f8; }
93 tr.entry { border: 1px solid #f8f8f8; }
94 tr.entry td { white-space: nowrap; }
94 tr.entry td { white-space: nowrap; }
95 tr.entry td.filename { width: 30%; }
95 tr.entry td.filename { width: 30%; }
96 tr.entry td.size { text-align: right; font-size: 90%; }
96 tr.entry td.size { text-align: right; font-size: 90%; }
97 tr.entry td.revision, tr.entry td.author { text-align: center; }
97 tr.entry td.revision, tr.entry td.author { text-align: center; }
98 tr.entry td.age { text-align: right; }
98 tr.entry td.age { text-align: right; }
99
99
100 tr.entry span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
100 tr.entry span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
101 tr.entry.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
101 tr.entry.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
102 tr.entry.file td.filename a { margin-left: 16px; }
102 tr.entry.file td.filename a { margin-left: 16px; }
103
103
104 tr.changeset td.author { text-align: center; width: 15%; }
104 tr.changeset td.author { text-align: center; width: 15%; }
105 tr.changeset td.committed_on { text-align: center; width: 15%; }
105 tr.changeset td.committed_on { text-align: center; width: 15%; }
106
106
107 tr.file td { text-align: center; }
107 table.files tr.file td { text-align: center; }
108 tr.file td.filename { text-align: left; padding-left: 24px; }
108 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
109 tr.file td.digest { font-size: 80%; }
109 table.files tr.file td.digest { font-size: 80%; }
110
110
111 tr.message { height: 2.6em; }
111 tr.message { height: 2.6em; }
112 tr.message td.last_message { font-size: 80%; }
112 tr.message td.last_message { font-size: 80%; }
113 tr.message.locked td.subject a { background-image: url(../images/locked.png); }
113 tr.message.locked td.subject a { background-image: url(../images/locked.png); }
114 tr.message.sticky td.subject a { background-image: url(../images/sticky.png); font-weight: bold; }
114 tr.message.sticky td.subject a { background-image: url(../images/sticky.png); font-weight: bold; }
115
115
116 tr.user td { width:13%; }
116 tr.user td { width:13%; }
117 tr.user td.email { width:18%; }
117 tr.user td.email { width:18%; }
118 tr.user td { white-space: nowrap; }
118 tr.user td { white-space: nowrap; }
119 tr.user.locked, tr.user.registered { color: #aaa; }
119 tr.user.locked, tr.user.registered { color: #aaa; }
120 tr.user.locked a, tr.user.registered a { color: #aaa; }
120 tr.user.locked a, tr.user.registered a { color: #aaa; }
121
121
122 tr.time-entry { text-align: center; white-space: nowrap; }
122 tr.time-entry { text-align: center; white-space: nowrap; }
123 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
123 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
124 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
124 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
125 td.hours .hours-dec { font-size: 0.9em; }
125 td.hours .hours-dec { font-size: 0.9em; }
126
126
127 table.plugins td { vertical-align: middle; }
127 table.plugins td { vertical-align: middle; }
128 table.plugins td.configure { text-align: right; padding-right: 1em; }
128 table.plugins td.configure { text-align: right; padding-right: 1em; }
129 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
129 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
130 table.plugins span.description { display: block; font-size: 0.9em; }
130 table.plugins span.description { display: block; font-size: 0.9em; }
131 table.plugins span.url { display: block; font-size: 0.9em; }
131 table.plugins span.url { display: block; font-size: 0.9em; }
132
132
133 table.list tbody tr:hover { background-color:#ffffdd; }
133 table.list tbody tr:hover { background-color:#ffffdd; }
134 table td {padding:2px;}
134 table td {padding:2px;}
135 table p {margin:0;}
135 table p {margin:0;}
136 .odd {background-color:#f6f7f8;}
136 .odd {background-color:#f6f7f8;}
137 .even {background-color: #fff;}
137 .even {background-color: #fff;}
138
138
139 .highlight { background-color: #FCFD8D;}
139 .highlight { background-color: #FCFD8D;}
140 .highlight.token-1 { background-color: #faa;}
140 .highlight.token-1 { background-color: #faa;}
141 .highlight.token-2 { background-color: #afa;}
141 .highlight.token-2 { background-color: #afa;}
142 .highlight.token-3 { background-color: #aaf;}
142 .highlight.token-3 { background-color: #aaf;}
143
143
144 .box{
144 .box{
145 padding:6px;
145 padding:6px;
146 margin-bottom: 10px;
146 margin-bottom: 10px;
147 background-color:#f6f6f6;
147 background-color:#f6f6f6;
148 color:#505050;
148 color:#505050;
149 line-height:1.5em;
149 line-height:1.5em;
150 border: 1px solid #e4e4e4;
150 border: 1px solid #e4e4e4;
151 }
151 }
152
152
153 div.square {
153 div.square {
154 border: 1px solid #999;
154 border: 1px solid #999;
155 float: left;
155 float: left;
156 margin: .3em .4em 0 .4em;
156 margin: .3em .4em 0 .4em;
157 overflow: hidden;
157 overflow: hidden;
158 width: .6em; height: .6em;
158 width: .6em; height: .6em;
159 }
159 }
160 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
160 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
161 .contextual input {font-size:0.9em;}
161 .contextual input {font-size:0.9em;}
162
162
163 .splitcontentleft{float:left; width:49%;}
163 .splitcontentleft{float:left; width:49%;}
164 .splitcontentright{float:right; width:49%;}
164 .splitcontentright{float:right; width:49%;}
165 form {display: inline;}
165 form {display: inline;}
166 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
166 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
167 fieldset {border: 1px solid #e4e4e4; margin:0;}
167 fieldset {border: 1px solid #e4e4e4; margin:0;}
168 legend {color: #484848;}
168 legend {color: #484848;}
169 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
169 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
170 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
170 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
171 blockquote blockquote { margin-left: 0;}
171 blockquote blockquote { margin-left: 0;}
172 textarea.wiki-edit { width: 99%; }
172 textarea.wiki-edit { width: 99%; }
173 li p {margin-top: 0;}
173 li p {margin-top: 0;}
174 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
174 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
175 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
175 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
176 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
176 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
177 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
177 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
178
178
179 fieldset#filters, fieldset#date-range { padding: 0.7em; margin-bottom: 8px; }
179 fieldset#filters, fieldset#date-range { padding: 0.7em; margin-bottom: 8px; }
180 fieldset#filters p { margin: 1.2em 0 0.8em 2px; }
180 fieldset#filters p { margin: 1.2em 0 0.8em 2px; }
181 fieldset#filters table { border-collapse: collapse; }
181 fieldset#filters table { border-collapse: collapse; }
182 fieldset#filters table td { padding: 0; vertical-align: middle; }
182 fieldset#filters table td { padding: 0; vertical-align: middle; }
183 fieldset#filters tr.filter { height: 2em; }
183 fieldset#filters tr.filter { height: 2em; }
184 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
184 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
185 .buttons { font-size: 0.9em; }
185 .buttons { font-size: 0.9em; }
186
186
187 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
187 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
188 div#issue-changesets .changeset { padding: 4px;}
188 div#issue-changesets .changeset { padding: 4px;}
189 div#issue-changesets .changeset { border-bottom: 1px solid #ddd; }
189 div#issue-changesets .changeset { border-bottom: 1px solid #ddd; }
190 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
190 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
191
191
192 div#activity dl, #search-results { margin-left: 2em; }
192 div#activity dl, #search-results { margin-left: 2em; }
193 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
193 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
194 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
194 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
195 div#activity dt.me .time { border-bottom: 1px solid #999; }
195 div#activity dt.me .time { border-bottom: 1px solid #999; }
196 div#activity dt .time { color: #777; font-size: 80%; }
196 div#activity dt .time { color: #777; font-size: 80%; }
197 div#activity dd .description, #search-results dd .description { font-style: italic; }
197 div#activity dd .description, #search-results dd .description { font-style: italic; }
198 div#activity span.project:after, #search-results span.project:after { content: " -"; }
198 div#activity span.project:after, #search-results span.project:after { content: " -"; }
199 div#activity dd span.description, #search-results dd span.description { display:block; }
199 div#activity dd span.description, #search-results dd span.description { display:block; }
200
200
201 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
201 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
202 div#search-results-counts {float:right;}
202 div#search-results-counts {float:right;}
203 div#search-results-counts ul { margin-top: 0.5em; }
203 div#search-results-counts ul { margin-top: 0.5em; }
204 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
204 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
205
205
206 dt.issue { background-image: url(../images/ticket.png); }
206 dt.issue { background-image: url(../images/ticket.png); }
207 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
207 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
208 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
208 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
209 dt.issue-note { background-image: url(../images/ticket_note.png); }
209 dt.issue-note { background-image: url(../images/ticket_note.png); }
210 dt.changeset { background-image: url(../images/changeset.png); }
210 dt.changeset { background-image: url(../images/changeset.png); }
211 dt.news { background-image: url(../images/news.png); }
211 dt.news { background-image: url(../images/news.png); }
212 dt.message { background-image: url(../images/message.png); }
212 dt.message { background-image: url(../images/message.png); }
213 dt.reply { background-image: url(../images/comments.png); }
213 dt.reply { background-image: url(../images/comments.png); }
214 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
214 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
215 dt.attachment { background-image: url(../images/attachment.png); }
215 dt.attachment { background-image: url(../images/attachment.png); }
216 dt.document { background-image: url(../images/document.png); }
216 dt.document { background-image: url(../images/document.png); }
217 dt.project { background-image: url(../images/projects.png); }
217 dt.project { background-image: url(../images/projects.png); }
218
218
219 div#roadmap fieldset.related-issues { margin-bottom: 1em; }
219 div#roadmap fieldset.related-issues { margin-bottom: 1em; }
220 div#roadmap fieldset.related-issues ul { margin-top: 0.3em; margin-bottom: 0.3em; }
220 div#roadmap fieldset.related-issues ul { margin-top: 0.3em; margin-bottom: 0.3em; }
221 div#roadmap .wiki h1:first-child { display: none; }
221 div#roadmap .wiki h1:first-child { display: none; }
222 div#roadmap .wiki h1 { font-size: 120%; }
222 div#roadmap .wiki h1 { font-size: 120%; }
223 div#roadmap .wiki h2 { font-size: 110%; }
223 div#roadmap .wiki h2 { font-size: 110%; }
224
224
225 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
225 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
226 div#version-summary fieldset { margin-bottom: 1em; }
226 div#version-summary fieldset { margin-bottom: 1em; }
227 div#version-summary .total-hours { text-align: right; }
227 div#version-summary .total-hours { text-align: right; }
228
228
229 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
229 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
230 table#time-report tbody tr { font-style: italic; color: #777; }
230 table#time-report tbody tr { font-style: italic; color: #777; }
231 table#time-report tbody tr.last-level { font-style: normal; color: #555; }
231 table#time-report tbody tr.last-level { font-style: normal; color: #555; }
232 table#time-report tbody tr.total { font-style: normal; font-weight: bold; color: #555; background-color:#EEEEEE; }
232 table#time-report tbody tr.total { font-style: normal; font-weight: bold; color: #555; background-color:#EEEEEE; }
233 table#time-report .hours-dec { font-size: 0.9em; }
233 table#time-report .hours-dec { font-size: 0.9em; }
234
234
235 ul.properties {padding:0; font-size: 0.9em; color: #777;}
235 ul.properties {padding:0; font-size: 0.9em; color: #777;}
236 ul.properties li {list-style-type:none;}
236 ul.properties li {list-style-type:none;}
237 ul.properties li span {font-style:italic;}
237 ul.properties li span {font-style:italic;}
238
238
239 .total-hours { font-size: 110%; font-weight: bold; }
239 .total-hours { font-size: 110%; font-weight: bold; }
240 .total-hours span.hours-int { font-size: 120%; }
240 .total-hours span.hours-int { font-size: 120%; }
241
241
242 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
242 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
243 #user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
243 #user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
244
244
245 .pagination {font-size: 90%}
245 .pagination {font-size: 90%}
246 p.pagination {margin-top:8px;}
246 p.pagination {margin-top:8px;}
247
247
248 /***** Tabular forms ******/
248 /***** Tabular forms ******/
249 .tabular p{
249 .tabular p{
250 margin: 0;
250 margin: 0;
251 padding: 5px 0 8px 0;
251 padding: 5px 0 8px 0;
252 padding-left: 180px; /*width of left column containing the label elements*/
252 padding-left: 180px; /*width of left column containing the label elements*/
253 height: 1%;
253 height: 1%;
254 clear:left;
254 clear:left;
255 }
255 }
256
256
257 html>body .tabular p {overflow:hidden;}
257 html>body .tabular p {overflow:hidden;}
258
258
259 .tabular label{
259 .tabular label{
260 font-weight: bold;
260 font-weight: bold;
261 float: left;
261 float: left;
262 text-align: right;
262 text-align: right;
263 margin-left: -180px; /*width of left column*/
263 margin-left: -180px; /*width of left column*/
264 width: 175px; /*width of labels. Should be smaller than left column to create some right
264 width: 175px; /*width of labels. Should be smaller than left column to create some right
265 margin*/
265 margin*/
266 }
266 }
267
267
268 .tabular label.floating{
268 .tabular label.floating{
269 font-weight: normal;
269 font-weight: normal;
270 margin-left: 0px;
270 margin-left: 0px;
271 text-align: left;
271 text-align: left;
272 width: 270px;
272 width: 270px;
273 }
273 }
274
274
275 input#time_entry_comments { width: 90%;}
275 input#time_entry_comments { width: 90%;}
276
276
277 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
277 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
278
278
279 .tabular.settings p{ padding-left: 300px; }
279 .tabular.settings p{ padding-left: 300px; }
280 .tabular.settings label{ margin-left: -300px; width: 295px; }
280 .tabular.settings label{ margin-left: -300px; width: 295px; }
281
281
282 .required {color: #bb0000;}
282 .required {color: #bb0000;}
283 .summary {font-style: italic;}
283 .summary {font-style: italic;}
284
284
285 #attachments_fields input[type=text] {margin-left: 8px; }
285 #attachments_fields input[type=text] {margin-left: 8px; }
286
286
287 div.attachments { margin-top: 12px; }
287 div.attachments { margin-top: 12px; }
288 div.attachments p { margin:4px 0 2px 0; }
288 div.attachments p { margin:4px 0 2px 0; }
289 div.attachments img { vertical-align: middle; }
289 div.attachments img { vertical-align: middle; }
290 div.attachments span.author { font-size: 0.9em; color: #888; }
290 div.attachments span.author { font-size: 0.9em; color: #888; }
291
291
292 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
292 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
293 .other-formats span + span:before { content: "| "; }
293 .other-formats span + span:before { content: "| "; }
294
294
295 a.feed { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
295 a.feed { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
296
296
297 /***** Flash & error messages ****/
297 /***** Flash & error messages ****/
298 #errorExplanation, div.flash, .nodata, .warning {
298 #errorExplanation, div.flash, .nodata, .warning {
299 padding: 4px 4px 4px 30px;
299 padding: 4px 4px 4px 30px;
300 margin-bottom: 12px;
300 margin-bottom: 12px;
301 font-size: 1.1em;
301 font-size: 1.1em;
302 border: 2px solid;
302 border: 2px solid;
303 }
303 }
304
304
305 div.flash {margin-top: 8px;}
305 div.flash {margin-top: 8px;}
306
306
307 div.flash.error, #errorExplanation {
307 div.flash.error, #errorExplanation {
308 background: url(../images/false.png) 8px 5px no-repeat;
308 background: url(../images/false.png) 8px 5px no-repeat;
309 background-color: #ffe3e3;
309 background-color: #ffe3e3;
310 border-color: #dd0000;
310 border-color: #dd0000;
311 color: #550000;
311 color: #550000;
312 }
312 }
313
313
314 div.flash.notice {
314 div.flash.notice {
315 background: url(../images/true.png) 8px 5px no-repeat;
315 background: url(../images/true.png) 8px 5px no-repeat;
316 background-color: #dfffdf;
316 background-color: #dfffdf;
317 border-color: #9fcf9f;
317 border-color: #9fcf9f;
318 color: #005f00;
318 color: #005f00;
319 }
319 }
320
320
321 div.flash.warning {
321 div.flash.warning {
322 background: url(../images/warning.png) 8px 5px no-repeat;
322 background: url(../images/warning.png) 8px 5px no-repeat;
323 background-color: #FFEBC1;
323 background-color: #FFEBC1;
324 border-color: #FDBF3B;
324 border-color: #FDBF3B;
325 color: #A6750C;
325 color: #A6750C;
326 text-align: left;
326 text-align: left;
327 }
327 }
328
328
329 .nodata, .warning {
329 .nodata, .warning {
330 text-align: center;
330 text-align: center;
331 background-color: #FFEBC1;
331 background-color: #FFEBC1;
332 border-color: #FDBF3B;
332 border-color: #FDBF3B;
333 color: #A6750C;
333 color: #A6750C;
334 }
334 }
335
335
336 #errorExplanation ul { font-size: 0.9em;}
336 #errorExplanation ul { font-size: 0.9em;}
337
337
338 /***** Ajax indicator ******/
338 /***** Ajax indicator ******/
339 #ajax-indicator {
339 #ajax-indicator {
340 position: absolute; /* fixed not supported by IE */
340 position: absolute; /* fixed not supported by IE */
341 background-color:#eee;
341 background-color:#eee;
342 border: 1px solid #bbb;
342 border: 1px solid #bbb;
343 top:35%;
343 top:35%;
344 left:40%;
344 left:40%;
345 width:20%;
345 width:20%;
346 font-weight:bold;
346 font-weight:bold;
347 text-align:center;
347 text-align:center;
348 padding:0.6em;
348 padding:0.6em;
349 z-index:100;
349 z-index:100;
350 filter:alpha(opacity=50);
350 filter:alpha(opacity=50);
351 opacity: 0.5;
351 opacity: 0.5;
352 }
352 }
353
353
354 html>body #ajax-indicator { position: fixed; }
354 html>body #ajax-indicator { position: fixed; }
355
355
356 #ajax-indicator span {
356 #ajax-indicator span {
357 background-position: 0% 40%;
357 background-position: 0% 40%;
358 background-repeat: no-repeat;
358 background-repeat: no-repeat;
359 background-image: url(../images/loading.gif);
359 background-image: url(../images/loading.gif);
360 padding-left: 26px;
360 padding-left: 26px;
361 vertical-align: bottom;
361 vertical-align: bottom;
362 }
362 }
363
363
364 /***** Calendar *****/
364 /***** Calendar *****/
365 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
365 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
366 table.cal thead th {width: 14%;}
366 table.cal thead th {width: 14%;}
367 table.cal tbody tr {height: 100px;}
367 table.cal tbody tr {height: 100px;}
368 table.cal th { background-color:#EEEEEE; padding: 4px; }
368 table.cal th { background-color:#EEEEEE; padding: 4px; }
369 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
369 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
370 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
370 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
371 table.cal td.odd p.day-num {color: #bbb;}
371 table.cal td.odd p.day-num {color: #bbb;}
372 table.cal td.today {background:#ffffdd;}
372 table.cal td.today {background:#ffffdd;}
373 table.cal td.today p.day-num {font-weight: bold;}
373 table.cal td.today p.day-num {font-weight: bold;}
374
374
375 /***** Tooltips ******/
375 /***** Tooltips ******/
376 .tooltip{position:relative;z-index:24;}
376 .tooltip{position:relative;z-index:24;}
377 .tooltip:hover{z-index:25;color:#000;}
377 .tooltip:hover{z-index:25;color:#000;}
378 .tooltip span.tip{display: none; text-align:left;}
378 .tooltip span.tip{display: none; text-align:left;}
379
379
380 div.tooltip:hover span.tip{
380 div.tooltip:hover span.tip{
381 display:block;
381 display:block;
382 position:absolute;
382 position:absolute;
383 top:12px; left:24px; width:270px;
383 top:12px; left:24px; width:270px;
384 border:1px solid #555;
384 border:1px solid #555;
385 background-color:#fff;
385 background-color:#fff;
386 padding: 4px;
386 padding: 4px;
387 font-size: 0.8em;
387 font-size: 0.8em;
388 color:#505050;
388 color:#505050;
389 }
389 }
390
390
391 /***** Progress bar *****/
391 /***** Progress bar *****/
392 table.progress {
392 table.progress {
393 border: 1px solid #D7D7D7;
393 border: 1px solid #D7D7D7;
394 border-collapse: collapse;
394 border-collapse: collapse;
395 border-spacing: 0pt;
395 border-spacing: 0pt;
396 empty-cells: show;
396 empty-cells: show;
397 text-align: center;
397 text-align: center;
398 float:left;
398 float:left;
399 margin: 1px 6px 1px 0px;
399 margin: 1px 6px 1px 0px;
400 }
400 }
401
401
402 table.progress td { height: 0.9em; }
402 table.progress td { height: 0.9em; }
403 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
403 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
404 table.progress td.done { background: #DEF0DE none repeat scroll 0%; }
404 table.progress td.done { background: #DEF0DE none repeat scroll 0%; }
405 table.progress td.open { background: #FFF none repeat scroll 0%; }
405 table.progress td.open { background: #FFF none repeat scroll 0%; }
406 p.pourcent {font-size: 80%;}
406 p.pourcent {font-size: 80%;}
407 p.progress-info {clear: left; font-style: italic; font-size: 80%;}
407 p.progress-info {clear: left; font-style: italic; font-size: 80%;}
408
408
409 /***** Tabs *****/
409 /***** Tabs *****/
410 #content .tabs {height: 2.6em; border-bottom: 1px solid #bbbbbb; margin-bottom:1.2em; position:relative;}
410 #content .tabs {height: 2.6em; border-bottom: 1px solid #bbbbbb; margin-bottom:1.2em; position:relative;}
411 #content .tabs ul {margin:0; position:absolute; bottom:-2px; padding-left:1em;}
411 #content .tabs ul {margin:0; position:absolute; bottom:-2px; padding-left:1em;}
412 #content .tabs>ul { bottom:-1px; } /* others */
412 #content .tabs>ul { bottom:-1px; } /* others */
413 #content .tabs ul li {
413 #content .tabs ul li {
414 float:left;
414 float:left;
415 list-style-type:none;
415 list-style-type:none;
416 white-space:nowrap;
416 white-space:nowrap;
417 margin-right:8px;
417 margin-right:8px;
418 background:#fff;
418 background:#fff;
419 }
419 }
420 #content .tabs ul li a{
420 #content .tabs ul li a{
421 display:block;
421 display:block;
422 font-size: 0.9em;
422 font-size: 0.9em;
423 text-decoration:none;
423 text-decoration:none;
424 line-height:1.3em;
424 line-height:1.3em;
425 padding:4px 6px 4px 6px;
425 padding:4px 6px 4px 6px;
426 border: 1px solid #ccc;
426 border: 1px solid #ccc;
427 border-bottom: 1px solid #bbbbbb;
427 border-bottom: 1px solid #bbbbbb;
428 background-color: #eeeeee;
428 background-color: #eeeeee;
429 color:#777;
429 color:#777;
430 font-weight:bold;
430 font-weight:bold;
431 }
431 }
432
432
433 #content .tabs ul li a:hover {
433 #content .tabs ul li a:hover {
434 background-color: #ffffdd;
434 background-color: #ffffdd;
435 text-decoration:none;
435 text-decoration:none;
436 }
436 }
437
437
438 #content .tabs ul li a.selected {
438 #content .tabs ul li a.selected {
439 background-color: #fff;
439 background-color: #fff;
440 border: 1px solid #bbbbbb;
440 border: 1px solid #bbbbbb;
441 border-bottom: 1px solid #fff;
441 border-bottom: 1px solid #fff;
442 }
442 }
443
443
444 #content .tabs ul li a.selected:hover {
444 #content .tabs ul li a.selected:hover {
445 background-color: #fff;
445 background-color: #fff;
446 }
446 }
447
447
448 /***** Diff *****/
448 /***** Diff *****/
449 .diff_out { background: #fcc; }
449 .diff_out { background: #fcc; }
450 .diff_in { background: #cfc; }
450 .diff_in { background: #cfc; }
451
451
452 /***** Wiki *****/
452 /***** Wiki *****/
453 div.wiki table {
453 div.wiki table {
454 border: 1px solid #505050;
454 border: 1px solid #505050;
455 border-collapse: collapse;
455 border-collapse: collapse;
456 margin-bottom: 1em;
456 margin-bottom: 1em;
457 }
457 }
458
458
459 div.wiki table, div.wiki td, div.wiki th {
459 div.wiki table, div.wiki td, div.wiki th {
460 border: 1px solid #bbb;
460 border: 1px solid #bbb;
461 padding: 4px;
461 padding: 4px;
462 }
462 }
463
463
464 div.wiki .external {
464 div.wiki .external {
465 background-position: 0% 60%;
465 background-position: 0% 60%;
466 background-repeat: no-repeat;
466 background-repeat: no-repeat;
467 padding-left: 12px;
467 padding-left: 12px;
468 background-image: url(../images/external.png);
468 background-image: url(../images/external.png);
469 }
469 }
470
470
471 div.wiki a.new {
471 div.wiki a.new {
472 color: #b73535;
472 color: #b73535;
473 }
473 }
474
474
475 div.wiki pre {
475 div.wiki pre {
476 margin: 1em 1em 1em 1.6em;
476 margin: 1em 1em 1em 1.6em;
477 padding: 2px;
477 padding: 2px;
478 background-color: #fafafa;
478 background-color: #fafafa;
479 border: 1px solid #dadada;
479 border: 1px solid #dadada;
480 width:95%;
480 width:95%;
481 overflow-x: auto;
481 overflow-x: auto;
482 }
482 }
483
483
484 div.wiki ul.toc {
484 div.wiki ul.toc {
485 background-color: #ffffdd;
485 background-color: #ffffdd;
486 border: 1px solid #e4e4e4;
486 border: 1px solid #e4e4e4;
487 padding: 4px;
487 padding: 4px;
488 line-height: 1.2em;
488 line-height: 1.2em;
489 margin-bottom: 12px;
489 margin-bottom: 12px;
490 margin-right: 12px;
490 margin-right: 12px;
491 margin-left: 0;
491 margin-left: 0;
492 display: table
492 display: table
493 }
493 }
494 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
494 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
495
495
496 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
496 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
497 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
497 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
498 div.wiki ul.toc li { list-style-type:none;}
498 div.wiki ul.toc li { list-style-type:none;}
499 div.wiki ul.toc li.heading2 { margin-left: 6px; }
499 div.wiki ul.toc li.heading2 { margin-left: 6px; }
500 div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; }
500 div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; }
501
501
502 div.wiki ul.toc a {
502 div.wiki ul.toc a {
503 font-size: 0.9em;
503 font-size: 0.9em;
504 font-weight: normal;
504 font-weight: normal;
505 text-decoration: none;
505 text-decoration: none;
506 color: #606060;
506 color: #606060;
507 }
507 }
508 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
508 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
509
509
510 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
510 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
511 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
511 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
512 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
512 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
513
513
514 /***** My page layout *****/
514 /***** My page layout *****/
515 .block-receiver {
515 .block-receiver {
516 border:1px dashed #c0c0c0;
516 border:1px dashed #c0c0c0;
517 margin-bottom: 20px;
517 margin-bottom: 20px;
518 padding: 15px 0 15px 0;
518 padding: 15px 0 15px 0;
519 }
519 }
520
520
521 .mypage-box {
521 .mypage-box {
522 margin:0 0 20px 0;
522 margin:0 0 20px 0;
523 color:#505050;
523 color:#505050;
524 line-height:1.5em;
524 line-height:1.5em;
525 }
525 }
526
526
527 .handle {
527 .handle {
528 cursor: move;
528 cursor: move;
529 }
529 }
530
530
531 a.close-icon {
531 a.close-icon {
532 display:block;
532 display:block;
533 margin-top:3px;
533 margin-top:3px;
534 overflow:hidden;
534 overflow:hidden;
535 width:12px;
535 width:12px;
536 height:12px;
536 height:12px;
537 background-repeat: no-repeat;
537 background-repeat: no-repeat;
538 cursor:pointer;
538 cursor:pointer;
539 background-image:url('../images/close.png');
539 background-image:url('../images/close.png');
540 }
540 }
541
541
542 a.close-icon:hover {
542 a.close-icon:hover {
543 background-image:url('../images/close_hl.png');
543 background-image:url('../images/close_hl.png');
544 }
544 }
545
545
546 /***** Gantt chart *****/
546 /***** Gantt chart *****/
547 .gantt_hdr {
547 .gantt_hdr {
548 position:absolute;
548 position:absolute;
549 top:0;
549 top:0;
550 height:16px;
550 height:16px;
551 border-top: 1px solid #c0c0c0;
551 border-top: 1px solid #c0c0c0;
552 border-bottom: 1px solid #c0c0c0;
552 border-bottom: 1px solid #c0c0c0;
553 border-right: 1px solid #c0c0c0;
553 border-right: 1px solid #c0c0c0;
554 text-align: center;
554 text-align: center;
555 overflow: hidden;
555 overflow: hidden;
556 }
556 }
557
557
558 .task {
558 .task {
559 position: absolute;
559 position: absolute;
560 height:8px;
560 height:8px;
561 font-size:0.8em;
561 font-size:0.8em;
562 color:#888;
562 color:#888;
563 padding:0;
563 padding:0;
564 margin:0;
564 margin:0;
565 line-height:0.8em;
565 line-height:0.8em;
566 }
566 }
567
567
568 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
568 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
569 .task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; }
569 .task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; }
570 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
570 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
571 .milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; }
571 .milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; }
572
572
573 /***** Icons *****/
573 /***** Icons *****/
574 .icon {
574 .icon {
575 background-position: 0% 40%;
575 background-position: 0% 40%;
576 background-repeat: no-repeat;
576 background-repeat: no-repeat;
577 padding-left: 20px;
577 padding-left: 20px;
578 padding-top: 2px;
578 padding-top: 2px;
579 padding-bottom: 3px;
579 padding-bottom: 3px;
580 }
580 }
581
581
582 .icon22 {
582 .icon22 {
583 background-position: 0% 40%;
583 background-position: 0% 40%;
584 background-repeat: no-repeat;
584 background-repeat: no-repeat;
585 padding-left: 26px;
585 padding-left: 26px;
586 line-height: 22px;
586 line-height: 22px;
587 vertical-align: middle;
587 vertical-align: middle;
588 }
588 }
589
589
590 .icon-add { background-image: url(../images/add.png); }
590 .icon-add { background-image: url(../images/add.png); }
591 .icon-edit { background-image: url(../images/edit.png); }
591 .icon-edit { background-image: url(../images/edit.png); }
592 .icon-copy { background-image: url(../images/copy.png); }
592 .icon-copy { background-image: url(../images/copy.png); }
593 .icon-del { background-image: url(../images/delete.png); }
593 .icon-del { background-image: url(../images/delete.png); }
594 .icon-move { background-image: url(../images/move.png); }
594 .icon-move { background-image: url(../images/move.png); }
595 .icon-save { background-image: url(../images/save.png); }
595 .icon-save { background-image: url(../images/save.png); }
596 .icon-cancel { background-image: url(../images/cancel.png); }
596 .icon-cancel { background-image: url(../images/cancel.png); }
597 .icon-file { background-image: url(../images/file.png); }
597 .icon-file { background-image: url(../images/file.png); }
598 .icon-folder { background-image: url(../images/folder.png); }
598 .icon-folder { background-image: url(../images/folder.png); }
599 .open .icon-folder { background-image: url(../images/folder_open.png); }
599 .open .icon-folder { background-image: url(../images/folder_open.png); }
600 .icon-package { background-image: url(../images/package.png); }
600 .icon-package { background-image: url(../images/package.png); }
601 .icon-home { background-image: url(../images/home.png); }
601 .icon-home { background-image: url(../images/home.png); }
602 .icon-user { background-image: url(../images/user.png); }
602 .icon-user { background-image: url(../images/user.png); }
603 .icon-mypage { background-image: url(../images/user_page.png); }
603 .icon-mypage { background-image: url(../images/user_page.png); }
604 .icon-admin { background-image: url(../images/admin.png); }
604 .icon-admin { background-image: url(../images/admin.png); }
605 .icon-projects { background-image: url(../images/projects.png); }
605 .icon-projects { background-image: url(../images/projects.png); }
606 .icon-help { background-image: url(../images/help.png); }
606 .icon-help { background-image: url(../images/help.png); }
607 .icon-attachment { background-image: url(../images/attachment.png); }
607 .icon-attachment { background-image: url(../images/attachment.png); }
608 .icon-index { background-image: url(../images/index.png); }
608 .icon-index { background-image: url(../images/index.png); }
609 .icon-history { background-image: url(../images/history.png); }
609 .icon-history { background-image: url(../images/history.png); }
610 .icon-time { background-image: url(../images/time.png); }
610 .icon-time { background-image: url(../images/time.png); }
611 .icon-stats { background-image: url(../images/stats.png); }
611 .icon-stats { background-image: url(../images/stats.png); }
612 .icon-warning { background-image: url(../images/warning.png); }
612 .icon-warning { background-image: url(../images/warning.png); }
613 .icon-fav { background-image: url(../images/fav.png); }
613 .icon-fav { background-image: url(../images/fav.png); }
614 .icon-fav-off { background-image: url(../images/fav_off.png); }
614 .icon-fav-off { background-image: url(../images/fav_off.png); }
615 .icon-reload { background-image: url(../images/reload.png); }
615 .icon-reload { background-image: url(../images/reload.png); }
616 .icon-lock { background-image: url(../images/locked.png); }
616 .icon-lock { background-image: url(../images/locked.png); }
617 .icon-unlock { background-image: url(../images/unlock.png); }
617 .icon-unlock { background-image: url(../images/unlock.png); }
618 .icon-checked { background-image: url(../images/true.png); }
618 .icon-checked { background-image: url(../images/true.png); }
619 .icon-details { background-image: url(../images/zoom_in.png); }
619 .icon-details { background-image: url(../images/zoom_in.png); }
620 .icon-report { background-image: url(../images/report.png); }
620 .icon-report { background-image: url(../images/report.png); }
621 .icon-comment { background-image: url(../images/comment.png); }
621 .icon-comment { background-image: url(../images/comment.png); }
622
622
623 .icon22-projects { background-image: url(../images/22x22/projects.png); }
623 .icon22-projects { background-image: url(../images/22x22/projects.png); }
624 .icon22-users { background-image: url(../images/22x22/users.png); }
624 .icon22-users { background-image: url(../images/22x22/users.png); }
625 .icon22-tracker { background-image: url(../images/22x22/tracker.png); }
625 .icon22-tracker { background-image: url(../images/22x22/tracker.png); }
626 .icon22-role { background-image: url(../images/22x22/role.png); }
626 .icon22-role { background-image: url(../images/22x22/role.png); }
627 .icon22-workflow { background-image: url(../images/22x22/workflow.png); }
627 .icon22-workflow { background-image: url(../images/22x22/workflow.png); }
628 .icon22-options { background-image: url(../images/22x22/options.png); }
628 .icon22-options { background-image: url(../images/22x22/options.png); }
629 .icon22-notifications { background-image: url(../images/22x22/notifications.png); }
629 .icon22-notifications { background-image: url(../images/22x22/notifications.png); }
630 .icon22-authent { background-image: url(../images/22x22/authent.png); }
630 .icon22-authent { background-image: url(../images/22x22/authent.png); }
631 .icon22-info { background-image: url(../images/22x22/info.png); }
631 .icon22-info { background-image: url(../images/22x22/info.png); }
632 .icon22-comment { background-image: url(../images/22x22/comment.png); }
632 .icon22-comment { background-image: url(../images/22x22/comment.png); }
633 .icon22-package { background-image: url(../images/22x22/package.png); }
633 .icon22-package { background-image: url(../images/22x22/package.png); }
634 .icon22-settings { background-image: url(../images/22x22/settings.png); }
634 .icon22-settings { background-image: url(../images/22x22/settings.png); }
635 .icon22-plugin { background-image: url(../images/22x22/plugin.png); }
635 .icon22-plugin { background-image: url(../images/22x22/plugin.png); }
636
636
637 img.gravatar {
637 img.gravatar {
638 padding: 2px;
638 padding: 2px;
639 border: solid 1px #d5d5d5;
639 border: solid 1px #d5d5d5;
640 background: #fff;
640 background: #fff;
641 }
641 }
642
642
643 div.issue img.gravatar {
643 div.issue img.gravatar {
644 float: right;
644 float: right;
645 margin: 0 0 0 1em;
645 margin: 0 0 0 1em;
646 padding: 5px;
646 padding: 5px;
647 }
647 }
648
648
649 div.issue table img.gravatar {
649 div.issue table img.gravatar {
650 height: 14px;
650 height: 14px;
651 width: 14px;
651 width: 14px;
652 padding: 2px;
652 padding: 2px;
653 float: left;
653 float: left;
654 margin: 0 0.5em 0 0;
654 margin: 0 0.5em 0 0;
655 }
655 }
656
656
657 #history img.gravatar {
657 #history img.gravatar {
658 padding: 3px;
658 padding: 3px;
659 margin: 0 1.5em 1em 0;
659 margin: 0 1.5em 1em 0;
660 float: left;
660 float: left;
661 }
661 }
662
662
663 td.username img.gravatar {
663 td.username img.gravatar {
664 float: left;
664 float: left;
665 margin: 0 1em 0 0;
665 margin: 0 1em 0 0;
666 }
666 }
667
667
668 #activity dt img.gravatar {
668 #activity dt img.gravatar {
669 float: left;
669 float: left;
670 margin: 0 1em 1em 0;
670 margin: 0 1em 1em 0;
671 }
671 }
672
672
673 #activity dt,
673 #activity dt,
674 .journal {
674 .journal {
675 clear: left;
675 clear: left;
676 }
676 }
677
677
678 h2 img { vertical-align:middle; }
678 h2 img { vertical-align:middle; }
679
679
680
680
681 /***** Media print specific styles *****/
681 /***** Media print specific styles *****/
682 @media print {
682 @media print {
683 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
683 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
684 #main { background: #fff; }
684 #main { background: #fff; }
685 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
685 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
686 #wiki_add_attachment { display:none; }
686 }
687 }
General Comments 0
You need to be logged in to leave comments. Login now