Compare commits
93
Commits
2.3.0
...
2.3-stable
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5ce399b0fb | ||
|
|
e143f01e84 | ||
|
|
75e90593e0 | ||
|
|
daf2d54f27 | ||
|
|
8849727bd9 | ||
|
|
c4eb7c380e | ||
|
|
4deca5976e | ||
|
|
8a046027e5 | ||
|
|
711a8aa09b | ||
|
|
7ec18933e0 | ||
|
|
0a25ee385f | ||
|
|
79f90dfba5 | ||
|
|
2b53422d1d | ||
|
|
77ad962132 | ||
|
|
7bfb4759e7 | ||
|
|
9d3377c92c | ||
|
|
55a1869b86 | ||
|
|
bcae879091 | ||
|
|
2c44829509 | ||
|
|
d259dd2dd5 | ||
|
|
ddc016d81d | ||
|
|
e7c82e3934 | ||
|
|
e503f41f6f | ||
|
|
cd67243de5 | ||
|
|
b0c3b7a574 | ||
|
|
9a67caf248 | ||
|
|
67ee8653bd | ||
|
|
36978279c3 | ||
|
|
d155392b3c | ||
|
|
dc98cec17f | ||
|
|
e1e006f09e | ||
|
|
e8757fec2b | ||
|
|
591922c365 | ||
|
|
5eeca35317 | ||
|
|
2de51892ee | ||
|
|
3fe5e3bb6f | ||
|
|
bbf3ffe0aa | ||
|
|
b724eb4fec | ||
|
|
493119e795 | ||
|
|
f1b6b4ef33 | ||
|
|
ce002ee3df | ||
|
|
eb7862445c | ||
|
|
b31b5328e4 | ||
|
|
8efcf60319 | ||
|
|
e07bc81c5e | ||
|
|
5c6349a7ca | ||
|
|
37fbdb1457 | ||
|
|
a13acb7851 | ||
|
|
01887f1e67 | ||
|
|
3d9f274140 | ||
|
|
7375dff6d6 | ||
|
|
9874a61ec3 | ||
|
|
b5998b59ab | ||
|
|
c590cded4b | ||
|
|
5b8af329e2 | ||
|
|
0badc79162 | ||
|
|
5e57cbfdc4 | ||
|
|
489527ada7 | ||
|
|
6ce685a63c | ||
|
|
8045385990 | ||
|
|
3a4c46089f | ||
|
|
53d45273a9 | ||
|
|
cc23ab9652 | ||
|
|
ea33a66c6b | ||
|
|
a8c27df9fe | ||
|
|
af632568e3 | ||
|
|
2c408ca6a5 | ||
|
|
2a6dadf787 | ||
|
|
958f1accec | ||
|
|
77a2cbfa6a | ||
|
|
73b4b614ee | ||
|
|
1a71316b37 | ||
|
|
5fa087a792 | ||
|
|
425a0fe988 | ||
|
|
606762dcad | ||
|
|
07dc1e34ff | ||
|
|
1afe67bf74 | ||
|
|
f9f4591cff | ||
|
|
aa4fc1b58a | ||
|
|
8c17237638 | ||
|
|
06ab582e5d | ||
|
|
af66c42d9e | ||
|
|
655c50849d | ||
|
|
bd5b7428d8 | ||
|
|
4ed30a4495 | ||
|
|
ca39b05420 | ||
|
|
e189641e8c | ||
|
|
102dd4c11b | ||
|
|
c1d853d957 | ||
|
|
225f99377a | ||
|
|
d8cf4c57d3 | ||
|
|
4b5fa08f66 | ||
|
|
4380c0af73 |
@@ -3,7 +3,7 @@ source 'https://rubygems.org'
|
|||||||
gem "rails", "3.2.13"
|
gem "rails", "3.2.13"
|
||||||
gem "jquery-rails", "~> 2.0.2"
|
gem "jquery-rails", "~> 2.0.2"
|
||||||
gem "i18n", "~> 0.6.0"
|
gem "i18n", "~> 0.6.0"
|
||||||
gem "coderay", "~> 1.0.6"
|
gem "coderay", "~> 1.0.9"
|
||||||
gem "fastercsv", "~> 1.5.0", :platforms => [:mri_18, :mingw_18, :jruby]
|
gem "fastercsv", "~> 1.5.0", :platforms => [:mri_18, :mingw_18, :jruby]
|
||||||
gem "builder", "3.0.0"
|
gem "builder", "3.0.0"
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ end
|
|||||||
|
|
||||||
# Optional gem for OpenID authentication
|
# Optional gem for OpenID authentication
|
||||||
group :openid do
|
group :openid do
|
||||||
gem "ruby-openid", "~> 2.1.4", :require => "openid"
|
gem "ruby-openid", "~> 2.3.0", :require => "openid"
|
||||||
gem "rack-openid"
|
gem "rack-openid"
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ end
|
|||||||
platforms :jruby do
|
platforms :jruby do
|
||||||
# jruby-openssl is bundled with JRuby 1.7.0
|
# jruby-openssl is bundled with JRuby 1.7.0
|
||||||
gem "jruby-openssl" if Object.const_defined?(:JRUBY_VERSION) && JRUBY_VERSION < '1.7.0'
|
gem "jruby-openssl" if Object.const_defined?(:JRUBY_VERSION) && JRUBY_VERSION < '1.7.0'
|
||||||
gem "activerecord-jdbc-adapter", "1.2.5"
|
gem "activerecord-jdbc-adapter", "~> 1.2.6"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Include database gems for the adapters found in the database
|
# Include database gems for the adapters found in the database
|
||||||
@@ -80,6 +80,8 @@ group :test do
|
|||||||
gem "shoulda", "~> 3.3.2"
|
gem "shoulda", "~> 3.3.2"
|
||||||
gem "mocha", "~> 0.13.3"
|
gem "mocha", "~> 0.13.3"
|
||||||
gem 'capybara', '~> 2.0.0'
|
gem 'capybara', '~> 2.0.0'
|
||||||
|
gem 'nokogiri', '< 1.6.0'
|
||||||
|
gem 'selenium-webdriver', '2.35.1'
|
||||||
end
|
end
|
||||||
|
|
||||||
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
|
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
|
||||||
|
|||||||
@@ -70,14 +70,12 @@ class EnumerationsController < ApplicationController
|
|||||||
@enumeration.destroy
|
@enumeration.destroy
|
||||||
redirect_to enumerations_path
|
redirect_to enumerations_path
|
||||||
return
|
return
|
||||||
elsif params[:reassign_to_id]
|
elsif params[:reassign_to_id].present? && (reassign_to = @enumeration.class.find_by_id(params[:reassign_to_id].to_i))
|
||||||
if reassign_to = @enumeration.class.find_by_id(params[:reassign_to_id])
|
@enumeration.destroy(reassign_to)
|
||||||
@enumeration.destroy(reassign_to)
|
redirect_to enumerations_path
|
||||||
redirect_to enumerations_path
|
return
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
@enumerations = @enumeration.class.all - [@enumeration]
|
@enumerations = @enumeration.class.system.all - [@enumeration]
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ class MyController < ApplicationController
|
|||||||
if request.post?
|
if request.post?
|
||||||
@user.safe_attributes = params[:user]
|
@user.safe_attributes = params[:user]
|
||||||
@user.pref.attributes = params[:pref]
|
@user.pref.attributes = params[:pref]
|
||||||
@user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
|
|
||||||
if @user.save
|
if @user.save
|
||||||
@user.pref.save
|
@user.pref.save
|
||||||
@user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
|
@user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
|
||||||
|
|||||||
@@ -43,10 +43,10 @@ class TimelogController < ApplicationController
|
|||||||
|
|
||||||
def index
|
def index
|
||||||
@query = TimeEntryQuery.build_from_params(params, :project => @project, :name => '_')
|
@query = TimeEntryQuery.build_from_params(params, :project => @project, :name => '_')
|
||||||
scope = time_entry_scope
|
|
||||||
|
|
||||||
sort_init(@query.sort_criteria.empty? ? [['spent_on', 'desc']] : @query.sort_criteria)
|
sort_init(@query.sort_criteria.empty? ? [['spent_on', 'desc']] : @query.sort_criteria)
|
||||||
sort_update(@query.sortable_columns)
|
sort_update(@query.sortable_columns)
|
||||||
|
scope = time_entry_scope(:order => sort_clause)
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html {
|
format.html {
|
||||||
@@ -55,7 +55,6 @@ class TimelogController < ApplicationController
|
|||||||
@entry_pages = Paginator.new @entry_count, per_page_option, params['page']
|
@entry_pages = Paginator.new @entry_count, per_page_option, params['page']
|
||||||
@entries = scope.all(
|
@entries = scope.all(
|
||||||
:include => [:project, :activity, :user, {:issue => :tracker}],
|
:include => [:project, :activity, :user, {:issue => :tracker}],
|
||||||
:order => sort_clause,
|
|
||||||
:limit => @entry_pages.per_page,
|
:limit => @entry_pages.per_page,
|
||||||
:offset => @entry_pages.offset
|
:offset => @entry_pages.offset
|
||||||
)
|
)
|
||||||
@@ -68,15 +67,13 @@ class TimelogController < ApplicationController
|
|||||||
@offset, @limit = api_offset_and_limit
|
@offset, @limit = api_offset_and_limit
|
||||||
@entries = scope.all(
|
@entries = scope.all(
|
||||||
:include => [:project, :activity, :user, {:issue => :tracker}],
|
:include => [:project, :activity, :user, {:issue => :tracker}],
|
||||||
:order => sort_clause,
|
|
||||||
:limit => @limit,
|
:limit => @limit,
|
||||||
:offset => @offset
|
:offset => @offset
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
format.atom {
|
format.atom {
|
||||||
entries = scope.all(
|
entries = scope.reorder("#{TimeEntry.table_name}.created_on DESC").all(
|
||||||
:include => [:project, :activity, :user, {:issue => :tracker}],
|
:include => [:project, :activity, :user, {:issue => :tracker}],
|
||||||
:order => "#{TimeEntry.table_name}.created_on DESC",
|
|
||||||
:limit => Setting.feeds_limit.to_i
|
:limit => Setting.feeds_limit.to_i
|
||||||
)
|
)
|
||||||
render_feed(entries, :title => l(:label_spent_time))
|
render_feed(entries, :title => l(:label_spent_time))
|
||||||
@@ -84,8 +81,7 @@ class TimelogController < ApplicationController
|
|||||||
format.csv {
|
format.csv {
|
||||||
# Export all entries
|
# Export all entries
|
||||||
@entries = scope.all(
|
@entries = scope.all(
|
||||||
:include => [:project, :activity, :user, {:issue => [:tracker, :assigned_to, :priority]}],
|
:include => [:project, :activity, :user, {:issue => [:tracker, :assigned_to, :priority]}]
|
||||||
:order => sort_clause
|
|
||||||
)
|
)
|
||||||
send_data(query_to_csv(@entries, @query, params), :type => 'text/csv; header=present', :filename => 'timelog.csv')
|
send_data(query_to_csv(@entries, @query, params), :type => 'text/csv; header=present', :filename => 'timelog.csv')
|
||||||
}
|
}
|
||||||
@@ -295,12 +291,10 @@ private
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Returns the TimeEntry scope for index and report actions
|
# Returns the TimeEntry scope for index and report actions
|
||||||
def time_entry_scope
|
def time_entry_scope(options={})
|
||||||
scope = TimeEntry.visible.where(@query.statement)
|
scope = @query.results_scope(options)
|
||||||
if @issue
|
if @issue
|
||||||
scope = scope.on_issue(@issue)
|
scope = scope.on_issue(@issue)
|
||||||
elsif @project
|
|
||||||
scope = scope.on_project(@project, Setting.display_subprojects_issues?)
|
|
||||||
end
|
end
|
||||||
scope
|
scope
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -92,7 +92,6 @@ class UsersController < ApplicationController
|
|||||||
|
|
||||||
if @user.save
|
if @user.save
|
||||||
@user.pref.attributes = params[:pref]
|
@user.pref.attributes = params[:pref]
|
||||||
@user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
|
|
||||||
@user.pref.save
|
@user.pref.save
|
||||||
@user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
|
@user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
|
||||||
|
|
||||||
@@ -137,7 +136,6 @@ class UsersController < ApplicationController
|
|||||||
was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE])
|
was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE])
|
||||||
# TODO: Similar to My#account
|
# TODO: Similar to My#account
|
||||||
@user.pref.attributes = params[:pref]
|
@user.pref.attributes = params[:pref]
|
||||||
@user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
|
|
||||||
|
|
||||||
if @user.save
|
if @user.save
|
||||||
@user.pref.save
|
@user.pref.save
|
||||||
|
|||||||
@@ -471,7 +471,11 @@ module ApplicationHelper
|
|||||||
end
|
end
|
||||||
|
|
||||||
def accesskey(s)
|
def accesskey(s)
|
||||||
Redmine::AccessKeys.key_for s
|
@used_accesskeys ||= []
|
||||||
|
key = Redmine::AccessKeys.key_for(s)
|
||||||
|
return nil if @used_accesskeys.include?(key)
|
||||||
|
@used_accesskeys << key
|
||||||
|
key
|
||||||
end
|
end
|
||||||
|
|
||||||
# Formats text according to system settings.
|
# Formats text according to system settings.
|
||||||
@@ -758,7 +762,7 @@ module ApplicationHelper
|
|||||||
if repository && (changeset = Changeset.visible.where("repository_id = ? AND scmid LIKE ?", repository.id, "#{name}%").first)
|
if repository && (changeset = Changeset.visible.where("repository_id = ? AND scmid LIKE ?", repository.id, "#{name}%").first)
|
||||||
link = link_to h("#{project_prefix}#{repo_prefix}#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :repository_id => repository.identifier_param, :rev => changeset.identifier},
|
link = link_to h("#{project_prefix}#{repo_prefix}#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :repository_id => repository.identifier_param, :rev => changeset.identifier},
|
||||||
:class => 'changeset',
|
:class => 'changeset',
|
||||||
:title => truncate_single_line(h(changeset.comments), :length => 100)
|
:title => truncate_single_line(changeset.comments, :length => 100)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if repository && User.current.allowed_to?(:browse_repository, project)
|
if repository && User.current.allowed_to?(:browse_repository, project)
|
||||||
|
|||||||
@@ -214,6 +214,28 @@ module IssuesHelper
|
|||||||
out
|
out
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def email_issue_attributes(issue)
|
||||||
|
items = []
|
||||||
|
%w(author status priority assigned_to category fixed_version).each do |attribute|
|
||||||
|
unless issue.disabled_core_fields.include?(attribute+"_id")
|
||||||
|
items << "#{l("field_#{attribute}")}: #{issue.send attribute}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
issue.custom_field_values.each do |value|
|
||||||
|
items << "#{value.custom_field.name}: #{show_value(value)}"
|
||||||
|
end
|
||||||
|
items
|
||||||
|
end
|
||||||
|
|
||||||
|
def render_email_issue_attributes(issue, html=false)
|
||||||
|
items = email_issue_attributes(issue)
|
||||||
|
if html
|
||||||
|
content_tag('ul', items.map{|s| content_tag('li', s)}.join("\n").html_safe)
|
||||||
|
else
|
||||||
|
items.map{|s| "* #{s}"}.join("\n")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Returns the textual representation of a journal details
|
# Returns the textual representation of a journal details
|
||||||
# as an array of strings
|
# as an array of strings
|
||||||
def details_to_strings(details, no_html=false, options={})
|
def details_to_strings(details, no_html=false, options={})
|
||||||
|
|||||||
@@ -29,6 +29,30 @@ module QueriesHelper
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def query_filters_hidden_tags(query)
|
||||||
|
tags = ''.html_safe
|
||||||
|
query.filters.each do |field, options|
|
||||||
|
tags << hidden_field_tag("f[]", field, :id => nil)
|
||||||
|
tags << hidden_field_tag("op[#{field}]", options[:operator], :id => nil)
|
||||||
|
options[:values].each do |value|
|
||||||
|
tags << hidden_field_tag("v[#{field}][]", value, :id => nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
tags
|
||||||
|
end
|
||||||
|
|
||||||
|
def query_columns_hidden_tags(query)
|
||||||
|
tags = ''.html_safe
|
||||||
|
query.columns.each do |column|
|
||||||
|
tags << hidden_field_tag("c[]", column.name, :id => nil)
|
||||||
|
end
|
||||||
|
tags
|
||||||
|
end
|
||||||
|
|
||||||
|
def query_hidden_tags(query)
|
||||||
|
query_filters_hidden_tags(query) + query_columns_hidden_tags(query)
|
||||||
|
end
|
||||||
|
|
||||||
def available_block_columns_tags(query)
|
def available_block_columns_tags(query)
|
||||||
tags = ''.html_safe
|
tags = ''.html_safe
|
||||||
query.available_block_columns.each do |column|
|
query.available_block_columns.each do |column|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ module ReportsHelper
|
|||||||
data.each { |row|
|
data.each { |row|
|
||||||
match = 1
|
match = 1
|
||||||
criteria.each { |k, v|
|
criteria.each { |k, v|
|
||||||
match = 0 unless (row[k].to_s == v.to_s) || (k == 'closed' && row[k] == (v == 0 ? "f" : "t"))
|
match = 0 unless (row[k].to_s == v.to_s) || (k == 'closed' && (v == 0 ? ['f', false] : ['t', true]).include?(row[k]))
|
||||||
} unless criteria.nil?
|
} unless criteria.nil?
|
||||||
a = a + row["total"].to_i if match == 1
|
a = a + row["total"].to_i if match == 1
|
||||||
} unless data.nil?
|
} unless data.nil?
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ class Attachment < ActiveRecord::Base
|
|||||||
if @temp_file && (@temp_file.size > 0)
|
if @temp_file && (@temp_file.size > 0)
|
||||||
self.disk_directory = target_directory
|
self.disk_directory = target_directory
|
||||||
self.disk_filename = Attachment.disk_filename(filename, disk_directory)
|
self.disk_filename = Attachment.disk_filename(filename, disk_directory)
|
||||||
logger.info("Saving attachment '#{self.diskfile}' (#{@temp_file.size} bytes)")
|
logger.info("Saving attachment '#{self.diskfile}' (#{@temp_file.size} bytes)") if logger
|
||||||
path = File.dirname(diskfile)
|
path = File.dirname(diskfile)
|
||||||
unless File.directory?(path)
|
unless File.directory?(path)
|
||||||
FileUtils.mkdir_p(path)
|
FileUtils.mkdir_p(path)
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ class Enumeration < ActiveRecord::Base
|
|||||||
scope :shared, lambda { where(:project_id => nil) }
|
scope :shared, lambda { where(:project_id => nil) }
|
||||||
scope :sorted, lambda { order("#{table_name}.position ASC") }
|
scope :sorted, lambda { order("#{table_name}.position ASC") }
|
||||||
scope :active, lambda { where(:active => true) }
|
scope :active, lambda { where(:active => true) }
|
||||||
|
scope :system, lambda { where(:project_id => nil) }
|
||||||
scope :named, lambda {|arg| where("LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip)}
|
scope :named, lambda {|arg| where("LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip)}
|
||||||
|
|
||||||
def self.default
|
def self.default
|
||||||
|
|||||||
+101
-11
@@ -106,10 +106,10 @@ class Issue < ActiveRecord::Base
|
|||||||
when 'all'
|
when 'all'
|
||||||
nil
|
nil
|
||||||
when 'default'
|
when 'default'
|
||||||
user_ids = [user.id] + user.groups.map(&:id)
|
user_ids = [user.id] + user.groups.map(&:id).compact
|
||||||
"(#{table_name}.is_private = #{connection.quoted_false} OR #{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id IN (#{user_ids.join(',')}))"
|
"(#{table_name}.is_private = #{connection.quoted_false} OR #{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id IN (#{user_ids.join(',')}))"
|
||||||
when 'own'
|
when 'own'
|
||||||
user_ids = [user.id] + user.groups.map(&:id)
|
user_ids = [user.id] + user.groups.map(&:id).compact
|
||||||
"(#{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id IN (#{user_ids.join(',')}))"
|
"(#{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id IN (#{user_ids.join(',')}))"
|
||||||
else
|
else
|
||||||
'1=0'
|
'1=0'
|
||||||
@@ -744,12 +744,16 @@ class Issue < ActiveRecord::Base
|
|||||||
initial_status = IssueStatus.find_by_id(status_id_was)
|
initial_status = IssueStatus.find_by_id(status_id_was)
|
||||||
end
|
end
|
||||||
initial_status ||= status
|
initial_status ||= status
|
||||||
|
|
||||||
|
initial_assigned_to_id = assigned_to_id_changed? ? assigned_to_id_was : assigned_to_id
|
||||||
|
assignee_transitions_allowed = initial_assigned_to_id.present? &&
|
||||||
|
(user.id == initial_assigned_to_id || user.group_ids.include?(initial_assigned_to_id))
|
||||||
|
|
||||||
statuses = initial_status.find_new_statuses_allowed_to(
|
statuses = initial_status.find_new_statuses_allowed_to(
|
||||||
user.admin ? Role.all : user.roles_for_project(project),
|
user.admin ? Role.all : user.roles_for_project(project),
|
||||||
tracker,
|
tracker,
|
||||||
author == user,
|
author == user,
|
||||||
assigned_to_id_changed? ? assigned_to_id_was == user.id : assigned_to_id == user.id
|
assignee_transitions_allowed
|
||||||
)
|
)
|
||||||
statuses << initial_status unless statuses.empty?
|
statuses << initial_status unless statuses.empty?
|
||||||
statuses << IssueStatus.default if include_default
|
statuses << IssueStatus.default if include_default
|
||||||
@@ -854,15 +858,100 @@ class Issue < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Returns all the other issues that depend on the issue
|
# Returns all the other issues that depend on the issue
|
||||||
|
# The algorithm is a modified breadth first search (bfs)
|
||||||
def all_dependent_issues(except=[])
|
def all_dependent_issues(except=[])
|
||||||
except << self
|
# The found dependencies
|
||||||
dependencies = []
|
dependencies = []
|
||||||
dependencies += relations_from.map(&:issue_to)
|
|
||||||
dependencies += children unless leaf?
|
# The visited flag for every node (issue) used by the breadth first search
|
||||||
dependencies << parent
|
eNOT_DISCOVERED = 0 # The issue is "new" to the algorithm, it has not seen it before.
|
||||||
dependencies.compact!
|
|
||||||
|
ePROCESS_ALL = 1 # The issue is added to the queue. Process both children and relations of
|
||||||
|
# the issue when it is processed.
|
||||||
|
|
||||||
|
ePROCESS_RELATIONS_ONLY = 2 # The issue was added to the queue and will be output as dependent issue,
|
||||||
|
# but its children will not be added to the queue when it is processed.
|
||||||
|
|
||||||
|
eRELATIONS_PROCESSED = 3 # The related issues, the parent issue and the issue itself have been added to
|
||||||
|
# the queue, but its children have not been added.
|
||||||
|
|
||||||
|
ePROCESS_CHILDREN_ONLY = 4 # The relations and the parent of the issue have been added to the queue, but
|
||||||
|
# the children still need to be processed.
|
||||||
|
|
||||||
|
eALL_PROCESSED = 5 # The issue and all its children, its parent and its related issues have been
|
||||||
|
# added as dependent issues. It needs no further processing.
|
||||||
|
|
||||||
|
issue_status = Hash.new(eNOT_DISCOVERED)
|
||||||
|
|
||||||
|
# The queue
|
||||||
|
queue = []
|
||||||
|
|
||||||
|
# Initialize the bfs, add start node (self) to the queue
|
||||||
|
queue << self
|
||||||
|
issue_status[self] = ePROCESS_ALL
|
||||||
|
|
||||||
|
while (!queue.empty?) do
|
||||||
|
current_issue = queue.shift
|
||||||
|
current_issue_status = issue_status[current_issue]
|
||||||
|
dependencies << current_issue
|
||||||
|
|
||||||
|
# Add parent to queue, if not already in it.
|
||||||
|
parent = current_issue.parent
|
||||||
|
parent_status = issue_status[parent]
|
||||||
|
|
||||||
|
if parent && (parent_status == eNOT_DISCOVERED) && !except.include?(parent)
|
||||||
|
queue << parent
|
||||||
|
issue_status[parent] = ePROCESS_RELATIONS_ONLY
|
||||||
|
end
|
||||||
|
|
||||||
|
# Add children to queue, but only if they are not already in it and
|
||||||
|
# the children of the current node need to be processed.
|
||||||
|
if (current_issue_status == ePROCESS_CHILDREN_ONLY || current_issue_status == ePROCESS_ALL)
|
||||||
|
current_issue.children.each do |child|
|
||||||
|
next if except.include?(child)
|
||||||
|
|
||||||
|
if (issue_status[child] == eNOT_DISCOVERED)
|
||||||
|
queue << child
|
||||||
|
issue_status[child] = ePROCESS_ALL
|
||||||
|
elsif (issue_status[child] == eRELATIONS_PROCESSED)
|
||||||
|
queue << child
|
||||||
|
issue_status[child] = ePROCESS_CHILDREN_ONLY
|
||||||
|
elsif (issue_status[child] == ePROCESS_RELATIONS_ONLY)
|
||||||
|
queue << child
|
||||||
|
issue_status[child] = ePROCESS_ALL
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Add related issues to the queue, if they are not already in it.
|
||||||
|
current_issue.relations_from.map(&:issue_to).each do |related_issue|
|
||||||
|
next if except.include?(related_issue)
|
||||||
|
|
||||||
|
if (issue_status[related_issue] == eNOT_DISCOVERED)
|
||||||
|
queue << related_issue
|
||||||
|
issue_status[related_issue] = ePROCESS_ALL
|
||||||
|
elsif (issue_status[related_issue] == eRELATIONS_PROCESSED)
|
||||||
|
queue << related_issue
|
||||||
|
issue_status[related_issue] = ePROCESS_CHILDREN_ONLY
|
||||||
|
elsif (issue_status[related_issue] == ePROCESS_RELATIONS_ONLY)
|
||||||
|
queue << related_issue
|
||||||
|
issue_status[related_issue] = ePROCESS_ALL
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Set new status for current issue
|
||||||
|
if (current_issue_status == ePROCESS_ALL) || (current_issue_status == ePROCESS_CHILDREN_ONLY)
|
||||||
|
issue_status[current_issue] = eALL_PROCESSED
|
||||||
|
elsif (current_issue_status == ePROCESS_RELATIONS_ONLY)
|
||||||
|
issue_status[current_issue] = eRELATIONS_PROCESSED
|
||||||
|
end
|
||||||
|
end # while
|
||||||
|
|
||||||
|
# Remove the issues from the "except" parameter from the result array
|
||||||
dependencies -= except
|
dependencies -= except
|
||||||
dependencies + dependencies.map {|issue| issue.all_dependent_issues(except)}.flatten
|
dependencies.delete(self)
|
||||||
|
|
||||||
|
dependencies
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns an array of issues that duplicate this one
|
# Returns an array of issues that duplicate this one
|
||||||
@@ -1248,7 +1337,8 @@ class Issue < ActiveRecord::Base
|
|||||||
if average == 0
|
if average == 0
|
||||||
average = 1
|
average = 1
|
||||||
end
|
end
|
||||||
done = p.leaves.sum("COALESCE(estimated_hours, #{average}) * (CASE WHEN is_closed = #{connection.quoted_true} THEN 100 ELSE COALESCE(done_ratio, 0) END)", :joins => :status).to_f
|
done = p.leaves.sum("COALESCE(CASE WHEN estimated_hours > 0 THEN estimated_hours ELSE NULL END, #{average}) " +
|
||||||
|
"* (CASE WHEN is_closed = #{connection.quoted_true} THEN 100 ELSE COALESCE(done_ratio, 0) END)", :joins => :status).to_f
|
||||||
progress = done / (average * leaves_count)
|
progress = done / (average * leaves_count)
|
||||||
p.done_ratio = progress.round
|
p.done_ratio = progress.round
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -393,10 +393,9 @@ class IssueQuery < Query
|
|||||||
|
|
||||||
if relation_options[:sym] == field && !options[:reverse]
|
if relation_options[:sym] == field && !options[:reverse]
|
||||||
sqls = [sql, sql_for_relations(field, operator, value, :reverse => true)]
|
sqls = [sql, sql_for_relations(field, operator, value, :reverse => true)]
|
||||||
sqls.join(["!", "!*", "!p"].include?(operator) ? " AND " : " OR ")
|
sql = sqls.join(["!", "!*", "!p"].include?(operator) ? " AND " : " OR ")
|
||||||
else
|
|
||||||
sql
|
|
||||||
end
|
end
|
||||||
|
"(#{sql})"
|
||||||
end
|
end
|
||||||
|
|
||||||
IssueRelation::TYPES.keys.each do |relation_type|
|
IssueRelation::TYPES.keys.each do |relation_type|
|
||||||
|
|||||||
@@ -390,7 +390,7 @@ class Mailer < ActionMailer::Base
|
|||||||
|
|
||||||
# Removes the author from the recipients and cc
|
# Removes the author from the recipients and cc
|
||||||
# if he doesn't want to receive notifications about what he does
|
# if he doesn't want to receive notifications about what he does
|
||||||
if @author && @author.logged? && @author.pref[:no_self_notified]
|
if @author && @author.logged? && @author.pref.no_self_notified
|
||||||
headers[:to].delete(@author.mail) if headers[:to].is_a?(Array)
|
headers[:to].delete(@author.mail) if headers[:to].is_a?(Array)
|
||||||
headers[:cc].delete(@author.mail) if headers[:cc].is_a?(Array)
|
headers[:cc].delete(@author.mail) if headers[:cc].is_a?(Array)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -673,7 +673,7 @@ class Project < ActiveRecord::Base
|
|||||||
|
|
||||||
# Returns an auto-generated project identifier based on the last identifier used
|
# Returns an auto-generated project identifier based on the last identifier used
|
||||||
def self.next_identifier
|
def self.next_identifier
|
||||||
p = Project.order('created_on DESC').first
|
p = Project.order('id DESC').first
|
||||||
p.nil? ? nil : p.identifier.to_s.succ
|
p.nil? ? nil : p.identifier.to_s.succ
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -840,6 +840,9 @@ class Project < ActiveRecord::Base
|
|||||||
new_issue = Issue.new
|
new_issue = Issue.new
|
||||||
new_issue.copy_from(issue, :subtasks => false, :link => false)
|
new_issue.copy_from(issue, :subtasks => false, :link => false)
|
||||||
new_issue.project = self
|
new_issue.project = self
|
||||||
|
# Changing project resets the custom field values
|
||||||
|
# TODO: handle this in Issue#project=
|
||||||
|
new_issue.custom_field_values = issue.custom_field_values.inject({}) {|h,v| h[v.custom_field_id] = v.value; h}
|
||||||
# Reassign fixed_versions by name, since names are unique per project
|
# Reassign fixed_versions by name, since names are unique per project
|
||||||
if issue.fixed_version && issue.fixed_version.project == project
|
if issue.fixed_version && issue.fixed_version.project == project
|
||||||
new_issue.fixed_version = self.versions.detect {|v| v.name == issue.fixed_version.name}
|
new_issue.fixed_version = self.versions.detect {|v| v.name == issue.fixed_version.name}
|
||||||
|
|||||||
+5
-2
@@ -577,8 +577,11 @@ class Query < ActiveRecord::Base
|
|||||||
customized_class = queried_class.reflect_on_association(assoc.to_sym).klass.base_class rescue nil
|
customized_class = queried_class.reflect_on_association(assoc.to_sym).klass.base_class rescue nil
|
||||||
raise "Unknown #{queried_class.name} association #{assoc}" unless customized_class
|
raise "Unknown #{queried_class.name} association #{assoc}" unless customized_class
|
||||||
end
|
end
|
||||||
"#{queried_table_name}.#{customized_key} #{not_in} IN (SELECT #{customized_class.table_name}.id FROM #{customized_class.table_name} LEFT OUTER JOIN #{db_table} ON #{db_table}.customized_type='#{customized_class}' AND #{db_table}.customized_id=#{customized_class.table_name}.id AND #{db_table}.custom_field_id=#{custom_field_id} WHERE " +
|
where = sql_for_field(field, operator, value, db_table, db_field, true)
|
||||||
sql_for_field(field, operator, value, db_table, db_field, true) + ')'
|
if operator =~ /[<>]/
|
||||||
|
where = "(#{where}) AND #{db_table}.#{db_field} <> ''"
|
||||||
|
end
|
||||||
|
"#{queried_table_name}.#{customized_key} #{not_in} IN (SELECT #{customized_class.table_name}.id FROM #{customized_class.table_name} LEFT OUTER JOIN #{db_table} ON #{db_table}.customized_type='#{customized_class}' AND #{db_table}.customized_id=#{customized_class.table_name}.id AND #{db_table}.custom_field_id=#{custom_field_id} WHERE #{where})"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Helper method to generate the WHERE sql for a +field+, +operator+ and a +value+
|
# Helper method to generate the WHERE sql for a +field+, +operator+ and a +value+
|
||||||
|
|||||||
@@ -24,11 +24,15 @@ class TimeEntryActivity < Enumeration
|
|||||||
OptionName
|
OptionName
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def objects
|
||||||
|
TimeEntry.where(:activity_id => self_and_descendants(1).map(&:id))
|
||||||
|
end
|
||||||
|
|
||||||
def objects_count
|
def objects_count
|
||||||
time_entries.count
|
objects.count
|
||||||
end
|
end
|
||||||
|
|
||||||
def transfer_relations(to)
|
def transfer_relations(to)
|
||||||
time_entries.update_all("activity_id = #{to.id}")
|
objects.update_all(:activity_id => to.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -100,6 +100,15 @@ class TimeEntryQuery < Query
|
|||||||
@default_columns_names ||= [:project, :spent_on, :user, :activity, :issue, :comments, :hours]
|
@default_columns_names ||= [:project, :spent_on, :user, :activity, :issue, :comments, :hours]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def results_scope(options={})
|
||||||
|
order_option = [group_by_sort_order, options[:order]].flatten.reject(&:blank?)
|
||||||
|
|
||||||
|
TimeEntry.visible.
|
||||||
|
where(statement).
|
||||||
|
order(order_option).
|
||||||
|
joins(joins_for_order_statement(order_option.join(',')))
|
||||||
|
end
|
||||||
|
|
||||||
# Accepts :from/:to params as shortcut filters
|
# Accepts :from/:to params as shortcut filters
|
||||||
def build_from_params(params)
|
def build_from_params(params)
|
||||||
super
|
super
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class UserPreference < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def [](attr_name)
|
def [](attr_name)
|
||||||
if attribute_present? attr_name
|
if has_attribute? attr_name
|
||||||
super
|
super
|
||||||
else
|
else
|
||||||
others ? others[attr_name] : nil
|
others ? others[attr_name] : nil
|
||||||
@@ -41,7 +41,7 @@ class UserPreference < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def []=(attr_name, value)
|
def []=(attr_name, value)
|
||||||
if attribute_present? attr_name
|
if has_attribute? attr_name
|
||||||
super
|
super
|
||||||
else
|
else
|
||||||
h = (read_attribute(:others) || {}).dup
|
h = (read_attribute(:others) || {}).dup
|
||||||
@@ -56,4 +56,7 @@ class UserPreference < ActiveRecord::Base
|
|||||||
|
|
||||||
def warn_on_leaving_unsaved; self[:warn_on_leaving_unsaved] || '1'; end
|
def warn_on_leaving_unsaved; self[:warn_on_leaving_unsaved] || '1'; end
|
||||||
def warn_on_leaving_unsaved=(value); self[:warn_on_leaving_unsaved]=value; end
|
def warn_on_leaving_unsaved=(value); self[:warn_on_leaving_unsaved]=value; end
|
||||||
|
|
||||||
|
def no_self_notified; (self[:no_self_notified] == true || self[:no_self_notified] == '1'); end
|
||||||
|
def no_self_notified=(value); self[:no_self_notified]=value; end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -47,7 +47,8 @@ class Version < ActiveRecord::Base
|
|||||||
'wiki_page_title',
|
'wiki_page_title',
|
||||||
'status',
|
'status',
|
||||||
'sharing',
|
'sharing',
|
||||||
'custom_field_values'
|
'custom_field_values',
|
||||||
|
'custom_fields'
|
||||||
|
|
||||||
# Returns true if +user+ or current user is allowed to view the version
|
# Returns true if +user+ or current user is allowed to view the version
|
||||||
def visible?(user=User.current)
|
def visible?(user=User.current)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<p><em><%=h @document.category.name %><br />
|
<p><em><%=h @document.category.name %><br />
|
||||||
<%= format_date @document.created_on %></em></p>
|
<%= format_date @document.created_on %></em></p>
|
||||||
<div class="wiki">
|
<div class="wiki">
|
||||||
<%= textilizable @document.description, :attachments => @document.attachments %>
|
<%= textilizable @document, :description, :attachments => @document.attachments %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h3><%= l(:label_attachment_plural) %></h3>
|
<h3><%= l(:label_attachment_plural) %></h3>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<div class="box">
|
<div class="box">
|
||||||
<p><strong><%= l(:text_enumeration_destroy_question, @enumeration.objects_count) %></strong></p>
|
<p><strong><%= l(:text_enumeration_destroy_question, @enumeration.objects_count) %></strong></p>
|
||||||
<p><label for='reassign_to_id'><%= l(:text_enumeration_category_reassign_to) %></label>
|
<p><label for='reassign_to_id'><%= l(:text_enumeration_category_reassign_to) %></label>
|
||||||
<%= select_tag 'reassign_to_id', (content_tag('option', "--- #{l(:actionview_instancetag_blank_option)} ---") + options_from_collection_for_select(@enumerations, 'id', 'name')) %></p>
|
<%= select_tag 'reassign_to_id', (content_tag('option', "--- #{l(:actionview_instancetag_blank_option)} ---", :value => '') + options_from_collection_for_select(@enumerations, 'id', 'name')) %></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= submit_tag l(:button_apply) %>
|
<%= submit_tag l(:button_apply) %>
|
||||||
|
|||||||
@@ -1,15 +1,5 @@
|
|||||||
<h1><%= link_to(h("#{issue.tracker.name} ##{issue.id}: #{issue.subject}"), issue_url) %></h1>
|
<h1><%= link_to(h("#{issue.tracker.name} ##{issue.id}: #{issue.subject}"), issue_url) %></h1>
|
||||||
|
|
||||||
<ul>
|
<%= render_email_issue_attributes(issue, true) %>
|
||||||
<li><%=l(:field_author)%>: <%=h issue.author %></li>
|
|
||||||
<li><%=l(:field_status)%>: <%=h issue.status %></li>
|
|
||||||
<li><%=l(:field_priority)%>: <%=h issue.priority %></li>
|
|
||||||
<li><%=l(:field_assigned_to)%>: <%=h issue.assigned_to %></li>
|
|
||||||
<li><%=l(:field_category)%>: <%=h issue.category %></li>
|
|
||||||
<li><%=l(:field_fixed_version)%>: <%=h issue.fixed_version %></li>
|
|
||||||
<% issue.custom_field_values.each do |c| %>
|
|
||||||
<li><%=h c.custom_field.name %>: <%=h show_value(c) %></li>
|
|
||||||
<% end %>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<%= textilizable(issue, :description, :only_path => false) %>
|
<%= textilizable(issue, :description, :only_path => false) %>
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<%= "#{issue.tracker.name} ##{issue.id}: #{issue.subject}" %>
|
<%= "#{issue.tracker.name} ##{issue.id}: #{issue.subject}" %>
|
||||||
<%= issue_url %>
|
<%= issue_url %>
|
||||||
|
|
||||||
* <%=l(:field_author)%>: <%= issue.author %>
|
<%= render_email_issue_attributes(issue) %>
|
||||||
* <%=l(:field_status)%>: <%= issue.status %>
|
|
||||||
* <%=l(:field_priority)%>: <%= issue.priority %>
|
|
||||||
* <%=l(:field_assigned_to)%>: <%= issue.assigned_to %>
|
|
||||||
* <%=l(:field_category)%>: <%= issue.category %>
|
|
||||||
* <%=l(:field_fixed_version)%>: <%= issue.fixed_version %>
|
|
||||||
<% issue.custom_field_values.each do |c| %>* <%= c.custom_field.name %>: <%= show_value(c) %>
|
|
||||||
<% end -%>
|
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
<%= issue.description %>
|
<%= issue.description %>
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
<% if @journal.private_notes? %>
|
||||||
|
(<%= l(:field_private_notes) %>)
|
||||||
|
<% end %>
|
||||||
<%= l(:text_issue_updated, :id => "##{@issue.id}", :author => h(@journal.user)) %>
|
<%= l(:text_issue_updated, :id => "##{@issue.id}", :author => h(@journal.user)) %>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<%= l(:text_issue_updated, :id => "##{@issue.id}", :author => @journal.user) %>
|
<%= "(#{l(:field_private_notes)}) " if @journal.private_notes? -%><%= l(:text_issue_updated, :id => "##{@issue.id}", :author => @journal.user) %>
|
||||||
|
|
||||||
<% details_to_strings(@journal.details, true).each do |string| -%>
|
<% details_to_strings(@journal.details, true).each do |string| -%>
|
||||||
<%= string %>
|
<%= string %>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ var operatorLabels = <%= raw_json Query.operators_labels %>;
|
|||||||
var operatorByType = <%= raw_json Query.operators_by_filter_type %>;
|
var operatorByType = <%= raw_json Query.operators_by_filter_type %>;
|
||||||
var availableFilters = <%= raw_json query.available_filters_as_json %>;
|
var availableFilters = <%= raw_json query.available_filters_as_json %>;
|
||||||
var labelDayPlural = <%= raw_json l(:label_day_plural) %>;
|
var labelDayPlural = <%= raw_json l(:label_day_plural) %>;
|
||||||
var allProjects = <%= raw query.all_projects_values.to_json %>;
|
var allProjects = <%= raw_json query.all_projects_values %>;
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
initFilters();
|
initFilters();
|
||||||
<% query.filters.each do |field, options| %>
|
<% query.filters.each do |field, options| %>
|
||||||
|
|||||||
@@ -19,8 +19,18 @@
|
|||||||
<tr class="bloc-<%= revision.nil? ? 0 : colors[revision.identifier || revision.revision] %>">
|
<tr class="bloc-<%= revision.nil? ? 0 : colors[revision.identifier || revision.revision] %>">
|
||||||
<th class="line-num" id="L<%= line_num %>"><a href="#L<%= line_num %>"><%= line_num %></a></th>
|
<th class="line-num" id="L<%= line_num %>"><a href="#L<%= line_num %>"><%= line_num %></a></th>
|
||||||
<td class="revision">
|
<td class="revision">
|
||||||
<%= (revision.identifier ? link_to_revision(revision, @repository) : format_revision(revision)) if revision && revision != previous_revision %></td>
|
<% if revision && revision != previous_revision %>
|
||||||
<td class="author"><%= h(revision.author.to_s.split('<').first) if revision && revision != previous_revision %></td>
|
<%= revision.identifier ?
|
||||||
|
link_to_revision(revision, @repository) : format_revision(revision) %>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
|
<td class="author">
|
||||||
|
<% if revision && revision != previous_revision %>
|
||||||
|
<% author = Redmine::CodesetUtil.to_utf8(revision.author.to_s,
|
||||||
|
@repository.repo_log_encoding) %>
|
||||||
|
<%= author.split('<').first %>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
<td class="line-code"><pre><%= line.html_safe %></pre></td>
|
<td class="line-code"><pre><%= line.html_safe %></pre></td>
|
||||||
</tr>
|
</tr>
|
||||||
<% line_num += 1; previous_revision = revision %>
|
<% line_num += 1; previous_revision = revision %>
|
||||||
|
|||||||
@@ -27,7 +27,8 @@
|
|||||||
|
|
||||||
<div id="csv-export-options" style="display:none;">
|
<div id="csv-export-options" style="display:none;">
|
||||||
<h3 class="title"><%= l(:label_export_options, :export_format => 'CSV') %></h3>
|
<h3 class="title"><%= l(:label_export_options, :export_format => 'CSV') %></h3>
|
||||||
<%= form_tag(params.merge({:format => 'csv',:page=>nil}), :method => :get, :id => 'csv-export-form') do %>
|
<%= form_tag(params.slice(:project_id, :issue_id).merge(:format => 'csv', :page=>nil), :method => :get, :id => 'csv-export-form') do %>
|
||||||
|
<%= query_hidden_tags @query %>
|
||||||
<p>
|
<p>
|
||||||
<label><%= radio_button_tag 'columns', '', true %> <%= l(:description_selected_columns) %></label><br />
|
<label><%= radio_button_tag 'columns', '', true %> <%= l(:description_selected_columns) %></label><br />
|
||||||
<label><%= radio_button_tag 'columns', 'all' %> <%= l(:description_all_columns) %></label>
|
<label><%= radio_button_tag 'columns', 'all' %> <%= l(:description_all_columns) %></label>
|
||||||
|
|||||||
@@ -19,9 +19,10 @@
|
|||||||
end %>
|
end %>
|
||||||
<p><em class="info"><%= l(:text_user_mail_option) %></em></p>
|
<p><em class="info"><%= l(:text_user_mail_option) %></em></p>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<%= fields_for :pref, @user.pref do |pref_fields| %>
|
||||||
<p>
|
<p>
|
||||||
<label>
|
<%= pref_fields.check_box :no_self_notified %>
|
||||||
<%= l(:label_user_mail_no_self_notified) %>
|
<label for="pref_no_self_notified"><%= l(:label_user_mail_no_self_notified) %></label>
|
||||||
<%= check_box_tag 'no_self_notified', 1, @user.pref[:no_self_notified] %>
|
|
||||||
</label>
|
|
||||||
</p>
|
</p>
|
||||||
|
<% end %>
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ ar:
|
|||||||
one: "حوالي ساعة"
|
one: "حوالي ساعة"
|
||||||
other: "ساعات %{count}حوالي "
|
other: "ساعات %{count}حوالي "
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "%{count} ساعة"
|
||||||
other: "%{count} hours"
|
other: "%{count} ساعات"
|
||||||
x_days:
|
x_days:
|
||||||
one: "يوم"
|
one: "يوم"
|
||||||
other: "%{count} أيام"
|
other: "%{count} أيام"
|
||||||
|
|||||||
@@ -109,8 +109,8 @@ az:
|
|||||||
many: "təxminən %{count} saat"
|
many: "təxminən %{count} saat"
|
||||||
other: "təxminən %{count} saat"
|
other: "təxminən %{count} saat"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 saat"
|
||||||
other: "%{count} hours"
|
other: "%{count} saat"
|
||||||
x_days:
|
x_days:
|
||||||
one: "%{count} gün"
|
one: "%{count} gün"
|
||||||
few: "%{count} gün"
|
few: "%{count} gün"
|
||||||
|
|||||||
@@ -51,8 +51,8 @@ bg:
|
|||||||
one: "около 1 час"
|
one: "около 1 час"
|
||||||
other: "около %{count} часа"
|
other: "около %{count} часа"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 час"
|
||||||
other: "%{count} hours"
|
other: "%{count} часа"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 ден"
|
one: "1 ден"
|
||||||
other: "%{count} дена"
|
other: "%{count} дена"
|
||||||
|
|||||||
@@ -49,8 +49,8 @@ bs:
|
|||||||
one: "oko 1 sahat"
|
one: "oko 1 sahat"
|
||||||
other: "oko %{count} sahata"
|
other: "oko %{count} sahata"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 sahat"
|
||||||
other: "%{count} hours"
|
other: "%{count} sahata"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 dan"
|
one: "1 dan"
|
||||||
other: "%{count} dana"
|
other: "%{count} dana"
|
||||||
|
|||||||
@@ -53,8 +53,8 @@ ca:
|
|||||||
one: "aproximadament 1 hora"
|
one: "aproximadament 1 hora"
|
||||||
other: "aproximadament %{count} hores"
|
other: "aproximadament %{count} hores"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 hora"
|
||||||
other: "%{count} hours"
|
other: "%{count} hores"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 dia"
|
one: "1 dia"
|
||||||
other: "%{count} dies"
|
other: "%{count} dies"
|
||||||
|
|||||||
@@ -55,8 +55,8 @@ cs:
|
|||||||
one: "asi 1 hodina"
|
one: "asi 1 hodina"
|
||||||
other: "asi %{count} hodin"
|
other: "asi %{count} hodin"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 hodina"
|
||||||
other: "%{count} hours"
|
other: "%{count} hodin"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 den"
|
one: "1 den"
|
||||||
other: "%{count} dnů"
|
other: "%{count} dnů"
|
||||||
|
|||||||
@@ -52,8 +52,8 @@ da:
|
|||||||
one: "cirka en time"
|
one: "cirka en time"
|
||||||
other: "cirka %{count} timer"
|
other: "cirka %{count} timer"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 time"
|
||||||
other: "%{count} hours"
|
other: "%{count} timer"
|
||||||
x_days:
|
x_days:
|
||||||
one: "en dag"
|
one: "en dag"
|
||||||
other: "%{count} dage"
|
other: "%{count} dage"
|
||||||
|
|||||||
@@ -53,8 +53,8 @@ de:
|
|||||||
one: 'etwa 1 Stunde'
|
one: 'etwa 1 Stunde'
|
||||||
other: 'etwa %{count} Stunden'
|
other: 'etwa %{count} Stunden'
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 Stunde"
|
||||||
other: "%{count} hours"
|
other: "%{count} Stunden"
|
||||||
x_days:
|
x_days:
|
||||||
one: '1 Tag'
|
one: '1 Tag'
|
||||||
other: '%{count} Tagen'
|
other: '%{count} Tagen'
|
||||||
|
|||||||
@@ -52,8 +52,8 @@ el:
|
|||||||
one: "περίπου 1 ώρα"
|
one: "περίπου 1 ώρα"
|
||||||
other: "περίπου %{count} ώρες"
|
other: "περίπου %{count} ώρες"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 ώρα"
|
||||||
other: "%{count} hours"
|
other: "%{count} ώρες"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 ημέρα"
|
one: "1 ημέρα"
|
||||||
other: "%{count} ημέρες"
|
other: "%{count} ημέρες"
|
||||||
|
|||||||
@@ -80,8 +80,8 @@ es:
|
|||||||
one: "alrededor de 1 hora"
|
one: "alrededor de 1 hora"
|
||||||
other: "alrededor de %{count} horas"
|
other: "alrededor de %{count} horas"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 hora"
|
||||||
other: "%{count} hours"
|
other: "%{count} horas"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 día"
|
one: "1 día"
|
||||||
other: "%{count} días"
|
other: "%{count} días"
|
||||||
@@ -1118,8 +1118,8 @@ es:
|
|||||||
permission_edit_documents: Editar documentos
|
permission_edit_documents: Editar documentos
|
||||||
permission_delete_documents: Borrar documentos
|
permission_delete_documents: Borrar documentos
|
||||||
label_gantt_progress_line: Línea de progreso
|
label_gantt_progress_line: Línea de progreso
|
||||||
setting_jsonp_enabled: Enable JSONP support
|
setting_jsonp_enabled: Habilitar soporte de JSONP
|
||||||
field_inherit_members: Inherit members
|
field_inherit_members: Heredar miembros
|
||||||
field_closed_on: Closed
|
field_closed_on: Cerrada
|
||||||
setting_default_projects_tracker_ids: Default trackers for new projects
|
setting_default_projects_tracker_ids: Tipos de petición habilitados por defecto
|
||||||
label_total_time: Total
|
label_total_time: Total
|
||||||
|
|||||||
@@ -67,8 +67,8 @@ et:
|
|||||||
one: "umbes tund"
|
one: "umbes tund"
|
||||||
other: "umbes %{count} tundi"
|
other: "umbes %{count} tundi"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 tund"
|
||||||
other: "%{count} hours"
|
other: "%{count} tundi"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 päev"
|
one: "1 päev"
|
||||||
other: "%{count} päeva"
|
other: "%{count} päeva"
|
||||||
|
|||||||
@@ -53,8 +53,8 @@ eu:
|
|||||||
one: "ordu 1 inguru"
|
one: "ordu 1 inguru"
|
||||||
other: "%{count} ordu inguru"
|
other: "%{count} ordu inguru"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "ordu 1"
|
||||||
other: "%{count} hours"
|
other: "%{count} ordu"
|
||||||
x_days:
|
x_days:
|
||||||
one: "egun 1"
|
one: "egun 1"
|
||||||
other: "%{count} egun"
|
other: "%{count} egun"
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ fa:
|
|||||||
one: "نزدیک 1 ساعت"
|
one: "نزدیک 1 ساعت"
|
||||||
other: "نزدیک %{count} ساعت"
|
other: "نزدیک %{count} ساعت"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 ساعت"
|
||||||
other: "%{count} hours"
|
other: "%{count} ساعت"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 روز"
|
one: "1 روز"
|
||||||
other: "%{count} روز"
|
other: "%{count} روز"
|
||||||
|
|||||||
@@ -95,8 +95,8 @@ fi:
|
|||||||
one: "noin tunti"
|
one: "noin tunti"
|
||||||
other: "noin %{count} tuntia"
|
other: "noin %{count} tuntia"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 tunti"
|
||||||
other: "%{count} hours"
|
other: "%{count} tuntia"
|
||||||
x_days:
|
x_days:
|
||||||
one: "päivä"
|
one: "päivä"
|
||||||
other: "%{count} päivää"
|
other: "%{count} päivää"
|
||||||
|
|||||||
@@ -91,8 +91,8 @@ gl:
|
|||||||
one: 'aproximadamente unha hora'
|
one: 'aproximadamente unha hora'
|
||||||
other: '%{count} horas'
|
other: '%{count} horas'
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 hora"
|
||||||
other: "%{count} hours"
|
other: "%{count} horas"
|
||||||
x_days:
|
x_days:
|
||||||
one: '1 día'
|
one: '1 día'
|
||||||
other: '%{count} días'
|
other: '%{count} días'
|
||||||
|
|||||||
@@ -56,8 +56,8 @@ he:
|
|||||||
one: 'בערך שעה אחת'
|
one: 'בערך שעה אחת'
|
||||||
other: 'בערך %{count} שעות'
|
other: 'בערך %{count} שעות'
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 שעה"
|
||||||
other: "%{count} hours"
|
other: "%{count} שעות"
|
||||||
x_days:
|
x_days:
|
||||||
one: 'יום אחד'
|
one: 'יום אחד'
|
||||||
other: '%{count} ימים'
|
other: '%{count} ימים'
|
||||||
|
|||||||
@@ -49,8 +49,8 @@ hr:
|
|||||||
one: "oko sat vremena"
|
one: "oko sat vremena"
|
||||||
other: "oko %{count} sati"
|
other: "oko %{count} sati"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 sata"
|
||||||
other: "%{count} hours"
|
other: "%{count} sati"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 dan"
|
one: "1 dan"
|
||||||
other: "%{count} dana"
|
other: "%{count} dana"
|
||||||
|
|||||||
@@ -51,8 +51,8 @@
|
|||||||
one: 'csaknem 1 órája'
|
one: 'csaknem 1 órája'
|
||||||
other: 'csaknem %{count} órája'
|
other: 'csaknem %{count} órája'
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 óra"
|
||||||
other: "%{count} hours"
|
other: "%{count} óra"
|
||||||
x_days:
|
x_days:
|
||||||
one: '1 napja'
|
one: '1 napja'
|
||||||
other: '%{count} napja'
|
other: '%{count} napja'
|
||||||
|
|||||||
@@ -47,8 +47,8 @@ id:
|
|||||||
one: "sekitar sejam"
|
one: "sekitar sejam"
|
||||||
other: "sekitar %{count} jam"
|
other: "sekitar %{count} jam"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 jam"
|
||||||
other: "%{count} hours"
|
other: "%{count} jam"
|
||||||
x_days:
|
x_days:
|
||||||
one: "sehari"
|
one: "sehari"
|
||||||
other: "%{count} hari"
|
other: "%{count} hari"
|
||||||
|
|||||||
+68
-71
@@ -55,8 +55,8 @@ it:
|
|||||||
one: "circa un'ora"
|
one: "circa un'ora"
|
||||||
other: "circa %{count} ore"
|
other: "circa %{count} ore"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 ora"
|
||||||
other: "%{count} hours"
|
other: "%{count} ore"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 giorno"
|
one: "1 giorno"
|
||||||
other: "%{count} giorni"
|
other: "%{count} giorni"
|
||||||
@@ -1001,90 +1001,87 @@ it:
|
|||||||
button_export: Esporta
|
button_export: Esporta
|
||||||
label_export_options: "%{export_format} opzioni per l'export"
|
label_export_options: "%{export_format} opzioni per l'export"
|
||||||
error_attachment_too_big: Questo file non può essere caricato in quanto la sua dimensione supera la massima consentita (%{max_size})
|
error_attachment_too_big: Questo file non può essere caricato in quanto la sua dimensione supera la massima consentita (%{max_size})
|
||||||
notice_failed_to_save_time_entries: "Failed to save %{count} time entrie(s) on %{total} selected: %{ids}."
|
notice_failed_to_save_time_entries: "Non ho potuto salvare %{count} registrazioni di tempo impiegato su %{total} selezionate: %{ids}."
|
||||||
label_x_issues:
|
label_x_issues:
|
||||||
zero: 0 segnalazione
|
zero: 0 segnalazione
|
||||||
one: 1 segnalazione
|
one: 1 segnalazione
|
||||||
other: "%{count} segnalazioni"
|
other: "%{count} segnalazioni"
|
||||||
label_repository_new: New repository
|
label_repository_new: Nuovo repository
|
||||||
field_repository_is_default: Main repository
|
field_repository_is_default: Repository principale
|
||||||
label_copy_attachments: Copy attachments
|
label_copy_attachments: Copia allegati
|
||||||
label_item_position: "%{position}/%{count}"
|
label_item_position: "%{position}/%{count}"
|
||||||
label_completed_versions: Completed versions
|
label_completed_versions: Completed versions
|
||||||
text_project_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
|
text_project_identifier_info: Consentiti solo lettere minuscole (a-z), numeri, trattini e trattini bassi.<br />Una volta salvato, l'identificatore non può essere modificato.
|
||||||
field_multiple: Multiple values
|
field_multiple: Valori multipli
|
||||||
setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed
|
setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed
|
||||||
text_issue_conflict_resolution_add_notes: Add my notes and discard my other changes
|
text_issue_conflict_resolution_add_notes: Aggiunge le mie note e non salvare le mie ulteriori modifiche
|
||||||
text_issue_conflict_resolution_overwrite: Apply my changes anyway (previous notes will be kept but some changes may be overwritten)
|
text_issue_conflict_resolution_overwrite: Applica comunque le mie modifiche (le note precedenti verranno mantenute ma alcuni cambiamenti potrebbero essere sovrascritti)
|
||||||
notice_issue_update_conflict: The issue has been updated by an other user while you were editing it.
|
notice_issue_update_conflict: La segnalazione è stata aggiornata da un altro utente mentre la stavi editando.
|
||||||
text_issue_conflict_resolution_cancel: Discard all my changes and redisplay %{link}
|
text_issue_conflict_resolution_cancel: Cancella ogni modifica e rivisualizza %{link}
|
||||||
permission_manage_related_issues: Manage related issues
|
permission_manage_related_issues: Gestisci relative segnalazioni
|
||||||
field_auth_source_ldap_filter: LDAP filter
|
field_auth_source_ldap_filter: Filtro LDAP
|
||||||
label_search_for_watchers: Search for watchers to add
|
label_search_for_watchers: Cerca osservatori da aggiungere
|
||||||
notice_account_deleted: Your account has been permanently deleted.
|
notice_account_deleted: Il tuo account sarà definitivamente rimosso.
|
||||||
setting_unsubscribe: Allow users to delete their own account
|
setting_unsubscribe: Consentire agli utenti di cancellare il proprio account
|
||||||
button_delete_my_account: Delete my account
|
button_delete_my_account: Cancella il mio account
|
||||||
text_account_destroy_confirmation: |-
|
text_account_destroy_confirmation: "Sei sicuro di voler procedere?\nIl tuo account sarà definitivamente cancellato, senza alcuna possibilità di ripristino."
|
||||||
Are you sure you want to proceed?
|
error_session_expired: "La tua sessione è scaduta. Effettua nuovamente il login."
|
||||||
Your account will be permanently deleted, with no way to reactivate it.
|
text_session_expiration_settings: "Attenzione: la modifica di queste impostazioni può far scadere le sessioni correnti, compresa la tua."
|
||||||
error_session_expired: Your session has expired. Please login again.
|
setting_session_lifetime: Massima durata di una sessione
|
||||||
text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours."
|
setting_session_timeout: Timeout di inattività di una sessione
|
||||||
setting_session_lifetime: Session maximum lifetime
|
label_session_expiration: Scadenza sessione
|
||||||
setting_session_timeout: Session inactivity timeout
|
permission_close_project: Chiusura / riapertura progetto
|
||||||
label_session_expiration: Session expiration
|
label_show_closed_projects: Vedi progetti chiusi
|
||||||
permission_close_project: Close / reopen the project
|
button_close: Chiudi
|
||||||
label_show_closed_projects: View closed projects
|
button_reopen: Riapri
|
||||||
button_close: Close
|
project_status_active: attivo
|
||||||
button_reopen: Reopen
|
project_status_closed: chiuso
|
||||||
project_status_active: active
|
project_status_archived: archiviato
|
||||||
project_status_closed: closed
|
text_project_closed: Questo progetto è chiuso e in sola lettura.
|
||||||
project_status_archived: archived
|
notice_user_successful_create: Creato utente %{id}.
|
||||||
text_project_closed: This project is closed and read-only.
|
field_core_fields: Campi standard
|
||||||
notice_user_successful_create: User %{id} created.
|
field_timeout: Timeout (in secondi)
|
||||||
field_core_fields: Standard fields
|
setting_thumbnails_enabled: Mostra miniature degli allegati
|
||||||
field_timeout: Timeout (in seconds)
|
setting_thumbnails_size: Dimensioni delle miniature (in pixels)
|
||||||
setting_thumbnails_enabled: Display attachment thumbnails
|
label_status_transitions: Transizioni di stato
|
||||||
setting_thumbnails_size: Thumbnails size (in pixels)
|
label_fields_permissions: Permessi sui campi
|
||||||
label_status_transitions: Status transitions
|
label_readonly: Sola lettura
|
||||||
label_fields_permissions: Fields permissions
|
label_required: Richiesto
|
||||||
label_readonly: Read-only
|
text_repository_identifier_info: Consentiti solo lettere minuscole (a-z), numeri, trattini e trattini bassi.<br />Una volta salvato, ll'identificatore non può essere modificato.
|
||||||
label_required: Required
|
|
||||||
text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
|
|
||||||
field_board_parent: Parent forum
|
field_board_parent: Parent forum
|
||||||
label_attribute_of_project: Project's %{name}
|
label_attribute_of_project: Project's %{name}
|
||||||
label_attribute_of_author: Author's %{name}
|
label_attribute_of_author: Author's %{name}
|
||||||
label_attribute_of_assigned_to: Assignee's %{name}
|
label_attribute_of_assigned_to: Assegnatari %{name}
|
||||||
label_attribute_of_fixed_version: Target version's %{name}
|
label_attribute_of_fixed_version: Target version's %{name}
|
||||||
label_copy_subtasks: Copy subtasks
|
label_copy_subtasks: Copia sottoattività
|
||||||
label_copied_to: copied to
|
label_copied_to: copia a
|
||||||
label_copied_from: copied from
|
label_copied_from: copia da
|
||||||
label_any_issues_in_project: any issues in project
|
label_any_issues_in_project: ogni segnalazione del progetto
|
||||||
label_any_issues_not_in_project: any issues not in project
|
label_any_issues_not_in_project: ogni segnalazione non nel progetto
|
||||||
field_private_notes: Private notes
|
field_private_notes: Note private
|
||||||
permission_view_private_notes: View private notes
|
permission_view_private_notes: Visualizza note private
|
||||||
permission_set_notes_private: Set notes as private
|
permission_set_notes_private: Imposta note come private
|
||||||
label_no_issues_in_project: no issues in project
|
label_no_issues_in_project: progetto privo di segnalazioni
|
||||||
label_any: tutti
|
label_any: tutti
|
||||||
label_last_n_weeks: last %{count} weeks
|
label_last_n_weeks: ultime %{count} settimane
|
||||||
setting_cross_project_subtasks: Allow cross-project subtasks
|
setting_cross_project_subtasks: Consenti sottoattività cross-project
|
||||||
label_cross_project_descendants: Con sottoprogetti
|
label_cross_project_descendants: Con sottoprogetti
|
||||||
label_cross_project_tree: Con progetto padre
|
label_cross_project_tree: Con progetto padre
|
||||||
label_cross_project_hierarchy: Con gerarchia progetto
|
label_cross_project_hierarchy: Con gerarchia progetto
|
||||||
label_cross_project_system: Con tutti i progetti
|
label_cross_project_system: Con tutti i progetti
|
||||||
button_hide: Hide
|
button_hide: Nascondi
|
||||||
setting_non_working_week_days: Non-working days
|
setting_non_working_week_days: Giorni non lavorativi
|
||||||
label_in_the_next_days: in the next
|
label_in_the_next_days: nei prossimi
|
||||||
label_in_the_past_days: in the past
|
label_in_the_past_days: nei passati
|
||||||
label_attribute_of_user: User's %{name}
|
label_attribute_of_user: Utente %{name}
|
||||||
text_turning_multiple_off: If you disable multiple values, multiple values will be
|
text_turning_multiple_off: Disabilitando valori multipli, i valori multipli verranno rimossi, in modo da mantenere un solo valore per item.
|
||||||
removed in order to preserve only one value per item.
|
label_attribute_of_issue: Segnalazione %{name}
|
||||||
label_attribute_of_issue: Issue's %{name}
|
permission_add_documents: Aggiungi documenti
|
||||||
permission_add_documents: Add documents
|
permission_edit_documents: Edita documenti
|
||||||
permission_edit_documents: Edit documents
|
permission_delete_documents: Cancella documenti
|
||||||
permission_delete_documents: Delete documents
|
|
||||||
label_gantt_progress_line: Progress line
|
label_gantt_progress_line: Progress line
|
||||||
setting_jsonp_enabled: Enable JSONP support
|
setting_jsonp_enabled: Abilita supporto a JSONP
|
||||||
field_inherit_members: Inherit members
|
field_inherit_members: Eredita membri
|
||||||
field_closed_on: Closed
|
field_closed_on: Chiuso
|
||||||
setting_default_projects_tracker_ids: Default trackers for new projects
|
setting_default_projects_tracker_ids: Trackers di default per nuovi progetti
|
||||||
label_total_time: Totale
|
label_total_time: Totale
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ ko:
|
|||||||
one: "약 한시간"
|
one: "약 한시간"
|
||||||
other: "약 %{count}시간"
|
other: "약 %{count}시간"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 시간"
|
||||||
other: "%{count} hours"
|
other: "%{count} 시간"
|
||||||
x_days:
|
x_days:
|
||||||
one: "하루"
|
one: "하루"
|
||||||
other: "%{count}일"
|
other: "%{count}일"
|
||||||
|
|||||||
+32
-32
@@ -1,8 +1,10 @@
|
|||||||
# Lithuanian translations for Ruby on Rails
|
# Lithuanian translations for Ruby on Rails
|
||||||
# by Laurynas Butkus (laurynas.butkus@gmail.com)
|
# by Laurynas Butkus (laurynas.butkus@gmail.com)
|
||||||
# Redmine translation by Gediminas Muižis gediminas.muizis@gmail.com
|
# Redmine translation by Gediminas Muižis gediminas.muizis@gmail.com
|
||||||
# and Sergej Jegorov sergej.jegorov@gmail.com
|
# and Sergej Jegorov sergej.jegorov@gmail.com
|
||||||
# and Gytis Gurklys gytis.gurklys@gmail.com
|
# and Gytis Gurklys gytis.gurklys@gmail.com
|
||||||
|
# and Andrius Kriučkovas andrius.kriuckovas@gmail.com
|
||||||
|
|
||||||
lt:
|
lt:
|
||||||
direction: ltr
|
direction: ltr
|
||||||
date:
|
date:
|
||||||
@@ -228,8 +230,8 @@ lt:
|
|||||||
notice_default_data_loaded: Numatytoji konfiguracija sėkmingai užkrauta.
|
notice_default_data_loaded: Numatytoji konfiguracija sėkmingai užkrauta.
|
||||||
notice_unable_delete_version: Neįmanoma panaikinti versiją.
|
notice_unable_delete_version: Neįmanoma panaikinti versiją.
|
||||||
notice_unable_delete_time_entry: Neįmano ištrinti laiko žurnalo įrašą.
|
notice_unable_delete_time_entry: Neįmano ištrinti laiko žurnalo įrašą.
|
||||||
notice_issue_done_ratios_updated: Issue done ratios updated.
|
notice_issue_done_ratios_updated: Problemos baigtumo rodikliai atnaujinti.
|
||||||
notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
|
notice_gantt_chart_truncated: Grafikas buvo sutrumpintas, kadangi jis viršija maksimalų (%{max}) leistinų atvaizduoti elementų kiekį
|
||||||
notice_issue_successful_create: Darbas %{id} sukurtas.
|
notice_issue_successful_create: Darbas %{id} sukurtas.
|
||||||
|
|
||||||
error_can_t_load_default_data: "Numatytoji konfiguracija negali būti užkrauta: %{value}"
|
error_can_t_load_default_data: "Numatytoji konfiguracija negali būti užkrauta: %{value}"
|
||||||
@@ -241,16 +243,16 @@ lt:
|
|||||||
error_no_tracker_in_project: 'Joks pėdsekys nesusietas su šiuo projektu. Prašom patikrinti Projekto nustatymus.'
|
error_no_tracker_in_project: 'Joks pėdsekys nesusietas su šiuo projektu. Prašom patikrinti Projekto nustatymus.'
|
||||||
error_no_default_issue_status: Nenustatyta numatytoji darbų būsena. Prašome patikrinti konfigūravimą ("Administravimas -> Darbų būsenos").
|
error_no_default_issue_status: Nenustatyta numatytoji darbų būsena. Prašome patikrinti konfigūravimą ("Administravimas -> Darbų būsenos").
|
||||||
error_can_not_delete_custom_field: Negalima ištrinti kliento lauko
|
error_can_not_delete_custom_field: Negalima ištrinti kliento lauko
|
||||||
error_can_not_delete_tracker: "This tracker contains issues and cannot be deleted."
|
error_can_not_delete_tracker: "Šis pėdsekys turi įrašus ir todėl negali būti ištrintas."
|
||||||
error_can_not_remove_role: "This role is in use and cannot be deleted."
|
error_can_not_remove_role: "Ši rolė yra naudojama ir negali būti ištrinta."
|
||||||
error_can_not_reopen_issue_on_closed_version: Uždarytai versijai priskirtas darbas negali būti atnaujintas.
|
error_can_not_reopen_issue_on_closed_version: Uždarytai versijai priskirtas darbas negali būti atnaujintas.
|
||||||
error_can_not_archive_project: Šio projekto negalima suarchyvuoti
|
error_can_not_archive_project: Šio projekto negalima suarchyvuoti
|
||||||
error_issue_done_ratios_not_updated: "Issue done ratios not updated."
|
error_issue_done_ratios_not_updated: "Įrašo baigtumo rodikliai nebuvo atnaujinti. "
|
||||||
error_workflow_copy_source: 'Please select a source tracker or role'
|
error_workflow_copy_source: 'Prašome pasirinkti pirminį šaltinio seklį arba rolę'
|
||||||
error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
|
error_workflow_copy_target: 'Prašome pasirinkti galutinį paskirties seklį(-ius) arba rolę(-s)'
|
||||||
error_unable_delete_issue_status: 'Negalima ištrinti darbo statuso'
|
error_unable_delete_issue_status: 'Negalima ištrinti darbo statuso'
|
||||||
error_unable_to_connect: Negalima prisijungti (%{value})
|
error_unable_to_connect: Negalima prisijungti (%{value})
|
||||||
error_attachment_too_big: "This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})"
|
error_attachment_too_big: "Ši byla negali būti įkelta, nes viršija maksimalią (%{max_size}) leistiną bylos apimtį"
|
||||||
warning_attachments_not_saved: "%{count} byla(ų) negali būti išsaugota."
|
warning_attachments_not_saved: "%{count} byla(ų) negali būti išsaugota."
|
||||||
|
|
||||||
mail_subject_lost_password: "Jūsų %{value} slaptažodis"
|
mail_subject_lost_password: "Jūsų %{value} slaptažodis"
|
||||||
@@ -431,7 +433,7 @@ lt:
|
|||||||
setting_cache_formatted_text: Paslėpti formatuotą tekstą
|
setting_cache_formatted_text: Paslėpti formatuotą tekstą
|
||||||
setting_default_notification_option: Numatytosios pranešimų nuostatos
|
setting_default_notification_option: Numatytosios pranešimų nuostatos
|
||||||
setting_commit_logtime_enabled: Įjungti laiko registravimą
|
setting_commit_logtime_enabled: Įjungti laiko registravimą
|
||||||
setting_commit_logtime_activity_id: Activity for logged time
|
setting_commit_logtime_activity_id: Laiko įrašų veikla
|
||||||
setting_gantt_items_limit: Maksimalus rodmenų skaičius rodomas Gantt'o grafike
|
setting_gantt_items_limit: Maksimalus rodmenų skaičius rodomas Gantt'o grafike
|
||||||
setting_issue_group_assignment: Leisti darbo priskirimą grupėms
|
setting_issue_group_assignment: Leisti darbo priskirimą grupėms
|
||||||
setting_default_issue_start_date_to_creation_date: Naudoti dabartinę datą kaip naujų darbų pradžios datą
|
setting_default_issue_start_date_to_creation_date: Naudoti dabartinę datą kaip naujų darbų pradžios datą
|
||||||
@@ -877,8 +879,8 @@ lt:
|
|||||||
label_issues_visibility_public: Visi vieši darbai
|
label_issues_visibility_public: Visi vieši darbai
|
||||||
label_issues_visibility_own: Darbai, sukurti vartotojo arba jam priskirti
|
label_issues_visibility_own: Darbai, sukurti vartotojo arba jam priskirti
|
||||||
label_git_report_last_commit: Nurodyti paskutinį failų ir katalogų pakeitimą
|
label_git_report_last_commit: Nurodyti paskutinį failų ir katalogų pakeitimą
|
||||||
label_parent_revision: Parent
|
label_parent_revision: Pirminė revizija
|
||||||
label_child_revision: Child
|
label_child_revision: Sekanti revizija
|
||||||
label_export_options: "%{export_format} eksportavimo nustatymai"
|
label_export_options: "%{export_format} eksportavimo nustatymai"
|
||||||
|
|
||||||
button_login: Registruotis
|
button_login: Registruotis
|
||||||
@@ -991,20 +993,19 @@ lt:
|
|||||||
text_enumeration_destroy_question: "%{count} objektai(ų) priskirti šiai reikšmei."
|
text_enumeration_destroy_question: "%{count} objektai(ų) priskirti šiai reikšmei."
|
||||||
text_enumeration_category_reassign_to: 'Priskirti juos šiai reikšmei:'
|
text_enumeration_category_reassign_to: 'Priskirti juos šiai reikšmei:'
|
||||||
text_email_delivery_not_configured: "El.pašto siuntimas nesukonfigūruotas, ir perspėjimai neaktyvus.\nSukonfigūruokite savo SMTP serverį byloje config/configuration.yml ir perleiskite programą norėdami pritaikyti pakeitimus."
|
text_email_delivery_not_configured: "El.pašto siuntimas nesukonfigūruotas, ir perspėjimai neaktyvus.\nSukonfigūruokite savo SMTP serverį byloje config/configuration.yml ir perleiskite programą norėdami pritaikyti pakeitimus."
|
||||||
text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
|
|
||||||
text_repository_usernames_mapping: "Parinkite ar atnaujinkite Redmine vartotoją, kuris paminėtas saugyklos log'e.\nVartotojai, turintys tą patį Redmine ir saugyklos vardą ar el.paštą yra automatiškai surišti."
|
text_repository_usernames_mapping: "Parinkite ar atnaujinkite Redmine vartotoją, kuris paminėtas saugyklos log'e.\nVartotojai, turintys tą patį Redmine ir saugyklos vardą ar el.paštą yra automatiškai surišti."
|
||||||
text_diff_truncated: "... Šis diff'as nukarpytas, nes jis viršijo maksimalų rodomų eilučių skaičių."
|
text_diff_truncated: "... Šis diff'as nukarpytas, nes jis viršijo maksimalų rodomų eilučių skaičių."
|
||||||
text_custom_field_possible_values_info: 'Po vieną eilutę kiekvienai reikšmei'
|
text_custom_field_possible_values_info: 'Po vieną eilutę kiekvienai reikšmei'
|
||||||
text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
|
text_wiki_page_destroy_question: "Šis puslapis turi %{descendants} susijusių arba išvestinių puslapių. Ką norėtumėte daryti?"
|
||||||
text_wiki_page_nullify_children: Laikyti child puslapius kaip pagrindinius puslapius
|
text_wiki_page_nullify_children: Laikyti child puslapius kaip pagrindinius puslapius
|
||||||
text_wiki_page_destroy_children: "Pašalinti child puslapius ir jų palikuonis"
|
text_wiki_page_destroy_children: "Pašalinti child puslapius ir jų palikuonis"
|
||||||
text_wiki_page_reassign_children: "Priskirkite iš naujo 'child' puslapius šiam pagrindiniam puslapiui"
|
text_wiki_page_reassign_children: "Priskirkite iš naujo 'child' puslapius šiam pagrindiniam puslapiui"
|
||||||
text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
|
text_own_membership_delete_confirmation: "Jūs esate pasiruošęs panaikinti dalį arba visus leidimus ir po šio pakeitimo galite prarasti šio projekto redagavimo galimybę. \n Ar jūs esate įsitikinęs ir tęsti?"
|
||||||
text_zoom_in: Priartinti
|
text_zoom_in: Priartinti
|
||||||
text_zoom_out: Nutolinti
|
text_zoom_out: Nutolinti
|
||||||
text_warn_on_leaving_unsaved: "Dabartinis puslapis turi neišsaugoto teksto, kuris bus prarastas, jeigu paliksite šį puslapį."
|
text_warn_on_leaving_unsaved: "Dabartinis puslapis turi neišsaugoto teksto, kuris bus prarastas, jeigu paliksite šį puslapį."
|
||||||
text_scm_path_encoding_note: "Numatytasis: UTF-8"
|
text_scm_path_encoding_note: "Numatytasis: UTF-8"
|
||||||
text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
|
text_git_repository_note: Saugykla (repository) yra plika ir vietinė (pvz. /gitrepo, c:\gitrepo)
|
||||||
text_mercurial_repository_note: Vietinė saugykla (e.g. /hgrepo, c:\hgrepo)
|
text_mercurial_repository_note: Vietinė saugykla (e.g. /hgrepo, c:\hgrepo)
|
||||||
text_scm_command: Komanda
|
text_scm_command: Komanda
|
||||||
text_scm_command_version: Versija
|
text_scm_command_version: Versija
|
||||||
@@ -1069,7 +1070,7 @@ lt:
|
|||||||
label_completed_versions: Užbaigtos versijos
|
label_completed_versions: Užbaigtos versijos
|
||||||
text_project_identifier_info: Leidžiamos tik mažosios raidės (a-z), skaitmenys, brūkšneliai ir pabraukimo simboliai.<br />Kartą išsaugojus pakeitimai negalimi
|
text_project_identifier_info: Leidžiamos tik mažosios raidės (a-z), skaitmenys, brūkšneliai ir pabraukimo simboliai.<br />Kartą išsaugojus pakeitimai negalimi
|
||||||
field_multiple: Keletas reikšmių
|
field_multiple: Keletas reikšmių
|
||||||
setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed
|
setting_commit_cross_project_ref: Leisti visų kitų projektų įrašus susieti nuorodomis ir sutaisyti
|
||||||
text_issue_conflict_resolution_add_notes: Išsaugoti mano žinutę ir atmesti likusius mano pataisymus
|
text_issue_conflict_resolution_add_notes: Išsaugoti mano žinutę ir atmesti likusius mano pataisymus
|
||||||
text_issue_conflict_resolution_overwrite: Išsaugoti mano pakeitimus (ankstesnių pakeitimų žinutės bus išsaugotos, tačiau kai kurie pakeitimai bus perrašyti)
|
text_issue_conflict_resolution_overwrite: Išsaugoti mano pakeitimus (ankstesnių pakeitimų žinutės bus išsaugotos, tačiau kai kurie pakeitimai bus perrašyti)
|
||||||
notice_issue_update_conflict: Darbas buvo pakoreguotas kito vartotojo kol jūs atlikote pakeitimus.
|
notice_issue_update_conflict: Darbas buvo pakoreguotas kito vartotojo kol jūs atlikote pakeitimus.
|
||||||
@@ -1131,18 +1132,17 @@ lt:
|
|||||||
setting_non_working_week_days: Nedarbo dienos
|
setting_non_working_week_days: Nedarbo dienos
|
||||||
label_in_the_next_days: per ateinančias
|
label_in_the_next_days: per ateinančias
|
||||||
label_in_the_past_days: per paskutines
|
label_in_the_past_days: per paskutines
|
||||||
label_attribute_of_user: User's %{name}
|
label_attribute_of_user: Vartotojo %{name}
|
||||||
text_turning_multiple_off: If you disable multiple values, multiple values will be
|
text_turning_multiple_off: Jei jūs išjungsite kelių reikšmių pasirinkimą, visos išvardintos reikšmės bus pašalintos ir palikta tik viena reikšmė kiekvienam laukui.
|
||||||
removed in order to preserve only one value per item.
|
label_attribute_of_issue: Įrašai %{name}
|
||||||
label_attribute_of_issue: Issue's %{name}
|
permission_add_documents: Pridėti dokumentus
|
||||||
permission_add_documents: Add documents
|
permission_edit_documents: Redaguoti dokumentus
|
||||||
permission_edit_documents: Edit documents
|
permission_delete_documents: Trinti dokumentus
|
||||||
permission_delete_documents: Delete documents
|
label_gantt_progress_line: Progreso linija
|
||||||
label_gantt_progress_line: Progress line
|
setting_jsonp_enabled: Įgalinti JSONP palaikymą
|
||||||
setting_jsonp_enabled: Enable JSONP support
|
field_inherit_members: Paveldėti narius
|
||||||
field_inherit_members: Inherit members
|
field_closed_on: Uždarytas
|
||||||
field_closed_on: Closed
|
setting_default_projects_tracker_ids: Sekliai pagal nutylėjimą naujiems projektams
|
||||||
setting_default_projects_tracker_ids: Default trackers for new projects
|
|
||||||
label_total_time: Iš viso
|
label_total_time: Iš viso
|
||||||
text_scm_config: You can configure your SCM commands in config/configuration.yml. Please restart the application after editing it.
|
text_scm_config: Jūs galite pakeisti SCM komandas byloje config/configuration.yml. Prašome perkrauti programą po redagavimo, idant įgalinti pakeitimus.
|
||||||
text_scm_command_not_available: SCM command is not available. Please check settings on the administration panel.
|
text_scm_command_not_available: SCM komanda nepasiekiama. Patikrinkite administravimo skydelio nustatymus.
|
||||||
|
|||||||
@@ -46,8 +46,8 @@ lv:
|
|||||||
one: "aptuveni 1 stunda"
|
one: "aptuveni 1 stunda"
|
||||||
other: "aptuveni %{count} stundas"
|
other: "aptuveni %{count} stundas"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 stunda"
|
||||||
other: "%{count} hours"
|
other: "%{count} stundas"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 diena"
|
one: "1 diena"
|
||||||
other: "%{count} dienas"
|
other: "%{count} dienas"
|
||||||
@@ -775,7 +775,7 @@ lv:
|
|||||||
button_cancel: Atcelt
|
button_cancel: Atcelt
|
||||||
button_activate: Aktivizēt
|
button_activate: Aktivizēt
|
||||||
button_sort: Kārtot
|
button_sort: Kārtot
|
||||||
button_log_time: Ilgs laiks
|
button_log_time: Reģistrēt laiku
|
||||||
button_rollback: Atjaunot uz šo versiju
|
button_rollback: Atjaunot uz šo versiju
|
||||||
button_watch: Vērot
|
button_watch: Vērot
|
||||||
button_unwatch: Nevērot
|
button_unwatch: Nevērot
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ mk:
|
|||||||
one: "околу 1 час"
|
one: "околу 1 час"
|
||||||
other: "околу %{count} часа"
|
other: "околу %{count} часа"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 час"
|
||||||
other: "%{count} hours"
|
other: "%{count} часа"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 ден"
|
one: "1 ден"
|
||||||
other: "%{count} дена"
|
other: "%{count} дена"
|
||||||
|
|||||||
@@ -51,8 +51,8 @@ mn:
|
|||||||
one: "1 цаг орчим"
|
one: "1 цаг орчим"
|
||||||
other: "ойролцоогоор %{count} цаг"
|
other: "ойролцоогоор %{count} цаг"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 цаг"
|
||||||
other: "%{count} hours"
|
other: "%{count} цаг"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 өдөр"
|
one: "1 өдөр"
|
||||||
other: "%{count} өдөр"
|
other: "%{count} өдөр"
|
||||||
|
|||||||
+26
-27
@@ -50,7 +50,7 @@ nl:
|
|||||||
other: "ongeveer %{count} uren"
|
other: "ongeveer %{count} uren"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 uur"
|
one: "1 uur"
|
||||||
other: "%{count} hours"
|
other: "%{count} uren"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 dag"
|
one: "1 dag"
|
||||||
other: "%{count} dagen"
|
other: "%{count} dagen"
|
||||||
@@ -343,9 +343,9 @@ nl:
|
|||||||
one: 1 open
|
one: 1 open
|
||||||
other: "%{count} open"
|
other: "%{count} open"
|
||||||
label_x_closed_issues_abbr:
|
label_x_closed_issues_abbr:
|
||||||
zero: 0 closed
|
zero: 0 gesloten
|
||||||
one: 1 closed
|
one: 1 gesloten
|
||||||
other: "%{count} closed"
|
other: "%{count} gesloten"
|
||||||
label_comment: Commentaar
|
label_comment: Commentaar
|
||||||
label_comment_add: Voeg commentaar toe
|
label_comment_add: Voeg commentaar toe
|
||||||
label_comment_added: Commentaar toegevoegd
|
label_comment_added: Commentaar toegevoegd
|
||||||
@@ -1022,7 +1022,7 @@ nl:
|
|||||||
text_project_closed: Dit project is gesloten en op alleen-lezen
|
text_project_closed: Dit project is gesloten en op alleen-lezen
|
||||||
notice_user_successful_create: Gebruiker %{id} aangemaakt.
|
notice_user_successful_create: Gebruiker %{id} aangemaakt.
|
||||||
field_core_fields: Standaard verleden
|
field_core_fields: Standaard verleden
|
||||||
field_timeout: Timeout (in seconds)
|
field_timeout: Timeout (in seconden)
|
||||||
setting_thumbnails_enabled: Geef bijlage miniaturen weer
|
setting_thumbnails_enabled: Geef bijlage miniaturen weer
|
||||||
setting_thumbnails_size: Grootte miniaturen (in pixels)
|
setting_thumbnails_size: Grootte miniaturen (in pixels)
|
||||||
label_status_transitions: Status transitie
|
label_status_transitions: Status transitie
|
||||||
@@ -1036,36 +1036,35 @@ nl:
|
|||||||
label_attribute_of_assigned_to: Toegewezen %{name}
|
label_attribute_of_assigned_to: Toegewezen %{name}
|
||||||
label_attribute_of_fixed_version: Target versions %{name}
|
label_attribute_of_fixed_version: Target versions %{name}
|
||||||
label_copy_subtasks: Kopieer subtaken
|
label_copy_subtasks: Kopieer subtaken
|
||||||
label_copied_to: copied to
|
label_copied_to: gekopieerd naar
|
||||||
label_copied_from: copied from
|
label_copied_from: gekopieerd van
|
||||||
label_any_issues_in_project: any issues in project
|
label_any_issues_in_project: any issues in project
|
||||||
label_any_issues_not_in_project: any issues not in project
|
label_any_issues_not_in_project: any issues not in project
|
||||||
field_private_notes: Private notes
|
field_private_notes: Privé notities
|
||||||
permission_view_private_notes: View private notes
|
permission_view_private_notes: Bekijk privé notities
|
||||||
permission_set_notes_private: Set notes as private
|
permission_set_notes_private: Maak notities privé
|
||||||
label_no_issues_in_project: no issues in project
|
label_no_issues_in_project: geen issues in project
|
||||||
label_any: alle
|
label_any: alle
|
||||||
label_last_n_weeks: last %{count} weeks
|
label_last_n_weeks: afgelopen %{count} weken
|
||||||
setting_cross_project_subtasks: Allow cross-project subtasks
|
setting_cross_project_subtasks: Sta subtaken in andere projecten toe
|
||||||
label_cross_project_descendants: Met subprojecten
|
label_cross_project_descendants: Met subprojecten
|
||||||
label_cross_project_tree: Met project boom
|
label_cross_project_tree: Met project boom
|
||||||
label_cross_project_hierarchy: Met project hiërarchie
|
label_cross_project_hierarchy: Met project hiërarchie
|
||||||
label_cross_project_system: Met alle projecten
|
label_cross_project_system: Met alle projecten
|
||||||
button_hide: Hide
|
button_hide: Verberg
|
||||||
setting_non_working_week_days: Non-working days
|
setting_non_working_week_days: Niet-werkdagen
|
||||||
label_in_the_next_days: in the next
|
label_in_the_next_days: in de volgende
|
||||||
label_in_the_past_days: in the past
|
label_in_the_past_days: in de afgelopen
|
||||||
label_attribute_of_user: User's %{name}
|
label_attribute_of_user: User's %{name}
|
||||||
text_turning_multiple_off: If you disable multiple values, multiple values will be
|
text_turning_multiple_off: Bij het uitschakelen van meerdere waardes zal er maar een waarde bewaard blijven.
|
||||||
removed in order to preserve only one value per item.
|
|
||||||
label_attribute_of_issue: Issue's %{name}
|
label_attribute_of_issue: Issue's %{name}
|
||||||
permission_add_documents: Add documents
|
permission_add_documents: Voeg documenten toe
|
||||||
permission_edit_documents: Edit documents
|
permission_edit_documents: Bewerk documenten
|
||||||
permission_delete_documents: Delete documents
|
permission_delete_documents: Verwijder documenten
|
||||||
label_gantt_progress_line: Progress line
|
label_gantt_progress_line: Voortgangslijn
|
||||||
setting_jsonp_enabled: Enable JSONP support
|
setting_jsonp_enabled: Schakel JSONP support in
|
||||||
field_inherit_members: Inherit members
|
field_inherit_members: Neem leden over
|
||||||
field_closed_on: Closed
|
field_closed_on: Gesloten
|
||||||
setting_default_projects_tracker_ids: Default trackers for new projects
|
setting_default_projects_tracker_ids: Standaard trackers voor nieuwe projecten
|
||||||
label_total_time: Totaal
|
label_total_time: Totaal
|
||||||
setting_emails_header: Email header
|
setting_emails_header: Email header
|
||||||
|
|||||||
@@ -44,8 +44,8 @@
|
|||||||
one: "rundt 1 time"
|
one: "rundt 1 time"
|
||||||
other: "rundt %{count} timer"
|
other: "rundt %{count} timer"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 time"
|
||||||
other: "%{count} hours"
|
other: "%{count} timer"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 dag"
|
one: "1 dag"
|
||||||
other: "%{count} dager"
|
other: "%{count} dager"
|
||||||
@@ -1045,8 +1045,8 @@
|
|||||||
label_attribute_of_assigned_to: Assignee's %{name}
|
label_attribute_of_assigned_to: Assignee's %{name}
|
||||||
label_attribute_of_fixed_version: Target version's %{name}
|
label_attribute_of_fixed_version: Target version's %{name}
|
||||||
label_copy_subtasks: Copy subtasks
|
label_copy_subtasks: Copy subtasks
|
||||||
label_copied_to: copied to
|
label_copied_to: kopiert til
|
||||||
label_copied_from: copied from
|
label_copied_from: kopiert fra
|
||||||
label_any_issues_in_project: any issues in project
|
label_any_issues_in_project: any issues in project
|
||||||
label_any_issues_not_in_project: any issues not in project
|
label_any_issues_not_in_project: any issues not in project
|
||||||
field_private_notes: Private notes
|
field_private_notes: Private notes
|
||||||
|
|||||||
@@ -82,8 +82,8 @@ pl:
|
|||||||
one: "około godziny"
|
one: "około godziny"
|
||||||
other: "około %{count} godzin"
|
other: "około %{count} godzin"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 godzina"
|
||||||
other: "%{count} hours"
|
other: "%{count} godzin"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 dzień"
|
one: "1 dzień"
|
||||||
other: "%{count} dni"
|
other: "%{count} dni"
|
||||||
@@ -772,7 +772,7 @@ pl:
|
|||||||
text_default_administrator_account_changed: Zmieniono domyślne hasło administratora
|
text_default_administrator_account_changed: Zmieniono domyślne hasło administratora
|
||||||
text_destroy_time_entries: Usuń wpisy dziennika
|
text_destroy_time_entries: Usuń wpisy dziennika
|
||||||
text_destroy_time_entries_question: Przepracowano %{hours} godzin przy zagadnieniu, które chcesz usunąć. Co chcesz zrobić?
|
text_destroy_time_entries_question: Przepracowano %{hours} godzin przy zagadnieniu, które chcesz usunąć. Co chcesz zrobić?
|
||||||
text_email_delivery_not_configured: "Dostarczanie poczty elektronicznej nie zostało skonfigurowane, więc powiadamianie jest nieaktywne.\nSkonfiguruj serwer SMTP w config/email.yml a następnie zrestartuj aplikację i uaktywnij to."
|
text_email_delivery_not_configured: "Dostarczanie poczty elektronicznej nie zostało skonfigurowane, więc powiadamianie jest nieaktywne.\nSkonfiguruj serwer SMTP w config/configuration.yml a następnie zrestartuj aplikację i uaktywnij to."
|
||||||
text_enumeration_category_reassign_to: 'Zmień przypisanie na tą wartość:'
|
text_enumeration_category_reassign_to: 'Zmień przypisanie na tą wartość:'
|
||||||
text_enumeration_destroy_question: "%{count} obiektów jest przypisanych do tej wartości."
|
text_enumeration_destroy_question: "%{count} obiektów jest przypisanych do tej wartości."
|
||||||
text_file_repository_writable: Zapisywalne repozytorium plików
|
text_file_repository_writable: Zapisywalne repozytorium plików
|
||||||
|
|||||||
@@ -1105,5 +1105,5 @@ pt-BR:
|
|||||||
setting_jsonp_enabled: Ativar suporte JSONP
|
setting_jsonp_enabled: Ativar suporte JSONP
|
||||||
field_inherit_members: Herdar membros
|
field_inherit_members: Herdar membros
|
||||||
field_closed_on: Fechado
|
field_closed_on: Fechado
|
||||||
setting_default_projects_tracker_ids: Default trackers for new projects
|
setting_default_projects_tracker_ids: Tipos padrões para novos projeto
|
||||||
label_total_time: Total
|
label_total_time: Total
|
||||||
|
|||||||
@@ -1091,5 +1091,5 @@ pt:
|
|||||||
setting_jsonp_enabled: Activar suporte JSONP
|
setting_jsonp_enabled: Activar suporte JSONP
|
||||||
field_inherit_members: Herdar membros
|
field_inherit_members: Herdar membros
|
||||||
field_closed_on: Fechado
|
field_closed_on: Fechado
|
||||||
setting_default_projects_tracker_ids: Default trackers for new projects
|
setting_default_projects_tracker_ids: Tipo de tarefa padrão para novos projectos
|
||||||
label_total_time: Total
|
label_total_time: Total
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ ro:
|
|||||||
one: "aproximativ o oră"
|
one: "aproximativ o oră"
|
||||||
other: "aproximativ %{count} ore"
|
other: "aproximativ %{count} ore"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 oră"
|
||||||
other: "%{count} hours"
|
other: "%{count} ore"
|
||||||
x_days:
|
x_days:
|
||||||
one: "o zi"
|
one: "o zi"
|
||||||
other: "%{count} zile"
|
other: "%{count} zile"
|
||||||
|
|||||||
+10
-10
@@ -1080,17 +1080,17 @@ ru:
|
|||||||
label_between: между
|
label_between: между
|
||||||
setting_issue_group_assignment: Разрешить назначение задач группам пользователей
|
setting_issue_group_assignment: Разрешить назначение задач группам пользователей
|
||||||
label_diff: Разница(diff)
|
label_diff: Разница(diff)
|
||||||
text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
|
text_git_repository_note: Хранилище пустое и локальное (т.е. /gitrepo, c:\gitrepo)
|
||||||
description_query_sort_criteria_direction: Порядок сортировки
|
description_query_sort_criteria_direction: Порядок сортировки
|
||||||
description_project_scope: Search scope
|
description_project_scope: Область поиска
|
||||||
description_filter: Фильтр
|
description_filter: Фильтр
|
||||||
description_user_mail_notification: Mail notification settings
|
description_user_mail_notification: Настройки почтовых оповещений
|
||||||
description_date_from: Enter start date
|
description_date_from: Введите дату начала
|
||||||
description_message_content: Message content
|
description_message_content: Содержание сообщения
|
||||||
description_available_columns: Available Columns
|
description_available_columns: Доступные столбцы
|
||||||
description_date_range_interval: Choose range by selecting start and end date
|
description_date_range_interval: Выберите диапазон, установив дату начала и дату окончания
|
||||||
description_issue_category_reassign: Choose issue category
|
description_issue_category_reassign: Выберите категорию задачи
|
||||||
description_search: Searchfield
|
description_search: Поле поиска
|
||||||
description_notes: Примечания
|
description_notes: Примечания
|
||||||
description_date_range_list: Выберите диапазон из списка
|
description_date_range_list: Выберите диапазон из списка
|
||||||
description_choose_project: Проекты
|
description_choose_project: Проекты
|
||||||
@@ -1145,7 +1145,7 @@ ru:
|
|||||||
project_status_active: открытые
|
project_status_active: открытые
|
||||||
project_status_closed: закрытые
|
project_status_closed: закрытые
|
||||||
project_status_archived: архивированные
|
project_status_archived: архивированные
|
||||||
text_project_closed: Проект закрыт и находиться в режиме только для чтения.
|
text_project_closed: Проект закрыт и находится в режиме только для чтения.
|
||||||
notice_user_successful_create: Пользователь %{id} создан.
|
notice_user_successful_create: Пользователь %{id} создан.
|
||||||
field_core_fields: Стандартные поля
|
field_core_fields: Стандартные поля
|
||||||
field_timeout: Таймаут (в секундах)
|
field_timeout: Таймаут (в секундах)
|
||||||
|
|||||||
@@ -46,8 +46,8 @@ sk:
|
|||||||
one: "okolo 1 hodiny"
|
one: "okolo 1 hodiny"
|
||||||
other: "okolo %{count} hodín"
|
other: "okolo %{count} hodín"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 hodina"
|
||||||
other: "%{count} hours"
|
other: "%{count} hodín"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 deň"
|
one: "1 deň"
|
||||||
other: "%{count} dní"
|
other: "%{count} dní"
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ sl:
|
|||||||
one: "okrog 1. ure"
|
one: "okrog 1. ure"
|
||||||
other: "okrog %{count} ur"
|
other: "okrog %{count} ur"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 ura"
|
||||||
other: "%{count} hours"
|
other: "%{count} ur"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 dan"
|
one: "1 dan"
|
||||||
other: "%{count} dni"
|
other: "%{count} dni"
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ sq:
|
|||||||
one: "about 1 hour"
|
one: "about 1 hour"
|
||||||
other: "about %{count} hours"
|
other: "about %{count} hours"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 ore"
|
||||||
other: "%{count} hours"
|
other: "%{count} ore"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 day"
|
one: "1 day"
|
||||||
other: "%{count} days"
|
other: "%{count} days"
|
||||||
|
|||||||
@@ -53,8 +53,8 @@ sr-YU:
|
|||||||
one: "približno jedan sat"
|
one: "približno jedan sat"
|
||||||
other: "približno %{count} sati"
|
other: "približno %{count} sati"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 sat"
|
||||||
other: "%{count} hours"
|
other: "%{count} sati"
|
||||||
x_days:
|
x_days:
|
||||||
one: "jedan dan"
|
one: "jedan dan"
|
||||||
other: "%{count} dana"
|
other: "%{count} dana"
|
||||||
|
|||||||
@@ -51,8 +51,8 @@ sr:
|
|||||||
one: "приближно један сат"
|
one: "приближно један сат"
|
||||||
other: "приближно %{count} сати"
|
other: "приближно %{count} сати"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 сат"
|
||||||
other: "%{count} hours"
|
other: "%{count} сати"
|
||||||
x_days:
|
x_days:
|
||||||
one: "један дан"
|
one: "један дан"
|
||||||
other: "%{count} дана"
|
other: "%{count} дана"
|
||||||
|
|||||||
@@ -272,6 +272,7 @@ sv:
|
|||||||
field_author: Författare
|
field_author: Författare
|
||||||
field_created_on: Skapad
|
field_created_on: Skapad
|
||||||
field_updated_on: Uppdaterad
|
field_updated_on: Uppdaterad
|
||||||
|
field_closed_on: Stängd
|
||||||
field_field_format: Format
|
field_field_format: Format
|
||||||
field_is_for_all: För alla projekt
|
field_is_for_all: För alla projekt
|
||||||
field_possible_values: Möjliga värden
|
field_possible_values: Möjliga värden
|
||||||
@@ -372,6 +373,7 @@ sv:
|
|||||||
field_timeout: "Timeout (i sekunder)"
|
field_timeout: "Timeout (i sekunder)"
|
||||||
field_board_parent: Förälderforum
|
field_board_parent: Förälderforum
|
||||||
field_private_notes: Privata anteckningar
|
field_private_notes: Privata anteckningar
|
||||||
|
field_inherit_members: Ärv medlemmar
|
||||||
|
|
||||||
setting_app_title: Applikationsrubrik
|
setting_app_title: Applikationsrubrik
|
||||||
setting_app_subtitle: Applikationsunderrubrik
|
setting_app_subtitle: Applikationsunderrubrik
|
||||||
@@ -440,6 +442,8 @@ sv:
|
|||||||
setting_thumbnails_enabled: Visa miniatyrbilder av bilagor
|
setting_thumbnails_enabled: Visa miniatyrbilder av bilagor
|
||||||
setting_thumbnails_size: Storlek på miniatyrbilder (i pixlar)
|
setting_thumbnails_size: Storlek på miniatyrbilder (i pixlar)
|
||||||
setting_non_working_week_days: Lediga dagar
|
setting_non_working_week_days: Lediga dagar
|
||||||
|
setting_jsonp_enabled: Aktivera JSONP-stöd
|
||||||
|
setting_default_projects_tracker_ids: Standardärendetyper för nya projekt
|
||||||
|
|
||||||
permission_add_project: Skapa projekt
|
permission_add_project: Skapa projekt
|
||||||
permission_add_subprojects: Skapa underprojekt
|
permission_add_subprojects: Skapa underprojekt
|
||||||
@@ -657,6 +661,7 @@ sv:
|
|||||||
one: 1 ärende
|
one: 1 ärende
|
||||||
other: "%{count} ärenden"
|
other: "%{count} ärenden"
|
||||||
label_total: Total
|
label_total: Total
|
||||||
|
label_total_time: Total tid
|
||||||
label_permissions: Behörigheter
|
label_permissions: Behörigheter
|
||||||
label_current_status: Nuvarande status
|
label_current_status: Nuvarande status
|
||||||
label_new_statuses_allowed: Nya tillåtna statusvärden
|
label_new_statuses_allowed: Nya tillåtna statusvärden
|
||||||
@@ -1120,8 +1125,3 @@ sv:
|
|||||||
description_date_from: Ange startdatum
|
description_date_from: Ange startdatum
|
||||||
description_date_to: Ange slutdatum
|
description_date_to: Ange slutdatum
|
||||||
text_repository_identifier_info: 'Endast gemener (a-z), siffror, streck och understreck är tillåtna.<br />När identifieraren sparats kan den inte ändras.'
|
text_repository_identifier_info: 'Endast gemener (a-z), siffror, streck och understreck är tillåtna.<br />När identifieraren sparats kan den inte ändras.'
|
||||||
setting_jsonp_enabled: Enable JSONP support
|
|
||||||
field_inherit_members: Inherit members
|
|
||||||
field_closed_on: Closed
|
|
||||||
setting_default_projects_tracker_ids: Default trackers for new projects
|
|
||||||
label_total_time: Total
|
|
||||||
|
|||||||
@@ -56,8 +56,8 @@ tr:
|
|||||||
one: 'yaklaşık 1 saat'
|
one: 'yaklaşık 1 saat'
|
||||||
other: 'yaklaşık %{count} saat'
|
other: 'yaklaşık %{count} saat'
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 saat"
|
||||||
other: "%{count} hours"
|
other: "%{count} saat"
|
||||||
x_days:
|
x_days:
|
||||||
one: '1 gün'
|
one: '1 gün'
|
||||||
other: '%{count} gün'
|
other: '%{count} gün'
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
"zh-TW":
|
"zh-TW":
|
||||||
direction: ltr
|
direction: ltr
|
||||||
|
jquery:
|
||||||
|
locale: "zh-TW"
|
||||||
date:
|
date:
|
||||||
formats:
|
formats:
|
||||||
# Use the strftime parameters for formats.
|
# Use the strftime parameters for formats.
|
||||||
@@ -121,8 +123,8 @@
|
|||||||
one: "約 1 小時"
|
one: "約 1 小時"
|
||||||
other: "約 %{count} 小時"
|
other: "約 %{count} 小時"
|
||||||
x_hours:
|
x_hours:
|
||||||
one: "1 hour"
|
one: "1 小時"
|
||||||
other: "%{count} hours"
|
other: "%{count} 小時"
|
||||||
x_days:
|
x_days:
|
||||||
one: "1 天"
|
one: "1 天"
|
||||||
other: "%{count} 天"
|
other: "%{count} 天"
|
||||||
@@ -483,6 +485,7 @@
|
|||||||
setting_thumbnails_size: "縮圖大小 (單位: 像素 pixels)"
|
setting_thumbnails_size: "縮圖大小 (單位: 像素 pixels)"
|
||||||
setting_non_working_week_days: 非工作日
|
setting_non_working_week_days: 非工作日
|
||||||
setting_jsonp_enabled: 啟用 JSONP 支援
|
setting_jsonp_enabled: 啟用 JSONP 支援
|
||||||
|
setting_default_projects_tracker_ids: 新專案預設使用的追蹤標籤
|
||||||
|
|
||||||
permission_add_project: 建立專案
|
permission_add_project: 建立專案
|
||||||
permission_add_subprojects: 建立子專案
|
permission_add_subprojects: 建立子專案
|
||||||
@@ -709,7 +712,7 @@
|
|||||||
label_nobody: 無名
|
label_nobody: 無名
|
||||||
label_next: 下一頁
|
label_next: 下一頁
|
||||||
label_previous: 上一頁
|
label_previous: 上一頁
|
||||||
label_used_by: Used by
|
label_used_by: 已使用專案
|
||||||
label_details: 明細
|
label_details: 明細
|
||||||
label_add_note: 加入一個新筆記
|
label_add_note: 加入一個新筆記
|
||||||
label_per_page: 每頁
|
label_per_page: 每頁
|
||||||
@@ -1165,5 +1168,4 @@
|
|||||||
description_date_from: 輸入起始日期
|
description_date_from: 輸入起始日期
|
||||||
description_date_to: 輸入結束日期
|
description_date_to: 輸入結束日期
|
||||||
text_repository_identifier_info: '僅允許使用小寫英文字母 (a-z), 阿拉伯數字, 虛線與底線。<br />一旦儲存之後, 代碼便無法再次被更改。'
|
text_repository_identifier_info: '僅允許使用小寫英文字母 (a-z), 阿拉伯數字, 虛線與底線。<br />一旦儲存之後, 代碼便無法再次被更改。'
|
||||||
setting_default_projects_tracker_ids: Default trackers for new projects
|
|
||||||
label_total_time: 總計
|
label_total_time: 總計
|
||||||
|
|||||||
+14
-15
@@ -1075,19 +1075,18 @@ zh:
|
|||||||
label_cross_project_hierarchy: 与项目继承层次共享
|
label_cross_project_hierarchy: 与项目继承层次共享
|
||||||
label_cross_project_system: 与所有项目共享
|
label_cross_project_system: 与所有项目共享
|
||||||
button_hide: 隐藏
|
button_hide: 隐藏
|
||||||
setting_non_working_week_days: Non-working days
|
setting_non_working_week_days: 非工作日
|
||||||
label_in_the_next_days: in the next
|
label_in_the_next_days: 在未来几天之内
|
||||||
label_in_the_past_days: in the past
|
label_in_the_past_days: 在过去几天之内
|
||||||
label_attribute_of_user: User's %{name}
|
label_attribute_of_user: 用户是 %{name}
|
||||||
text_turning_multiple_off: If you disable multiple values, multiple values will be
|
text_turning_multiple_off: 如果您停用多重值设定,重复的值将被移除,以使每个项目仅保留一个值
|
||||||
removed in order to preserve only one value per item.
|
label_attribute_of_issue: 问题是 %{name}
|
||||||
label_attribute_of_issue: Issue's %{name}
|
permission_add_documents: 添加文档
|
||||||
permission_add_documents: Add documents
|
permission_edit_documents: 编辑文档
|
||||||
permission_edit_documents: Edit documents
|
permission_delete_documents: 删除文档
|
||||||
permission_delete_documents: Delete documents
|
label_gantt_progress_line: 进度线
|
||||||
label_gantt_progress_line: Progress line
|
setting_jsonp_enabled: 启用JSONP支持
|
||||||
setting_jsonp_enabled: Enable JSONP support
|
field_inherit_members: 继承父项目成员
|
||||||
field_inherit_members: Inherit members
|
field_closed_on: 结束日期
|
||||||
field_closed_on: Closed
|
setting_default_projects_tracker_ids: 新建项目默认跟踪标签
|
||||||
setting_default_projects_tracker_ids: Default trackers for new projects
|
|
||||||
label_total_time: 合计
|
label_total_time: 合计
|
||||||
|
|||||||
+17
-9
@@ -99,9 +99,11 @@ RedmineApp::Application.routes.draw do
|
|||||||
match 'copy', :via => [:get, :post]
|
match 'copy', :via => [:get, :post]
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :memberships, :shallow => true, :controller => 'members', :only => [:index, :show, :new, :create, :update, :destroy] do
|
shallow do
|
||||||
collection do
|
resources :memberships, :controller => 'members', :only => [:index, :show, :new, :create, :update, :destroy] do
|
||||||
get 'autocomplete'
|
collection do
|
||||||
|
get 'autocomplete'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -134,15 +136,19 @@ RedmineApp::Application.routes.draw do
|
|||||||
get 'report', :on => :collection
|
get 'report', :on => :collection
|
||||||
end
|
end
|
||||||
resources :queries, :only => [:new, :create]
|
resources :queries, :only => [:new, :create]
|
||||||
resources :issue_categories, :shallow => true
|
shallow do
|
||||||
|
resources :issue_categories
|
||||||
|
end
|
||||||
resources :documents, :except => [:show, :edit, :update, :destroy]
|
resources :documents, :except => [:show, :edit, :update, :destroy]
|
||||||
resources :boards
|
resources :boards
|
||||||
resources :repositories, :shallow => true, :except => [:index, :show] do
|
shallow do
|
||||||
member do
|
resources :repositories, :except => [:index, :show] do
|
||||||
match 'committers', :via => [:get, :post]
|
member do
|
||||||
|
match 'committers', :via => [:get, :post]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
match 'wiki/index', :controller => 'wiki', :action => 'index', :via => :get
|
match 'wiki/index', :controller => 'wiki', :action => 'index', :via => :get
|
||||||
resources :wiki, :except => [:index, :new, :create], :as => 'wiki_page' do
|
resources :wiki, :except => [:index, :new, :create], :as => 'wiki_page' do
|
||||||
member do
|
member do
|
||||||
@@ -176,7 +182,9 @@ RedmineApp::Application.routes.draw do
|
|||||||
get 'report'
|
get 'report'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
resources :relations, :shallow => true, :controller => 'issue_relations', :only => [:index, :show, :create, :destroy]
|
shallow do
|
||||||
|
resources :relations, :controller => 'issue_relations', :only => [:index, :show, :create, :destroy]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
match '/issues', :controller => 'issues', :action => 'destroy', :via => :delete
|
match '/issues', :controller => 'issues', :action => 'destroy', :via => :delete
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,74 @@ Redmine - project management software
|
|||||||
Copyright (C) 2006-2013 Jean-Philippe Lang
|
Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||||
http://www.redmine.org/
|
http://www.redmine.org/
|
||||||
|
|
||||||
|
== 2013-09-14 v2.3.3
|
||||||
|
|
||||||
|
* Defect #13008: Usage of attribute_present? in UserPreference
|
||||||
|
* Defect #14340: Autocomplete fields rendering issue with alternate theme
|
||||||
|
* Defect #14366: Spent Time report sorting on custom fields causes error
|
||||||
|
* Defect #14369: Open/closed issue counts on issues summary are not displayed with SQLServer
|
||||||
|
* Defect #14401: Filtering issues on "related to" may ignore other filters
|
||||||
|
* Defect #14415: Spent time details and report should ignore 'Setting.display_subprojects_issues?' when 'Subproject' filter is enabled.
|
||||||
|
* Defect #14422: CVS root_url not recognized when connection string does not include port
|
||||||
|
* Defect #14447: Additional status transitions for assignees do not work if assigned to a group
|
||||||
|
* Defect #14511: warning: class variable access from toplevel on Ruby 2.0
|
||||||
|
* Defect #14562: diff of CJK (Chinese/Japanese/Korean) is broken on Ruby 1.8
|
||||||
|
* Defect #14584: Standard fields disabled for certain trackers still appear in email notifications
|
||||||
|
* Defect #14607: rake redmine:load_default_data Error
|
||||||
|
* Defect #14697: Wrong Russian translation in close project message
|
||||||
|
* Defect #14798: Wrong done_ratio calculation for parent with subtask having estimated_hours=0
|
||||||
|
* Patch #14485: Traditional Chinese translation for 2.3-stable
|
||||||
|
* Patch #14502: Russian translation for 2.3-stable
|
||||||
|
* Patch #14531: Spanish translations for 2.3.x
|
||||||
|
* Patch #14686: Portuguese translation for 2.3-stable
|
||||||
|
|
||||||
|
== 2013-07-14 v2.3.2
|
||||||
|
|
||||||
|
* Defect #9996: configuration.yml in documentation , but redmine ask me to create email.yml
|
||||||
|
* Defect #13692: warning: already initialized constant on Ruby 1.8.7
|
||||||
|
* Defect #13783: Internal error on time tracking activity enumeration deletion
|
||||||
|
* Defect #13821: "obj" parameter is not defined for macros used in description of documents
|
||||||
|
* Defect #13850: Unable to set custom fields for versions using the REST API
|
||||||
|
* Defect #13910: Values of custom fields are not kept in issues when copying a project
|
||||||
|
* Defect #13950: Duplicate Lithuanian "error_attachment_too_big" translation keys
|
||||||
|
* Defect #14015: Ruby hangs when adding a subtask
|
||||||
|
* Defect #14020: Locking and unlocking a user resets the email notification checkbox
|
||||||
|
* Defect #14023: Can't delete relation when Redmine runs in a subpath
|
||||||
|
* Defect #14051: Filtering issues with custom field in date format with NULL(empty) value
|
||||||
|
* Defect #14178: PDF API broken in version 2.3.1
|
||||||
|
* Defect #14186: Project name is not properly escaped in issue filters JSON
|
||||||
|
* Defect #14242: Project auto generation fails when projects created in the same time
|
||||||
|
* Defect #14245: Gem::InstallError: nokogiri requires Ruby version >= 1.9.2.
|
||||||
|
* Defect #14346: Latvian translation for "Log time"
|
||||||
|
* Feature #12888: Adding markings to emails generated by Private comments
|
||||||
|
* Feature #14419: Include RUBY_PATCHLEVEL and RUBY_RELEASE_DATE in info.rb
|
||||||
|
* Patch #14005: Swedish Translation for 2.3-stable
|
||||||
|
* Patch #14101: Receive IMAP by uid's
|
||||||
|
* Patch #14103: Disconnect and logout from IMAP after mail receive
|
||||||
|
* Patch #14145: German translation of x_hours
|
||||||
|
* Patch #14182: pt-BR translation for 2.3-stable
|
||||||
|
* Patch #14196: Italian translation for 2.3-stable
|
||||||
|
* Patch #14221: Translation of x_hours for many languages
|
||||||
|
|
||||||
|
== 2013-05-01 v2.3.1
|
||||||
|
|
||||||
|
* Defect #12650: Lost text after selection in issue list with IE
|
||||||
|
* Defect #12684: Hotkey for Issue-Edit doesn't work as expected
|
||||||
|
* Defect #13405: Commit link title is escaped twice when using "commit:" prefix
|
||||||
|
* Defect #13541: Can't access SCM when log/production.scm.stderr.log is not writable
|
||||||
|
* Defect #13579: Datepicker uses Simplified Chinese in Traditional Chinese locale
|
||||||
|
* Defect #13584: Missing Portuguese jQuery UI date picker
|
||||||
|
* Defect #13586: Circular loop testing prevents precedes/follows relation between subtasks
|
||||||
|
* Defect #13618: CSV export of spent time ignores filters and columns selection
|
||||||
|
* Defect #13630: PDF export generates the issue id twice
|
||||||
|
* Defect #13644: Diff - Internal Error
|
||||||
|
* Defect #13712: Fix email rake tasks to also support no_account_notice and default_group options
|
||||||
|
* Defect #13811: Broken javascript in IE7 ; recurrence of #12195
|
||||||
|
* Defect #13823: Trailing comma in javascript files
|
||||||
|
* Patch #13531: Traditional Chinese translation for 2.3-stable
|
||||||
|
* Patch #13552: Dutch translations for 2.3-stable
|
||||||
|
* Patch #13678: Lithuanian translation for 2.3-stable
|
||||||
|
|
||||||
== 2013-03-19 v2.3.0
|
== 2013-03-19 v2.3.0
|
||||||
|
|
||||||
* Defect #3107: Issue with two digit year on Logtime
|
* Defect #3107: Issue with two digit year on Logtime
|
||||||
|
|||||||
+8
-1
@@ -7,7 +7,7 @@ http://www.redmine.org/
|
|||||||
|
|
||||||
== Requirements
|
== Requirements
|
||||||
|
|
||||||
* Ruby 1.8.7, 1.9.2 or 1.9.3
|
* Ruby 1.8.7, 1.9.2, 1.9.3 or 2.0.0
|
||||||
* RubyGems
|
* RubyGems
|
||||||
* Bundler >= 1.0.21
|
* Bundler >= 1.0.21
|
||||||
|
|
||||||
@@ -15,6 +15,7 @@ http://www.redmine.org/
|
|||||||
* MySQL (tested with MySQL 5.1)
|
* MySQL (tested with MySQL 5.1)
|
||||||
* PostgreSQL (tested with PostgreSQL 9.1)
|
* PostgreSQL (tested with PostgreSQL 9.1)
|
||||||
* SQLite3 (tested with SQLite 3.7)
|
* SQLite3 (tested with SQLite 3.7)
|
||||||
|
* SQLServer (tested with SQLServer 2012)
|
||||||
|
|
||||||
Optional:
|
Optional:
|
||||||
* SCM binaries (e.g. svn, git...), for repository browsing (must be available in PATH)
|
* SCM binaries (e.g. svn, git...), for repository browsing (must be available in PATH)
|
||||||
@@ -39,6 +40,12 @@ Optional:
|
|||||||
of the rmagick gem using:
|
of the rmagick gem using:
|
||||||
bundle install --without development test rmagick
|
bundle install --without development test rmagick
|
||||||
|
|
||||||
|
Only the gems that are needed by the adapters you've specified in your database
|
||||||
|
configuration file are actually installed (eg. if your config/database.yml
|
||||||
|
uses the 'mysql2' adapter, then only the mysql2 gem will be installed). Don't
|
||||||
|
forget to re-run `bundle install` when you change config/database.yml for using
|
||||||
|
other database adapters.
|
||||||
|
|
||||||
If you need to load some gems that are not required by Redmine core (eg. fcgi),
|
If you need to load some gems that are not required by Redmine core (eg. fcgi),
|
||||||
you can create a file named Gemfile.local at the root of your redmine directory.
|
you can create a file named Gemfile.local at the root of your redmine directory.
|
||||||
It will be loaded automatically when running `bundle install`.
|
It will be loaded automatically when running `bundle install`.
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
begin
|
begin
|
||||||
require 'zlib'
|
require 'zlib'
|
||||||
@@__have_zlib = true
|
|
||||||
rescue
|
rescue
|
||||||
@@__have_zlib = false
|
# Zlib not available
|
||||||
end
|
end
|
||||||
|
|
||||||
require 'rexml/document'
|
require 'rexml/document'
|
||||||
@@ -211,7 +210,7 @@ module SVG
|
|||||||
@doc.write( data, 0 )
|
@doc.write( data, 0 )
|
||||||
|
|
||||||
if @config[:compress]
|
if @config[:compress]
|
||||||
if @@__have_zlib
|
if Object.const_defined?(:Zlib)
|
||||||
inp, out = IO.pipe
|
inp, out = IO.pipe
|
||||||
gz = Zlib::GzipWriter.new( out )
|
gz = Zlib::GzipWriter.new( out )
|
||||||
gz.write data
|
gz.write data
|
||||||
|
|||||||
@@ -2431,7 +2431,7 @@ class TCPDF
|
|||||||
out('1 0 obj');
|
out('1 0 obj');
|
||||||
out('<</Type /Pages');
|
out('<</Type /Pages');
|
||||||
kids='/Kids [';
|
kids='/Kids [';
|
||||||
0.upto(nb) do |i|
|
0.upto(nb - 1) do |i|
|
||||||
kids<<(3+2*i).to_s + ' 0 R ';
|
kids<<(3+2*i).to_s + ' 0 R ';
|
||||||
end
|
end
|
||||||
out(kids + ']');
|
out(kids + ']');
|
||||||
@@ -3103,7 +3103,7 @@ class TCPDF
|
|||||||
# is a stream object that contains the definition of the CMap
|
# is a stream object that contains the definition of the CMap
|
||||||
# (PDF Reference 1.3 chap. 5.9)
|
# (PDF Reference 1.3 chap. 5.9)
|
||||||
newobj();
|
newobj();
|
||||||
out('<</Length 383>>');
|
out('<</Length 345>>')
|
||||||
out('stream');
|
out('stream');
|
||||||
out('/CIDInit /ProcSet findresource begin');
|
out('/CIDInit /ProcSet findresource begin');
|
||||||
out('12 dict begin');
|
out('12 dict begin');
|
||||||
|
|||||||
+16
-16
@@ -380,7 +380,7 @@ module Redmine
|
|||||||
col_width
|
col_width
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_table_header(pdf, query, col_width, row_height, col_id_width, table_width)
|
def render_table_header(pdf, query, col_width, row_height, table_width)
|
||||||
# headers
|
# headers
|
||||||
pdf.SetFontStyle('B',8)
|
pdf.SetFontStyle('B',8)
|
||||||
pdf.SetFillColor(230, 230, 230)
|
pdf.SetFillColor(230, 230, 230)
|
||||||
@@ -389,13 +389,12 @@ module Redmine
|
|||||||
base_x = pdf.GetX
|
base_x = pdf.GetX
|
||||||
base_y = pdf.GetY
|
base_y = pdf.GetY
|
||||||
max_height = issues_to_pdf_write_cells(pdf, query.inline_columns, col_width, row_height, true)
|
max_height = issues_to_pdf_write_cells(pdf, query.inline_columns, col_width, row_height, true)
|
||||||
pdf.Rect(base_x, base_y, table_width + col_id_width, max_height, 'FD');
|
pdf.Rect(base_x, base_y, table_width, max_height, 'FD');
|
||||||
pdf.SetXY(base_x, base_y);
|
pdf.SetXY(base_x, base_y);
|
||||||
|
|
||||||
# write the cells on page
|
# write the cells on page
|
||||||
pdf.RDMCell(col_id_width, row_height, "#", "T", 0, 'C', 1)
|
|
||||||
issues_to_pdf_write_cells(pdf, query.inline_columns, col_width, row_height, true)
|
issues_to_pdf_write_cells(pdf, query.inline_columns, col_width, row_height, true)
|
||||||
issues_to_pdf_draw_borders(pdf, base_x, base_y, base_y + max_height, col_id_width, col_width)
|
issues_to_pdf_draw_borders(pdf, base_x, base_y, base_y + max_height, 0, col_width)
|
||||||
pdf.SetY(base_y + max_height);
|
pdf.SetY(base_y + max_height);
|
||||||
|
|
||||||
# rows
|
# rows
|
||||||
@@ -417,22 +416,22 @@ module Redmine
|
|||||||
# Landscape A4 = 210 x 297 mm
|
# Landscape A4 = 210 x 297 mm
|
||||||
page_height = 210
|
page_height = 210
|
||||||
page_width = 297
|
page_width = 297
|
||||||
|
left_margin = 10
|
||||||
right_margin = 10
|
right_margin = 10
|
||||||
bottom_margin = 20
|
bottom_margin = 20
|
||||||
col_id_width = 10
|
|
||||||
row_height = 4
|
row_height = 4
|
||||||
|
|
||||||
# column widths
|
# column widths
|
||||||
table_width = page_width - right_margin - 10 # fixed left margin
|
table_width = page_width - right_margin - left_margin
|
||||||
col_width = []
|
col_width = []
|
||||||
unless query.inline_columns.empty?
|
unless query.inline_columns.empty?
|
||||||
col_width = calc_col_width(issues, query, table_width - col_id_width, pdf)
|
col_width = calc_col_width(issues, query, table_width, pdf)
|
||||||
table_width = col_width.inject(0) {|s,v| s += v}
|
table_width = col_width.inject(0) {|s,v| s += v}
|
||||||
end
|
end
|
||||||
|
|
||||||
# use full width if the description is displayed
|
# use full width if the description is displayed
|
||||||
if table_width > 0 && query.has_column?(:description)
|
if table_width > 0 && query.has_column?(:description)
|
||||||
col_width = col_width.map {|w| w = w * (page_width - right_margin - 10 - col_id_width) / table_width}
|
col_width = col_width.map {|w| w * (page_width - right_margin - left_margin) / table_width}
|
||||||
table_width = col_width.inject(0) {|s,v| s += v}
|
table_width = col_width.inject(0) {|s,v| s += v}
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -440,7 +439,7 @@ module Redmine
|
|||||||
pdf.SetFontStyle('B',11)
|
pdf.SetFontStyle('B',11)
|
||||||
pdf.RDMCell(190,10, title)
|
pdf.RDMCell(190,10, title)
|
||||||
pdf.Ln
|
pdf.Ln
|
||||||
render_table_header(pdf, query, col_width, row_height, col_id_width, table_width)
|
render_table_header(pdf, query, col_width, row_height, table_width)
|
||||||
previous_group = false
|
previous_group = false
|
||||||
issue_list(issues) do |issue, level|
|
issue_list(issues) do |issue, level|
|
||||||
if query.grouped? &&
|
if query.grouped? &&
|
||||||
@@ -449,7 +448,7 @@ module Redmine
|
|||||||
group_label = group.blank? ? 'None' : group.to_s.dup
|
group_label = group.blank? ? 'None' : group.to_s.dup
|
||||||
group_label << " (#{query.issue_count_by_group[group]})"
|
group_label << " (#{query.issue_count_by_group[group]})"
|
||||||
pdf.Bookmark group_label, 0, -1
|
pdf.Bookmark group_label, 0, -1
|
||||||
pdf.RDMCell(table_width + col_id_width, row_height * 2, group_label, 1, 1, 'L')
|
pdf.RDMCell(table_width, row_height * 2, group_label, 1, 1, 'L')
|
||||||
pdf.SetFontStyle('',8)
|
pdf.SetFontStyle('',8)
|
||||||
previous_group = group
|
previous_group = group
|
||||||
end
|
end
|
||||||
@@ -468,15 +467,14 @@ module Redmine
|
|||||||
space_left = page_height - base_y - bottom_margin
|
space_left = page_height - base_y - bottom_margin
|
||||||
if max_height > space_left
|
if max_height > space_left
|
||||||
pdf.AddPage("L")
|
pdf.AddPage("L")
|
||||||
render_table_header(pdf, query, col_width, row_height, col_id_width, table_width)
|
render_table_header(pdf, query, col_width, row_height, table_width)
|
||||||
base_x = pdf.GetX
|
base_x = pdf.GetX
|
||||||
base_y = pdf.GetY
|
base_y = pdf.GetY
|
||||||
end
|
end
|
||||||
|
|
||||||
# write the cells on page
|
# write the cells on page
|
||||||
pdf.RDMCell(col_id_width, row_height, issue.id.to_s, "T", 0, 'C', 1)
|
|
||||||
issues_to_pdf_write_cells(pdf, col_values, col_width, row_height)
|
issues_to_pdf_write_cells(pdf, col_values, col_width, row_height)
|
||||||
issues_to_pdf_draw_borders(pdf, base_x, base_y, base_y + max_height, col_id_width, col_width)
|
issues_to_pdf_draw_borders(pdf, base_x, base_y, base_y + max_height, 0, col_width)
|
||||||
pdf.SetY(base_y + max_height);
|
pdf.SetY(base_y + max_height);
|
||||||
|
|
||||||
if query.has_column?(:description) && issue.description?
|
if query.has_column?(:description) && issue.description?
|
||||||
@@ -513,9 +511,11 @@ module Redmine
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Draw lines to close the row (MultiCell border drawing in not uniform)
|
# Draw lines to close the row (MultiCell border drawing in not uniform)
|
||||||
|
#
|
||||||
|
# parameter "col_id_width" is not used. it is kept for compatibility.
|
||||||
def issues_to_pdf_draw_borders(pdf, top_x, top_y, lower_y,
|
def issues_to_pdf_draw_borders(pdf, top_x, top_y, lower_y,
|
||||||
id_width, col_widths)
|
col_id_width, col_widths)
|
||||||
col_x = top_x + id_width
|
col_x = top_x
|
||||||
pdf.Line(col_x, top_y, col_x, lower_y) # id right border
|
pdf.Line(col_x, top_y, col_x, lower_y) # id right border
|
||||||
col_widths.each do |width|
|
col_widths.each do |width|
|
||||||
col_x += width
|
col_x += width
|
||||||
|
|||||||
@@ -675,7 +675,7 @@ module Redmine
|
|||||||
start_date + (end_date - start_date + 1) * (progress / 100.0)
|
start_date + (end_date - start_date + 1) * (progress / 100.0)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Sorts a collection of issues by start_date, due_date, id for gantt rendering
|
# TODO: Sorts a collection of issues by start_date, due_date, id for gantt rendering
|
||||||
def sort_issues!(issues)
|
def sort_issues!(issues)
|
||||||
issues.sort! { |a, b| gantt_issue_compare(a, b) }
|
issues.sort! { |a, b| gantt_issue_compare(a, b) }
|
||||||
end
|
end
|
||||||
|
|||||||
+12
-10
@@ -29,25 +29,27 @@ module Redmine
|
|||||||
imap = Net::IMAP.new(host, port, ssl)
|
imap = Net::IMAP.new(host, port, ssl)
|
||||||
imap.login(imap_options[:username], imap_options[:password]) unless imap_options[:username].nil?
|
imap.login(imap_options[:username], imap_options[:password]) unless imap_options[:username].nil?
|
||||||
imap.select(folder)
|
imap.select(folder)
|
||||||
imap.search(['NOT', 'SEEN']).each do |message_id|
|
imap.uid_search(['NOT', 'SEEN']).each do |uid|
|
||||||
msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822']
|
msg = imap.uid_fetch(uid,'RFC822')[0].attr['RFC822']
|
||||||
logger.debug "Receiving message #{message_id}" if logger && logger.debug?
|
logger.debug "Receiving message #{uid}" if logger && logger.debug?
|
||||||
if MailHandler.receive(msg, options)
|
if MailHandler.receive(msg, options)
|
||||||
logger.debug "Message #{message_id} successfully received" if logger && logger.debug?
|
logger.debug "Message #{uid} successfully received" if logger && logger.debug?
|
||||||
if imap_options[:move_on_success]
|
if imap_options[:move_on_success]
|
||||||
imap.copy(message_id, imap_options[:move_on_success])
|
imap.uid_copy(uid, imap_options[:move_on_success])
|
||||||
end
|
end
|
||||||
imap.store(message_id, "+FLAGS", [:Seen, :Deleted])
|
imap.uid_store(uid, "+FLAGS", [:Seen, :Deleted])
|
||||||
else
|
else
|
||||||
logger.debug "Message #{message_id} can not be processed" if logger && logger.debug?
|
logger.debug "Message #{uid} can not be processed" if logger && logger.debug?
|
||||||
imap.store(message_id, "+FLAGS", [:Seen])
|
imap.uid_store(uid, "+FLAGS", [:Seen])
|
||||||
if imap_options[:move_on_failure]
|
if imap_options[:move_on_failure]
|
||||||
imap.copy(message_id, imap_options[:move_on_failure])
|
imap.uid_copy(uid, imap_options[:move_on_failure])
|
||||||
imap.store(message_id, "+FLAGS", [:Deleted])
|
imap.uid_store(uid, "+FLAGS", [:Deleted])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
imap.expunge
|
imap.expunge
|
||||||
|
imap.logout
|
||||||
|
imap.disconnect
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
+3
-3
@@ -10,16 +10,16 @@ module Redmine
|
|||||||
s = "Environment:\n"
|
s = "Environment:\n"
|
||||||
s << [
|
s << [
|
||||||
["Redmine version", Redmine::VERSION],
|
["Redmine version", Redmine::VERSION],
|
||||||
["Ruby version", "#{RUBY_VERSION} (#{RUBY_PLATFORM})"],
|
["Ruby version", "#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"],
|
||||||
["Rails version", Rails::VERSION::STRING],
|
["Rails version", Rails::VERSION::STRING],
|
||||||
["Environment", Rails.env],
|
["Environment", Rails.env],
|
||||||
["Database adapter", ActiveRecord::Base.connection.adapter_name]
|
["Database adapter", ActiveRecord::Base.connection.adapter_name]
|
||||||
].map {|info| " %-40s %s" % info}.join("\n")
|
].map {|info| " %-30s %s" % info}.join("\n")
|
||||||
s << "\nRedmine plugins:\n"
|
s << "\nRedmine plugins:\n"
|
||||||
|
|
||||||
plugins = Redmine::Plugin.all
|
plugins = Redmine::Plugin.all
|
||||||
if plugins.any?
|
if plugins.any?
|
||||||
s << plugins.map {|plugin| " %-40s %s" % [plugin.id.to_s, plugin.version.to_s]}.join("\n")
|
s << plugins.map {|plugin| " %-30s %s" % [plugin.id.to_s, plugin.version.to_s]}.join("\n")
|
||||||
else
|
else
|
||||||
s << " no plugin installed"
|
s << " no plugin installed"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -219,18 +219,39 @@ module Redmine
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Path to the file where scm stderr output is logged
|
# Path to the file where scm stderr output is logged
|
||||||
|
# Returns nil if the log file is not writable
|
||||||
def self.stderr_log_file
|
def self.stderr_log_file
|
||||||
@stderr_log_path ||=
|
if @stderr_log_file.nil?
|
||||||
Redmine::Configuration['scm_stderr_log_file'].presence ||
|
writable = false
|
||||||
Rails.root.join("log/#{Rails.env}.scm.stderr.log").to_s
|
path = Redmine::Configuration['scm_stderr_log_file'].presence
|
||||||
|
path ||= Rails.root.join("log/#{Rails.env}.scm.stderr.log").to_s
|
||||||
|
if File.exists?(path)
|
||||||
|
if File.file?(path) && File.writable?(path)
|
||||||
|
writable = true
|
||||||
|
else
|
||||||
|
logger.warn("SCM log file (#{path}) is not writable")
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
File.open(path, "w") {}
|
||||||
|
writable = true
|
||||||
|
rescue => e
|
||||||
|
logger.warn("SCM log file (#{path}) cannot be created: #{e.message}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@stderr_log_file = writable ? path : false
|
||||||
|
end
|
||||||
|
@stderr_log_file || nil
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.shellout(cmd, options = {}, &block)
|
def self.shellout(cmd, options = {}, &block)
|
||||||
if logger && logger.debug?
|
if logger && logger.debug?
|
||||||
logger.debug "Shelling out: #{strip_credential(cmd)}"
|
logger.debug "Shelling out: #{strip_credential(cmd)}"
|
||||||
|
# Capture stderr in a log file
|
||||||
|
if stderr_log_file
|
||||||
|
cmd = "#{cmd} 2>>#{shell_quote(stderr_log_file)}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
# Capture stderr in a log file
|
|
||||||
cmd = "#{cmd} 2>>#{shell_quote(stderr_log_file)}"
|
|
||||||
begin
|
begin
|
||||||
mode = "r+"
|
mode = "r+"
|
||||||
IO.popen(cmd, mode) do |io|
|
IO.popen(cmd, mode) do |io|
|
||||||
|
|||||||
@@ -335,7 +335,7 @@ module Redmine
|
|||||||
# :pserver:anonymous@foo.bar:/path => /path
|
# :pserver:anonymous@foo.bar:/path => /path
|
||||||
# :ext:cvsservername:/path => /path
|
# :ext:cvsservername:/path => /path
|
||||||
def root_url_path
|
def root_url_path
|
||||||
root_url.to_s.gsub(/^:.+:\d*/, '')
|
root_url.to_s.gsub(%r{^:.+?(?=/)}, '')
|
||||||
end
|
end
|
||||||
|
|
||||||
# convert a date/time into the CVS-format
|
# convert a date/time into the CVS-format
|
||||||
|
|||||||
@@ -333,7 +333,7 @@ module Redmine
|
|||||||
|
|
||||||
def annotate(path, identifier=nil)
|
def annotate(path, identifier=nil)
|
||||||
identifier = 'HEAD' if identifier.blank?
|
identifier = 'HEAD' if identifier.blank?
|
||||||
cmd_args = %w|blame|
|
cmd_args = %w|blame --encoding=UTF-8|
|
||||||
cmd_args << "-p" << identifier << "--" << scm_iconv(@path_encoding, 'UTF-8', path)
|
cmd_args << "-p" << identifier << "--" << scm_iconv(@path_encoding, 'UTF-8', path)
|
||||||
blame = Annotate.new
|
blame = Annotate.new
|
||||||
content = nil
|
content = nil
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ module Redmine
|
|||||||
|
|
||||||
module CodeRay
|
module CodeRay
|
||||||
require 'coderay'
|
require 'coderay'
|
||||||
require 'coderay/helpers/file_type'
|
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
# Highlights +text+ as the content of +filename+
|
# Highlights +text+ as the content of +filename+
|
||||||
|
|||||||
@@ -199,15 +199,27 @@ module Redmine
|
|||||||
while starting < max && line_left[starting] == line_right[starting]
|
while starting < max && line_left[starting] == line_right[starting]
|
||||||
starting += 1
|
starting += 1
|
||||||
end
|
end
|
||||||
while line_left[starting].ord.between?(128, 191) && starting > 0
|
if (! "".respond_to?(:force_encoding)) && starting < line_left.size
|
||||||
starting -= 1
|
while line_left[starting].ord.between?(128, 191) && starting > 0
|
||||||
|
starting -= 1
|
||||||
|
end
|
||||||
end
|
end
|
||||||
ending = -1
|
ending = -1
|
||||||
while ending >= -(max - starting) && line_left[ending] == line_right[ending]
|
while ending >= -(max - starting) && (line_left[ending] == line_right[ending])
|
||||||
ending -= 1
|
ending -= 1
|
||||||
end
|
end
|
||||||
while line_left[ending].ord.between?(128, 191) && ending > -1
|
if (! "".respond_to?(:force_encoding)) && ending > (-1 * line_left.size)
|
||||||
ending -= 1
|
while line_left[ending].ord.between?(128, 255) && ending < -1
|
||||||
|
if line_left[ending].ord.between?(128, 191)
|
||||||
|
if line_left[ending + 1].ord.between?(128, 191)
|
||||||
|
ending += 1
|
||||||
|
else
|
||||||
|
break
|
||||||
|
end
|
||||||
|
else
|
||||||
|
ending += 1
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
unless starting == 0 && ending == -1
|
unless starting == 0 && ending == -1
|
||||||
[starting, ending]
|
[starting, ending]
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ module Redmine
|
|||||||
module VERSION #:nodoc:
|
module VERSION #:nodoc:
|
||||||
MAJOR = 2
|
MAJOR = 2
|
||||||
MINOR = 3
|
MINOR = 3
|
||||||
TINY = 0
|
TINY = 3
|
||||||
|
|
||||||
# Branch values:
|
# Branch values:
|
||||||
# * official release: nil
|
# * official release: nil
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ General options:
|
|||||||
create: create a user account
|
create: create a user account
|
||||||
no_permission_check=1 disable permission checking when receiving
|
no_permission_check=1 disable permission checking when receiving
|
||||||
the email
|
the email
|
||||||
|
no_account_notice=1 disable new user account notification
|
||||||
|
default_group=foo,bar adds created user to foo and bar groups
|
||||||
|
|
||||||
Issue attributes control options:
|
Issue attributes control options:
|
||||||
project=PROJECT identifier of the target project
|
project=PROJECT identifier of the target project
|
||||||
@@ -58,6 +60,8 @@ END_DESC
|
|||||||
options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
|
options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
|
||||||
options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user']
|
options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user']
|
||||||
options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check']
|
options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check']
|
||||||
|
options[:no_account_notice] = ENV['no_account_notice'] if ENV['no_account_notice']
|
||||||
|
options[:default_group] = ENV['default_group'] if ENV['default_group']
|
||||||
|
|
||||||
MailHandler.receive(STDIN.read, options)
|
MailHandler.receive(STDIN.read, options)
|
||||||
end
|
end
|
||||||
@@ -73,6 +77,8 @@ General options:
|
|||||||
create: create a user account
|
create: create a user account
|
||||||
no_permission_check=1 disable permission checking when receiving
|
no_permission_check=1 disable permission checking when receiving
|
||||||
the email
|
the email
|
||||||
|
no_account_notice=1 disable new user account notification
|
||||||
|
default_group=foo,bar adds created user to foo and bar groups
|
||||||
|
|
||||||
Available IMAP options:
|
Available IMAP options:
|
||||||
host=HOST IMAP server host (default: 127.0.0.1)
|
host=HOST IMAP server host (default: 127.0.0.1)
|
||||||
@@ -129,6 +135,8 @@ END_DESC
|
|||||||
options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
|
options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
|
||||||
options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user']
|
options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user']
|
||||||
options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check']
|
options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check']
|
||||||
|
options[:no_account_notice] = ENV['no_account_notice'] if ENV['no_account_notice']
|
||||||
|
options[:default_group] = ENV['default_group'] if ENV['default_group']
|
||||||
|
|
||||||
Redmine::IMAP.check(imap_options, options)
|
Redmine::IMAP.check(imap_options, options)
|
||||||
end
|
end
|
||||||
@@ -162,6 +170,8 @@ END_DESC
|
|||||||
options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
|
options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
|
||||||
options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user']
|
options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user']
|
||||||
options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check']
|
options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check']
|
||||||
|
options[:no_account_notice] = ENV['no_account_notice'] if ENV['no_account_notice']
|
||||||
|
options[:default_group] = ENV['default_group'] if ENV['default_group']
|
||||||
|
|
||||||
Redmine::POP3.check(pop_options, options)
|
Redmine::POP3.check(pop_options, options)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ desc 'Load Redmine default configuration data. Language is chosen interactively
|
|||||||
|
|
||||||
namespace :redmine do
|
namespace :redmine do
|
||||||
task :load_default_data => :environment do
|
task :load_default_data => :environment do
|
||||||
|
require 'custom_field'
|
||||||
include Redmine::I18n
|
include Redmine::I18n
|
||||||
set_language_if_valid('en')
|
set_language_if_valid('en')
|
||||||
|
|
||||||
|
|||||||
@@ -503,10 +503,20 @@ task :migrate_from_mantis => :environment do
|
|||||||
# Make sure bugs can refer bugs in other projects
|
# Make sure bugs can refer bugs in other projects
|
||||||
Setting.cross_project_issue_relations = 1 if Setting.respond_to? 'cross_project_issue_relations'
|
Setting.cross_project_issue_relations = 1 if Setting.respond_to? 'cross_project_issue_relations'
|
||||||
|
|
||||||
# Turn off email notifications
|
old_notified_events = Setting.notified_events
|
||||||
Setting.notified_events = []
|
old_password_min_length = Setting.password_min_length
|
||||||
|
begin
|
||||||
|
# Turn off email notifications temporarily
|
||||||
|
Setting.notified_events = []
|
||||||
|
Setting.password_min_length = 4
|
||||||
|
# Run the migration
|
||||||
|
MantisMigrate.establish_connection db_params
|
||||||
|
MantisMigrate.migrate
|
||||||
|
ensure
|
||||||
|
# Restore previous settings
|
||||||
|
Setting.notified_events = old_notified_events
|
||||||
|
Setting.password_min_length = old_password_min_length
|
||||||
|
end
|
||||||
|
|
||||||
MantisMigrate.establish_connection db_params
|
|
||||||
MantisMigrate.migrate
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -245,8 +245,8 @@ namespace :redmine do
|
|||||||
if name_attr = TracSessionAttribute.find_by_sid_and_name(username, 'name')
|
if name_attr = TracSessionAttribute.find_by_sid_and_name(username, 'name')
|
||||||
name = name_attr.value
|
name = name_attr.value
|
||||||
end
|
end
|
||||||
name =~ (/(.*)(\s+\w+)?/)
|
name =~ (/(\w+)(\s+\w+)?/)
|
||||||
fn = $1.strip
|
fn = ($1 || "-").strip
|
||||||
ln = ($2 || '-').strip
|
ln = ($2 || '-').strip
|
||||||
|
|
||||||
u = User.new :mail => mail.gsub(/[^-@a-z0-9\.]/i, '-'),
|
u = User.new :mail => mail.gsub(/[^-@a-z0-9\.]/i, '-'),
|
||||||
@@ -762,10 +762,19 @@ namespace :redmine do
|
|||||||
prompt('Target project identifier') {|identifier| TracMigrate.target_project_identifier identifier}
|
prompt('Target project identifier') {|identifier| TracMigrate.target_project_identifier identifier}
|
||||||
puts
|
puts
|
||||||
|
|
||||||
# Turn off email notifications
|
old_notified_events = Setting.notified_events
|
||||||
Setting.notified_events = []
|
old_password_min_length = Setting.password_min_length
|
||||||
|
begin
|
||||||
TracMigrate.migrate
|
# Turn off email notifications temporarily
|
||||||
|
Setting.notified_events = []
|
||||||
|
Setting.password_min_length = 4
|
||||||
|
# Run the migration
|
||||||
|
TracMigrate.migrate
|
||||||
|
ensure
|
||||||
|
# Restore previous settings
|
||||||
|
Setting.notified_events = old_notified_events
|
||||||
|
Setting.password_min_length = old_password_min_length
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -14,12 +14,12 @@ function toggleCheckboxesBySelector(selector) {
|
|||||||
$(selector).each(function(index) {
|
$(selector).each(function(index) {
|
||||||
if (!$(this).is(':checked')) { all_checked = false; }
|
if (!$(this).is(':checked')) { all_checked = false; }
|
||||||
});
|
});
|
||||||
$(selector).attr('checked', !all_checked)
|
$(selector).attr('checked', !all_checked);
|
||||||
}
|
}
|
||||||
|
|
||||||
function showAndScrollTo(id, focus) {
|
function showAndScrollTo(id, focus) {
|
||||||
$('#'+id).show();
|
$('#'+id).show();
|
||||||
if (focus!=null) {
|
if (focus !== null) {
|
||||||
$('#'+focus).focus();
|
$('#'+focus).focus();
|
||||||
}
|
}
|
||||||
$('html, body').animate({scrollTop: $('#'+id).offset().top}, 100);
|
$('html, body').animate({scrollTop: $('#'+id).offset().top}, 100);
|
||||||
@@ -131,10 +131,10 @@ function buildFilterRow(field, operator, values) {
|
|||||||
select = tr.find('td.operator select');
|
select = tr.find('td.operator select');
|
||||||
for (i=0;i<operators.length;i++){
|
for (i=0;i<operators.length;i++){
|
||||||
var option = $('<option>').val(operators[i]).text(operatorLabels[operators[i]]);
|
var option = $('<option>').val(operators[i]).text(operatorLabels[operators[i]]);
|
||||||
if (operators[i] == operator) {option.attr('selected', true)};
|
if (operators[i] == operator) { option.attr('selected', true); }
|
||||||
select.append(option);
|
select.append(option);
|
||||||
}
|
}
|
||||||
select.change(function(){toggleOperator(field)});
|
select.change(function(){ toggleOperator(field); });
|
||||||
|
|
||||||
switch (filterOptions['type']){
|
switch (filterOptions['type']){
|
||||||
case "list":
|
case "list":
|
||||||
@@ -146,7 +146,7 @@ function buildFilterRow(field, operator, values) {
|
|||||||
' <span class="toggle-multiselect"> </span></span>'
|
' <span class="toggle-multiselect"> </span></span>'
|
||||||
);
|
);
|
||||||
select = tr.find('td.values select');
|
select = tr.find('td.values select');
|
||||||
if (values.length > 1) {select.attr('multiple', true)};
|
if (values.length > 1) { select.attr('multiple', true); }
|
||||||
for (i=0;i<filterValues.length;i++){
|
for (i=0;i<filterValues.length;i++){
|
||||||
var filterValue = filterValues[i];
|
var filterValue = filterValues[i];
|
||||||
var option = $('<option>');
|
var option = $('<option>');
|
||||||
@@ -189,7 +189,7 @@ function buildFilterRow(field, operator, values) {
|
|||||||
var filterValue = allProjects[i];
|
var filterValue = allProjects[i];
|
||||||
var option = $('<option>');
|
var option = $('<option>');
|
||||||
option.val(filterValue[1]).text(filterValue[0]);
|
option.val(filterValue[1]).text(filterValue[0]);
|
||||||
if (values[0] == filterValue[1]) {option.attr('selected', true)};
|
if (values[0] == filterValue[1]) { option.attr('selected', true); }
|
||||||
select.append(option);
|
select.append(option);
|
||||||
}
|
}
|
||||||
case "integer":
|
case "integer":
|
||||||
@@ -352,7 +352,7 @@ function setPredecessorFieldsVisibility() {
|
|||||||
|
|
||||||
function showModal(id, width) {
|
function showModal(id, width) {
|
||||||
var el = $('#'+id).first();
|
var el = $('#'+id).first();
|
||||||
if (el.length == 0 || el.is(':visible')) {return;}
|
if (el.length === 0 || el.is(':visible')) {return;}
|
||||||
var title = el.find('h3.title').text();
|
var title = el.find('h3.title').text();
|
||||||
el.dialog({
|
el.dialog({
|
||||||
width: width,
|
width: width,
|
||||||
@@ -462,7 +462,7 @@ function observeAutocompleteField(fieldId, url, options) {
|
|||||||
source: url,
|
source: url,
|
||||||
minLength: 2,
|
minLength: 2,
|
||||||
search: function(){$('#'+fieldId).addClass('ajax-loading');},
|
search: function(){$('#'+fieldId).addClass('ajax-loading');},
|
||||||
response: function(){$('#'+fieldId).removeClass('ajax-loading');},
|
response: function(){$('#'+fieldId).removeClass('ajax-loading');}
|
||||||
}, options));
|
}, options));
|
||||||
$('#'+fieldId).addClass('autocomplete');
|
$('#'+fieldId).addClass('autocomplete');
|
||||||
});
|
});
|
||||||
@@ -546,13 +546,13 @@ function warnLeavingUnsaved(message) {
|
|||||||
});
|
});
|
||||||
if (warn) {return warnLeavingUnsavedMessage;}
|
if (warn) {return warnLeavingUnsavedMessage;}
|
||||||
};
|
};
|
||||||
};
|
}
|
||||||
|
|
||||||
function setupAjaxIndicator() {
|
function setupAjaxIndicator() {
|
||||||
|
|
||||||
$('#ajax-indicator').bind('ajaxSend', function(event, xhr, settings) {
|
$('#ajax-indicator').bind('ajaxSend', function(event, xhr, settings) {
|
||||||
|
|
||||||
if ($('.ajax-loading').length == 0 && settings.contentType != 'application/octet-stream') {
|
if ($('.ajax-loading').length === 0 && settings.contentType != 'application/octet-stream') {
|
||||||
$('#ajax-indicator').show();
|
$('#ajax-indicator').show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ function contextMenuCheckSelectionBox(tr, checked) {
|
|||||||
function contextMenuClearDocumentSelection() {
|
function contextMenuClearDocumentSelection() {
|
||||||
// TODO
|
// TODO
|
||||||
if (document.selection) {
|
if (document.selection) {
|
||||||
document.selection.clear(); // IE
|
document.selection.empty(); // IE
|
||||||
} else {
|
} else {
|
||||||
window.getSelection().removeAllRanges();
|
window.getSelection().removeAllRanges();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ function drawRelations() {
|
|||||||
.attr({stroke: "none",
|
.attr({stroke: "none",
|
||||||
fill: color,
|
fill: color,
|
||||||
"stroke-linecap": "butt",
|
"stroke-linecap": "butt",
|
||||||
"stroke-linejoin": "miter",
|
"stroke-linejoin": "miter"
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
/* Portuguese initialisation for the jQuery UI date picker plugin. */
|
||||||
|
jQuery(function($){
|
||||||
|
$.datepicker.regional['pt'] = {
|
||||||
|
closeText: 'Fechar',
|
||||||
|
prevText: '<Anterior',
|
||||||
|
nextText: 'Seguinte',
|
||||||
|
currentText: 'Hoje',
|
||||||
|
monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
|
||||||
|
'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
|
||||||
|
monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
|
||||||
|
'Jul','Ago','Set','Out','Nov','Dez'],
|
||||||
|
dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
|
||||||
|
dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
|
||||||
|
dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
|
||||||
|
weekHeader: 'Sem',
|
||||||
|
dateFormat: 'dd/mm/yy',
|
||||||
|
firstDay: 0,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ''};
|
||||||
|
$.datepicker.setDefaults($.datepicker.regional['pt']);
|
||||||
|
});
|
||||||
@@ -9,8 +9,8 @@ jsToolBar.strings['Heading 2'] = 'Heading 2';
|
|||||||
jsToolBar.strings['Heading 3'] = 'Heading 3';
|
jsToolBar.strings['Heading 3'] = 'Heading 3';
|
||||||
jsToolBar.strings['Unordered list'] = 'Nenumeruotas sąrašas';
|
jsToolBar.strings['Unordered list'] = 'Nenumeruotas sąrašas';
|
||||||
jsToolBar.strings['Ordered list'] = 'Numeruotas sąrašas';
|
jsToolBar.strings['Ordered list'] = 'Numeruotas sąrašas';
|
||||||
jsToolBar.strings['Quote'] = 'Quote';
|
jsToolBar.strings['Quote'] = 'Cituoti';
|
||||||
jsToolBar.strings['Unquote'] = 'Remove Quote';
|
jsToolBar.strings['Unquote'] = 'Pašalinti citavimą';
|
||||||
jsToolBar.strings['Preformatted text'] = 'Preformatuotas tekstas';
|
jsToolBar.strings['Preformatted text'] = 'Preformatuotas tekstas';
|
||||||
jsToolBar.strings['Wiki link'] = 'Nuoroda į Wiki puslapį';
|
jsToolBar.strings['Wiki link'] = 'Nuoroda į Wiki puslapį';
|
||||||
jsToolBar.strings['Image'] = 'Paveikslas';
|
jsToolBar.strings['Image'] = 'Paveikslas';
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ function drawRevisionGraph(holder, commits_hash, graph_space) {
|
|||||||
revisionGraph.circle(x, y, 3)
|
revisionGraph.circle(x, y, 3)
|
||||||
.attr({
|
.attr({
|
||||||
fill: colors[commit.space],
|
fill: colors[commit.space],
|
||||||
stroke: 'none',
|
stroke: 'none'
|
||||||
}).toFront();
|
}).toFront();
|
||||||
// paths to parents
|
// paths to parents
|
||||||
$.each(commit.parent_scmids, function(index, parent_scmid) {
|
$.each(commit.parent_scmids, function(index, parent_scmid) {
|
||||||
|
|||||||
@@ -575,7 +575,7 @@ table.members td.group { padding-left: 20px; background: url(../images/group.png
|
|||||||
input#principal_search, input#user_search {width:90%}
|
input#principal_search, input#user_search {width:90%}
|
||||||
|
|
||||||
input.autocomplete {
|
input.autocomplete {
|
||||||
background: #fff url(../images/magnifier.png) no-repeat 2px 50%; padding-left:20px;
|
background: #fff url(../images/magnifier.png) no-repeat 2px 50%; padding-left:20px !important;
|
||||||
border:1px solid #9EB1C2; border-radius:2px; height:1.5em;
|
border:1px solid #9EB1C2; border-radius:2px; height:1.5em;
|
||||||
}
|
}
|
||||||
input.autocomplete.ajax-loading {
|
input.autocomplete.ajax-loading {
|
||||||
|
|||||||
Vendored
+2
-1
@@ -3,8 +3,9 @@ changesets_001:
|
|||||||
commit_date: 2007-04-11
|
commit_date: 2007-04-11
|
||||||
committed_on: 2007-04-11 15:14:44 +02:00
|
committed_on: 2007-04-11 15:14:44 +02:00
|
||||||
revision: 1
|
revision: 1
|
||||||
|
scmid: 691322a8eb01e11fd7
|
||||||
id: 100
|
id: 100
|
||||||
comments: My very first commit
|
comments: 'My very first commit do not escaping #<>&'
|
||||||
repository_id: 10
|
repository_id: 10
|
||||||
committer: dlopper
|
committer: dlopper
|
||||||
user_id: 3
|
user_id: 3
|
||||||
|
|||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
--- a.txt 2013-04-05 14:19:39.000000000 +0900
|
||||||
|
+++ b.txt 2013-04-05 14:19:51.000000000 +0900
|
||||||
|
@@ -1,3 +1,3 @@
|
||||||
|
aaaa
|
||||||
|
-日本
|
||||||
|
+日本語
|
||||||
|
bbbb
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
--- a.txt 2013-04-05 14:19:39.000000000 +0900
|
||||||
|
+++ b.txt 2013-04-05 14:19:51.000000000 +0900
|
||||||
|
@@ -1,3 +1,3 @@
|
||||||
|
aaaa
|
||||||
|
-日本
|
||||||
|
+にっぽん日本
|
||||||
|
bbbb
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user