Merge remote-tracking branch 'origin/feature/2.4.0/accessibility-master' into feature/2.4.0/accessibility-master

pull/41/head
jwollert 13 years ago
commit 3194ed8162
  1. 18
      app/controllers/account_controller.rb
  2. 15
      app/controllers/admin_controller.rb
  3. 37
      app/controllers/application_controller.rb
  4. 4
      app/controllers/auth_sources_controller.rb
  5. 4
      app/controllers/enumerations_controller.rb
  6. 20
      app/controllers/issues_controller.rb
  7. 2
      app/controllers/messages_controller.rb
  8. 4
      app/controllers/my_controller.rb
  9. 2
      app/controllers/news_controller.rb
  10. 6
      app/controllers/reports_controller.rb
  11. 4
      app/controllers/settings_controller.rb
  12. 2
      app/controllers/watchers_controller.rb
  13. 135
      app/helpers/application_helper.rb
  14. 15
      app/helpers/journals_helper.rb
  15. 7
      app/helpers/projects_helper.rb
  16. 20
      app/models/issue.rb
  17. 2
      app/models/issue_status.rb
  18. 4
      app/models/journal.rb
  19. 6
      app/models/setting.rb
  20. 101
      app/models/user.rb
  21. 3
      app/views/account/login.rhtml
  22. 2
      app/views/account/lost_password.rhtml
  23. 2
      app/views/account/password_recovery.rhtml
  24. 2
      app/views/account/register.rhtml
  25. 14
      app/views/activities/index.html.erb
  26. 5
      app/views/admin/index.rhtml
  27. 4
      app/views/admin/projects.rhtml
  28. 18
      app/views/attachments/_form.rhtml
  29. 2
      app/views/boards/show.rhtml
  30. 20
      app/views/common/_calendar.rhtml
  31. 26
      app/views/issues/_action_menu.rhtml
  32. 5
      app/views/issues/_form.rhtml
  33. 36
      app/views/issues/_subissue_row.rhtml
  34. 27
      app/views/issues/_subissues_paragraph.rhtml
  35. 18
      app/views/issues/index.rhtml
  36. 60
      app/views/issues/show.rhtml
  37. 2
      app/views/layouts/admin.rhtml
  38. 58
      app/views/layouts/base.rhtml
  39. 6
      app/views/messages/show.rhtml
  40. 2
      app/views/my/_block.rhtml
  41. 3
      app/views/my/account.rhtml
  42. 2
      app/views/my/first_login.rhtml
  43. 1
      app/views/my/page.rhtml
  44. 17
      app/views/news/_news.rhtml
  45. 24
      app/views/news/index.rhtml
  46. 2
      app/views/news/show.rhtml
  47. 1
      app/views/projects/settings.rhtml
  48. 2
      app/views/projects/settings/_boards.rhtml
  49. 1
      app/views/projects/show.rhtml
  50. 4
      app/views/queries/_columns.rhtml
  51. 4
      app/views/reports/issue_report.rhtml
  52. 2
      app/views/reports/issue_report_details.rhtml
  53. 2
      app/views/users/_form.rhtml
  54. 7
      app/views/users/_impaired_settings.rhtml
  55. 1
      app/views/users/show.rhtml
  56. 2
      app/views/versions/index.html.erb
  57. 12
      app/views/watchers/_watchers.rhtml
  58. 8
      app/views/welcome/index.rhtml
  59. 2
      app/views/wiki/_content.rhtml
  60. 6
      app/views/wiki/_sidebar.rhtml
  61. 29
      app/views/wiki/show.rhtml
  62. 25
      config/locales/bg.yml
  63. 25
      config/locales/bs.yml
  64. 25
      config/locales/ca.yml
  65. 25
      config/locales/cs.yml
  66. 25
      config/locales/da.yml
  67. 30
      config/locales/de.yml
  68. 25
      config/locales/el.yml
  69. 32
      config/locales/en-GB.yml
  70. 25
      config/locales/en.yml
  71. 25
      config/locales/es.yml
  72. 25
      config/locales/eu.yml
  73. 25
      config/locales/fa.yml
  74. 25
      config/locales/fi.yml
  75. 25
      config/locales/fr.yml
  76. 25
      config/locales/gl.yml
  77. 25
      config/locales/he.yml
  78. 25
      config/locales/hr.yml
  79. 25
      config/locales/hu.yml
  80. 25
      config/locales/id.yml
  81. 25
      config/locales/it.yml
  82. 25
      config/locales/ja.yml
  83. 25
      config/locales/ko.yml
  84. 25
      config/locales/lt.yml
  85. 25
      config/locales/lv.yml
  86. 25
      config/locales/mk.yml
  87. 25
      config/locales/mn.yml
  88. 25
      config/locales/nl.yml
  89. 25
      config/locales/no.yml
  90. 25
      config/locales/pl.yml
  91. 25
      config/locales/pt-BR.yml
  92. 25
      config/locales/pt.yml
  93. 25
      config/locales/ro.yml
  94. 25
      config/locales/ru.yml
  95. 25
      config/locales/sk.yml
  96. 25
      config/locales/sl.yml
  97. 25
      config/locales/sr-YU.yml
  98. 25
      config/locales/sr.yml
  99. 25
      config/locales/sv.yml
  100. 25
      config/locales/th.yml
  101. Some files were not shown because too many files have changed in this diff Show More

@ -20,9 +20,9 @@ class AccountController < ApplicationController
# Login request and validation # Login request and validation
def login def login
if request.get? if User.current.logged?
logout_user redirect_to home_url
else elsif request.post?
authenticate_user authenticate_user
end end
end end
@ -143,7 +143,12 @@ class AccountController < ApplicationController
user = User.try_to_login(params[:username], params[:password]) user = User.try_to_login(params[:username], params[:password])
if user.nil? if user.nil?
invalid_credentials u = User.find_by_login(params[:username])
if u && !u.active? && u.check_password?(params[:password])
inactive_account
else
invalid_credentials
end
elsif user.new_record? elsif user.new_record?
onthefly_creation_failed(user, {:login => user.login, :auth_source_id => user.auth_source_id }) onthefly_creation_failed(user, {:login => user.login, :auth_source_id => user.auth_source_id })
else else
@ -237,6 +242,11 @@ class AccountController < ApplicationController
flash.now[:error] = l(:notice_account_invalid_creditentials) flash.now[:error] = l(:notice_account_invalid_creditentials)
end end
def inactive_account
logger.warn "Failed login for '#{params[:username]}' from #{request.remote_ip} at #{Time.now.utc} (INACTIVE)"
flash.now[:error] = l(:notice_account_inactive)
end
# Register a user for email activation. # Register a user for email activation.
# #
# Pass a block for behavior when a user fails to save # Pass a block for behavior when a user fails to save

@ -24,10 +24,12 @@ class AdminController < ApplicationController
menu_item :info, :only => [:info] menu_item :info, :only => [:info]
def index def index
@no_configuration_data = Redmine::DefaultData::Loader::no_data? redirect_to :action => 'projects'
end end
def projects def projects
@no_configuration_data = Redmine::DefaultData::Loader::no_data?
@status = params[:status] ? params[:status].to_i : 1 @status = params[:status] ? params[:status].to_i : 1
c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status]) c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])
@ -83,4 +85,15 @@ class AdminController < ApplicationController
[:text_rmagick_available, Object.const_defined?(:Magick)] [:text_rmagick_available, Object.const_defined?(:Magick)]
] ]
end end
def default_breadcrumb
case params[:action]
when 'projects'
l(:label_project_plural)
when 'plugins'
l(:label_plugins)
when 'info'
l(:label_information)
end
end
end end

@ -307,6 +307,34 @@ class ApplicationController < ActionController::Base
return false return false
end end
def render_500(options={})
message = t(:notice_internal_server_error, :app_title => Setting.app_title)
if $!.is_a?(ActionView::ActionViewError)
@template.instance_variable_set("@project", nil)
@template.instance_variable_set("@status", 500)
@template.instance_variable_set("@message", message)
else
@project = nil
end
render_error({:message => message}.merge(options))
return false
end
def render_optional_error_file(status_code)
user_setup unless User.current.id == session[:user_id]
case status_code
when :not_found
render_404
when :internal_server_error
render_500
else
super
end
end
# Renders an error response # Renders an error response
def render_error(arg) def render_error(arg)
arg = {:message => arg} unless arg.is_a?(Hash) arg = {:message => arg} unless arg.is_a?(Hash)
@ -502,4 +530,13 @@ class ApplicationController < ActionController::Base
def pick_layout(*args) def pick_layout(*args)
api_request? ? nil : super api_request? ? nil : super
end end
def default_breadcrumb
name = l("label_" + self.class.name.gsub("Controller", "").underscore.singularize + "_plural")
if name =~ /translation missing/i
name = l("label_" + self.class.name.gsub("Controller", "").underscore.singularize)
end
name
end
helper_method :default_breadcrumb
end end

@ -81,4 +81,8 @@ class AuthSourcesController < ApplicationController
def auth_source_class def auth_source_class
AuthSource AuthSource
end end
def default_breadcrumb
l(:label_auth_source_plural)
end
end end

@ -84,4 +84,8 @@ class EnumerationsController < ApplicationController
# flash[:error] = 'Unable to delete enumeration' # flash[:error] = 'Unable to delete enumeration'
# redirect_to :action => 'index' # redirect_to :action => 'index'
end end
def default_breadcrumb
l(:label_enumerations)
end
end end

@ -13,6 +13,8 @@
#++ #++
class IssuesController < ApplicationController class IssuesController < ApplicationController
EXPORT_FORMATS = %w[atom rss api xls csv pdf]
menu_item :new_issue, :only => [:new, :create] menu_item :new_issue, :only => [:new, :create]
menu_item :view_all_issues, :only => [:all] menu_item :view_all_issues, :only => [:all]
default_search_scope :issues default_search_scope :issues
@ -22,6 +24,7 @@ class IssuesController < ApplicationController
before_filter :check_project_uniqueness, :only => [:move, :perform_move] before_filter :check_project_uniqueness, :only => [:move, :perform_move]
before_filter :find_project, :only => [:new, :create] before_filter :find_project, :only => [:new, :create]
before_filter :authorize, :except => [:index, :all] before_filter :authorize, :except => [:index, :all]
before_filter :protect_from_unauthorized_export, :only => [:index, :all]
before_filter :find_optional_project, :only => [:index, :all] before_filter :find_optional_project, :only => [:index, :all]
before_filter :check_for_default_issue_status, :only => [:new, :create] before_filter :check_for_default_issue_status, :only => [:new, :create]
before_filter :build_new_issue_from_params, :only => [:new, :create] before_filter :build_new_issue_from_params, :only => [:new, :create]
@ -52,7 +55,7 @@ class IssuesController < ApplicationController
verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
def index def index
sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria) sort_init(@query.sort_criteria.empty? ? [['parent', 'desc']] : @query.sort_criteria)
sort_update(@query.sortable_columns) sort_update(@query.sortable_columns)
if @query.valid? if @query.valid?
@ -93,11 +96,12 @@ class IssuesController < ApplicationController
def all def all
params[:set_filter] = '1' params[:set_filter] = '1'
retrieve_query
index index
end end
def show def show
@journals = @issue.journals.find(:all, :include => [:user], :order => "#{Journal.table_name}.created_at ASC") @journals = @issue.journals.changing.find(:all, :include => [:user], :order => "#{Journal.table_name}.created_at ASC")
@journals.reverse! if User.current.wants_comments_in_reverse_order? @journals.reverse! if User.current.wants_comments_in_reverse_order?
@changesets = @issue.changesets.visible.all @changesets = @issue.changesets.visible.all
@changesets.reverse! if User.current.wants_comments_in_reverse_order? @changesets.reverse! if User.current.wants_comments_in_reverse_order?
@ -319,4 +323,16 @@ private
attributes[:custom_field_values].reject! {|k,v| v.blank?} if attributes[:custom_field_values] attributes[:custom_field_values].reject! {|k,v| v.blank?} if attributes[:custom_field_values]
attributes attributes
end end
def protect_from_unauthorized_export
return true unless EXPORT_FORMATS.include? params[:format]
find_optional_project
return true if User.current.allowed_to? :export_issues, @project
# otherwise deny access
params[:format] = 'html'
deny_access
return false
end
end end

@ -110,7 +110,7 @@ class MessagesController < ApplicationController
content = "#{ll(Setting.default_language, :text_user_wrote, user)}\\n> " content = "#{ll(Setting.default_language, :text_user_wrote, user)}\\n> "
content << text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]').gsub('"', '\"').gsub(/(\r?\n|\r\n?)/, "\\n> ") + "\\n\\n" content << text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]').gsub('"', '\"').gsub(/(\r?\n|\r\n?)/, "\\n> ") + "\\n\\n"
render(:update) { |page| render(:update) { |page|
page << "$('reply_subject').value = \"#{subject}\";" page << "$('message_subject').value = \"#{subject}\";"
page.<< "$('message_content').value = \"#{content}\";" page.<< "$('message_content').value = \"#{content}\";"
page.show 'reply' page.show 'reply'
page << "Form.Element.focus('message_content');" page << "Form.Element.focus('message_content');"

@ -184,4 +184,8 @@ class MyController < ApplicationController
end end
render :nothing => true render :nothing => true
end end
def default_breadcrumb
l(:label_my_account)
end
end end

@ -22,6 +22,8 @@ class NewsController < ApplicationController
before_filter :find_optional_project, :only => :index before_filter :find_optional_project, :only => :index
accept_key_auth :index accept_key_auth :index
menu_item :new_news, :only => [:new, :create]
def index def index
case params[:format] case params[:format]

@ -72,7 +72,7 @@ class ReportsController < ApplicationController
@field = "project_id" @field = "project_id"
@rows = @project.descendants.visible @rows = @project.descendants.visible
@data = Issue.by_subproject(@project) || [] @data = Issue.by_subproject(@project) || []
@report_title = l(:field_subproject) @report_title = l(:label_subproject_plural)
end end
respond_to do |format| respond_to do |format|
@ -89,4 +89,8 @@ class ReportsController < ApplicationController
def find_issue_statuses def find_issue_statuses
@statuses = IssueStatus.find(:all, :order => 'position') @statuses = IssueStatus.find(:all, :order => 'position')
end end
def default_breadcrumb
l(:label_summary)
end
end end

@ -58,4 +58,8 @@ class SettingsController < ApplicationController
rescue Redmine::PluginNotFound rescue Redmine::PluginNotFound
render_404 render_404
end end
def default_breadcrumb
l(:label_settings)
end
end end

@ -63,7 +63,7 @@ class WatchersController < ApplicationController
private private
def find_project def find_project
klass = Object.const_get(params[:object_type].camelcase) klass = params[:object_type].camelcase.constantize
return false unless klass.respond_to?('watched_by') return false unless klass.respond_to?('watched_by')
@watched = klass.find(params[:object_id]) @watched = klass.find(params[:object_id])
@project = @watched.project @project = @watched.project

@ -34,8 +34,25 @@ module ApplicationHelper
# @param [Hash] options Hash params. This will checked by authorize_for to see if the user is authorized # @param [Hash] options Hash params. This will checked by authorize_for to see if the user is authorized
# @param [optional, Hash] html_options Options passed to link_to # @param [optional, Hash] html_options Options passed to link_to
# @param [optional, Hash] parameters_for_method_reference Extra parameters for link_to # @param [optional, Hash] parameters_for_method_reference Extra parameters for link_to
def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference) #
link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action]) # When a block is given, skip the name parameter
def link_to_if_authorized(*args, &block)
name = args.shift unless block_given?
options = args.shift || {}
html_options = args.shift
parameters_for_method_reference = args
return unless authorize_for(options[:controller] || params[:controller], options[:action])
if block_given?
link_to(options, html_options, *parameters_for_method_reference, &block)
else
link_to(name, options, html_options, *parameters_for_method_reference)
end
end
def li_unless_nil(link)
content_tag(:li, link) if link
end end
# Display a link to remote if user is authorized # Display a link to remote if user is authorized
@ -105,11 +122,10 @@ module ApplicationHelper
subject = truncate(subject, :length => options[:truncate]) subject = truncate(subject, :length => options[:truncate])
end end
end end
closed = issue.closed? ? content_tag(:span, l(:label_closed_issues), :class => "hidden-for-sighted") : nil closed = issue.closed? ? content_tag(:span, l(:label_closed_issues), :class => "hidden-for-sighted") : ""
s = link_to "#{h(issue.tracker)} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue}, s = link_to closed + options[:before_text].to_s + "#{h(issue.tracker)} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue},
:class => issue.css_classes, :class => issue.css_classes,
:title => title :title => title
s << closed unless closed.nil?
s << ": #{h subject}" if subject s << ": #{h subject}" if subject
s = "#{h issue.project} - " + s if options[:project] s = "#{h issue.project} - " + s if options[:project]
s s
@ -159,12 +175,18 @@ module ApplicationHelper
# link_to_project(project, {:only_path => false}, :class => "project") # => 3rd arg adds html options # link_to_project(project, {:only_path => false}, :class => "project") # => 3rd arg adds html options
# link_to_project(project, {}, :class => "project") # => html options with default url (project overview) # link_to_project(project, {}, :class => "project") # => html options with default url (project overview)
# #
def link_to_project(project, options={}, html_options = nil) def link_to_project(project, options={}, html_options = nil, show_icon = false)
if show_icon && User.current.member_of?(project)
icon = image_tag('fav.png', :alt => l(:description_my_project), :title => l(:description_my_project))
else
icon = ""
end
if project.active? if project.active?
url = {:controller => 'projects', :action => 'show', :id => project}.merge(options) url = {:controller => 'projects', :action => 'show', :id => project}.merge(options)
link_to(h(project), url, html_options) icon + link_to(h(project), url, html_options)
else else
h(project) icon + h(project)
end end
end end
@ -232,11 +254,11 @@ module ApplicationHelper
# Renders flash messages # Renders flash messages
def render_flash_messages def render_flash_messages
s = '' if User.current.impaired?
flash.each do |k,v| flash.map { |k,v| content_tag('div', content_tag('a', v, :href => 'javascript:;'), :class => "flash #{k}") }.join
s << content_tag('div', content_tag('a',v, :href => 'javascript:;'), :class => "flash #{k}") else
flash.map { |k,v| content_tag('div', v, :class => "flash #{k}") }.join
end end
s
end end
# Renders tabs and their content # Renders tabs and their content
@ -268,7 +290,7 @@ module ApplicationHelper
def project_tree_options_for_select(projects, options = {}) def project_tree_options_for_select(projects, options = {})
s = '' s = ''
project_tree(projects) do |project, level| project_tree(projects) do |project, level|
name_prefix = (level > 0 ? ('&nbsp;' * 2 * level + '&#187; ') : '') name_prefix = (level > 0 ? ('&nbsp;' * 3 * level + '&#187; ') : '')
tag_options = {:value => project.id, :title => h(project)} tag_options = {:value => project.id, :title => h(project)}
if project == options[:selected] || (options[:selected].respond_to?(:include?) && options[:selected].include?(project)) if project == options[:selected] || (options[:selected].respond_to?(:include?) && options[:selected].include?(project))
tag_options[:selected] = 'selected' tag_options[:selected] = 'selected'
@ -398,10 +420,13 @@ module ApplicationHelper
end end
def reorder_links(name, url) def reorder_links(name, url)
link_to(image_tag('2uparrow.png', :alt => l(:label_sort_highest)), url.merge({"#{name}[move_to]" => 'highest'}), :method => :post, :title => l(:label_sort_highest)) + content_tag(:span,
link_to(image_tag('1uparrow.png', :alt => l(:label_sort_higher)), url.merge({"#{name}[move_to]" => 'higher'}), :method => :post, :title => l(:label_sort_higher)) + link_to(image_tag('2uparrow.png', :alt => l(:label_sort_highest)), url.merge({"#{name}[move_to]" => 'highest'}), :method => :post, :title => l(:label_sort_highest)) +
link_to(image_tag('1downarrow.png', :alt => l(:label_sort_lower)), url.merge({"#{name}[move_to]" => 'lower'}), :method => :post, :title => l(:label_sort_lower)) + link_to(image_tag('1uparrow.png', :alt => l(:label_sort_higher)), url.merge({"#{name}[move_to]" => 'higher'}), :method => :post, :title => l(:label_sort_higher)) +
link_to(image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), url.merge({"#{name}[move_to]" => 'lowest'}), :method => :post, :title => l(:label_sort_lowest)) link_to(image_tag('1downarrow.png', :alt => l(:label_sort_lower)), url.merge({"#{name}[move_to]" => 'lower'}), :method => :post, :title => l(:label_sort_lower)) +
link_to(image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), url.merge({"#{name}[move_to]" => 'lowest'}), :method => :post, :title => l(:label_sort_lowest)),
:class => "reorder-icons"
)
end end
def breadcrumb(*args) def breadcrumb(*args)
@ -409,12 +434,38 @@ module ApplicationHelper
elements.any? ? content_tag('p', args.join(' &#187; ') + ' &#187; ', :class => 'breadcrumb') : nil elements.any? ? content_tag('p', args.join(' &#187; ') + ' &#187; ', :class => 'breadcrumb') : nil
end end
def breadcrumb_list(*args)
elements = args.flatten
cutme_elements = []
breadcrumb_elements = [content_tag(:li, elements.shift.to_s, :class => 'first-breadcrumb-element', :style => 'list-style-image:none;')]
breadcrumb_elements += elements.collect do |element|
content_tag(:li, element.to_s) if element
end
content_tag(:ul, breadcrumb_elements, :class => 'breadcrumb')
end
def other_formats_links(&block) def other_formats_links(&block)
concat('<p class="other-formats">' + l(:label_export_to)) concat('<p class="other-formats">' + l(:label_export_to))
yield Redmine::Views::OtherFormatsBuilder.new(self) yield Redmine::Views::OtherFormatsBuilder.new(self)
concat('</p>') concat('</p>')
end end
def link_to_project_ancestors(project)
if @project
ancestors = (project.root? ? [] : project.ancestors.visible)
ancestors << project
ancestors.collect do |p|
if p == project
link_to_project(p, {:jump => current_menu_item}, {:title => p, :class => 'breadcrumb-project-title nocut'})
else
link_to_project(p, {:jump => current_menu_item}, {:title => p})
end
end
end
end
def page_header_title def page_header_title
if @page_header_title.present? if @page_header_title.present?
h(@page_header_title) h(@page_header_title)
@ -458,8 +509,11 @@ module ApplicationHelper
css << 'theme-' + theme.name css << 'theme-' + theme.name
end end
css << 'controller-' + params[:controller] if params[:controller] && params[:action]
css << 'action-' + params[:action] css << 'controller-' + params[:controller]
css << 'action-' + params[:action]
end
css.join(' ') css.join(' ')
end end
@ -845,8 +899,8 @@ module ApplicationHelper
back_url = params[:back_url] back_url = params[:back_url]
if back_url.present? if back_url.present?
back_url = back_url.to_s back_url = back_url.to_s
else elsif request.get? and !params.blank?
back_url = url_for(params) if request.get? back_url = url_for(params)
end end
hidden_field_tag('back_url', back_url) unless back_url.blank? hidden_field_tag('back_url', back_url) unless back_url.blank?
end end
@ -942,9 +996,16 @@ module ApplicationHelper
end end
def content_for(name, content = nil, &block) def content_for(name, content = nil, &block)
@has_content ||= {}
@has_content[name] = true
super(name, content, &block) super(name, content, &block)
# only care for non whitespace contents;
# rails 2.3 specific implementation
if instance_variable_get("@content_for_#{name}").match /\S+/
@has_content ||= {}
@has_content[name] = true
end
nil
end end
def has_content?(name) def has_content?(name)
@ -974,7 +1035,7 @@ module ApplicationHelper
unless User.current.pref.warn_on_leaving_unsaved == '0' unless User.current.pref.warn_on_leaving_unsaved == '0'
tags << "\n" + javascript_tag("Event.observe(window, 'load', function(){ new WarnLeavingUnsaved('#{escape_javascript( l(:text_warn_on_leaving_unsaved) )}'); });") tags << "\n" + javascript_tag("Event.observe(window, 'load', function(){ new WarnLeavingUnsaved('#{escape_javascript( l(:text_warn_on_leaving_unsaved) )}'); });")
end end
tags << "\n" + javascript_include_tag("accessibility.js") if ( User.current.impaired? or User.current.anonymous? ) tags << "\n" + javascript_include_tag("accessibility.js") if User.current.impaired? and accessibility_js_enabled?
tags tags
end end
@ -1081,6 +1142,22 @@ module ApplicationHelper
@top_menu_split @top_menu_split
end end
def disable_accessibility_css!
@accessibility_css_disabled = true
end
def accessibility_css_enabled?
!@accessibility_css_disabled
end
def disable_accessibility_js!
@accessibility_js_disabled = true
end
def accessibility_js_enabled?
!@accessibility_js_disabled
end
private private
def wiki_helper def wiki_helper
@ -1097,4 +1174,14 @@ module ApplicationHelper
"<em>" + l(:text_caracters_minimum, :count => Setting.password_min_length) + "</em>" "<em>" + l(:text_caracters_minimum, :count => Setting.password_min_length) + "</em>"
end end
def breadcrumb_paths(*args)
if args.nil?
nil
elsif args.empty?
@breadcrumb_paths ||= [default_breadcrumb]
else
@breadcrumb_paths ||= []
@breadcrumb_paths += args
end
end
end end

@ -34,18 +34,14 @@ module JournalsHelper
# This renders a journal entry with a header and details # This renders a journal entry with a header and details
def render_journal_details(journal, header_label = :label_updated_time_by, model=nil, options={}) def render_journal_details(journal, header_label = :label_updated_time_by, model=nil, options={})
header = <<-HTML header = <<-HTML
<div class="profile-wrap">
#{avatar(journal.user, :size => "40")}
</div>
<h4> <h4>
<div class="journal-link" style="float:right;">#{link_to "##{journal.anchor}", :anchor => "note-#{journal.anchor}"}</div> <div class="journal-link" style="float:right;">#{link_to "##{journal.anchor}", :anchor => "note-#{journal.anchor}"}</div>
#{authoring journal.created_at, journal.user, :label => header_label} #{authoring journal.created_at, journal.user, :label => header_label}
#{content_tag('a', '', :name => "note-#{journal.anchor}")} #{content_tag('a', '', :name => "note-#{journal.anchor}")}
</h4> </h4>
<div class="profile-wrap">
#{avatar(journal.user, :size => "40")}
</div>
#{render_notes(model, journal, options) unless journal.notes.blank?}
HTML HTML
if journal.details.any? if journal.details.any?
@ -58,7 +54,10 @@ module JournalsHelper
end end
end end
content_tag("div", "#{header}#{details}", :id => "change-#{journal.id}", :class => "journal") notes = <<-HTML
#{render_notes(model, journal, options) unless journal.notes.blank?}
HTML
content_tag("div", "#{header}#{details}#{notes}", :id => "change-#{journal.id}", :class => "journal")
end end
def render_notes(model, journal, options={}) def render_notes(model, journal, options={})

@ -13,9 +13,10 @@
#++ #++
module ProjectsHelper module ProjectsHelper
def link_to_version(version, options = {}) def link_to_version(version, html_options = {}, options={})
return '' unless version && version.is_a?(Version) return '' unless version && version.is_a?(Version)
link_to_if version.visible?, format_version_name(version), { :controller => 'versions', :action => 'show', :id => version }, options options
link_to_if version.visible?, options[:before_text].to_s + format_version_name(version), { :controller => 'versions', :action => 'show', :id => version }, html_options
end end
def project_settings_tabs def project_settings_tabs
@ -69,7 +70,7 @@ module ProjectsHelper
end end
classes = (ancestors.empty? ? 'root' : 'child') classes = (ancestors.empty? ? 'root' : 'child')
s << "<li class='#{classes}'><div class='#{classes}'>" + s << "<li class='#{classes}'><div class='#{classes}'>" +
link_to_project(project, {}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}") link_to_project(project, {}, {:class => "project"}, true)
s << "<div class='wiki description'>#{textilizable(project.short_description, :project => project)}</div>" unless project.description.blank? s << "<div class='wiki description'>#{textilizable(project.short_description, :project => project)}</div>" unless project.description.blank?
s << "</div>\n" s << "</div>\n"
ancestors << project ancestors << project

@ -43,7 +43,8 @@ class Issue < ActiveRecord::Base
else else
t << (IssueStatus.find_by_id(o.new_value_for(:status_id)).try(:is_closed?) ? '-closed' : '-edit') t << (IssueStatus.find_by_id(o.new_value_for(:status_id)).try(:is_closed?) ? '-closed' : '-edit')
end end
t } t },
:except => ["root_id"]
register_on_journal_formatter(:id, 'parent_id') register_on_journal_formatter(:id, 'parent_id')
register_on_journal_formatter(:named_association, 'project_id', 'status_id', 'tracker_id', 'assigned_to_id', register_on_journal_formatter(:named_association, 'project_id', 'status_id', 'tracker_id', 'assigned_to_id',
@ -557,7 +558,7 @@ class Issue < ActiveRecord::Base
s << ' assigned-to-me' if User.current.logged? && assigned_to_id == User.current.id s << ' assigned-to-me' if User.current.logged? && assigned_to_id == User.current.id
s s
end end
# Saves an issue, time_entry, attachments, and a journal from the parameters # Saves an issue, time_entry, attachments, and a journal from the parameters
# Returns false if save fails # Returns false if save fails
def save_issue_with_child_records(params, existing_time_entry=nil) def save_issue_with_child_records(params, existing_time_entry=nil)
@ -586,7 +587,18 @@ class Issue < ActiveRecord::Base
end end
rescue ActiveRecord::StaleObjectError rescue ActiveRecord::StaleObjectError
attachments[:files].each(&:destroy) attachments[:files].each(&:destroy)
errors.add_to_base l(:notice_locking_conflict) error_message = l(:notice_locking_conflict)
journals_since = self.journals.after(lock_version)
if journals_since.any?
changes = journals_since.map { |j| "#{j.user.name} (#{j.created_at.to_s(:short)})" }
error_message << " " << l(:notice_locking_conflict_additional_information, :users => changes.join(', '))
end
error_message << " " << l(:notice_locking_conflict_reload_page)
errors.add_to_base error_message
raise ActiveRecord::Rollback raise ActiveRecord::Rollback
end end
end end
@ -610,9 +622,11 @@ class Issue < ActiveRecord::Base
def parent_issue_id=(arg) def parent_issue_id=(arg)
parent_issue_id = arg.blank? ? nil : arg.to_i parent_issue_id = arg.blank? ? nil : arg.to_i
if parent_issue_id && @parent_issue = Issue.find_by_id(parent_issue_id) if parent_issue_id && @parent_issue = Issue.find_by_id(parent_issue_id)
journal_changes["parent_id"] = [self.parent_id, @parent_issue.id]
@parent_issue.id @parent_issue.id
else else
@parent_issue = nil @parent_issue = nil
journal_changes["parent_id"] = [self.parent_id, nil]
nil nil
end end
end end

@ -56,7 +56,7 @@ class IssueStatus < ActiveRecord::Base
(author || !w.author) && (author || !w.author) &&
(assignee || !w.assignee) (assignee || !w.assignee)
end end
transitions.collect{|w| w.new_status}.compact.sort transitions.collect{|w| w.new_status}.uniq.compact.sort
else else
[] []
end end

@ -42,6 +42,10 @@ class Journal < ActiveRecord::Base
# undef_method :changes # undef_method :changes
serialize :changes, Hash serialize :changes, Hash
# Scopes to all journals excluding the initial journal - useful for change
# logs like the history on issue#show
named_scope "changing", :conditions => ["version > 1"]
def touch_journaled_after_creation def touch_journaled_after_creation
journaled.touch journaled.touch
end end

@ -158,8 +158,10 @@ private
def self.find_or_default(name) def self.find_or_default(name)
name = name.to_s name = name.to_s
raise "There's no setting named #{name}" unless @@available_settings.has_key?(name) raise "There's no setting named #{name}" unless @@available_settings.has_key?(name)
setting = find_by_name(name) find_by_name(name) or new do |s|
setting ||= new(:name => name, :value => @@available_settings[name]['default']) if @@available_settings.has_key? name s.name = name
s.value = @@available_settings[name]['default']
end
end end
def self.cache_key(name) def self.cache_key(name)

@ -116,6 +116,26 @@ class User < Principal
self.read_attribute(:identity_url) self.read_attribute(:identity_url)
end end
def self.register_allowance_evaluator(filter)
self.registered_allowance_evaluators ||= []
registered_allowance_evaluators << filter
end
# replace by class_attribute when on rails 3.x
class_eval do
def self.registered_allowance_evaluators() nil end
def self.registered_allowance_evaluators=(val)
singleton_class.class_eval do
define_method(:registered_allowance_evaluators) do
val
end
end
end
end
register_allowance_evaluator ChiliProject::PrincipalAllowanceEvaluator::Default
# Returns the user that matches provided login and password, or nil # Returns the user that matches provided login and password, or nil
def self.try_to_login(login, password) def self.try_to_login(login, password)
# Make sure no one can sign in with an empty password # Make sure no one can sign in with an empty password
@ -256,7 +276,7 @@ class User < Principal
end end
def impaired def impaired
!!self.pref.impaired anonymous? || !!self.pref.impaired
end end
def impaired? def impaired?
@ -406,41 +426,59 @@ class User < Principal
# * nil with options[:global] set : check if user has at least one role allowed for this action, # * nil with options[:global] set : check if user has at least one role allowed for this action,
# or falls back to Non Member / Anonymous permissions depending if the user is logged # or falls back to Non Member / Anonymous permissions depending if the user is logged
def allowed_to?(action, context, options={}) def allowed_to?(action, context, options={})
if context && context.is_a?(Project) if context.is_a?(Project)
# No action allowed on archived projects allowed_to_in_project?(action, context, options)
return false unless context.active? elsif context.is_a?(Array)
# No action allowed on disabled modules
return false unless context.allows_to?(action)
# Admin users are authorized for anything else
return true if admin?
roles = roles_for_project(context)
return false unless roles
roles.detect {|role| (context.is_public? || role.member?) && role.allowed_to?(action)}
elsif context && context.is_a?(Array)
# Authorize if user is authorized on every element of the array # Authorize if user is authorized on every element of the array
context.map do |project| context.present? && context.all? do |project|
allowed_to?(action,project,options) allowed_to?(action,project,options)
end.inject do |memo,allowed|
memo && allowed
end end
elsif options[:global] elsif options[:global]
# Admin users are always authorized allowed_to_globally?(action, options)
return true if admin?
# authorize if user has at least one role that has this permission
roles = memberships.collect {|m| m.roles}.flatten.uniq
roles.detect {|r| r.allowed_to?(action)} || (self.logged? ? Role.non_member.allowed_to?(action) : Role.anonymous.allowed_to?(action))
else else
false false
end end
end end
def allowed_to_in_project?(action, project, options = {})
initialize_allowance_evaluators
# No action allowed on archived projects
return false unless project.active?
# No action allowed on disabled modules
return false unless project.allows_to?(action)
# Admin users are authorized for anything else
return true if admin?
candidates_for_project_allowance(project).any? do |candidate|
denied = @registered_allowance_evaluators.any? do |filter|
filter.denied_for_project? candidate, action, project, options
end
!denied && @registered_allowance_evaluators.any? do |filter|
filter.granted_for_project? candidate, action, project, options
end
end
end
# Is the user allowed to do the specified action on any project? # Is the user allowed to do the specified action on any project?
# See allowed_to? for the actions and valid options. # See allowed_to? for the actions and valid options.
def allowed_to_globally?(action, options) def allowed_to_globally?(action, options = {})
allowed_to?(action, nil, options.reverse_merge(:global => true)) initialize_allowance_evaluators
# Admin users are always authorized
return true if admin?
# authorize if user has at least one membership granting this permission
candidates_for_global_allowance.any? do |candidate|
denied = @registered_allowance_evaluators.any? do |evaluator|
evaluator.denied_for_global? candidate, action, options
end
!denied && @registered_allowance_evaluators.any? do |evaluator|
evaluator.granted_for_global? candidate, action, options
end
end
end end
safe_attributes 'login', safe_attributes 'login',
@ -554,6 +592,19 @@ class User < Principal
ActiveSupport::SecureRandom.hex(16) ActiveSupport::SecureRandom.hex(16)
end end
def initialize_allowance_evaluators
@registered_allowance_evaluators ||= self.class.registered_allowance_evaluators.collect do |evaluator|
evaluator.new(self)
end
end
def candidates_for_global_allowance
@registered_allowance_evaluators.map(&:global_granting_candidates).flatten.uniq
end
def candidates_for_project_allowance project
@registered_allowance_evaluators.map{ |f| f.project_granting_candidates(project) }.flatten.uniq
end
end end
class AnonymousUser < User class AnonymousUser < User

@ -1,3 +1,6 @@
<% disable_accessibility_css! %>
<% breadcrumb_paths(l(:label_login)) %>
<%= call_hook :view_account_login_top %> <%= call_hook :view_account_login_top %>
<div id="login-form"> <div id="login-form">
<% form_tag({:action=> "login"}) do %> <% form_tag({:action=> "login"}) do %>

@ -1,3 +1,5 @@
<% disable_accessibility_css! %>
<h2><%=l(:label_password_lost)%></h2> <h2><%=l(:label_password_lost)%></h2>
<div class="box"> <div class="box">

@ -1,3 +1,5 @@
<% disable_accessibility_css! %>
<h2><%=l(:label_password_lost)%></h2> <h2><%=l(:label_password_lost)%></h2>
<%= error_messages_for 'user' %> <%= error_messages_for 'user' %>

@ -1,3 +1,5 @@
<% disable_accessibility_css! %>
<h2><%=l(:label_register)%> <%=link_to l(:label_login_with_open_id_option), signin_url if Setting.openid? %></h2> <h2><%=l(:label_register)%> <%=link_to l(:label_login_with_open_id_option), signin_url if Setting.openid? %></h2>
<% form_tag({:action => 'register'}, :class => "tabular") do %> <% form_tag({:action => 'register'}, :class => "tabular") do %>

@ -21,14 +21,16 @@
<%= content_tag('p', l(:label_no_data), :class => 'nodata') if @events_by_day.empty? %> <%= content_tag('p', l(:label_no_data), :class => 'nodata') if @events_by_day.empty? %>
<div style="float:left;"> <div style="float:left;">
<%= link_to_content_update('&#171; ' + l(:label_previous_week), <%= link_to_content_update(l(:label_previous_week),
params.merge(:from => @date_to - @days - 1), params.merge(:from => @date_to - @days - 1),
:title => l(:label_date_from_to, :start => format_date(@date_to - 2*@days), :end => format_date(@date_to - @days - 1))) %> {:title => l(:label_date_from_to, :start => format_date(@date_to - 2*@days), :end => format_date(@date_to - @days - 1)),
:class => 'navigate-left'}) %>
</div> </div>
<div style="float:right;"> <div style="float:right;">
<%= link_to_content_update(l(:label_next_week) + ' &#187;', <%= link_to_content_update(l(:label_next_week),
params.merge(:from => @date_to + @days - 1), params.merge(:from => @date_to + @days - 1),
:title => l(:label_date_from_to, :start => format_date(@date_to), :end => format_date(@date_to + @days - 1))) unless @date_to >= Date.today %> {:title => l(:label_date_from_to, :start => format_date(@date_to), :end => format_date(@date_to + @days - 1)),
:class => 'navigate-right'}) unless @date_to >= Date.today %>
</div> </div>
&nbsp; &nbsp;
<% other_formats_links do |f| %> <% other_formats_links do |f| %>

@ -1,5 +0,0 @@
<div id="admin-index">
<%= render :partial => 'no_data' if @no_configuration_data %>
</div>
<% html_title(l(:label_administration)) -%>

@ -1,3 +1,7 @@
<div id="admin-index">
<%= render :partial => 'no_data' if @no_configuration_data %>
</div>
<div class="contextual"> <div class="contextual">
<%= link_to l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add' %> <%= link_to l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add' %>
</div> </div>

@ -1,8 +1,16 @@
<span id="attachments_fields"> <span id="attachments_fields">
<%= file_field_tag 'attachments[1][file]', :size => 30, :id => nil -%><label class="inline"><span id="attachment_description_label_content"><%= l(:label_optional_description) %></span><%= text_field_tag 'attachments[1][description]', '', :size => 60, :id => nil %> <span id="attachment_template">
</label> <%= file_field_tag 'attachments[1][file]', :size => 15, :id => nil, :class => "attachment_choose_file" -%>
<label class="label-with-input" >
<span class="attachment_description_label_content">
<%= l(:label_optional_description) %>
</span>
<%= text_field_tag 'attachments[1][description]', '', :size => 38, :id => nil %>
</label>
</span>
</span> </span>
<br /> <br />
<small><%= link_to l(:label_add_another_file), '#', :onclick => 'addFileField(); return false;' %> <span class="add_another_file">
(<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>) <%= link_to l(:label_add_another_file), '#', :onclick => 'addFileField(); return false;' %>
</small> (<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>)
</span>

@ -1,5 +1,3 @@
<%= breadcrumb link_to(l(:label_board_plural), {:controller => 'boards', :action => 'index', :project_id => @project}) %>
<div class="contextual"> <div class="contextual">
<%= link_to_if_authorized l(:label_message_new), <%= link_to_if_authorized l(:label_message_new),
{:controller => 'messages', :action => 'new', :board_id => @board}, {:controller => 'messages', :action => 'new', :board_id => @board},

@ -11,15 +11,27 @@ while day <= calendar.enddt %>
<p class="day-num"><%= day.day %></p> <p class="day-num"><%= day.day %></p>
<% calendar.events_on(day).each do |i| %> <% calendar.events_on(day).each do |i| %>
<% if i.is_a? Issue %> <% if i.is_a? Issue %>
<div class="<%= i.css_classes %> <%= 'starting' if day == i.start_date %> <%= 'ending' if day == i.due_date %> tooltip"> <div class="<%= i.css_classes %> tooltip">
<%= h("#{i.project} -") unless @project && @project == i.project %> <%= h("#{i.project} -") unless @project && @project == i.project %>
<%= link_to_issue i, :truncate => 30 %> <% date_img = '' %>
<% if day == i.start_date and day == i.due_date %>
<% date_img = image_tag("bullet_diamond.png", :title => l(:text_tip_issue_begin_end_day), :alt => l(:text_tip_issue_begin_end_day),
:class => "imgtag-icon") %>
<% elsif day == i.start_date %>
<% date_img = image_tag("bullet_go.png", :title => l(:text_tip_issue_begin_day), :alt => l(:text_tip_issue_begin_day),
:class => "imgtag-icon") %>
<% elsif day == i.due_date %>
<% date_img = image_tag("bullet_end.png", :title => l(:text_tip_issue_end_day), :alt => l(:text_tip_issue_end_day),
:class => "imgtag-icon") %>
<% end %>
<%= link_to_issue i, :truncate => 30, :before_text => date_img %>
<span class="tip"><%= render_issue_tooltip i %></span> <span class="tip"><%= render_issue_tooltip i %></span>
</div> </div>
<% else %> <% else %>
<span class="icon icon-package"> <span>
<%= h("#{i.project} -") unless @project && @project == i.project %> <%= h("#{i.project} -") unless @project && @project == i.project %>
<%= link_to_version i%> <%= link_to_version i, {}, {:before_text => image_tag("package.png", :title => l(:label_version), :alt => l(:label_version), :class => "imgtag-icon") }%>
</span> </span>
<% end %> <% end %>
<% end %> <% end %>

@ -1,12 +1,14 @@
<div class="contextual"> <% content_for :action_menu_main do %>
<%= link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %> <%= li_unless_nil(link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit))) %>
<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon icon-time-add' %> <%= li_unless_nil(watcher_link(@issue,
<%= watcher_link(@issue, User.current,
User.current, { :class => 'watcher_link',
{ :class => 'watcher_link', :replace => User.current.allowed_to?(:view_issue_watchers, @project) ? ['#watchers', '.watcher_link'] : ['.watcher_link'] })) %>
:replace => User.current.allowed_to?(:view_issue_watchers, @project) ? ['#watchers', '.watcher_link'] : ['.watcher_link'] }) %> <% end %>
<%= link_to_if_authorized l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-duplicate' %> <% content_for :action_menu_more do %>
<%= link_to_if_authorized l(:button_copy), {:controller => 'issue_moves', :action => 'new', :id => @issue, :copy_options => {:copy => 't'}}, :class => 'icon icon-copy' %> <%= li_unless_nil(link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon icon-time-add') %>
<%= link_to_if_authorized l(:button_move), {:controller => 'issue_moves', :action => 'new', :id => @issue}, :class => 'icon icon-move' %> <%= li_unless_nil(link_to_if_authorized l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-duplicate') %>
<%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => (@issue.leaf? ? l(:text_are_you_sure) : l(:text_are_you_sure_with_children)), :method => :post, :class => 'icon icon-del' %> <%= li_unless_nil(link_to_if_authorized l(:button_copy), {:controller => 'issue_moves', :action => 'new', :id => @issue, :copy_options => {:copy => 't'}}, :class => 'icon icon-copy') %>
</div> <%= li_unless_nil(link_to_if_authorized l(:button_move), {:controller => 'issue_moves', :action => 'new', :id => @issue}, :class => 'icon icon-move') %>
<%= li_unless_nil(link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => (@issue.leaf? ? l(:text_are_you_sure) : l(:text_are_you_sure_with_children)), :method => :post, :class => 'icon icon-del') %>
<% end %>

@ -26,7 +26,10 @@
</div> </div>
<% if @issue.new_record? %> <% if @issue.new_record? %>
<p id="attachments_form"><%= label_tag('attachments[1][file]', l(:label_attachment_plural))%><%= render :partial => 'attachments/form' %></p> <p>
<%= label_tag('attachments[1][file]', l(:label_attachment_plural))%>
<%= render :partial => 'attachments/form' %>
</p>
<% end %> <% end %>
<% if @issue.new_record? && User.current.allowed_to?(:add_issue_watchers, @project) -%> <% if @issue.new_record? && User.current.allowed_to?(:add_issue_watchers, @project) -%>

@ -0,0 +1,36 @@
<%
css_classes = ["issue"]
css_classes << "issue-#{issue.id}"
css_classes << "idnt" << "idnt-#{level}" if level > 0
if relation == "root"
issue_text = link_to("#{h(issue.tracker.name)} ##{issue.id}",
'javascript:void(0)',
:style => "color:inherit; font-weight: bold; text-decoration:none; cursor:default;",
:class => issue.css_classes)
else
title = ''
if relation == "parent"
title << content_tag(:span, l(:description_parent_issue), :class => "hidden-for-sighted")
elsif relation == "child"
title << content_tag(:span, l(:description_sub_issue), :class => "hidden-for-sighted")
end
title << " #{h(issue.tracker.name)} ##{issue.id}"
issue_text = link_to(title, issue, :class => issue.css_classes)
end
issue_text << ": "
issue_text << truncate(issue.subject, :length => 60)
%>
<%=
content_tag('tr', [
content_tag('td', check_box_tag("ids[]", issue.id, false, :id => nil), :class => 'checkbox'),
content_tag('td', issue_text, :class => 'subject'),
content_tag('td', h(issue.status)),
content_tag('td', link_to_user(issue.assigned_to)),
content_tag('td', link_to_version(issue.fixed_version))
].join,
:class => css_classes.join(' ')
)
%>

@ -0,0 +1,27 @@
<strong><%= l(:label_issue_hierarchy) %></strong>
(<%= link_to(l(:label_add_subtask), {:controller => 'issues', :action => 'new', :project_id => @project, :issue => {:parent_issue_id => @issue}}) if User.current.allowed_to?(:manage_subtasks, @project) %>)
<% if !@issue.leaf? || @issue.parent %>
<% indent = 0 %>
<form action="#">
<table id="issue_tree" class="list">
<!-- render parent elements -->
<% @issue.ancestors.each do |issue| %>
<%= render :partial => 'subissue_row', :locals => { :issue => issue, :level => indent, :relation => "parent" } %>
<% indent += 1 %>
<% end %>
<!-- render current element -->
<%= render :partial => 'subissue_row', :locals => { :issue => @issue, :level => indent, :relation => "root" } %>
<% indent += 1 %>
<!-- render child elements -->
<% issue_list(@issue.descendants.sort_by(&:lft)) do |issue, level| %>
<%= render :partial => 'subissue_row', :locals => { :issue => issue, :level => indent + level, :relation => "child" } %>
<% end %>
</table>
</form>
<% end %>

@ -1,16 +1,14 @@
<div class="title-bar"> <div class="contextual">
<% if !@query.new_record? && @query.editable_by?(User.current) %>
<%= link_to l(:button_edit), {:controller => 'queries', :action => 'edit', :id => @query}, :class => 'icon icon-edit' %>
<%= link_to l(:button_delete), {:controller => 'queries', :action => 'destroy', :id => @query}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
<% end %>
</div>
<h2><%= @query.new_record? ? l(:label_issue_plural) : h(@query.name) %></h2> <h2><%= @query.new_record? ? l(:label_issue_plural) : h(@query.name) %></h2>
<div class="title-bar">
<div class="title-bar-extras"> <div class="title-bar-extras">
<div class="contextual">
<% if !@query.new_record? && @query.editable_by?(User.current) %>
<%= link_to l(:button_edit), {:controller => 'queries', :action => 'edit', :id => @query}, :class => 'icon icon-edit' %>
<%= link_to l(:button_delete), {:controller => 'queries', :action => 'destroy', :id => @query}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
<% end %>
<%= link_to_if_authorized(l(:label_issue_new), {:controller => 'issues', :action => 'new', :project_id => @project}, :class => 'icon icon-add') if @project %>
</div>
<% html_title(@query.new_record? ? l(:label_issue_plural) : h(@query.name)) %> <% html_title(@query.new_record? ? l(:label_issue_plural) : h(@query.name)) %>
@ -78,7 +76,7 @@
<%= f.link_to 'Atom', :url => { :project_id => @project, :query_id => (@query.new_record? ? nil : @query), :key => User.current.rss_key } %> <%= f.link_to 'Atom', :url => { :project_id => @project, :query_id => (@query.new_record? ? nil : @query), :key => User.current.rss_key } %>
<%= f.link_to 'CSV', :url => { :project_id => @project } %> <%= f.link_to 'CSV', :url => { :project_id => @project } %>
<%= f.link_to 'PDF', :url => { :project_id => @project } %> <%= f.link_to 'PDF', :url => { :project_id => @project } %>
<% end %> <% end if User.current.allowed_to? :export_issues, @project %>
<% end %> <% end %>
<%= call_hook(:view_issues_index_bottom, { :issues => @issues, :project => @project, :query => @query }) %> <%= call_hook(:view_issues_index_bottom, { :issues => @issues, :project => @project, :query => @query }) %>

@ -1,10 +1,7 @@
<div class="title-bar" id="upper-title-bar"> <%= render :partial => 'action_menu' %>
<div class="subject"><%= content_tag('h2', h(@issue.tracker.name) + ' #' +@issue.id.to_s) %></div>
<div class="title-bar-actions"> <% breadcrumb_paths(*[link_to(l(:label_issue_plural), {:controller => 'issues', :action => 'index'})] << @issue.ancestors.collect {|parent| link_to '#' + h(parent.id), {:controller => 'issues', :action => 'show', :id => parent}}) unless @issue.ancestors.empty? %>
<%= render :partial => 'action_menu' %> <%= content_tag('h2', h(@issue.tracker.name) + ' #' +@issue.id.to_s) %>
</div>
</div>
<div class="<%= @issue.css_classes %> details"> <div class="<%= @issue.css_classes %> details">
<div class="profile-wrap"> <div class="profile-wrap">
@ -13,7 +10,6 @@
<h3> <h3>
<%=h(@issue.subject) %> <%=h(@issue.subject) %>
</h3> </h3>
<hr />
<p class="author"> <p class="author">
<%= authoring @issue.created_on, @issue.author %>. <%= authoring @issue.created_on, @issue.author %>.
@ -21,7 +17,6 @@
<%= l(:label_updated_time, time_tag(@issue.updated_on)) %>. <%= l(:label_updated_time, time_tag(@issue.updated_on)) %>.
<% end %> <% end %>
</p> </p>
<hr />
<div class="meta"> <div class="meta">
<table class="attributes"> <table class="attributes">
@ -56,48 +51,43 @@
</div><!-- .meta --> </div><!-- .meta -->
<% if @issue.description? %> <% if @issue.description? %>
<hr />
<div class="description"> <div class="description">
<hr />
<div class="contextual"> <div class="contextual">
<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:controller => 'journals', :action => 'new', :id => @issue} }, :class => 'icon icon-comment') %> <%= link_to_remote_if_authorized(l(:button_quote), { :url => {:controller => 'journals', :action => 'new', :id => @issue} }, :class => 'icon icon-comment') %>
</div> </div>
<p><strong><%=l(:field_description)%></strong></p> <p><strong><%=l(:field_description)%></strong></p>
<div class="wiki"> <div class="wiki">
<%= textilizable @issue, :description, :attachments => @issue.attachments %> <%= textilizable @issue, :description, :attachments => @issue.attachments %>
</div> </div>
</div> </div>
<% end %> <% end %>
<% if @issue.attachments.any? -%> <% if @issue.attachments.any? -%>
<hr /> <%= link_to_attachments @issue %>
<%= link_to_attachments @issue %>
<% end -%> <% end -%>
<%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %> <%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %>
<% if !@issue.leaf? || User.current.allowed_to?(:manage_subtasks, @project) %>
<hr /> <hr />
<div id="issue_tree">
<p>
<strong><%=l(:label_subtask_plural)%></strong>
(<%= link_to(l(:label_add_subtask), {:controller => 'issues', :action => 'new', :project_id => @project, :issue => {:parent_issue_id => @issue}}) if User.current.allowed_to?(:manage_subtasks, @project) %>)
</p>
<%= render_descendants_tree(@issue) unless @issue.leaf? %> <%= render :partial => 'subissues_paragraph' %>
</div>
<% end %>
<% if authorize_for('issue_relations', 'new') || @issue.relations.present? %> <% if authorize_for('issue_relations', 'new') || @issue.relations.present? %>
<hr />
<div id="relations"> <div id="relations">
<%= render :partial => 'relations' %> <%= render :partial => 'relations' %>
</div> </div>
<hr />
<% end %> <% end %>
<% if User.current.allowed_to?(:add_issue_watchers, @project) ||
(@issue.watchers.present? && User.current.allowed_to?(:view_issue_watchers, @project)) %>
<div id="watchers">
<%= render :partial => 'watchers/watchers', :locals => {:watched => @issue} %>
</div>
<% end %>
</div> </div>
<div style="clear: both;"></div>
<% if @changesets.present? %> <% if @changesets.present? %>
<div id="issue-changesets"> <div id="issue-changesets">
@ -117,15 +107,12 @@
<div style="clear: both;"></div> <div style="clear: both;"></div>
<div class="title-bar" id="lower-title-bar"> <div class="title-bar" id="lower-title-bar">
<div class="title-bar-actions"> <%= javascript_include_tag 'copy_issue_actions' %>
<%= render :partial => 'action_menu', :locals => {:replace_watcher => 'watcher2' } %>
</div>
</div> </div>
<div style="clear: both;"></div> <div style="clear: both;"></div>
<% if authorize_for('issues', 'edit') %> <% if authorize_for('issues', 'edit') %>
<div id="update" style="display:none;"> <div id="update" style="display:none;">
<h3><%= l(:button_update) %></h3>
<%= render :partial => 'edit' %> <%= render :partial => 'edit' %>
</div> </div>
<% end %> <% end %>
@ -139,13 +126,6 @@
<% content_for :sidebar do %> <% content_for :sidebar do %>
<%= render :partial => 'issues/sidebar' %> <%= render :partial => 'issues/sidebar' %>
<% if User.current.allowed_to?(:add_issue_watchers, @project) ||
(@issue.watchers.present? && User.current.allowed_to?(:view_issue_watchers, @project)) %>
<div id="watchers">
<%= render :partial => 'watchers/watchers', :locals => {:watched => @issue} %>
</div>
<% end %>
<% end %> <% end %>
<% content_for :header_tags do %> <% content_for :header_tags do %>

@ -1,3 +1,5 @@
<% breadcrumb_paths(link_to(l(:label_administration), :controller => 'admin'),
default_breadcrumb) %>
<% @page_header_title = l(:label_administration) %> <% @page_header_title = l(:label_administration) %>
<% content_for :main_menu do %> <% content_for :main_menu do %>
<%= render :partial => 'admin/menu' %> <%= render :partial => 'admin/menu' %>

@ -19,8 +19,12 @@
<%= javascript_include_tag 'jquery.min.js' %> <%= javascript_include_tag 'jquery.min.js' %>
<%= javascript_include_tag 'jquery-ui.min.js' %> <%= javascript_include_tag 'jquery-ui.min.js' %>
<%= javascript_include_tag 'jquery.menu_expand.js' %> <%= javascript_include_tag 'jquery.menu_expand.js' %>
<%= javascript_include_tag 'breadcrumb.js' %>
<%= javascript_include_tag 'chosen.js'%> <%= javascript_include_tag 'chosen.js'%>
<%= stylesheet_link_tag 'chosen'%> <%= stylesheet_link_tag 'chosen'%>
<% if User.current.impaired? && accessibility_css_enabled? %>
<%= stylesheet_link_tag 'accessibility' %>
<% end %>
<%= javascript_tag('jQuery.noConflict();') %> <%= javascript_tag('jQuery.noConflict();') %>
<%= javascript_heads %> <%= javascript_heads %>
<%= stylesheet_link_tag 'jstoolbar' %> <%= stylesheet_link_tag 'jstoolbar' %>
@ -41,12 +45,14 @@
<%= label_tag("q", l(:label_search), :class => "hidden-for-sighted") %> <%= label_tag("q", l(:label_search), :class => "hidden-for-sighted") %>
<% form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get) do %> <% form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get) do %>
<%= hidden_field_tag(controller.default_search_scope, 1, :id => nil) if controller.default_search_scope %> <%= hidden_field_tag(controller.default_search_scope, 1, :id => nil) if controller.default_search_scope %>
<%= text_field_tag 'q', @question, :size => 20, :class => 'search_field', :placeholder => l(:search_input_placeholder), :accesskey => accesskey(:quick_search) %> <div id='search_wrap'>
<%= text_field_tag 'q', @question, :size => 20, :class => 'search_field', :placeholder => l(:search_input_placeholder), :accesskey => accesskey(:quick_search) %>
</div>
<% end %> <% end %>
</div> </div>
<ul id="account-nav"> <h1 class="hidden-for-sighted"><%= l(:label_top_menu) %></h1>
<h1 class="hidden-for-sighted"><%= l(:label_top_menu) %></h1> <ul id="account-nav" class="menu_root">
<% main_top_menu_items.each do |item| %> <% main_top_menu_items.each do |item| %>
<%= render_menu_node(item) %> <%= render_menu_node(item) %>
<% end %> <% end %>
@ -95,30 +101,32 @@
<div id="breadcrumb"> <div id="breadcrumb">
<h1> <h1>
<span class = 'hidden-for-sighted'><%=l(:description_current_position)%></span> <span class = 'hidden-for-sighted'><%=l(:description_current_position)%></span>
<%= page_header_title %> <%= breadcrumb_list(link_to('Home', home_path),
link_to_project_ancestors(@project),
*breadcrumb_paths) %>
</h1> </h1>
</div> </div>
<%= javascript_tag('jQuery("div#breadcrumb ul.breadcrumb").adjustBreadcrumbToWindowSize()') %>
</div> </div>
<% main_menu = render_main_menu(@project) %> <% main_menu = render_main_menu(@project) %>
<% if (side_displayed = has_content?(:sidebar) || has_content?(:main_menu) || !main_menu.blank?) %> <% side_displayed = has_content?(:sidebar) || has_content?(:main_menu) || !main_menu.blank? %>
<% display_sidebar = true %>
<% else %>
<% display_sidebar = false %>
<% end %>
<div id="main" class="<%= side_displayed ? '' : "nosidebar" %>"> <div id="main" class="<%= side_displayed ? '' : "nosidebar" %>">
<% if (side_displayed) %> <% if (side_displayed) %>
<div id="main-menu"> <div id="main-menu">
<h1 class="hidden-for-sighted"><%= l(:label_main_menu) %></h1> <h1 class="hidden-for-sighted"><%= l(:label_main_menu) %></h1>
<%= main_menu %> <div id="toggle-project-menu">
<%= yield :main_menu %> <a href="javascript:;" title="<%= l(:show_hide_project_menu) %>" class="navigation-toggler"></a>
<% if display_sidebar %> </div>
<!-- Sidebar --> <div id="menu-sidebar">
<div id="sidebar"> <%= main_menu %>
<%= yield :sidebar %> <%= yield :main_menu %>
<%= call_hook :view_layouts_base_sidebar %> <!-- Sidebar -->
<div id="sidebar">
<%= yield :sidebar %>
<%= call_hook :view_layouts_base_sidebar %>
</div>
</div> </div>
<% end %>
</div> </div>
<%= expand_current_menu %> <%= expand_current_menu %>
@ -126,6 +134,22 @@
<div class="<%= side_displayed ? '' : "nosidebar" %>" id="content"> <div class="<%= side_displayed ? '' : "nosidebar" %>" id="content">
<h1 class="hidden-for-sighted"><%= l(:label_content) %></h1> <h1 class="hidden-for-sighted"><%= l(:label_content) %></h1>
<%= render_flash_messages %> <%= render_flash_messages %>
<!-- Action menu -->
<% if @content_for_action_menu_main %>
<ul class="action_menu_main">
<%= yield :action_menu_main %>
<% if @content_for_action_menu_more %>
<li class="drop-down">
<a href="javascript:" class="icon icon-more"><%= l(:more_actions) %></a>
<ul class="action_menu_more" style="display:none;">
<%= yield :action_menu_more %>
</ul>
</li>
<% end %>
</ul>
<% end %>
<%= yield %> <%= yield %>
<%= call_hook :view_layouts_base_content %> <%= call_hook :view_layouts_base_content %>
<div style="clear:both;">&nbsp;</div> <div style="clear:both;">&nbsp;</div>

@ -1,5 +1,7 @@
<%= breadcrumb link_to(l(:label_board_plural), {:controller => 'boards', :action => 'index', :project_id => @project}), <% breadcrumb_paths(
link_to(h(@board.name), {:controller => 'boards', :action => 'show', :project_id => @project, :id => @board}) %> link_to(l(:label_board_plural), {:controller => 'boards', :action => 'index', :project_id => @project}),
link_to(h(@board.name), {:controller => 'boards', :action => 'show', :project_id => @project, :id => @board}))
%>
<div class="contextual"> <div class="contextual">
<%= watcher_link(@topic, User.current) %> <%= watcher_link(@topic, User.current) %>

@ -1,6 +1,6 @@
<div id="block_<%= block_name.dasherize %>" class="mypage-box"> <div id="block_<%= block_name.dasherize %>" class="mypage-box">
<div style="float:right;margin-right:16px;z-index:500;"> <div class="box-actions">
<%= link_to_remote "", { <%= link_to_remote "", {
:url => { :action => "remove_block", :block => block_name }, :url => { :action => "remove_block", :block => block_name },
:complete => "removeBlock('block_#{block_name.dasherize}')" }, :complete => "removeBlock('block_#{block_name.dasherize}')" },

@ -1,3 +1,4 @@
<% breadcrumb_paths(l(:label_my_account)) %>
<div class="contextual"> <div class="contextual">
<%= call_hook(:view_my_account_contextual, :user => @user)%> <%= call_hook(:view_my_account_contextual, :user => @user)%>
</div> </div>
@ -34,7 +35,7 @@
<%= render :partial => 'users/mail_notifications' %> <%= render :partial => 'users/mail_notifications' %>
</div> </div>
<h3><%=l(:field_impaired_settings)%></h3> <h3><%=l(:field_ui, :app_title => Setting.app_title)%></h3>
<div class="box tabular"> <div class="box tabular">
<%= render :partial => 'users/impaired_settings' %> <%= render :partial => 'users/impaired_settings' %>
</div> </div>

@ -1,5 +1,5 @@
<% form_tag({:controller => 'my', :action => "first_login", :back_url => @back_url }, {:method => :put}) do %> <% form_tag({:controller => 'my', :action => "first_login", :back_url => @back_url }, {:method => :put}) do %>
<h3><%=l(:field_impaired_settings)%></h3> <h3><%=l(:field_ui, :app_title => Setting.app_title)%></h3>
<div class="box tabular"> <div class="box tabular">
<%= render :partial => "users/impaired_settings" %> <%= render :partial => "users/impaired_settings" %>
</div> </div>

@ -1,3 +1,4 @@
<% breadcrumb_paths(l(:label_my_page)) %>
<div class="contextual"> <div class="contextual">
<%= link_to l(:label_personalize_page), :action => 'page_layout' %> <%= link_to l(:label_personalize_page), :action => 'page_layout' %>
</div> </div>

@ -1,6 +1,11 @@
<p><%= link_to_project(news.project) + ': ' unless @project %> <div class="news">
<%= link_to h(news.title), news_path(news) %> <%= link_to_project(news.project) + ': ' unless @project %>
<%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %> <h4 class='overview'><%= link_to h(news.title), news_path(news) %></h4>
<br /> <p class="author additional-information"><%= authoring news.created_on, news.author %></p>
<% unless news.summary.blank? %><span class="summary"><%=h news.summary %></span><br /><% end %> <div>
<span class="author"><%= authoring news.created_on, news.author %></span></p> <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %>
<% unless news.summary.blank? %>
<div class="summary"><%=h news.summary %></div>
<% end %>
</div>
</div>

@ -1,27 +1,3 @@
<div class="contextual">
<%= link_to(l(:label_news_new),
new_project_news_path(@project),
:class => 'icon icon-add',
:onclick => 'Element.show("add-news"); Form.Element.focus("news_title"); return false;') if @project && User.current.allowed_to?(:manage_news, @project) %>
</div>
<div id="add-news" style="display:none;">
<h2><%=l(:label_news_new)%></h2>
<% labelled_tabular_form_for :news, @news, :url => project_news_index_path(@project),
:html => { :id => 'news-form' } do |f| %>
<%= render :partial => 'news/form', :locals => { :f => f } %>
<%= submit_tag l(:button_create) %>
<%= link_to_remote l(:label_preview),
{ :url => preview_news_path(:project_id => @project),
:method => 'get',
:update => 'preview',
:with => "Form.serialize('news-form')"
}, :accesskey => accesskey(:preview) %> |
<%= link_to l(:button_cancel), "#", :onclick => 'Element.hide("add-news")' %>
<% end if @project %>
<div id="preview" class="wiki"></div>
</div>
<h2><%=l(:label_news_plural)%></h2> <h2><%=l(:label_news_plural)%></h2>
<% if @newss.empty? %> <% if @newss.empty? %>

@ -1,10 +1,10 @@
<div class="contextual"> <div class="contextual">
<%= watcher_link(@news, User.current) %>
<%= link_to(l(:button_edit), <%= link_to(l(:button_edit),
edit_news_path(@news), edit_news_path(@news),
:class => 'icon icon-edit', :class => 'icon icon-edit',
:accesskey => accesskey(:edit), :accesskey => accesskey(:edit),
:onclick => 'Element.show("edit-news"); return false;') if User.current.allowed_to?(:manage_news, @project) %> :onclick => 'Element.show("edit-news"); return false;') if User.current.allowed_to?(:manage_news, @project) %>
<%= watcher_link(@news, User.current) %>
<%= link_to(l(:button_delete), <%= link_to(l(:button_delete),
news_path(@news), news_path(@news),
:confirm => l(:text_are_you_sure), :confirm => l(:text_are_you_sure),

@ -1,4 +1,5 @@
<h2><%=l(:label_settings)%></h2> <h2><%=l(:label_settings)%></h2>
<% breadcrumb_paths(l(:label_settings)) %>
<%= render_tabs project_settings_tabs %> <%= render_tabs project_settings_tabs %>

@ -12,7 +12,7 @@
<tr class="<%= cycle 'odd', 'even' %>"> <tr class="<%= cycle 'odd', 'even' %>">
<td><%=h board.name %></td> <td><%=h board.name %></td>
<td><%=h board.description %></td> <td><%=h board.description %></td>
<td align="center"> <td class="small-icons" align="center">
<% if authorize_for("boards", "edit") %> <% if authorize_for("boards", "edit") %>
<%= reorder_links('board', {:controller => 'boards', :action => 'edit', :project_id => @project, :id => board}) %> <%= reorder_links('board', {:controller => 'boards', :action => 'edit', :project_id => @project, :id => board}) %>
<% end %> <% end %>

@ -5,6 +5,7 @@
</div> </div>
<h2><%=l(:label_overview)%></h2> <h2><%=l(:label_overview)%></h2>
<% breadcrumb_paths(l(:label_overview)) %>
<div class="splitcontentleft"> <div class="splitcontentleft">
<div class="wiki"> <div class="wiki">

@ -7,7 +7,7 @@
options_for_select((query.available_columns - query.columns).collect {|column| [column.caption, column.name]}), options_for_select((query.available_columns - query.columns).collect {|column| [column.caption, column.name]}),
:multiple => true, :size => 10, :style => "width:150px" %> :multiple => true, :size => 10, :style => "width:150px" %>
</td> </td>
<td align="center" valign="middle"> <td class="table-buttons" align="center" valign="middle">
<input type="button" value="&#8594;" <input type="button" value="&#8594;"
onclick="moveOptions(this.form.available_columns, this.form.selected_columns);" onclick="moveOptions(this.form.available_columns, this.form.selected_columns);"
title="<%= l(:label_add_columns) %>"/><br /> title="<%= l(:label_add_columns) %>"/><br />
@ -22,7 +22,7 @@
options_for_select(query.columns.collect {|column| [column.caption, column.name]}), options_for_select(query.columns.collect {|column| [column.caption, column.name]}),
:id => 'selected_columns', :multiple => true, :size => 10, :style => "width:150px" %> :id => 'selected_columns', :multiple => true, :size => 10, :style => "width:150px" %>
</td> </td>
<td align="center" valign="middle"> <td class="table-buttons" align="center" valign="middle">
<input type="button" value="&#8593;" onclick="moveOptionUp(this.form.selected_columns);" <input type="button" value="&#8593;" onclick="moveOptionUp(this.form.selected_columns);"
title="<%= l(:label_sort_higher) %>" /><br /> title="<%= l(:label_sort_higher) %>" /><br />
<input type="button" value="&#8595;" onclick="moveOptionDown(this.form.selected_columns);" <input type="button" value="&#8595;" onclick="moveOptionDown(this.form.selected_columns);"

@ -1,4 +1,4 @@
<h2><%=l(:label_report_plural)%></h2> <h2><%=l(:label_summary)%></h2>
<div class="splitcontentleft"> <div class="splitcontentleft">
<h3><%=l(:field_tracker)%>&nbsp;&nbsp; <h3><%=l(:field_tracker)%>&nbsp;&nbsp;
@ -46,7 +46,7 @@
<%= render :partial => 'simple', :locals => { :data => @issues_by_version, :field_name => "fixed_version_id", :rows => @versions } %> <%= render :partial => 'simple', :locals => { :data => @issues_by_version, :field_name => "fixed_version_id", :rows => @versions } %>
<br /> <br />
<% if @project.children.any? %> <% if @project.children.any? %>
<h3><%=l(:field_subproject)%>&nbsp;&nbsp; <h3><%=l(:label_suproject_plural)%>&nbsp;&nbsp;
<%= link_to image_tag('zoom_in.png', <%= link_to image_tag('zoom_in.png',
:alt => l(:text_analyze, :subject => l(:field_subproject)), :alt => l(:text_analyze, :subject => l(:field_subproject)),
:title => l(:text_analyze, :subject => l(:field_subproject))), :title => l(:text_analyze, :subject => l(:field_subproject))),

@ -1,4 +1,4 @@
<h2><%=l(:label_report_plural)%></h2> <h2><%=l(:label_summary)%></h2>
<h3><%=@report_title%></h3> <h3><%=@report_title%></h3>
<%= render :partial => 'details', :locals => { :data => @data, :field_name => @field, :rows => @rows } %> <%= render :partial => 'details', :locals => { :data => @data, :field_name => @field, :rows => @rows } %>

@ -20,7 +20,7 @@
</div> </div>
<div class="box tabular"> <div class="box tabular">
<h3><%=l(:field_impaired_settings)%></h3> <h3><%=l(:field_ui, :app_title => Setting.app_title)%></h3>
<%= render :partial => "users/impaired_settings" %> <%= render :partial => "users/impaired_settings" %>
</div> </div>

@ -1,3 +1,6 @@
<% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %> <% fields_for :pref, @user.pref, :lang => current_language do |pref_fields| %>
<p><%= pref_fields.check_box :impaired %></p> <p>
<%= pref_fields.label(:impaired, t(:field_impaired, :app_title => Setting.app_title))%>
<%= pref_fields.check_box :impaired %>
</p>
<% end %> <% end %>

@ -15,7 +15,6 @@
<li><%=h custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li> <li><%=h custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
<% end %> <% end %>
<% end %> <% end %>
<li><%=l(:label_registered_on)%>: <%= format_date(@user.created_on) %></li>
<% unless @user.last_login_on.nil? %> <% unless @user.last_login_on.nil? %>
<li><%=l(:field_last_login_on)%>: <%= format_date(@user.last_login_on) %></li> <li><%=l(:field_last_login_on)%>: <%= format_date(@user.last_login_on) %></li>
<% end %> <% end %>

@ -13,9 +13,9 @@
<%= render(:partial => "wiki/content", :locals => {:content => version.wiki_page.content}) if version.wiki_page %> <%= render(:partial => "wiki/content", :locals => {:content => version.wiki_page.content}) if version.wiki_page %>
<% if (issues = @issues_by_version[version]) && issues.size > 0 %> <% if (issues = @issues_by_version[version]) && issues.size > 0 %>
<strong class="related-issues-heading"><%= l(:label_related_issues) %></strong>
<% form_tag({}) do -%> <% form_tag({}) do -%>
<table class="list related-issues"> <table class="list related-issues">
<caption><%= l(:label_related_issues) %></caption>
<%- issues.each do |issue| -%> <%- issues.each do |issue| -%>
<tr class="hascontextmenu"> <tr class="hascontextmenu">
<td class="checkbox"><%= check_box_tag 'ids[]', issue.id %></td> <td class="checkbox"><%= check_box_tag 'ids[]', issue.id %></td>

@ -1,13 +1,11 @@
<div class="contextual"> <strong><%= l(:label_issue_watchers) %> (<%= watched.watcher_users.size %>)</strong>
<%= link_to_remote l(:button_add), (<%= link_to_remote(l(:button_add_watcher),
:url => {:controller => 'watchers', :url => {:controller => 'watchers',
:action => 'new', :action => 'new',
:object_type => watched.class.name.underscore, :object_type => watched.class.name.underscore,
:object_id => watched} if User.current.allowed_to?(:add_issue_watchers, @project) %> :object_id => watched},
</div> :method => :get) if User.current.allowed_to?(:add_issue_watchers, @project)
%>)
<h3><%= l(:label_issue_watchers) %> (<%= watched.watcher_users.size %>)</h3>
<% unless @watcher.nil? %> <% unless @watcher.nil? %>
<% remote_form_for(:watcher, @watcher, <% remote_form_for(:watcher, @watcher,
:url => {:controller => 'watchers', :url => {:controller => 'watchers',

@ -1,10 +1,14 @@
<% breadcrumb_paths(nil) %>
<div class="splitcontentleft"> <div class="splitcontentleft">
<div class="wiki"><%= textilizable Setting.welcome_text %></div> <div class="wiki"><%= textilizable Setting.welcome_text %></div>
<% if @news.any? %> <% if @news.any? %>
<div class="news box"> <div class="mypage-box">
<h3><%=l(:label_news_latest)%></h3> <h3><%=l(:label_news_latest)%></h3>
<div class="overview">
<%= render :partial => 'news/news', :collection => @news %> <%= render :partial => 'news/news', :collection => @news %>
<%= link_to l(:label_news_view_all), :controller => 'news' %> <%= link_to l(:label_news_view_all), :controller => 'news' %>
</div>
</div> </div>
<% end %> <% end %>
<%= call_hook(:view_welcome_index_left, :projects => @projects) %> <%= call_hook(:view_welcome_index_left, :projects => @projects) %>
@ -12,7 +16,7 @@
<div class="splitcontentright"> <div class="splitcontentright">
<% if @projects.any? %> <% if @projects.any? %>
<div class="projects box"> <div class="projects mypage-box overview">
<h3><%=l(:label_project_latest)%></h3> <h3><%=l(:label_project_latest)%></h3>
<ul> <ul>
<% for project in @projects %> <% for project in @projects %>

@ -1,3 +1,3 @@
<div class="wiki"> <div class="wiki wiki-content">
<%= textilizable content, :text, :attachments => content.page.attachments %> <%= textilizable content, :text, :attachments => content.page.attachments %>
</div> </div>

@ -1,9 +1,3 @@
<% if @wiki && @wiki.sidebar -%> <% if @wiki && @wiki.sidebar -%>
<%= textilizable @wiki.sidebar.content, :text %> <%= textilizable @wiki.sidebar.content, :text %>
<% end -%> <% end -%>
<h3><%= l(:label_wiki_navigation) %></h3>
<%= link_to l(:field_start_page), {:action => 'show', :id => nil} %><br />
<%= link_to l(:label_index_by_title), {:action => 'index'} %><br />
<%= link_to l(:label_index_by_date), {:action => 'date_index'} %><br />

@ -1,17 +1,22 @@
<div class="contextual"> <%= call_hook :wiki_navigation %>
<% if @editable %> <% content_for :action_menu_main do %>
<%= link_to_if_authorized(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) if @content.version == @page.content.version %> <% if @editable %>
<%= watcher_link(@page, User.current) %> <%= li_unless_nil(link_to_if_authorized(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit))) if @content.version == @page.content.version %>
<%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :id => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %> <%= li_unless_nil(watcher_link(@page, User.current)) if Setting.notified_events.include?("wiki_content_added") or Setting.notified_events.include?("wiki_content_updated") %>
<%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :id => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %> <% end %>
<%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :id => @page.title}, :class => 'icon icon-move') if @content.version == @page.content.version %> <% end %>
<%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :id => @page.title}, :method => :delete, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %> <% content_for :action_menu_more do %>
<%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :id => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %> <% if @editable %>
<%= li_unless_nil(link_to_if_authorized(l(:button_lock), {:action => 'protect', :id => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock')) if !@page.protected? %>
<%= li_unless_nil(link_to_if_authorized(l(:button_unlock), {:action => 'protect', :id => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock')) if @page.protected? %>
<%= li_unless_nil(link_to_if_authorized(l(:button_rename), {:action => 'rename', :id => @page.title}, :class => 'icon icon-move')) if @content.version == @page.content.version %>
<%= li_unless_nil(link_to_if_authorized(l(:button_delete), {:action => 'destroy', :id => @page.title}, :method => :delete, :confirm => l(:text_are_you_sure), :class => 'icon icon-del')) %>
<%= li_unless_nil(link_to_if_authorized(l(:button_rollback), {:action => 'edit', :id => @page.title, :version => @content.version }, :class => 'icon icon-cancel')) if @content.version < @page.content.version %>
<% end %>
<%= li_unless_nil(link_to_if_authorized(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history')) %>
<% end %> <% end %>
<%= link_to_if_authorized(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %>
</div>
<%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:id => parent.title, :project_id => parent.project}}) %> <% breadcrumb_paths(*@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:id => parent.title, :project_id => parent.project}}) %>
<% if @content.version != @page.content.version %> <% if @content.version != @page.content.version %>
<p> <p>

@ -983,3 +983,28 @@ bg:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -997,3 +997,28 @@ bs:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -986,3 +986,28 @@ ca:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1207,3 +1207,28 @@ cs:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -999,3 +999,28 @@ da:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -162,18 +162,22 @@ de:
notice_account_invalid_creditentials: Benutzer oder Kennwort ist ungültig. notice_account_invalid_creditentials: Benutzer oder Kennwort ist ungültig.
notice_account_password_updated: Kennwort wurde erfolgreich aktualisiert. notice_account_password_updated: Kennwort wurde erfolgreich aktualisiert.
notice_account_wrong_password: Falsches Kennwort. notice_account_wrong_password: Falsches Kennwort.
notice_account_register_done: Konto wurde erfolgreich angelegt. notice_account_register_done: Konto wurde erfolgreich angelegt. Zur Aktivierung folgen Sie dem Link, der Ihnen per E-Mail zugeschickt wurde.
notice_account_unknown_email: Unbekannter Benutzer. notice_account_unknown_email: Unbekannter Benutzer.
notice_account_update_failed: Konto konnte nicht aktualisiert werden. Bitte besuchen Sie ihre Profilseite und überprüfen Sie die Einstellungen. notice_account_update_failed: Konto konnte nicht aktualisiert werden. Bitte besuchen Sie ihre Profilseite und überprüfen Sie die Einstellungen.
notice_can_t_change_password: Dieses Konto verwendet eine externe Authentifizierungs-Quelle. Unmöglich, das Kennwort zu ändern. notice_can_t_change_password: Dieses Konto verwendet eine externe Authentifizierungs-Quelle. Unmöglich, das Kennwort zu ändern.
notice_account_lost_email_sent: Eine E-Mail mit Anweisungen, ein neues Kennwort zu wählen, wurde Ihnen geschickt. notice_account_lost_email_sent: Eine E-Mail mit Anweisungen, ein neues Kennwort zu wählen, wurde Ihnen geschickt.
notice_account_activated: Ihr Konto ist aktiviert. Sie können sich jetzt anmelden. notice_account_activated: Ihr Konto ist aktiviert. Sie können sich jetzt anmelden.
notice_account_inactive: Ihr Konto ist nicht aktiviert. Zur Aktivierung folgen Sie dem Link, der Ihnen bei der Registrierung per E-Mail zugeschickt wurde.
notice_successful_create: Erfolgreich angelegt notice_successful_create: Erfolgreich angelegt
notice_successful_update: Erfolgreich aktualisiert. notice_successful_update: Erfolgreich aktualisiert.
notice_successful_delete: Erfolgreich gelöscht. notice_successful_delete: Erfolgreich gelöscht.
notice_successful_connection: Verbindung erfolgreich. notice_successful_connection: Verbindung erfolgreich.
notice_file_not_found: Anhang existiert nicht oder ist gelöscht worden. notice_file_not_found: Anhang existiert nicht oder ist gelöscht worden.
notice_locking_conflict: Datum wurde von einem anderen Benutzer geändert. notice_internal_server_error: "Auf der von Ihnen aufgerufenen Seite ist ein Fehler aufgetreten. Kontaktieren Sie bitte ihren %{app_title} Administrator wenn sie wiederholt Probleme mit dem Aufrufen der Seite haben."
notice_locking_conflict: Die Informationen wurde zwischenzeitlich von einem anderen Benutzer geändert.
notice_locking_conflict_additional_information: "Die Änderungen wurden durchgeführt von %{users}."
notice_locking_conflict_reload_page: Bitte laden Sie die Seite neu, machen Sie sich mit den Änderungen vertraut und geben Sie Ihre Änderungen noch einmal ein.
notice_not_authorized: Sie sind nicht berechtigt, auf diese Seite zuzugreifen. notice_not_authorized: Sie sind nicht berechtigt, auf diese Seite zuzugreifen.
notice_email_sent: "Eine E-Mail wurde an %{value} gesendet." notice_email_sent: "Eine E-Mail wurde an %{value} gesendet."
notice_email_error: "Beim Senden einer E-Mail ist ein Fehler aufgetreten (%{value})." notice_email_error: "Beim Senden einer E-Mail ist ein Fehler aufgetreten (%{value})."
@ -279,6 +283,7 @@ de:
field_host: Host field_host: Host
field_port: Port field_port: Port
field_account: Konto field_account: Konto
field_base: "Allgemeiner Fehler:"
field_base_dn: Base DN field_base_dn: Base DN
field_attr_login: Mitgliedsname-Attribut field_attr_login: Mitgliedsname-Attribut
field_attr_firstname: Vorname-Attribut field_attr_firstname: Vorname-Attribut
@ -382,6 +387,7 @@ de:
permission_manage_versions: Versionen verwalten permission_manage_versions: Versionen verwalten
permission_manage_categories: Ticket-Kategorien verwalten permission_manage_categories: Ticket-Kategorien verwalten
permission_view_issues: Tickets anzeigen permission_view_issues: Tickets anzeigen
permission_export_issues: Tickets exportieren
permission_add_issues: Tickets hinzufügen permission_add_issues: Tickets hinzufügen
permission_edit_issues: Tickets bearbeiten permission_edit_issues: Tickets bearbeiten
permission_manage_issue_relations: Ticket-Beziehungen verwalten permission_manage_issue_relations: Ticket-Beziehungen verwalten
@ -499,6 +505,7 @@ de:
label_password_lost: Kennwort vergessen label_password_lost: Kennwort vergessen
label_home: Hauptseite label_home: Hauptseite
label_my_page: Meine Seite label_my_page: Meine Seite
label_account: Konto
label_my_account: Mein Konto label_my_account: Mein Konto
label_my_account_data: Meine Kontodaten label_my_account_data: Meine Kontodaten
label_my_projects: Meine Projekte label_my_projects: Meine Projekte
@ -553,6 +560,8 @@ de:
label_news_view_all: Alle News anzeigen label_news_view_all: Alle News anzeigen
label_news_added: News hinzugefügt label_news_added: News hinzugefügt
label_settings: Konfiguration label_settings: Konfiguration
label_summary: Zusammenfassung
label_project_settings: Projektkonfiguration
label_overview: Übersicht label_overview: Übersicht
label_version: Version label_version: Version
label_version_new: Neue Version label_version_new: Neue Version
@ -678,8 +687,8 @@ de:
label_wiki_edit_plural: Wiki-Bearbeitungen label_wiki_edit_plural: Wiki-Bearbeitungen
label_wiki_page: Wiki-Seite label_wiki_page: Wiki-Seite
label_wiki_page_plural: Wiki-Seiten label_wiki_page_plural: Wiki-Seiten
label_index_by_title: Seiten nach Titel sortiert label_index_by_title: Seiten nach Titel
label_index_by_date: Seiten nach Datum sortiert label_index_by_date: Seiten nach Datum
label_current_version: Gegenwärtige Version label_current_version: Gegenwärtige Version
label_preview: Vorschau label_preview: Vorschau
label_feed_plural: Feeds label_feed_plural: Feeds
@ -775,7 +784,7 @@ de:
label_plugins: Plugins label_plugins: Plugins
label_ldap_authentication: LDAP-Authentifizierung label_ldap_authentication: LDAP-Authentifizierung
label_downloads_abbr: D/L label_downloads_abbr: D/L
label_optional_description: Beschreibung (optional) label_optional_description: Beschreibung
label_add_another_file: Eine weitere Datei hinzufügen label_add_another_file: Eine weitere Datei hinzufügen
label_preferences: Präferenzen label_preferences: Präferenzen
label_chronological_order: in zeitlicher Reihenfolge label_chronological_order: in zeitlicher Reihenfolge
@ -784,6 +793,7 @@ de:
label_incoming_emails: Eingehende E-Mails label_incoming_emails: Eingehende E-Mails
label_generate_key: Generieren label_generate_key: Generieren
label_issue_watchers: Beobachter label_issue_watchers: Beobachter
button_add_watcher: Beobachter hinzufügen
label_example: Beispiel label_example: Beispiel
label_display: Anzeige label_display: Anzeige
label_sort: Sortierung label_sort: Sortierung
@ -1000,8 +1010,8 @@ de:
field_effective_date: "Abgabedatum" field_effective_date: "Abgabedatum"
label_news_comment_added: "Kommentar einer News hinzugefügt" label_news_comment_added: "Kommentar einer News hinzugefügt"
field_warn_on_leaving_unsaved: "Beim Verlassen einer Seite mit ungespeichertem Text warnen" field_warn_on_leaving_unsaved: "Beim Verlassen einer Seite mit ungespeichertem Text warnen"
field_impaired_settings: "ChiliProject bietet eine optimierte Oberfläche für motorisch- oder seh-behinderte Nutzer" field_impaired: Für die barrierefreie Nutzung optimierte Oberfläche
field_impaired: "Angepasste ChiliProject-Oberfläche benutzen" field_ui: Nutzeroberfläche
text_warn_on_leaving_unsaved: "Der eingegebene Text wird nicht gespeichert, wenn sie die Seite jetzt verlassen." text_warn_on_leaving_unsaved: "Der eingegebene Text wird nicht gespeichert, wenn sie die Seite jetzt verlassen."
text_default_encoding: "Default: UTF-8" text_default_encoding: "Default: UTF-8"
text_git_repo_example: a bare and local repository (e.g. /gitrepo, c:\gitrepo) text_git_repo_example: a bare and local repository (e.g. /gitrepo, c:\gitrepo)
@ -1041,3 +1051,9 @@ de:
description_attachment_toggle: Dateien aus/einblenden description_attachment_toggle: Dateien aus/einblenden
description_autocomplete: Für dieses Feld werden sie mit einer Autovervollständigung unterstützt. Sie können einen Teil des Tickettitels schreiben und bekommen eine Liste von möglichen Tickets angezeigt. Wählen Sie mit den Pfeiltasten den gewünschten Eintrag und bestätigen Sie mit Tab oder Enter. Sie können aber auch die Ticketnummer direkt eintragen. description_autocomplete: Für dieses Feld werden sie mit einer Autovervollständigung unterstützt. Sie können einen Teil des Tickettitels schreiben und bekommen eine Liste von möglichen Tickets angezeigt. Wählen Sie mit den Pfeiltasten den gewünschten Eintrag und bestätigen Sie mit Tab oder Enter. Sie können aber auch die Ticketnummer direkt eintragen.
description_noscript: Sie müssen JavaScript aktiveren, um Chiliproject nutzen zu können! description_noscript: Sie müssen JavaScript aktiveren, um Chiliproject nutzen zu können!
description_my_project: Sie sind Mitglied
description_parent_issue: Übergeordnetes Ticket
description_sub_issue: Untergeordnetes Ticket
label_issue_hierarchy: "Tickethierarchie"
more_actions: Weitere Funktionen
show_hide_project_menu: Projektnavigation aus/einblenden

@ -983,3 +983,28 @@ el:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -159,7 +159,9 @@ en-GB:
notice_successful_delete: Successful deletion. notice_successful_delete: Successful deletion.
notice_successful_connection: Successful connection. notice_successful_connection: Successful connection.
notice_file_not_found: The page you were trying to access doesn't exist or has been removed. notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
notice_locking_conflict: Data has been updated by another user. notice_locking_conflict: Information has been updated by at least one other user in the meantime.
notice_locking_conflict_additional_information: "The update(s) came from %{users}."
notice_locking_conflict_reload_page: Please reload the page, review the changes and reapply your updates.
notice_not_authorized: You are not authorised to access this page. notice_not_authorized: You are not authorised to access this page.
notice_not_authorized_archived_project: The project you're trying to access has been archived. notice_not_authorized_archived_project: The project you're trying to access has been archived.
notice_email_sent: "An email was sent to %{value}" notice_email_sent: "An email was sent to %{value}"
@ -268,6 +270,7 @@ en-GB:
field_host: Host field_host: Host
field_port: Port field_port: Port
field_account: Account field_account: Account
field_base: "General Error:"
field_base_dn: Base DN field_base_dn: Base DN
field_attr_login: Login attribute field_attr_login: Login attribute
field_attr_firstname: Firstname attribute field_attr_firstname: Firstname attribute
@ -381,6 +384,7 @@ en-GB:
permission_manage_versions: Manage versions permission_manage_versions: Manage versions
permission_manage_categories: Manage issue categories permission_manage_categories: Manage issue categories
permission_view_issues: View Issues permission_view_issues: View Issues
permission_export_issues: Export Issues
permission_add_issues: Add issues permission_add_issues: Add issues
permission_edit_issues: Edit issues permission_edit_issues: Edit issues
permission_manage_issue_relations: Manage issue relations permission_manage_issue_relations: Manage issue relations
@ -493,6 +497,7 @@ en-GB:
label_password_lost: Lost password label_password_lost: Lost password
label_home: Home label_home: Home
label_my_page: My page label_my_page: My page
label_account: Account
label_my_account: My account label_my_account: My account
label_my_projects: My projects label_my_projects: My projects
label_my_page_block: My page block label_my_page_block: My page block
@ -987,3 +992,28 @@ en-GB:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -151,12 +151,16 @@ en:
notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password. notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you. notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
notice_account_activated: Your account has been activated. You can now log in. notice_account_activated: Your account has been activated. You can now log in.
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
notice_successful_create: Successful creation. notice_successful_create: Successful creation.
notice_successful_update: Successful update. notice_successful_update: Successful update.
notice_successful_delete: Successful deletion. notice_successful_delete: Successful deletion.
notice_successful_connection: Successful connection. notice_successful_connection: Successful connection.
notice_file_not_found: The page you were trying to access doesn't exist or has been removed. notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
notice_locking_conflict: Data has been updated by another user. notice_internal_server_error: "An error occurred on the page you were trying to access. If you continue to experience problems please contact your %{app_title} administrator for assistance."
notice_locking_conflict: Information has been updated by at least one other user in the meantime.
notice_locking_conflict_additional_information: "The update(s) came from %{users}."
notice_locking_conflict_reload_page: Please reload the page, review the changes and reapply your updates.
notice_not_authorized: You are not authorized to access this page. notice_not_authorized: You are not authorized to access this page.
notice_not_authorized_archived_project: The project you're trying to access has been archived. notice_not_authorized_archived_project: The project you're trying to access has been archived.
notice_email_sent: "An email was sent to %{value}" notice_email_sent: "An email was sent to %{value}"
@ -265,6 +269,7 @@ en:
field_host: Host field_host: Host
field_port: Port field_port: Port
field_account: Account field_account: Account
field_base: "General Error:"
field_base_dn: Base DN field_base_dn: Base DN
field_attr_login: Login attribute field_attr_login: Login attribute
field_attr_firstname: Firstname attribute field_attr_firstname: Firstname attribute
@ -308,9 +313,8 @@ en:
field_text: Text field field_text: Text field
field_visible: Visible field_visible: Visible
field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text" field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text"
field_impaired_settings: "ChiliProject offers a slightly different User Interface for visually/motorically impaired Users" field_impaired: Accessibility mode
field_impaired: "Use adjusted ChiliProject Interface" field_ui: User Interface
setting_app_title: Application title setting_app_title: Application title
setting_app_subtitle: Application subtitle setting_app_subtitle: Application subtitle
setting_welcome_text: Welcome text setting_welcome_text: Welcome text
@ -380,6 +384,7 @@ en:
permission_manage_versions: Manage versions permission_manage_versions: Manage versions
permission_manage_categories: Manage issue categories permission_manage_categories: Manage issue categories
permission_view_issues: View Issues permission_view_issues: View Issues
permission_export_issues: Export Issues
permission_add_issues: Add issues permission_add_issues: Add issues
permission_edit_issues: Edit issues permission_edit_issues: Edit issues
permission_manage_issue_relations: Manage issue relations permission_manage_issue_relations: Manage issue relations
@ -497,6 +502,7 @@ en:
label_password_lost: Lost password label_password_lost: Lost password
label_home: Home label_home: Home
label_my_page: My page label_my_page: My page
label_account: Account
label_my_account: My account label_my_account: My account
label_my_account_data: My account data label_my_account_data: My account data
label_my_projects: My projects label_my_projects: My projects
@ -552,6 +558,8 @@ en:
label_news_added: News added label_news_added: News added
label_news_comment_added: Comment added to a news label_news_comment_added: Comment added to a news
label_settings: Settings label_settings: Settings
label_summary: Summary
label_project_settings: Project settings
label_overview: Overview label_overview: Overview
label_version: Version label_version: Version
label_version_new: New version label_version_new: New version
@ -780,7 +788,7 @@ en:
label_plugins: Plugins label_plugins: Plugins
label_ldap_authentication: LDAP authentication label_ldap_authentication: LDAP authentication
label_downloads_abbr: D/L label_downloads_abbr: D/L
label_optional_description: Optional description label_optional_description: Description
label_add_another_file: Add another file label_add_another_file: Add another file
label_preferences: Preferences label_preferences: Preferences
label_chronological_order: In chronological order label_chronological_order: In chronological order
@ -789,6 +797,7 @@ en:
label_incoming_emails: Incoming emails label_incoming_emails: Incoming emails
label_generate_key: Generate a key label_generate_key: Generate a key
label_issue_watchers: Watchers label_issue_watchers: Watchers
button_add_watcher: Add watcher
label_example: Example label_example: Example
label_display: Display label_display: Display
label_sort: Sort label_sort: Sort
@ -1023,3 +1032,9 @@ en:
description_attachment_toggle: Show/Hide attachments description_attachment_toggle: Show/Hide attachments
description_autocomplete: This field uses autocomplete. While typing the title of an issue you will receive a list of possible candidates. Choose one using the arrow up and arrow down key and select it with tab or enter. Alternatively you can enter the issue number directly. description_autocomplete: This field uses autocomplete. While typing the title of an issue you will receive a list of possible candidates. Choose one using the arrow up and arrow down key and select it with tab or enter. Alternatively you can enter the issue number directly.
description_noscript: You need to activate JavaScript in order to use Chiliproject! description_noscript: You need to activate JavaScript in order to use Chiliproject!
description_my_project: You are member
description_parent_issue: Parent issue of current
description_sub_issue: Subissue of current
label_issue_hierarchy: "Issue Hierarchy"
more_actions: More functions
show_hide_project_menu: Hide/Show project menu

@ -1020,3 +1020,28 @@ es:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -987,3 +987,28 @@ eu:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -986,3 +986,28 @@ fa:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1004,3 +1004,28 @@ fi:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1001,3 +1001,28 @@ fr:
description_filter: Filter description_filter: Filter
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -995,3 +995,28 @@ gl:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -988,3 +988,28 @@ he:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -990,3 +990,28 @@ hr:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1002,3 +1002,28 @@
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -991,3 +991,28 @@ id:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -984,3 +984,28 @@ it:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1005,3 +1005,28 @@ ja:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1035,3 +1035,28 @@ ko:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1043,3 +1043,28 @@ lt:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -978,3 +978,28 @@ lv:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -983,3 +983,28 @@ mk:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -984,3 +984,28 @@ mn:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -965,3 +965,28 @@ nl:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -970,3 +970,28 @@
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1000,3 +1000,28 @@ pl:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1007,3 +1007,28 @@ pt-BR:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -987,3 +987,28 @@ pt:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -976,3 +976,28 @@ ro:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1096,3 +1096,28 @@ ru:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -978,3 +978,28 @@ sk:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -979,3 +979,28 @@ sl:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -983,3 +983,28 @@ sr-YU:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -984,3 +984,28 @@ sr:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1025,3 +1025,28 @@ sv:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -980,3 +980,28 @@ th:
description_choose_project: Projects description_choose_project: Projects
description_date_from: Enter start date description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field) label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save