* new report: project activity
* "start date" and "% done" fields added on issues * project calendar added * gantt chart added (exportable to pdf) * multiple file upload for issues attachments * user custom field displayed on account/show * default configuration improved (default roles, trackers, status, permissions and workflows) * fixed: project settings now displayed according to user's permissions git-svn-id: http://redmine.rubyforge.org/svn/trunk@44 e93f8b46-1217-0410-a6f0-8f06a7374b81
|
@ -27,6 +27,7 @@ class AccountController < ApplicationController
|
||||||
# Show user's account
|
# Show user's account
|
||||||
def show
|
def show
|
||||||
@user = User.find(params[:id])
|
@user = User.find(params[:id])
|
||||||
|
@custom_values = @user.custom_values.find(:all, :include => :custom_field)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Login request and validation
|
# Login request and validation
|
||||||
|
|
|
@ -81,6 +81,7 @@ class IssuesController < ApplicationController
|
||||||
@issue.status = @history.status
|
@issue.status = @history.status
|
||||||
@issue.fixed_version_id = (params[:issue][:fixed_version_id])
|
@issue.fixed_version_id = (params[:issue][:fixed_version_id])
|
||||||
@issue.assigned_to_id = (params[:issue][:assigned_to_id])
|
@issue.assigned_to_id = (params[:issue][:assigned_to_id])
|
||||||
|
@issue.done_ratio = (params[:issue][:done_ratio])
|
||||||
@issue.lock_version = (params[:issue][:lock_version])
|
@issue.lock_version = (params[:issue][:lock_version])
|
||||||
if @issue.save
|
if @issue.save
|
||||||
flash[:notice] = l(:notice_successful_update)
|
flash[:notice] = l(:notice_successful_update)
|
||||||
|
@ -124,5 +125,6 @@ private
|
||||||
def find_project
|
def find_project
|
||||||
@issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])
|
@issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])
|
||||||
@project = @issue.project
|
@project = @issue.project
|
||||||
|
@html_title = "#{@project.name} - #{@issue.tracker.name} ##{@issue.id}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -183,6 +183,7 @@ class ProjectsController < ApplicationController
|
||||||
@priorities = Enumeration::get_values('IPRI')
|
@priorities = Enumeration::get_values('IPRI')
|
||||||
@issue = Issue.new(:project => @project, :tracker => @tracker)
|
@issue = Issue.new(:project => @project, :tracker => @tracker)
|
||||||
if request.get?
|
if request.get?
|
||||||
|
@issue.start_date = Date.today
|
||||||
@custom_values = @project.custom_fields_for_issues(@tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue) }
|
@custom_values = @project.custom_fields_for_issues(@tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue) }
|
||||||
else
|
else
|
||||||
@issue.attributes = params[:issue]
|
@issue.attributes = params[:issue]
|
||||||
|
@ -214,7 +215,7 @@ class ProjectsController < ApplicationController
|
||||||
@results_per_page = params[:per_page].to_i
|
@results_per_page = params[:per_page].to_i
|
||||||
session[:results_per_page] = @results_per_page
|
session[:results_per_page] = @results_per_page
|
||||||
else
|
else
|
||||||
@results_per_page = session[:results_per_page] || @results_per_page_options.first
|
@results_per_page = session[:results_per_page] || 25
|
||||||
end
|
end
|
||||||
|
|
||||||
@issue_count = Issue.count(:include => [:status, :project], :conditions => search_filter_clause)
|
@issue_count = Issue.count(:include => [:status, :project], :conditions => search_filter_clause)
|
||||||
|
@ -356,16 +357,22 @@ class ProjectsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def activity
|
def activity
|
||||||
@date_from = begin
|
if params[:year] and params[:year].to_i > 1900
|
||||||
params[:date_from].to_date
|
@year = params[:year].to_i
|
||||||
rescue
|
if params[:month] and params[:month].to_i > 0 and params[:month].to_i < 13
|
||||||
end || Date.today
|
@month = params[:month].to_i
|
||||||
@days_back = params[:days_back] ? params[:days_back].to_i : 15
|
end
|
||||||
@date_to = @date_from - @days_back
|
end
|
||||||
|
@year ||= Date.today.year
|
||||||
|
@month ||= Date.today.month
|
||||||
|
|
||||||
|
@date_from = Date.civil(@year, @month, 1)
|
||||||
|
@date_to = (@date_from >> 1)-1
|
||||||
|
|
||||||
@events_by_day = {}
|
@events_by_day = {}
|
||||||
|
|
||||||
unless params[:show_issues] == "0"
|
unless params[:show_issues] == "0"
|
||||||
@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|
|
@project.issues.find(:all, :include => [:author, :status], :conditions => ["issues.created_on>=? and issues.created_on<=?", @date_from, @date_to] ).each { |i|
|
||||||
@events_by_day[i.created_on.to_date] ||= []
|
@events_by_day[i.created_on.to_date] ||= []
|
||||||
@events_by_day[i.created_on.to_date] << i
|
@events_by_day[i.created_on.to_date] << i
|
||||||
}
|
}
|
||||||
|
@ -373,7 +380,7 @@ class ProjectsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
unless params[:show_news] == "0"
|
unless params[:show_news] == "0"
|
||||||
@project.news.find(:all, :conditions => ["news.created_on<=? and news.created_on>=?", @date_from+1, @date_to], :order => "news.created_on asc" ).each { |i|
|
@project.news.find(:all, :conditions => ["news.created_on>=? and news.created_on<=?", @date_from, @date_to] ).each { |i|
|
||||||
@events_by_day[i.created_on.to_date] ||= []
|
@events_by_day[i.created_on.to_date] ||= []
|
||||||
@events_by_day[i.created_on.to_date] << i
|
@events_by_day[i.created_on.to_date] << i
|
||||||
}
|
}
|
||||||
|
@ -381,7 +388,7 @@ class ProjectsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
unless params[:show_files] == "0"
|
unless params[:show_files] == "0"
|
||||||
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|
|
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, @date_to] ).each { |i|
|
||||||
@events_by_day[i.created_on.to_date] ||= []
|
@events_by_day[i.created_on.to_date] ||= []
|
||||||
@events_by_day[i.created_on.to_date] << i
|
@events_by_day[i.created_on.to_date] << i
|
||||||
}
|
}
|
||||||
|
@ -389,7 +396,7 @@ class ProjectsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
unless params[:show_documentss] == "0"
|
unless params[:show_documentss] == "0"
|
||||||
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|
|
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, @date_to] ).each { |i|
|
||||||
@events_by_day[i.created_on.to_date] ||= []
|
@events_by_day[i.created_on.to_date] ||= []
|
||||||
@events_by_day[i.created_on.to_date] << i
|
@events_by_day[i.created_on.to_date] << i
|
||||||
}
|
}
|
||||||
|
@ -397,12 +404,64 @@ class ProjectsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def calendar
|
||||||
|
if params[:year] and params[:year].to_i > 1900
|
||||||
|
@year = params[:year].to_i
|
||||||
|
if params[:month] and params[:month].to_i > 0 and params[:month].to_i < 13
|
||||||
|
@month = params[:month].to_i
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@year ||= Date.today.year
|
||||||
|
@month ||= Date.today.month
|
||||||
|
|
||||||
|
@date_from = Date.civil(@year, @month, 1)
|
||||||
|
@date_to = (@date_from >> 1)-1
|
||||||
|
# start on monday
|
||||||
|
@date_from = @date_from - (@date_from.cwday-1)
|
||||||
|
# finish on sunday
|
||||||
|
@date_to = @date_to + (7-@date_to.cwday)
|
||||||
|
|
||||||
|
@issues = @project.issues.find(:all, :include => :tracker, :conditions => ["((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?))", @date_from, @date_to, @date_from, @date_to])
|
||||||
|
render :layout => false if request.xhr?
|
||||||
|
end
|
||||||
|
|
||||||
|
def gantt
|
||||||
|
if params[:year] and params[:year].to_i >0
|
||||||
|
@year_from = params[:year].to_i
|
||||||
|
if params[:month] and params[:month].to_i >=1 and params[:month].to_i <= 12
|
||||||
|
@month_from = params[:month].to_i
|
||||||
|
else
|
||||||
|
@month_from = 1
|
||||||
|
end
|
||||||
|
else
|
||||||
|
@month_from ||= (Date.today << 1).month
|
||||||
|
@year_from ||= (Date.today << 1).year
|
||||||
|
end
|
||||||
|
|
||||||
|
@zoom = (params[:zoom].to_i > 0 and params[:zoom].to_i < 5) ? params[:zoom].to_i : 2
|
||||||
|
@months = (params[:months].to_i > 0 and params[:months].to_i < 25) ? params[:months].to_i : 6
|
||||||
|
|
||||||
|
@date_from = Date.civil(@year_from, @month_from, 1)
|
||||||
|
@date_to = (@date_from >> @months) - 1
|
||||||
|
@issues = @project.issues.find(:all, :order => "start_date, due_date", :conditions => ["(((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?) or (start_date<? and due_date>?)) and start_date is not null and due_date is not null)", @date_from, @date_to, @date_from, @date_to, @date_from, @date_to])
|
||||||
|
|
||||||
|
if params[:output]=='pdf'
|
||||||
|
@options_for_rfpdf ||= {}
|
||||||
|
@options_for_rfpdf[:file_name] = "gantt.pdf"
|
||||||
|
render :template => "projects/gantt.rfpdf", :layout => false
|
||||||
|
else
|
||||||
|
render :template => "projects/gantt.rhtml"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
# Find project of id params[:id]
|
# Find project of id params[:id]
|
||||||
# if not found, redirect to project list
|
# if not found, redirect to project list
|
||||||
# Used as a before_filter
|
# Used as a before_filter
|
||||||
def find_project
|
def find_project
|
||||||
@project = Project.find(params[:id])
|
@project = Project.find(params[:id])
|
||||||
|
@html_title = @project.name
|
||||||
rescue
|
rescue
|
||||||
redirect_to :action => 'list'
|
redirect_to :action => 'list'
|
||||||
end
|
end
|
||||||
|
|
|
@ -51,7 +51,7 @@ class UsersController < ApplicationController
|
||||||
@user = User.new(params[:user])
|
@user = User.new(params[:user])
|
||||||
@user.admin = params[:user][:admin] || false
|
@user.admin = params[:user][:admin] || false
|
||||||
@user.login = params[:user][:login]
|
@user.login = params[:user][:login]
|
||||||
@user.password, @user.password_confirmation = params[:password], params[:password_confirmation]
|
@user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id
|
||||||
@custom_values = UserCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @user, :value => params["custom_fields"][x.id.to_s]) }
|
@custom_values = UserCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @user, :value => params["custom_fields"][x.id.to_s]) }
|
||||||
@user.custom_values = @custom_values
|
@user.custom_values = @custom_values
|
||||||
if @user.save
|
if @user.save
|
||||||
|
@ -59,6 +59,7 @@ class UsersController < ApplicationController
|
||||||
redirect_to :action => 'list'
|
redirect_to :action => 'list'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@auth_sources = AuthSource.find(:all)
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
|
@ -68,7 +69,7 @@ class UsersController < ApplicationController
|
||||||
else
|
else
|
||||||
@user.admin = params[:user][:admin] if params[:user][:admin]
|
@user.admin = params[:user][:admin] if params[:user][:admin]
|
||||||
@user.login = params[:user][:login] if params[:user][:login]
|
@user.login = params[:user][:login] if params[:user][:login]
|
||||||
@user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless params[:password].nil? or params[:password].empty?
|
@user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless params[:password].nil? or params[:password].empty? or @user.auth_source_id
|
||||||
if params[:custom_fields]
|
if params[:custom_fields]
|
||||||
@custom_values = UserCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @user, :value => params["custom_fields"][x.id.to_s]) }
|
@custom_values = UserCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @user, :value => params["custom_fields"][x.id.to_s]) }
|
||||||
@user.custom_values = @custom_values
|
@user.custom_values = @custom_values
|
||||||
|
@ -78,6 +79,7 @@ class UsersController < ApplicationController
|
||||||
redirect_to :action => 'list'
|
redirect_to :action => 'list'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@auth_sources = AuthSource.find(:all)
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
|
|
|
@ -58,6 +58,10 @@ module ApplicationHelper
|
||||||
l_datetime(time) if time
|
l_datetime(time) if time
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def day_name(day)
|
||||||
|
l(:general_day_names).split(',')[day-1]
|
||||||
|
end
|
||||||
|
|
||||||
def pagination_links_full(paginator, options={}, html_options={})
|
def pagination_links_full(paginator, options={}, html_options={})
|
||||||
html = ''
|
html = ''
|
||||||
html << link_to_remote(('« ' + l(:label_previous)),
|
html << link_to_remote(('« ' + l(:label_previous)),
|
||||||
|
@ -76,6 +80,10 @@ module ApplicationHelper
|
||||||
html
|
html
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def textilizable(text)
|
||||||
|
$RDM_TEXTILE_DISABLED ? text : textilize(text)
|
||||||
|
end
|
||||||
|
|
||||||
def error_messages_for(object_name, options = {})
|
def error_messages_for(object_name, options = {})
|
||||||
options = options.symbolize_keys
|
options = options.symbolize_keys
|
||||||
object = instance_variable_get("@#{object_name}")
|
object = instance_variable_get("@#{object_name}")
|
||||||
|
|
|
@ -33,6 +33,7 @@ class Issue < ActiveRecord::Base
|
||||||
has_many :custom_fields, :through => :custom_values
|
has_many :custom_fields, :through => :custom_values
|
||||||
|
|
||||||
validates_presence_of :subject, :description, :priority, :tracker, :author, :status
|
validates_presence_of :subject, :description, :priority, :tracker, :author, :status
|
||||||
|
validates_inclusion_of :done_ratio, :in => 0..100
|
||||||
validates_associated :custom_values, :on => :update
|
validates_associated :custom_values, :on => :update
|
||||||
|
|
||||||
# set default status for new issues
|
# set default status for new issues
|
||||||
|
@ -44,6 +45,10 @@ class Issue < ActiveRecord::Base
|
||||||
if self.due_date.nil? && @attributes['due_date'] && !@attributes['due_date'].empty?
|
if self.due_date.nil? && @attributes['due_date'] && !@attributes['due_date'].empty?
|
||||||
errors.add :due_date, :activerecord_error_not_a_date
|
errors.add :due_date, :activerecord_error_not_a_date
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if self.due_date and self.start_date and self.due_date < self.start_date
|
||||||
|
errors.add :due_date, :activerecord_error_greater_than_start_date
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def before_create
|
def before_create
|
||||||
|
|
|
@ -1,8 +1,15 @@
|
||||||
<h2><%= @user.display_name %></h2>
|
<h2><%= @user.display_name %></h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<%= mail_to @user.mail %><br />
|
<%= mail_to @user.mail %>
|
||||||
<%=l(:label_registered_on)%>: <%= format_date(@user.created_on) %>
|
<ul>
|
||||||
|
<li><%=l(:label_registered_on)%>: <%= format_date(@user.created_on) %></li>
|
||||||
|
<% for custom_value in @custom_values %>
|
||||||
|
<% if !custom_value.value.empty? %>
|
||||||
|
<li><%= custom_value.custom_field.name%>: <%= show_value(custom_value) %></li>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3><%=l(:label_project_plural)%></h3>
|
<h3><%=l(:label_project_plural)%></h3>
|
||||||
|
|
|
@ -15,6 +15,12 @@
|
||||||
<%= options_from_collection_for_select @assignable_to, "id", "display_name", @issue.assigned_to_id %></p>
|
<%= options_from_collection_for_select @assignable_to, "id", "display_name", @issue.assigned_to_id %></p>
|
||||||
</select></p>
|
</select></p>
|
||||||
|
|
||||||
|
|
||||||
|
<p><label for="issue_done_ratio"><%=l(:field_done_ratio)%></label>
|
||||||
|
<%= select("issue", "done_ratio", ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) ) %>
|
||||||
|
</select></p>
|
||||||
|
|
||||||
|
|
||||||
<p><label for="issue_fixed_version"><%=l(:field_fixed_version)%></label>
|
<p><label for="issue_fixed_version"><%=l(:field_fixed_version)%></label>
|
||||||
<select name="issue[fixed_version_id]">
|
<select name="issue[fixed_version_id]">
|
||||||
<option value="">--none--</option>
|
<option value="">--none--</option>
|
||||||
|
|
|
@ -4,14 +4,22 @@
|
||||||
<%= error_messages_for 'issue' %>
|
<%= error_messages_for 'issue' %>
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<!--[form:issue]-->
|
<!--[form:issue]-->
|
||||||
|
<div class="splitcontentleft">
|
||||||
<p><label><%=l(:field_status)%></label> <%= @issue.status.name %></p>
|
<p><label><%=l(:field_status)%></label> <%= @issue.status.name %></p>
|
||||||
|
|
||||||
<p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>
|
<p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>
|
||||||
<p><%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %></p>
|
<p><%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %></p>
|
||||||
<p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}) %></p>
|
<p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}) %></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="splitcontentright">
|
||||||
|
<p><%= f.text_field :start_date, :size => 10 %><%= calendar_for('issue_start_date') %></p>
|
||||||
|
<p><%= f.text_field :due_date, :size => 10 %><%= calendar_for('issue_due_date') %></p>
|
||||||
|
<p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) %></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="clear">
|
||||||
<p><%= f.text_field :subject, :size => 80, :required => true %></p>
|
<p><%= f.text_field :subject, :size => 80, :required => true %></p>
|
||||||
<p><%= f.text_area :description, :cols => 60, :rows => 10, :required => true %></p>
|
<p><%= f.text_area :description, :cols => 60, :rows => 10, :required => true %></p>
|
||||||
<p><%= f.text_field :due_date, :size => 10 %><%= calendar_for('issue_due_date') %></p>
|
|
||||||
|
|
||||||
<% for @custom_value in @custom_values %>
|
<% for @custom_value in @custom_values %>
|
||||||
<p><%= custom_field_tag_with_label @custom_value %></p>
|
<p><%= custom_field_tag_with_label @custom_value %></p>
|
||||||
|
@ -19,36 +27,23 @@
|
||||||
|
|
||||||
<p><%= f.select :fixed_version_id, (@project.versions.collect {|v| [v.name, v.id]}), { :include_blank => true } %>
|
<p><%= f.select :fixed_version_id, (@project.versions.collect {|v| [v.name, v.id]}), { :include_blank => true } %>
|
||||||
</select></p>
|
</select></p>
|
||||||
|
</div>
|
||||||
<!--[eoform:issue]-->
|
<!--[eoform:issue]-->
|
||||||
</div>
|
</div>
|
||||||
<%= f.hidden_field :lock_version %>
|
<%= f.hidden_field :lock_version %>
|
||||||
<%= submit_tag l(:button_save) %>
|
<%= submit_tag l(:button_save) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<% unless $RDM_TEXTILE_DISABLED %>
|
||||||
<%= javascript_include_tag 'jstoolbar' %>
|
<%= javascript_include_tag 'jstoolbar' %>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
//<![CDATA[
|
//<![CDATA[
|
||||||
jsToolBar.prototype.base_url = 'http://callmepep.org';
|
|
||||||
jsToolBar.prototype.legend_msg = 'You can use the following shortcuts to format your text.';
|
|
||||||
jsToolBar.prototype.elements.strong.title = 'Strong emphasis';
|
|
||||||
jsToolBar.prototype.elements.em.title = 'Emphasis';
|
|
||||||
jsToolBar.prototype.elements.ins.title = 'Inserted';
|
|
||||||
jsToolBar.prototype.elements.del.title = 'Deleted';
|
|
||||||
jsToolBar.prototype.elements.quote.title = 'Inline quote';
|
|
||||||
jsToolBar.prototype.elements.code.title = 'Code';
|
|
||||||
jsToolBar.prototype.elements.br.title = 'Line break';
|
|
||||||
jsToolBar.prototype.elements.ul.title = 'Unordered list';
|
|
||||||
jsToolBar.prototype.elements.ol.title = 'Ordered list';
|
|
||||||
jsToolBar.prototype.elements.link.title = 'Link';
|
|
||||||
jsToolBar.prototype.elements.link.href_prompt = 'URL?';
|
|
||||||
jsToolBar.prototype.elements.link.hreflang_prompt = 'Language?';
|
|
||||||
|
|
||||||
if (document.getElementById) {
|
if (document.getElementById) {
|
||||||
if (document.getElementById('issue_description')) {
|
if (document.getElementById('issue_description')) {
|
||||||
var commentTb = new jsToolBar(document.getElementById('issue_description'));
|
var commentTb = new jsToolBar(document.getElementById('issue_description'));
|
||||||
commentTb.draw();
|
commentTb.draw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//]]>
|
//]]>
|
||||||
</script>
|
</script>
|
||||||
|
<% end %>
|
|
@ -12,16 +12,20 @@
|
||||||
<td width="15%"><b><%=l(:field_priority)%> :</b></td><td width="35%"><%= @issue.priority.name %></td>
|
<td width="15%"><b><%=l(:field_priority)%> :</b></td><td width="35%"><%= @issue.priority.name %></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><b><%=l(:field_author)%> :</b></td><td><%= link_to_user @issue.author %></td>
|
<td><b><%=l(:field_assigned_to)%> :</b></td><td><%= @issue.assigned_to ? @issue.assigned_to.name : "-" %></td>
|
||||||
<td><b><%=l(:field_category)%> :</b></td><td><%= @issue.category ? @issue.category.name : "-" %></td>
|
<td><b><%=l(:field_category)%> :</b></td><td><%= @issue.category ? @issue.category.name : "-" %></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><b><%=l(:field_author)%> :</b></td><td><%= link_to_user @issue.author %></td>
|
||||||
|
<td><b><%=l(:field_start_date)%> :</b></td><td><%= format_date(@issue.start_date) %></td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><b><%=l(:field_created_on)%> :</b></td><td><%= format_date(@issue.created_on) %></td>
|
<td><b><%=l(:field_created_on)%> :</b></td><td><%= format_date(@issue.created_on) %></td>
|
||||||
<td><b><%=l(:field_assigned_to)%> :</b></td><td><%= @issue.assigned_to ? @issue.assigned_to.name : "-" %></td>
|
<td><b><%=l(:field_due_date)%> :</b></td><td><%= format_date(@issue.due_date) %></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><b><%=l(:field_updated_on)%> :</b></td><td><%= format_date(@issue.updated_on) %></td>
|
<td><b><%=l(:field_updated_on)%> :</b></td><td><%= format_date(@issue.updated_on) %></td>
|
||||||
<td><b><%=l(:field_due_date)%> :</b></td><td><%= format_date(@issue.due_date) %></td>
|
<td><b><%=l(:field_done_ratio)%> :</b></td><td><%= @issue.done_ratio %> %</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<% n = 0
|
<% n = 0
|
||||||
|
@ -39,7 +43,7 @@ end %>
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
<b><%=l(:field_description)%> :</b><br /><br />
|
<b><%=l(:field_description)%> :</b><br /><br />
|
||||||
<%= textilize @issue.description %>
|
<%= textilizable @issue.description %>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<% if authorize_for('issues', 'edit') %>
|
<% if authorize_for('issues', 'edit') %>
|
||||||
|
@ -98,7 +102,7 @@ end %>
|
||||||
<table width="100%">
|
<table width="100%">
|
||||||
<% for attachment in @issue.attachments %>
|
<% for attachment in @issue.attachments %>
|
||||||
<tr>
|
<tr>
|
||||||
<td><%= link_to attachment.filename, :action => 'download', :id => @issue, :attachment_id => attachment %> (<%= human_size(attachment.filesize) %>)</td>
|
<td><%= image_tag('attachment') %> <%= link_to attachment.filename, :action => 'download', :id => @issue, :attachment_id => attachment %> (<%= human_size(attachment.filesize) %>)</td>
|
||||||
<td><%= format_date(attachment.created_on) %></td>
|
<td><%= format_date(attachment.created_on) %></td>
|
||||||
<td><%= attachment.author.display_name %></td>
|
<td><%= attachment.author.display_name %></td>
|
||||||
<% if authorize_for('issues', 'destroy_attachment') %>
|
<% if authorize_for('issues', 'destroy_attachment') %>
|
||||||
|
@ -114,8 +118,8 @@ end %>
|
||||||
<br />
|
<br />
|
||||||
<% if authorize_for('issues', 'add_attachment') %>
|
<% if authorize_for('issues', 'add_attachment') %>
|
||||||
<%= start_form_tag ({ :controller => 'issues', :action => 'add_attachment', :id => @issue }, :multipart => true, :class => "tabular") %>
|
<%= start_form_tag ({ :controller => 'issues', :action => 'add_attachment', :id => @issue }, :multipart => true, :class => "tabular") %>
|
||||||
<p id="attachments_p"><label><%=l(:label_attachment_new)%>
|
<p id="attachments_p"><label><%=l(:label_attachment_new)%>
|
||||||
<%= link_to_function image_tag('add', :align => "top"), "addFileField()" %></label>
|
<%= link_to_function image_tag('add'), "addFileField()" %></label>
|
||||||
<%= file_field_tag 'attachments[]', :size => 30 %></p>
|
<%= file_field_tag 'attachments[]', :size => 30 %></p>
|
||||||
<%= submit_tag l(:button_add) %>
|
<%= submit_tag l(:button_add) %>
|
||||||
<%= end_form_tag %>
|
<%= end_form_tag %>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||||
<head>
|
<head>
|
||||||
<title><%= $RDM_HEADER_TITLE %></title>
|
<title><%= $RDM_HEADER_TITLE + (@html_title ? ": #{@html_title}" : "") %></title>
|
||||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||||
<meta name="description" content="redMine" />
|
<meta name="description" content="redMine" />
|
||||||
<meta name="keywords" content="issue,bug,tracker" />
|
<meta name="keywords" content="issue,bug,tracker" />
|
||||||
|
@ -37,6 +37,7 @@ var menu_contenu=' \
|
||||||
\
|
\
|
||||||
<% unless @project.nil? || @project.id.nil? %> \
|
<% unless @project.nil? || @project.id.nil? %> \
|
||||||
<div id="menuProject" class="menu" onmouseover="menuMouseover(event)"> \
|
<div id="menuProject" class="menu" onmouseover="menuMouseover(event)"> \
|
||||||
|
<%= link_to l(:label_calendar), {:controller => 'projects', :action => 'calendar', :id => @project }, :class => "menuItem" %> \
|
||||||
<%= link_to l(:label_issue_plural), {:controller => 'projects', :action => 'list_issues', :id => @project }, :class => "menuItem" %> \
|
<%= link_to l(:label_issue_plural), {:controller => 'projects', :action => 'list_issues', :id => @project }, :class => "menuItem" %> \
|
||||||
<%= link_to l(:label_report_plural), {:controller => 'reports', :action => 'issue_report', :id => @project }, :class => "menuItem" %> \
|
<%= link_to l(:label_report_plural), {:controller => 'reports', :action => 'issue_report', :id => @project }, :class => "menuItem" %> \
|
||||||
<%= link_to l(:label_activity), {:controller => 'projects', :action => 'activity', :id => @project }, :class => "menuItem" %> \
|
<%= link_to l(:label_activity), {:controller => 'projects', :action => 'activity', :id => @project }, :class => "menuItem" %> \
|
||||||
|
@ -101,6 +102,7 @@ var menu_contenu=' \
|
||||||
<h2><%= @project.name %></h2>
|
<h2><%= @project.name %></h2>
|
||||||
<ul class="menublock">
|
<ul class="menublock">
|
||||||
<li><%= link_to l(:label_overview), :controller => 'projects', :action => 'show', :id => @project %></li>
|
<li><%= link_to l(:label_overview), :controller => 'projects', :action => 'show', :id => @project %></li>
|
||||||
|
<li><%= link_to l(:label_calendar), :controller => 'projects', :action => 'calendar', :id => @project %></li>
|
||||||
<li><%= link_to l(:label_issue_plural), :controller => 'projects', :action => 'list_issues', :id => @project %></li>
|
<li><%= link_to l(:label_issue_plural), :controller => 'projects', :action => 'list_issues', :id => @project %></li>
|
||||||
<li><%= link_to l(:label_report_plural), :controller => 'reports', :action => 'issue_report', :id => @project %></li>
|
<li><%= link_to l(:label_report_plural), :controller => 'reports', :action => 'issue_report', :id => @project %></li>
|
||||||
<li><%= link_to l(:label_activity), :controller => 'projects', :action => 'activity', :id => @project %></li>
|
<li><%= link_to l(:label_activity), :controller => 'projects', :action => 'activity', :id => @project %></li>
|
||||||
|
|
|
@ -4,3 +4,17 @@
|
||||||
<p><%= f.text_area :summary, :cols => 60, :rows => 2 %></p>
|
<p><%= f.text_area :summary, :cols => 60, :rows => 2 %></p>
|
||||||
<p><%= f.text_area :description, :required => true, :cols => 60, :rows => 10 %></p>
|
<p><%= f.text_area :description, :required => true, :cols => 60, :rows => 10 %></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<% unless $RDM_TEXTILE_DISABLED %>
|
||||||
|
<%= javascript_include_tag 'jstoolbar' %>
|
||||||
|
<script type="text/javascript">
|
||||||
|
//<![CDATA[
|
||||||
|
if (document.getElementById) {
|
||||||
|
if (document.getElementById('news_description')) {
|
||||||
|
var commentTb = new jsToolBar(document.getElementById('news_description'));
|
||||||
|
commentTb.draw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//]]>
|
||||||
|
</script>
|
||||||
|
<% end %>
|
|
@ -6,7 +6,7 @@
|
||||||
<b><%=l(:field_created_on)%></b>: <%= format_time(@news.created_on) %>
|
<b><%=l(:field_created_on)%></b>: <%= format_time(@news.created_on) %>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<%= simple_format auto_link @news.description %>
|
<%= textilizable auto_link @news.description %>
|
||||||
|
|
||||||
<% if authorize_for('news', 'edit') %>
|
<% if authorize_for('news', 'edit') %>
|
||||||
<%= start_form_tag ({:controller => 'news', :action => 'edit', :id => @news}, :method => 'get' ) %>
|
<%= start_form_tag ({:controller => 'news', :action => 'edit', :id => @news}, :method => 'get' ) %>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<!--[form:project]-->
|
<!--[form:project]-->
|
||||||
<p><%= f.text_field :name, :required => true %></p>
|
<p><%= f.text_field :name, :required => true %></p>
|
||||||
|
|
||||||
<% if admin_loggedin? %>
|
<% if admin_loggedin? and !@root_projects.empty? %>
|
||||||
<p><%= f.select :parent_id, (@root_projects.collect {|p| [p.name, p.id]}), { :include_blank => true } %></p>
|
<p><%= f.select :parent_id, (@root_projects.collect {|p| [p.name, p.id]}), { :include_blank => true } %></p>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
@ -15,10 +15,12 @@
|
||||||
<p><%= custom_field_tag_with_label @custom_value %></p>
|
<p><%= custom_field_tag_with_label @custom_value %></p>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<% unless @custom_fields.empty? %>
|
||||||
<p><label><%=l(:label_custom_field_plural)%></label>
|
<p><label><%=l(:label_custom_field_plural)%></label>
|
||||||
<% for custom_field in @custom_fields %>
|
<% for custom_field in @custom_fields %>
|
||||||
<%= check_box_tag "custom_field_ids[]", custom_field.id, (@project.custom_fields.include? custom_field) %>
|
<%= check_box_tag "custom_field_ids[]", custom_field.id, ((@project.custom_fields.include? custom_field) or custom_field.is_for_all?), (custom_field.is_for_all? ? {:disabled => "disabled"} : {}) %>
|
||||||
<%= custom_field.name %>
|
<%= custom_field.name %>
|
||||||
<% end %></p>
|
<% end %></p>
|
||||||
|
<% end %>
|
||||||
<!--[eoform:project]-->
|
<!--[eoform:project]-->
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
<div>
|
<div>
|
||||||
<div class="rightbox">
|
<div class="rightbox">
|
||||||
<%= start_form_tag %>
|
<%= start_form_tag %>
|
||||||
<p>From <%= text_field_tag 'date_from', @date_from, :size => 10, :class => 'button-small' %>
|
<p><%= select_month(@month, :prefix => "month", :discard_type => true) %>
|
||||||
and <%= text_field_tag 'days_back', @days_back, :size => 2, :class => 'button-small' %> days back</p>
|
<%= select_year(@year, :prefix => "year", :discard_type => true) %></p>
|
||||||
<%= check_box_tag 'show_issues', 1, @show_issues %><%= hidden_field_tag 'show_issues', 0 %> <%=l(:label_issue_plural)%><br />
|
<%= check_box_tag 'show_issues', 1, @show_issues %><%= hidden_field_tag 'show_issues', 0 %> <%=l(:label_issue_plural)%><br />
|
||||||
<%= check_box_tag 'show_news', 1, @show_news %><%= hidden_field_tag 'show_news', 0 %> <%=l(:label_news_plural)%><br />
|
<%= check_box_tag 'show_news', 1, @show_news %><%= hidden_field_tag 'show_news', 0 %> <%=l(:label_news_plural)%><br />
|
||||||
<%= check_box_tag 'show_files', 1, @show_files %><%= hidden_field_tag 'show_files', 0 %> <%=l(:label_attachment_plural)%><br />
|
<%= check_box_tag 'show_files', 1, @show_files %><%= hidden_field_tag 'show_files', 0 %> <%=l(:label_attachment_plural)%><br />
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
<% @events_by_day.keys.sort {|x,y| y <=> x }.each do |day| %>
|
<% @events_by_day.keys.sort {|x,y| y <=> x }.each do |day| %>
|
||||||
<h3><%= format_date(day) %></h3>
|
<h3><%= format_date(day) %></h3>
|
||||||
<ul>
|
<ul>
|
||||||
<% @events_by_day[day].each do |e| %>
|
<% @events_by_day[day].sort {|x,y| y.created_on <=> x.created_on }.each do |e| %>
|
||||||
<li><p>
|
<li><p>
|
||||||
<% if e.is_a? Issue %>
|
<% if e.is_a? Issue %>
|
||||||
<%= 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 />
|
<%= 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 />
|
||||||
|
@ -36,8 +36,6 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
</ul>
|
</ul>
|
||||||
<% end %>
|
<% end %>
|
||||||
<br />
|
<% if @events_by_day.empty? %><p><i><%= l(:label_no_data) %></i></p><% end %>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
|
@ -6,22 +6,45 @@
|
||||||
<!--[form:issue]-->
|
<!--[form:issue]-->
|
||||||
<%= hidden_field_tag 'tracker_id', @tracker.id %>
|
<%= hidden_field_tag 'tracker_id', @tracker.id %>
|
||||||
|
|
||||||
|
<div class="splitcontentleft">
|
||||||
<p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>
|
<p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>
|
||||||
<p><%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %></p>
|
<p><%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %></p>
|
||||||
<p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %></p>
|
<p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %></p>
|
||||||
|
</div>
|
||||||
|
<div class="splitcontentright">
|
||||||
|
<p><%= f.text_field :start_date, :size => 10 %><%= calendar_for('issue_start_date') %></p>
|
||||||
|
<p><%= f.text_field :due_date, :size => 10 %><%= calendar_for('issue_due_date') %></p>
|
||||||
|
<p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) %></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="clear">
|
||||||
<p><%= f.text_field :subject, :size => 80, :required => true %></p>
|
<p><%= f.text_field :subject, :size => 80, :required => true %></p>
|
||||||
<p><%= f.text_area :description, :cols => 60, :rows => 10, :required => true %></p>
|
<p><%= f.text_area :description, :cols => 60, :rows => 10, :required => true %></p>
|
||||||
<p><%= f.text_field :due_date, :size => 10 %><%= calendar_for('issue_due_date') %></p>
|
|
||||||
|
|
||||||
<% for @custom_value in @custom_values %>
|
<% for @custom_value in @custom_values %>
|
||||||
<p><%= custom_field_tag_with_label @custom_value %></p>
|
<p><%= custom_field_tag_with_label @custom_value %></p>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%>
|
<p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%>
|
||||||
<%= link_to_function image_tag('add', :align => "top"), "addFileField()" %></label>
|
<%= link_to_function image_tag('add'), "addFileField()" %></label>
|
||||||
<%= file_field_tag 'attachments[]', :size => 30 %></p>
|
<%= file_field_tag 'attachments[]', :size => 30 %></p>
|
||||||
|
|
||||||
|
</div>
|
||||||
<!--[eoform:issue]-->
|
<!--[eoform:issue]-->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= submit_tag l(:button_create) %>
|
<%= submit_tag l(:button_create) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<% unless $RDM_TEXTILE_DISABLED %>
|
||||||
|
<%= javascript_include_tag 'jstoolbar' %>
|
||||||
|
<script type="text/javascript">
|
||||||
|
//<![CDATA[
|
||||||
|
if (document.getElementById) {
|
||||||
|
if (document.getElementById('issue_description')) {
|
||||||
|
var commentTb = new jsToolBar(document.getElementById('issue_description'));
|
||||||
|
commentTb.draw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//]]>
|
||||||
|
</script>
|
||||||
|
<% end %>
|
|
@ -0,0 +1,71 @@
|
||||||
|
<h2><%= l(:label_calendar) %></h2>
|
||||||
|
|
||||||
|
<table width="100%">
|
||||||
|
<tr>
|
||||||
|
<td align="left">
|
||||||
|
<%= start_form_tag :action => 'calendar', :id => @project %>
|
||||||
|
<%= select_month(@month, :prefix => "month", :discard_type => true) %>
|
||||||
|
<%= select_year(@year, :prefix => "year", :discard_type => true) %>
|
||||||
|
<%= submit_tag l(:button_submit), :class => "button-small" %>
|
||||||
|
<%= end_form_tag %>
|
||||||
|
</td>
|
||||||
|
<td align="right">
|
||||||
|
<%= image_tag 'gantt' %>
|
||||||
|
<%= link_to l(:label_gantt_chart), :action => 'gantt', :id => @project %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<table class="calenderTable">
|
||||||
|
<tr class="ListHead">
|
||||||
|
<td></td>
|
||||||
|
<% 1.upto(7) do |d| %>
|
||||||
|
<td align="center" width="14%"><%= day_name(d) %></td>
|
||||||
|
<% end %>
|
||||||
|
</tr>
|
||||||
|
<tr height="100">
|
||||||
|
<% day = @date_from
|
||||||
|
while day <= @date_to
|
||||||
|
if day.cwday == 1 %>
|
||||||
|
<td valign="middle"><%= day.cweek %></td>
|
||||||
|
<% end %>
|
||||||
|
<td valign="top" width="14%" class="<%= day.month==@month ? "even" : "odd" %>">
|
||||||
|
<p align="right"><%= day==Date.today ? "<b>#{day.day}</b>" : day.day %></p>
|
||||||
|
<% day_issues = []
|
||||||
|
@issues.each { |i| day_issues << i if i.start_date == day or i.due_date == day }
|
||||||
|
day_issues.each do |i| %>
|
||||||
|
<%= if day == i.start_date and day == i.due_date
|
||||||
|
image_tag('arrow_bw')
|
||||||
|
elsif day == i.start_date
|
||||||
|
image_tag('arrow_from')
|
||||||
|
elsif day == i.due_date
|
||||||
|
image_tag('arrow_to')
|
||||||
|
end %>
|
||||||
|
<%= i.tracker.name %> <%= link_to i.id, :controller => 'issues', :action => 'show', :id => i %>: <small><%= i.subject.sub(/^(.{30}[^\s]*\s).*$/, '\1 (...)') %></small><br />
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
|
<%= '</tr><tr height="100">' if day.cwday >= 7 and day!=@date_to %>
|
||||||
|
<%
|
||||||
|
day = day + 1
|
||||||
|
end %>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table width="100%">
|
||||||
|
<tr>
|
||||||
|
<td align="left">
|
||||||
|
<%= link_to_remote ('« ' + l(:label_previous)),
|
||||||
|
{:update => "content", :url => { :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1) }},
|
||||||
|
{:href => url_for(:action => 'calendar', :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1))}
|
||||||
|
%>
|
||||||
|
</td>
|
||||||
|
<td align="right">
|
||||||
|
<%= link_to_remote (l(:label_next) + ' »'),
|
||||||
|
{:update => "content", :url => { :year => (@month==12 ? @year+1 : @year), :month =>(@month==12 ? 1 : @month+1) }},
|
||||||
|
{:href => url_for(:action => 'calendar', :year => (@month==12 ? @year+1 : @year), :month =>(@month==12 ? 1 : @month+1))}
|
||||||
|
%>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
|
@ -0,0 +1,161 @@
|
||||||
|
<%
|
||||||
|
pdf=IfpdfHelper::IFPDF.new
|
||||||
|
pdf.AliasNbPages
|
||||||
|
pdf.AddPage("L")
|
||||||
|
pdf.SetFont('Arial','B',9)
|
||||||
|
|
||||||
|
subject_width = 70
|
||||||
|
header_heigth = 5
|
||||||
|
|
||||||
|
headers_heigth = header_heigth
|
||||||
|
show_weeks = false
|
||||||
|
show_days = false
|
||||||
|
|
||||||
|
if @months < 7
|
||||||
|
show_weeks = true
|
||||||
|
headers_heigth = 2*header_heigth
|
||||||
|
if @months < 3
|
||||||
|
show_days = true
|
||||||
|
headers_heigth = 3*header_heigth
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
g_width = 210
|
||||||
|
zoom = (g_width) / (@date_to - @date_from + 1)
|
||||||
|
g_height = 120
|
||||||
|
t_height = g_height + headers_heigth
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Months headers
|
||||||
|
#
|
||||||
|
month_f = @date_from
|
||||||
|
left = subject_width
|
||||||
|
height = header_heigth
|
||||||
|
@months.times do
|
||||||
|
width = ((month_f >> 1) - month_f) * zoom
|
||||||
|
pdf.SetY(20)
|
||||||
|
pdf.SetX(left)
|
||||||
|
pdf.Cell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C")
|
||||||
|
left = left + width
|
||||||
|
month_f = month_f >> 1
|
||||||
|
end
|
||||||
|
|
||||||
|
#
|
||||||
|
# Weeks headers
|
||||||
|
#
|
||||||
|
if show_weeks
|
||||||
|
left = subject_width
|
||||||
|
height = header_heigth
|
||||||
|
if @date_from.cwday == 1
|
||||||
|
# @date_from is monday
|
||||||
|
week_f = @date_from
|
||||||
|
else
|
||||||
|
# find next monday after @date_from
|
||||||
|
week_f = @date_from + (7 - @date_from.cwday + 1)
|
||||||
|
width = (7 - @date_from.cwday + 1) * zoom-1
|
||||||
|
pdf.SetY(25)
|
||||||
|
pdf.SetX(left)
|
||||||
|
pdf.Cell(width + 1, height, "", "LTR")
|
||||||
|
left = left + width+1
|
||||||
|
end
|
||||||
|
while week_f < @date_to
|
||||||
|
width = (week_f + 6 <= @date_to) ? 7 * zoom : (@date_to - week_f + 1) * zoom
|
||||||
|
pdf.SetY(25)
|
||||||
|
pdf.SetX(left)
|
||||||
|
pdf.Cell(width, height, week_f.cweek.to_s, "LTR", 0, "C")
|
||||||
|
left = left + width
|
||||||
|
week_f = week_f+7
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#
|
||||||
|
# Days headers
|
||||||
|
#
|
||||||
|
if show_days
|
||||||
|
left = subject_width
|
||||||
|
height = header_heigth
|
||||||
|
wday = @date_from.cwday
|
||||||
|
pdf.SetFont('Arial','B',7)
|
||||||
|
(@date_to - @date_from + 1).to_i.times do
|
||||||
|
width = zoom
|
||||||
|
pdf.SetY(30)
|
||||||
|
pdf.SetX(left)
|
||||||
|
pdf.Cell(width, height, day_name(wday)[0,1], "LTR", 0, "C")
|
||||||
|
left = left + width
|
||||||
|
wday = wday + 1
|
||||||
|
wday = 1 if wday > 7
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
pdf.SetY(20)
|
||||||
|
pdf.SetX(15)
|
||||||
|
pdf.Cell(subject_width+g_width-15, headers_heigth, "", 1)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Tasks
|
||||||
|
#
|
||||||
|
top = headers_heigth + 20
|
||||||
|
pdf.SetFont('Arial','B',7)
|
||||||
|
@issues.each do |i|
|
||||||
|
pdf.SetY(top)
|
||||||
|
pdf.SetX(15)
|
||||||
|
pdf.Cell(subject_width-15, 5, i.id.to_s + " " + i.subject.sub(/^(.{30}[^\s]*\s).*$/, '\1 (...)'), "LR")
|
||||||
|
|
||||||
|
pdf.SetY(top)
|
||||||
|
pdf.SetX(subject_width)
|
||||||
|
pdf.Cell(g_width, 5, "", "LR")
|
||||||
|
|
||||||
|
i_start_date = (i.start_date >= @date_from ? i.start_date : @date_from )
|
||||||
|
i_end_date = (i.due_date <= @date_to ? i.due_date : @date_to )
|
||||||
|
|
||||||
|
i_done_date = i.start_date + ((i.due_date - i.start_date)*i.done_ratio/100).floor
|
||||||
|
i_done_date = (i_done_date <= @date_from ? @date_from : i_done_date )
|
||||||
|
i_done_date = (i_done_date >= @date_to ? @date_to : i_done_date )
|
||||||
|
|
||||||
|
i_late_date = [i_end_date, Date.today].min if i_start_date < Date.today
|
||||||
|
|
||||||
|
i_left = ((i_start_date - @date_from)*zoom)
|
||||||
|
i_width = ((i_end_date - i_start_date + 1)*zoom)
|
||||||
|
d_width = ((i_done_date - i_start_date)*zoom)
|
||||||
|
l_width = ((i_late_date - i_start_date+1)*zoom) if i_late_date
|
||||||
|
l_width ||= 0
|
||||||
|
|
||||||
|
pdf.SetY(top+1.5)
|
||||||
|
pdf.SetX(subject_width + i_left)
|
||||||
|
pdf.SetFillColor(200,200,200)
|
||||||
|
pdf.Cell(i_width, 2, "", 0, 0, "", 1)
|
||||||
|
|
||||||
|
if l_width > 0
|
||||||
|
pdf.SetY(top+1.5)
|
||||||
|
pdf.SetX(subject_width + i_left)
|
||||||
|
pdf.SetFillColor(255,100,100)
|
||||||
|
pdf.Cell(l_width, 2, "", 0, 0, "", 1)
|
||||||
|
end
|
||||||
|
if d_width > 0
|
||||||
|
pdf.SetY(top+1.5)
|
||||||
|
pdf.SetX(subject_width + i_left)
|
||||||
|
pdf.SetFillColor(100,100,255)
|
||||||
|
pdf.Cell(d_width, 2, "", 0, 0, "", 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
pdf.SetY(top+1.5)
|
||||||
|
pdf.SetX(subject_width + i_left + i_width)
|
||||||
|
pdf.Cell(30, 2, "#{i.status.name} #{i.done_ratio}%")
|
||||||
|
|
||||||
|
top = top + 5
|
||||||
|
pdf.SetDrawColor(200, 200, 200)
|
||||||
|
pdf.Line(15, top, subject_width+g_width, top)
|
||||||
|
if pdf.GetY() > 180
|
||||||
|
pdf.AddPage("L")
|
||||||
|
top = 20
|
||||||
|
pdf.Line(15, top, subject_width+g_width, top)
|
||||||
|
end
|
||||||
|
pdf.SetDrawColor(0, 0, 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
pdf.Line(15, top, subject_width+g_width, top)
|
||||||
|
|
||||||
|
%>
|
||||||
|
<%= pdf.Output %>
|
|
@ -0,0 +1,241 @@
|
||||||
|
<h2><%= l(:label_gantt_chart) %></h2>
|
||||||
|
<div class="topright">
|
||||||
|
<small>
|
||||||
|
<%= link_to 'PDF ', :zoom => @zoom, :year => @year_from, :month => @month_from, :months => @months, :output => 'pdf' %>
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table width="100%">
|
||||||
|
<tr>
|
||||||
|
<td align="left">
|
||||||
|
<%= start_form_tag %>
|
||||||
|
<input type="text" name="months" size="2" value="<%= @months %>">
|
||||||
|
<%= l(:label_months_from) %>
|
||||||
|
<%= select_month(@month_from, :prefix => "month", :discard_type => true) %>
|
||||||
|
<%= select_year(@year_from, :prefix => "year", :discard_type => true) %>
|
||||||
|
<%= hidden_field_tag 'zoom', @zoom %>
|
||||||
|
<%= submit_tag l(:button_submit), :class => "button-small" %>
|
||||||
|
<%= end_form_tag %>
|
||||||
|
</td>
|
||||||
|
<td align="right">
|
||||||
|
<%= if @zoom < 4
|
||||||
|
link_to image_tag('zoom_in'), {:zoom => (@zoom+1), :year => @year_from, :month => @month_from, :months => @months}
|
||||||
|
else
|
||||||
|
image_tag 'zoom_in_g'
|
||||||
|
end %>
|
||||||
|
<%= if @zoom > 1
|
||||||
|
link_to image_tag('zoom_out'), :zoom => (@zoom-1), :year => @year_from, :month => @month_from, :months => @months
|
||||||
|
else
|
||||||
|
image_tag 'zoom_out_g'
|
||||||
|
end %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.m_bg {
|
||||||
|
position:absolute;
|
||||||
|
top:0;
|
||||||
|
height:16px;
|
||||||
|
border-top: 1px solid #c0c0c0;
|
||||||
|
border-bottom: 1px solid #c0c0c0;
|
||||||
|
border-right: 1px solid #c0c0c0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task {
|
||||||
|
position: absolute;
|
||||||
|
height:8px;
|
||||||
|
font-size:0.8em;
|
||||||
|
color:#888;
|
||||||
|
background:#aaa;
|
||||||
|
padding:0;
|
||||||
|
margin:0;
|
||||||
|
line-height:0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task_late {
|
||||||
|
background:#f66;
|
||||||
|
}
|
||||||
|
|
||||||
|
.task_done {
|
||||||
|
background:#66f;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<% zoom = 1
|
||||||
|
@zoom.times { zoom = zoom * 2 }
|
||||||
|
|
||||||
|
subject_width = 260
|
||||||
|
header_heigth = 18
|
||||||
|
|
||||||
|
headers_heigth = header_heigth
|
||||||
|
show_weeks = false
|
||||||
|
show_days = false
|
||||||
|
|
||||||
|
if @zoom >1
|
||||||
|
show_weeks = true
|
||||||
|
headers_heigth = 2*header_heigth
|
||||||
|
if @zoom > 2
|
||||||
|
show_days = true
|
||||||
|
headers_heigth = 3*header_heigth
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
g_width = (@date_to - @date_from + 1)*zoom
|
||||||
|
g_height = [(20 * @issues.length + 6), 206].max
|
||||||
|
t_height = g_height + headers_heigth
|
||||||
|
%>
|
||||||
|
|
||||||
|
<table width="100%" border=0 cellspacing=0 cellpading=0>
|
||||||
|
<tr>
|
||||||
|
<td width=260>
|
||||||
|
|
||||||
|
<div style="position:relative;height:<%= t_height + 24 %>px;width:<%= subject_width + 1 %>px;">
|
||||||
|
<div style="right:-2px;width:<%= subject_width %>px;height:<%= headers_heigth %>px;" class="m_bg"></div>
|
||||||
|
<div style="right:-2px;width:<%= subject_width %>px;height:<%= t_height %>px;border-left: 1px solid #c0c0c0;" class="m_bg"></div>
|
||||||
|
<%
|
||||||
|
#
|
||||||
|
# Tasks subjects
|
||||||
|
#
|
||||||
|
top = headers_heigth + 8
|
||||||
|
@issues.each do |i| %>
|
||||||
|
<div style="position: absolute;line-height:1em;height:16px;top:<%= top %>px;left:4px;width:<%= subject_width - 5 %>px;overflow:hidden;">
|
||||||
|
<small><%= link_to i.id, :controller => 'issues', :action => 'show', :id => i %>
|
||||||
|
<%= i.subject.sub(/^(.{30}[^\s]*\s).*$/, '\1 (...)') %></small>
|
||||||
|
</div>
|
||||||
|
<% top = top + 20
|
||||||
|
end %>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
<div style="position:relative;height:<%= t_height + 24 %>px;width:<%= subject_width %>;overflow:auto;">
|
||||||
|
<div style="width:<%= g_width-1 %>px;height:<%= headers_heigth %>px;" class="m_bg"> </div>
|
||||||
|
<%
|
||||||
|
#
|
||||||
|
# Months headers
|
||||||
|
#
|
||||||
|
month_f = @date_from
|
||||||
|
left = 0
|
||||||
|
height = (show_weeks ? header_heigth : header_heigth + g_height)
|
||||||
|
@months.times do
|
||||||
|
width = ((month_f >> 1) - month_f) * zoom - 1
|
||||||
|
%>
|
||||||
|
<div style="left:<%= left %>px;width:<%= width %>px;height:<%= height %>px;" class="m_bg">
|
||||||
|
<%= link_to "#{month_f.year}-#{month_f.month}", :year => month_f.year, :month => month_f.month, :zoom => @zoom, :months => @months %>
|
||||||
|
</div>
|
||||||
|
<%
|
||||||
|
left = left + width + 1
|
||||||
|
month_f = month_f >> 1
|
||||||
|
end %>
|
||||||
|
|
||||||
|
<%
|
||||||
|
#
|
||||||
|
# Weeks headers
|
||||||
|
#
|
||||||
|
if show_weeks
|
||||||
|
left = 0
|
||||||
|
height = (show_days ? header_heigth-1 : header_heigth-1 + g_height)
|
||||||
|
if @date_from.cwday == 1
|
||||||
|
# @date_from is monday
|
||||||
|
week_f = @date_from
|
||||||
|
else
|
||||||
|
# find next monday after @date_from
|
||||||
|
week_f = @date_from + (7 - @date_from.cwday + 1)
|
||||||
|
width = (7 - @date_from.cwday + 1) * zoom-1
|
||||||
|
%>
|
||||||
|
<div style="left:<%= left %>px;top:19px;width:<%= width %>px;height:<%= height %>px;" class="m_bg"> </div>
|
||||||
|
<%
|
||||||
|
left = left + width+1
|
||||||
|
end %>
|
||||||
|
<%
|
||||||
|
while week_f < @date_to
|
||||||
|
width = (week_f + 6 <= @date_to) ? 7 * zoom -1 : (@date_to - week_f + 1) * zoom-1
|
||||||
|
%>
|
||||||
|
<div style="left:<%= left %>px;top:19px;width:<%= width %>px;height:<%= height %>px;" class="m_bg">
|
||||||
|
<small><%= week_f.cweek %></small>
|
||||||
|
</div>
|
||||||
|
<%
|
||||||
|
left = left + width+1
|
||||||
|
week_f = week_f+7
|
||||||
|
end
|
||||||
|
end %>
|
||||||
|
|
||||||
|
<%
|
||||||
|
#
|
||||||
|
# Days headers
|
||||||
|
#
|
||||||
|
if show_days
|
||||||
|
left = 0
|
||||||
|
height = g_height + header_heigth - 1
|
||||||
|
wday = @date_from.cwday
|
||||||
|
(@date_to - @date_from + 1).to_i.times do
|
||||||
|
width = zoom - 1
|
||||||
|
%>
|
||||||
|
<div style="left:<%= left %>px;top:37px;width:<%= width %>px;height:<%= height %>px;font-size:0.7em;<%= "background:#f1f1f1;" if wday > 5 %>" class="m_bg">
|
||||||
|
<%= day_name(wday)[0,1] %>
|
||||||
|
</div>
|
||||||
|
<%
|
||||||
|
left = left + width+1
|
||||||
|
wday = wday + 1
|
||||||
|
wday = 1 if wday > 7
|
||||||
|
end
|
||||||
|
end %>
|
||||||
|
|
||||||
|
<%
|
||||||
|
#
|
||||||
|
# Today red line
|
||||||
|
#
|
||||||
|
if Date.today >= @date_from and Date.today <= @date_to %>
|
||||||
|
<div style="position: absolute;height:<%= g_height %>px;top:<%= headers_heigth + 1 %>px;left:<%= ((Date.today-@date_from+1)*zoom).floor()-1 %>px;width:10px;border-left: 1px dashed red;"> </div>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<%
|
||||||
|
#
|
||||||
|
# Tasks
|
||||||
|
#
|
||||||
|
top = headers_heigth + 12
|
||||||
|
@issues.each do |i| %>
|
||||||
|
<%
|
||||||
|
i_start_date = (i.start_date >= @date_from ? i.start_date : @date_from )
|
||||||
|
i_end_date = (i.due_date <= @date_to ? i.due_date : @date_to )
|
||||||
|
|
||||||
|
i_done_date = i.start_date + ((i.due_date - i.start_date)*i.done_ratio/100).floor
|
||||||
|
i_done_date = (i_done_date <= @date_from ? @date_from : i_done_date )
|
||||||
|
i_done_date = (i_done_date >= @date_to ? @date_to : i_done_date )
|
||||||
|
|
||||||
|
i_late_date = [i_end_date, Date.today].min if i_start_date < Date.today
|
||||||
|
|
||||||
|
i_left = ((i_start_date - @date_from)*zoom).floor
|
||||||
|
i_width = ((i_end_date - i_start_date + 1)*zoom).floor
|
||||||
|
d_width = ((i_done_date - i_start_date)*zoom).floor
|
||||||
|
l_width = ((i_late_date - i_start_date+1)*zoom).floor if i_late_date
|
||||||
|
l_width ||= 0
|
||||||
|
%>
|
||||||
|
<div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= i_width %>px;" class="task"> </div>
|
||||||
|
<% if l_width > 0 %>
|
||||||
|
<div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= l_width %>px;" class="task task_late"> </div>
|
||||||
|
<% end %>
|
||||||
|
<% if d_width > 0 %>
|
||||||
|
<div style="top:<%= top %>px;left:<%= i_left %>px;width:<%= d_width %>px;" class="task task_done"> </div>
|
||||||
|
<% end %>
|
||||||
|
<div style="top:<%= top %>px;left:<%= i_left + i_width + 5 %>px;background:#fff;" class="task">
|
||||||
|
<%= i.status.name %>
|
||||||
|
<%= (i.done_ratio).to_i %>%
|
||||||
|
</div>
|
||||||
|
<% top = top + 20
|
||||||
|
end %>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table width="100%">
|
||||||
|
<tr>
|
||||||
|
<td align="left"><%= link_to ('« ' + l(:label_previous)), :year => (@date_from << @months).year, :month => (@date_from << @months).month, :zoom => @zoom, :months => @months %></td>
|
||||||
|
<td>
|
||||||
|
<td align="right"><%= link_to (l(:label_next) + ' »'), :year => (@date_from >> @months).year, :month => (@date_from >> @months).month, :zoom => @zoom, :months => @months %></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
|
@ -41,7 +41,7 @@
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<%= start_form_tag ({:controller => 'projects', :action => 'move_issues', :id => @project}, :id => 'issues_form' ) %>
|
<%= start_form_tag({:controller => 'projects', :action => 'move_issues', :id => @project}, :id => 'issues_form' ) %>
|
||||||
<table class="listTableContent">
|
<table class="listTableContent">
|
||||||
|
|
||||||
<tr class="ListHead">
|
<tr class="ListHead">
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<% for news in @news %>
|
<% for news in @news %>
|
||||||
<p>
|
<p>
|
||||||
<b><%= news.title %></b> <small>(<%= link_to_user news.author %> <%= format_time(news.created_on) %>)</small><br />
|
<b><%= news.title %></b> <small>(<%= link_to_user news.author %> <%= format_time(news.created_on) %>)</small><br />
|
||||||
<%= news.summary %><br />
|
<% unless news.summary.empty? %><%= news.summary %><br /><% end %>
|
||||||
<small>[<%= link_to l(:label_read), :controller => 'news', :action => 'show', :id => news %>]</small>
|
<small>[<%= link_to l(:label_read), :controller => 'news', :action => 'show', :id => news %>]</small>
|
||||||
</p>
|
</p>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
<h2><%=l(:label_settings)%></h2>
|
<h2><%=l(:label_settings)%></h2>
|
||||||
|
|
||||||
<% labelled_tabular_form_for :project, @project, :url => { :action => "edit", :id => @project } do |f| %>
|
<% if authorize_for('projects', 'edit') %>
|
||||||
<%= render :partial => 'form', :locals => { :f => f } %>
|
<% labelled_tabular_form_for :project, @project, :url => { :action => "edit", :id => @project } do |f| %>
|
||||||
<%= submit_tag l(:button_save) %>
|
<%= render :partial => 'form', :locals => { :f => f } %>
|
||||||
|
<%= submit_tag l(:button_save) %>
|
||||||
|
<% end %>
|
||||||
|
<br />
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<h3><%=l(:label_member_plural)%></h3>
|
<h3><%=l(:label_member_plural)%></h3>
|
||||||
<%= error_messages_for 'member' %>
|
<%= error_messages_for 'member' %>
|
||||||
|
@ -14,59 +15,67 @@
|
||||||
<% for member in @project.members.find(:all, :include => :user) %>
|
<% for member in @project.members.find(:all, :include => :user) %>
|
||||||
<% unless member.new_record? %>
|
<% unless member.new_record? %>
|
||||||
<tr>
|
<tr>
|
||||||
<td><%= member.user.display_name %></td>
|
<td><%= member.user.display_name %></td>
|
||||||
<td>
|
<td>
|
||||||
<%= start_form_tag :controller => 'members', :action => 'edit', :id => member %>
|
<% if authorize_for('members', 'edit') %>
|
||||||
<select name="member[role_id]">
|
<%= start_form_tag :controller => 'members', :action => 'edit', :id => member %>
|
||||||
|
<select name="member[role_id]">
|
||||||
<%= options_from_collection_for_select @roles, "id", "name", member.role_id %>
|
<%= options_from_collection_for_select @roles, "id", "name", member.role_id %>
|
||||||
</select>
|
</select>
|
||||||
|
<%= submit_tag l(:button_change), :class => "button-small" %>
|
||||||
|
<%= end_form_tag %>
|
||||||
|
<% end %>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<%= submit_tag l(:button_change), :class => "button-small" %>
|
<% if authorize_for('members', 'destroy') %>
|
||||||
<%= end_form_tag %>
|
<%= start_form_tag :controller => 'members', :action => 'destroy', :id => member %>
|
||||||
|
<%= submit_tag l(:button_delete), :class => "button-small" %>
|
||||||
|
<%= end_form_tag %>
|
||||||
|
<% end %>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
|
||||||
<%= start_form_tag :controller => 'members', :action => 'destroy', :id => member %>
|
|
||||||
<%= submit_tag l(:button_delete), :class => "button-small" %>
|
|
||||||
<%= end_form_tag %>
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</table>
|
</table>
|
||||||
<hr />
|
<% if authorize_for('projects', 'add_member') %>
|
||||||
|
<hr />
|
||||||
<label><%=l(:label_member_new)%></label><br/>
|
<label><%=l(:label_member_new)%></label><br/>
|
||||||
<%= start_form_tag :controller => 'projects', :action => 'add_member', :id => @project %>
|
<%= start_form_tag :controller => 'projects', :action => 'add_member', :id => @project %>
|
||||||
<select name="member[user_id]">
|
<select name="member[user_id]">
|
||||||
<%= options_from_collection_for_select @users, "id", "display_name", @member.user_id %>
|
<%= options_from_collection_for_select @users, "id", "display_name", @member.user_id %>
|
||||||
</select>
|
</select>
|
||||||
<select name="member[role_id]">
|
<select name="member[role_id]">
|
||||||
<%= options_from_collection_for_select @roles, "id", "name", @member.role_id %>
|
<%= options_from_collection_for_select @roles, "id", "name", @member.role_id %>
|
||||||
</select>
|
</select>
|
||||||
<%= submit_tag l(:button_add) %>
|
<%= submit_tag l(:button_add) %>
|
||||||
<%= end_form_tag %>
|
<%= end_form_tag %>
|
||||||
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<h3><%=l(:label_version_plural)%></h3>
|
<h3><%=l(:label_version_plural)%></h3>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<% for version in @project.versions %>
|
<% for version in @project.versions %>
|
||||||
<tr>
|
<tr>
|
||||||
<td><%= link_to version.name, :controller => 'versions', :action => 'edit', :id => version %></td>
|
<td width="100"><strong><%=h version.name %></strong></td>
|
||||||
|
<td width="100"><%= format_date(version.effective_date) %></td>
|
||||||
<td><%=h version.description %></td>
|
<td><%=h version.description %></td>
|
||||||
<td>
|
<td>
|
||||||
|
<%= link_to_if_authorized l(:button_edit), :controller => 'versions', :action => 'edit', :id => version %>
|
||||||
|
<% if authorize_for('versions', 'destroy') %>
|
||||||
|
|
||||||
<%= start_form_tag :controller => 'versions', :action => 'destroy', :id => version %>
|
<%= start_form_tag :controller => 'versions', :action => 'destroy', :id => version %>
|
||||||
<%= submit_tag l(:button_delete), :class => "button-small" %>
|
<%= submit_tag l(:button_delete), :class => "button-small" %>
|
||||||
<%= end_form_tag %>
|
<%= end_form_tag %>
|
||||||
|
<% end %>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
</table>
|
</table>
|
||||||
<hr />
|
<% if authorize_for('projects', 'add_version') %>
|
||||||
<%= start_form_tag ({ :controller => 'projects', :action => 'add_version', :id => @project }, :method => 'get' ) %>
|
<hr />
|
||||||
<%= submit_tag l(:label_version_new) %>
|
<%= link_to l(:label_version_new), :controller => 'projects', :action => 'add_version', :id => @project %>
|
||||||
<%= end_form_tag %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,30 +85,34 @@
|
||||||
<% for @category in @project.issue_categories %>
|
<% for @category in @project.issue_categories %>
|
||||||
<% unless @category.new_record? %>
|
<% unless @category.new_record? %>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<%= start_form_tag :controller => 'issue_categories', :action => 'edit', :id => @category %>
|
<%= start_form_tag :controller => 'issue_categories', :action => 'edit', :id => @category %>
|
||||||
<%= text_field 'category', 'name', :size => 25 %>
|
<%= text_field 'category', 'name', :size => 25 %>
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<%= submit_tag l(:button_save), :class => "button-small" %>
|
|
||||||
<%= end_form_tag %>
|
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<%= start_form_tag :controller => 'issue_categories', :action => 'destroy', :id => @category %>
|
<% if authorize_for('issue_categories', 'edit') %>
|
||||||
<%= submit_tag l(:button_delete), :class => "button-small" %>
|
<%= submit_tag l(:button_save), :class => "button-small" %>
|
||||||
<%= end_form_tag %>
|
<%= end_form_tag %>
|
||||||
</td>
|
<% end %>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<% if authorize_for('issue_categories', 'destroy') %>
|
||||||
|
<%= start_form_tag :controller => 'issue_categories', :action => 'destroy', :id => @category %>
|
||||||
|
<%= submit_tag l(:button_delete), :class => "button-small" %>
|
||||||
|
<%= end_form_tag %>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</table>
|
</table>
|
||||||
<hr />
|
<% if authorize_for('projects', 'add_issue_category') %>
|
||||||
|
<hr />
|
||||||
<%= start_form_tag :action => 'add_issue_category', :id => @project %>
|
<%= start_form_tag :action => 'add_issue_category', :id => @project %>
|
||||||
<label for="issue_category_name"><%=l(:label_issue_category_new)%></label><br/>
|
<label for="issue_category_name"><%=l(:label_issue_category_new)%></label><br/>
|
||||||
<%= error_messages_for 'issue_category' %>
|
<%= error_messages_for 'issue_category' %>
|
||||||
<%= text_field 'issue_category', 'name', :size => 25 %>
|
<%= text_field 'issue_category', 'name', :size => 25 %>
|
||||||
<%= submit_tag l(:button_create) %>
|
<%= submit_tag l(:button_create) %>
|
||||||
<%= end_form_tag %>
|
<%= end_form_tag %>
|
||||||
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<div class="splitcontentleft">
|
<div class="splitcontentleft">
|
||||||
<%= simple_format(auto_link(@project.description)) %>
|
<%= simple_format(auto_link(@project.description)) %>
|
||||||
<ul>
|
<ul>
|
||||||
<% unless @project.homepage.empty? %><li><%=l(:field_homepage)%>: <%= link_to @project.homepage, @project.homepage %></li><% end %>
|
<% unless @project.homepage.empty? %><li><%=l(:field_homepage)%>: <%= auto_link @project.homepage %></li><% end %>
|
||||||
<li><%=l(:field_created_on)%>: <%= format_date(@project.created_on) %></li>
|
<li><%=l(:field_created_on)%>: <%= format_date(@project.created_on) %></li>
|
||||||
<% for custom_value in @custom_values %>
|
<% for custom_value in @custom_values %>
|
||||||
<% if !custom_value.value.empty? %>
|
<% if !custom_value.value.empty? %>
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
<h2><%=l(:label_report_plural)%></h2>
|
<h2><%=l(:label_report_plural)%></h2>
|
||||||
|
|
||||||
<div class="splitcontentleft">
|
<div class="splitcontentleft">
|
||||||
<strong><%=l(:field_tracker)%></strong> <small>[ <%= link_to l(:label_details), :detail => 'author' %> ]</small>
|
<strong><%=l(:field_tracker)%></strong> <%= link_to image_tag('details'), :detail => 'author' %>
|
||||||
<%= render :partial => 'simple', :locals => { :data => @issues_by_tracker, :field_name => "tracker_id", :rows => @trackers } %>
|
<%= render :partial => 'simple', :locals => { :data => @issues_by_tracker, :field_name => "tracker_id", :rows => @trackers } %>
|
||||||
<br />
|
<br />
|
||||||
<strong><%=l(:field_priority)%></strong> <small>[ <%= link_to l(:label_details), :detail => 'priority' %> ]</small>
|
<strong><%=l(:field_priority)%></strong> <%= link_to image_tag('details'), :detail => 'priority' %>
|
||||||
<%= render :partial => 'simple', :locals => { :data => @issues_by_priority, :field_name => "priority_id", :rows => @priorities } %>
|
<%= render :partial => 'simple', :locals => { :data => @issues_by_priority, :field_name => "priority_id", :rows => @priorities } %>
|
||||||
<br />
|
<br />
|
||||||
<strong><%=l(:field_author)%></strong> <small>[ <%= link_to l(:label_details), :detail => 'author' %> ]</small>
|
<strong><%=l(:field_author)%></strong> <%= link_to image_tag('details'), :detail => 'author' %>
|
||||||
<%= render :partial => 'simple', :locals => { :data => @issues_by_author, :field_name => "author_id", :rows => @authors } %>
|
<%= render :partial => 'simple', :locals => { :data => @issues_by_author, :field_name => "author_id", :rows => @authors } %>
|
||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="splitcontentright">
|
<div class="splitcontentright">
|
||||||
<strong><%=l(:field_category)%></strong> <small>[ <%= link_to l(:label_details), :detail => 'category' %> ]</small>
|
<strong><%=l(:field_category)%></strong> <%= link_to image_tag('details'), :detail => 'category' %>
|
||||||
<%= render :partial => 'simple', :locals => { :data => @issues_by_category, :field_name => "category_id", :rows => @categories } %>
|
<%= render :partial => 'simple', :locals => { :data => @issues_by_category, :field_name => "category_id", :rows => @categories } %>
|
||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,15 +1,9 @@
|
||||||
<%= error_messages_for 'user' %>
|
<%= error_messages_for 'user' %>
|
||||||
|
|
||||||
<div class="box">
|
|
||||||
<!--[form:user]-->
|
<!--[form:user]-->
|
||||||
|
<div class="box">
|
||||||
|
<h3><%=l(:label_information_plural)%></h3>
|
||||||
<p><%= f.text_field :login, :required => true, :size => 25 %></p>
|
<p><%= f.text_field :login, :required => true, :size => 25 %></p>
|
||||||
|
|
||||||
<p><label for="password"><%=l(:field_password)%><span class="required"> *</span></label>
|
|
||||||
<%= password_field_tag 'password', nil, :size => 25 %></p>
|
|
||||||
|
|
||||||
<p><label for="password_confirmation"><%=l(:field_password_confirmation)%><span class="required"> *</span></label>
|
|
||||||
<%= password_field_tag 'password_confirmation', nil, :size => 25 %></p>
|
|
||||||
|
|
||||||
<p><%= f.text_field :firstname, :required => true %></p>
|
<p><%= f.text_field :firstname, :required => true %></p>
|
||||||
<p><%= f.text_field :lastname, :required => true %></p>
|
<p><%= f.text_field :lastname, :required => true %></p>
|
||||||
<p><%= f.text_field :mail, :required => true %></p>
|
<p><%= f.text_field :mail, :required => true %></p>
|
||||||
|
@ -21,6 +15,16 @@
|
||||||
|
|
||||||
<p><%= f.check_box :admin %></p>
|
<p><%= f.check_box :admin %></p>
|
||||||
<p><%= f.check_box :mail_notification %></p>
|
<p><%= f.check_box :mail_notification %></p>
|
||||||
|
|
||||||
<!--[eoform:user]-->
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<h3><%=l(:label_authentication)%></h3>
|
||||||
|
<% unless @auth_sources.empty? %>
|
||||||
|
<p><%= f.select :auth_source_id, [[l(:label_internal), ""]] + @auth_sources.collect { |a| [a.name, a.id] } %></p>
|
||||||
|
<% end %>
|
||||||
|
<p><label for="password"><%=l(:field_password)%><span class="required"> *</span></label>
|
||||||
|
<%= password_field_tag 'password', nil, :size => 25 %></p>
|
||||||
|
<p><label for="password_confirmation"><%=l(:field_password_confirmation)%><span class="required"> *</span></label>
|
||||||
|
<%= password_field_tag 'password_confirmation', nil, :size => 25 %></p>
|
||||||
|
</div>
|
||||||
|
<!--[eoform:user]-->
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
# Uncomment to disable user self-registration
|
# Uncomment to disable user self-registration
|
||||||
# $RDM_SELF_REGISTRATION = false
|
# $RDM_SELF_REGISTRATION = false
|
||||||
|
|
||||||
# Default langage ('en', 'es', 'fr' are available)
|
# Default langage ('en', 'es', 'de', 'fr' are available)
|
||||||
# $RDM_DEFAULT_LANG = 'en'
|
# $RDM_DEFAULT_LANG = 'en'
|
||||||
|
|
||||||
# Email adress used to send mail notifications
|
# Email adress used to send mail notifications
|
||||||
|
@ -58,3 +58,8 @@
|
||||||
# Signature displayed in footer
|
# Signature displayed in footer
|
||||||
# Email adresses will be automatically displayed as a mailto link
|
# Email adresses will be automatically displayed as a mailto link
|
||||||
# $RDM_FOOTER_SIG = "admin@somenet.foo"
|
# $RDM_FOOTER_SIG = "admin@somenet.foo"
|
||||||
|
|
||||||
|
# Textile formatting (only available if RedCloth is installed)
|
||||||
|
# Textile formatting is automativaly disabled if RedCloth is not available
|
||||||
|
# Set to true to manually disable.
|
||||||
|
# $RDM_TEXTILE_DISABLED = true
|
|
@ -105,6 +105,10 @@ $RDM_HEADER_SUBTITLE ||= "Project management"
|
||||||
# footer signature
|
# footer signature
|
||||||
$RDM_FOOTER_SIG = "admin@somenet.foo"
|
$RDM_FOOTER_SIG = "admin@somenet.foo"
|
||||||
|
|
||||||
|
# textile formatting
|
||||||
|
# automaticaly disabled if 'textile' method is not defined (RedCloth unavailable)
|
||||||
|
$RDM_TEXTILE_DISABLED = true unless ActionView::Helpers::TextHelper.method_defined? "textilize"
|
||||||
|
|
||||||
# application name
|
# application name
|
||||||
RDM_APP_NAME = "redMine"
|
RDM_APP_NAME = "redMine"
|
||||||
# application version
|
# application version
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
class IssueStartDate < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
add_column :issues, :start_date, :date
|
||||||
|
add_column :issues, :done_ratio, :integer, :default => 0, :null => false
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
remove_column :issues, :start_date
|
||||||
|
remove_column :issues, :done_ratio
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,13 @@
|
||||||
|
class CalendarAndActivity < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
Permission.create :controller => "projects", :action => "activity", :description => "label_activity", :sort => 160, :is_public => true, :mail_option => 0, :mail_enabled => 0
|
||||||
|
Permission.create :controller => "projects", :action => "calendar", :description => "label_calendar", :sort => 165, :is_public => true, :mail_option => 0, :mail_enabled => 0
|
||||||
|
Permission.create :controller => "projects", :action => "gantt", :description => "label_gantt", :sort => 166, :is_public => true, :mail_option => 0, :mail_enabled => 0
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
Permission.find(:first, :conditions => ["controller=? and action=?", 'projects', 'activity']).destroy
|
||||||
|
Permission.find(:first, :conditions => ["controller=? and action=?", 'projects', 'calendar']).destroy
|
||||||
|
Permission.find(:first, :conditions => ["controller=? and action=?", 'projects', 'gantt']).destroy
|
||||||
|
end
|
||||||
|
end
|
|
@ -5,7 +5,31 @@ Copyright (C) 2006 Jean-Philippe Lang
|
||||||
http://redmine.org/
|
http://redmine.org/
|
||||||
|
|
||||||
|
|
||||||
== xx/xx/2006 v0.3.0
|
== xx/xx/2006 v0.x.x
|
||||||
|
|
||||||
|
* new functionality: move an issue to another project or tracker
|
||||||
|
* new functionality: add a note to an issue
|
||||||
|
* new report: project activity
|
||||||
|
* "start date" and "% done" fields added on issues
|
||||||
|
* project calendar added
|
||||||
|
* gantt chart added (exportable to pdf)
|
||||||
|
* single/multiple issues pdf export added
|
||||||
|
* issues reports improvements
|
||||||
|
* multiple file upload for issues attachments
|
||||||
|
* textile formating of issue and news descritions (RedCloth required)
|
||||||
|
* integration of DotClear jstoolbar for textile formatting
|
||||||
|
* calendar date picker for date fields (LGPL DHTML Calendar http://sourceforge.net/projects/jscalendar)
|
||||||
|
* new filter in issues list: Author
|
||||||
|
* ajaxified paginators
|
||||||
|
* option to set number of results per page on issues list
|
||||||
|
* localized csv separator (comma/semicolon)
|
||||||
|
* csv output encoded to ISO-8859-1
|
||||||
|
* user custom field displayed on account/show
|
||||||
|
* default configuration improved (default roles, trackers, status, permissions and workflows)
|
||||||
|
* fixed: custom fields not in csv exports
|
||||||
|
* fixed: project settings now displayed according to user's permissions
|
||||||
|
|
||||||
|
== 10/08/2006 v0.3.0
|
||||||
|
|
||||||
* user authentication against multiple LDAP (optional)
|
* user authentication against multiple LDAP (optional)
|
||||||
* token based "lost password" functionality
|
* token based "lost password" functionality
|
||||||
|
|
|
@ -9,18 +9,21 @@ http://redmine.org/
|
||||||
|
|
||||||
* Ruby on Rails 1.1
|
* Ruby on Rails 1.1
|
||||||
* Iconv
|
* Iconv
|
||||||
* Net::LDAP for Ruby (for LDAP authentication)
|
|
||||||
* a database (see compatibility below)
|
* a database (see compatibility below)
|
||||||
* (recommended) Apache/Lighttpd with FCGI support
|
* (recommended) Apache/Lighttpd with FCGI support
|
||||||
|
|
||||||
Supported databases:
|
Optional:
|
||||||
|
* RedCloth (for textile formatting)
|
||||||
|
* Net::LDAP for Ruby (for LDAP authentication)
|
||||||
|
|
||||||
|
Supported databases:
|
||||||
* MySQL (tested with MySQL 5)
|
* MySQL (tested with MySQL 5)
|
||||||
* PostgreSQL (tested with PostgreSQL 8.1)
|
* PostgreSQL (tested with PostgreSQL 8.1)
|
||||||
* Oracle (tested with Oracle 10g)
|
* Oracle (tested with Oracle 10g)
|
||||||
* SQL Server (tested with SQL Server 2005)
|
* SQL Server (tested with SQL Server 2005)
|
||||||
* SQLite (tested with SQLite 3)
|
* SQLite (tested with SQLite 3)
|
||||||
|
|
||||||
|
|
||||||
== Upgrade
|
== Upgrade
|
||||||
|
|
||||||
Due to major database changes, there is no migration support from beta 0.2.0.
|
Due to major database changes, there is no migration support from beta 0.2.0.
|
||||||
|
|
|
@ -31,7 +31,8 @@ activerecord_error_too_short: ist zu kurz
|
||||||
activerecord_error_wrong_length: ist die falsche Länge
|
activerecord_error_wrong_length: ist die falsche Länge
|
||||||
activerecord_error_taken: ist bereits genommen worden
|
activerecord_error_taken: ist bereits genommen worden
|
||||||
activerecord_error_not_a_number: ist nicht eine Zahl
|
activerecord_error_not_a_number: ist nicht eine Zahl
|
||||||
#activerecord_error_not_a_date: is not a valid date
|
activerecord_error_not_a_date: ist nicht ein gültiges Datum
|
||||||
|
activerecord_error_greater_than_start_date: muß als grösser sein beginnen Datum
|
||||||
|
|
||||||
general_fmt_age: %d yr
|
general_fmt_age: %d yr
|
||||||
general_fmt_age_plural: %d yrs
|
general_fmt_age_plural: %d yrs
|
||||||
|
@ -45,6 +46,7 @@ general_text_no: 'nein'
|
||||||
general_text_yes: 'ja'
|
general_text_yes: 'ja'
|
||||||
general_lang_de: 'Deutsch'
|
general_lang_de: 'Deutsch'
|
||||||
general_csv_separator: ';'
|
general_csv_separator: ';'
|
||||||
|
general_day_names: Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag
|
||||||
|
|
||||||
notice_account_updated: Konto wurde erfolgreich aktualisiert.
|
notice_account_updated: Konto wurde erfolgreich aktualisiert.
|
||||||
notice_account_invalid_creditentials: Unzulässiger Benutzer oder Passwort
|
notice_account_invalid_creditentials: Unzulässiger Benutzer oder Passwort
|
||||||
|
@ -62,8 +64,8 @@ notice_successful_connection: Erfolgreicher Anschluß.
|
||||||
notice_file_not_found: Erbetene Akte besteht nicht oder ist gelöscht worden.
|
notice_file_not_found: Erbetene Akte besteht nicht oder ist gelöscht worden.
|
||||||
notice_locking_conflict: Data have been updated by another user.
|
notice_locking_conflict: Data have been updated by another user.
|
||||||
|
|
||||||
#mail_subject_lost_password: Your redMine password
|
mail_subject_lost_password: Dein redMine Kennwort
|
||||||
#mail_subject_register: redMine account activation
|
mail_subject_register: redMine Kontoaktivierung
|
||||||
|
|
||||||
gui_validation_error: 1 Störung
|
gui_validation_error: 1 Störung
|
||||||
gui_validation_error_plural: %d Störungen
|
gui_validation_error_plural: %d Störungen
|
||||||
|
@ -91,15 +93,15 @@ field_value: Wert
|
||||||
field_category: Kategorie
|
field_category: Kategorie
|
||||||
field_title: Títel
|
field_title: Títel
|
||||||
field_project: Projekt
|
field_project: Projekt
|
||||||
#field_issue: Issue
|
field_issue: Antrag
|
||||||
field_status: Status
|
field_status: Status
|
||||||
field_notes: Anmerkungen
|
field_notes: Anmerkungen
|
||||||
field_is_closed: Problem erledigt
|
field_is_closed: Problem erledigt
|
||||||
#field_is_default: Default status
|
field_is_default: Rückstellung status
|
||||||
field_html_color: Farbe
|
field_html_color: Farbe
|
||||||
field_tracker: Tracker
|
field_tracker: Tracker
|
||||||
field_subject: Thema
|
field_subject: Thema
|
||||||
#field_due_date: Due date
|
field_due_date: Abgabedatum
|
||||||
field_assigned_to: Zugewiesen an
|
field_assigned_to: Zugewiesen an
|
||||||
field_priority: Priorität
|
field_priority: Priorität
|
||||||
field_fixed_version: Erledigt in Version
|
field_fixed_version: Erledigt in Version
|
||||||
|
@ -107,11 +109,11 @@ field_user: Benutzer
|
||||||
field_role: Rolle
|
field_role: Rolle
|
||||||
field_homepage: Startseite
|
field_homepage: Startseite
|
||||||
field_is_public: Öffentlich
|
field_is_public: Öffentlich
|
||||||
#field_parent: Subprojekt von
|
field_parent: Subprojekt von
|
||||||
field_is_in_chlog: Ansicht der Issues in der Historie
|
field_is_in_chlog: Ansicht der Issues in der Historie
|
||||||
field_login: Mitgliedsname
|
field_login: Mitgliedsname
|
||||||
field_mail_notification: Mailbenachrichtigung
|
field_mail_notification: Mailbenachrichtigung
|
||||||
#field_admin: Administrator
|
field_admin: Administrator
|
||||||
field_locked: Gesperrt
|
field_locked: Gesperrt
|
||||||
field_last_login_on: Letzte Anmeldung
|
field_last_login_on: Letzte Anmeldung
|
||||||
field_language: Sprache
|
field_language: Sprache
|
||||||
|
@ -122,14 +124,16 @@ field_password_confirmation: Bestätigung
|
||||||
field_version: Version
|
field_version: Version
|
||||||
field_type: Typ
|
field_type: Typ
|
||||||
field_host: Host
|
field_host: Host
|
||||||
#field_port: Port
|
field_port: Port
|
||||||
#field_account: Account
|
field_account: Konto
|
||||||
#field_base_dn: Base DN
|
field_base_dn: Base DN
|
||||||
#field_attr_login: Login attribute
|
field_attr_login: Mitgliedsnameattribut
|
||||||
#field_attr_firstname: Firstname attribute
|
field_attr_firstname: Vornamensattribut
|
||||||
#field_attr_lastname: Lastname attribute
|
field_attr_lastname: Namenattribut
|
||||||
#field_attr_mail: Email attribute
|
field_attr_mail: Emailattribut
|
||||||
#field_onthefly: On-the-fly user creation
|
field_onthefly: On-the-fly Benutzerkreation
|
||||||
|
field_start_date: Beginn
|
||||||
|
field_done_ratio: %% Getan
|
||||||
|
|
||||||
label_user: Benutzer
|
label_user: Benutzer
|
||||||
label_user_plural: Benutzer
|
label_user_plural: Benutzer
|
||||||
|
@ -137,11 +141,11 @@ label_user_new: Neuer Benutzer
|
||||||
label_project: Projekt
|
label_project: Projekt
|
||||||
label_project_new: Neues Projekt
|
label_project_new: Neues Projekt
|
||||||
label_project_plural: Projekte
|
label_project_plural: Projekte
|
||||||
#label_project_latest: Latest projects
|
label_project_latest: Neueste Projekte
|
||||||
#label_issue: Issue
|
label_issue: Antrag
|
||||||
#label_issue_new: New issue
|
label_issue_new: Neue Antrag
|
||||||
#label_issue_plural: Issues
|
label_issue_plural: Anträge
|
||||||
#label_issue_view_all: View all issues
|
label_issue_view_all: Alle Anträge ansehen
|
||||||
label_document: Dokument
|
label_document: Dokument
|
||||||
label_document_new: Neues Dokument
|
label_document_new: Neues Dokument
|
||||||
label_document_plural: Dokumente
|
label_document_plural: Dokumente
|
||||||
|
@ -156,11 +160,11 @@ label_tracker: Tracker
|
||||||
label_tracker_plural: Tracker
|
label_tracker_plural: Tracker
|
||||||
label_tracker_new: Neuer Tracker
|
label_tracker_new: Neuer Tracker
|
||||||
label_workflow: Workflow
|
label_workflow: Workflow
|
||||||
label_issue_status: Problem Status
|
label_issue_status: Antrag Status
|
||||||
label_issue_status_plural: Problem Stati
|
label_issue_status_plural: Antrag Stati
|
||||||
label_issue_status_new: Neuer Status
|
label_issue_status_new: Neuer Status
|
||||||
label_issue_category: Problem Kategorie
|
label_issue_category: Antrag Kategorie
|
||||||
label_issue_category_plural: Problem Kategorien
|
label_issue_category_plural: Antrag Kategorien
|
||||||
label_issue_category_new: Neue Kategorie
|
label_issue_category_new: Neue Kategorie
|
||||||
label_custom_field: Benutzerdefiniertes Feld
|
label_custom_field: Benutzerdefiniertes Feld
|
||||||
label_custom_field_plural: Benutzerdefinierte Felder
|
label_custom_field_plural: Benutzerdefinierte Felder
|
||||||
|
@ -169,7 +173,7 @@ label_enumerations: Enumerationen
|
||||||
label_enumeration_new: Neuer Wert
|
label_enumeration_new: Neuer Wert
|
||||||
label_information: Information
|
label_information: Information
|
||||||
label_information_plural: Informationen
|
label_information_plural: Informationen
|
||||||
#label_please_login: Please login
|
label_please_login: Anmelden
|
||||||
label_register: Anmelden
|
label_register: Anmelden
|
||||||
label_password_lost: Passwort vergessen
|
label_password_lost: Passwort vergessen
|
||||||
label_home: Hauptseite
|
label_home: Hauptseite
|
||||||
|
@ -183,42 +187,42 @@ label_help: Hilfe
|
||||||
label_reported_issues: Gemeldete Issues
|
label_reported_issues: Gemeldete Issues
|
||||||
label_assigned_to_me_issues: Mir zugewiesen
|
label_assigned_to_me_issues: Mir zugewiesen
|
||||||
label_last_login: Letzte Anmeldung
|
label_last_login: Letzte Anmeldung
|
||||||
#label_last_updates: Last updated
|
label_last_updates: Letztes aktualisiertes
|
||||||
#label_last_updates_plural: %d last updated
|
label_last_updates_plural: %d Letztes aktualisiertes
|
||||||
label_registered_on: Angemeldet am
|
label_registered_on: Angemeldet am
|
||||||
label_activity: Aktivität
|
label_activity: Aktivität
|
||||||
label_new: Neue
|
label_new: Neue
|
||||||
label_logged_as: Angemeldet als
|
label_logged_as: Angemeldet als
|
||||||
#label_environment: Environment
|
label_environment: Environment
|
||||||
label_authentication: Authentisierung
|
label_authentication: Authentisierung
|
||||||
#label_auth_source: Authentification mode
|
label_auth_source: Authentisierung Modus
|
||||||
#label_auth_source_new: New authentication mode
|
label_auth_source_new: Neuer Authentisierung Modus
|
||||||
#label_auth_source_plural: Authentification modes
|
label_auth_source_plural: Authentisierung Modi
|
||||||
#label_subproject: Subproject
|
label_subproject: Vorprojekt von
|
||||||
#label_subproject_plural: Subprojects
|
label_subproject_plural: Vorprojekte
|
||||||
label_min_max_length: Min - Max Länge
|
label_min_max_length: Min - Max Länge
|
||||||
label_list: Liste
|
label_list: Liste
|
||||||
label_date: Date
|
label_date: Date
|
||||||
label_integer: Zahl
|
label_integer: Zahl
|
||||||
label_boolean: Boolesch
|
label_boolean: Boolesch
|
||||||
#label_string: String
|
label_string: Text
|
||||||
label_text: Text
|
label_text: Langer Text
|
||||||
label_attribute: Attribut
|
label_attribute: Attribut
|
||||||
label_attribute_plural: Attribute
|
label_attribute_plural: Attribute
|
||||||
#label_download: %d Download
|
label_download: %d Herunterlade
|
||||||
#label_download_plural: %d Downloads
|
label_download_plural: %d Herunterlade
|
||||||
label_no_data: Nichts anzuzeigen
|
label_no_data: Nichts anzuzeigen
|
||||||
label_change_status: Statuswechsel
|
label_change_status: Statuswechsel
|
||||||
label_history: Historie
|
label_history: Historie
|
||||||
label_attachment: Datei
|
label_attachment: Datei
|
||||||
label_attachment_new: Neue Datei
|
label_attachment_new: Neue Datei
|
||||||
#label_attachment_delete: Delete file
|
label_attachment_delete: Löschungakten
|
||||||
label_attachment_plural: Dateien
|
label_attachment_plural: Dateien
|
||||||
label_report: Bericht
|
label_report: Bericht
|
||||||
label_report_plural: Berichte
|
label_report_plural: Berichte
|
||||||
#label_news: Neuigkeiten
|
label_news: Neuigkeit
|
||||||
#label_news_new: Add news
|
label_news_new: Neuigkeite addieren
|
||||||
#label_news_plural: Neuigkeiten
|
label_news_plural: Neuigkeiten
|
||||||
label_news_latest: Letzte Neuigkeiten
|
label_news_latest: Letzte Neuigkeiten
|
||||||
label_news_view_all: Alle Neuigkeiten anzeigen
|
label_news_view_all: Alle Neuigkeiten anzeigen
|
||||||
label_change_log: Change log
|
label_change_log: Change log
|
||||||
|
@ -228,14 +232,14 @@ label_version: Version
|
||||||
label_version_new: Neue Version
|
label_version_new: Neue Version
|
||||||
label_version_plural: Versionen
|
label_version_plural: Versionen
|
||||||
label_confirmation: Bestätigung
|
label_confirmation: Bestätigung
|
||||||
#label_export_csv: Export to CSV
|
label_export_csv: Export zu CSV
|
||||||
#label_export_pdf: Export to PDF
|
label_export_pdf: Export zu PDF
|
||||||
label_read: Lesen...
|
label_read: Lesen...
|
||||||
label_public_projects: Öffentliche Projekte
|
label_public_projects: Öffentliche Projekte
|
||||||
#label_open_issues: Open
|
label_open_issues: Geöffnet
|
||||||
#label_open_issues_plural: Open
|
label_open_issues_plural: Geöffnet
|
||||||
#label_closed_issues: Closed
|
label_closed_issues: Geschlossen
|
||||||
#label_closed_issues_plural: Closed
|
label_closed_issues_plural: Geschlossen
|
||||||
label_total: Gesamtzahl
|
label_total: Gesamtzahl
|
||||||
label_permissions: Berechtigungen
|
label_permissions: Berechtigungen
|
||||||
label_current_status: Gegenwärtiger Status
|
label_current_status: Gegenwärtiger Status
|
||||||
|
@ -245,9 +249,13 @@ label_none: Kein
|
||||||
label_next: Weiter
|
label_next: Weiter
|
||||||
label_previous: Zurück
|
label_previous: Zurück
|
||||||
label_used_by: Benutzt von
|
label_used_by: Benutzt von
|
||||||
#label_details: Details...
|
label_details: Details...
|
||||||
#label_add_note: Add a note
|
label_add_note: Eine Anmerkung addieren
|
||||||
#label_per_page: Per page
|
label_per_page: Pro Seite
|
||||||
|
label_calendar: Kalender
|
||||||
|
label_months_from: Monate von
|
||||||
|
label_gantt_chart: Gantt Diagramm
|
||||||
|
label_internal: Intern
|
||||||
|
|
||||||
button_login: Einloggen
|
button_login: Einloggen
|
||||||
button_submit: Einreichen
|
button_submit: Einreichen
|
||||||
|
@ -268,12 +276,12 @@ button_download: Fernzuladen
|
||||||
button_list: Aufzulisten
|
button_list: Aufzulisten
|
||||||
button_view: Siehe
|
button_view: Siehe
|
||||||
button_move: Bewegen
|
button_move: Bewegen
|
||||||
#button_back: Back
|
button_back: Rückkehr
|
||||||
|
|
||||||
text_select_mail_notifications: Aktionen für die Mailbenachrichtigung aktiviert werden soll.
|
text_select_mail_notifications: Aktionen für die Mailbenachrichtigung aktiviert werden soll.
|
||||||
text_regexp_info: eg. ^[A-Z0-9]+$
|
text_regexp_info: eg. ^[A-Z0-9]+$
|
||||||
text_min_max_length_info: 0 heisst keine Beschränkung
|
text_min_max_length_info: 0 heisst keine Beschränkung
|
||||||
#text_possible_values_info: values separated with |
|
text_possible_values_info: Werte trennten sich mit |
|
||||||
text_project_destroy_confirmation: Sind sie sicher, daß sie das Projekt löschen wollen ?
|
text_project_destroy_confirmation: Sind sie sicher, daß sie das Projekt löschen wollen ?
|
||||||
text_workflow_edit: Auswahl Workflow zum Bearbeiten
|
text_workflow_edit: Auswahl Workflow zum Bearbeiten
|
||||||
text_are_you_sure: Sind sie sicher ?
|
text_are_you_sure: Sind sie sicher ?
|
||||||
|
|
|
@ -32,6 +32,7 @@ activerecord_error_wrong_length: is the wrong length
|
||||||
activerecord_error_taken: has already been taken
|
activerecord_error_taken: has already been taken
|
||||||
activerecord_error_not_a_number: is not a number
|
activerecord_error_not_a_number: is not a number
|
||||||
activerecord_error_not_a_date: is not a valid date
|
activerecord_error_not_a_date: is not a valid date
|
||||||
|
activerecord_error_greater_than_start_date: must be greater than start date
|
||||||
|
|
||||||
general_fmt_age: %d yr
|
general_fmt_age: %d yr
|
||||||
general_fmt_age_plural: %d yrs
|
general_fmt_age_plural: %d yrs
|
||||||
|
@ -45,6 +46,7 @@ general_text_no: 'no'
|
||||||
general_text_yes: 'yes'
|
general_text_yes: 'yes'
|
||||||
general_lang_en: 'English'
|
general_lang_en: 'English'
|
||||||
general_csv_separator: ','
|
general_csv_separator: ','
|
||||||
|
general_day_names: Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
|
||||||
|
|
||||||
notice_account_updated: Account was successfully updated.
|
notice_account_updated: Account was successfully updated.
|
||||||
notice_account_invalid_creditentials: Invalid user or password
|
notice_account_invalid_creditentials: Invalid user or password
|
||||||
|
@ -130,6 +132,8 @@ field_attr_firstname: Firstname attribute
|
||||||
field_attr_lastname: Lastname attribute
|
field_attr_lastname: Lastname attribute
|
||||||
field_attr_mail: Email attribute
|
field_attr_mail: Email attribute
|
||||||
field_onthefly: On-the-fly user creation
|
field_onthefly: On-the-fly user creation
|
||||||
|
field_start_date: Start
|
||||||
|
field_done_ratio: %% Done
|
||||||
|
|
||||||
label_user: User
|
label_user: User
|
||||||
label_user_plural: Users
|
label_user_plural: Users
|
||||||
|
@ -191,9 +195,9 @@ label_new: New
|
||||||
label_logged_as: Logged as
|
label_logged_as: Logged as
|
||||||
label_environment: Environment
|
label_environment: Environment
|
||||||
label_authentication: Authentication
|
label_authentication: Authentication
|
||||||
label_auth_source: Authentification mode
|
label_auth_source: Authentication mode
|
||||||
label_auth_source_new: New authentication mode
|
label_auth_source_new: New authentication mode
|
||||||
label_auth_source_plural: Authentification modes
|
label_auth_source_plural: Authentication modes
|
||||||
label_subproject: Subproject
|
label_subproject: Subproject
|
||||||
label_subproject_plural: Subprojects
|
label_subproject_plural: Subprojects
|
||||||
label_min_max_length: Min - Max length
|
label_min_max_length: Min - Max length
|
||||||
|
@ -201,8 +205,8 @@ label_list: List
|
||||||
label_date: Date
|
label_date: Date
|
||||||
label_integer: Integer
|
label_integer: Integer
|
||||||
label_boolean: Boolean
|
label_boolean: Boolean
|
||||||
label_string: String
|
label_string: Text
|
||||||
label_text: Text
|
label_text: Long text
|
||||||
label_attribute: Attribute
|
label_attribute: Attribute
|
||||||
label_attribute_plural: Attributes
|
label_attribute_plural: Attributes
|
||||||
label_download: %d Download
|
label_download: %d Download
|
||||||
|
@ -248,6 +252,10 @@ label_used_by: Used by
|
||||||
label_details: Details...
|
label_details: Details...
|
||||||
label_add_note: Add a note
|
label_add_note: Add a note
|
||||||
label_per_page: Per page
|
label_per_page: Per page
|
||||||
|
label_calendar: Calendar
|
||||||
|
label_months_from: months from
|
||||||
|
label_gantt_chart: Gantt chart
|
||||||
|
label_internal: Internal
|
||||||
|
|
||||||
button_login: Login
|
button_login: Login
|
||||||
button_submit: Submit
|
button_submit: Submit
|
||||||
|
|
|
@ -31,7 +31,8 @@ activerecord_error_too_short: is too short
|
||||||
activerecord_error_wrong_length: is the wrong length
|
activerecord_error_wrong_length: is the wrong length
|
||||||
activerecord_error_taken: has already been taken
|
activerecord_error_taken: has already been taken
|
||||||
activerecord_error_not_a_number: is not a number
|
activerecord_error_not_a_number: is not a number
|
||||||
#activerecord_error_not_a_date: is not a valid date
|
activerecord_error_not_a_date: no es una fecha válida
|
||||||
|
activerecord_error_greater_than_start_date: debe ser la fecha mayor que del comienzo
|
||||||
|
|
||||||
general_fmt_age: %d año
|
general_fmt_age: %d año
|
||||||
general_fmt_age_plural: %d años
|
general_fmt_age_plural: %d años
|
||||||
|
@ -45,6 +46,7 @@ general_text_no: 'no'
|
||||||
general_text_yes: 'sí'
|
general_text_yes: 'sí'
|
||||||
general_lang_es: 'Español'
|
general_lang_es: 'Español'
|
||||||
general_csv_separator: ';'
|
general_csv_separator: ';'
|
||||||
|
general_day_names: Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo
|
||||||
|
|
||||||
notice_account_updated: Account was successfully updated.
|
notice_account_updated: Account was successfully updated.
|
||||||
notice_account_invalid_creditentials: Invalid user or password
|
notice_account_invalid_creditentials: Invalid user or password
|
||||||
|
@ -62,8 +64,8 @@ notice_successful_connection: Successful connection.
|
||||||
notice_file_not_found: Requested file doesn't exist or has been deleted.
|
notice_file_not_found: Requested file doesn't exist or has been deleted.
|
||||||
notice_locking_conflict: Data have been updated by another user.
|
notice_locking_conflict: Data have been updated by another user.
|
||||||
|
|
||||||
#mail_subject_lost_password: Your redMine password
|
mail_subject_lost_password: Tu contraseña del redMine
|
||||||
#mail_subject_register: redMine account activation
|
mail_subject_register: Activación de la cuenta del redMine
|
||||||
|
|
||||||
gui_validation_error: 1 error
|
gui_validation_error: 1 error
|
||||||
gui_validation_error_plural: %d errores
|
gui_validation_error_plural: %d errores
|
||||||
|
@ -85,8 +87,8 @@ field_field_format: Formato
|
||||||
field_is_for_all: Para todos los proyectos
|
field_is_for_all: Para todos los proyectos
|
||||||
field_possible_values: Valores posibles
|
field_possible_values: Valores posibles
|
||||||
field_regexp: Expresión regular
|
field_regexp: Expresión regular
|
||||||
#field_min_length: Minimum length
|
field_min_length: Longitud mínima
|
||||||
#field_max_length: Maximum length
|
field_max_length: Longitud máxima
|
||||||
field_value: Valor
|
field_value: Valor
|
||||||
field_category: Categoría
|
field_category: Categoría
|
||||||
field_title: Título
|
field_title: Título
|
||||||
|
@ -99,7 +101,7 @@ field_is_default: Estatuto por defecto
|
||||||
field_html_color: Color
|
field_html_color: Color
|
||||||
field_tracker: Tracker
|
field_tracker: Tracker
|
||||||
field_subject: Tema
|
field_subject: Tema
|
||||||
#field_due_date: Due date
|
field_due_date: Fecha debida
|
||||||
field_assigned_to: Asignado a
|
field_assigned_to: Asignado a
|
||||||
field_priority: Prioridad
|
field_priority: Prioridad
|
||||||
field_fixed_version: Versión corregida
|
field_fixed_version: Versión corregida
|
||||||
|
@ -107,7 +109,7 @@ field_user: Usuario
|
||||||
field_role: Papel
|
field_role: Papel
|
||||||
field_homepage: Sitio web
|
field_homepage: Sitio web
|
||||||
field_is_public: Público
|
field_is_public: Público
|
||||||
#field_parent: Subproject de
|
field_parent: Proyecto secundario de
|
||||||
field_is_in_chlog: Consultar las peticiones en el histórico
|
field_is_in_chlog: Consultar las peticiones en el histórico
|
||||||
field_login: Identificador
|
field_login: Identificador
|
||||||
field_mail_notification: Notificación por mail
|
field_mail_notification: Notificación por mail
|
||||||
|
@ -121,15 +123,17 @@ field_new_password: Nueva contraseña
|
||||||
field_password_confirmation: Confirmación
|
field_password_confirmation: Confirmación
|
||||||
field_version: Versión
|
field_version: Versión
|
||||||
field_type: Tipo
|
field_type: Tipo
|
||||||
#field_host: Host
|
field_host: Anfitrión
|
||||||
#field_port: Port
|
field_port: Puerto
|
||||||
#field_account: Account
|
field_account: Cuenta
|
||||||
#field_base_dn: Base DN
|
field_base_dn: Base DN
|
||||||
#field_attr_login: Login attribute
|
field_attr_login: Cualidad del identificador
|
||||||
#field_attr_firstname: Firstname attribute
|
field_attr_firstname: Cualidad del nombre
|
||||||
#field_attr_lastname: Lastname attribute
|
field_attr_lastname: Cualidad del apellido
|
||||||
#field_attr_mail: Email attribute
|
field_attr_mail: Cualidad del Email
|
||||||
#field_onthefly: On-the-fly user creation
|
field_onthefly: Creación del usuario On-the-fly
|
||||||
|
field_start_date: Comienzo
|
||||||
|
field_done_ratio: %% Realizado
|
||||||
|
|
||||||
label_user: Usuario
|
label_user: Usuario
|
||||||
label_user_plural: Usuarios
|
label_user_plural: Usuarios
|
||||||
|
@ -137,7 +141,7 @@ label_user_new: Nuevo usuario
|
||||||
label_project: Proyecto
|
label_project: Proyecto
|
||||||
label_project_new: Nuevo proyecto
|
label_project_new: Nuevo proyecto
|
||||||
label_project_plural: Proyectos
|
label_project_plural: Proyectos
|
||||||
#label_project_latest: Latest projects
|
label_project_latest: Los proyectos más últimos
|
||||||
label_issue: Petición
|
label_issue: Petición
|
||||||
label_issue_new: Nueva petición
|
label_issue_new: Nueva petición
|
||||||
label_issue_plural: Peticiones
|
label_issue_plural: Peticiones
|
||||||
|
@ -170,7 +174,7 @@ label_enumeration_new: Nuevo valor
|
||||||
label_information: Informacion
|
label_information: Informacion
|
||||||
label_information_plural: Informaciones
|
label_information_plural: Informaciones
|
||||||
label_please_login: Conexión
|
label_please_login: Conexión
|
||||||
#label_register: Register
|
label_register: Registrar
|
||||||
label_password_lost: ¿Olvidaste la contraseña?
|
label_password_lost: ¿Olvidaste la contraseña?
|
||||||
label_home: Acogida
|
label_home: Acogida
|
||||||
label_my_page: Mi página
|
label_my_page: Mi página
|
||||||
|
@ -189,33 +193,33 @@ label_registered_on: Inscrito el
|
||||||
label_activity: Actividad
|
label_activity: Actividad
|
||||||
label_new: Nuevo
|
label_new: Nuevo
|
||||||
label_logged_as: Conectado como
|
label_logged_as: Conectado como
|
||||||
#label_environment: Environment
|
label_environment: Environment
|
||||||
#label_authentication: Authentication
|
label_authentication: Autentificación
|
||||||
#label_auth_source: Authentification mode
|
label_auth_source: Modo de la autentificación
|
||||||
#label_auth_source_new: New authentication mode
|
label_auth_source_new: Nuevo modo de la autentificación
|
||||||
#label_auth_source_plural: Authentification modes
|
label_auth_source_plural: Modos de la autentificación
|
||||||
#label_subproject: Subproject
|
label_subproject: Proyecto secundario
|
||||||
#label_subproject_plural: Subprojects
|
label_subproject_plural: Proyectos secundarios
|
||||||
#label_min_max_length: Min - Max length
|
label_min_max_length: Longitud mín - máx
|
||||||
#label_list: List
|
label_list: Lista
|
||||||
label_date: Fecha
|
label_date: Fecha
|
||||||
#label_integer: Integer
|
label_integer: Número
|
||||||
#label_boolean: Boolean
|
label_boolean: Boleano
|
||||||
#label_string: String
|
label_string: Texto
|
||||||
#label_text: Text
|
label_text: Texto largo
|
||||||
#label_attribute: Attribute
|
label_attribute: Cualidad
|
||||||
#label_attribute_plural: Attributes
|
label_attribute_plural: Cualidades
|
||||||
label_download: %d Telecarga
|
label_download: %d Telecarga
|
||||||
label_download_plural: %d Telecargas
|
label_download_plural: %d Telecargas
|
||||||
#label_no_data: No data to display
|
label_no_data: Ningunos datos a exhibir
|
||||||
label_change_status: Cambiar el estatuto
|
label_change_status: Cambiar el estatuto
|
||||||
label_history: Histórico
|
label_history: Histórico
|
||||||
label_attachment: Fichero
|
label_attachment: Fichero
|
||||||
label_attachment_new: Nuevo fichero
|
label_attachment_new: Nuevo fichero
|
||||||
#label_attachment_delete: Delete file
|
label_attachment_delete: Suprimir el fichero
|
||||||
label_attachment_plural: Ficheros
|
label_attachment_plural: Ficheros
|
||||||
#label_report: Report
|
label_report: Informe
|
||||||
#label_report_plural: Reports
|
label_report_plural: Informes
|
||||||
label_news: Noticia
|
label_news: Noticia
|
||||||
label_news_new: Nueva noticia
|
label_news_new: Nueva noticia
|
||||||
label_news_plural: Noticias
|
label_news_plural: Noticias
|
||||||
|
@ -238,16 +242,20 @@ label_closed_issues: Cerrada
|
||||||
label_closed_issues_plural: Cerradas
|
label_closed_issues_plural: Cerradas
|
||||||
label_total: Total
|
label_total: Total
|
||||||
label_permissions: Permisos
|
label_permissions: Permisos
|
||||||
#label_current_status: Current status
|
label_current_status: Estado actual
|
||||||
label_new_statuses_allowed: Nuevos estatutos autorizados
|
label_new_statuses_allowed: Nuevos estatutos autorizados
|
||||||
label_all: Todos
|
label_all: Todos
|
||||||
label_none: Ninguno
|
label_none: Ninguno
|
||||||
label_next: Próximo
|
label_next: Próximo
|
||||||
label_previous: Precedente
|
label_previous: Precedente
|
||||||
label_used_by: Utilizado por
|
label_used_by: Utilizado por
|
||||||
#label_details: Details...
|
label_details: Detalles...
|
||||||
#label_add_note: Add a note
|
label_add_note: Agregar una nota
|
||||||
#label_per_page: Per page
|
label_per_page: Por la página
|
||||||
|
label_calendar: Calendario
|
||||||
|
label_months_from: meses de
|
||||||
|
label_gantt_chart: Diagrama de Gantt
|
||||||
|
label_internal: Interno
|
||||||
|
|
||||||
button_login: Conexión
|
button_login: Conexión
|
||||||
button_submit: Someter
|
button_submit: Someter
|
||||||
|
@ -268,12 +276,12 @@ button_download: Telecargar
|
||||||
button_list: Listar
|
button_list: Listar
|
||||||
button_view: Ver
|
button_view: Ver
|
||||||
button_move: Mover
|
button_move: Mover
|
||||||
#button_back: Back
|
button_back: Atrás
|
||||||
|
|
||||||
text_select_mail_notifications: Seleccionar las actividades que necesitan la activación de la notificación por mail.
|
text_select_mail_notifications: Seleccionar las actividades que necesitan la activación de la notificación por mail.
|
||||||
text_regexp_info: eg. ^[A-Z0-9]+$
|
text_regexp_info: eg. ^[A-Z0-9]+$
|
||||||
text_min_max_length_info: 0 para ninguna restricción
|
text_min_max_length_info: 0 para ninguna restricción
|
||||||
#text_possible_values_info: values separated with |
|
text_possible_values_info: Los valores se separaron con |
|
||||||
text_project_destroy_confirmation: ¿ Estás seguro de querer eliminar el proyecto ?
|
text_project_destroy_confirmation: ¿ Estás seguro de querer eliminar el proyecto ?
|
||||||
text_workflow_edit: Seleccionar un workflow para actualizar
|
text_workflow_edit: Seleccionar un workflow para actualizar
|
||||||
text_are_you_sure: ¿ Estás seguro ?
|
text_are_you_sure: ¿ Estás seguro ?
|
||||||
|
|
|
@ -32,6 +32,7 @@ activerecord_error_wrong_length: n'est pas de la bonne longueur
|
||||||
activerecord_error_taken: est déjà utilisé
|
activerecord_error_taken: est déjà utilisé
|
||||||
activerecord_error_not_a_number: n'est pas un nombre
|
activerecord_error_not_a_number: n'est pas un nombre
|
||||||
activerecord_error_not_a_date: n'est pas une date valide
|
activerecord_error_not_a_date: n'est pas une date valide
|
||||||
|
activerecord_error_greater_than_start_date: doit être postérieur à la date de début
|
||||||
|
|
||||||
general_fmt_age: %d an
|
general_fmt_age: %d an
|
||||||
general_fmt_age_plural: %d ans
|
general_fmt_age_plural: %d ans
|
||||||
|
@ -45,6 +46,7 @@ general_text_no: 'non'
|
||||||
general_text_yes: 'oui'
|
general_text_yes: 'oui'
|
||||||
general_lang_fr: 'Français'
|
general_lang_fr: 'Français'
|
||||||
general_csv_separator: ';'
|
general_csv_separator: ';'
|
||||||
|
general_day_names: Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche
|
||||||
|
|
||||||
notice_account_updated: Le compte a été mis à jour avec succès.
|
notice_account_updated: Le compte a été mis à jour avec succès.
|
||||||
notice_account_invalid_creditentials: Identifiant ou mot de passe invalide.
|
notice_account_invalid_creditentials: Identifiant ou mot de passe invalide.
|
||||||
|
@ -130,6 +132,9 @@ field_attr_firstname: Attribut Prénom
|
||||||
field_attr_lastname: Attribut Nom
|
field_attr_lastname: Attribut Nom
|
||||||
field_attr_mail: Attribut Email
|
field_attr_mail: Attribut Email
|
||||||
field_onthefly: Création des utilisateurs à la volée
|
field_onthefly: Création des utilisateurs à la volée
|
||||||
|
field_start_date: Début
|
||||||
|
field_done_ratio: %% Réalisé
|
||||||
|
field_auth_source: Mode d'authentification
|
||||||
|
|
||||||
label_user: Utilisateur
|
label_user: Utilisateur
|
||||||
label_user_plural: Utilisateurs
|
label_user_plural: Utilisateurs
|
||||||
|
@ -201,8 +206,8 @@ label_list: Liste
|
||||||
label_date: Date
|
label_date: Date
|
||||||
label_integer: Entier
|
label_integer: Entier
|
||||||
label_boolean: Booléen
|
label_boolean: Booléen
|
||||||
label_string: Chaîne
|
label_string: Texte
|
||||||
label_text: Texte
|
label_text: Texte long
|
||||||
label_attribute: Attribut
|
label_attribute: Attribut
|
||||||
label_attribute_plural: Attributs
|
label_attribute_plural: Attributs
|
||||||
label_download: %d Téléchargement
|
label_download: %d Téléchargement
|
||||||
|
@ -248,6 +253,10 @@ label_used_by: Utilisé par
|
||||||
label_details: Détails...
|
label_details: Détails...
|
||||||
label_add_note: Ajouter une note
|
label_add_note: Ajouter une note
|
||||||
label_per_page: Par page
|
label_per_page: Par page
|
||||||
|
label_calendar: Calendrier
|
||||||
|
label_months_from: mois depuis
|
||||||
|
label_gantt_chart: Diagramme de Gantt
|
||||||
|
label_internal: Interne
|
||||||
|
|
||||||
button_login: Connexion
|
button_login: Connexion
|
||||||
button_submit: Soumettre
|
button_submit: Soumettre
|
||||||
|
|
|
@ -4,34 +4,74 @@ task :load_default_data => :environment do
|
||||||
include GLoc
|
include GLoc
|
||||||
set_language_if_valid($RDM_DEFAULT_LANG)
|
set_language_if_valid($RDM_DEFAULT_LANG)
|
||||||
|
|
||||||
|
begin
|
||||||
|
# check that no data already exists
|
||||||
|
if Role.find(:first)
|
||||||
|
raise "Some roles are already defined."
|
||||||
|
end
|
||||||
|
if Tracker.find(:first)
|
||||||
|
raise "Some trackers are already defined."
|
||||||
|
end
|
||||||
|
if IssueStatus.find(:first)
|
||||||
|
raise "Some statuses are already defined."
|
||||||
|
end
|
||||||
|
if Enumeration.find(:first)
|
||||||
|
raise "Some enumerations are already defined."
|
||||||
|
end
|
||||||
|
|
||||||
|
puts "Loading default configuration for language: #{current_language}"
|
||||||
|
|
||||||
# roles
|
# roles
|
||||||
r = Role.create :name => l(:default_role_manager)
|
manager = Role.create :name => l(:default_role_manager)
|
||||||
r.permissions = Permission.find(:all, :conditions => ["is_public=?", false])
|
manager.permissions = Permission.find(:all, :conditions => ["is_public=?", false])
|
||||||
r = Role.create :name => l(:default_role_developper)
|
|
||||||
r.permissions = Permission.find(:all, :conditions => ["is_public=?", false])
|
developper = Role.create :name => l(:default_role_developper)
|
||||||
r = Role.create :name => l(:default_role_reporter)
|
perms = [150, 320, 321, 322, 420, 421, 422, 1050, 1060, 1070, 1075, 1220, 1221, 1222, 1223, 1224, 1320, 1322, 1061, 1057]
|
||||||
r.permissions = Permission.find(:all, :conditions => ["is_public=?", false])
|
developper.permissions = Permission.find(:all, :conditions => ["sort IN (#{perms.join(',')})"])
|
||||||
|
|
||||||
|
reporter = Role.create :name => l(:default_role_reporter)
|
||||||
|
perms = [1050, 1060, 1070, 1057]
|
||||||
|
reporter.permissions = Permission.find(:all, :conditions => ["sort IN (#{perms.join(',')})"])
|
||||||
|
|
||||||
# trackers
|
# trackers
|
||||||
Tracker.create(:name => l(:default_tracker_bug), :is_in_chlog => true)
|
Tracker.create(:name => l(:default_tracker_bug), :is_in_chlog => true)
|
||||||
Tracker.create(:name => l(:default_tracker_feature), :is_in_chlog => true)
|
Tracker.create(:name => l(:default_tracker_feature), :is_in_chlog => true)
|
||||||
Tracker.create(:name => l(:default_tracker_support), :is_in_chlog => false)
|
Tracker.create(:name => l(:default_tracker_support), :is_in_chlog => false)
|
||||||
|
|
||||||
# issue statuses
|
# issue statuses
|
||||||
IssueStatus.create(:name => l(:default_issue_status_new), :is_closed => false, :is_default => true, :html_color => 'F98787')
|
new = IssueStatus.create(:name => l(:default_issue_status_new), :is_closed => false, :is_default => true, :html_color => 'F98787')
|
||||||
IssueStatus.create(:name => l(:default_issue_status_assigned), :is_closed => false, :is_default => false, :html_color => 'C0C0FF')
|
assigned = IssueStatus.create(:name => l(:default_issue_status_assigned), :is_closed => false, :is_default => false, :html_color => 'C0C0FF')
|
||||||
IssueStatus.create(:name => l(:default_issue_status_resolved), :is_closed => false, :is_default => false, :html_color => '88E0B3')
|
resolved = IssueStatus.create(:name => l(:default_issue_status_resolved), :is_closed => false, :is_default => false, :html_color => '88E0B3')
|
||||||
IssueStatus.create(:name => l(:default_issue_status_feedback), :is_closed => false, :is_default => false, :html_color => 'F3A4F4')
|
feedback = IssueStatus.create(:name => l(:default_issue_status_feedback), :is_closed => false, :is_default => false, :html_color => 'F3A4F4')
|
||||||
IssueStatus.create(:name => l(:default_issue_status_closed), :is_closed => true, :is_default => false, :html_color => 'DBDBDB')
|
closed = IssueStatus.create(:name => l(:default_issue_status_closed), :is_closed => true, :is_default => false, :html_color => 'DBDBDB')
|
||||||
IssueStatus.create(:name => l(:default_issue_status_rejected), :is_closed => true, :is_default => false, :html_color => 'F5C28B')
|
rejected = IssueStatus.create(:name => l(:default_issue_status_rejected), :is_closed => true, :is_default => false, :html_color => 'F5C28B')
|
||||||
|
|
||||||
# workflow
|
# workflow
|
||||||
Tracker.find(:all).each { |t|
|
Tracker.find(:all).each { |t|
|
||||||
Role.find(:all).each { |r|
|
IssueStatus.find(:all).each { |os|
|
||||||
IssueStatus.find(:all).each { |os|
|
IssueStatus.find(:all).each { |ns|
|
||||||
IssueStatus.find(:all).each { |ns|
|
Workflow.create(:tracker_id => t.id, :role_id => manager.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
|
||||||
Workflow.create(:tracker_id => t.id, :role_id => r.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Tracker.find(:all).each { |t|
|
||||||
|
[new, assigned, resolved, feedback].each { |os|
|
||||||
|
[assigned, resolved, feedback, closed].each { |ns|
|
||||||
|
Workflow.create(:tracker_id => t.id, :role_id => developper.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Tracker.find(:all).each { |t|
|
||||||
|
[new, assigned, resolved, feedback].each { |os|
|
||||||
|
[closed].each { |ns|
|
||||||
|
Workflow.create(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Workflow.create(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => resolved.id, :new_status_id => feedback.id)
|
||||||
|
}
|
||||||
|
|
||||||
# enumerations
|
# enumerations
|
||||||
Enumeration.create(:opt => "DCAT", :name => l(:default_doc_category_user))
|
Enumeration.create(:opt => "DCAT", :name => l(:default_doc_category_user))
|
||||||
Enumeration.create(:opt => "DCAT", :name => l(:default_doc_category_tech))
|
Enumeration.create(:opt => "DCAT", :name => l(:default_doc_category_tech))
|
||||||
|
@ -40,4 +80,9 @@ task :load_default_data => :environment do
|
||||||
Enumeration.create(:opt => "IPRI", :name => l(:default_priority_high))
|
Enumeration.create(:opt => "IPRI", :name => l(:default_priority_high))
|
||||||
Enumeration.create(:opt => "IPRI", :name => l(:default_priority_urgent))
|
Enumeration.create(:opt => "IPRI", :name => l(:default_priority_urgent))
|
||||||
Enumeration.create(:opt => "IPRI", :name => l(:default_priority_immediate))
|
Enumeration.create(:opt => "IPRI", :name => l(:default_priority_immediate))
|
||||||
|
|
||||||
|
rescue => error
|
||||||
|
puts "Error: " + error
|
||||||
|
puts "Default configuration can't be loaded."
|
||||||
|
end
|
||||||
end
|
end
|
After Width: | Height: | Size: 336 B |
After Width: | Height: | Size: 997 B |
After Width: | Height: | Size: 994 B |
After Width: | Height: | Size: 991 B |
After Width: | Height: | Size: 259 B |
After Width: | Height: | Size: 224 B |
After Width: | Height: | Size: 218 B |
After Width: | Height: | Size: 244 B |
After Width: | Height: | Size: 338 B |
After Width: | Height: | Size: 368 B |
After Width: | Height: | Size: 311 B |
After Width: | Height: | Size: 322 B |
After Width: | Height: | Size: 900 B |
After Width: | Height: | Size: 249 B |
After Width: | Height: | Size: 323 B |
After Width: | Height: | Size: 355 B |
After Width: | Height: | Size: 239 B |
After Width: | Height: | Size: 593 B |
After Width: | Height: | Size: 312 B |
After Width: | Height: | Size: 588 B |
After Width: | Height: | Size: 311 B |
|
@ -15,5 +15,6 @@ function addFileField() {
|
||||||
|
|
||||||
p = document.getElementById("attachments_p");
|
p = document.getElementById("attachments_p");
|
||||||
p.appendChild(document.createElement("br"));
|
p.appendChild(document.createElement("br"));
|
||||||
|
p.appendChild(document.createElement("br"));
|
||||||
p.appendChild(f);
|
p.appendChild(f);
|
||||||
}
|
}
|
|
@ -20,6 +20,8 @@
|
||||||
* ***** END LICENSE BLOCK *****
|
* ***** END LICENSE BLOCK *****
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Modified by JP LANG for textile formatting */
|
||||||
|
|
||||||
function jsToolBar(textarea) {
|
function jsToolBar(textarea) {
|
||||||
if (!document.createElement) { return; }
|
if (!document.createElement) { return; }
|
||||||
|
|
||||||
|
@ -344,13 +346,13 @@ jsToolBar.prototype.elements.del = {
|
||||||
}
|
}
|
||||||
|
|
||||||
// quote
|
// quote
|
||||||
jsToolBar.prototype.elements.quote = {
|
//jsToolBar.prototype.elements.quote = {
|
||||||
type: 'button',
|
// type: 'button',
|
||||||
title: 'Inline quote',
|
// title: 'Inline quote',
|
||||||
fn: {
|
// fn: {
|
||||||
wiki: function() { this.singleTag('{{','}}') }
|
// wiki: function() { this.singleTag('{{','}}') }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
// code
|
// code
|
||||||
jsToolBar.prototype.elements.code = {
|
jsToolBar.prototype.elements.code = {
|
||||||
|
@ -362,16 +364,16 @@ jsToolBar.prototype.elements.code = {
|
||||||
}
|
}
|
||||||
|
|
||||||
// spacer
|
// spacer
|
||||||
jsToolBar.prototype.elements.space1 = {type: 'space'}
|
//jsToolBar.prototype.elements.space1 = {type: 'space'}
|
||||||
|
|
||||||
// br
|
// br
|
||||||
jsToolBar.prototype.elements.br = {
|
//jsToolBar.prototype.elements.br = {
|
||||||
type: 'button',
|
// type: 'button',
|
||||||
title: 'Line break',
|
// title: 'Line break',
|
||||||
fn: {
|
// fn: {
|
||||||
wiki: function() { this.encloseSelection("%%%\n",'') }
|
// wiki: function() { this.encloseSelection("%%%\n",'') }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
// spacer
|
// spacer
|
||||||
jsToolBar.prototype.elements.space2 = {type: 'space'}
|
jsToolBar.prototype.elements.space2 = {type: 'space'}
|
||||||
|
@ -422,8 +424,7 @@ jsToolBar.prototype.elements.link = {
|
||||||
href = window.prompt(this.elements.link.href_prompt,href);
|
href = window.prompt(this.elements.link.href_prompt,href);
|
||||||
if (!href) { return false; }
|
if (!href) { return false; }
|
||||||
|
|
||||||
hreflang = window.prompt(this.elements.link.hreflang_prompt,
|
hreflang = ""
|
||||||
hreflang);
|
|
||||||
|
|
||||||
return { href: this.stripBaseURL(href), hreflang: hreflang };
|
return { href: this.stripBaseURL(href), hreflang: hreflang };
|
||||||
}
|
}
|
||||||
|
@ -432,11 +433,8 @@ jsToolBar.prototype.elements.link = {
|
||||||
jsToolBar.prototype.elements.link.fn.wiki = function() {
|
jsToolBar.prototype.elements.link.fn.wiki = function() {
|
||||||
var link = this.elements.link.prompt.call(this);
|
var link = this.elements.link.prompt.call(this);
|
||||||
if (link) {
|
if (link) {
|
||||||
var stag = '[';
|
var stag = '"';
|
||||||
var etag = '|'+link.href;
|
var etag = '":'+link.href;
|
||||||
if (link.hreflang) { etag = etag+'|'+link.hreflang; }
|
|
||||||
etag = etag+']';
|
|
||||||
|
|
||||||
this.encloseSelection(stag,etag);
|
this.encloseSelection(stag,etag);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -130,14 +130,14 @@ background-color: #80b0da;
|
||||||
|
|
||||||
html>body #content {
|
html>body #content {
|
||||||
height: auto;
|
height: auto;
|
||||||
min-height: 300px;
|
min-height: 500px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#content{
|
#content{
|
||||||
/*float:right;*/
|
/*float:right;*/
|
||||||
/*width:530px;*/
|
/*width:530px;*/
|
||||||
width: auto;
|
width: auto;
|
||||||
height:300px;
|
height:500px;
|
||||||
font-size:0.9em;
|
font-size:0.9em;
|
||||||
padding:20px 10px 10px 20px;
|
padding:20px 10px 10px 20px;
|
||||||
/*position: absolute;*/
|
/*position: absolute;*/
|
||||||
|
@ -198,7 +198,6 @@ textarea {
|
||||||
|
|
||||||
input {
|
input {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
margin-bottom: 4px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
input.button-small
|
input.button-small
|
||||||
|
@ -263,10 +262,10 @@ tr.ListHead a {
|
||||||
text-decoration:underline;
|
text-decoration:underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr.odd {
|
.odd {
|
||||||
background-color:#f0f1f2;
|
background-color:#f0f1f2;
|
||||||
}
|
}
|
||||||
tr.even {
|
.even {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,14 +279,24 @@ table.reportTableContent td {
|
||||||
padding:2px;
|
padding:2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table.calenderTable {
|
||||||
|
border:1px solid #578bb8;
|
||||||
|
width:99%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.calenderTable td {
|
||||||
|
border:1px solid #578bb8;
|
||||||
|
}
|
||||||
|
|
||||||
hr { border:none; border-bottom: dotted 2px #c0c0c0; }
|
hr { border:none; border-bottom: dotted 2px #c0c0c0; }
|
||||||
|
|
||||||
|
|
||||||
/**************** Sidebar styles ****************/
|
/**************** Sidebar styles ****************/
|
||||||
|
|
||||||
#subcontent{
|
#subcontent{
|
||||||
float:left;
|
position: absolute;
|
||||||
clear:both;
|
left: 0px;
|
||||||
width:110px;
|
width:110px;
|
||||||
padding:20px 20px 10px 5px;
|
padding:20px 20px 10px 5px;
|
||||||
}
|
}
|
||||||
|
|