##// END OF EJS Templates
git-svn-id: http://redmine.rubyforge.org/svn/trunk@38 e93f8b46-1217-0410-a6f0-8f06a7374b81
Jean-Philippe Lang -
r36:3628515b312c
parent child
Show More
@@ -0,0 +1,3
1 Note added to issue #<%= @history.issue_id %> by <%= @history.author.name %>
2 ----------------------------------------
3 <%= @history.notes %> No newline at end of file
@@ -0,0 +1,3
1 Note added to issue #<%= @history.issue_id %> by <%= @history.author.name %>
2 ----------------------------------------
3 <%= @history.notes %> No newline at end of file
@@ -0,0 +1,3
1 Note added to issue #<%= @history.issue_id %> by <%= @history.author.name %>
2 ----------------------------------------
3 <%= @history.notes %> No newline at end of file
@@ -0,0 +1,3
1 Note ajoutée à la demande #<%= @history.issue_id %> par <%= @history.author.name %>
2 ----------------------------------------
3 <%= @history.notes %> No newline at end of file
@@ -0,0 +1,43
1 <h2><%=l(:label_activity)%></h2>
2
3 <div>
4 <div class="rightbox">
5 <%= start_form_tag %>
6 <p>From <%= text_field_tag 'date_from', @date_from, :size => 10, :class => 'button-small' %>
7 and <%= text_field_tag 'days_back', @days_back, :size => 2, :class => 'button-small' %> days back</p>
8 <%= check_box_tag 'show_issues', 1, @show_issues %><%= hidden_field_tag 'show_issues', 0 %> <%=l(:label_issue_plural)%><br />
9 <%= check_box_tag 'show_news', 1, @show_news %><%= hidden_field_tag 'show_news', 0 %> <%=l(:label_news_plural)%><br />
10 <%= check_box_tag 'show_files', 1, @show_files %><%= hidden_field_tag 'show_files', 0 %> <%=l(:label_attachment_plural)%><br />
11 <%= check_box_tag 'show_documents', 1, @show_documents %><%= hidden_field_tag 'show_documents', 0 %> <%=l(:label_document_plural)%><br />
12 <p><center><%= submit_tag l(:button_apply), :class => 'button-small' %></center></p>
13 <%= end_form_tag %>
14 </div>
15 <% @events_by_day.keys.sort {|x,y| y <=> x }.each do |day| %>
16 <h3><%= format_date(day) %></h3>
17 <ul>
18 <% @events_by_day[day].each do |e| %>
19 <li><p>
20 <% if e.is_a? Issue %>
21 <%= e.created_on.strftime("%H:%M") %> <%= e.tracker.name %> <%= link_to e.long_id, :controller => 'issues', :action => 'show', :id => e %> (<%= e.status.name %>): <%= e.subject %><br />
22 <i><%= e.author.name %></i>
23 <% elsif e.is_a? News %>
24 <%= e.created_on.strftime("%H:%M") %> <%=l(:label_news)%>: <%= link_to e.title, :controller => 'news', :action => 'show', :id => e %><br />
25 <% unless e.summary.empty? %><%= e.summary %><br /><% end %>
26 <i><%= e.author.name %></i>
27 <% elsif (e.is_a? Attachment) and (e.container.is_a? Version) %>
28 <%= e.created_on.strftime("%H:%M") %> <%=l(:label_attachment)%> (Version <%= e.container.name %>): <%= link_to e.filename, :controller => 'projects', :action => 'list_files', :id => @project %><br />
29 <i><%= e.author.name %></i>
30 <% elsif (e.is_a? Attachment) and (e.container.is_a? Document) %>
31 <%= e.created_on.strftime("%H:%M") %> <%=l(:label_document)%>: <%= link_to e.container.title, :controller => 'documents', :action => 'show', :id => e %><br />
32 <i><%= e.author.name %></i>
33 <% end %>
34 </p></li>
35
36 <% end %>
37 </ul>
38 <% end %>
39 <br />
40
41
42
43 </div> No newline at end of file
@@ -1,128 +1,129
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 IssuesController < ApplicationController
18 class IssuesController < ApplicationController
19 layout 'base', :except => :export_pdf
19 layout 'base', :except => :export_pdf
20 before_filter :find_project, :authorize
20 before_filter :find_project, :authorize
21
21
22 helper :custom_fields
22 helper :custom_fields
23 include CustomFieldsHelper
23 include CustomFieldsHelper
24 helper :ifpdf
24 helper :ifpdf
25 include IfpdfHelper
25 include IfpdfHelper
26
26
27 def show
27 def show
28 @status_options = @issue.status.workflows.find(:all, :include => :new_status, :conditions => ["role_id=? and tracker_id=?", self.logged_in_user.role_for_project(@project.id), @issue.tracker.id]).collect{ |w| w.new_status } if self.logged_in_user
28 @status_options = @issue.status.workflows.find(:all, :include => :new_status, :conditions => ["role_id=? and tracker_id=?", self.logged_in_user.role_for_project(@project.id), @issue.tracker.id]).collect{ |w| w.new_status } if self.logged_in_user
29 @custom_values = @issue.custom_values.find(:all, :include => :custom_field)
29 @custom_values = @issue.custom_values.find(:all, :include => :custom_field)
30 end
30 end
31
31
32 def export_pdf
32 def export_pdf
33 @custom_values = @issue.custom_values.find(:all, :include => :custom_field)
33 @custom_values = @issue.custom_values.find(:all, :include => :custom_field)
34 @options_for_rfpdf ||= {}
34 @options_for_rfpdf ||= {}
35 @options_for_rfpdf[:file_name] = "#{@project.name}_#{@issue.long_id}.pdf"
35 @options_for_rfpdf[:file_name] = "#{@project.name}_#{@issue.long_id}.pdf"
36 end
36 end
37
37
38 def edit
38 def edit
39 @priorities = Enumeration::get_values('IPRI')
39 @priorities = Enumeration::get_values('IPRI')
40 if request.get?
40 if request.get?
41 @custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| @issue.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x, :customized => @issue) }
41 @custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| @issue.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x, :customized => @issue) }
42 else
42 else
43 begin
43 begin
44 # Retrieve custom fields and values
44 # Retrieve custom fields and values
45 @custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue, :value => params["custom_fields"][x.id.to_s]) }
45 @custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue, :value => params["custom_fields"][x.id.to_s]) }
46 @issue.custom_values = @custom_values
46 @issue.custom_values = @custom_values
47 @issue.attributes = params[:issue]
47 @issue.attributes = params[:issue]
48 if @issue.save
48 if @issue.save
49 flash[:notice] = l(:notice_successful_update)
49 flash[:notice] = l(:notice_successful_update)
50 redirect_to :action => 'show', :id => @issue
50 redirect_to :action => 'show', :id => @issue
51 end
51 end
52 rescue ActiveRecord::StaleObjectError
52 rescue ActiveRecord::StaleObjectError
53 # Optimistic locking exception
53 # Optimistic locking exception
54 flash[:notice] = l(:notice_locking_conflict)
54 flash[:notice] = l(:notice_locking_conflict)
55 end
55 end
56 end
56 end
57 end
57 end
58
58
59 def add_note
59 def add_note
60 unless params[:history][:notes].empty?
60 unless params[:history][:notes].empty?
61 @history = @issue.histories.build(params[:history])
61 @history = @issue.histories.build(params[:history])
62 @history.author_id = self.logged_in_user.id if self.logged_in_user
62 @history.author_id = self.logged_in_user.id if self.logged_in_user
63 @history.status = @issue.status
63 @history.status = @issue.status
64 if @history.save
64 if @history.save
65 flash[:notice] = l(:notice_successful_update)
65 flash[:notice] = l(:notice_successful_update)
66 Mailer.deliver_issue_add_note(@history) if Permission.find_by_controller_and_action(@params[:controller], @params[:action]).mail_enabled?
66 redirect_to :action => 'show', :id => @issue
67 redirect_to :action => 'show', :id => @issue
67 return
68 return
68 end
69 end
69 end
70 end
70 show
71 show
71 render :action => 'show'
72 render :action => 'show'
72 end
73 end
73
74
74 def change_status
75 def change_status
75 @history = @issue.histories.build(params[:history])
76 @history = @issue.histories.build(params[:history])
76 @status_options = @issue.status.workflows.find(:all, :conditions => ["role_id=? and tracker_id=?", self.logged_in_user.role_for_project(@project.id), @issue.tracker.id]).collect{ |w| w.new_status } if self.logged_in_user
77 @status_options = @issue.status.workflows.find(:all, :conditions => ["role_id=? and tracker_id=?", self.logged_in_user.role_for_project(@project.id), @issue.tracker.id]).collect{ |w| w.new_status } if self.logged_in_user
77 if params[:confirm]
78 if params[:confirm]
78 begin
79 begin
79 @history.author_id = self.logged_in_user.id if self.logged_in_user
80 @history.author_id = self.logged_in_user.id if self.logged_in_user
80 @issue.status = @history.status
81 @issue.status = @history.status
81 @issue.fixed_version_id = (params[:issue][:fixed_version_id])
82 @issue.fixed_version_id = (params[:issue][:fixed_version_id])
82 @issue.assigned_to_id = (params[:issue][:assigned_to_id])
83 @issue.assigned_to_id = (params[:issue][:assigned_to_id])
83 @issue.lock_version = (params[:issue][:lock_version])
84 @issue.lock_version = (params[:issue][:lock_version])
84 if @issue.save
85 if @issue.save
85 flash[:notice] = l(:notice_successful_update)
86 flash[:notice] = l(:notice_successful_update)
86 Mailer.deliver_issue_change_status(@issue) if Permission.find_by_controller_and_action(@params[:controller], @params[:action]).mail_enabled?
87 Mailer.deliver_issue_change_status(@issue) if Permission.find_by_controller_and_action(@params[:controller], @params[:action]).mail_enabled?
87 redirect_to :action => 'show', :id => @issue
88 redirect_to :action => 'show', :id => @issue
88 end
89 end
89 rescue ActiveRecord::StaleObjectError
90 rescue ActiveRecord::StaleObjectError
90 # Optimistic locking exception
91 # Optimistic locking exception
91 flash[:notice] = l(:notice_locking_conflict)
92 flash[:notice] = l(:notice_locking_conflict)
92 end
93 end
93 end
94 end
94 @assignable_to = @project.members.find(:all, :include => :user).collect{ |m| m.user }
95 @assignable_to = @project.members.find(:all, :include => :user).collect{ |m| m.user }
95 end
96 end
96
97
97 def destroy
98 def destroy
98 @issue.destroy
99 @issue.destroy
99 redirect_to :controller => 'projects', :action => 'list_issues', :id => @project
100 redirect_to :controller => 'projects', :action => 'list_issues', :id => @project
100 end
101 end
101
102
102 def add_attachment
103 def add_attachment
103 # Save the attachment
104 # Save the attachment
104 if params[:attachment][:file].size > 0
105 if params[:attachment][:file].size > 0
105 @attachment = @issue.attachments.build(params[:attachment])
106 @attachment = @issue.attachments.build(params[:attachment])
106 @attachment.author_id = self.logged_in_user.id if self.logged_in_user
107 @attachment.author_id = self.logged_in_user.id if self.logged_in_user
107 @attachment.save
108 @attachment.save
108 end
109 end
109 redirect_to :action => 'show', :id => @issue
110 redirect_to :action => 'show', :id => @issue
110 end
111 end
111
112
112 def destroy_attachment
113 def destroy_attachment
113 @issue.attachments.find(params[:attachment_id]).destroy
114 @issue.attachments.find(params[:attachment_id]).destroy
114 redirect_to :action => 'show', :id => @issue
115 redirect_to :action => 'show', :id => @issue
115 end
116 end
116
117
117 # Send the file in stream mode
118 # Send the file in stream mode
118 def download
119 def download
119 @attachment = @issue.attachments.find(params[:attachment_id])
120 @attachment = @issue.attachments.find(params[:attachment_id])
120 send_file @attachment.diskfile, :filename => @attachment.filename
121 send_file @attachment.diskfile, :filename => @attachment.filename
121 end
122 end
122
123
123 private
124 private
124 def find_project
125 def find_project
125 @issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])
126 @issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])
126 @project = @issue.project
127 @project = @issue.project
127 end
128 end
128 end
129 end
@@ -1,368 +1,410
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 ProjectsController < ApplicationController
18 class ProjectsController < ApplicationController
19 layout 'base', :except => :export_issues_pdf
19 layout 'base', :except => :export_issues_pdf
20 before_filter :find_project, :authorize, :except => [ :index, :list, :add ]
20 before_filter :find_project, :authorize, :except => [ :index, :list, :add ]
21 before_filter :require_admin, :only => [ :add, :destroy ]
21 before_filter :require_admin, :only => [ :add, :destroy ]
22
22
23 helper :sort
23 helper :sort
24 include SortHelper
24 include SortHelper
25 helper :search_filter
25 helper :search_filter
26 include SearchFilterHelper
26 include SearchFilterHelper
27 helper :custom_fields
27 helper :custom_fields
28 include CustomFieldsHelper
28 include CustomFieldsHelper
29 helper :ifpdf
29 helper :ifpdf
30 include IfpdfHelper
30 include IfpdfHelper
31
31
32 def index
32 def index
33 list
33 list
34 render :action => 'list' unless request.xhr?
34 render :action => 'list' unless request.xhr?
35 end
35 end
36
36
37 # Lists public projects
37 # Lists public projects
38 def list
38 def list
39 sort_init 'name', 'asc'
39 sort_init 'name', 'asc'
40 sort_update
40 sort_update
41 @project_count = Project.count(["is_public=?", true])
41 @project_count = Project.count(["is_public=?", true])
42 @project_pages = Paginator.new self, @project_count,
42 @project_pages = Paginator.new self, @project_count,
43 15,
43 15,
44 @params['page']
44 @params['page']
45 @projects = Project.find :all, :order => sort_clause,
45 @projects = Project.find :all, :order => sort_clause,
46 :conditions => ["is_public=?", true],
46 :conditions => ["is_public=?", true],
47 :limit => @project_pages.items_per_page,
47 :limit => @project_pages.items_per_page,
48 :offset => @project_pages.current.offset
48 :offset => @project_pages.current.offset
49
49
50 render :action => "list", :layout => false if request.xhr?
50 render :action => "list", :layout => false if request.xhr?
51 end
51 end
52
52
53 # Add a new project
53 # Add a new project
54 def add
54 def add
55 @custom_fields = IssueCustomField.find(:all)
55 @custom_fields = IssueCustomField.find(:all)
56 @root_projects = Project.find(:all, :conditions => "parent_id is null")
56 @root_projects = Project.find(:all, :conditions => "parent_id is null")
57 @project = Project.new(params[:project])
57 @project = Project.new(params[:project])
58 if request.get?
58 if request.get?
59 @custom_values = ProjectCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @project) }
59 @custom_values = ProjectCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @project) }
60 else
60 else
61 @project.custom_fields = CustomField.find(@params[:custom_field_ids]) if @params[:custom_field_ids]
61 @project.custom_fields = CustomField.find(@params[:custom_field_ids]) if @params[:custom_field_ids]
62 @custom_values = ProjectCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @project, :value => params["custom_fields"][x.id.to_s]) }
62 @custom_values = ProjectCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @project, :value => params["custom_fields"][x.id.to_s]) }
63 @project.custom_values = @custom_values
63 @project.custom_values = @custom_values
64 if @project.save
64 if @project.save
65 flash[:notice] = l(:notice_successful_create)
65 flash[:notice] = l(:notice_successful_create)
66 redirect_to :controller => 'admin', :action => 'projects'
66 redirect_to :controller => 'admin', :action => 'projects'
67 end
67 end
68 end
68 end
69 end
69 end
70
70
71 # Show @project
71 # Show @project
72 def show
72 def show
73 @custom_values = @project.custom_values.find(:all, :include => :custom_field)
73 @custom_values = @project.custom_values.find(:all, :include => :custom_field)
74 @members = @project.members.find(:all, :include => [:user, :role])
74 @members = @project.members.find(:all, :include => [:user, :role])
75 @subprojects = @project.children if @project.children_count > 0
75 @subprojects = @project.children if @project.children_count > 0
76 @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "news.created_on DESC")
76 @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "news.created_on DESC")
77 @trackers = Tracker.find(:all)
77 @trackers = Tracker.find(:all)
78 end
78 end
79
79
80 def settings
80 def settings
81 @root_projects = Project::find(:all, :conditions => ["parent_id is null and id <> ?", @project.id])
81 @root_projects = Project::find(:all, :conditions => ["parent_id is null and id <> ?", @project.id])
82 @custom_fields = IssueCustomField::find_all
82 @custom_fields = IssueCustomField::find_all
83 @issue_category ||= IssueCategory.new
83 @issue_category ||= IssueCategory.new
84 @member ||= @project.members.new
84 @member ||= @project.members.new
85 @roles = Role.find_all
85 @roles = Role.find_all
86 @users = User.find_all - @project.members.find(:all, :include => :user).collect{|m| m.user }
86 @users = User.find_all - @project.members.find(:all, :include => :user).collect{|m| m.user }
87 @custom_values ||= ProjectCustomField.find(:all).collect { |x| @project.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x) }
87 @custom_values ||= ProjectCustomField.find(:all).collect { |x| @project.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x) }
88 end
88 end
89
89
90 # Edit @project
90 # Edit @project
91 def edit
91 def edit
92 if request.post?
92 if request.post?
93 @project.custom_fields = IssueCustomField.find(@params[:custom_field_ids]) if @params[:custom_field_ids]
93 @project.custom_fields = IssueCustomField.find(@params[:custom_field_ids]) if @params[:custom_field_ids]
94 if params[:custom_fields]
94 if params[:custom_fields]
95 @custom_values = ProjectCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @project, :value => params["custom_fields"][x.id.to_s]) }
95 @custom_values = ProjectCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @project, :value => params["custom_fields"][x.id.to_s]) }
96 @project.custom_values = @custom_values
96 @project.custom_values = @custom_values
97 end
97 end
98 if @project.update_attributes(params[:project])
98 if @project.update_attributes(params[:project])
99 flash[:notice] = l(:notice_successful_update)
99 flash[:notice] = l(:notice_successful_update)
100 redirect_to :action => 'settings', :id => @project
100 redirect_to :action => 'settings', :id => @project
101 else
101 else
102 settings
102 settings
103 render :action => 'settings'
103 render :action => 'settings'
104 end
104 end
105 end
105 end
106 end
106 end
107
107
108 # Delete @project
108 # Delete @project
109 def destroy
109 def destroy
110 if request.post? and params[:confirm]
110 if request.post? and params[:confirm]
111 @project.destroy
111 @project.destroy
112 redirect_to :controller => 'admin', :action => 'projects'
112 redirect_to :controller => 'admin', :action => 'projects'
113 end
113 end
114 end
114 end
115
115
116 # Add a new issue category to @project
116 # Add a new issue category to @project
117 def add_issue_category
117 def add_issue_category
118 if request.post?
118 if request.post?
119 @issue_category = @project.issue_categories.build(params[:issue_category])
119 @issue_category = @project.issue_categories.build(params[:issue_category])
120 if @issue_category.save
120 if @issue_category.save
121 flash[:notice] = l(:notice_successful_create)
121 flash[:notice] = l(:notice_successful_create)
122 redirect_to :action => 'settings', :id => @project
122 redirect_to :action => 'settings', :id => @project
123 else
123 else
124 settings
124 settings
125 render :action => 'settings'
125 render :action => 'settings'
126 end
126 end
127 end
127 end
128 end
128 end
129
129
130 # Add a new version to @project
130 # Add a new version to @project
131 def add_version
131 def add_version
132 @version = @project.versions.build(params[:version])
132 @version = @project.versions.build(params[:version])
133 if request.post? and @version.save
133 if request.post? and @version.save
134 flash[:notice] = l(:notice_successful_create)
134 flash[:notice] = l(:notice_successful_create)
135 redirect_to :action => 'settings', :id => @project
135 redirect_to :action => 'settings', :id => @project
136 end
136 end
137 end
137 end
138
138
139 # Add a new member to @project
139 # Add a new member to @project
140 def add_member
140 def add_member
141 @member = @project.members.build(params[:member])
141 @member = @project.members.build(params[:member])
142 if request.post?
142 if request.post?
143 if @member.save
143 if @member.save
144 flash[:notice] = l(:notice_successful_create)
144 flash[:notice] = l(:notice_successful_create)
145 redirect_to :action => 'settings', :id => @project
145 redirect_to :action => 'settings', :id => @project
146 else
146 else
147 settings
147 settings
148 render :action => 'settings'
148 render :action => 'settings'
149 end
149 end
150 end
150 end
151 end
151 end
152
152
153 # Show members list of @project
153 # Show members list of @project
154 def list_members
154 def list_members
155 @members = @project.members
155 @members = @project.members
156 end
156 end
157
157
158 # Add a new document to @project
158 # Add a new document to @project
159 def add_document
159 def add_document
160 @categories = Enumeration::get_values('DCAT')
160 @categories = Enumeration::get_values('DCAT')
161 @document = @project.documents.build(params[:document])
161 @document = @project.documents.build(params[:document])
162 if request.post?
162 if request.post?
163 # Save the attachment
163 # Save the attachment
164 if params[:attachment][:file].size > 0
164 if params[:attachment][:file].size > 0
165 @attachment = @document.attachments.build(params[:attachment])
165 @attachment = @document.attachments.build(params[:attachment])
166 @attachment.author_id = self.logged_in_user.id if self.logged_in_user
166 @attachment.author_id = self.logged_in_user.id if self.logged_in_user
167 end
167 end
168 if @document.save
168 if @document.save
169 flash[:notice] = l(:notice_successful_create)
169 flash[:notice] = l(:notice_successful_create)
170 redirect_to :action => 'list_documents', :id => @project
170 redirect_to :action => 'list_documents', :id => @project
171 end
171 end
172 end
172 end
173 end
173 end
174
174
175 # Show documents list of @project
175 # Show documents list of @project
176 def list_documents
176 def list_documents
177 @documents = @project.documents
177 @documents = @project.documents
178 end
178 end
179
179
180 # Add a new issue to @project
180 # Add a new issue to @project
181 def add_issue
181 def add_issue
182 @tracker = Tracker.find(params[:tracker_id])
182 @tracker = Tracker.find(params[:tracker_id])
183 @priorities = Enumeration::get_values('IPRI')
183 @priorities = Enumeration::get_values('IPRI')
184 @issue = Issue.new(:project => @project, :tracker => @tracker)
184 @issue = Issue.new(:project => @project, :tracker => @tracker)
185 if request.get?
185 if request.get?
186 @custom_values = @project.custom_fields_for_issues(@tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue) }
186 @custom_values = @project.custom_fields_for_issues(@tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue) }
187 else
187 else
188 @issue.attributes = params[:issue]
188 @issue.attributes = params[:issue]
189 @issue.author_id = self.logged_in_user.id if self.logged_in_user
189 @issue.author_id = self.logged_in_user.id if self.logged_in_user
190 # Create the document if a file was sent
190 # Create the document if a file was sent
191 if params[:attachment][:file].size > 0
191 if params[:attachment][:file].size > 0
192 @attachment = @issue.attachments.build(params[:attachment])
192 @attachment = @issue.attachments.build(params[:attachment])
193 @attachment.author_id = self.logged_in_user.id if self.logged_in_user
193 @attachment.author_id = self.logged_in_user.id if self.logged_in_user
194 end
194 end
195 @custom_values = @project.custom_fields_for_issues(@tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue, :value => params["custom_fields"][x.id.to_s]) }
195 @custom_values = @project.custom_fields_for_issues(@tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue, :value => params["custom_fields"][x.id.to_s]) }
196 @issue.custom_values = @custom_values
196 @issue.custom_values = @custom_values
197 if @issue.save
197 if @issue.save
198 flash[:notice] = l(:notice_successful_create)
198 flash[:notice] = l(:notice_successful_create)
199 Mailer.deliver_issue_add(@issue) if Permission.find_by_controller_and_action(@params[:controller], @params[:action]).mail_enabled?
199 Mailer.deliver_issue_add(@issue) if Permission.find_by_controller_and_action(@params[:controller], @params[:action]).mail_enabled?
200 redirect_to :action => 'list_issues', :id => @project
200 redirect_to :action => 'list_issues', :id => @project
201 end
201 end
202 end
202 end
203 end
203 end
204
204
205 # Show filtered/sorted issues list of @project
205 # Show filtered/sorted issues list of @project
206 def list_issues
206 def list_issues
207 sort_init 'issues.id', 'desc'
207 sort_init 'issues.id', 'desc'
208 sort_update
208 sort_update
209
209
210 search_filter_init_list_issues
210 search_filter_init_list_issues
211 search_filter_update if params[:set_filter]
211 search_filter_update if params[:set_filter]
212
212
213 @results_per_page_options = [ 15, 25, 50, 100 ]
213 @results_per_page_options = [ 15, 25, 50, 100 ]
214 if params[:per_page] and @results_per_page_options.include? params[:per_page].to_i
214 if params[:per_page] and @results_per_page_options.include? params[:per_page].to_i
215 @results_per_page = params[:per_page].to_i
215 @results_per_page = params[:per_page].to_i
216 session[:results_per_page] = @results_per_page
216 session[:results_per_page] = @results_per_page
217 else
217 else
218 @results_per_page = session[:results_per_page] || @results_per_page_options.first
218 @results_per_page = session[:results_per_page] || @results_per_page_options.first
219 end
219 end
220
220
221 @issue_count = Issue.count(:include => [:status, :project], :conditions => search_filter_clause)
221 @issue_count = Issue.count(:include => [:status, :project], :conditions => search_filter_clause)
222 @issue_pages = Paginator.new self, @issue_count, @results_per_page, @params['page']
222 @issue_pages = Paginator.new self, @issue_count, @results_per_page, @params['page']
223 @issues = Issue.find :all, :order => sort_clause,
223 @issues = Issue.find :all, :order => sort_clause,
224 :include => [ :author, :status, :tracker, :project ],
224 :include => [ :author, :status, :tracker, :project ],
225 :conditions => search_filter_clause,
225 :conditions => search_filter_clause,
226 :limit => @issue_pages.items_per_page,
226 :limit => @issue_pages.items_per_page,
227 :offset => @issue_pages.current.offset
227 :offset => @issue_pages.current.offset
228
228
229 render :layout => false if request.xhr?
229 render :layout => false if request.xhr?
230 end
230 end
231
231
232 # Export filtered/sorted issues list to CSV
232 # Export filtered/sorted issues list to CSV
233 def export_issues_csv
233 def export_issues_csv
234 sort_init 'issues.id', 'desc'
234 sort_init 'issues.id', 'desc'
235 sort_update
235 sort_update
236
236
237 search_filter_init_list_issues
237 search_filter_init_list_issues
238
238
239 @issues = Issue.find :all, :order => sort_clause,
239 @issues = Issue.find :all, :order => sort_clause,
240 :include => [ :author, :status, :tracker, :project, :custom_values ],
240 :include => [ :author, :status, :tracker, :project, :custom_values ],
241 :conditions => search_filter_clause
241 :conditions => search_filter_clause
242
242
243 ic = Iconv.new('ISO-8859-1', 'UTF-8')
243 ic = Iconv.new('ISO-8859-1', 'UTF-8')
244 export = StringIO.new
244 export = StringIO.new
245 CSV::Writer.generate(export, l(:general_csv_separator)) do |csv|
245 CSV::Writer.generate(export, l(:general_csv_separator)) do |csv|
246 # csv header fields
246 # csv header fields
247 headers = [ "#", l(:field_status), l(:field_tracker), l(:field_subject), l(:field_author), l(:field_created_on), l(:field_updated_on) ]
247 headers = [ "#", l(:field_status), l(:field_tracker), l(:field_subject), l(:field_author), l(:field_created_on), l(:field_updated_on) ]
248 for custom_field in @project.all_custom_fields
248 for custom_field in @project.all_custom_fields
249 headers << custom_field.name
249 headers << custom_field.name
250 end
250 end
251 csv << headers.collect {|c| ic.iconv(c) }
251 csv << headers.collect {|c| ic.iconv(c) }
252 # csv lines
252 # csv lines
253 @issues.each do |issue|
253 @issues.each do |issue|
254 fields = [issue.id, issue.status.name, issue.tracker.name, issue.subject, issue.author.display_name, l_datetime(issue.created_on), l_datetime(issue.updated_on)]
254 fields = [issue.id, issue.status.name, issue.tracker.name, issue.subject, issue.author.display_name, l_datetime(issue.created_on), l_datetime(issue.updated_on)]
255 for custom_field in @project.all_custom_fields
255 for custom_field in @project.all_custom_fields
256 fields << (show_value issue.custom_value_for(custom_field))
256 fields << (show_value issue.custom_value_for(custom_field))
257 end
257 end
258 csv << fields.collect {|c| ic.iconv(c.to_s) }
258 csv << fields.collect {|c| ic.iconv(c.to_s) }
259 end
259 end
260 end
260 end
261 export.rewind
261 export.rewind
262 send_data(export.read, :type => 'text/csv; header=present', :filename => 'export.csv')
262 send_data(export.read, :type => 'text/csv; header=present', :filename => 'export.csv')
263 end
263 end
264
264
265 # Export filtered/sorted issues to PDF
265 # Export filtered/sorted issues to PDF
266 def export_issues_pdf
266 def export_issues_pdf
267 sort_init 'issues.id', 'desc'
267 sort_init 'issues.id', 'desc'
268 sort_update
268 sort_update
269
269
270 search_filter_init_list_issues
270 search_filter_init_list_issues
271
271
272 @issues = Issue.find :all, :order => sort_clause,
272 @issues = Issue.find :all, :order => sort_clause,
273 :include => [ :author, :status, :tracker, :project, :custom_values ],
273 :include => [ :author, :status, :tracker, :project, :custom_values ],
274 :conditions => search_filter_clause
274 :conditions => search_filter_clause
275
275
276 @options_for_rfpdf ||= {}
276 @options_for_rfpdf ||= {}
277 @options_for_rfpdf[:file_name] = "export.pdf"
277 @options_for_rfpdf[:file_name] = "export.pdf"
278 end
278 end
279
279
280 def move_issues
280 def move_issues
281 @issues = @project.issues.find(params[:issue_ids]) if params[:issue_ids]
281 @issues = @project.issues.find(params[:issue_ids]) if params[:issue_ids]
282 redirect_to :action => 'list_issues', :id => @project and return unless @issues
282 redirect_to :action => 'list_issues', :id => @project and return unless @issues
283 @projects = []
283 @projects = []
284 # find projects to which the user is allowed to move the issue
284 # find projects to which the user is allowed to move the issue
285 @logged_in_user.memberships.each {|m| @projects << m.project if Permission.allowed_to_role("projects/move_issues", m.role_id)}
285 @logged_in_user.memberships.each {|m| @projects << m.project if Permission.allowed_to_role("projects/move_issues", m.role_id)}
286 # issue can be moved to any tracker
286 # issue can be moved to any tracker
287 @trackers = Tracker.find(:all)
287 @trackers = Tracker.find(:all)
288 if request.post? and params[:new_project_id] and params[:new_tracker_id]
288 if request.post? and params[:new_project_id] and params[:new_tracker_id]
289 new_project = Project.find(params[:new_project_id])
289 new_project = Project.find(params[:new_project_id])
290 new_tracker = Tracker.find(params[:new_tracker_id])
290 new_tracker = Tracker.find(params[:new_tracker_id])
291 @issues.each { |i|
291 @issues.each { |i|
292 # category is project dependent
292 # category is project dependent
293 i.category = nil unless i.project_id == new_project.id
293 i.category = nil unless i.project_id == new_project.id
294 # move the issue
294 # move the issue
295 i.project = new_project
295 i.project = new_project
296 i.tracker = new_tracker
296 i.tracker = new_tracker
297 i.save
297 i.save
298 }
298 }
299 flash[:notice] = l(:notice_successful_update)
299 flash[:notice] = l(:notice_successful_update)
300 redirect_to :action => 'list_issues', :id => @project
300 redirect_to :action => 'list_issues', :id => @project
301 end
301 end
302 end
302 end
303
303
304 # Add a news to @project
304 # Add a news to @project
305 def add_news
305 def add_news
306 @news = News.new(:project => @project)
306 @news = News.new(:project => @project)
307 if request.post?
307 if request.post?
308 @news.attributes = params[:news]
308 @news.attributes = params[:news]
309 @news.author_id = self.logged_in_user.id if self.logged_in_user
309 @news.author_id = self.logged_in_user.id if self.logged_in_user
310 if @news.save
310 if @news.save
311 flash[:notice] = l(:notice_successful_create)
311 flash[:notice] = l(:notice_successful_create)
312 redirect_to :action => 'list_news', :id => @project
312 redirect_to :action => 'list_news', :id => @project
313 end
313 end
314 end
314 end
315 end
315 end
316
316
317 # Show news list of @project
317 # Show news list of @project
318 def list_news
318 def list_news
319 @news_pages, @news = paginate :news, :per_page => 10, :conditions => ["project_id=?", @project.id], :include => :author, :order => "news.created_on DESC"
319 @news_pages, @news = paginate :news, :per_page => 10, :conditions => ["project_id=?", @project.id], :include => :author, :order => "news.created_on DESC"
320 render :action => "list_news", :layout => false if request.xhr?
320 render :action => "list_news", :layout => false if request.xhr?
321 end
321 end
322
322
323 def add_file
323 def add_file
324 if request.post?
324 if request.post?
325 # Save the attachment
325 # Save the attachment
326 if params[:attachment][:file].size > 0
326 if params[:attachment][:file].size > 0
327 @attachment = @project.versions.find(params[:version_id]).attachments.build(params[:attachment])
327 @attachment = @project.versions.find(params[:version_id]).attachments.build(params[:attachment])
328 @attachment.author_id = self.logged_in_user.id if self.logged_in_user
328 @attachment.author_id = self.logged_in_user.id if self.logged_in_user
329 if @attachment.save
329 if @attachment.save
330 flash[:notice] = l(:notice_successful_create)
330 flash[:notice] = l(:notice_successful_create)
331 redirect_to :controller => 'projects', :action => 'list_files', :id => @project
331 redirect_to :controller => 'projects', :action => 'list_files', :id => @project
332 end
332 end
333 end
333 end
334 end
334 end
335 @versions = @project.versions
335 @versions = @project.versions
336 end
336 end
337
337
338 def list_files
338 def list_files
339 @versions = @project.versions
339 @versions = @project.versions
340 end
340 end
341
341
342 # Show changelog for @project
342 # Show changelog for @project
343 def changelog
343 def changelog
344 @trackers = Tracker.find(:all, :conditions => ["is_in_chlog=?", true])
344 @trackers = Tracker.find(:all, :conditions => ["is_in_chlog=?", true])
345 if request.get?
345 if request.get?
346 @selected_tracker_ids = @trackers.collect {|t| t.id.to_s }
346 @selected_tracker_ids = @trackers.collect {|t| t.id.to_s }
347 else
347 else
348 @selected_tracker_ids = params[:tracker_ids].collect { |id| id.to_i.to_s } if params[:tracker_ids] and params[:tracker_ids].is_a? Array
348 @selected_tracker_ids = params[:tracker_ids].collect { |id| id.to_i.to_s } if params[:tracker_ids] and params[:tracker_ids].is_a? Array
349 end
349 end
350 @selected_tracker_ids ||= []
350 @selected_tracker_ids ||= []
351 @fixed_issues = @project.issues.find(:all,
351 @fixed_issues = @project.issues.find(:all,
352 :include => [ :fixed_version, :status, :tracker ],
352 :include => [ :fixed_version, :status, :tracker ],
353 :conditions => [ "issue_statuses.is_closed=? and issues.tracker_id in (#{@selected_tracker_ids.join(',')}) and issues.fixed_version_id is not null", true],
353 :conditions => [ "issue_statuses.is_closed=? and issues.tracker_id in (#{@selected_tracker_ids.join(',')}) and issues.fixed_version_id is not null", true],
354 :order => "versions.effective_date DESC, issues.id DESC"
354 :order => "versions.effective_date DESC, issues.id DESC"
355 ) unless @selected_tracker_ids.empty?
355 ) unless @selected_tracker_ids.empty?
356 @fixed_issues ||= []
356 @fixed_issues ||= []
357 end
357 end
358
358
359 def activity
360 @date_from = begin
361 params[:date_from].to_date
362 rescue
363 end || Date.today
364 @days_back = params[:days_back] ? params[:days_back].to_i : 15
365 @date_to = @date_from - @days_back
366 @events_by_day = {}
367
368 unless params[:show_issues] == "0"
369 @project.issues.find(:all, :include => [:author, :status], :conditions => ["issues.created_on<=? and issues.created_on>=?", @date_from+1, @date_to], :order => "issues.created_on asc" ).each { |i|
370 @events_by_day[i.created_on.to_date] ||= []
371 @events_by_day[i.created_on.to_date] << i
372 }
373 @show_issues = 1
374 end
375
376 unless params[:show_news] == "0"
377 @project.news.find(:all, :conditions => ["news.created_on<=? and news.created_on>=?", @date_from+1, @date_to], :order => "news.created_on asc" ).each { |i|
378 @events_by_day[i.created_on.to_date] ||= []
379 @events_by_day[i.created_on.to_date] << i
380 }
381 @show_news = 1
382 end
383
384 unless params[:show_files] == "0"
385 Attachment.find(:all, :joins => "LEFT JOIN versions ON versions.id = attachments.container_id", :conditions => ["attachments.container_type='Version' and versions.project_id=? and attachments.created_on<=? and attachments.created_on>=?", @project.id, @date_from+1, @date_to], :order => "attachments.created_on asc" ).each { |i|
386 @events_by_day[i.created_on.to_date] ||= []
387 @events_by_day[i.created_on.to_date] << i
388 }
389 @show_files = 1
390 end
391
392 unless params[:show_documentss] == "0"
393 Attachment.find(:all, :joins => "LEFT JOIN documents ON documents.id = attachments.container_id", :conditions => ["attachments.container_type='Document' and documents.project_id=? and attachments.created_on<=? and attachments.created_on>=?", @project.id, @date_from+1, @date_to], :order => "attachments.created_on asc" ).each { |i|
394 @events_by_day[i.created_on.to_date] ||= []
395 @events_by_day[i.created_on.to_date] << i
396 }
397 @show_documents = 1
398 end
399
400 end
359 private
401 private
360 # Find project of id params[:id]
402 # Find project of id params[:id]
361 # if not found, redirect to project list
403 # if not found, redirect to project list
362 # Used as a before_filter
404 # Used as a before_filter
363 def find_project
405 def find_project
364 @project = Project.find(params[:id])
406 @project = Project.find(params[:id])
365 rescue
407 rescue
366 redirect_to :action => 'list'
408 redirect_to :action => 'list'
367 end
409 end
368 end
410 end
@@ -1,72 +1,72
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 module CustomFieldsHelper
18 module CustomFieldsHelper
19
19
20 # Return custom field html tag corresponding to its format
20 # Return custom field html tag corresponding to its format
21 def custom_field_tag(custom_value)
21 def custom_field_tag(custom_value)
22 custom_field = custom_value.custom_field
22 custom_field = custom_value.custom_field
23 field_name = "custom_fields[#{custom_field.id}]"
23 field_name = "custom_fields[#{custom_field.id}]"
24 field_id = "custom_fields_#{custom_field.id}"
24 field_id = "custom_fields_#{custom_field.id}"
25
25
26 case custom_field.field_format
26 case custom_field.field_format
27 when "string", "int"
27 when "string", "int"
28 text_field 'custom_value', 'value', :name => field_name, :id => field_id
28 text_field 'custom_value', 'value', :name => field_name, :id => field_id
29 when "date"
29 when "date"
30 text_field('custom_value', 'value', :name => field_name, :id => field_id, :size => 10) +
30 text_field('custom_value', 'value', :name => field_name, :id => field_id, :size => 10) +
31 calendar_for(field_id)
31 calendar_for(field_id)
32 when "text"
32 when "text"
33 text_area 'custom_value', 'value', :name => field_name, :id => field_id, :cols => 60, :rows => 3
33 text_area 'custom_value', 'value', :name => field_name, :id => field_id, :cols => 60, :rows => 3
34 when "bool"
34 when "bool"
35 check_box 'custom_value', 'value', :name => field_name, :id => field_id
35 check_box 'custom_value', 'value', :name => field_name, :id => field_id
36 when "list"
36 when "list"
37 select 'custom_value', 'value', custom_field.possible_values.split('|'), { :include_blank => true }, :name => field_name, :id => field_id
37 select 'custom_value', 'value', custom_field.possible_values.split('|'), { :include_blank => true }, :name => field_name, :id => field_id
38 end
38 end
39 end
39 end
40
40
41 # Return custom field label tag
41 # Return custom field label tag
42 def custom_field_label_tag(custom_value)
42 def custom_field_label_tag(custom_value)
43 content_tag "label", custom_value.custom_field.name +
43 content_tag "label", custom_value.custom_field.name +
44 (custom_value.custom_field.is_required? ? " <span class=\"required\">*</span>" : ""),
44 (custom_value.custom_field.is_required? ? " <span class=\"required\">*</span>" : ""),
45 :for => "custom_fields_#{custom_value.custom_field.id}",
45 :for => "custom_fields_#{custom_value.custom_field.id}",
46 :class => (custom_value.errors.empty? ? nil : "error" )
46 :class => (custom_value.errors.empty? ? nil : "error" )
47 end
47 end
48
48
49 # Return custom field tag with its label tag
49 # Return custom field tag with its label tag
50 def custom_field_tag_with_label(custom_value)
50 def custom_field_tag_with_label(custom_value)
51 custom_field_label_tag(custom_value) + custom_field_tag(custom_value)
51 custom_field_label_tag(custom_value) + custom_field_tag(custom_value)
52 end
52 end
53
53
54 # Return a string used to display a custom value
54 # Return a string used to display a custom value
55 def show_value(custom_value)
55 def show_value(custom_value)
56 return "" unless custom_value
56 return "" unless custom_value
57
57
58 case custom_value.custom_field.field_format
58 case custom_value.custom_field.field_format
59 when "date"
59 when "date"
60 l_date(custom_value.value.to_date) if custom_value.value
60 custom_value.value.empty? ? "" : l_date(custom_value.value.to_date)
61 when "bool"
61 when "bool"
62 l_YesNo(custom_value.value == "1")
62 l_YesNo(custom_value.value == "1")
63 else
63 else
64 custom_value.value
64 custom_value.value
65 end
65 end
66 end
66 end
67
67
68 # Return an array of custom field formats which can be used in select_tag
68 # Return an array of custom field formats which can be used in select_tag
69 def custom_field_formats_for_select
69 def custom_field_formats_for_select
70 CustomField::FIELD_FORMATS.keys.collect { |k| [ l(CustomField::FIELD_FORMATS[k]), k ] }
70 CustomField::FIELD_FORMATS.keys.collect { |k| [ l(CustomField::FIELD_FORMATS[k]), k ] }
71 end
71 end
72 end
72 end
@@ -1,69 +1,69
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 Issue < ActiveRecord::Base
18 class Issue < ActiveRecord::Base
19
19
20 belongs_to :project
20 belongs_to :project
21 belongs_to :tracker
21 belongs_to :tracker
22 belongs_to :status, :class_name => 'IssueStatus', :foreign_key => 'status_id'
22 belongs_to :status, :class_name => 'IssueStatus', :foreign_key => 'status_id'
23 belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
23 belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
24 belongs_to :assigned_to, :class_name => 'User', :foreign_key => 'assigned_to_id'
24 belongs_to :assigned_to, :class_name => 'User', :foreign_key => 'assigned_to_id'
25 belongs_to :fixed_version, :class_name => 'Version', :foreign_key => 'fixed_version_id'
25 belongs_to :fixed_version, :class_name => 'Version', :foreign_key => 'fixed_version_id'
26 belongs_to :priority, :class_name => 'Enumeration', :foreign_key => 'priority_id'
26 belongs_to :priority, :class_name => 'Enumeration', :foreign_key => 'priority_id'
27 belongs_to :category, :class_name => 'IssueCategory', :foreign_key => 'category_id'
27 belongs_to :category, :class_name => 'IssueCategory', :foreign_key => 'category_id'
28
28
29 has_many :histories, :class_name => 'IssueHistory', :dependent => true, :order => "issue_histories.created_on DESC", :include => :status
29 has_many :histories, :class_name => 'IssueHistory', :dependent => true, :order => "issue_histories.created_on DESC", :include => :status
30 has_many :attachments, :as => :container, :dependent => true
30 has_many :attachments, :as => :container, :dependent => true
31
31
32 has_many :custom_values, :dependent => true, :as => :customized
32 has_many :custom_values, :dependent => true, :as => :customized
33 has_many :custom_fields, :through => :custom_values
33 has_many :custom_fields, :through => :custom_values
34
34
35 validates_presence_of :subject, :description, :priority, :tracker, :author
35 validates_presence_of :subject, :description, :priority, :tracker, :author, :status
36 validates_associated :custom_values, :on => :update
36 validates_associated :custom_values, :on => :update
37
37
38 # set default status for new issues
38 # set default status for new issues
39 def before_validation
39 def before_validation
40 self.status = IssueStatus.default if new_record?
40 self.status = IssueStatus.default if new_record?
41 end
41 end
42
42
43 def validate
43 def validate
44 if self.due_date.nil? && @attributes['due_date'] && !@attributes['due_date'].empty?
44 if self.due_date.nil? && @attributes['due_date'] && !@attributes['due_date'].empty?
45 errors.add :due_date, :activerecord_error_not_a_date
45 errors.add :due_date, :activerecord_error_not_a_date
46 end
46 end
47 end
47 end
48
48
49 def before_create
49 def before_create
50 build_history
50 build_history
51 end
51 end
52
52
53 def long_id
53 def long_id
54 "%05d" % self.id
54 "%05d" % self.id
55 end
55 end
56
56
57 def custom_value_for(custom_field)
57 def custom_value_for(custom_field)
58 self.custom_values.each {|v| return v if v.custom_field_id == custom_field.id }
58 self.custom_values.each {|v| return v if v.custom_field_id == custom_field.id }
59 return nil
59 return nil
60 end
60 end
61
61
62 private
62 private
63 # Creates an history for the issue
63 # Creates an history for the issue
64 def build_history
64 def build_history
65 @history = self.histories.build
65 @history = self.histories.build
66 @history.status = self.status
66 @history.status = self.status
67 @history.author = self.author
67 @history.author = self.author
68 end
68 end
69 end
69 end
@@ -1,23 +1,24
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 IssueHistory < ActiveRecord::Base
18 class IssueHistory < ActiveRecord::Base
19 belongs_to :status, :class_name => 'IssueStatus', :foreign_key => 'status_id'
19 belongs_to :status, :class_name => 'IssueStatus', :foreign_key => 'status_id'
20 belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
20 belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
21 belongs_to :issue
21
22
22 validates_presence_of :status
23 validates_presence_of :status
23 end
24 end
@@ -1,45 +1,49
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 IssueStatus < ActiveRecord::Base
18 class IssueStatus < ActiveRecord::Base
19 before_destroy :check_integrity
19 before_destroy :check_integrity
20 has_many :workflows, :foreign_key => "old_status_id"
20 has_many :workflows, :foreign_key => "old_status_id"
21
21
22 validates_presence_of :name
22 validates_presence_of :name
23 validates_uniqueness_of :name
23 validates_uniqueness_of :name
24 validates_length_of :html_color, :is=>6
24 validates_length_of :html_color, :is => 6
25 validates_format_of :html_color, :with => /^[a-f0-9]*$/i
25 validates_format_of :html_color, :with => /^[a-f0-9]*$/i
26
26
27 def before_save
28 IssueStatus.update_all "is_default=false" if self.is_default?
29 end
30
27 # Returns the default status for new issues
31 # Returns the default status for new issues
28 def self.default
32 def self.default
29 find(:first, :conditions =>["is_default=?", true])
33 find(:first, :conditions =>["is_default=?", true])
30 end
34 end
31
35
32 # Returns an array of all statuses the given role can switch to
36 # Returns an array of all statuses the given role can switch to
33 def new_statuses_allowed_to(role, tracker)
37 def new_statuses_allowed_to(role, tracker)
34 statuses = []
38 statuses = []
35 for workflow in self.workflows
39 for workflow in self.workflows
36 statuses << workflow.new_status if workflow.role_id == role.id and workflow.tracker_id == tracker.id
40 statuses << workflow.new_status if workflow.role_id == role.id and workflow.tracker_id == tracker.id
37 end unless role.nil? or tracker.nil?
41 end unless role.nil? or tracker.nil?
38 statuses
42 statuses
39 end
43 end
40
44
41 private
45 private
42 def check_integrity
46 def check_integrity
43 raise "Can't delete status" if Issue.find(:first, :conditions => ["status_id=?", self.id]) or IssueHistory.find(:first, :conditions => ["status_id=?", self.id])
47 raise "Can't delete status" if Issue.find(:first, :conditions => ["status_id=?", self.id]) or IssueHistory.find(:first, :conditions => ["status_id=?", self.id])
44 end
48 end
45 end
49 end
@@ -1,49 +1,57
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 Mailer < ActionMailer::Base
18 class Mailer < ActionMailer::Base
19
19
20 def issue_change_status(issue)
20 def issue_change_status(issue)
21 # Sends to all project members
21 # Sends to all project members
22 @recipients = issue.project.members.collect { |m| m.user.mail if m.user.mail_notification }
22 @recipients = issue.project.members.collect { |m| m.user.mail if m.user.mail_notification }
23 @from = 'redmine@somenet.foo'
23 @from = $RDM_MAIL_FROM
24 @subject = "Issue ##{issue.id} has been updated"
24 @subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.status.name} - #{issue.subject}"
25 @body['issue'] = issue
25 @body['issue'] = issue
26 end
26 end
27
27
28 def issue_add(issue)
28 def issue_add(issue)
29 # Sends to all project members
29 # Sends to all project members
30 @recipients = issue.project.members.collect { |m| m.user.mail if m.user.mail_notification }
30 @recipients = issue.project.members.collect { |m| m.user.mail if m.user.mail_notification }
31 @from = 'redmine@somenet.foo'
31 @from = $RDM_MAIL_FROM
32 @subject = "Issue ##{issue.id} has been reported"
32 @subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.status.name} - #{issue.subject}"
33 @body['issue'] = issue
33 @body['issue'] = issue
34 end
34 end
35
35
36 def issue_add_note(history)
37 # Sends to all project members
38 @recipients = history.issue.project.members.collect { |m| m.user.mail if m.user.mail_notification }
39 @from = $RDM_MAIL_FROM
40 @subject = "[#{history.issue.project.name} - #{history.issue.tracker.name} ##{history.issue.id}] #{history.issue.status.name} - #{history.issue.subject}"
41 @body['history'] = history
42 end
43
36 def lost_password(token)
44 def lost_password(token)
37 @recipients = token.user.mail
45 @recipients = token.user.mail
38 @from = 'redmine@somenet.foo'
46 @from = $RDM_MAIL_FROM
39 @subject = "redMine password"
47 @subject = l(:mail_subject_lost_password)
40 @body['token'] = token
48 @body['token'] = token
41 end
49 end
42
50
43 def register(token)
51 def register(token)
44 @recipients = token.user.mail
52 @recipients = token.user.mail
45 @from = 'redmine@somenet.foo'
53 @from = $RDM_MAIL_FROM
46 @subject = "redMine account activation"
54 @subject = l(:mail_subject_register)
47 @body['token'] = token
55 @body['token'] = token
48 end
56 end
49 end
57 end
@@ -1,26 +1,54
1 <h2><%= @issue.tracker.name %> #<%= @issue.id %> - <%= @issue.subject %></h2>
1 <h2><%= @issue.tracker.name %> #<%= @issue.id %> - <%= @issue.subject %></h2>
2
2
3 <% labelled_tabular_form_for :issue, @issue, :url => {:action => 'edit'} do |f| %>
3 <% labelled_tabular_form_for :issue, @issue, :url => {:action => 'edit'} do |f| %>
4 <%= error_messages_for 'issue' %>
4 <%= error_messages_for 'issue' %>
5 <div class="box">
5 <div class="box">
6 <!--[form:issue]-->
6 <!--[form:issue]-->
7 <p><label><%=l(:field_status)%></label> <%= @issue.status.name %></p>
7 <p><label><%=l(:field_status)%></label> <%= @issue.status.name %></p>
8
8
9 <p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>
9 <p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>
10 <p><%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %></p>
10 <p><%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %></p>
11 <p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}) %></p>
11 <p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}) %></p>
12 <p><%= f.text_field :subject, :size => 80, :required => true %></p>
12 <p><%= f.text_field :subject, :size => 80, :required => true %></p>
13 <p><%= f.text_area :description, :cols => 60, :rows => 10, :required => true %></p>
13 <p><%= f.text_area :description, :cols => 60, :rows => 10, :required => true %></p>
14 <p><%= f.text_field :due_date, :size => 10 %><%= calendar_for('issue_due_date') %></p>
14 <p><%= f.text_field :due_date, :size => 10 %><%= calendar_for('issue_due_date') %></p>
15
15
16 <% for @custom_value in @custom_values %>
16 <% for @custom_value in @custom_values %>
17 <p><%= custom_field_tag_with_label @custom_value %></p>
17 <p><%= custom_field_tag_with_label @custom_value %></p>
18 <% end %>
18 <% end %>
19
19
20 <p><%= f.select :fixed_version_id, (@project.versions.collect {|v| [v.name, v.id]}), { :include_blank => true } %>
20 <p><%= f.select :fixed_version_id, (@project.versions.collect {|v| [v.name, v.id]}), { :include_blank => true } %>
21 </select></p>
21 </select></p>
22 <!--[eoform:issue]-->
22 <!--[eoform:issue]-->
23 </div>
23 </div>
24 <%= f.hidden_field :lock_version %>
24 <%= f.hidden_field :lock_version %>
25 <%= submit_tag l(:button_save) %>
25 <%= submit_tag l(:button_save) %>
26 <% end %>
26 <% end %>
27
28 <%= javascript_include_tag 'jstoolbar' %>
29 <script type="text/javascript">
30 //<![CDATA[
31 jsToolBar.prototype.base_url = 'http://callmepep.org';
32 jsToolBar.prototype.legend_msg = 'You can use the following shortcuts to format your text.';
33 jsToolBar.prototype.elements.strong.title = 'Strong emphasis';
34 jsToolBar.prototype.elements.em.title = 'Emphasis';
35 jsToolBar.prototype.elements.ins.title = 'Inserted';
36 jsToolBar.prototype.elements.del.title = 'Deleted';
37 jsToolBar.prototype.elements.quote.title = 'Inline quote';
38 jsToolBar.prototype.elements.code.title = 'Code';
39 jsToolBar.prototype.elements.br.title = 'Line break';
40 jsToolBar.prototype.elements.ul.title = 'Unordered list';
41 jsToolBar.prototype.elements.ol.title = 'Ordered list';
42 jsToolBar.prototype.elements.link.title = 'Link';
43 jsToolBar.prototype.elements.link.href_prompt = 'URL?';
44 jsToolBar.prototype.elements.link.hreflang_prompt = 'Language?';
45
46 if (document.getElementById) {
47 if (document.getElementById('issue_description')) {
48 var commentTb = new jsToolBar(document.getElementById('issue_description'));
49 commentTb.draw();
50 }
51 }
52
53 //]]>
54 </script> No newline at end of file
@@ -1,119 +1,137
1 <h2><%= @issue.tracker.name %> #<%= @issue.id %> - <%= @issue.subject %></h2>
1 <h2><%= @issue.tracker.name %> #<%= @issue.id %> - <%= @issue.subject %></h2>
2 <div class="topright">
2 <div class="topright">
3 <small>
3 <small>
4 <%= link_to 'PDF', :action => 'export_pdf', :id => @issue %>
4 <%= link_to 'PDF', :action => 'export_pdf', :id => @issue %>
5 </small>
5 </small>
6 </div>
6 </div>
7
7
8 <div class="box">
8 <div class="box">
9 <p>
9 <table width="100%">
10 <b><%=l(:field_status)%> :</b> <%= @issue.status.name %> &nbsp &nbsp
10 <tr>
11 <b><%=l(:field_priority)%> :</b> <%= @issue.priority.name %> &nbsp &nbsp
11 <td width="15%"><b><%=l(:field_status)%> :</b></td><td width="35%"><%= @issue.status.name %></td>
12 <b><%=l(:field_assigned_to)%> :</b> <%= @issue.assigned_to ? @issue.assigned_to.display_name : "-" %> &nbsp &nbsp
12 <td width="15%"><b><%=l(:field_priority)%> :</b></td><td width="35%"><%= @issue.priority.name %></td>
13 <b><%=l(:field_category)%> :</b> <%= @issue.category ? @issue.category.name : "-" %>
13 </tr>
14 </p>
14 <tr>
15 <div class="tabular">
15 <td><b><%=l(:field_author)%> :</b></td><td><%= link_to_user @issue.author %></td>
16 <p><label><%=l(:field_author)%> :</label> <%= link_to_user @issue.author %>&nbsp;</p>
16 <td><b><%=l(:field_category)%> :</b></td><td><%= @issue.category ? @issue.category.name : "-" %></td>
17 <p><label><%=l(:field_created_on)%> :</label> <%= format_date(@issue.created_on) %>&nbsp;</p>
17 </tr>
18 <p><label><%=l(:field_subject)%> :</label> <%= @issue.subject %>&nbsp;</p>
18 <tr>
19 <%= simple_format ("<label>" + l(:field_description) + ": </label>" + auto_link(@issue.description)) %>
19 <td><b><%=l(:field_created_on)%> :</b></td><td><%= format_date(@issue.created_on) %></td>
20 <p><label><%=l(:field_due_date)%> :</label> <%= format_date(@issue.due_date) %>&nbsp;</p>
20 <td><b><%=l(:field_assigned_to)%> :</b></td><td><%= @issue.assigned_to ? @issue.assigned_to.name : "-" %></td>
21 </tr>
22 <tr>
23 <td><b><%=l(:field_updated_on)%> :</b></td><td><%= format_date(@issue.updated_on) %></td>
24 <td><b><%=l(:field_due_date)%> :</b></td><td><%= format_date(@issue.due_date) %></td>
25 </tr>
26 <tr>
27 <% n = 0
28 for custom_value in @custom_values %>
29 <td><b><%= custom_value.custom_field.name %> :</b></td><td><%= show_value custom_value %></td>
30 <% n = n + 1
31 if (n > 1)
32 n = 0 %>
33 </tr><tr>
34 <%end
35 end %>
36 </tr>
37 </table>
38 <hr />
39 <br />
21
40
22 <% for custom_value in @custom_values %>
41 <b><%=l(:field_description)%> :</b><br /><br />
23 <p><label><%= custom_value.custom_field.name %> :</label> <%= show_value custom_value %></p>
42 <%= textilize @issue.description %>
24 <% end %>
25 &nbsp;
26 </div>
27
43
44 <p>
28 <% if authorize_for('issues', 'edit') %>
45 <% if authorize_for('issues', 'edit') %>
29 <%= start_form_tag ({:controller => 'issues', :action => 'edit', :id => @issue}, :method => "get" ) %>
46 <%= start_form_tag ({:controller => 'issues', :action => 'edit', :id => @issue}, :method => "get" ) %>
30 <%= submit_tag l(:button_edit) %>
47 <%= submit_tag l(:button_edit) %>
31 <%= end_form_tag %>
48 <%= end_form_tag %>
32 &nbsp;&nbsp;
49 &nbsp;&nbsp;
33 <% end %>
50 <% end %>
34
51
35 <% if authorize_for('issues', 'change_status') and @status_options and !@status_options.empty? %>
52 <% if authorize_for('issues', 'change_status') and @status_options and !@status_options.empty? %>
36 <%= start_form_tag ({:controller => 'issues', :action => 'change_status', :id => @issue}) %>
53 <%= start_form_tag ({:controller => 'issues', :action => 'change_status', :id => @issue}) %>
37 <%=l(:label_change_status)%> :
54 <%=l(:label_change_status)%> :
38 <select name="history[status_id]">
55 <select name="history[status_id]">
39 <%= options_from_collection_for_select @status_options, "id", "name" %>
56 <%= options_from_collection_for_select @status_options, "id", "name" %>
40 </select>
57 </select>
41 <%= submit_tag l(:button_change) %>
58 <%= submit_tag l(:button_change) %>
42 <%= end_form_tag %>
59 <%= end_form_tag %>
43 &nbsp;&nbsp;
60 &nbsp;&nbsp;
44 <% end %>
61 <% end %>
45
62
46 <% if authorize_for('projects', 'move_issues') %>
63 <% if authorize_for('projects', 'move_issues') %>
47 <%= start_form_tag ({:controller => 'projects', :action => 'move_issues', :id => @project} ) %>
64 <%= start_form_tag ({:controller => 'projects', :action => 'move_issues', :id => @project} ) %>
48 <%= hidden_field_tag "issue_ids[]", @issue.id %>
65 <%= hidden_field_tag "issue_ids[]", @issue.id %>
49 <%= submit_tag l(:button_move) %>
66 <%= submit_tag l(:button_move) %>
50 <%= end_form_tag %>
67 <%= end_form_tag %>
51 &nbsp;&nbsp;
68 &nbsp;&nbsp;
52 <% end %>
69 <% end %>
53
70
54 <% if authorize_for('issues', 'destroy') %>
71 <% if authorize_for('issues', 'destroy') %>
55 <%= start_form_tag ({:controller => 'issues', :action => 'destroy', :id => @issue} ) %>
72 <%= start_form_tag ({:controller => 'issues', :action => 'destroy', :id => @issue} ) %>
56 <%= submit_tag l(:button_delete) %>
73 <%= submit_tag l(:button_delete) %>
57 <%= end_form_tag %>
74 <%= end_form_tag %>
58 &nbsp;&nbsp;
75 &nbsp;&nbsp;
59 <% end %>
76 <% end %>
77 </p>
60 </div>
78 </div>
61
79
62 <% if authorize_for('issues', 'add_note') %>
80 <% if authorize_for('issues', 'add_note') %>
63 <div class="box">
81 <div class="box">
64 <h3><%= l(:label_add_note) %></h3>
82 <h3><%= l(:label_add_note) %></h3>
65 <%= start_form_tag ({:controller => 'issues', :action => 'add_note', :id => @issue}, :class => "tabular" ) %>
83 <%= start_form_tag ({:controller => 'issues', :action => 'add_note', :id => @issue}, :class => "tabular" ) %>
66 <p><label for="history_notes"><%=l(:field_notes)%></label>
84 <p><label for="history_notes"><%=l(:field_notes)%></label>
67 <%= text_area 'history', 'notes', :cols => 60, :rows => 10 %></p>
85 <%= text_area 'history', 'notes', :cols => 60, :rows => 10 %></p>
68 <%= submit_tag l(:button_add) %>
86 <%= submit_tag l(:button_add) %>
69 <%= end_form_tag %>
87 <%= end_form_tag %>
70 </div>
88 </div>
71 <% end %>
89 <% end %>
72
90
73 <div class="splitcontentleft">
91 <div class="splitcontentleft">
74 <div class="box">
92 <div class="box">
75 <h3><%=l(:label_history)%></h3>
93 <h3><%=l(:label_history)%></h3>
76 <table width="100%">
94 <table width="100%">
77 <% for history in @issue.histories.find(:all, :include => [:author, :status]) %>
95 <% for history in @issue.histories.find(:all, :include => [:author, :status]) %>
78 <tr>
96 <tr>
79 <td><%= format_date(history.created_on) %></td>
97 <td><%= format_date(history.created_on) %></td>
80 <td><%= history.author.display_name %></td>
98 <td><%= history.author.display_name %></td>
81 <td><b><%= history.status.name %></b></td>
99 <td><b><%= history.status.name %></b></td>
82 </tr>
100 </tr>
83 <% if history.notes? %>
101 <% if history.notes? %>
84 <tr><td colspan=3><%= simple_format auto_link history.notes %></td></tr>
102 <tr><td colspan=3><%= simple_format auto_link history.notes %></td></tr>
85 <% end %>
103 <% end %>
86 <% end %>
104 <% end %>
87 </table>
105 </table>
88 </div>
106 </div>
89 </div>
107 </div>
90
108
91 <div class="splitcontentright">
109 <div class="splitcontentright">
92 <div class="box">
110 <div class="box">
93 <h3><%=l(:label_attachment_plural)%></h3>
111 <h3><%=l(:label_attachment_plural)%></h3>
94 <table width="100%">
112 <table width="100%">
95 <% for attachment in @issue.attachments %>
113 <% for attachment in @issue.attachments %>
96 <tr>
114 <tr>
97 <td><%= link_to attachment.filename, :action => 'download', :id => @issue, :attachment_id => attachment %> (<%= human_size(attachment.filesize) %>)</td>
115 <td><%= link_to attachment.filename, :action => 'download', :id => @issue, :attachment_id => attachment %> (<%= human_size(attachment.filesize) %>)</td>
98 <td><%= format_date(attachment.created_on) %></td>
116 <td><%= format_date(attachment.created_on) %></td>
99 <td><%= attachment.author.display_name %></td>
117 <td><%= attachment.author.display_name %></td>
100 <% if authorize_for('issues', 'destroy_attachment') %>
118 <% if authorize_for('issues', 'destroy_attachment') %>
101 <td>
119 <td>
102 <%= start_form_tag :action => 'destroy_attachment', :id => @issue, :attachment_id => attachment %>
120 <%= start_form_tag :action => 'destroy_attachment', :id => @issue, :attachment_id => attachment %>
103 <%= submit_tag l(:button_delete), :class => "button-small" %>
121 <%= submit_tag l(:button_delete), :class => "button-small" %>
104 <%= end_form_tag %>
122 <%= end_form_tag %>
105 </td>
123 </td>
106 <% end %>
124 <% end %>
107 </tr>
125 </tr>
108 <% end %>
126 <% end %>
109 </table>
127 </table>
110 <br />
128 <br />
111 <% if authorize_for('issues', 'add_attachment') %>
129 <% if authorize_for('issues', 'add_attachment') %>
112 <%= start_form_tag ({ :controller => 'issues', :action => 'add_attachment', :id => @issue }, :multipart => true) %>
130 <%= start_form_tag ({ :controller => 'issues', :action => 'add_attachment', :id => @issue }, :multipart => true) %>
113 <%=l(:label_attachment_new)%>: <%= file_field 'attachment', 'file' %>
131 <%=l(:label_attachment_new)%>: <%= file_field 'attachment', 'file' %>
114 <%= submit_tag l(:button_add) %>
132 <%= submit_tag l(:button_add) %>
115 <%= end_form_tag %>
133 <%= end_form_tag %>
116 <% end %>
134 <% end %>
117 </div>
135 </div>
118 </div>
136 </div>
119
137
@@ -1,137 +1,140
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
3 <head>
3 <head>
4 <title><%= $RDM_HEADER_TITLE %></title>
4 <title><%= $RDM_HEADER_TITLE %></title>
5 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
5 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6 <meta name="description" content="redMine" />
6 <meta name="description" content="redMine" />
7 <meta name="keywords" content="issue,bug,tracker" />
7 <meta name="keywords" content="issue,bug,tracker" />
8 <%= stylesheet_link_tag "application" %>
8 <%= stylesheet_link_tag "application" %>
9 <%= stylesheet_link_tag "menu" %>
9 <%= stylesheet_link_tag "menu" %>
10 <%= stylesheet_link_tag "rails" %>
10 <%= stylesheet_link_tag "rails" %>
11 <%= javascript_include_tag :defaults %>
11 <%= javascript_include_tag :defaults %>
12 <%= javascript_include_tag 'menu' %>
12 <%= javascript_include_tag 'menu' %>
13 <%= javascript_include_tag 'calendar/calendar' %>
13 <%= javascript_include_tag 'calendar/calendar' %>
14 <%= javascript_include_tag "calendar/lang/calendar-#{current_language}.js" %>
14 <%= javascript_include_tag "calendar/lang/calendar-#{current_language}.js" %>
15 <%= javascript_include_tag 'calendar/calendar-setup' %>
15 <%= javascript_include_tag 'calendar/calendar-setup' %>
16 <%= stylesheet_link_tag 'calendar' %>
16 <%= stylesheet_link_tag 'calendar' %>
17 <%= stylesheet_link_tag 'jstoolbar' %>
17 <script type='text/javascript'>
18 <script type='text/javascript'>
18 var menu_contenu=' \
19 var menu_contenu=' \
19 <div id="menuAdmin" class="menu" onmouseover="menuMouseover(event)"> \
20 <div id="menuAdmin" class="menu" onmouseover="menuMouseover(event)"> \
20 <a class="menuItem" href="\/admin\/projects" onmouseover="menuItemMouseover(event,\'menuProjects\');"><span class="menuItemText"><%=l(:label_project_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
21 <a class="menuItem" href="\/admin\/projects" onmouseover="menuItemMouseover(event,\'menuProjects\');"><span class="menuItemText"><%=l(:label_project_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
21 <a class="menuItem" href="\/users" onmouseover="menuItemMouseover(event,\'menuUsers\');"><span class="menuItemText"><%=l(:label_user_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
22 <a class="menuItem" href="\/users" onmouseover="menuItemMouseover(event,\'menuUsers\');"><span class="menuItemText"><%=l(:label_user_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
22 <a class="menuItem" href="\/roles"><%=l(:label_role_and_permissions)%><\/a> \
23 <a class="menuItem" href="\/roles"><%=l(:label_role_and_permissions)%><\/a> \
23 <a class="menuItem" href="\/trackers" onmouseover="menuItemMouseover(event,\'menuTrackers\');"><span class="menuItemText"><%=l(:label_tracker_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
24 <a class="menuItem" href="\/trackers" onmouseover="menuItemMouseover(event,\'menuTrackers\');"><span class="menuItemText"><%=l(:label_tracker_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
24 <a class="menuItem" href="\/custom_fields"><%=l(:label_custom_field_plural)%><\/a> \
25 <a class="menuItem" href="\/custom_fields"><%=l(:label_custom_field_plural)%><\/a> \
25 <a class="menuItem" href="\/enumerations"><%=l(:label_enumerations)%><\/a> \
26 <a class="menuItem" href="\/enumerations"><%=l(:label_enumerations)%><\/a> \
26 <a class="menuItem" href="\/admin\/mail_options"><%=l(:field_mail_notification)%><\/a> \
27 <a class="menuItem" href="\/admin\/mail_options"><%=l(:field_mail_notification)%><\/a> \
27 <a class="menuItem" href="\/auth_sources"><%=l(:label_authentication)%><\/a> \
28 <a class="menuItem" href="\/auth_sources"><%=l(:label_authentication)%><\/a> \
28 <a class="menuItem" href="\/admin\/info"><%=l(:label_information_plural)%><\/a> \
29 <a class="menuItem" href="\/admin\/info"><%=l(:label_information_plural)%><\/a> \
29 <\/div> \
30 <\/div> \
30 <div id="menuTrackers" class="menu"> \
31 <div id="menuTrackers" class="menu"> \
31 <a class="menuItem" href="\/issue_statuses"><%=l(:label_issue_status_plural)%><\/a> \
32 <a class="menuItem" href="\/issue_statuses"><%=l(:label_issue_status_plural)%><\/a> \
32 <a class="menuItem" href="\/roles\/workflow"><%=l(:label_workflow)%><\/a> \
33 <a class="menuItem" href="\/roles\/workflow"><%=l(:label_workflow)%><\/a> \
33 <\/div> \
34 <\/div> \
34 <div id="menuProjects" class="menu"><a class="menuItem" href="\/projects\/add"><%=l(:label_new)%><\/a><\/div> \
35 <div id="menuProjects" class="menu"><a class="menuItem" href="\/projects\/add"><%=l(:label_new)%><\/a><\/div> \
35 <div id="menuUsers" class="menu"><a class="menuItem" href="\/users\/add"><%=l(:label_new)%><\/a><\/div> \
36 <div id="menuUsers" class="menu"><a class="menuItem" href="\/users\/add"><%=l(:label_new)%><\/a><\/div> \
36 \
37 \
37 <% unless @project.nil? || @project.id.nil? %> \
38 <% unless @project.nil? || @project.id.nil? %> \
38 <div id="menuProject" class="menu" onmouseover="menuMouseover(event)"> \
39 <div id="menuProject" class="menu" onmouseover="menuMouseover(event)"> \
39 <%= link_to l(:label_issue_plural), {:controller => 'projects', :action => 'list_issues', :id => @project }, :class => "menuItem" %> \
40 <%= link_to l(:label_issue_plural), {:controller => 'projects', :action => 'list_issues', :id => @project }, :class => "menuItem" %> \
40 <%= link_to l(:label_report_plural), {:controller => 'reports', :action => 'issue_report', :id => @project }, :class => "menuItem" %> \
41 <%= link_to l(:label_report_plural), {:controller => 'reports', :action => 'issue_report', :id => @project }, :class => "menuItem" %> \
42 <%= link_to l(:label_activity), {:controller => 'projects', :action => 'activity', :id => @project }, :class => "menuItem" %> \
41 <%= link_to l(:label_news_plural), {:controller => 'projects', :action => 'list_news', :id => @project }, :class => "menuItem" %> \
43 <%= link_to l(:label_news_plural), {:controller => 'projects', :action => 'list_news', :id => @project }, :class => "menuItem" %> \
42 <%= link_to l(:label_change_log), {:controller => 'projects', :action => 'changelog', :id => @project }, :class => "menuItem" %> \
44 <%= link_to l(:label_change_log), {:controller => 'projects', :action => 'changelog', :id => @project }, :class => "menuItem" %> \
43 <%= link_to l(:label_document_plural), {:controller => 'projects', :action => 'list_documents', :id => @project }, :class => "menuItem" %> \
45 <%= link_to l(:label_document_plural), {:controller => 'projects', :action => 'list_documents', :id => @project }, :class => "menuItem" %> \
44 <%= link_to l(:label_member_plural), {:controller => 'projects', :action => 'list_members', :id => @project }, :class => "menuItem" %> \
46 <%= link_to l(:label_member_plural), {:controller => 'projects', :action => 'list_members', :id => @project }, :class => "menuItem" %> \
45 <%= link_to l(:label_attachment_plural), {:controller => 'projects', :action => 'list_files', :id => @project }, :class => "menuItem" %> \
47 <%= link_to l(:label_attachment_plural), {:controller => 'projects', :action => 'list_files', :id => @project }, :class => "menuItem" %> \
46 <%= link_to_if_authorized l(:label_settings), {:controller => 'projects', :action => 'settings', :id => @project }, :class => "menuItem" %> \
48 <%= link_to_if_authorized l(:label_settings), {:controller => 'projects', :action => 'settings', :id => @project }, :class => "menuItem" %> \
47 <\/div> \
49 <\/div> \
48 <% end %> \
50 <% end %> \
49 ';
51 ';
50 </script>
52 </script>
51
53
52 </head>
54 </head>
53
55
54 <body>
56 <body>
55 <div id="container" >
57 <div id="container" >
56
58
57 <div id="header">
59 <div id="header">
58 <div style="float: left;">
60 <div style="float: left;">
59 <h1><%= $RDM_HEADER_TITLE %></h1>
61 <h1><%= $RDM_HEADER_TITLE %></h1>
60 <h2><%= $RDM_HEADER_SUBTITLE %></h2>
62 <h2><%= $RDM_HEADER_SUBTITLE %></h2>
61 </div>
63 </div>
62 <div style="float: right; padding-right: 1em; padding-top: 0.2em;">
64 <div style="float: right; padding-right: 1em; padding-top: 0.2em;">
63 <% if loggedin? %><small><%=l(:label_logged_as)%> <b><%= @logged_in_user.login %></b></small><% end %>
65 <% if loggedin? %><small><%=l(:label_logged_as)%> <b><%= @logged_in_user.login %></b></small><% end %>
64 </div>
66 </div>
65 </div>
67 </div>
66
68
67 <div id="navigation">
69 <div id="navigation">
68 <ul>
70 <ul>
69 <li class="selected"><%= link_to l(:label_home), { :controller => '' }, :class => "picHome" %></li>
71 <li class="selected"><%= link_to l(:label_home), { :controller => '' }, :class => "picHome" %></li>
70 <li><%= link_to l(:label_my_page), { :controller => 'account', :action => 'my_page'}, :class => "picUserPage" %></li>
72 <li><%= link_to l(:label_my_page), { :controller => 'account', :action => 'my_page'}, :class => "picUserPage" %></li>
71 <li><%= link_to l(:label_project_plural), { :controller => 'projects' }, :class => "picProject" %></li>
73 <li><%= link_to l(:label_project_plural), { :controller => 'projects' }, :class => "picProject" %></li>
72
74
73 <% unless @project.nil? || @project.id.nil? %>
75 <% unless @project.nil? || @project.id.nil? %>
74 <li><%= link_to @project.name, { :controller => 'projects', :action => 'show', :id => @project }, :class => "picProject", :onmouseover => "buttonMouseover(event, 'menuProject');" %></li>
76 <li><%= link_to @project.name, { :controller => 'projects', :action => 'show', :id => @project }, :class => "picProject", :onmouseover => "buttonMouseover(event, 'menuProject');" %></li>
75 <% end %>
77 <% end %>
76
78
77 <% if loggedin? %>
79 <% if loggedin? %>
78 <li><%= link_to l(:label_my_account), { :controller => 'account', :action => 'my_account' }, :class => "picUser" %></li>
80 <li><%= link_to l(:label_my_account), { :controller => 'account', :action => 'my_account' }, :class => "picUser" %></li>
79 <% end %>
81 <% end %>
80
82
81 <% if admin_loggedin? %>
83 <% if admin_loggedin? %>
82 <li><%= link_to l(:label_administration), { :controller => 'admin' }, :class => "picAdmin", :onmouseover => "buttonMouseover(event, 'menuAdmin');" %></li>
84 <li><%= link_to l(:label_administration), { :controller => 'admin' }, :class => "picAdmin", :onmouseover => "buttonMouseover(event, 'menuAdmin');" %></li>
83 <% end %>
85 <% end %>
84
86
85 <li class="right"><%= link_to l(:label_help), { :controller => 'help', :ctrl => @params[:controller], :page => @params[:action] }, :target => "new", :class => "picHelp" %></li>
87 <li class="right"><%= link_to l(:label_help), { :controller => 'help', :ctrl => @params[:controller], :page => @params[:action] }, :target => "new", :class => "picHelp" %></li>
86
88
87 <% if loggedin? %>
89 <% if loggedin? %>
88 <li class="right"><%= link_to l(:label_logout), { :controller => 'account', :action => 'logout' }, :class => "picUser" %></li>
90 <li class="right"><%= link_to l(:label_logout), { :controller => 'account', :action => 'logout' }, :class => "picUser" %></li>
89 <% else %>
91 <% else %>
90 <li class="right"><%= link_to l(:label_login), { :controller => 'account', :action => 'login' }, :class => "picUser" %></li>
92 <li class="right"><%= link_to l(:label_login), { :controller => 'account', :action => 'login' }, :class => "picUser" %></li>
91 <% end %>
93 <% end %>
92 </ul>
94 </ul>
93 </div>
95 </div>
94 <script type='text/javascript'>if(document.getElementById) {document.write(menu_contenu);}</script>
96 <script type='text/javascript'>if(document.getElementById) {document.write(menu_contenu);}</script>
95
97
96 <div id="subcontent">
98 <div id="subcontent">
97
99
98 <% unless @project.nil? || @project.id.nil? %>
100 <% unless @project.nil? || @project.id.nil? %>
99 <h2><%= @project.name %></h2>
101 <h2><%= @project.name %></h2>
100 <ul class="menublock">
102 <ul class="menublock">
101 <li><%= link_to l(:label_overview), :controller => 'projects', :action => 'show', :id => @project %></li>
103 <li><%= link_to l(:label_overview), :controller => 'projects', :action => 'show', :id => @project %></li>
102 <li><%= link_to l(:label_issue_plural), :controller => 'projects', :action => 'list_issues', :id => @project %></li>
104 <li><%= link_to l(:label_issue_plural), :controller => 'projects', :action => 'list_issues', :id => @project %></li>
103 <li><%= link_to l(:label_report_plural), :controller => 'reports', :action => 'issue_report', :id => @project %></li>
105 <li><%= link_to l(:label_report_plural), :controller => 'reports', :action => 'issue_report', :id => @project %></li>
106 <li><%= link_to l(:label_activity), :controller => 'projects', :action => 'activity', :id => @project %></li>
104 <li><%= link_to l(:label_news_plural), :controller => 'projects', :action => 'list_news', :id => @project %></li>
107 <li><%= link_to l(:label_news_plural), :controller => 'projects', :action => 'list_news', :id => @project %></li>
105 <li><%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %></li>
108 <li><%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %></li>
106 <li><%= link_to l(:label_document_plural), :controller => 'projects', :action => 'list_documents', :id => @project %></li>
109 <li><%= link_to l(:label_document_plural), :controller => 'projects', :action => 'list_documents', :id => @project %></li>
107 <li><%= link_to l(:label_member_plural), :controller => 'projects', :action => 'list_members', :id => @project %></li>
110 <li><%= link_to l(:label_member_plural), :controller => 'projects', :action => 'list_members', :id => @project %></li>
108 <li><%= link_to l(:label_attachment_plural), :controller => 'projects', :action => 'list_files', :id => @project %></li>
111 <li><%= link_to l(:label_attachment_plural), :controller => 'projects', :action => 'list_files', :id => @project %></li>
109 <li><%= link_to_if_authorized l(:label_settings), :controller => 'projects', :action => 'settings', :id => @project %></li>
112 <li><%= link_to_if_authorized l(:label_settings), :controller => 'projects', :action => 'settings', :id => @project %></li>
110 </ul>
113 </ul>
111 <% end %>
114 <% end %>
112
115
113 <% if loggedin? and @logged_in_user.memberships.length > 0 %>
116 <% if loggedin? and @logged_in_user.memberships.length > 0 %>
114 <h2><%=l(:label_my_projects) %></h2>
117 <h2><%=l(:label_my_projects) %></h2>
115 <ul class="menublock">
118 <ul class="menublock">
116 <% for membership in @logged_in_user.memberships %>
119 <% for membership in @logged_in_user.memberships %>
117 <li><%= link_to membership.project.name, :controller => 'projects', :action => 'show', :id => membership.project %></li>
120 <li><%= link_to membership.project.name, :controller => 'projects', :action => 'show', :id => membership.project %></li>
118 <% end %>
121 <% end %>
119 </ul>
122 </ul>
120 <% end %>
123 <% end %>
121 </div>
124 </div>
122
125
123 <div id="content">
126 <div id="content">
124 <% if flash[:notice] %><p style="color: green"><%= flash[:notice] %></p><% end %>
127 <% if flash[:notice] %><p style="color: green"><%= flash[:notice] %></p><% end %>
125 <%= @content_for_layout %>
128 <%= @content_for_layout %>
126 </div>
129 </div>
127
130
128 <div id="footer">
131 <div id="footer">
129 <p>
132 <p>
130 <%= auto_link $RDM_FOOTER_SIG %> |
133 <%= auto_link $RDM_FOOTER_SIG %> |
131 <a href="http://redmine.org/" target="_new"><%= RDM_APP_NAME %></a> <%= RDM_APP_VERSION %>
134 <a href="http://redmine.org/" target="_new"><%= RDM_APP_NAME %></a> <%= RDM_APP_VERSION %>
132 </p>
135 </p>
133 </div>
136 </div>
134
137
135 </div>
138 </div>
136 </body>
139 </body>
137 </html> No newline at end of file
140 </html>
@@ -1,25 +1,27
1 <h2><%=l(:label_change_log)%></h2>
1 <h2><%=l(:label_change_log)%></h2>
2
2
3 <div>
4
5 <div class="rightbox" style="width:140px;">
3 <%= start_form_tag %>
6 <%= start_form_tag %>
7 <strong><%=l(:label_tracker_plural)%></strong><br />
4 <% @trackers.each do |tracker| %>
8 <% @trackers.each do |tracker| %>
5 <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %>
9 <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %>
6 <%= tracker.name %>
10 <%= tracker.name %><br />
7 <% end %>
11 <% end %>
8 &nbsp;&nbsp;<%= submit_tag l(:button_apply), :class => 'button-small' %>
12 <p><center><%= submit_tag l(:button_apply), :class => 'button-small' %></center></p>
9 <%= end_form_tag %><br />
13 <%= end_form_tag %>
10 &nbsp;
14 </div>
11
15
12 <div class="box">
13 <% ver_id = nil
16 <% ver_id = nil
14 @fixed_issues.each do |issue| %>
17 @fixed_issues.each do |issue| %>
15 <% unless ver_id == issue.fixed_version_id %>
18 <% unless ver_id == issue.fixed_version_id %>
16 <% if ver_id %></ul><% end %>
19 <% if ver_id %></ul><% end %>
17 <p><strong><%= issue.fixed_version.name %></strong> - <%= format_date(issue.fixed_version.effective_date) %><br />
20 <p><strong><%= issue.fixed_version.name %></strong> - <%= format_date(issue.fixed_version.effective_date) %><br />
18 <%=h issue.fixed_version.description %></p>
21 <%=h issue.fixed_version.description %></p>
19 <ul>
22 <ul>
20 <% ver_id = issue.fixed_version_id
23 <% ver_id = issue.fixed_version_id
21 end %>
24 end %>
22 <li><%= link_to issue.long_id, :controller => 'issues', :action => 'show', :id => issue %> [<%= issue.tracker.name %>]: <%= issue.subject %></li>
25 <li><%= link_to issue.long_id, :controller => 'issues', :action => 'show', :id => issue %> [<%= issue.tracker.name %>]: <%= issue.subject %></li>
23 <% end %>
26 <% end %>
24
25 </div> No newline at end of file
27 </div>
@@ -1,57 +1,60
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
18
19 # To set your own configuration, rename this file to config_custom.rb
19 # To set your own configuration, rename this file to config_custom.rb
20 # and edit parameters below
20 # and edit parameters below
21 # Don't forget to restart the application after any change.
21 # Don't forget to restart the application after any change.
22
22
23
23
24 # Application host name
24 # Application host name
25 # Used to provide absolute links in mail notifications
25 # Used to provide absolute links in mail notifications
26 # $RDM_HOST_NAME = "somenet.foo"
26 # $RDM_HOST_NAME = "somenet.foo"
27
27
28 # File storage path
28 # File storage path
29 # Directory used to store uploaded files
29 # Directory used to store uploaded files
30 # #{RAILS_ROOT} represents application's home directory
30 # #{RAILS_ROOT} represents application's home directory
31 # $RDM_STORAGE_PATH = "#{RAILS_ROOT}/files"
31 # $RDM_STORAGE_PATH = "#{RAILS_ROOT}/files"
32
32
33 # Set $RDM_LOGIN_REQUIRED to true if you want to force users to login
33 # Set $RDM_LOGIN_REQUIRED to true if you want to force users to login
34 # to access any page of the application
34 # to access any page of the application
35 # $RDM_LOGIN_REQUIRED = false
35 # $RDM_LOGIN_REQUIRED = false
36
36
37 # Uncomment to disable user self-registration
37 # Uncomment to disable user self-registration
38 # $RDM_SELF_REGISTRATION = false
38 # $RDM_SELF_REGISTRATION = false
39
39
40 # Default langage ('en', 'es', 'fr' are available)
40 # Default langage ('en', 'es', 'fr' are available)
41 # $RDM_DEFAULT_LANG = 'en'
41 # $RDM_DEFAULT_LANG = 'en'
42
42
43 # Email adress used to send mail notifications
44 # $RDM_MAIL_FROM = "redmine@somenet.foo"
45
43 # Page title
46 # Page title
44 # $RDM_HEADER_TITLE = "Title"
47 # $RDM_HEADER_TITLE = "Title"
45
48
46 # Page sub-title
49 # Page sub-title
47 # $RDM_HEADER_SUBTITLE = "Sub title"
50 # $RDM_HEADER_SUBTITLE = "Sub title"
48
51
49 # Welcome page title
52 # Welcome page title
50 # $RDM_WELCOME_TITLE = "Welcome"
53 # $RDM_WELCOME_TITLE = "Welcome"
51
54
52 # Welcome page text
55 # Welcome page text
53 # $RDM_WELCOME_TEXT = ""
56 # $RDM_WELCOME_TEXT = ""
54
57
55 # Signature displayed in footer
58 # Signature displayed in footer
56 # Email adresses will be automatically displayed as a mailto link
59 # Email adresses will be automatically displayed as a mailto link
57 # $RDM_FOOTER_SIG = "admin@somenet.foo"
60 # $RDM_FOOTER_SIG = "admin@somenet.foo"
@@ -1,134 +1,136
1 # Be sure to restart your web server when you modify this file.
1 # Be sure to restart your web server when you modify this file.
2
2
3 # Uncomment below to force Rails into production mode when
3 # Uncomment below to force Rails into production mode when
4 # you don't control web/app server and can't set it the proper way
4 # you don't control web/app server and can't set it the proper way
5 # ENV['RAILS_ENV'] ||= 'production'
5 # ENV['RAILS_ENV'] ||= 'production'
6
6
7 # Bootstrap the Rails environment, frameworks, and default configuration
7 # Bootstrap the Rails environment, frameworks, and default configuration
8 require File.join(File.dirname(__FILE__), 'boot')
8 require File.join(File.dirname(__FILE__), 'boot')
9
9
10 Rails::Initializer.run do |config|
10 Rails::Initializer.run do |config|
11 # Settings in config/environments/* take precedence those specified here
11 # Settings in config/environments/* take precedence those specified here
12
12
13 # Skip frameworks you're not going to use
13 # Skip frameworks you're not going to use
14 # config.frameworks -= [ :action_web_service, :action_mailer ]
14 # config.frameworks -= [ :action_web_service, :action_mailer ]
15
15
16 # Add additional load paths for your own custom dirs
16 # Add additional load paths for your own custom dirs
17 # config.load_paths += %W( #{RAILS_ROOT}/extras )
17 # config.load_paths += %W( #{RAILS_ROOT}/extras )
18
18
19 # Force all environments to use the same logger level
19 # Force all environments to use the same logger level
20 # (by default production uses :info, the others :debug)
20 # (by default production uses :info, the others :debug)
21 # config.log_level = :debug
21 # config.log_level = :debug
22
22
23 # Use the database for sessions instead of the file system
23 # Use the database for sessions instead of the file system
24 # (create the session table with 'rake create_sessions_table')
24 # (create the session table with 'rake create_sessions_table')
25 # config.action_controller.session_store = :active_record_store
25 # config.action_controller.session_store = :active_record_store
26
26
27 # Enable page/fragment caching by setting a file-based store
27 # Enable page/fragment caching by setting a file-based store
28 # (remember to create the caching directory and make it readable to the application)
28 # (remember to create the caching directory and make it readable to the application)
29 # config.action_controller.fragment_cache_store = :file_store, "#{RAILS_ROOT}/cache"
29 # config.action_controller.fragment_cache_store = :file_store, "#{RAILS_ROOT}/cache"
30
30
31 # Activate observers that should always be running
31 # Activate observers that should always be running
32 # config.active_record.observers = :cacher, :garbage_collector
32 # config.active_record.observers = :cacher, :garbage_collector
33
33
34 # Make Active Record use UTC-base instead of local time
34 # Make Active Record use UTC-base instead of local time
35 # config.active_record.default_timezone = :utc
35 # config.active_record.default_timezone = :utc
36
36
37 # Use Active Record's schema dumper instead of SQL when creating the test database
37 # Use Active Record's schema dumper instead of SQL when creating the test database
38 # (enables use of different database adapters for development and test environments)
38 # (enables use of different database adapters for development and test environments)
39 # config.active_record.schema_format = :ruby
39 # config.active_record.schema_format = :ruby
40
40
41 # See Rails::Configuration for more options
41 # See Rails::Configuration for more options
42
42
43 # SMTP server configuration
43 # SMTP server configuration
44 config.action_mailer.server_settings = {
44 config.action_mailer.server_settings = {
45 :address => "127.0.0.1",
45 :address => "127.0.0.1",
46 :port => 25,
46 :port => 25,
47 :domain => "somenet.foo",
47 :domain => "somenet.foo",
48 :authentication => :login,
48 :authentication => :login,
49 :user_name => "redmine",
49 :user_name => "redmine",
50 :password => "redmine",
50 :password => "redmine",
51 }
51 }
52
52
53 config.action_mailer.perform_deliveries = true
53 config.action_mailer.perform_deliveries = true
54
54
55 # Tell ActionMailer not to deliver emails to the real world.
55 # Tell ActionMailer not to deliver emails to the real world.
56 # The :test delivery method accumulates sent emails in the
56 # The :test delivery method accumulates sent emails in the
57 # ActionMailer::Base.deliveries array.
57 # ActionMailer::Base.deliveries array.
58 #config.action_mailer.delivery_method = :test
58 #config.action_mailer.delivery_method = :test
59 config.action_mailer.delivery_method = :smtp
59 config.action_mailer.delivery_method = :smtp
60 end
60 end
61
61
62 # Add new inflection rules using the following format
62 # Add new inflection rules using the following format
63 # (all these examples are active by default):
63 # (all these examples are active by default):
64 # Inflector.inflections do |inflect|
64 # Inflector.inflections do |inflect|
65 # inflect.plural /^(ox)$/i, '\1en'
65 # inflect.plural /^(ox)$/i, '\1en'
66 # inflect.singular /^(ox)en/i, '\1'
66 # inflect.singular /^(ox)en/i, '\1'
67 # inflect.irregular 'person', 'people'
67 # inflect.irregular 'person', 'people'
68 # inflect.uncountable %w( fish sheep )
68 # inflect.uncountable %w( fish sheep )
69 # end
69 # end
70
70
71 if File.exist? File.join(File.dirname(__FILE__), 'config_custom.rb')
71 if File.exist? File.join(File.dirname(__FILE__), 'config_custom.rb')
72 begin
72 begin
73 print "=> Loading config_custom.rb... "
73 print "=> Loading config_custom.rb... "
74 require File.join(File.dirname(__FILE__), 'config_custom')
74 require File.join(File.dirname(__FILE__), 'config_custom')
75 puts "done."
75 puts "done."
76 rescue Exception => detail
76 rescue Exception => detail
77 puts
77 puts
78 puts detail
78 puts detail
79 puts detail.backtrace.join("\n")
79 puts detail.backtrace.join("\n")
80 puts "=> Error in config_custom.rb. Check your configuration."
80 puts "=> Error in config_custom.rb. Check your configuration."
81 exit
81 exit
82 end
82 end
83 end
83 end
84
84
85 # IMPORTANT !!! DO NOT MODIFY PARAMETERS HERE
85 # IMPORTANT !!! DO NOT MODIFY PARAMETERS HERE
86 # Instead, rename config_custom.example.rb to config_custom.rb
86 # Instead, rename config_custom.example.rb to config_custom.rb
87 # and set your own configuration in that file
87 # and set your own configuration in that file
88 # Parameters defined in config_custom.rb override those defined below
88 # Parameters defined in config_custom.rb override those defined below
89
89
90 # application host name
90 # application host name
91 $RDM_HOST_NAME ||= "localhost:3000"
91 $RDM_HOST_NAME ||= "localhost:3000"
92 # file storage path
92 # file storage path
93 $RDM_STORAGE_PATH ||= "#{RAILS_ROOT}/files"
93 $RDM_STORAGE_PATH ||= "#{RAILS_ROOT}/files"
94 # if RDM_LOGIN_REQUIRED is set to true, login is required to access the application
94 # if RDM_LOGIN_REQUIRED is set to true, login is required to access the application
95 $RDM_LOGIN_REQUIRED ||= false
95 $RDM_LOGIN_REQUIRED ||= false
96 # default langage
96 # default langage
97 $RDM_DEFAULT_LANG ||= 'en'
97 $RDM_DEFAULT_LANG ||= 'en'
98 # email sender adress
99 $RDM_MAIL_FROM ||= "redmine@somenet.foo"
98
100
99 # page title
101 # page title
100 $RDM_HEADER_TITLE ||= "redMine"
102 $RDM_HEADER_TITLE ||= "redMine"
101 # page sub-title
103 # page sub-title
102 $RDM_HEADER_SUBTITLE ||= "Project management"
104 $RDM_HEADER_SUBTITLE ||= "Project management"
103 # footer signature
105 # footer signature
104 $RDM_FOOTER_SIG = "admin@somenet.foo"
106 $RDM_FOOTER_SIG = "admin@somenet.foo"
105
107
106 # application name
108 # application name
107 RDM_APP_NAME = "redMine"
109 RDM_APP_NAME = "redMine"
108 # application version
110 # application version
109 RDM_APP_VERSION = "0.3.0"
111 RDM_APP_VERSION = "0.3.0"
110
112
111 ActiveRecord::Errors.default_error_messages = {
113 ActiveRecord::Errors.default_error_messages = {
112 :inclusion => "activerecord_error_inclusion",
114 :inclusion => "activerecord_error_inclusion",
113 :exclusion => "activerecord_error_exclusion",
115 :exclusion => "activerecord_error_exclusion",
114 :invalid => "activerecord_error_invalid",
116 :invalid => "activerecord_error_invalid",
115 :confirmation => "activerecord_error_confirmation",
117 :confirmation => "activerecord_error_confirmation",
116 :accepted => "activerecord_error_accepted",
118 :accepted => "activerecord_error_accepted",
117 :empty => "activerecord_error_empty",
119 :empty => "activerecord_error_empty",
118 :blank => "activerecord_error_blank",
120 :blank => "activerecord_error_blank",
119 :too_long => "activerecord_error_too_long",
121 :too_long => "activerecord_error_too_long",
120 :too_short => "activerecord_error_too_short",
122 :too_short => "activerecord_error_too_short",
121 :wrong_length => "activerecord_error_wrong_length",
123 :wrong_length => "activerecord_error_wrong_length",
122 :taken => "activerecord_error_taken",
124 :taken => "activerecord_error_taken",
123 :not_a_number => "activerecord_error_not_a_number"
125 :not_a_number => "activerecord_error_not_a_number"
124 }
126 }
125
127
126 ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance| "#{html_tag}" }
128 ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance| "#{html_tag}" }
127
129
128 GLoc.set_config :default_language => $RDM_DEFAULT_LANG
130 GLoc.set_config :default_language => $RDM_DEFAULT_LANG
129 GLoc.clear_strings
131 GLoc.clear_strings
130 GLoc.set_kcode
132 GLoc.set_kcode
131 GLoc.load_localized_strings
133 GLoc.load_localized_strings
132 GLoc.set_config(:raise_string_not_found_errors => false)
134 GLoc.set_config(:raise_string_not_found_errors => false)
133
135
134
136
@@ -1,9 +1,9
1 class IssueMove < ActiveRecord::Migration
1 class IssueMove < ActiveRecord::Migration
2 def self.up
2 def self.up
3 Permission.create :controller => "projects", :action => "move_issues", :description => "button_move", :sort => 1061, :mail_option => 1, :mail_enabled => 0
3 Permission.create :controller => "projects", :action => "move_issues", :description => "button_move", :sort => 1061, :mail_option => 0, :mail_enabled => 0
4 end
4 end
5
5
6 def self.down
6 def self.down
7 Permission.find(:first, :conditions => ["controller=? and action=?", 'projects', 'move_issues']).destroy
7 Permission.find(:first, :conditions => ["controller=? and action=?", 'projects', 'move_issues']).destroy
8 end
8 end
9 end
9 end
@@ -1,299 +1,302
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2
2
3 actionview_datehelper_select_day_prefix:
3 actionview_datehelper_select_day_prefix:
4 actionview_datehelper_select_month_names: January,February,March,April,May,June,July,August,September,October,November,December
4 actionview_datehelper_select_month_names: January,February,March,April,May,June,July,August,September,October,November,December
5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
6 actionview_datehelper_select_month_prefix:
6 actionview_datehelper_select_month_prefix:
7 actionview_datehelper_select_year_prefix:
7 actionview_datehelper_select_year_prefix:
8 actionview_datehelper_time_in_words_day: 1 day
8 actionview_datehelper_time_in_words_day: 1 day
9 actionview_datehelper_time_in_words_day_plural: %d days
9 actionview_datehelper_time_in_words_day_plural: %d days
10 actionview_datehelper_time_in_words_hour_about: about an hour
10 actionview_datehelper_time_in_words_hour_about: about an hour
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
13 actionview_datehelper_time_in_words_minute: 1 minute
13 actionview_datehelper_time_in_words_minute: 1 minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
17 actionview_datehelper_time_in_words_minute_single: 1 minute
17 actionview_datehelper_time_in_words_minute_single: 1 minute
18 actionview_datehelper_time_in_words_second_less_than: less than a second
18 actionview_datehelper_time_in_words_second_less_than: less than a second
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
20 actionview_instancetag_blank_option: Bitte auserwählt
20 actionview_instancetag_blank_option: Bitte auserwählt
21
21
22 activerecord_error_inclusion: ist nicht in der Liste eingeschlossen
22 activerecord_error_inclusion: ist nicht in der Liste eingeschlossen
23 activerecord_error_exclusion: ist reserviert
23 activerecord_error_exclusion: ist reserviert
24 activerecord_error_invalid: ist unzulässig
24 activerecord_error_invalid: ist unzulässig
25 activerecord_error_confirmation: bringt nicht Bestätigung zusammen
25 activerecord_error_confirmation: bringt nicht Bestätigung zusammen
26 activerecord_error_accepted: muß angenommen werden
26 activerecord_error_accepted: muß angenommen werden
27 activerecord_error_empty: kann nicht leer sein
27 activerecord_error_empty: kann nicht leer sein
28 activerecord_error_blank: kann nicht leer sein
28 activerecord_error_blank: kann nicht leer sein
29 activerecord_error_too_long: ist zu lang
29 activerecord_error_too_long: ist zu lang
30 activerecord_error_too_short: ist zu kurz
30 activerecord_error_too_short: ist zu kurz
31 activerecord_error_wrong_length: ist die falsche Länge
31 activerecord_error_wrong_length: ist die falsche Länge
32 activerecord_error_taken: ist bereits genommen worden
32 activerecord_error_taken: ist bereits genommen worden
33 activerecord_error_not_a_number: ist nicht eine Zahl
33 activerecord_error_not_a_number: ist nicht eine Zahl
34 #activerecord_error_not_a_date: is not a valid date
34 #activerecord_error_not_a_date: is not a valid date
35
35
36 general_fmt_age: %d yr
36 general_fmt_age: %d yr
37 general_fmt_age_plural: %d yrs
37 general_fmt_age_plural: %d yrs
38 general_fmt_date: %%b %%d, %%Y (%%a)
38 general_fmt_date: %%b %%d, %%Y (%%a)
39 general_fmt_datetime: %%b %%d, %%Y (%%a), %%I:%%M %%p
39 general_fmt_datetime: %%b %%d, %%Y (%%a), %%I:%%M %%p
40 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
40 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
41 general_fmt_time: %%I:%%M %%p
41 general_fmt_time: %%I:%%M %%p
42 general_text_No: 'Nein'
42 general_text_No: 'Nein'
43 general_text_Yes: 'Ja'
43 general_text_Yes: 'Ja'
44 general_text_no: 'nein'
44 general_text_no: 'nein'
45 general_text_yes: 'ja'
45 general_text_yes: 'ja'
46 general_lang_de: 'Deutsch'
46 general_lang_de: 'Deutsch'
47 general_csv_separator: ';'
47 general_csv_separator: ';'
48
48
49 notice_account_updated: Konto wurde erfolgreich aktualisiert.
49 notice_account_updated: Konto wurde erfolgreich aktualisiert.
50 notice_account_invalid_creditentials: Unzulässiger Benutzer oder Passwort
50 notice_account_invalid_creditentials: Unzulässiger Benutzer oder Passwort
51 notice_account_password_updated: Passwort wurde erfolgreich aktualisiert.
51 notice_account_password_updated: Passwort wurde erfolgreich aktualisiert.
52 notice_account_wrong_password: Falsches Passwort
52 notice_account_wrong_password: Falsches Passwort
53 notice_account_register_done: Konto wurde erfolgreich verursacht.
53 notice_account_register_done: Konto wurde erfolgreich verursacht.
54 notice_account_unknown_email: Unbekannter Benutzer.
54 notice_account_unknown_email: Unbekannter Benutzer.
55 notice_can_t_change_password: Dieses Konto verwendet eine externe Authentisierung Quelle. Unmöglich, das Kennwort zu ändern.
55 notice_can_t_change_password: Dieses Konto verwendet eine externe Authentisierung Quelle. Unmöglich, das Kennwort zu ändern.
56 notice_account_lost_email_sent: Ein email mit Anweisungen, ein neues Kennwort zu wählen ist dir geschickt worden.
56 notice_account_lost_email_sent: Ein email mit Anweisungen, ein neues Kennwort zu wählen ist dir geschickt worden.
57 notice_account_activated: Dein Konto ist aktiviert worden. Du kannst jetzt einloggen.
57 notice_account_activated: Dein Konto ist aktiviert worden. Du kannst jetzt einloggen.
58 notice_successful_create: Erfolgreiche Kreation.
58 notice_successful_create: Erfolgreiche Kreation.
59 notice_successful_update: Erfolgreiches Update.
59 notice_successful_update: Erfolgreiches Update.
60 notice_successful_delete: Erfolgreiche Auslassung.
60 notice_successful_delete: Erfolgreiche Auslassung.
61 notice_successful_connection: Erfolgreicher Anschluß.
61 notice_successful_connection: Erfolgreicher Anschluß.
62 notice_file_not_found: Erbetene Akte besteht nicht oder ist gelöscht worden.
62 notice_file_not_found: Erbetene Akte besteht nicht oder ist gelöscht worden.
63 notice_locking_conflict: Data have been updated by another user.
63 notice_locking_conflict: Data have been updated by another user.
64
64
65 #mail_subject_lost_password: Your redMine password
66 #mail_subject_register: redMine account activation
67
65 gui_validation_error: 1 Störung
68 gui_validation_error: 1 Störung
66 gui_validation_error_plural: %d Störungen
69 gui_validation_error_plural: %d Störungen
67
70
68 field_name: Name
71 field_name: Name
69 field_description: Beschreibung
72 field_description: Beschreibung
70 field_summary: Zusammenfassung
73 field_summary: Zusammenfassung
71 field_is_required: Erforderlich
74 field_is_required: Erforderlich
72 field_firstname: Vorname
75 field_firstname: Vorname
73 field_lastname: Nachname
76 field_lastname: Nachname
74 field_mail: Email
77 field_mail: Email
75 field_filename: Datei
78 field_filename: Datei
76 field_filesize: Grootte
79 field_filesize: Grootte
77 field_downloads: Downloads
80 field_downloads: Downloads
78 field_author: Autor
81 field_author: Autor
79 field_created_on: Angelegt
82 field_created_on: Angelegt
80 field_updated_on: aktualisiert
83 field_updated_on: aktualisiert
81 field_field_format: Format
84 field_field_format: Format
82 field_is_for_all: Für alle Projekte
85 field_is_for_all: Für alle Projekte
83 field_possible_values: Mögliche Werte
86 field_possible_values: Mögliche Werte
84 field_regexp: Regulärer Ausdruck
87 field_regexp: Regulärer Ausdruck
85 field_min_length: Minimale Länge
88 field_min_length: Minimale Länge
86 field_max_length: Maximale Länge
89 field_max_length: Maximale Länge
87 field_value: Wert
90 field_value: Wert
88 field_category: Kategorie
91 field_category: Kategorie
89 field_title: Títel
92 field_title: Títel
90 field_project: Projekt
93 field_project: Projekt
91 #field_issue: Issue
94 #field_issue: Issue
92 field_status: Status
95 field_status: Status
93 field_notes: Anmerkungen
96 field_notes: Anmerkungen
94 field_is_closed: Problem erledigt
97 field_is_closed: Problem erledigt
95 #field_is_default: Default status
98 #field_is_default: Default status
96 field_html_color: Farbe
99 field_html_color: Farbe
97 field_tracker: Tracker
100 field_tracker: Tracker
98 field_subject: Thema
101 field_subject: Thema
99 #field_due_date: Due date
102 #field_due_date: Due date
100 field_assigned_to: Zugewiesen an
103 field_assigned_to: Zugewiesen an
101 field_priority: Priorität
104 field_priority: Priorität
102 field_fixed_version: Erledigt in Version
105 field_fixed_version: Erledigt in Version
103 field_user: Benutzer
106 field_user: Benutzer
104 field_role: Rolle
107 field_role: Rolle
105 field_homepage: Startseite
108 field_homepage: Startseite
106 field_is_public: Öffentlich
109 field_is_public: Öffentlich
107 #field_parent: Subprojekt von
110 #field_parent: Subprojekt von
108 field_is_in_chlog: Ansicht der Issues in der Historie
111 field_is_in_chlog: Ansicht der Issues in der Historie
109 field_login: Mitgliedsname
112 field_login: Mitgliedsname
110 field_mail_notification: Mailbenachrichtigung
113 field_mail_notification: Mailbenachrichtigung
111 #field_admin: Administrator
114 #field_admin: Administrator
112 field_locked: Gesperrt
115 field_locked: Gesperrt
113 field_last_login_on: Letzte Anmeldung
116 field_last_login_on: Letzte Anmeldung
114 field_language: Sprache
117 field_language: Sprache
115 field_effective_date: Datum
118 field_effective_date: Datum
116 field_password: Passwort
119 field_password: Passwort
117 field_new_password: Neues Passwort
120 field_new_password: Neues Passwort
118 field_password_confirmation: Bestätigung
121 field_password_confirmation: Bestätigung
119 field_version: Version
122 field_version: Version
120 field_type: Typ
123 field_type: Typ
121 field_host: Host
124 field_host: Host
122 #field_port: Port
125 #field_port: Port
123 #field_account: Account
126 #field_account: Account
124 #field_base_dn: Base DN
127 #field_base_dn: Base DN
125 #field_attr_login: Login attribute
128 #field_attr_login: Login attribute
126 #field_attr_firstname: Firstname attribute
129 #field_attr_firstname: Firstname attribute
127 #field_attr_lastname: Lastname attribute
130 #field_attr_lastname: Lastname attribute
128 #field_attr_mail: Email attribute
131 #field_attr_mail: Email attribute
129 #field_onthefly: On-the-fly user creation
132 #field_onthefly: On-the-fly user creation
130
133
131 label_user: Benutzer
134 label_user: Benutzer
132 label_user_plural: Benutzer
135 label_user_plural: Benutzer
133 label_user_new: Neuer Benutzer
136 label_user_new: Neuer Benutzer
134 label_project: Projekt
137 label_project: Projekt
135 label_project_new: Neues Projekt
138 label_project_new: Neues Projekt
136 label_project_plural: Projekte
139 label_project_plural: Projekte
137 #label_project_latest: Latest projects
140 #label_project_latest: Latest projects
138 #label_issue: Issue
141 #label_issue: Issue
139 #label_issue_new: New issue
142 #label_issue_new: New issue
140 #label_issue_plural: Issues
143 #label_issue_plural: Issues
141 #label_issue_view_all: View all issues
144 #label_issue_view_all: View all issues
142 label_document: Dokument
145 label_document: Dokument
143 label_document_new: Neues Dokument
146 label_document_new: Neues Dokument
144 label_document_plural: Dokumente
147 label_document_plural: Dokumente
145 label_role: Rolle
148 label_role: Rolle
146 label_role_plural: Rollen
149 label_role_plural: Rollen
147 label_role_new: Neue Rolle
150 label_role_new: Neue Rolle
148 label_role_and_permissions: Rollen und Rechte
151 label_role_and_permissions: Rollen und Rechte
149 label_member: Mitglied
152 label_member: Mitglied
150 label_member_new: Neues Mitglied
153 label_member_new: Neues Mitglied
151 label_member_plural: Mitglieder
154 label_member_plural: Mitglieder
152 label_tracker: Tracker
155 label_tracker: Tracker
153 label_tracker_plural: Tracker
156 label_tracker_plural: Tracker
154 label_tracker_new: Neuer Tracker
157 label_tracker_new: Neuer Tracker
155 label_workflow: Workflow
158 label_workflow: Workflow
156 label_issue_status: Problem Status
159 label_issue_status: Problem Status
157 label_issue_status_plural: Problem Stati
160 label_issue_status_plural: Problem Stati
158 label_issue_status_new: Neuer Status
161 label_issue_status_new: Neuer Status
159 label_issue_category: Problem Kategorie
162 label_issue_category: Problem Kategorie
160 label_issue_category_plural: Problem Kategorien
163 label_issue_category_plural: Problem Kategorien
161 label_issue_category_new: Neue Kategorie
164 label_issue_category_new: Neue Kategorie
162 label_custom_field: Benutzerdefiniertes Feld
165 label_custom_field: Benutzerdefiniertes Feld
163 label_custom_field_plural: Benutzerdefinierte Felder
166 label_custom_field_plural: Benutzerdefinierte Felder
164 label_custom_field_new: Neues Feld
167 label_custom_field_new: Neues Feld
165 label_enumerations: Enumerationen
168 label_enumerations: Enumerationen
166 label_enumeration_new: Neuer Wert
169 label_enumeration_new: Neuer Wert
167 label_information: Information
170 label_information: Information
168 label_information_plural: Informationen
171 label_information_plural: Informationen
169 #label_please_login: Please login
172 #label_please_login: Please login
170 label_register: Anmelden
173 label_register: Anmelden
171 label_password_lost: Passwort vergessen
174 label_password_lost: Passwort vergessen
172 label_home: Hauptseite
175 label_home: Hauptseite
173 label_my_page: Meine Seite
176 label_my_page: Meine Seite
174 label_my_account: Mein Konto
177 label_my_account: Mein Konto
175 label_my_projects: Meine Projekte
178 label_my_projects: Meine Projekte
176 label_administration: Administration
179 label_administration: Administration
177 label_login: Einloggen
180 label_login: Einloggen
178 label_logout: Abmelden
181 label_logout: Abmelden
179 label_help: Hilfe
182 label_help: Hilfe
180 label_reported_issues: Gemeldete Issues
183 label_reported_issues: Gemeldete Issues
181 label_assigned_to_me_issues: Mir zugewiesen
184 label_assigned_to_me_issues: Mir zugewiesen
182 label_last_login: Letzte Anmeldung
185 label_last_login: Letzte Anmeldung
183 #label_last_updates: Last updated
186 #label_last_updates: Last updated
184 #label_last_updates_plural: %d last updated
187 #label_last_updates_plural: %d last updated
185 label_registered_on: Angemeldet am
188 label_registered_on: Angemeldet am
186 label_activity: Aktivität
189 label_activity: Aktivität
187 label_new: Neue
190 label_new: Neue
188 label_logged_as: Angemeldet als
191 label_logged_as: Angemeldet als
189 #label_environment: Environment
192 #label_environment: Environment
190 label_authentication: Authentisierung
193 label_authentication: Authentisierung
191 #label_auth_source: Authentification mode
194 #label_auth_source: Authentification mode
192 #label_auth_source_new: New authentication mode
195 #label_auth_source_new: New authentication mode
193 #label_auth_source_plural: Authentification modes
196 #label_auth_source_plural: Authentification modes
194 #label_subproject: Subproject
197 #label_subproject: Subproject
195 #label_subproject_plural: Subprojects
198 #label_subproject_plural: Subprojects
196 label_min_max_length: Min - Max Länge
199 label_min_max_length: Min - Max Länge
197 label_list: Liste
200 label_list: Liste
198 label_date: Date
201 label_date: Date
199 label_integer: Zahl
202 label_integer: Zahl
200 label_boolean: Boolesch
203 label_boolean: Boolesch
201 #label_string: String
204 #label_string: String
202 label_text: Text
205 label_text: Text
203 label_attribute: Attribut
206 label_attribute: Attribut
204 label_attribute_plural: Attribute
207 label_attribute_plural: Attribute
205 #label_download: %d Download
208 #label_download: %d Download
206 #label_download_plural: %d Downloads
209 #label_download_plural: %d Downloads
207 label_no_data: Nichts anzuzeigen
210 label_no_data: Nichts anzuzeigen
208 label_change_status: Statuswechsel
211 label_change_status: Statuswechsel
209 label_history: Historie
212 label_history: Historie
210 label_attachment: Datei
213 label_attachment: Datei
211 label_attachment_new: Neue Datei
214 label_attachment_new: Neue Datei
212 #label_attachment_delete: Delete file
215 #label_attachment_delete: Delete file
213 label_attachment_plural: Dateien
216 label_attachment_plural: Dateien
214 label_report: Bericht
217 label_report: Bericht
215 label_report_plural: Berichte
218 label_report_plural: Berichte
216 #label_news: Neuigkeiten
219 #label_news: Neuigkeiten
217 #label_news_new: Add news
220 #label_news_new: Add news
218 #label_news_plural: Neuigkeiten
221 #label_news_plural: Neuigkeiten
219 label_news_latest: Letzte Neuigkeiten
222 label_news_latest: Letzte Neuigkeiten
220 label_news_view_all: Alle Neuigkeiten anzeigen
223 label_news_view_all: Alle Neuigkeiten anzeigen
221 label_change_log: Change log
224 label_change_log: Change log
222 label_settings: Konfiguration
225 label_settings: Konfiguration
223 label_overview: Übersicht
226 label_overview: Übersicht
224 label_version: Version
227 label_version: Version
225 label_version_new: Neue Version
228 label_version_new: Neue Version
226 label_version_plural: Versionen
229 label_version_plural: Versionen
227 label_confirmation: Bestätigung
230 label_confirmation: Bestätigung
228 #label_export_csv: Export to CSV
231 #label_export_csv: Export to CSV
229 #label_export_pdf: Export to PDF
232 #label_export_pdf: Export to PDF
230 label_read: Lesen...
233 label_read: Lesen...
231 label_public_projects: Öffentliche Projekte
234 label_public_projects: Öffentliche Projekte
232 #label_open_issues: Open
235 #label_open_issues: Open
233 #label_open_issues_plural: Open
236 #label_open_issues_plural: Open
234 #label_closed_issues: Closed
237 #label_closed_issues: Closed
235 #label_closed_issues_plural: Closed
238 #label_closed_issues_plural: Closed
236 label_total: Gesamtzahl
239 label_total: Gesamtzahl
237 label_permissions: Berechtigungen
240 label_permissions: Berechtigungen
238 label_current_status: Gegenwärtiger Status
241 label_current_status: Gegenwärtiger Status
239 label_new_statuses_allowed: Neue Status gewährten
242 label_new_statuses_allowed: Neue Status gewährten
240 label_all: Alle
243 label_all: Alle
241 label_none: Kein
244 label_none: Kein
242 label_next: Weiter
245 label_next: Weiter
243 label_previous: Zurück
246 label_previous: Zurück
244 label_used_by: Benutzt von
247 label_used_by: Benutzt von
245 #label_details: Details...
248 #label_details: Details...
246 #label_add_note: Add a note
249 #label_add_note: Add a note
247 #label_per_page: Per page
250 #label_per_page: Per page
248
251
249 button_login: Einloggen
252 button_login: Einloggen
250 button_submit: Einreichen
253 button_submit: Einreichen
251 button_save: Speichern
254 button_save: Speichern
252 button_check_all: Alles auswählen
255 button_check_all: Alles auswählen
253 button_uncheck_all: Alles abwählen
256 button_uncheck_all: Alles abwählen
254 button_delete: Löschen
257 button_delete: Löschen
255 button_create: Anlegen
258 button_create: Anlegen
256 button_test: Testen
259 button_test: Testen
257 button_edit: Bearbeiten
260 button_edit: Bearbeiten
258 button_add: Hinzufügen
261 button_add: Hinzufügen
259 button_change: Wechseln
262 button_change: Wechseln
260 button_apply: Anwenden
263 button_apply: Anwenden
261 button_clear: Zurücksetzen
264 button_clear: Zurücksetzen
262 button_lock: Verriegeln
265 button_lock: Verriegeln
263 button_unlock: Entriegeln
266 button_unlock: Entriegeln
264 button_download: Fernzuladen
267 button_download: Fernzuladen
265 button_list: Aufzulisten
268 button_list: Aufzulisten
266 button_view: Siehe
269 button_view: Siehe
267 button_move: Bewegen
270 button_move: Bewegen
268 #button_back: Back
271 #button_back: Back
269
272
270 text_select_mail_notifications: Aktionen für die Mailbenachrichtigung aktiviert werden soll.
273 text_select_mail_notifications: Aktionen für die Mailbenachrichtigung aktiviert werden soll.
271 text_regexp_info: eg. ^[A-Z0-9]+$
274 text_regexp_info: eg. ^[A-Z0-9]+$
272 text_min_max_length_info: 0 heisst keine Beschränkung
275 text_min_max_length_info: 0 heisst keine Beschränkung
273 #text_possible_values_info: values separated with |
276 #text_possible_values_info: values separated with |
274 text_project_destroy_confirmation: Sind sie sicher, daß sie das Projekt löschen wollen ?
277 text_project_destroy_confirmation: Sind sie sicher, daß sie das Projekt löschen wollen ?
275 text_workflow_edit: Auswahl Workflow zum Bearbeiten
278 text_workflow_edit: Auswahl Workflow zum Bearbeiten
276 text_are_you_sure: Sind sie sicher ?
279 text_are_you_sure: Sind sie sicher ?
277
280
278 default_role_manager: Manager
281 default_role_manager: Manager
279 default_role_developper: Developer
282 default_role_developper: Developer
280 default_role_reporter: Reporter
283 default_role_reporter: Reporter
281 default_tracker_bug: Fehler
284 default_tracker_bug: Fehler
282 default_tracker_feature: Feature
285 default_tracker_feature: Feature
283 default_tracker_support: Support
286 default_tracker_support: Support
284 default_issue_status_new: Neu
287 default_issue_status_new: Neu
285 default_issue_status_assigned: Zugewiesen
288 default_issue_status_assigned: Zugewiesen
286 default_issue_status_resolved: Gelöst
289 default_issue_status_resolved: Gelöst
287 default_issue_status_feedback: Feedback
290 default_issue_status_feedback: Feedback
288 default_issue_status_closed: Erledigt
291 default_issue_status_closed: Erledigt
289 default_issue_status_rejected: Abgewiesen
292 default_issue_status_rejected: Abgewiesen
290 default_doc_category_user: Benutzerdokumentation
293 default_doc_category_user: Benutzerdokumentation
291 default_doc_category_tech: Technische Dokumentation
294 default_doc_category_tech: Technische Dokumentation
292 default_priority_low: Niedrig
295 default_priority_low: Niedrig
293 default_priority_normal: Normal
296 default_priority_normal: Normal
294 default_priority_high: Hoch
297 default_priority_high: Hoch
295 default_priority_urgent: Dringend
298 default_priority_urgent: Dringend
296 default_priority_immediate: Sofort
299 default_priority_immediate: Sofort
297
300
298 enumeration_issue_priorities: Issue-Prioritäten
301 enumeration_issue_priorities: Issue-Prioritäten
299 enumeration_doc_categories: Dokumentenkategorien
302 enumeration_doc_categories: Dokumentenkategorien
@@ -1,299 +1,302
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2
2
3 actionview_datehelper_select_day_prefix:
3 actionview_datehelper_select_day_prefix:
4 actionview_datehelper_select_month_names: January,February,March,April,May,June,July,August,September,October,November,December
4 actionview_datehelper_select_month_names: January,February,March,April,May,June,July,August,September,October,November,December
5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
6 actionview_datehelper_select_month_prefix:
6 actionview_datehelper_select_month_prefix:
7 actionview_datehelper_select_year_prefix:
7 actionview_datehelper_select_year_prefix:
8 actionview_datehelper_time_in_words_day: 1 day
8 actionview_datehelper_time_in_words_day: 1 day
9 actionview_datehelper_time_in_words_day_plural: %d days
9 actionview_datehelper_time_in_words_day_plural: %d days
10 actionview_datehelper_time_in_words_hour_about: about an hour
10 actionview_datehelper_time_in_words_hour_about: about an hour
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
13 actionview_datehelper_time_in_words_minute: 1 minute
13 actionview_datehelper_time_in_words_minute: 1 minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
17 actionview_datehelper_time_in_words_minute_single: 1 minute
17 actionview_datehelper_time_in_words_minute_single: 1 minute
18 actionview_datehelper_time_in_words_second_less_than: less than a second
18 actionview_datehelper_time_in_words_second_less_than: less than a second
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
20 actionview_instancetag_blank_option: Please select
20 actionview_instancetag_blank_option: Please select
21
21
22 activerecord_error_inclusion: is not included in the list
22 activerecord_error_inclusion: is not included in the list
23 activerecord_error_exclusion: is reserved
23 activerecord_error_exclusion: is reserved
24 activerecord_error_invalid: is invalid
24 activerecord_error_invalid: is invalid
25 activerecord_error_confirmation: doesn't match confirmation
25 activerecord_error_confirmation: doesn't match confirmation
26 activerecord_error_accepted: must be accepted
26 activerecord_error_accepted: must be accepted
27 activerecord_error_empty: can't be empty
27 activerecord_error_empty: can't be empty
28 activerecord_error_blank: can't be blank
28 activerecord_error_blank: can't be blank
29 activerecord_error_too_long: is too long
29 activerecord_error_too_long: is too long
30 activerecord_error_too_short: is too short
30 activerecord_error_too_short: is too short
31 activerecord_error_wrong_length: is the wrong length
31 activerecord_error_wrong_length: is the wrong length
32 activerecord_error_taken: has already been taken
32 activerecord_error_taken: has already been taken
33 activerecord_error_not_a_number: is not a number
33 activerecord_error_not_a_number: is not a number
34 activerecord_error_not_a_date: is not a valid date
34 activerecord_error_not_a_date: is not a valid date
35
35
36 general_fmt_age: %d yr
36 general_fmt_age: %d yr
37 general_fmt_age_plural: %d yrs
37 general_fmt_age_plural: %d yrs
38 general_fmt_date: %%m/%%d/%%Y
38 general_fmt_date: %%m/%%d/%%Y
39 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
39 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
40 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
40 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
41 general_fmt_time: %%I:%%M %%p
41 general_fmt_time: %%I:%%M %%p
42 general_text_No: 'No'
42 general_text_No: 'No'
43 general_text_Yes: 'Yes'
43 general_text_Yes: 'Yes'
44 general_text_no: 'no'
44 general_text_no: 'no'
45 general_text_yes: 'yes'
45 general_text_yes: 'yes'
46 general_lang_en: 'English'
46 general_lang_en: 'English'
47 general_csv_separator: ','
47 general_csv_separator: ','
48
48
49 notice_account_updated: Account was successfully updated.
49 notice_account_updated: Account was successfully updated.
50 notice_account_invalid_creditentials: Invalid user or password
50 notice_account_invalid_creditentials: Invalid user or password
51 notice_account_password_updated: Password was successfully updated.
51 notice_account_password_updated: Password was successfully updated.
52 notice_account_wrong_password: Wrong password
52 notice_account_wrong_password: Wrong password
53 notice_account_register_done: Account was successfully created.
53 notice_account_register_done: Account was successfully created.
54 notice_account_unknown_email: Unknown user.
54 notice_account_unknown_email: Unknown user.
55 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
55 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
56 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
56 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
57 notice_account_activated: Your account has been activated. You can now log in.
57 notice_account_activated: Your account has been activated. You can now log in.
58 notice_successful_create: Successful creation.
58 notice_successful_create: Successful creation.
59 notice_successful_update: Successful update.
59 notice_successful_update: Successful update.
60 notice_successful_delete: Successful deletion.
60 notice_successful_delete: Successful deletion.
61 notice_successful_connection: Successful connection.
61 notice_successful_connection: Successful connection.
62 notice_file_not_found: Requested file doesn't exist or has been deleted.
62 notice_file_not_found: Requested file doesn't exist or has been deleted.
63 notice_locking_conflict: Data have been updated by another user.
63 notice_locking_conflict: Data have been updated by another user.
64
64
65 mail_subject_lost_password: Your redMine password
66 mail_subject_register: redMine account activation
67
65 gui_validation_error: 1 error
68 gui_validation_error: 1 error
66 gui_validation_error_plural: %d errors
69 gui_validation_error_plural: %d errors
67
70
68 field_name: Name
71 field_name: Name
69 field_description: Description
72 field_description: Description
70 field_summary: Summary
73 field_summary: Summary
71 field_is_required: Required
74 field_is_required: Required
72 field_firstname: Firstname
75 field_firstname: Firstname
73 field_lastname: Lastname
76 field_lastname: Lastname
74 field_mail: Email
77 field_mail: Email
75 field_filename: File
78 field_filename: File
76 field_filesize: Size
79 field_filesize: Size
77 field_downloads: Downloads
80 field_downloads: Downloads
78 field_author: Author
81 field_author: Author
79 field_created_on: Created
82 field_created_on: Created
80 field_updated_on: Updated
83 field_updated_on: Updated
81 field_field_format: Format
84 field_field_format: Format
82 field_is_for_all: For all projects
85 field_is_for_all: For all projects
83 field_possible_values: Possible values
86 field_possible_values: Possible values
84 field_regexp: Regular expression
87 field_regexp: Regular expression
85 field_min_length: Minimum length
88 field_min_length: Minimum length
86 field_max_length: Maximum length
89 field_max_length: Maximum length
87 field_value: Value
90 field_value: Value
88 field_category: Category
91 field_category: Category
89 field_title: Title
92 field_title: Title
90 field_project: Project
93 field_project: Project
91 field_issue: Issue
94 field_issue: Issue
92 field_status: Status
95 field_status: Status
93 field_notes: Notes
96 field_notes: Notes
94 field_is_closed: Issue closed
97 field_is_closed: Issue closed
95 field_is_default: Default status
98 field_is_default: Default status
96 field_html_color: Color
99 field_html_color: Color
97 field_tracker: Tracker
100 field_tracker: Tracker
98 field_subject: Subject
101 field_subject: Subject
99 field_due_date: Due date
102 field_due_date: Due date
100 field_assigned_to: Assigned to
103 field_assigned_to: Assigned to
101 field_priority: Priority
104 field_priority: Priority
102 field_fixed_version: Fixed version
105 field_fixed_version: Fixed version
103 field_user: User
106 field_user: User
104 field_role: Role
107 field_role: Role
105 field_homepage: Homepage
108 field_homepage: Homepage
106 field_is_public: Public
109 field_is_public: Public
107 field_parent: Subproject of
110 field_parent: Subproject of
108 field_is_in_chlog: Issues displayed in changelog
111 field_is_in_chlog: Issues displayed in changelog
109 field_login: Login
112 field_login: Login
110 field_mail_notification: Mail notifications
113 field_mail_notification: Mail notifications
111 field_admin: Administrator
114 field_admin: Administrator
112 field_locked: Locked
115 field_locked: Locked
113 field_last_login_on: Last connection
116 field_last_login_on: Last connection
114 field_language: Language
117 field_language: Language
115 field_effective_date: Date
118 field_effective_date: Date
116 field_password: Password
119 field_password: Password
117 field_new_password: New password
120 field_new_password: New password
118 field_password_confirmation: Confirmation
121 field_password_confirmation: Confirmation
119 field_version: Version
122 field_version: Version
120 field_type: Type
123 field_type: Type
121 field_host: Host
124 field_host: Host
122 field_port: Port
125 field_port: Port
123 field_account: Account
126 field_account: Account
124 field_base_dn: Base DN
127 field_base_dn: Base DN
125 field_attr_login: Login attribute
128 field_attr_login: Login attribute
126 field_attr_firstname: Firstname attribute
129 field_attr_firstname: Firstname attribute
127 field_attr_lastname: Lastname attribute
130 field_attr_lastname: Lastname attribute
128 field_attr_mail: Email attribute
131 field_attr_mail: Email attribute
129 field_onthefly: On-the-fly user creation
132 field_onthefly: On-the-fly user creation
130
133
131 label_user: User
134 label_user: User
132 label_user_plural: Users
135 label_user_plural: Users
133 label_user_new: New user
136 label_user_new: New user
134 label_project: Project
137 label_project: Project
135 label_project_new: New project
138 label_project_new: New project
136 label_project_plural: Projects
139 label_project_plural: Projects
137 label_project_latest: Latest projects
140 label_project_latest: Latest projects
138 label_issue: Issue
141 label_issue: Issue
139 label_issue_new: New issue
142 label_issue_new: New issue
140 label_issue_plural: Issues
143 label_issue_plural: Issues
141 label_issue_view_all: View all issues
144 label_issue_view_all: View all issues
142 label_document: Document
145 label_document: Document
143 label_document_new: New document
146 label_document_new: New document
144 label_document_plural: Documents
147 label_document_plural: Documents
145 label_role: Role
148 label_role: Role
146 label_role_plural: Roles
149 label_role_plural: Roles
147 label_role_new: New role
150 label_role_new: New role
148 label_role_and_permissions: Roles and permissions
151 label_role_and_permissions: Roles and permissions
149 label_member: Member
152 label_member: Member
150 label_member_new: New member
153 label_member_new: New member
151 label_member_plural: Members
154 label_member_plural: Members
152 label_tracker: Tracker
155 label_tracker: Tracker
153 label_tracker_plural: Trackers
156 label_tracker_plural: Trackers
154 label_tracker_new: New tracker
157 label_tracker_new: New tracker
155 label_workflow: Workflow
158 label_workflow: Workflow
156 label_issue_status: Issue status
159 label_issue_status: Issue status
157 label_issue_status_plural: Issue statuses
160 label_issue_status_plural: Issue statuses
158 label_issue_status_new: New status
161 label_issue_status_new: New status
159 label_issue_category: Issue category
162 label_issue_category: Issue category
160 label_issue_category_plural: Issue categories
163 label_issue_category_plural: Issue categories
161 label_issue_category_new: New category
164 label_issue_category_new: New category
162 label_custom_field: Custom field
165 label_custom_field: Custom field
163 label_custom_field_plural: Custom fields
166 label_custom_field_plural: Custom fields
164 label_custom_field_new: New custom field
167 label_custom_field_new: New custom field
165 label_enumerations: Enumerations
168 label_enumerations: Enumerations
166 label_enumeration_new: New value
169 label_enumeration_new: New value
167 label_information: Information
170 label_information: Information
168 label_information_plural: Information
171 label_information_plural: Information
169 label_please_login: Please login
172 label_please_login: Please login
170 label_register: Register
173 label_register: Register
171 label_password_lost: Lost password
174 label_password_lost: Lost password
172 label_home: Home
175 label_home: Home
173 label_my_page: My page
176 label_my_page: My page
174 label_my_account: My account
177 label_my_account: My account
175 label_my_projects: My projects
178 label_my_projects: My projects
176 label_administration: Administration
179 label_administration: Administration
177 label_login: Login
180 label_login: Login
178 label_logout: Logout
181 label_logout: Logout
179 label_help: Help
182 label_help: Help
180 label_reported_issues: Reported issues
183 label_reported_issues: Reported issues
181 label_assigned_to_me_issues: Issues assigned to me
184 label_assigned_to_me_issues: Issues assigned to me
182 label_last_login: Last connection
185 label_last_login: Last connection
183 label_last_updates: Last updated
186 label_last_updates: Last updated
184 label_last_updates_plural: %d last updated
187 label_last_updates_plural: %d last updated
185 label_registered_on: Registered on
188 label_registered_on: Registered on
186 label_activity: Activity
189 label_activity: Activity
187 label_new: New
190 label_new: New
188 label_logged_as: Logged as
191 label_logged_as: Logged as
189 label_environment: Environment
192 label_environment: Environment
190 label_authentication: Authentication
193 label_authentication: Authentication
191 label_auth_source: Authentification mode
194 label_auth_source: Authentification mode
192 label_auth_source_new: New authentication mode
195 label_auth_source_new: New authentication mode
193 label_auth_source_plural: Authentification modes
196 label_auth_source_plural: Authentification modes
194 label_subproject: Subproject
197 label_subproject: Subproject
195 label_subproject_plural: Subprojects
198 label_subproject_plural: Subprojects
196 label_min_max_length: Min - Max length
199 label_min_max_length: Min - Max length
197 label_list: List
200 label_list: List
198 label_date: Date
201 label_date: Date
199 label_integer: Integer
202 label_integer: Integer
200 label_boolean: Boolean
203 label_boolean: Boolean
201 label_string: String
204 label_string: String
202 label_text: Text
205 label_text: Text
203 label_attribute: Attribute
206 label_attribute: Attribute
204 label_attribute_plural: Attributes
207 label_attribute_plural: Attributes
205 label_download: %d Download
208 label_download: %d Download
206 label_download_plural: %d Downloads
209 label_download_plural: %d Downloads
207 label_no_data: No data to display
210 label_no_data: No data to display
208 label_change_status: Change status
211 label_change_status: Change status
209 label_history: History
212 label_history: History
210 label_attachment: File
213 label_attachment: File
211 label_attachment_new: New file
214 label_attachment_new: New file
212 label_attachment_delete: Delete file
215 label_attachment_delete: Delete file
213 label_attachment_plural: Files
216 label_attachment_plural: Files
214 label_report: Report
217 label_report: Report
215 label_report_plural: Reports
218 label_report_plural: Reports
216 label_news: News
219 label_news: News
217 label_news_new: Add news
220 label_news_new: Add news
218 label_news_plural: News
221 label_news_plural: News
219 label_news_latest: Latest news
222 label_news_latest: Latest news
220 label_news_view_all: View all news
223 label_news_view_all: View all news
221 label_change_log: Change log
224 label_change_log: Change log
222 label_settings: Settings
225 label_settings: Settings
223 label_overview: Overview
226 label_overview: Overview
224 label_version: Version
227 label_version: Version
225 label_version_new: New version
228 label_version_new: New version
226 label_version_plural: Versions
229 label_version_plural: Versions
227 label_confirmation: Confirmation
230 label_confirmation: Confirmation
228 label_export_csv: Export to CSV
231 label_export_csv: Export to CSV
229 label_export_pdf: Export to PDF
232 label_export_pdf: Export to PDF
230 label_read: Read...
233 label_read: Read...
231 label_public_projects: Public projects
234 label_public_projects: Public projects
232 label_open_issues: Open
235 label_open_issues: Open
233 label_open_issues_plural: Open
236 label_open_issues_plural: Open
234 label_closed_issues: Closed
237 label_closed_issues: Closed
235 label_closed_issues_plural: Closed
238 label_closed_issues_plural: Closed
236 label_total: Total
239 label_total: Total
237 label_permissions: Permissions
240 label_permissions: Permissions
238 label_current_status: Current status
241 label_current_status: Current status
239 label_new_statuses_allowed: New statuses allowed
242 label_new_statuses_allowed: New statuses allowed
240 label_all: All
243 label_all: All
241 label_none: None
244 label_none: None
242 label_next: Next
245 label_next: Next
243 label_previous: Previous
246 label_previous: Previous
244 label_used_by: Used by
247 label_used_by: Used by
245 label_details: Details...
248 label_details: Details...
246 label_add_note: Add a note
249 label_add_note: Add a note
247 label_per_page: Per page
250 label_per_page: Per page
248
251
249 button_login: Login
252 button_login: Login
250 button_submit: Submit
253 button_submit: Submit
251 button_save: Save
254 button_save: Save
252 button_check_all: Check all
255 button_check_all: Check all
253 button_uncheck_all: Uncheck all
256 button_uncheck_all: Uncheck all
254 button_delete: Delete
257 button_delete: Delete
255 button_create: Create
258 button_create: Create
256 button_test: Test
259 button_test: Test
257 button_edit: Edit
260 button_edit: Edit
258 button_add: Add
261 button_add: Add
259 button_change: Change
262 button_change: Change
260 button_apply: Apply
263 button_apply: Apply
261 button_clear: Clear
264 button_clear: Clear
262 button_lock: Lock
265 button_lock: Lock
263 button_unlock: Unlock
266 button_unlock: Unlock
264 button_download: Download
267 button_download: Download
265 button_list: List
268 button_list: List
266 button_view: View
269 button_view: View
267 button_move: Move
270 button_move: Move
268 button_back: Back
271 button_back: Back
269
272
270 text_select_mail_notifications: Select actions for which mail notifications should be sent.
273 text_select_mail_notifications: Select actions for which mail notifications should be sent.
271 text_regexp_info: eg. ^[A-Z0-9]+$
274 text_regexp_info: eg. ^[A-Z0-9]+$
272 text_min_max_length_info: 0 means no restriction
275 text_min_max_length_info: 0 means no restriction
273 text_possible_values_info: values separated with |
276 text_possible_values_info: values separated with |
274 text_project_destroy_confirmation: Are you sure you want to delete this project and all related data ?
277 text_project_destroy_confirmation: Are you sure you want to delete this project and all related data ?
275 text_workflow_edit: Select a role and a tracker to edit the workflow
278 text_workflow_edit: Select a role and a tracker to edit the workflow
276 text_are_you_sure: Are you sure ?
279 text_are_you_sure: Are you sure ?
277
280
278 default_role_manager: Manager
281 default_role_manager: Manager
279 default_role_developper: Developer
282 default_role_developper: Developer
280 default_role_reporter: Reporter
283 default_role_reporter: Reporter
281 default_tracker_bug: Bug
284 default_tracker_bug: Bug
282 default_tracker_feature: Feature
285 default_tracker_feature: Feature
283 default_tracker_support: Support
286 default_tracker_support: Support
284 default_issue_status_new: New
287 default_issue_status_new: New
285 default_issue_status_assigned: Assigned
288 default_issue_status_assigned: Assigned
286 default_issue_status_resolved: Resolved
289 default_issue_status_resolved: Resolved
287 default_issue_status_feedback: Feedback
290 default_issue_status_feedback: Feedback
288 default_issue_status_closed: Closed
291 default_issue_status_closed: Closed
289 default_issue_status_rejected: Rejected
292 default_issue_status_rejected: Rejected
290 default_doc_category_user: User documentation
293 default_doc_category_user: User documentation
291 default_doc_category_tech: Technical documentation
294 default_doc_category_tech: Technical documentation
292 default_priority_low: Low
295 default_priority_low: Low
293 default_priority_normal: Normal
296 default_priority_normal: Normal
294 default_priority_high: High
297 default_priority_high: High
295 default_priority_urgent: Urgent
298 default_priority_urgent: Urgent
296 default_priority_immediate: Immediate
299 default_priority_immediate: Immediate
297
300
298 enumeration_issue_priorities: Issue priorities
301 enumeration_issue_priorities: Issue priorities
299 enumeration_doc_categories: Document categories
302 enumeration_doc_categories: Document categories
@@ -1,299 +1,302
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2
2
3 actionview_datehelper_select_day_prefix:
3 actionview_datehelper_select_day_prefix:
4 actionview_datehelper_select_month_names: Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre
4 actionview_datehelper_select_month_names: Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre
5 actionview_datehelper_select_month_names_abbr: Ene,Feb,Mar,Abr,Mayo,Jun,Jul,Ago,Sep,Oct,Nov,Dic
5 actionview_datehelper_select_month_names_abbr: Ene,Feb,Mar,Abr,Mayo,Jun,Jul,Ago,Sep,Oct,Nov,Dic
6 actionview_datehelper_select_month_prefix:
6 actionview_datehelper_select_month_prefix:
7 actionview_datehelper_select_year_prefix:
7 actionview_datehelper_select_year_prefix:
8 actionview_datehelper_time_in_words_day: 1 day
8 actionview_datehelper_time_in_words_day: 1 day
9 actionview_datehelper_time_in_words_day_plural: %d days
9 actionview_datehelper_time_in_words_day_plural: %d days
10 actionview_datehelper_time_in_words_hour_about: about an hour
10 actionview_datehelper_time_in_words_hour_about: about an hour
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
13 actionview_datehelper_time_in_words_minute: 1 minute
13 actionview_datehelper_time_in_words_minute: 1 minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
17 actionview_datehelper_time_in_words_minute_single: 1 minute
17 actionview_datehelper_time_in_words_minute_single: 1 minute
18 actionview_datehelper_time_in_words_second_less_than: less than a second
18 actionview_datehelper_time_in_words_second_less_than: less than a second
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
20 actionview_instancetag_blank_option: Please select
20 actionview_instancetag_blank_option: Please select
21
21
22 activerecord_error_inclusion: is not included in the list
22 activerecord_error_inclusion: is not included in the list
23 activerecord_error_exclusion: is reserved
23 activerecord_error_exclusion: is reserved
24 activerecord_error_invalid: is invalid
24 activerecord_error_invalid: is invalid
25 activerecord_error_confirmation: doesn't match confirmation
25 activerecord_error_confirmation: doesn't match confirmation
26 activerecord_error_accepted: must be accepted
26 activerecord_error_accepted: must be accepted
27 activerecord_error_empty: can't be empty
27 activerecord_error_empty: can't be empty
28 activerecord_error_blank: can't be blank
28 activerecord_error_blank: can't be blank
29 activerecord_error_too_long: is too long
29 activerecord_error_too_long: is too long
30 activerecord_error_too_short: is too short
30 activerecord_error_too_short: is too short
31 activerecord_error_wrong_length: is the wrong length
31 activerecord_error_wrong_length: is the wrong length
32 activerecord_error_taken: has already been taken
32 activerecord_error_taken: has already been taken
33 activerecord_error_not_a_number: is not a number
33 activerecord_error_not_a_number: is not a number
34 #activerecord_error_not_a_date: is not a valid date
34 #activerecord_error_not_a_date: is not a valid date
35
35
36 general_fmt_age: %d año
36 general_fmt_age: %d año
37 general_fmt_age_plural: %d años
37 general_fmt_age_plural: %d años
38 general_fmt_date: %%d/%%m/%%Y
38 general_fmt_date: %%d/%%m/%%Y
39 general_fmt_datetime: %%d/%%m/%%Y %%H:%%M
39 general_fmt_datetime: %%d/%%m/%%Y %%H:%%M
40 general_fmt_datetime_short: %%d/%%m %%H:%%M
40 general_fmt_datetime_short: %%d/%%m %%H:%%M
41 general_fmt_time: %%H:%%M
41 general_fmt_time: %%H:%%M
42 general_text_No: 'No'
42 general_text_No: 'No'
43 general_text_Yes: 'Sí'
43 general_text_Yes: 'Sí'
44 general_text_no: 'no'
44 general_text_no: 'no'
45 general_text_yes: 'sí'
45 general_text_yes: 'sí'
46 general_lang_es: 'Español'
46 general_lang_es: 'Español'
47 general_csv_separator: ';'
47 general_csv_separator: ';'
48
48
49 notice_account_updated: Account was successfully updated.
49 notice_account_updated: Account was successfully updated.
50 notice_account_invalid_creditentials: Invalid user or password
50 notice_account_invalid_creditentials: Invalid user or password
51 notice_account_password_updated: Password was successfully updated.
51 notice_account_password_updated: Password was successfully updated.
52 notice_account_wrong_password: Wrong password
52 notice_account_wrong_password: Wrong password
53 notice_account_register_done: Account was successfully created.
53 notice_account_register_done: Account was successfully created.
54 notice_account_unknown_email: Unknown user.
54 notice_account_unknown_email: Unknown user.
55 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
55 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
56 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
56 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
57 notice_account_activated: Your account has been activated. You can now log in.
57 notice_account_activated: Your account has been activated. You can now log in.
58 notice_successful_create: Successful creation.
58 notice_successful_create: Successful creation.
59 notice_successful_update: Successful update.
59 notice_successful_update: Successful update.
60 notice_successful_delete: Successful deletion.
60 notice_successful_delete: Successful deletion.
61 notice_successful_connection: Successful connection.
61 notice_successful_connection: Successful connection.
62 notice_file_not_found: Requested file doesn't exist or has been deleted.
62 notice_file_not_found: Requested file doesn't exist or has been deleted.
63 notice_locking_conflict: Data have been updated by another user.
63 notice_locking_conflict: Data have been updated by another user.
64
64
65 #mail_subject_lost_password: Your redMine password
66 #mail_subject_register: redMine account activation
67
65 gui_validation_error: 1 error
68 gui_validation_error: 1 error
66 gui_validation_error_plural: %d errores
69 gui_validation_error_plural: %d errores
67
70
68 field_name: Nombre
71 field_name: Nombre
69 field_description: Descripción
72 field_description: Descripción
70 field_summary: Resumen
73 field_summary: Resumen
71 field_is_required: Obligatorio
74 field_is_required: Obligatorio
72 field_firstname: Nombre
75 field_firstname: Nombre
73 field_lastname: Apellido
76 field_lastname: Apellido
74 field_mail: Email
77 field_mail: Email
75 field_filename: Fichero
78 field_filename: Fichero
76 field_filesize: Tamaño
79 field_filesize: Tamaño
77 field_downloads: Telecargas
80 field_downloads: Telecargas
78 field_author: Autor
81 field_author: Autor
79 field_created_on: Creado
82 field_created_on: Creado
80 field_updated_on: Actualizado
83 field_updated_on: Actualizado
81 field_field_format: Formato
84 field_field_format: Formato
82 field_is_for_all: Para todos los proyectos
85 field_is_for_all: Para todos los proyectos
83 field_possible_values: Valores posibles
86 field_possible_values: Valores posibles
84 field_regexp: Expresión regular
87 field_regexp: Expresión regular
85 #field_min_length: Minimum length
88 #field_min_length: Minimum length
86 #field_max_length: Maximum length
89 #field_max_length: Maximum length
87 field_value: Valor
90 field_value: Valor
88 field_category: Categoría
91 field_category: Categoría
89 field_title: Título
92 field_title: Título
90 field_project: Proyecto
93 field_project: Proyecto
91 field_issue: Petición
94 field_issue: Petición
92 field_status: Estatuto
95 field_status: Estatuto
93 field_notes: Notas
96 field_notes: Notas
94 field_is_closed: Petición resuelta
97 field_is_closed: Petición resuelta
95 field_is_default: Estatuto por defecto
98 field_is_default: Estatuto por defecto
96 field_html_color: Color
99 field_html_color: Color
97 field_tracker: Tracker
100 field_tracker: Tracker
98 field_subject: Tema
101 field_subject: Tema
99 #field_due_date: Due date
102 #field_due_date: Due date
100 field_assigned_to: Asignado a
103 field_assigned_to: Asignado a
101 field_priority: Prioridad
104 field_priority: Prioridad
102 field_fixed_version: Versión corregida
105 field_fixed_version: Versión corregida
103 field_user: Usuario
106 field_user: Usuario
104 field_role: Papel
107 field_role: Papel
105 field_homepage: Sitio web
108 field_homepage: Sitio web
106 field_is_public: Público
109 field_is_public: Público
107 #field_parent: Subproject de
110 #field_parent: Subproject de
108 field_is_in_chlog: Consultar las peticiones en el histórico
111 field_is_in_chlog: Consultar las peticiones en el histórico
109 field_login: Identificador
112 field_login: Identificador
110 field_mail_notification: Notificación por mail
113 field_mail_notification: Notificación por mail
111 field_admin: Administrador
114 field_admin: Administrador
112 field_locked: Cerrado
115 field_locked: Cerrado
113 field_last_login_on: Última conexión
116 field_last_login_on: Última conexión
114 field_language: Lengua
117 field_language: Lengua
115 field_effective_date: Fecha
118 field_effective_date: Fecha
116 field_password: Contraseña
119 field_password: Contraseña
117 field_new_password: Nueva contraseña
120 field_new_password: Nueva contraseña
118 field_password_confirmation: Confirmación
121 field_password_confirmation: Confirmación
119 field_version: Versión
122 field_version: Versión
120 field_type: Tipo
123 field_type: Tipo
121 #field_host: Host
124 #field_host: Host
122 #field_port: Port
125 #field_port: Port
123 #field_account: Account
126 #field_account: Account
124 #field_base_dn: Base DN
127 #field_base_dn: Base DN
125 #field_attr_login: Login attribute
128 #field_attr_login: Login attribute
126 #field_attr_firstname: Firstname attribute
129 #field_attr_firstname: Firstname attribute
127 #field_attr_lastname: Lastname attribute
130 #field_attr_lastname: Lastname attribute
128 #field_attr_mail: Email attribute
131 #field_attr_mail: Email attribute
129 #field_onthefly: On-the-fly user creation
132 #field_onthefly: On-the-fly user creation
130
133
131 label_user: Usuario
134 label_user: Usuario
132 label_user_plural: Usuarios
135 label_user_plural: Usuarios
133 label_user_new: Nuevo usuario
136 label_user_new: Nuevo usuario
134 label_project: Proyecto
137 label_project: Proyecto
135 label_project_new: Nuevo proyecto
138 label_project_new: Nuevo proyecto
136 label_project_plural: Proyectos
139 label_project_plural: Proyectos
137 #label_project_latest: Latest projects
140 #label_project_latest: Latest projects
138 label_issue: Petición
141 label_issue: Petición
139 label_issue_new: Nueva petición
142 label_issue_new: Nueva petición
140 label_issue_plural: Peticiones
143 label_issue_plural: Peticiones
141 label_issue_view_all: Ver todas las peticiones
144 label_issue_view_all: Ver todas las peticiones
142 label_document: Documento
145 label_document: Documento
143 label_document_new: Nuevo documento
146 label_document_new: Nuevo documento
144 label_document_plural: Documentos
147 label_document_plural: Documentos
145 label_role: Papel
148 label_role: Papel
146 label_role_plural: Papeles
149 label_role_plural: Papeles
147 label_role_new: Nuevo papel
150 label_role_new: Nuevo papel
148 label_role_and_permissions: Papeles y permisos
151 label_role_and_permissions: Papeles y permisos
149 label_member: Miembro
152 label_member: Miembro
150 label_member_new: Nuevo miembro
153 label_member_new: Nuevo miembro
151 label_member_plural: Miembros
154 label_member_plural: Miembros
152 label_tracker: Tracker
155 label_tracker: Tracker
153 label_tracker_plural: Trackers
156 label_tracker_plural: Trackers
154 label_tracker_new: Nuevo tracker
157 label_tracker_new: Nuevo tracker
155 label_workflow: Workflow
158 label_workflow: Workflow
156 label_issue_status: Estatuto de petición
159 label_issue_status: Estatuto de petición
157 label_issue_status_plural: Estatutos de las peticiones
160 label_issue_status_plural: Estatutos de las peticiones
158 label_issue_status_new: Nuevo estatuto
161 label_issue_status_new: Nuevo estatuto
159 label_issue_category: Categoría de las peticiones
162 label_issue_category: Categoría de las peticiones
160 label_issue_category_plural: Categorías de las peticiones
163 label_issue_category_plural: Categorías de las peticiones
161 label_issue_category_new: Nueva categoría
164 label_issue_category_new: Nueva categoría
162 label_custom_field: Campo personalizado
165 label_custom_field: Campo personalizado
163 label_custom_field_plural: Campos personalizados
166 label_custom_field_plural: Campos personalizados
164 label_custom_field_new: Nuevo campo personalizado
167 label_custom_field_new: Nuevo campo personalizado
165 label_enumerations: Listas de valores
168 label_enumerations: Listas de valores
166 label_enumeration_new: Nuevo valor
169 label_enumeration_new: Nuevo valor
167 label_information: Informacion
170 label_information: Informacion
168 label_information_plural: Informaciones
171 label_information_plural: Informaciones
169 label_please_login: Conexión
172 label_please_login: Conexión
170 #label_register: Register
173 #label_register: Register
171 label_password_lost: ¿Olvidaste la contraseña?
174 label_password_lost: ¿Olvidaste la contraseña?
172 label_home: Acogida
175 label_home: Acogida
173 label_my_page: Mi página
176 label_my_page: Mi página
174 label_my_account: Mi cuenta
177 label_my_account: Mi cuenta
175 label_my_projects: Mis proyectos
178 label_my_projects: Mis proyectos
176 label_administration: Administración
179 label_administration: Administración
177 label_login: Conexión
180 label_login: Conexión
178 label_logout: Desconexión
181 label_logout: Desconexión
179 label_help: Ayuda
182 label_help: Ayuda
180 label_reported_issues: Peticiones registradas
183 label_reported_issues: Peticiones registradas
181 label_assigned_to_me_issues: Peticiones que me están asignadas
184 label_assigned_to_me_issues: Peticiones que me están asignadas
182 label_last_login: Última conexión
185 label_last_login: Última conexión
183 label_last_updates: Actualizado
186 label_last_updates: Actualizado
184 label_last_updates_plural: %d Actualizados
187 label_last_updates_plural: %d Actualizados
185 label_registered_on: Inscrito el
188 label_registered_on: Inscrito el
186 label_activity: Actividad
189 label_activity: Actividad
187 label_new: Nuevo
190 label_new: Nuevo
188 label_logged_as: Conectado como
191 label_logged_as: Conectado como
189 #label_environment: Environment
192 #label_environment: Environment
190 #label_authentication: Authentication
193 #label_authentication: Authentication
191 #label_auth_source: Authentification mode
194 #label_auth_source: Authentification mode
192 #label_auth_source_new: New authentication mode
195 #label_auth_source_new: New authentication mode
193 #label_auth_source_plural: Authentification modes
196 #label_auth_source_plural: Authentification modes
194 #label_subproject: Subproject
197 #label_subproject: Subproject
195 #label_subproject_plural: Subprojects
198 #label_subproject_plural: Subprojects
196 #label_min_max_length: Min - Max length
199 #label_min_max_length: Min - Max length
197 #label_list: List
200 #label_list: List
198 label_date: Fecha
201 label_date: Fecha
199 #label_integer: Integer
202 #label_integer: Integer
200 #label_boolean: Boolean
203 #label_boolean: Boolean
201 #label_string: String
204 #label_string: String
202 #label_text: Text
205 #label_text: Text
203 #label_attribute: Attribute
206 #label_attribute: Attribute
204 #label_attribute_plural: Attributes
207 #label_attribute_plural: Attributes
205 label_download: %d Telecarga
208 label_download: %d Telecarga
206 label_download_plural: %d Telecargas
209 label_download_plural: %d Telecargas
207 #label_no_data: No data to display
210 #label_no_data: No data to display
208 label_change_status: Cambiar el estatuto
211 label_change_status: Cambiar el estatuto
209 label_history: Histórico
212 label_history: Histórico
210 label_attachment: Fichero
213 label_attachment: Fichero
211 label_attachment_new: Nuevo fichero
214 label_attachment_new: Nuevo fichero
212 #label_attachment_delete: Delete file
215 #label_attachment_delete: Delete file
213 label_attachment_plural: Ficheros
216 label_attachment_plural: Ficheros
214 #label_report: Report
217 #label_report: Report
215 #label_report_plural: Reports
218 #label_report_plural: Reports
216 label_news: Noticia
219 label_news: Noticia
217 label_news_new: Nueva noticia
220 label_news_new: Nueva noticia
218 label_news_plural: Noticias
221 label_news_plural: Noticias
219 label_news_latest: Últimas noticias
222 label_news_latest: Últimas noticias
220 label_news_view_all: Ver todas las noticias
223 label_news_view_all: Ver todas las noticias
221 label_change_log: Cambios
224 label_change_log: Cambios
222 label_settings: Configuración
225 label_settings: Configuración
223 label_overview: Vistazo
226 label_overview: Vistazo
224 label_version: Versión
227 label_version: Versión
225 label_version_new: Nueva versión
228 label_version_new: Nueva versión
226 label_version_plural: Versiónes
229 label_version_plural: Versiónes
227 label_confirmation: Confirmación
230 label_confirmation: Confirmación
228 label_export_csv: Exportar a CSV
231 label_export_csv: Exportar a CSV
229 label_export_pdf: Exportar a PDF
232 label_export_pdf: Exportar a PDF
230 label_read: Leer...
233 label_read: Leer...
231 label_public_projects: Proyectos publicos
234 label_public_projects: Proyectos publicos
232 label_open_issues: Abierta
235 label_open_issues: Abierta
233 label_open_issues_plural: Abiertas
236 label_open_issues_plural: Abiertas
234 label_closed_issues: Cerrada
237 label_closed_issues: Cerrada
235 label_closed_issues_plural: Cerradas
238 label_closed_issues_plural: Cerradas
236 label_total: Total
239 label_total: Total
237 label_permissions: Permisos
240 label_permissions: Permisos
238 #label_current_status: Current status
241 #label_current_status: Current status
239 label_new_statuses_allowed: Nuevos estatutos autorizados
242 label_new_statuses_allowed: Nuevos estatutos autorizados
240 label_all: Todos
243 label_all: Todos
241 label_none: Ninguno
244 label_none: Ninguno
242 label_next: Próximo
245 label_next: Próximo
243 label_previous: Precedente
246 label_previous: Precedente
244 label_used_by: Utilizado por
247 label_used_by: Utilizado por
245 #label_details: Details...
248 #label_details: Details...
246 #label_add_note: Add a note
249 #label_add_note: Add a note
247 #label_per_page: Per page
250 #label_per_page: Per page
248
251
249 button_login: Conexión
252 button_login: Conexión
250 button_submit: Someter
253 button_submit: Someter
251 button_save: Validar
254 button_save: Validar
252 button_check_all: Seleccionar todo
255 button_check_all: Seleccionar todo
253 button_uncheck_all: No seleccionar nada
256 button_uncheck_all: No seleccionar nada
254 button_delete: Suprimir
257 button_delete: Suprimir
255 button_create: Crear
258 button_create: Crear
256 button_test: Testar
259 button_test: Testar
257 button_edit: Modificar
260 button_edit: Modificar
258 button_add: Añadir
261 button_add: Añadir
259 button_change: Cambiar
262 button_change: Cambiar
260 button_apply: Aplicar
263 button_apply: Aplicar
261 button_clear: Anular
264 button_clear: Anular
262 button_lock: Bloquear
265 button_lock: Bloquear
263 button_unlock: Desbloquear
266 button_unlock: Desbloquear
264 button_download: Telecargar
267 button_download: Telecargar
265 button_list: Listar
268 button_list: Listar
266 button_view: Ver
269 button_view: Ver
267 button_move: Mover
270 button_move: Mover
268 #button_back: Back
271 #button_back: Back
269
272
270 text_select_mail_notifications: Seleccionar las actividades que necesitan la activación de la notificación por mail.
273 text_select_mail_notifications: Seleccionar las actividades que necesitan la activación de la notificación por mail.
271 text_regexp_info: eg. ^[A-Z0-9]+$
274 text_regexp_info: eg. ^[A-Z0-9]+$
272 text_min_max_length_info: 0 para ninguna restricción
275 text_min_max_length_info: 0 para ninguna restricción
273 #text_possible_values_info: values separated with |
276 #text_possible_values_info: values separated with |
274 text_project_destroy_confirmation: ¿ Estás seguro de querer eliminar el proyecto ?
277 text_project_destroy_confirmation: ¿ Estás seguro de querer eliminar el proyecto ?
275 text_workflow_edit: Seleccionar un workflow para actualizar
278 text_workflow_edit: Seleccionar un workflow para actualizar
276 text_are_you_sure: ¿ Estás seguro ?
279 text_are_you_sure: ¿ Estás seguro ?
277
280
278 default_role_manager: Manager
281 default_role_manager: Manager
279 default_role_developper: Desarrollador
282 default_role_developper: Desarrollador
280 default_role_reporter: Informador
283 default_role_reporter: Informador
281 default_tracker_bug: Anomalía
284 default_tracker_bug: Anomalía
282 default_tracker_feature: Evolución
285 default_tracker_feature: Evolución
283 default_tracker_support: Asistencia
286 default_tracker_support: Asistencia
284 default_issue_status_new: Nuevo
287 default_issue_status_new: Nuevo
285 default_issue_status_assigned: Asignada
288 default_issue_status_assigned: Asignada
286 default_issue_status_resolved: Resuelta
289 default_issue_status_resolved: Resuelta
287 default_issue_status_feedback: Comentario
290 default_issue_status_feedback: Comentario
288 default_issue_status_closed: Cerrada
291 default_issue_status_closed: Cerrada
289 default_issue_status_rejected: Rechazada
292 default_issue_status_rejected: Rechazada
290 default_doc_category_user: Documentación del usuario
293 default_doc_category_user: Documentación del usuario
291 default_doc_category_tech: Documentación tecnica
294 default_doc_category_tech: Documentación tecnica
292 default_priority_low: Bajo
295 default_priority_low: Bajo
293 default_priority_normal: Normal
296 default_priority_normal: Normal
294 default_priority_high: Alto
297 default_priority_high: Alto
295 default_priority_urgent: Urgente
298 default_priority_urgent: Urgente
296 default_priority_immediate: Ahora
299 default_priority_immediate: Ahora
297
300
298 enumeration_issue_priorities: Prioridad de las peticiones
301 enumeration_issue_priorities: Prioridad de las peticiones
299 enumeration_doc_categories: Categorías del documento
302 enumeration_doc_categories: Categorías del documento
@@ -1,299 +1,302
1 _gloc_rule_default: '|n| n<=1 ? "" : "_plural" '
1 _gloc_rule_default: '|n| n<=1 ? "" : "_plural" '
2
2
3 actionview_datehelper_select_day_prefix:
3 actionview_datehelper_select_day_prefix:
4 actionview_datehelper_select_month_names: Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre
4 actionview_datehelper_select_month_names: Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre
5 actionview_datehelper_select_month_names_abbr: Jan,Fév,Mars,Avril,Mai,Juin,Juil,Août,Sept,Oct,Nov,Déc
5 actionview_datehelper_select_month_names_abbr: Jan,Fév,Mars,Avril,Mai,Juin,Juil,Août,Sept,Oct,Nov,Déc
6 actionview_datehelper_select_month_prefix:
6 actionview_datehelper_select_month_prefix:
7 actionview_datehelper_select_year_prefix:
7 actionview_datehelper_select_year_prefix:
8 actionview_datehelper_time_in_words_day: 1 jour
8 actionview_datehelper_time_in_words_day: 1 jour
9 actionview_datehelper_time_in_words_day_plural: %d jours
9 actionview_datehelper_time_in_words_day_plural: %d jours
10 actionview_datehelper_time_in_words_hour_about: about an hour
10 actionview_datehelper_time_in_words_hour_about: about an hour
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
13 actionview_datehelper_time_in_words_minute: 1 minute
13 actionview_datehelper_time_in_words_minute: 1 minute
14 actionview_datehelper_time_in_words_minute_half: 30 secondes
14 actionview_datehelper_time_in_words_minute_half: 30 secondes
15 actionview_datehelper_time_in_words_minute_less_than: moins d'une minute
15 actionview_datehelper_time_in_words_minute_less_than: moins d'une minute
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
17 actionview_datehelper_time_in_words_minute_single: 1 minute
17 actionview_datehelper_time_in_words_minute_single: 1 minute
18 actionview_datehelper_time_in_words_second_less_than: moins d'une seconde
18 actionview_datehelper_time_in_words_second_less_than: moins d'une seconde
19 actionview_datehelper_time_in_words_second_less_than_plural: moins de %d secondes
19 actionview_datehelper_time_in_words_second_less_than_plural: moins de %d secondes
20 actionview_instancetag_blank_option: Choisir
20 actionview_instancetag_blank_option: Choisir
21
21
22 activerecord_error_inclusion: n'est pas inclus dans la liste
22 activerecord_error_inclusion: n'est pas inclus dans la liste
23 activerecord_error_exclusion: est reservé
23 activerecord_error_exclusion: est reservé
24 activerecord_error_invalid: est invalide
24 activerecord_error_invalid: est invalide
25 activerecord_error_confirmation: ne correspond pas à la confirmation
25 activerecord_error_confirmation: ne correspond pas à la confirmation
26 activerecord_error_accepted: doit être accepté
26 activerecord_error_accepted: doit être accepté
27 activerecord_error_empty: doit être renseigné
27 activerecord_error_empty: doit être renseigné
28 activerecord_error_blank: doit être renseigné
28 activerecord_error_blank: doit être renseigné
29 activerecord_error_too_long: est trop long
29 activerecord_error_too_long: est trop long
30 activerecord_error_too_short: est trop court
30 activerecord_error_too_short: est trop court
31 activerecord_error_wrong_length: n'est pas de la bonne longueur
31 activerecord_error_wrong_length: n'est pas de la bonne longueur
32 activerecord_error_taken: est déjà utilisé
32 activerecord_error_taken: est déjà utilisé
33 activerecord_error_not_a_number: n'est pas un nombre
33 activerecord_error_not_a_number: n'est pas un nombre
34 activerecord_error_not_a_date: n'est pas une date valide
34 activerecord_error_not_a_date: n'est pas une date valide
35
35
36 general_fmt_age: %d an
36 general_fmt_age: %d an
37 general_fmt_age_plural: %d ans
37 general_fmt_age_plural: %d ans
38 general_fmt_date: %%d/%%m/%%Y
38 general_fmt_date: %%d/%%m/%%Y
39 general_fmt_datetime: %%d/%%m/%%Y %%H:%%M
39 general_fmt_datetime: %%d/%%m/%%Y %%H:%%M
40 general_fmt_datetime_short: %%d/%%m %%H:%%M
40 general_fmt_datetime_short: %%d/%%m %%H:%%M
41 general_fmt_time: %%H:%%M
41 general_fmt_time: %%H:%%M
42 general_text_No: 'Non'
42 general_text_No: 'Non'
43 general_text_Yes: 'Oui'
43 general_text_Yes: 'Oui'
44 general_text_no: 'non'
44 general_text_no: 'non'
45 general_text_yes: 'oui'
45 general_text_yes: 'oui'
46 general_lang_fr: 'Français'
46 general_lang_fr: 'Français'
47 general_csv_separator: ';'
47 general_csv_separator: ';'
48
48
49 notice_account_updated: Le compte a été mis à jour avec succès.
49 notice_account_updated: Le compte a été mis à jour avec succès.
50 notice_account_invalid_creditentials: Identifiant ou mot de passe invalide.
50 notice_account_invalid_creditentials: Identifiant ou mot de passe invalide.
51 notice_account_password_updated: Mot de passe mis à jour avec succès.
51 notice_account_password_updated: Mot de passe mis à jour avec succès.
52 notice_account_wrong_password: Mot de passe incorrect
52 notice_account_wrong_password: Mot de passe incorrect
53 notice_account_register_done: Un message contenant les instructions pour activer votre compte vous a été envoyé.
53 notice_account_register_done: Un message contenant les instructions pour activer votre compte vous a été envoyé.
54 notice_account_unknown_email: Aucun compte ne correspond à cette adresse.
54 notice_account_unknown_email: Aucun compte ne correspond à cette adresse.
55 notice_can_t_change_password: Ce compte utilise une authentification externe. Impossible de changer le mot de passe.
55 notice_can_t_change_password: Ce compte utilise une authentification externe. Impossible de changer le mot de passe.
56 notice_account_lost_email_sent: Un message contenant les instructions pour choisir un nouveau mot de passe vous a été envoyé.
56 notice_account_lost_email_sent: Un message contenant les instructions pour choisir un nouveau mot de passe vous a été envoyé.
57 notice_account_activated: Votre compte a été activé. Vous pouvez à présent vous connecter.
57 notice_account_activated: Votre compte a été activé. Vous pouvez à présent vous connecter.
58 notice_successful_create: Création effectuée avec succès.
58 notice_successful_create: Création effectuée avec succès.
59 notice_successful_update: Mise à jour effectuée avec succès.
59 notice_successful_update: Mise à jour effectuée avec succès.
60 notice_successful_delete: Suppression effectuée avec succès.
60 notice_successful_delete: Suppression effectuée avec succès.
61 notice_successful_connection: Connection réussie.
61 notice_successful_connection: Connection réussie.
62 notice_file_not_found: Le fichier demandé n'existe pas ou a été supprimé.
62 notice_file_not_found: Le fichier demandé n'existe pas ou a été supprimé.
63 notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible.
63 notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible.
64
64
65 mail_subject_lost_password: Votre mot de passe redMine
66 mail_subject_register: Activation de votre compte redMine
67
65 gui_validation_error: 1 erreur
68 gui_validation_error: 1 erreur
66 gui_validation_error_plural: %d erreurs
69 gui_validation_error_plural: %d erreurs
67
70
68 field_name: Nom
71 field_name: Nom
69 field_description: Description
72 field_description: Description
70 field_summary: Résumé
73 field_summary: Résumé
71 field_is_required: Obligatoire
74 field_is_required: Obligatoire
72 field_firstname: Prénom
75 field_firstname: Prénom
73 field_lastname: Nom
76 field_lastname: Nom
74 field_mail: Email
77 field_mail: Email
75 field_filename: Fichier
78 field_filename: Fichier
76 field_filesize: Taille
79 field_filesize: Taille
77 field_downloads: Téléchargements
80 field_downloads: Téléchargements
78 field_author: Auteur
81 field_author: Auteur
79 field_created_on: Créé
82 field_created_on: Créé
80 field_updated_on: Mis à jour
83 field_updated_on: Mis à jour
81 field_field_format: Format
84 field_field_format: Format
82 field_is_for_all: Pour tous les projets
85 field_is_for_all: Pour tous les projets
83 field_possible_values: Valeurs possibles
86 field_possible_values: Valeurs possibles
84 field_regexp: Expression régulière
87 field_regexp: Expression régulière
85 field_min_length: Longueur minimum
88 field_min_length: Longueur minimum
86 field_max_length: Longueur maximum
89 field_max_length: Longueur maximum
87 field_value: Valeur
90 field_value: Valeur
88 field_category: Catégorie
91 field_category: Catégorie
89 field_title: Titre
92 field_title: Titre
90 field_project: Projet
93 field_project: Projet
91 field_issue: Demande
94 field_issue: Demande
92 field_status: Statut
95 field_status: Statut
93 field_notes: Notes
96 field_notes: Notes
94 field_is_closed: Demande fermée
97 field_is_closed: Demande fermée
95 field_is_default: Statut par défaut
98 field_is_default: Statut par défaut
96 field_html_color: Couleur
99 field_html_color: Couleur
97 field_tracker: Tracker
100 field_tracker: Tracker
98 field_subject: Sujet
101 field_subject: Sujet
99 field_due_date: Date d'échéance
102 field_due_date: Date d'échéance
100 field_assigned_to: Assigné à
103 field_assigned_to: Assigné à
101 field_priority: Priorité
104 field_priority: Priorité
102 field_fixed_version: Version corrigée
105 field_fixed_version: Version corrigée
103 field_user: Utilisateur
106 field_user: Utilisateur
104 field_role: Rôle
107 field_role: Rôle
105 field_homepage: Site web
108 field_homepage: Site web
106 field_is_public: Public
109 field_is_public: Public
107 field_parent: Sous-projet de
110 field_parent: Sous-projet de
108 field_is_in_chlog: Demandes affichées dans l'historique
111 field_is_in_chlog: Demandes affichées dans l'historique
109 field_login: Identifiant
112 field_login: Identifiant
110 field_mail_notification: Notifications par mail
113 field_mail_notification: Notifications par mail
111 field_admin: Administrateur
114 field_admin: Administrateur
112 field_locked: Verrouillé
115 field_locked: Verrouillé
113 field_last_login_on: Dernière connexion
116 field_last_login_on: Dernière connexion
114 field_language: Langue
117 field_language: Langue
115 field_effective_date: Date
118 field_effective_date: Date
116 field_password: Mot de passe
119 field_password: Mot de passe
117 field_new_password: Nouveau mot de passe
120 field_new_password: Nouveau mot de passe
118 field_password_confirmation: Confirmation
121 field_password_confirmation: Confirmation
119 field_version: Version
122 field_version: Version
120 field_type: Type
123 field_type: Type
121 field_host: Hôte
124 field_host: Hôte
122 field_port: Port
125 field_port: Port
123 field_account: Compte
126 field_account: Compte
124 field_base_dn: Base DN
127 field_base_dn: Base DN
125 field_attr_login: Attribut Identifiant
128 field_attr_login: Attribut Identifiant
126 field_attr_firstname: Attribut Prénom
129 field_attr_firstname: Attribut Prénom
127 field_attr_lastname: Attribut Nom
130 field_attr_lastname: Attribut Nom
128 field_attr_mail: Attribut Email
131 field_attr_mail: Attribut Email
129 field_onthefly: Création des utilisateurs à la volée
132 field_onthefly: Création des utilisateurs à la volée
130
133
131 label_user: Utilisateur
134 label_user: Utilisateur
132 label_user_plural: Utilisateurs
135 label_user_plural: Utilisateurs
133 label_user_new: Nouvel utilisateur
136 label_user_new: Nouvel utilisateur
134 label_project: Projet
137 label_project: Projet
135 label_project_new: Nouveau projet
138 label_project_new: Nouveau projet
136 label_project_plural: Projets
139 label_project_plural: Projets
137 label_project_latest: Derniers projets
140 label_project_latest: Derniers projets
138 label_issue: Demande
141 label_issue: Demande
139 label_issue_new: Nouvelle demande
142 label_issue_new: Nouvelle demande
140 label_issue_plural: Demandes
143 label_issue_plural: Demandes
141 label_issue_view_all: Voir toutes les demandes
144 label_issue_view_all: Voir toutes les demandes
142 label_document: Document
145 label_document: Document
143 label_document_new: Nouveau document
146 label_document_new: Nouveau document
144 label_document_plural: Documents
147 label_document_plural: Documents
145 label_role: Rôle
148 label_role: Rôle
146 label_role_plural: Rôles
149 label_role_plural: Rôles
147 label_role_new: Nouveau rôle
150 label_role_new: Nouveau rôle
148 label_role_and_permissions: Rôles et permissions
151 label_role_and_permissions: Rôles et permissions
149 label_member: Membre
152 label_member: Membre
150 label_member_new: Nouveau membre
153 label_member_new: Nouveau membre
151 label_member_plural: Membres
154 label_member_plural: Membres
152 label_tracker: Tracker
155 label_tracker: Tracker
153 label_tracker_plural: Trackers
156 label_tracker_plural: Trackers
154 label_tracker_new: Nouveau tracker
157 label_tracker_new: Nouveau tracker
155 label_workflow: Workflow
158 label_workflow: Workflow
156 label_issue_status: Statut de demandes
159 label_issue_status: Statut de demandes
157 label_issue_status_plural: Statuts de demandes
160 label_issue_status_plural: Statuts de demandes
158 label_issue_status_new: Nouveau statut
161 label_issue_status_new: Nouveau statut
159 label_issue_category: Catégorie de demandes
162 label_issue_category: Catégorie de demandes
160 label_issue_category_plural: Catégories de demandes
163 label_issue_category_plural: Catégories de demandes
161 label_issue_category_new: Nouvelle catégorie
164 label_issue_category_new: Nouvelle catégorie
162 label_custom_field: Champ personnalisé
165 label_custom_field: Champ personnalisé
163 label_custom_field_plural: Champs personnalisés
166 label_custom_field_plural: Champs personnalisés
164 label_custom_field_new: Nouveau champ personnalisé
167 label_custom_field_new: Nouveau champ personnalisé
165 label_enumerations: Listes de valeurs
168 label_enumerations: Listes de valeurs
166 label_enumeration_new: Nouvelle valeur
169 label_enumeration_new: Nouvelle valeur
167 label_information: Information
170 label_information: Information
168 label_information_plural: Informations
171 label_information_plural: Informations
169 label_please_login: Identification
172 label_please_login: Identification
170 label_register: S'enregistrer
173 label_register: S'enregistrer
171 label_password_lost: Mot de passe perdu
174 label_password_lost: Mot de passe perdu
172 label_home: Accueil
175 label_home: Accueil
173 label_my_page: Ma page
176 label_my_page: Ma page
174 label_my_account: Mon compte
177 label_my_account: Mon compte
175 label_my_projects: Mes projets
178 label_my_projects: Mes projets
176 label_administration: Administration
179 label_administration: Administration
177 label_login: Connexion
180 label_login: Connexion
178 label_logout: Déconnexion
181 label_logout: Déconnexion
179 label_help: Aide
182 label_help: Aide
180 label_reported_issues: Demandes soumises
183 label_reported_issues: Demandes soumises
181 label_assigned_to_me_issues: Demandes qui me sont assignées
184 label_assigned_to_me_issues: Demandes qui me sont assignées
182 label_last_login: Dernière connexion
185 label_last_login: Dernière connexion
183 label_last_updates: Dernière mise à jour
186 label_last_updates: Dernière mise à jour
184 label_last_updates_plural: %d dernières mises à jour
187 label_last_updates_plural: %d dernières mises à jour
185 label_registered_on: Inscrit le
188 label_registered_on: Inscrit le
186 label_activity: Activité
189 label_activity: Activité
187 label_new: Nouveau
190 label_new: Nouveau
188 label_logged_as: Connecté en tant que
191 label_logged_as: Connecté en tant que
189 label_environment: Environnement
192 label_environment: Environnement
190 label_authentication: Authentification
193 label_authentication: Authentification
191 label_auth_source: Mode d'authentification
194 label_auth_source: Mode d'authentification
192 label_auth_source_new: Nouveau mode d'authentification
195 label_auth_source_new: Nouveau mode d'authentification
193 label_auth_source_plural: Modes d'authentification
196 label_auth_source_plural: Modes d'authentification
194 label_subproject: Sous-projet
197 label_subproject: Sous-projet
195 label_subproject_plural: Sous-projets
198 label_subproject_plural: Sous-projets
196 label_min_max_length: Longueurs mini - maxi
199 label_min_max_length: Longueurs mini - maxi
197 label_list: Liste
200 label_list: Liste
198 label_date: Date
201 label_date: Date
199 label_integer: Entier
202 label_integer: Entier
200 label_boolean: Booléen
203 label_boolean: Booléen
201 label_string: Chaîne
204 label_string: Chaîne
202 label_text: Texte
205 label_text: Texte
203 label_attribute: Attribut
206 label_attribute: Attribut
204 label_attribute_plural: Attributs
207 label_attribute_plural: Attributs
205 label_download: %d Téléchargement
208 label_download: %d Téléchargement
206 label_download_plural: %d Téléchargements
209 label_download_plural: %d Téléchargements
207 label_no_data: Aucune donnée à afficher
210 label_no_data: Aucune donnée à afficher
208 label_change_status: Changer le statut
211 label_change_status: Changer le statut
209 label_history: Historique
212 label_history: Historique
210 label_attachment: Fichier
213 label_attachment: Fichier
211 label_attachment_new: Nouveau fichier
214 label_attachment_new: Nouveau fichier
212 label_attachment_delete: Supprimer le fichier
215 label_attachment_delete: Supprimer le fichier
213 label_attachment_plural: Fichiers
216 label_attachment_plural: Fichiers
214 label_report: Rapport
217 label_report: Rapport
215 label_report_plural: Rapports
218 label_report_plural: Rapports
216 label_news: Annonce
219 label_news: Annonce
217 label_news_new: Nouvelle annonce
220 label_news_new: Nouvelle annonce
218 label_news_plural: Annonces
221 label_news_plural: Annonces
219 label_news_latest: Dernières annonces
222 label_news_latest: Dernières annonces
220 label_news_view_all: Voir toutes les annonces
223 label_news_view_all: Voir toutes les annonces
221 label_change_log: Historique
224 label_change_log: Historique
222 label_settings: Configuration
225 label_settings: Configuration
223 label_overview: Aperçu
226 label_overview: Aperçu
224 label_version: Version
227 label_version: Version
225 label_version_new: Nouvelle version
228 label_version_new: Nouvelle version
226 label_version_plural: Versions
229 label_version_plural: Versions
227 label_confirmation: Confirmation
230 label_confirmation: Confirmation
228 label_export_csv: Exporter en CSV
231 label_export_csv: Exporter en CSV
229 label_export_pdf: Exporter en PDF
232 label_export_pdf: Exporter en PDF
230 label_read: Lire...
233 label_read: Lire...
231 label_public_projects: Projets publics
234 label_public_projects: Projets publics
232 label_open_issues: Ouverte
235 label_open_issues: Ouverte
233 label_open_issues_plural: Ouvertes
236 label_open_issues_plural: Ouvertes
234 label_closed_issues: Fermée
237 label_closed_issues: Fermée
235 label_closed_issues_plural: Fermées
238 label_closed_issues_plural: Fermées
236 label_total: Total
239 label_total: Total
237 label_permissions: Permissions
240 label_permissions: Permissions
238 label_current_status: Statut actuel
241 label_current_status: Statut actuel
239 label_new_statuses_allowed: Nouveaux statuts autorisés
242 label_new_statuses_allowed: Nouveaux statuts autorisés
240 label_all: Tous
243 label_all: Tous
241 label_none: Aucun
244 label_none: Aucun
242 label_next: Suivant
245 label_next: Suivant
243 label_previous: Précédent
246 label_previous: Précédent
244 label_used_by: Utilisé par
247 label_used_by: Utilisé par
245 label_details: Détails...
248 label_details: Détails...
246 label_add_note: Ajouter une note
249 label_add_note: Ajouter une note
247 label_per_page: Par page
250 label_per_page: Par page
248
251
249 button_login: Connexion
252 button_login: Connexion
250 button_submit: Soumettre
253 button_submit: Soumettre
251 button_save: Valider
254 button_save: Valider
252 button_check_all: Tout cocher
255 button_check_all: Tout cocher
253 button_uncheck_all: Tout décocher
256 button_uncheck_all: Tout décocher
254 button_delete: Supprimer
257 button_delete: Supprimer
255 button_create: Créer
258 button_create: Créer
256 button_test: Tester
259 button_test: Tester
257 button_edit: Modifier
260 button_edit: Modifier
258 button_add: Ajouter
261 button_add: Ajouter
259 button_change: Changer
262 button_change: Changer
260 button_apply: Appliquer
263 button_apply: Appliquer
261 button_clear: Effacer
264 button_clear: Effacer
262 button_lock: Verrouiller
265 button_lock: Verrouiller
263 button_unlock: Déverrouiller
266 button_unlock: Déverrouiller
264 button_download: Télécharger
267 button_download: Télécharger
265 button_list: Lister
268 button_list: Lister
266 button_view: Voir
269 button_view: Voir
267 button_move: Déplacer
270 button_move: Déplacer
268 button_back: Retour
271 button_back: Retour
269
272
270 text_select_mail_notifications: Sélectionner les actions pour lesquelles la notification par mail doit être activée.
273 text_select_mail_notifications: Sélectionner les actions pour lesquelles la notification par mail doit être activée.
271 text_regexp_info: ex. ^[A-Z0-9]+$
274 text_regexp_info: ex. ^[A-Z0-9]+$
272 text_min_max_length_info: 0 pour aucune restriction
275 text_min_max_length_info: 0 pour aucune restriction
273 text_possible_values_info: valeurs séparées par |
276 text_possible_values_info: valeurs séparées par |
274 text_project_destroy_confirmation: Etes-vous sûr de vouloir supprimer ce projet et tout ce qui lui est rattaché ?
277 text_project_destroy_confirmation: Etes-vous sûr de vouloir supprimer ce projet et tout ce qui lui est rattaché ?
275 text_workflow_edit: Sélectionner un tracker et un rôle pour éditer le workflow
278 text_workflow_edit: Sélectionner un tracker et un rôle pour éditer le workflow
276 text_are_you_sure: Etes-vous sûr ?
279 text_are_you_sure: Etes-vous sûr ?
277
280
278 default_role_manager: Manager
281 default_role_manager: Manager
279 default_role_developper: Développeur
282 default_role_developper: Développeur
280 default_role_reporter: Rapporteur
283 default_role_reporter: Rapporteur
281 default_tracker_bug: Anomalie
284 default_tracker_bug: Anomalie
282 default_tracker_feature: Evolution
285 default_tracker_feature: Evolution
283 default_tracker_support: Assistance
286 default_tracker_support: Assistance
284 default_issue_status_new: Nouveau
287 default_issue_status_new: Nouveau
285 default_issue_status_assigned: Assigné
288 default_issue_status_assigned: Assigné
286 default_issue_status_resolved: Résolu
289 default_issue_status_resolved: Résolu
287 default_issue_status_feedback: Commentaire
290 default_issue_status_feedback: Commentaire
288 default_issue_status_closed: Fermé
291 default_issue_status_closed: Fermé
289 default_issue_status_rejected: Rejeté
292 default_issue_status_rejected: Rejeté
290 default_doc_category_user: Documentation utilisateur
293 default_doc_category_user: Documentation utilisateur
291 default_doc_category_tech: Documentation technique
294 default_doc_category_tech: Documentation technique
292 default_priority_low: Bas
295 default_priority_low: Bas
293 default_priority_normal: Normal
296 default_priority_normal: Normal
294 default_priority_high: Haut
297 default_priority_high: Haut
295 default_priority_urgent: Urgent
298 default_priority_urgent: Urgent
296 default_priority_immediate: Immédiat
299 default_priority_immediate: Immédiat
297
300
298 enumeration_issue_priorities: Priorités des demandes
301 enumeration_issue_priorities: Priorités des demandes
299 enumeration_doc_categories: Catégories des documents
302 enumeration_doc_categories: Catégories des documents
@@ -1,419 +1,428
1 /* andreas08 - an open source xhtml/css website layout by Andreas Viklund - http://andreasviklund.com . Free to use in any way and for any purpose as long as the proper credits are given to the original designer. Version: 1.0, November 28, 2005 */
1 /* andreas08 - an open source xhtml/css website layout by Andreas Viklund - http://andreasviklund.com . Free to use in any way and for any purpose as long as the proper credits are given to the original designer. Version: 1.0, November 28, 2005 */
2 /* Edited by Jean-Philippe Lang *>
2 /* Edited by Jean-Philippe Lang *>
3 /**************** Body and tag styles ****************/
3 /**************** Body and tag styles ****************/
4
4
5
5
6 #header * {margin:0; padding:0;}
6 #header * {margin:0; padding:0;}
7 p, ul, ol, li {margin:0; padding:0;}
7 p, ul, ol, li {margin:0; padding:0;}
8
8
9
9
10 body{
10 body{
11 font:76% Verdana,Tahoma,Arial,sans-serif;
11 font:76% Verdana,Tahoma,Arial,sans-serif;
12 line-height:1.4em;
12 line-height:1.4em;
13 text-align:center;
13 text-align:center;
14 color:#303030;
14 color:#303030;
15 background:#e8eaec;
15 background:#e8eaec;
16 margin:0;
16 margin:0;
17 }
17 }
18
18
19
19
20 a{
20 a{
21 color:#467aa7;
21 color:#467aa7;
22 font-weight:bold;
22 font-weight:bold;
23 text-decoration:none;
23 text-decoration:none;
24 background-color:inherit;
24 background-color:inherit;
25 }
25 }
26
26
27 a:hover{color:#2a5a8a; text-decoration:none; background-color:inherit;}
27 a:hover{color:#2a5a8a; text-decoration:none; background-color:inherit;}
28 a img{border:none;}
28 a img{border:none;}
29
29
30 p{padding:0 0 1em 0;}
30 p{padding:0 0 1em 0;}
31 p form{margin-top:0; margin-bottom:20px;}
31 p form{margin-top:0; margin-bottom:20px;}
32
32
33 img.left,img.center,img.right{padding:4px; border:1px solid #a0a0a0;}
33 img.left,img.center,img.right{padding:4px; border:1px solid #a0a0a0;}
34 img.left{float:left; margin:0 12px 5px 0;}
34 img.left{float:left; margin:0 12px 5px 0;}
35 img.center{display:block; margin:0 auto 5px auto;}
35 img.center{display:block; margin:0 auto 5px auto;}
36 img.right{float:right; margin:0 0 5px 12px;}
36 img.right{float:right; margin:0 0 5px 12px;}
37
37
38 /**************** Header and navigation styles ****************/
38 /**************** Header and navigation styles ****************/
39
39
40 #container{
40 #container{
41 width:100%;
41 width:100%;
42 min-width: 800px;
42 min-width: 800px;
43 margin:0;
43 margin:0;
44 padding:0;
44 padding:0;
45 text-align:left;
45 text-align:left;
46 background:#ffffff;
46 background:#ffffff;
47 color:#303030;
47 color:#303030;
48 }
48 }
49
49
50 #header{
50 #header{
51 height:4.5em;
51 height:4.5em;
52 /*width:758px;*/
52 /*width:758px;*/
53 margin:0;
53 margin:0;
54 background:#467aa7;
54 background:#467aa7;
55 color:#ffffff;
55 color:#ffffff;
56 margin-bottom:1px;
56 margin-bottom:1px;
57 }
57 }
58
58
59 #header h1{
59 #header h1{
60 padding:10px 0 0 20px;
60 padding:10px 0 0 20px;
61 font-size:1.8em;
61 font-size:1.8em;
62 background-color:inherit;
62 background-color:inherit;
63 color:#fff; /*rgb(152, 26, 33);*/
63 color:#fff; /*rgb(152, 26, 33);*/
64 letter-spacing:-2px;
64 letter-spacing:-2px;
65 font-weight:normal;
65 font-weight:normal;
66 }
66 }
67
67
68 #header h2{
68 #header h2{
69 margin:3px 0 0 40px;
69 margin:3px 0 0 40px;
70 font-size:1.4em;
70 font-size:1.4em;
71 background-color:inherit;
71 background-color:inherit;
72 color:#f0f2f4;
72 color:#f0f2f4;
73 letter-spacing:-1px;
73 letter-spacing:-1px;
74 font-weight:normal;
74 font-weight:normal;
75 }
75 }
76
76
77 #navigation{
77 #navigation{
78 height:2.2em;
78 height:2.2em;
79 line-height:2.2em;
79 line-height:2.2em;
80 /*width:758px;*/
80 /*width:758px;*/
81 margin:0;
81 margin:0;
82 background:#578bb8;
82 background:#578bb8;
83 color:#ffffff;
83 color:#ffffff;
84 }
84 }
85
85
86 #navigation li{
86 #navigation li{
87 float:left;
87 float:left;
88 list-style-type:none;
88 list-style-type:none;
89 border-right:1px solid #ffffff;
89 border-right:1px solid #ffffff;
90 white-space:nowrap;
90 white-space:nowrap;
91 }
91 }
92
92
93 #navigation li.right {
93 #navigation li.right {
94 float:right;
94 float:right;
95 list-style-type:none;
95 list-style-type:none;
96 border-right:0;
96 border-right:0;
97 border-left:1px solid #ffffff;
97 border-left:1px solid #ffffff;
98 white-space:nowrap;
98 white-space:nowrap;
99 }
99 }
100
100
101 #navigation li a{
101 #navigation li a{
102 display:block;
102 display:block;
103 padding:0px 10px 0px 22px;
103 padding:0px 10px 0px 22px;
104 font-size:0.8em;
104 font-size:0.8em;
105 font-weight:normal;
105 font-weight:normal;
106 /*text-transform:uppercase;*/
106 /*text-transform:uppercase;*/
107 text-decoration:none;
107 text-decoration:none;
108 background-color:inherit;
108 background-color:inherit;
109 color: #ffffff;
109 color: #ffffff;
110 }
110 }
111
111
112 * html #navigation a {width:1%;}
112 * html #navigation a {width:1%;}
113
113
114 #navigation .selected,#navigation a:hover{
114 #navigation .selected,#navigation a:hover{
115 color:#ffffff;
115 color:#ffffff;
116 text-decoration:none;
116 text-decoration:none;
117 background-color: #80b0da;
117 background-color: #80b0da;
118 }
118 }
119
119
120 /**************** Icons links *******************/
120 /**************** Icons links *******************/
121 .picHome { background: url(../images/home.png) no-repeat 4px 50%; }
121 .picHome { background: url(../images/home.png) no-repeat 4px 50%; }
122 .picUser { background: url(../images/user.png) no-repeat 4px 50%; }
122 .picUser { background: url(../images/user.png) no-repeat 4px 50%; }
123 .picUserPage { background: url(../images/user_page.png) no-repeat 4px 50%; }
123 .picUserPage { background: url(../images/user_page.png) no-repeat 4px 50%; }
124 .picAdmin { background: url(../images/admin.png) no-repeat 4px 50%; }
124 .picAdmin { background: url(../images/admin.png) no-repeat 4px 50%; }
125 .picProject { background: url(../images/projects.png) no-repeat 4px 50%; }
125 .picProject { background: url(../images/projects.png) no-repeat 4px 50%; }
126 .picLogout { background: url(../images/logout.png) no-repeat 4px 50%; }
126 .picLogout { background: url(../images/logout.png) no-repeat 4px 50%; }
127 .picHelp { background: url(../images/help.png) no-repeat 4px 50%; }
127 .picHelp { background: url(../images/help.png) no-repeat 4px 50%; }
128
128
129 /**************** Content styles ****************/
129 /**************** Content styles ****************/
130
130
131 html>body #content {
131 html>body #content {
132 height: auto;
132 height: auto;
133 min-height: 300px;
133 min-height: 300px;
134 }
134 }
135
135
136 #content{
136 #content{
137 /*float:right;*/
137 /*float:right;*/
138 /*width:530px;*/
138 /*width:530px;*/
139 width: auto;
139 width: auto;
140 height:300px;
140 height:300px;
141 font-size:0.9em;
141 font-size:0.9em;
142 padding:20px 10px 10px 20px;
142 padding:20px 10px 10px 20px;
143 /*position: absolute;*/
143 /*position: absolute;*/
144 margin-left: 120px;
144 margin-left: 120px;
145 border-left: 1px dashed #c0c0c0;
145 border-left: 1px dashed #c0c0c0;
146
146
147 }
147 }
148
148
149 #content h2{
149 #content h2{
150 display:block;
150 display:block;
151 margin:0 0 16px 0;
151 margin:0 0 16px 0;
152 font-size:1.7em;
152 font-size:1.7em;
153 font-weight:normal;
153 font-weight:normal;
154 letter-spacing:-1px;
154 letter-spacing:-1px;
155 color:#505050;
155 color:#505050;
156 background-color:inherit;
156 background-color:inherit;
157 }
157 }
158
158
159 #content h2 a{font-weight:normal;}
159 #content h2 a{font-weight:normal;}
160 #content h3{margin:0 0 12px 0; font-size:1.4em; letter-spacing:-1px;}
160 #content h3{margin:0 0 12px 0; font-size:1.4em; letter-spacing:-1px;}
161 #content a:hover,#subcontent a:hover{text-decoration:underline;}
161 #content a:hover,#subcontent a:hover{text-decoration:underline;}
162 #content ul,#content ol{margin:0 5px 16px 35px;}
162 #content ul,#content ol{margin:0 5px 16px 35px;}
163 #content dl{margin:0 5px 10px 25px;}
163 #content dl{margin:0 5px 10px 25px;}
164 #content dt{font-weight:bold; margin-bottom:5px;}
164 #content dt{font-weight:bold; margin-bottom:5px;}
165 #content dd{margin:0 0 10px 15px;}
165 #content dd{margin:0 0 10px 15px;}
166
166
167
167
168 /***********************************************/
168 /***********************************************/
169
169
170 /*
170 /*
171 form{
171 form{
172 padding:15px;
172 padding:15px;
173 margin:0 0 20px 0;
173 margin:0 0 20px 0;
174 border:1px solid #c0c0c0;
174 border:1px solid #c0c0c0;
175 background-color:#CEE1ED;
175 background-color:#CEE1ED;
176 width:600px;
176 width:600px;
177 }
177 }
178 */
178 */
179
179
180 form {
180 form {
181 display: inline;
181 display: inline;
182 }
182 }
183
183
184 .noborder {
184 .noborder {
185 border:0px;
185 border:0px;
186 Exception exceptions.AssertionError: <exceptions.AssertionError instance at 0xb7c0b20c> in <bound
186 Exception exceptions.AssertionError: <exceptions.AssertionError instance at 0xb7c0b20c> in <bound
187 method SubversionRepository.__del__ of <vclib.svn.SubversionRepository instance at 0xb7c1252c>>
187 method SubversionRepository.__del__ of <vclib.svn.SubversionRepository instance at 0xb7c1252c>>
188 ignored
188 ignored
189
189
190 background-color:#fff;
190 background-color:#fff;
191 width:100%;
191 width:100%;
192 }
192 }
193
193
194 textarea {
194 textarea {
195 padding:0;
195 padding:0;
196 margin:0;
196 margin:0;
197 }
197 }
198
198
199 input {
199 input {
200 vertical-align: middle;
200 vertical-align: middle;
201 }
201 }
202
202
203 input.button-small
203 input.button-small
204 {
204 {
205 font-size: 0.8em;
205 font-size: 0.8em;
206 }
206 }
207
207
208 select {
208 select {
209 vertical-align: middle;
209 vertical-align: middle;
210 }
210 }
211
211
212 select.select-small
212 select.select-small
213 {
213 {
214 border: 1px solid #7F9DB9;
214 border: 1px solid #7F9DB9;
215 padding: 1px;
215 padding: 1px;
216 font-size: 0.8em;
216 font-size: 0.8em;
217 }
217 }
218
218
219 .active-filter
219 .active-filter
220 {
220 {
221 background-color: #F9FA9E;
221 background-color: #F9FA9E;
222
222
223 }
223 }
224
224
225 label {
225 label {
226 font-weight: bold;
226 font-weight: bold;
227 font-size: 1em;
227 font-size: 1em;
228 }
228 }
229
229
230 fieldset {
230 fieldset {
231 border:1px solid #7F9DB9;
231 border:1px solid #7F9DB9;
232 padding: 6px;
232 padding: 6px;
233 }
233 }
234
234
235 legend {
235 legend {
236 color: #505050;
236 color: #505050;
237
237
238 }
238 }
239
239
240 .required {
240 .required {
241 color: #bb0000;
241 color: #bb0000;
242 }
242 }
243
243
244 table.listTableContent {
244 table.listTableContent {
245 border:1px solid #578bb8;
245 border:1px solid #578bb8;
246 width:99%;
246 width:99%;
247 border-collapse: collapse;
247 border-collapse: collapse;
248 }
248 }
249
249
250 table.listTableContent td {
250 table.listTableContent td {
251 padding:2px;
251 padding:2px;
252 }
252 }
253
253
254 tr.ListHead {
254 tr.ListHead {
255 background-color:#467aa7;
255 background-color:#467aa7;
256 color:#FFFFFF;
256 color:#FFFFFF;
257 text-align:center;
257 text-align:center;
258 }
258 }
259
259
260 tr.ListHead a {
260 tr.ListHead a {
261 color:#FFFFFF;
261 color:#FFFFFF;
262 text-decoration:underline;
262 text-decoration:underline;
263 }
263 }
264
264
265 tr.odd {
265 tr.odd {
266 background-color:#f0f1f2;
266 background-color:#f0f1f2;
267 }
267 }
268 tr.even {
268 tr.even {
269 background-color: #fff;
269 background-color: #fff;
270 }
270 }
271
271
272 table.reportTableContent {
272 table.reportTableContent {
273 border:1px solid #c0c0c0;
273 border:1px solid #c0c0c0;
274 width:99%;
274 width:99%;
275 border-collapse: collapse;
275 border-collapse: collapse;
276 }
276 }
277
277
278 table.reportTableContent td {
278 table.reportTableContent td {
279 padding:2px;
279 padding:2px;
280 }
280 }
281
281
282 hr { border:none; border-bottom: dotted 2px #c0c0c0; }
282 hr { border:none; border-bottom: dotted 2px #c0c0c0; }
283
283
284
284
285 /**************** Sidebar styles ****************/
285 /**************** Sidebar styles ****************/
286
286
287 #subcontent{
287 #subcontent{
288 float:left;
288 float:left;
289 clear:both;
289 clear:both;
290 width:110px;
290 width:110px;
291 padding:20px 20px 10px 5px;
291 padding:20px 20px 10px 5px;
292 }
292 }
293
293
294 #subcontent h2{
294 #subcontent h2{
295 display:block;
295 display:block;
296 margin:0 0 5px 0;
296 margin:0 0 5px 0;
297 font-size:1.0em;
297 font-size:1.0em;
298 font-weight:bold;
298 font-weight:bold;
299 text-align:left;
299 text-align:left;
300 letter-spacing:-1px;
300 letter-spacing:-1px;
301 color:#606060;
301 color:#606060;
302 background-color:inherit;
302 background-color:inherit;
303 }
303 }
304
304
305 #subcontent p{margin:0 0 16px 0; font-size:0.9em;}
305 #subcontent p{margin:0 0 16px 0; font-size:0.9em;}
306
306
307 /**************** Menublock styles ****************/
307 /**************** Menublock styles ****************/
308
308
309 .menublock{margin:0 0 20px 8px; font-size:0.8em;}
309 .menublock{margin:0 0 20px 8px; font-size:0.8em;}
310 .menublock li{list-style:none; display:block; padding:1px; margin-bottom:0px;}
310 .menublock li{list-style:none; display:block; padding:1px; margin-bottom:0px;}
311 .menublock li a{font-weight:bold; text-decoration:none;}
311 .menublock li a{font-weight:bold; text-decoration:none;}
312 .menublock li a:hover{text-decoration:none;}
312 .menublock li a:hover{text-decoration:none;}
313 .menublock li ul{margin:0; font-size:1em; font-weight:normal;}
313 .menublock li ul{margin:0; font-size:1em; font-weight:normal;}
314 .menublock li ul li{margin-bottom:0;}
314 .menublock li ul li{margin-bottom:0;}
315 .menublock li ul a{font-weight:normal;}
315 .menublock li ul a{font-weight:normal;}
316
316
317 /**************** Searchbar styles ****************/
317 /**************** Searchbar styles ****************/
318
318
319 #searchbar{margin:0 0 20px 0;}
319 #searchbar{margin:0 0 20px 0;}
320 #searchbar form fieldset{margin-left:10px; border:0 solid;}
320 #searchbar form fieldset{margin-left:10px; border:0 solid;}
321
321
322 #searchbar #s{
322 #searchbar #s{
323 height:1.2em;
323 height:1.2em;
324 width:110px;
324 width:110px;
325 margin:0 5px 0 0;
325 margin:0 5px 0 0;
326 border:1px solid #a0a0a0;
326 border:1px solid #a0a0a0;
327 }
327 }
328
328
329 #searchbar #searchbutton{
329 #searchbar #searchbutton{
330 width:auto;
330 width:auto;
331 padding:0 1px;
331 padding:0 1px;
332 border:1px solid #808080;
332 border:1px solid #808080;
333 font-size:0.9em;
333 font-size:0.9em;
334 text-align:center;
334 text-align:center;
335 }
335 }
336
336
337 /**************** Footer styles ****************/
337 /**************** Footer styles ****************/
338
338
339 #footer{
339 #footer{
340 clear:both;
340 clear:both;
341 /*width:758px;*/
341 /*width:758px;*/
342 padding:5px 0;
342 padding:5px 0;
343 margin:0;
343 margin:0;
344 font-size:0.9em;
344 font-size:0.9em;
345 color:#f0f0f0;
345 color:#f0f0f0;
346 background:#467aa7;
346 background:#467aa7;
347 }
347 }
348
348
349 #footer p{padding:0; margin:0; text-align:center;}
349 #footer p{padding:0; margin:0; text-align:center;}
350 #footer a{color:#f0f0f0; background-color:inherit; font-weight:bold;}
350 #footer a{color:#f0f0f0; background-color:inherit; font-weight:bold;}
351 #footer a:hover{color:#ffffff; background-color:inherit; text-decoration: underline;}
351 #footer a:hover{color:#ffffff; background-color:inherit; text-decoration: underline;}
352
352
353 /**************** Misc classes and styles ****************/
353 /**************** Misc classes and styles ****************/
354
354
355 .splitcontentleft{float:left; width:49%;}
355 .splitcontentleft{float:left; width:49%;}
356 .splitcontentright{float:right; width:49%;}
356 .splitcontentright{float:right; width:49%;}
357 .clear{clear:both;}
357 .clear{clear:both;}
358 .small{font-size:0.8em;line-height:1.4em;padding:0 0 0 0;}
358 .small{font-size:0.8em;line-height:1.4em;padding:0 0 0 0;}
359 .hide{display:none;}
359 .hide{display:none;}
360 .textcenter{text-align:center;}
360 .textcenter{text-align:center;}
361 .textright{text-align:right;}
361 .textright{text-align:right;}
362 .important{color:#f02025; background-color:inherit; font-weight:bold;}
362 .important{color:#f02025; background-color:inherit; font-weight:bold;}
363
363
364 .box{
364 .box{
365 margin:0 0 20px 0;
365 margin:0 0 20px 0;
366 padding:10px;
366 padding:10px;
367 border:1px solid #c0c0c0;
367 border:1px solid #c0c0c0;
368 background-color:#fafbfc;
368 background-color:#fafbfc;
369 color:#505050;
369 color:#505050;
370 line-height:1.5em;
370 line-height:1.5em;
371 }
371 }
372
372
373 .rightbox{
374 background: #fafbfc;
375 border: 1px solid #c0c0c0;
376 float: right;
377 padding: 8px;
378 position: relative;
379 margin: 0 5px 5px;
380 }
381
373 .topright{
382 .topright{
374 position: absolute;
383 position: absolute;
375 right: 25px;
384 right: 25px;
376 top: 100px;
385 top: 100px;
377 }
386 }
378
387
379 .login {
388 .login {
380 width: 50%;
389 width: 50%;
381 text-align: left;
390 text-align: left;
382 }
391 }
383
392
384 img.calendar-trigger {
393 img.calendar-trigger {
385 cursor: pointer;
394 cursor: pointer;
386 vertical-align: middle;
395 vertical-align: middle;
387 margin-left: 4px;
396 margin-left: 4px;
388 }
397 }
389
398
390
399
391 /***** CSS FORM ******/
400 /***** CSS FORM ******/
392 .tabular p{
401 .tabular p{
393 margin: 0;
402 margin: 0;
394 padding: 5px 0 8px 0;
403 padding: 5px 0 8px 0;
395 padding-left: 180px; /*width of left column containing the label elements*/
404 padding-left: 180px; /*width of left column containing the label elements*/
396 height: 1%;
405 height: 1%;
397 }
406 }
398
407
399 .tabular label{
408 .tabular label{
400 font-weight: bold;
409 font-weight: bold;
401 float: left;
410 float: left;
402 margin-left: -180px; /*width of left column*/
411 margin-left: -180px; /*width of left column*/
403 width: 175px; /*width of labels. Should be smaller than left column to create some right
412 width: 175px; /*width of labels. Should be smaller than left column to create some right
404 margin*/
413 margin*/
405 }
414 }
406
415
407 .error {
416 .error {
408 color: #cc0000;
417 color: #cc0000;
409 }
418 }
410
419
411
420
412 /*.threepxfix class below:
421 /*.threepxfix class below:
413 Targets IE6- ONLY. Adds 3 pixel indent for multi-line form contents.
422 Targets IE6- ONLY. Adds 3 pixel indent for multi-line form contents.
414 to account for 3 pixel bug: http://www.positioniseverything.net/explorer/threepxtest.html
423 to account for 3 pixel bug: http://www.positioniseverything.net/explorer/threepxtest.html
415 */
424 */
416
425
417 * html .threepxfix{
426 * html .threepxfix{
418 margin-left: 3px;
427 margin-left: 3px;
419 } No newline at end of file
428 }
General Comments 0
You need to be logged in to leave comments. Login now