Revert "[31080] Trigger wpEvent after custom action"

pull/7696/head
Oliver Günther 5 years ago committed by GitHub
parent a4623ee33a
commit b05a8f7b54
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      .codeclimate.yml
  2. 19
      Dangerfile
  3. 68
      Gemfile
  4. 407
      Gemfile.lock
  5. 2
      app/assets/javascripts/vendor/ckeditor/ckeditor.js
  6. 2
      app/assets/javascripts/vendor/ckeditor/ckeditor.js.map
  7. 2
      app/controllers/auth_sources_controller.rb
  8. 2
      app/controllers/colors_controller.rb
  9. 2
      app/controllers/concerns/omniauth_login.rb
  10. 2
      app/controllers/custom_styles_controller.rb
  11. 2
      app/controllers/enumerations_controller.rb
  12. 4
      app/controllers/forums_controller.rb
  13. 2
      app/controllers/groups_controller.rb
  14. 2
      app/controllers/highlighting_controller.rb
  15. 23
      app/controllers/projects_controller.rb
  16. 2
      app/controllers/statuses_controller.rb
  17. 2
      app/controllers/types_controller.rb
  18. 2
      app/controllers/wiki_controller.rb
  19. 9
      app/models/auth_source.rb
  20. 6
      app/models/category.rb
  21. 5
      app/models/enabled_module.rb
  22. 2
      app/models/journal.rb
  23. 10
      app/models/menu_item.rb
  24. 18
      app/models/project.rb
  25. 18
      app/models/queries/work_packages/columns/property_column.rb
  26. 6
      app/models/query.rb
  27. 103
      app/models/query/group_by.rb
  28. 14
      app/models/query/results.rb
  29. 7
      app/models/role.rb
  30. 8
      app/models/status.rb
  31. 14
      app/models/type.rb
  32. 7
      app/models/version.rb
  33. 2
      app/seeders/basic_data/role_seeder.rb
  34. 3
      app/services/authorization/abstract_query.rb
  35. 2
      app/views/layouts/admin.html.erb
  36. 2
      app/views/layouts/my.html.erb
  37. 2
      app/views/layouts/no_menu.html.erb
  38. 2
      app/workers/scm/storage_updater_job.rb
  39. 9
      codecov.yml
  40. 7
      config/application.rb
  41. 10
      config/cable.yml
  42. 4
      config/locales/crowdin/ar.yml
  43. 2
      config/locales/crowdin/ca.yml
  44. 4
      config/locales/crowdin/da.yml
  45. 44
      config/locales/crowdin/de.yml
  46. 14
      config/locales/crowdin/hu.yml
  47. 2
      config/locales/crowdin/id.yml
  48. 4
      config/locales/crowdin/it.yml
  49. 4
      config/locales/crowdin/ja.yml
  50. 4
      config/locales/crowdin/js-ar.yml
  51. 2
      config/locales/crowdin/js-da.yml
  52. 18
      config/locales/crowdin/js-de.yml
  53. 2
      config/locales/crowdin/js-fil.yml
  54. 6
      config/locales/crowdin/js-hu.yml
  55. 8
      config/locales/crowdin/js-id.yml
  56. 8
      config/locales/crowdin/js-it.yml
  57. 2
      config/locales/crowdin/js-nl.yml
  58. 2
      config/locales/crowdin/js-no.yml
  59. 4
      config/locales/crowdin/js-pl.yml
  60. 20
      config/locales/crowdin/js-pt-BR.yml
  61. 4
      config/locales/crowdin/js-pt.yml
  62. 6
      config/locales/crowdin/js-ru.yml
  63. 4
      config/locales/crowdin/js-zh-CN.yml
  64. 2
      config/locales/crowdin/lt.yml
  65. 2
      config/locales/crowdin/nl.yml
  66. 14
      config/locales/crowdin/pl.yml
  67. 6
      config/locales/crowdin/pt-BR.yml
  68. 4
      config/locales/crowdin/pt.yml
  69. 26
      config/locales/crowdin/ru.yml
  70. 6
      config/locales/crowdin/sk.yml
  71. 4
      config/locales/crowdin/tr.yml
  72. 2
      config/locales/crowdin/zh-CN.yml
  73. 2
      features/step_definitions/common_steps.rb
  74. 5
      features/support/env.rb
  75. 3
      frontend/src/app/components/wp-custom-actions/wp-custom-actions/wp-custom-action.component.ts
  76. 1
      lib/open_project/plugins/module_handler.rb
  77. 10
      lib/open_project/text_formatting/filters/sanitization_filter.rb
  78. 9
      lib/open_project/text_formatting/formats/base_formatter.rb
  79. 8
      lib/open_project/text_formatting/formats/markdown/formatter.rb
  80. 8
      lib/open_project/text_formatting/formats/plain/formatter.rb
  81. 2
      lib/open_project/version.rb
  82. 20
      lib/plugins/acts_as_watchable/lib/acts_as_watchable.rb
  83. 2
      modules/auth_saml/lib/open_project/auth_saml/engine.rb
  84. 2
      modules/backlogs/app/controllers/rb_application_controller.rb
  85. 2
      modules/backlogs/app/controllers/rb_sprints_controller.rb
  86. 4
      modules/backlogs/config/locales/crowdin/ar.yml
  87. 10
      modules/backlogs/config/locales/crowdin/bg.yml
  88. 4
      modules/backlogs/config/locales/crowdin/de.yml
  89. 2
      modules/backlogs/config/locales/crowdin/es.yml
  90. 4
      modules/backlogs/config/locales/crowdin/et.yml
  91. 8
      modules/backlogs/config/locales/crowdin/fr.yml
  92. 8
      modules/backlogs/config/locales/crowdin/hr.yml
  93. 8
      modules/backlogs/config/locales/crowdin/hu.yml
  94. 8
      modules/backlogs/config/locales/crowdin/id.yml
  95. 4
      modules/backlogs/config/locales/crowdin/it.yml
  96. 4
      modules/backlogs/config/locales/crowdin/ja.yml
  97. 4
      modules/backlogs/config/locales/crowdin/ko.yml
  98. 2
      modules/backlogs/config/locales/crowdin/nl.yml
  99. 8
      modules/backlogs/config/locales/crowdin/pl.yml
  100. 2
      modules/backlogs/config/locales/crowdin/pt-BR.yml
  101. Some files were not shown because too many files have changed in this diff Show More

@ -27,10 +27,8 @@ checks:
plugins:
rubocop:
enabled: true
# Codeclimate uses brakeman 4.3.1 which does not support rails 6
# Check https://docs.codeclimate.com/docs/brakeman for updates.
brakeman:
enabled: false
enabled: true
# as long as bundler-audit does not support bundler 2.0 we disable it
bundler-audit:
enabled: false

@ -1,22 +1,3 @@
# Fail if jasmine specs contain fdescribe or fit
fail("jasmine fdescribe left in tests") if `grep --include '*.spec.ts' -rP 'fdescribe|fit' frontend/src/`.length > 1
# Search for modified components not being made OnPush
git.modified_files
.select { |path| path.include?('frontend') && path.end_with?('.ts') }
.each do |path|
lines = File.readlines(path)
# Ignore non component files
component_line = lines.grep(/@Component/)[0]
next unless component_line
# Check for missing onPush
unless lines.grep(/changeDetection:\s+ChangeDetectionStrategy.OnPush/).length > 0
warn(
"Please use `ChangeDetectionStrategy.OnPush` for this component",
file: path,
line: lines.index(component_line) || 0
)
end
end

@ -32,10 +32,10 @@ ruby '~> 2.6.1'
gem 'actionpack-xml_parser', '~> 2.0.0'
gem 'activemodel-serializers-xml', '~> 1.0.1'
gem 'activerecord-import', '~> 1.0.2'
gem 'activerecord-import', '~> 0.28.1'
gem 'activerecord-session_store', '~> 1.1.0'
gem 'rails', '~> 6.0.0'
gem 'responders', '~> 3.0'
gem 'rails', '~> 5.2.2.1'
gem 'responders', '~> 2.4'
gem 'rdoc', '>= 2.4.2'
@ -50,16 +50,15 @@ gem 'warden-basic_auth', '~> 0.2.1'
gem 'will_paginate', '~> 3.1.7'
# Replace once friendly_id release supports rails 6
gem 'friendly_id', git: 'https://github.com/norman/friendly_id', ref: '67422c04e1bfed4207b2a04826bc67ec0e231ce7'
gem 'friendly_id', '~> 5.2.1'
gem 'acts_as_list', '~> 0.9.9'
gem 'acts_as_tree', '~> 2.9.0'
gem 'awesome_nested_set', '~> 3.2.0'
gem 'rubytree', '~> 1.0.0'
gem 'acts_as_tree', '~> 2.8.0'
gem 'awesome_nested_set', '~> 3.1.3'
gem 'rubytree', git: 'https://github.com/dr0verride/RubyTree.git', ref: '06f53ee'
gem 'typed_dag', '~> 2.0.2'
gem 'addressable', '~> 2.7.0'
gem 'addressable', '~> 2.6.0'
# Provide timezone info for TZInfo used by AR
gem 'tzinfo-data', '~> 1.2018.9'
@ -75,7 +74,7 @@ gem 'commonmarker', '~> 0.20.1'
# HTML pipeline for transformations on text formatter output
# such as sanitization or additional features
gem 'html-pipeline', '~> 2.12.0'
gem 'html-pipeline', '~> 2.8.0'
# Tasklist parsing and renderer
gem 'deckar01-task_list', '2.2.0'
# Requires escape-utils for faster escaping
@ -83,7 +82,7 @@ gem 'escape_utils', '~> 1.0'
# Syntax highlighting used in html-pipeline with rouge
gem 'rouge', '~> 3.1.1'
# HTML sanitization used for html-pipeline
gem 'sanitize', '~> 5.1.0'
gem 'sanitize', '~> 5.0.0'
# HTML autolinking for mails and urls (replaces autolink)
gem 'rinku', '~> 2.0.4'
# Version parsing with semver
@ -105,10 +104,10 @@ gem 'posix-spawn', '~> 0.3.13', require: false
gem 'bcrypt', '~> 3.1.6'
gem 'multi_json', '~> 1.13.1'
gem 'oj', '~> 3.9.1'
gem 'oj', '~> 3.7.0'
gem 'daemons'
gem 'delayed_job_active_record', '~> 4.1.4'
gem 'delayed_job_active_record', '~> 4.1.1'
gem 'rack-protection', '~> 2.0.0'
@ -116,13 +115,13 @@ gem 'rack-protection', '~> 2.0.0'
# It allows whitelisting, blacklisting, throttling, and tracking based
# on arbitrary properties of the request.
# https://github.com/kickstarter/rack-attack
gem 'rack-attack', '~> 6.1.0'
gem 'rack-attack', '~> 5.4.2'
# CSP headers
gem 'secure_headers', '~> 6.1.1'
gem 'secure_headers', '~> 6.0.0'
# Browser detection for incompatibility checks
gem 'browser', '~> 2.6.1'
gem 'browser', '~> 2.5.3'
# Providing health checks
gem 'okcomputer', '~> 1.17.3'
@ -134,7 +133,7 @@ gem 'lograge', '~> 0.10.0'
# catch exceptions and send them to any airbrake compatible backend
# don't require by default, instead load on-demand when actually configured
gem 'airbrake', '~> 9.4.3', require: false
gem 'airbrake', '~> 8.0.1', require: false
gem 'prawn', '~> 2.2'
gem 'prawn-table', '~> 0.2.2'
@ -147,14 +146,18 @@ gem 'meta-tags', '~> 2.11.0'
group :production do
# we use dalli as standard memcache client
# requires memcached 1.4+
gem 'dalli', '~> 2.7.10'
# see https://github.clientom/mperham/dalli
gem 'dalli',
git: 'https://github.com/petergoldstein/dalli',
ref: '0ff39199b5e91c6dbdaabc7c085b81938d0f08d2'
# Unicorn worker killer to restart unicorn child workers
gem 'unicorn-worker-killer', require: false
end
gem 'autoprefixer-rails', '~> 9.4.5'
gem 'bourbon', '~> 6.0.0'
# use until proper release no longer requiring sass exists
gem 'bourbon', git: 'https://github.com/sikachu/bourbon', ref: 'a12ca168e74d3468c80500b21b525a4e12a19ef9'
gem 'i18n-js', '~> 3.2.0'
gem 'sassc-rails', '~> 2.1.0'
gem 'sprockets', '~> 3.7.0'
@ -163,18 +166,18 @@ gem 'sprockets', '~> 3.7.0'
# also, better than thin since we can control worker concurrency.
gem 'unicorn'
gem 'puma', '~> 4.1.0' # used for development and optionally for production
gem 'puma', '~> 4.0.0' # used for development and optionally for production
gem 'nokogiri', '~> 1.10.4'
gem 'carrierwave', '~> 1.3.1'
gem 'fog-aws'
gem 'aws-sdk-core', '~> 3.66.0'
gem 'aws-sdk-core', '~> 3.46.0'
# File upload via fog + screenshots on travis
gem 'aws-sdk-s3', '~> 1.48.0'
gem 'aws-sdk-s3', '~> 1.30.1'
gem 'openproject-token', '~> 1.0.2'
gem 'openproject-token', '~> 1.0.1'
gem 'plaintext', '~> 0.3.2'
@ -196,16 +199,16 @@ group :test do
# Test prof provides factories from code
# and other niceties
gem 'test-prof', '~> 0.10.0'
gem 'test-prof', '~> 0.7.3'
gem 'cucumber', '~> 3.1.0'
gem 'cucumber-rails', '~> 1.8.0', require: false
gem 'cucumber-rails', '~> 1.6.0', require: false
gem 'database_cleaner', '~> 1.6'
gem 'rack_session_access'
gem 'rspec', '~> 3.8.0'
gem 'rspec-activemodel-mocks', '~> 1.1.0', git: 'https://github.com/rspec/rspec-activemodel-mocks'
# also add to development group, so "spec" rake task gets loaded
gem 'rspec-rails', '~> 4.0.0beta2', group: :development
gem 'rspec-rails', '~> 3.8.1', group: :development
# Retry failures within the same environment
gem 'retriable', '~> 3.1.1'
@ -216,7 +219,7 @@ group :test do
# brings back testing for 'assigns' and 'assert_template' extracted in rails 5
gem 'rails-controller-testing', '~> 1.0.2'
gem 'capybara', '~> 3.29.0'
gem 'capybara', '~> 3.13.0'
gem 'capybara-screenshot', '~> 1.0.17'
gem 'capybara-select2', git: 'https://github.com/goodwill/capybara-select2', ref: '585192e'
gem 'webdrivers', '~> 4.1.2', require: false
@ -224,13 +227,14 @@ group :test do
gem 'fuubar', '~> 2.3.2'
gem 'timecop', '~> 0.9.0'
gem 'webmock', '~> 3.7.2', require: false
gem 'webmock', '~> 3.5.0', require: false
gem 'equivalent-xml', '~> 0.6'
gem 'json_spec', '~> 1.1.4'
gem 'shoulda-matchers', '~> 3.1', require: nil
gem 'simplecov', '~> 0.16.0', require: false
gem 'parallel_tests', '~> 2.29.2'
gem 'parallel_tests', '~> 2.27.1'
end
group :ldap do
@ -257,7 +261,7 @@ group :development, :test do
gem 'ruby-prof', require: false
gem 'stackprof', require: false
gem 'pry-byebug', '~> 3.7.0', platforms: [:mri]
gem 'pry-byebug', '~> 3.6.0', platforms: [:mri]
gem 'pry-rails', '~> 0.3.6'
gem 'pry-rescue', '~> 1.5.0'
gem 'pry-stack_explorer', '~> 0.4.9.2'
@ -270,7 +274,7 @@ group :development, :test do
gem 'danger-brakeman'
end
gem 'bootsnap', '~> 1.4.5', require: false
gem 'bootsnap', '~> 1.3.2', require: false
# API gems
gem 'grape', '~> 1.2.3'
@ -285,7 +289,7 @@ platforms :mri, :mingw, :x64_mingw do
end
# Support application loading when no database exists yet.
gem 'activerecord-nulldb-adapter', '~> 0.4.0'
gem 'activerecord-nulldb-adapter', '~> 0.3.9'
end
group :opf_plugins do

@ -6,6 +6,14 @@ GIT
doorkeeper (5.0.2)
railties (>= 4.2)
GIT
remote: https://github.com/dr0verride/RubyTree.git
revision: 06f53ee78cc2a48377c1bd177d3bc83c1504701c
ref: 06f53ee
specs:
rubytree (0.9.7)
json (~> 1.8)
GIT
remote: https://github.com/finnlabs/omniauth-openid-connect.git
revision: 9e7fd0e7bd36d40451c6b3c2ea641e8d237c295d
@ -39,14 +47,6 @@ GIT
capybara
rspec
GIT
remote: https://github.com/norman/friendly_id
revision: 67422c04e1bfed4207b2a04826bc67ec0e231ce7
ref: 67422c04e1bfed4207b2a04826bc67ec0e231ce7
specs:
friendly_id (5.2.5)
activerecord (>= 4.0.0)
GIT
remote: https://github.com/opf/omniauth
revision: fe862f986b2e846e291784d2caa3d90a658c67f0
@ -66,6 +66,13 @@ GIT
mixlib-shellout (~> 2.1.0)
rubyzip
GIT
remote: https://github.com/petergoldstein/dalli
revision: 0ff39199b5e91c6dbdaabc7c085b81938d0f08d2
ref: 0ff39199b5e91c6dbdaabc7c085b81938d0f08d2
specs:
dalli (2.7.9)
GIT
remote: https://github.com/rspec/rspec-activemodel-mocks
revision: 6136a778f8b21f4f45f6b4ad5c2e2533e6d4ddc6
@ -75,6 +82,14 @@ GIT
activesupport (>= 3.0)
rspec-mocks (>= 2.99, < 4.0)
GIT
remote: https://github.com/sikachu/bourbon
revision: a12ca168e74d3468c80500b21b525a4e12a19ef9
ref: a12ca168e74d3468c80500b21b525a4e12a19ef9
specs:
bourbon (5.1.0)
thor (~> 0.19)
PATH
remote: modules/auth_plugins
specs:
@ -106,6 +121,7 @@ PATH
specs:
openproject-bcf (1.0.0)
activerecord-import
rails (~> 5)
rubyzip (~> 1.2)
PATH
@ -205,7 +221,7 @@ PATH
remote: modules/reporting
specs:
openproject-reporting (1.0.0)
jquery-tablesorter (~> 1.27.0)
jquery-tablesorter (~> 1.25.5)
openproject-costs
reporting_engine
@ -232,60 +248,48 @@ GEM
remote: https://rubygems.org/
specs:
Ascii85 (1.0.3)
actioncable (6.0.0)
actionpack (= 6.0.0)
actioncable (5.2.2.1)
actionpack (= 5.2.2.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
actionmailbox (6.0.0)
actionpack (= 6.0.0)
activejob (= 6.0.0)
activerecord (= 6.0.0)
activestorage (= 6.0.0)
activesupport (= 6.0.0)
mail (>= 2.7.1)
actionmailer (6.0.0)
actionpack (= 6.0.0)
actionview (= 6.0.0)
activejob (= 6.0.0)
actionmailer (5.2.2.1)
actionpack (= 5.2.2.1)
actionview (= 5.2.2.1)
activejob (= 5.2.2.1)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (6.0.0)
actionview (= 6.0.0)
activesupport (= 6.0.0)
actionpack (5.2.2.1)
actionview (= 5.2.2.1)
activesupport (= 5.2.2.1)
rack (~> 2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionpack-xml_parser (2.0.1)
actionpack (>= 5.0)
railties (>= 5.0)
actiontext (6.0.0)
actionpack (= 6.0.0)
activerecord (= 6.0.0)
activestorage (= 6.0.0)
activesupport (= 6.0.0)
nokogiri (>= 1.8.5)
actionview (6.0.0)
activesupport (= 6.0.0)
actionview (5.2.2.1)
activesupport (= 5.2.2.1)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0)
activejob (6.0.0)
activesupport (= 6.0.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
activejob (5.2.2.1)
activesupport (= 5.2.2.1)
globalid (>= 0.3.6)
activemodel (6.0.0)
activesupport (= 6.0.0)
activemodel (5.2.2.1)
activesupport (= 5.2.2.1)
activemodel-serializers-xml (1.0.2)
activemodel (> 5.x)
activesupport (> 5.x)
builder (~> 3.1)
activerecord (6.0.0)
activemodel (= 6.0.0)
activesupport (= 6.0.0)
activerecord-import (1.0.2)
activerecord (5.2.2.1)
activemodel (= 5.2.2.1)
activesupport (= 5.2.2.1)
arel (>= 9.0)
activerecord-import (0.28.1)
activerecord (>= 3.2)
activerecord-nulldb-adapter (0.4.0)
activerecord-nulldb-adapter (0.3.9)
activerecord (>= 2.0.0)
activerecord-session_store (1.1.1)
actionpack (>= 4.0)
@ -293,78 +297,74 @@ GEM
multi_json (~> 1.11, >= 1.11.2)
rack (>= 1.5.2, < 3)
railties (>= 4.0)
activestorage (6.0.0)
actionpack (= 6.0.0)
activejob (= 6.0.0)
activerecord (= 6.0.0)
activestorage (5.2.2.1)
actionpack (= 5.2.2.1)
activerecord (= 5.2.2.1)
marcel (~> 0.3.1)
activesupport (6.0.0)
activesupport (5.2.2.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
zeitwerk (~> 2.1, >= 2.1.8)
acts_as_list (0.9.19)
activerecord (>= 3.0)
acts_as_tree (2.9.0)
acts_as_tree (2.8.0)
activerecord (>= 3.0.0)
addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0)
addressable (2.6.0)
public_suffix (>= 2.0.2, < 4.0)
aes_key_wrap (1.0.1)
afm (0.2.2)
airbrake (9.4.3)
airbrake-ruby (~> 4.6)
airbrake-ruby (4.6.0)
rbtree3 (~> 0.5)
airbrake (8.0.1)
airbrake-ruby (~> 3.0)
airbrake-ruby (3.1.0)
tdigest (= 0.1.1)
arel (9.0.0)
ast (2.4.0)
attr_required (1.0.1)
autoprefixer-rails (9.4.7)
execjs
awesome_nested_set (3.2.0)
activerecord (>= 4.0.0, < 7.0)
aws-eventstream (1.0.3)
aws-partitions (1.208.0)
aws-sdk-core (3.66.0)
aws-eventstream (~> 1.0, >= 1.0.2)
awesome_nested_set (3.1.4)
activerecord (>= 4.0.0, < 5.3)
aws-eventstream (1.0.1)
aws-partitions (1.136.0)
aws-sdk-core (3.46.0)
aws-eventstream (~> 1.0)
aws-partitions (~> 1.0)
aws-sigv4 (~> 1.1)
aws-sigv4 (~> 1.0)
jmespath (~> 1.0)
aws-sdk-kms (1.24.0)
aws-sdk-core (~> 3, >= 3.61.1)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.48.0)
aws-sdk-core (~> 3, >= 3.61.1)
aws-sdk-kms (1.13.0)
aws-sdk-core (~> 3, >= 3.39.0)
aws-sigv4 (~> 1.0)
aws-sdk-s3 (1.30.1)
aws-sdk-core (~> 3, >= 3.39.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1)
aws-sigv4 (~> 1.0)
aws-sdk-sns (1.1.0)
aws-sdk-core (~> 3)
aws-sigv4 (~> 1.0)
aws-sigv4 (1.1.0)
aws-eventstream (~> 1.0, >= 1.0.2)
aws-sigv4 (1.0.3)
axiom-types (0.1.1)
descendants_tracker (~> 0.0.4)
ice_nine (~> 0.11.0)
thread_safe (~> 0.3, >= 0.3.1)
backports (3.11.4)
bcrypt (3.1.13)
bcrypt (3.1.12)
bindata (2.4.4)
binding_of_caller (0.8.0)
debug_inspector (>= 0.0.1)
bootsnap (1.4.5)
bootsnap (1.3.2)
msgpack (~> 1.0)
bourbon (6.0.0)
thor (~> 0.19)
brakeman (4.6.1)
browser (2.6.1)
browser (2.5.3)
builder (3.2.3)
byebug (11.0.1)
capybara (3.29.0)
byebug (10.0.2)
capybara (3.13.2)
addressable
mini_mime (>= 0.1.3)
nokogiri (~> 1.8)
rack (>= 1.6.0)
rack-test (>= 0.6.3)
regexp_parser (~> 1.5)
regexp_parser (~> 1.2)
xpath (~> 3.2)
capybara-screenshot (1.0.22)
capybara (>= 1.0, < 4)
@ -419,16 +419,15 @@ GEM
cucumber-tag_expressions (~> 1.1.0)
gherkin (~> 5.0)
cucumber-expressions (6.0.1)
cucumber-rails (1.8.0)
capybara (>= 2.12, < 4)
cucumber-rails (1.6.0)
capybara (>= 1.1.2, < 4)
cucumber (>= 3.0.2, < 4)
mime-types (>= 2.0, < 4)
mime-types (>= 1.17, < 4)
nokogiri (~> 1.8)
railties (>= 4.2, < 7)
railties (>= 4, < 6)
cucumber-tag_expressions (1.1.1)
cucumber-wire (0.0.1)
daemons (1.3.1)
dalli (2.7.10)
danger (6.0.9)
claide (~> 1.0)
claide-plugins (>= 0.9.2)
@ -458,10 +457,10 @@ GEM
declarative-builder (0.1.0)
declarative-option (< 0.2.0)
declarative-option (0.1.0)
delayed_job (4.1.8)
activesupport (>= 3.0, < 6.1)
delayed_job_active_record (4.1.4)
activerecord (>= 3.0, < 6.1)
delayed_job (4.1.5)
activesupport (>= 3.0, < 5.3)
delayed_job_active_record (4.1.3)
activerecord (>= 3.0, < 5.3)
delayed_job (>= 3.0, < 5)
descendants_tracker (0.0.4)
thread_safe (~> 0.3, >= 0.3.1)
@ -472,6 +471,7 @@ GEM
declarative-option (< 0.2.0)
representable (>= 2.4.0, <= 3.1.0)
uber (< 0.2.0)
docile (1.3.1)
domain_name (0.5.20180417)
unf (>= 0.0.5, < 1.0.0)
equalizer (0.0.11)
@ -515,6 +515,8 @@ GEM
fog-core
nokogiri (>= 1.5.11, < 2.0.0)
formatador (0.2.5)
friendly_id (5.2.5)
activerecord (>= 4.0.0)
fuubar (2.3.2)
rspec-core (~> 3.0)
ruby-progressbar (~> 1.4)
@ -527,7 +529,7 @@ GEM
actionpack (>= 3.0)
multi_json
request_store (>= 1.0)
grape (1.2.4)
grape (1.2.3)
activesupport
builder
mustermann-grape (~> 1.0.0)
@ -535,10 +537,10 @@ GEM
rack-accept
virtus (>= 1.0.0)
gravatar_image_tag (1.2.0)
hashdiff (1.0.0)
hashdiff (0.3.8)
hashery (2.1.2)
hashie (3.6.0)
html-pipeline (2.12.0)
html-pipeline (2.8.3)
activesupport (>= 2)
nokogiri (>= 1.4)
htmldiff (0.0.1)
@ -556,11 +558,11 @@ GEM
interception (0.5)
ipaddress (0.8.3)
iso8601 (0.12.1)
jaro_winkler (1.5.3)
jaro_winkler (1.5.2)
jmespath (1.4.0)
jquery-tablesorter (1.27.0)
railties (~> 6.0.0, >= 3.2)
json (2.2.0)
jquery-tablesorter (1.25.5)
railties (>= 3.2, < 6)
json (1.8.6)
json-jwt (1.10.0)
activesupport (>= 4.2)
aes_key_wrap
@ -608,12 +610,12 @@ GEM
mime-types-data (~> 3.2015)
mime-types-data (3.2018.0812)
mimemagic (0.3.3)
mini_mime (1.0.2)
mini_mime (1.0.1)
mini_portile2 (2.4.0)
minisyntax (0.2.5)
minitest (5.11.3)
mixlib-shellout (2.1.0)
msgpack (1.3.1)
msgpack (1.2.6)
multi_json (1.13.1)
multi_test (0.1.2)
multipart-post (2.1.1)
@ -623,8 +625,8 @@ GEM
nap (1.1.0)
net-ldap (0.16.1)
netrc (0.11.0)
newrelic_rpm (6.6.0.358)
nio4r (2.5.1)
newrelic_rpm (6.0.0.351)
nio4r (2.3.1)
no_proxy_fix (0.1.2)
nokogiri (1.10.4)
mini_portile2 (~> 2.4.0)
@ -632,8 +634,8 @@ GEM
nokogiri (~> 1.8, >= 1.8.4)
octokit (4.14.0)
sawyer (~> 0.8.0, >= 0.5.3)
oj (3.9.1)
okcomputer (1.17.4)
oj (3.7.8)
okcomputer (1.17.3)
omniauth-saml (1.10.1)
omniauth (~> 1.3, >= 1.3.2)
ruby-saml (~> 1.7)
@ -648,13 +650,14 @@ GEM
validate_email
validate_url
webfinger (>= 1.0.1)
openproject-token (1.0.2)
parallel (1.17.0)
parallel_tests (2.29.2)
openproject-token (1.0.1)
activemodel (~> 5.0)
parallel (1.13.0)
parallel_tests (2.27.1)
parallel
parser (2.6.4.0)
parser (2.6.0.0)
ast (~> 2.4.0)
passenger (6.0.2)
passenger (6.0.1)
rack
rake (>= 0.8.1)
pdf-core (0.7.0)
@ -672,6 +675,7 @@ GEM
nokogiri (~> 1.10, >= 1.10.4)
rubyzip (~> 1.2.1)
posix-spawn (0.3.13)
powerpack (0.1.2)
prawn (2.2.2)
pdf-core (~> 0.7.0)
ttfunk (~> 1.5)
@ -680,8 +684,8 @@ GEM
pry (0.12.2)
coderay (~> 1.1.0)
method_source (~> 0.9.0)
pry-byebug (3.7.0)
byebug (~> 11.0)
pry-byebug (3.6.0)
byebug (~> 10.0)
pry (~> 0.10)
pry-rails (0.3.9)
pry (>= 0.10.4)
@ -691,13 +695,13 @@ GEM
pry-stack_explorer (0.4.9.3)
binding_of_caller (>= 0.7)
pry (>= 0.9.11)
public_suffix (4.0.1)
puma (4.1.0)
public_suffix (3.0.3)
puma (4.0.0)
nio4r (~> 2.0)
rack (2.0.7)
rack (2.0.6)
rack-accept (0.4.5)
rack (>= 0.4)
rack-attack (6.1.0)
rack-attack (5.4.2)
rack (>= 1.0, < 3)
rack-mini-profiler (1.0.1)
rack (>= 1.2.0)
@ -707,27 +711,25 @@ GEM
httpclient
json-jwt (>= 1.9.0)
rack
rack-protection (2.0.7)
rack-protection (2.0.5)
rack
rack-test (1.1.0)
rack (>= 1.0, < 3)
rack_session_access (0.2.0)
builder (>= 2.0.0)
rack (>= 1.0.0)
rails (6.0.0)
actioncable (= 6.0.0)
actionmailbox (= 6.0.0)
actionmailer (= 6.0.0)
actionpack (= 6.0.0)
actiontext (= 6.0.0)
actionview (= 6.0.0)
activejob (= 6.0.0)
activemodel (= 6.0.0)
activerecord (= 6.0.0)
activestorage (= 6.0.0)
activesupport (= 6.0.0)
rails (5.2.2.1)
actioncable (= 5.2.2.1)
actionmailer (= 5.2.2.1)
actionpack (= 5.2.2.1)
actionview (= 5.2.2.1)
activejob (= 5.2.2.1)
activemodel (= 5.2.2.1)
activerecord (= 5.2.2.1)
activestorage (= 5.2.2.1)
activesupport (= 5.2.2.1)
bundler (>= 1.3.0)
railties (= 6.0.0)
railties (= 5.2.2.1)
sprockets-rails (>= 2.0.0)
rails-controller-testing (1.0.4)
actionpack (>= 5.0.1.x)
@ -736,23 +738,23 @@ GEM
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
rails-html-sanitizer (1.2.0)
rails-html-sanitizer (1.0.4)
loofah (~> 2.2, >= 2.2.2)
rails_12factor (0.0.3)
rails_serve_static_assets
rails_stdout_logging
rails_serve_static_assets (0.0.5)
rails_stdout_logging (0.0.5)
railties (6.0.0)
actionpack (= 6.0.0)
activesupport (= 6.0.0)
railties (5.2.2.1)
actionpack (= 5.2.2.1)
activesupport (= 5.2.2.1)
method_source
rake (>= 0.8.7)
thor (>= 0.20.3, < 2.0)
thor (>= 0.19.0, < 2.0)
rainbow (3.0.0)
raindrops (0.19.0)
rake (12.3.3)
rbtree3 (0.5.0)
rake (12.3.2)
rbtree (0.4.2)
rdoc (6.1.1)
recaptcha (5.1.0)
json
@ -763,16 +765,16 @@ GEM
reform-rails (0.1.7)
activemodel (>= 3.2)
reform (>= 2.2.0)
regexp_parser (1.6.0)
regexp_parser (1.3.0)
representable (3.0.4)
declarative (< 0.1.0)
declarative-option (< 0.2.0)
uber (< 0.2.0)
request_store (1.4.1)
rack (>= 1.4)
responders (3.0.0)
actionpack (>= 5.0)
railties (>= 5.0)
responders (2.4.1)
actionpack (>= 4.2.0, < 6.0)
railties (>= 4.2.0, < 6.0)
rest-client (2.0.2)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0)
@ -795,24 +797,25 @@ GEM
rspec-mocks (3.8.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0)
rspec-rails (4.0.0.beta2)
actionpack (>= 4.2)
activesupport (>= 4.2)
railties (>= 4.2)
rspec-core (~> 3.8)
rspec-expectations (~> 3.8)
rspec-mocks (~> 3.8)
rspec-support (~> 3.8)
rspec-rails (3.8.2)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 3.8.0)
rspec-expectations (~> 3.8.0)
rspec-mocks (~> 3.8.0)
rspec-support (~> 3.8.0)
rspec-retry (0.6.1)
rspec-core (> 3.3)
rspec-support (3.8.0)
rubocop (0.74.0)
rubocop (0.63.1)
jaro_winkler (~> 1.5.1)
parallel (~> 1.10)
parser (>= 2.6)
parser (>= 2.5, != 2.5.1.1)
powerpack (~> 0.1)
rainbow (>= 2.2.2, < 4.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 1.7)
unicode-display_width (~> 1.4.0)
ruby-duration (3.2.3)
activesupport (>= 3.0.0)
i18n
@ -820,17 +823,14 @@ GEM
ruby-enum (0.7.2)
i18n
ruby-ole (1.2.12.2)
ruby-prof (1.0.0)
ruby-progressbar (1.10.1)
ruby-prof (0.17.0)
ruby-progressbar (1.10.0)
ruby-rc4 (0.1.5)
ruby-saml (1.9.0)
nokogiri (>= 1.5.10)
rubytree (1.0.0)
json (~> 2.1)
structured_warnings (~> 0.3)
rubyzip (1.2.2)
safe_yaml (1.0.5)
sanitize (5.1.0)
safe_yaml (1.0.4)
sanitize (5.0.0)
crass (~> 1.0.2)
nokogiri (>= 1.8.0)
nokogumbo (~> 2.0)
@ -846,7 +846,8 @@ GEM
sawyer (0.8.2)
addressable (>= 2.3.5)
faraday (> 0.8, < 2.0)
secure_headers (6.1.1)
secure_headers (6.0.0)
useragent (>= 0.15.0)
selenium-webdriver (3.141.0)
childprocess (~> 0.5)
rubyzip (~> 1.2, >= 1.2.2)
@ -854,9 +855,15 @@ GEM
shoulda-context (1.2.2)
shoulda-matchers (3.1.3)
activesupport (>= 4.0.0)
simplecov (0.16.1)
docile (~> 1.1)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.2)
spreadsheet (0.8.9)
ruby-ole (>= 1.0)
spring (2.1.0)
spring (2.0.2)
activesupport (>= 4.2)
spring-commands-rspec (1.0.4)
spring (>= 0.9.1)
sprockets (3.7.2)
@ -868,7 +875,6 @@ GEM
sprockets (>= 3.0.0)
stackprof (0.2.12)
stringex (2.8.5)
structured_warnings (0.4.0)
svg-graph (2.1.3)
swd (1.1.2)
activesupport (>= 3)
@ -876,10 +882,12 @@ GEM
httpclient (>= 2.4)
sys-filesystem (1.2.0)
ffi
tdigest (0.1.1)
rbtree (~> 0.4.2)
temple (0.8.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
test-prof (0.10.0)
test-prof (0.7.3)
thin (1.7.2)
daemons (~> 1.0, >= 1.0.9)
eventmachine (~> 1.0, >= 1.0.4)
@ -899,13 +907,14 @@ GEM
unf (0.1.4)
unf_ext
unf_ext (0.0.7.5)
unicode-display_width (1.6.0)
unicorn (5.5.1)
unicode-display_width (1.4.1)
unicorn (5.4.1)
kgio (~> 2.6)
raindrops (~> 0.7)
unicorn-worker-killer (0.4.4)
get_process_mem (~> 0)
unicorn (>= 4, < 6)
useragent (0.16.10)
validate_email (0.1.6)
activemodel (>= 3.0)
mail (>= 2.2.5)
@ -928,17 +937,16 @@ GEM
webfinger (1.1.0)
activesupport
httpclient (>= 2.4)
webmock (3.7.2)
webmock (3.5.1)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
websocket-driver (0.7.1)
hashdiff
websocket-driver (0.7.0)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.4)
will_paginate (3.1.8)
websocket-extensions (0.1.3)
will_paginate (3.1.7)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.1.10)
PLATFORMS
ruby
@ -946,23 +954,23 @@ PLATFORMS
DEPENDENCIES
actionpack-xml_parser (~> 2.0.0)
activemodel-serializers-xml (~> 1.0.1)
activerecord-import (~> 1.0.2)
activerecord-nulldb-adapter (~> 0.4.0)
activerecord-import (~> 0.28.1)
activerecord-nulldb-adapter (~> 0.3.9)
activerecord-session_store (~> 1.1.0)
acts_as_list (~> 0.9.9)
acts_as_tree (~> 2.9.0)
addressable (~> 2.7.0)
airbrake (~> 9.4.3)
acts_as_tree (~> 2.8.0)
addressable (~> 2.6.0)
airbrake (~> 8.0.1)
autoprefixer-rails (~> 9.4.5)
awesome_nested_set (~> 3.2.0)
aws-sdk-core (~> 3.66.0)
aws-sdk-s3 (~> 1.48.0)
awesome_nested_set (~> 3.1.3)
aws-sdk-core (~> 3.46.0)
aws-sdk-s3 (~> 1.30.1)
bcrypt (~> 3.1.6)
bootsnap (~> 1.4.5)
bourbon (~> 6.0.0)
bootsnap (~> 1.3.2)
bourbon!
brakeman (~> 4.6.1)
browser (~> 2.6.1)
capybara (~> 3.29.0)
browser (~> 2.5.3)
capybara (~> 3.13.0)
capybara-screenshot (~> 1.0.17)
capybara-select2!
carrierwave (~> 1.3.1)
@ -970,16 +978,16 @@ DEPENDENCIES
cells-rails (~> 0.0.9)
commonmarker (~> 0.20.1)
cucumber (~> 3.1.0)
cucumber-rails (~> 1.8.0)
cucumber-rails (~> 1.6.0)
daemons
dalli (~> 2.7.10)
dalli!
danger (~> 6.0.9)
danger-brakeman
dashboards!
database_cleaner (~> 1.6)
date_validator (~> 0.9.0)
deckar01-task_list (= 2.2.0)
delayed_job_active_record (~> 4.1.4)
delayed_job_active_record (~> 4.1.1)
doorkeeper!
equivalent-xml (~> 0.6)
escape_utils (~> 1.0)
@ -988,12 +996,12 @@ DEPENDENCIES
faker
flamegraph
fog-aws
friendly_id!
friendly_id (~> 5.2.1)
fuubar (~> 2.3.2)
gon (~> 6.2.1)
grape (~> 1.2.3)
grids!
html-pipeline (~> 2.12.0)
html-pipeline (~> 2.8.0)
htmldiff
i18n-js (~> 3.2.0)
json_spec (~> 1.1.4)
@ -1008,7 +1016,7 @@ DEPENDENCIES
net-ldap (~> 0.16.0)
newrelic_rpm
nokogiri (~> 1.10.4)
oj (~> 3.9.1)
oj (~> 3.7.0)
okcomputer (~> 1.17.3)
omniauth!
omniauth-openid-connect!
@ -1031,30 +1039,30 @@ DEPENDENCIES
openproject-pdf_export!
openproject-recaptcha!
openproject-reporting!
openproject-token (~> 1.0.2)
openproject-token (~> 1.0.1)
openproject-translations!
openproject-two_factor_authentication!
openproject-webhooks!
openproject-xls_export!
overviews!
parallel_tests (~> 2.29.2)
parallel_tests (~> 2.27.1)
passenger (~> 6.0.1)
pg (~> 1.1.0)
plaintext (~> 0.3.2)
posix-spawn (~> 0.3.13)
prawn (~> 2.2)
prawn-table (~> 0.2.2)
pry-byebug (~> 3.7.0)
pry-byebug (~> 3.6.0)
pry-rails (~> 0.3.6)
pry-rescue (~> 1.5.0)
pry-stack_explorer (~> 0.4.9.2)
puma (~> 4.1.0)
rack-attack (~> 6.1.0)
puma (~> 4.0.0)
rack-attack (~> 5.4.2)
rack-mini-profiler
rack-protection (~> 2.0.0)
rack-test (~> 1.1.0)
rack_session_access
rails (~> 6.0.0)
rails (~> 5.2.2.1)
rails-controller-testing (~> 1.0.2)
rails_12factor
rdoc (>= 2.4.2)
@ -1062,7 +1070,7 @@ DEPENDENCIES
reform-rails (~> 0.1.7)
reporting_engine!
request_store (~> 1.4.1)
responders (~> 3.0)
responders (~> 2.4)
rest-client (~> 2.0)
retriable (~> 3.1.1)
rinku (~> 2.0.4)
@ -1071,20 +1079,21 @@ DEPENDENCIES
rspec (~> 3.8.0)
rspec-activemodel-mocks (~> 1.1.0)!
rspec-example_disabler!
rspec-rails (~> 4.0.0beta2)
rspec-rails (~> 3.8.1)
rspec-retry (~> 0.6.1)
rubocop
ruby-duration (~> 3.2.0)
ruby-prof
ruby-progressbar (~> 1.10.0)
rubytree (~> 1.0.0)
sanitize (~> 5.1.0)
rubytree!
sanitize (~> 5.0.0)
sassc-rails (~> 2.1.0)
secure_headers (~> 6.1.1)
secure_headers (~> 6.0.0)
selenium-webdriver (~> 3.14)
semantic (~> 1.6.1)
shoulda-context (~> 1.2)
shoulda-matchers (~> 3.1)
simplecov (~> 0.16.0)
spring
spring-commands-rspec
sprockets (~> 3.7.0)
@ -1092,7 +1101,7 @@ DEPENDENCIES
stringex (~> 2.8.5)
svg-graph (~> 2.1.0)
sys-filesystem (~> 1.2.0)
test-prof (~> 0.10.0)
test-prof (~> 0.7.3)
thin (~> 1.7.2)
timecop (~> 0.9.0)
typed_dag (~> 2.0.2)
@ -1102,7 +1111,7 @@ DEPENDENCIES
warden (~> 1.2)
warden-basic_auth (~> 0.2.1)
webdrivers (~> 4.1.2)
webmock (~> 3.7.2)
webmock (~> 3.5.0)
will_paginate (~> 3.1.7)
RUBY VERSION

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -66,7 +66,7 @@ class AuthSourcesController < ApplicationController
updated = permitted_params.auth_source
updated.delete :account_password if updated[:account_password].blank?
if @auth_source.update updated
if @auth_source.update_attributes updated
flash[:notice] = l(:notice_successful_update)
redirect_to action: 'index'
else

@ -76,7 +76,7 @@ class ColorsController < ApplicationController
def update
@color = Color.find(params[:id])
if @color.update(permitted_params.color)
if @color.update_attributes(permitted_params.color)
flash[:notice] = l(:notice_successful_update)
redirect_to colors_path
else

@ -167,7 +167,7 @@ module Concerns::OmniauthLogin
return if handle_omniauth_registration_expired(auth)
fill_user_fields_from_omniauth(user, auth)
user.update(permitted_params.user_register_via_omniauth)
user.update_attributes(permitted_params.user_register_via_omniauth)
opts = {
omni_auth_hash: auth

@ -53,7 +53,7 @@ class CustomStylesController < ApplicationController
def update
@custom_style = CustomStyle.current
if @custom_style.update(custom_style_params)
if @custom_style.update_attributes(custom_style_params)
redirect_to custom_style_path
else
flash[:error] = @custom_style.errors.full_messages

@ -67,7 +67,7 @@ class EnumerationsController < ApplicationController
enum_params = permitted_params.enumerations
type = permitted_params.enumeration_type
@enumeration.type = enumeration_class(type).try(:name) || @enumeration.type
if @enumeration.update enum_params
if @enumeration.update_attributes enum_params
flash[:notice] = l(:notice_successful_update)
redirect_to enumerations_path(type: @enumeration.type)
else

@ -106,7 +106,7 @@ class ForumsController < ApplicationController
def edit; end
def update
if @forum.update(permitted_params.forum)
if @forum.update_attributes(permitted_params.forum)
flash[:notice] = l(:notice_successful_update)
redirect_to_settings_in_projects
else
@ -115,7 +115,7 @@ class ForumsController < ApplicationController
end
def move
if @forum.update(permitted_params.forum_move)
if @forum.update_attributes(permitted_params.forum_move)
flash[:notice] = t(:notice_successful_update)
else
flash.now[:error] = t('forum_could_not_be_saved')

@ -97,7 +97,7 @@ class GroupsController < ApplicationController
@group = Group.includes(:users).find(params[:id])
respond_to do |format|
if @group.update(permitted_params.group)
if @group.update_attributes(permitted_params.group)
flash[:notice] = l(:notice_successful_update)
format.html do redirect_to(groups_path) end
format.xml do head :ok end

@ -46,7 +46,7 @@ class HighlightingController < ApplicationController
private
def determine_freshness
@max_updated_at = helpers.highlight_css_updated_at.to_s || Time.now.iso8601
@max_updated_at = helpers.highlight_css_updated_at || Time.now.iso8601
@highlight_version_tag = helpers.highlight_css_version_tag(@max_updated_at)
end
end

@ -242,10 +242,14 @@ class ProjectsController < ApplicationController
@query = ParamsToQueryService.new(Project, current_user).call(params)
# Set default filter on status no filter is provided.
@query.where('status', '=', Project::STATUS_ACTIVE.to_s) unless params[:filters]
if !params[:filters]
@query.where('status', '=', Project::STATUS_ACTIVE.to_s)
end
# Order lft if no order is provided.
@query.order(lft: :asc) unless params[:sortBy]
if !params[:sortBy]
@query.order(lft: :asc)
end
@query
end
@ -279,18 +283,21 @@ class ProjectsController < ApplicationController
end
def load_projects(query)
filter_projects_by_permission(query.results)
.with_required_storage
.with_latest_activity
.includes(:custom_values, :enabled_modules)
.paginate(page: page_param, per_page: per_page_param)
projects = query
.results
.with_required_storage
.with_latest_activity
.includes(:custom_values, :enabled_modules)
.page(page_param)
.per_page(per_page_param)
filter_projects_by_permission projects
end
# Validates parent_id param according to user's permissions
# TODO: move it to Project model in a validation that depends on User.current
def validate_parent_id
return true if User.current.admin?
parent_id = permitted_params.project && params[:project][:parent_id]
if parent_id || @project.new_record?
parent = parent_id.blank? ? nil : Project.find_by(id: parent_id.to_i)

@ -66,7 +66,7 @@ class StatusesController < ApplicationController
verify method: :patch, only: :update, render: { nothing: true, status: :method_not_allowed }
def update
@status = Status.find(params[:id])
if @status.update(permitted_params.status)
if @status.update_attributes(permitted_params.status)
flash[:notice] = l(:notice_successful_update)
redirect_to action: 'index'
else

@ -101,7 +101,7 @@ class TypesController < ApplicationController
def move
@type = ::Type.find(params[:id])
if @type.update(permitted_params.type_move)
if @type.update_attributes(permitted_params.type_move)
flash[:notice] = l(:notice_successful_update)
else
flash.now[:error] = t('type_could_not_be_saved')

@ -224,7 +224,7 @@ class WikiController < ApplicationController
existing_identifier: item.name)
redirect_to_show
elsif @page.update(attributes)
elsif @page.update_attributes(attributes)
flash[:notice] = t(:notice_successful_update)
redirect_to_show
end

@ -32,16 +32,17 @@ class AuthSource < ActiveRecord::Base
has_many :users
validates :name,
uniqueness: { case_sensitive: false },
length: { maximum: 60 }
validates_presence_of :name
validates_uniqueness_of :name
validates_length_of :name, maximum: 60
def self.unique_attribute
:name
end
prepend ::Mixins::UniqueFinder
def authenticate(_login, _password); end
def authenticate(_login, _password)
end
def find_user(_login)
raise "subclass repsonsiblity"

@ -32,9 +32,9 @@ class Category < ActiveRecord::Base
belongs_to :assigned_to, class_name: 'Principal', foreign_key: 'assigned_to_id'
has_many :work_packages, foreign_key: 'category_id', dependent: :nullify
validates :name,
uniqueness: { scope: [:project_id], case_sensitive: true },
length: { maximum: 255 }
validates_presence_of :name
validates_uniqueness_of :name, scope: [:project_id]
validates_length_of :name, maximum: 255
# validates that assignee is member of the issue category's project
validates_each :assigned_to_id do |record, attr, value|

@ -30,9 +30,8 @@
class EnabledModule < ActiveRecord::Base
belongs_to :project
validates :name,
presence: true,
uniqueness: { scope: :project_id, case_sensitive: true }
validates_presence_of :name
validates_uniqueness_of :name, scope: :project_id
after_create :module_enabled

@ -60,7 +60,7 @@ class Journal < ActiveRecord::Base
if attributes.is_a? Hash and attributes.values.first.is_a? Array
attributes.each { |k, v| attributes[k] = v[1] }
end
data.update attributes
data.update_attributes attributes
end
# In conjunction with the included Comparable module, allows comparison of journal records

@ -35,13 +35,11 @@ class MenuItem < ActiveRecord::Base
serialize :options, Hash
validates :title,
presence: true,
uniqueness: { scope: %i[navigatable_id type], case_sensitive: true }
validates_presence_of :title
validates_uniqueness_of :title, scope: [:navigatable_id, :type]
validates :name,
presence: true,
uniqueness: { scope: %i[navigatable_id parent_id], case_sensitive: true }
validates_presence_of :name
validates_uniqueness_of :name, scope: [:navigatable_id, :parent_id]
def setting
if new_record?

@ -153,25 +153,21 @@ class Project < ActiveRecord::Base
author: nil,
datetime: :created_on
validates :name,
presence: true,
length: { maximum: 255 }
validates_presence_of :name, :identifier
# TODO: we temporarily disable this validation because it leads to failed tests
# it implicitly assumes a db:seed-created standard type to be present and currently
# neither development nor deployment setups are prepared for this
# validates_presence_of :types
validates :identifier,
presence: true,
uniqueness: { case_sensitive: true },
length: { maximum: IDENTIFIER_MAX_LENGTH },
exclusion: RESERVED_IDENTIFIERS
validates_uniqueness_of :identifier
validates_associated :repository, :wiki
validates_length_of :name, maximum: 255
validates_length_of :identifier, in: 1..IDENTIFIER_MAX_LENGTH
# starts with lower-case letter, a-z, 0-9, dashes and underscores afterwards
validates :identifier,
format: { with: /\A[a-z][a-z0-9\-_]*\z/ },
if: ->(p) { p.identifier_changed? }
# reserved words
validates_exclusion_of :identifier, in: RESERVED_IDENTIFIERS
friendly_id :identifier, use: :finders
@ -182,7 +178,7 @@ class Project < ActiveRecord::Base
where(["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s])
}
scope :public_projects, -> { where(is_public: true) }
scope :visible, ->(user = User.current) { merge(Project.visible_by(user)) }
scope :visible, ->(user = User.current) { Project.visible_by(user) }
scope :newest, -> { order(created_on: :desc) }
def visible?(user = User.current)
@ -277,7 +273,7 @@ class Project < ActiveRecord::Base
create_time_entry_activity_if_needed(activity_hash)
else
activity = project.time_entry_activities.find_by(id: id.to_i)
activity.update(activity_hash) if activity
activity.update_attributes(activity_hash) if activity
end
end

@ -43,7 +43,7 @@ class Queries::WorkPackages::Columns::PropertyColumn < Queries::WorkPackages::Co
project: {
association: 'project',
sortable: "name",
groupable: 'project_id'
groupable: true
},
subject: {
sortable: "#{WorkPackage.table_name}.subject"
@ -51,7 +51,7 @@ class Queries::WorkPackages::Columns::PropertyColumn < Queries::WorkPackages::Co
type: {
association: 'type',
sortable: "position",
groupable: 'type_id'
groupable: true
},
parent: {
association: 'ancestors_relations',
@ -62,35 +62,35 @@ class Queries::WorkPackages::Columns::PropertyColumn < Queries::WorkPackages::Co
association: 'status',
sortable: "position",
highlightable: true,
groupable: 'status_id'
groupable: true
},
priority: {
association: 'priority',
sortable: "position",
default_order: 'desc',
highlightable: true,
groupable: 'priority_id'
groupable: true
},
author: {
association: 'author',
sortable: ["lastname",
"firstname",
"id"],
groupable: 'author_id'
groupable: true
},
assigned_to: {
association: 'assigned_to',
sortable: ["lastname",
"firstname",
"id"],
groupable: 'assigned_to_id'
groupable: true
},
responsible: {
association: 'responsible',
sortable: ["lastname",
"firstname",
"id"],
groupable: 'responsible_id'
groupable: true
},
updated_at: {
sortable: "#{WorkPackage.table_name}.updated_at",
@ -99,13 +99,13 @@ class Queries::WorkPackages::Columns::PropertyColumn < Queries::WorkPackages::Co
category: {
association: 'category',
sortable: "name",
groupable: 'category_id'
groupable: true
},
fixed_version: {
association: 'fixed_version',
sortable: ["name"],
default_order: 'desc',
groupable: 'fixed_version_id'
groupable: true
},
start_date: {
# Put empty start_dates in the far future rather than in the far past

@ -188,7 +188,6 @@ class Query < ActiveRecord::Base
def add_short_filter(field, expression)
return unless expression
parms = expression.scan(/\A(o|c|!\*|!|\*)?(.*)\z/).first
add_filter field, (parms[0] || '='), [parms[1] || '']
end
@ -373,8 +372,9 @@ class Query < ActiveRecord::Base
end
# Returns the result set
def results
Results.new(self)
# Valid options are :order, :include, :conditions
def results(options = {})
Results.new(self, options)
end
# Returns the journals

@ -1,5 +1,4 @@
#-- encoding: UTF-8
#-- copyright
# OpenProject is a project management system.
# Copyright (C) 2012-2018 the OpenProject Foundation (OPF)
@ -33,7 +32,7 @@ module ::Query::Grouping
def work_package_count_by_group
@work_package_count_by_group ||= begin
if query.grouped?
r = group_counts_by_group
r = groups_grouped_by_column
transform_group_keys(r)
end
@ -46,58 +45,33 @@ module ::Query::Grouping
work_package_count_by_group[group]
end
private
def group_counts_by_group
work_packages_with_includes_for_count
.group(group_by_for_count)
.visible
.references(:statuses, :projects)
.where(query.statement)
.order(order_for_count)
.pluck(pluck_for_count)
.to_h
end
def work_packages_with_includes_for_count
def groups_grouped_by_column
# Rails will raise an (unexpected) RecordNotFound if there's only a nil group value
WorkPackage
.group(query.group_by_statement)
.visible
.includes(all_includes)
.joins(all_filter_joins)
end
def group_by_for_count
Array(query.group_by_statement).map { |statement| Arel.sql(statement) } +
[Arel.sql(group_by_sort(false))]
end
def pluck_for_count
Array(query.group_by_statement).map { |statement| Arel.sql(statement) } +
[Arel.sql('COUNT(DISTINCT "work_packages"."id")')]
end
def order_for_count
Arel.sql(group_by_sort)
.references(:statuses, :projects)
.where(query.statement)
.count
rescue ActiveRecord::RecordNotFound
{ nil => work_package_count }
end
def transform_group_keys(groups)
if query.group_by_column.is_a?(Queries::WorkPackages::Columns::CustomFieldColumn)
transform_custom_field_keys(groups)
else
transform_property_keys(groups)
end
end
column = query.group_by_column
def transform_custom_field_keys(groups)
custom_field = query.group_by_column.custom_field
if custom_field.list?
transform_list_custom_field_keys(custom_field, groups)
if column.is_a?(Queries::WorkPackages::Columns::CustomFieldColumn) && column.custom_field.list?
transform_list_group_by_keys(column.custom_field, groups)
elsif column.is_a?(Queries::WorkPackages::Columns::CustomFieldColumn)
transform_custom_field_keys(column.custom_field, groups)
else
transform_single_custom_field_keys(custom_field, groups)
groups
end
end
def transform_list_custom_field_keys(custom_field, groups)
def transform_list_group_by_keys(custom_field, groups)
options = custom_options_for_keys(custom_field, groups)
groups.transform_keys do |key|
@ -122,52 +96,25 @@ module ::Query::Grouping
custom_field.custom_options.find(keys.flatten.uniq).group_by { |o| o.id.to_s }
end
def transform_single_custom_field_keys(custom_field, groups)
def transform_custom_field_keys(custom_field, groups)
groups.transform_keys { |key| custom_field.cast_value(key) }
end
def transform_property_keys(groups)
association = WorkPackage.reflect_on_all_associations.detect { |a| a.name == query.group_by_column.name.to_sym }
if association
transform_association_property_keys(association, groups)
else
groups
end
end
def transform_association_property_keys(association, groups)
ar_keys = association.class_name.constantize.find(groups.keys)
groups.map do |key, value|
[ar_keys.detect { |ar_key| ar_key.id == key }, value]
end.to_h
end
# Returns the SQL sort order that should be prepended for grouping
def group_by_sort(order = true)
def group_by_sort_order
if query.grouped? && (column = query.group_by_column)
aliases = include_aliases
Array(column.sortable).map do |s|
direction = order ? order_for_group_by(column) : nil
aliased_group_by_sort_order(aliases[column.name], s, direction)
end.join(', ')
aliased_group_by_sort_order(s, order_for_group_by(column), aliases[column.name])
end.join(',')
end
end
def aliased_group_by_sort_order(alias_name, sortable, order = nil)
column = if alias_name
"#{alias_name}.#{sortable}"
else
sortable
end
if order
column + " #{order}"
def aliased_group_by_sort_order(sortable, order, alias_name)
if alias_name
"#{alias_name}.#{sortable} #{order}"
else
column
"#{sortable} #{order}"
end
end

@ -36,9 +36,12 @@ class ::Query::Results
include ::Query::Sums
include Redmine::I18n
attr_accessor :query
attr_accessor :options,
:query
def initialize(query)
# Valid options are :order, :include, :conditions
def initialize(query, options = {})
self.options = options
self.query = query
end
@ -57,6 +60,7 @@ class ::Query::Results
def work_packages
work_package_scope
.where(query.statement)
.where(options[:conditions])
.includes(all_includes)
.joins(all_joins)
.order(order_option)
@ -74,6 +78,7 @@ class ::Query::Results
def versions
scope = Version
.visible
.where(options[:conditions])
if query.project
scope.where(query.project_limiting_filter.where)
@ -83,7 +88,7 @@ class ::Query::Results
end
def order_option
order_option = [group_by_sort].reject(&:blank?).join(', ')
order_option = [group_by_sort_order].reject(&:blank?).join(', ')
if order_option.blank?
nil
@ -102,7 +107,8 @@ class ::Query::Results
def all_includes
(%i(status project) +
includes_for_columns(include_columns)).uniq
includes_for_columns(include_columns) +
(options[:include] || [])).uniq
end
def all_joins

@ -58,10 +58,9 @@ class Role < ActiveRecord::Base
acts_as_list
validates :name,
presence: true,
length: { maximum: 30 },
uniqueness: { case_sensitive: true }
validates_presence_of :name
validates_uniqueness_of :name
validates_length_of :name, maximum: 30
def self.givable
where(builtin: NON_BUILTIN)

@ -40,11 +40,9 @@ class Status < ActiveRecord::Base
before_destroy :delete_workflows
validates :name,
presence: true,
uniqueness: { case_sensitive: false },
length: { maximum: 30 }
validates_presence_of :name
validates_uniqueness_of :name
validates_length_of :name, maximum: 30
validates_inclusion_of :default_done_ratio, in: 0..100, allow_nil: true
after_save :unmark_old_default_value, if: :is_default?

@ -51,16 +51,16 @@ class ::Type < ActiveRecord::Base
join_table: "#{table_name_prefix}custom_fields_types#{table_name_suffix}",
association_foreign_key: 'custom_field_id'
belongs_to :color,
class_name: 'Color',
foreign_key: 'color_id'
belongs_to :color, class_name: 'Color',
foreign_key: 'color_id'
acts_as_list
validates :name,
presence: true,
uniqueness: { case_sensitive: true },
length: { maximum: 255 }
validates_presence_of :name
validates_uniqueness_of :name
validates_length_of :name,
maximum: 255,
unless: lambda { |e| e.name.blank? }
validates_inclusion_of :is_default, :is_milestone, in: [true, false]

@ -39,10 +39,9 @@ class Version < ActiveRecord::Base
VERSION_STATUSES = %w(open locked closed).freeze
VERSION_SHARINGS = %w(none descendants hierarchy tree system).freeze
validates :name,
presence: true,
uniqueness: { scope: [:project_id], case_sensitive: true }
validates_presence_of :name
validates_uniqueness_of :name, scope: [:project_id]
validates_length_of :name, maximum: 60
validates_format_of :effective_date, with: /\A\d{4}-\d{2}-\d{2}\z/, message: :not_a_date, allow_nil: true
validates_format_of :start_date, with: /\A\d{4}-\d{2}-\d{2}\z/, message: :not_a_date, allow_nil: true
validates_inclusion_of :status, in: VERSION_STATUSES

@ -35,7 +35,7 @@ module BasicData
end
builtin_roles.each do |attributes|
Role.find_by!(name: attributes[:name]).update(attributes)
Role.find_by!(name: attributes[:name]).update_attributes(attributes)
end
end
end

@ -34,8 +34,7 @@ class Authorization::AbstractQuery
def self.query(*args)
arel = transformed_query(*args)
model.unscoped
.joins(joins(arel))
model.joins(joins(arel))
.where(wheres(arel))
.distinct
end

@ -37,4 +37,4 @@ See docs/COPYRIGHT.rdoc for more details.
<% @page_header_title = l(:label_administration) %>
<%= render template: "layouts/base", locals: { menu_name: :admin_menu } %>
<%= render file: "layouts/base", locals: { menu_name: :admin_menu } %>

@ -27,4 +27,4 @@ See docs/COPYRIGHT.rdoc for more details.
++#%>
<%= render template: "layouts/base", locals: { menu_name: :my_menu } %>
<%= render file: "layouts/base", locals: { menu_name: :my_menu } %>

@ -27,4 +27,4 @@ See docs/COPYRIGHT.rdoc for more details.
++#%>
<%= render template: "layouts/base", locals: { menu_name: nil, current_menu_item: nil } %>
<%= render file: "layouts/base", locals: { menu_name: nil, current_menu_item: nil } %>

@ -42,7 +42,7 @@ class Scm::StorageUpdaterJob < ApplicationJob
repository = Repository.find @id
bytes = repository.scm.count_repository!
repository.update!(
repository.update_attributes!(
required_storage_bytes: bytes,
storage_updated_at: Time.now,
)

@ -0,0 +1,9 @@
coverage:
ignore:
- spec/factories/.*
- vendor/bundle/.*
status:
patch: false
project:
default: {}
comment: off

@ -173,10 +173,6 @@ module OpenProject
# Use SHA-1 instead of MD5 to generate non-sensitive digests, such as the ETag header.
Rails.application.config.active_support.use_sha1_digests = true
# This option is not backwards compatible with earlier Rails versions.
# It's best enabled when your entire app is migrated and stable on 6.0.
Rails.application.config.action_dispatch.use_cookies_with_metadata = true
# Make `form_with` generate id attributes for any generated HTML tags.
# Rails.application.config.action_view.form_with_generates_ids = true
@ -204,9 +200,6 @@ module OpenProject
config.action_controller.asset_host = OpenProject::Configuration::AssetHost.value
# Return false instead of self when enqueuing is aborted from a callback.
# Rails.application.config.active_job.return_false_on_aborted_enqueue = true
config.log_level = OpenProject::Configuration['log_level'].to_sym
def self.root_url

@ -1,10 +0,0 @@
development:
adapter: async
test:
adapter: test
production:
adapter: redis
url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
channel_prefix: open_project_production

@ -634,7 +634,7 @@ ar:
base: "خطأ عام:"
blocks_ids: ُعرِّفات مجموعات العمل المحظورة"
category: "الفئة"
comment: "تعليق"
comment: "التعليق"
comments: "تعليق"
content: "المحتوى"
color: "اللون"
@ -713,7 +713,7 @@ ar:
button_generate: "أنتج"
button_list: "القائمة"
button_lock: "إغلاق"
button_log_time: "وقت السجل"
button_log_time: "وقت التسجيل"
button_login: "تسجيل الدخول"
button_move: "نقل"
button_move_and_follow: "نقل ومتابعة"

@ -1022,7 +1022,7 @@ ca:
general_csv_encoding: "UTF-8"
general_csv_separator: ","
general_first_day_of_week: "7"
general_lang_name: "Anglès"
general_lang_name: "Català"
general_pdf_encoding: "ISO-8859-1"
general_text_no: "no"
general_text_yes: "sí"

@ -697,7 +697,7 @@ da:
button_generate: "Generér"
button_list: "Liste"
button_lock: "Lås"
button_log_time: "Tidsregistrering"
button_log_time: "Registrér tid"
button_login: "Log ind"
button_move: "Flyt"
button_move_and_follow: "Flyt og følg"
@ -1214,7 +1214,7 @@ da:
label_duplicated_by: "duplikeret gennem"
label_duplicate: "duplicate"
label_duplicates: "dubletter"
label_edit: "Rediger"
label_edit: "Redigér"
label_enable_multi_select: "Vælg multivalg"
label_enabled_project_custom_fields: 'Aktiverede brugerdefinerede felter'
label_enabled_project_modules: 'Aktiverede moduler'

@ -340,7 +340,7 @@ de:
activity: "Aktivität"
hours: "Stunden"
spent_on: "Datum"
type: "Typ"
type: "Art"
type:
description: "Standardtext für Beschreibung"
attribute_groups: ''
@ -393,13 +393,13 @@ de:
spent_time: "Aufgewendete Zeit"
subproject: "Unterprojekt"
time_entries: "Zeit buchen"
type: "Typ"
type: "Art"
watcher: "Beobachter"
'doorkeeper/application':
uid: "Client-ID"
secret: "Clientschlüssel"
owner: "Besitzer"
redirect_uri: "Weiterleitungs-URI"
redirect_uri: "Redirect URI"
client_credentials_user_id: "Client Credentials User-ID"
scopes: "Geltungsbereiche"
confidential: "Vertraulich"
@ -443,7 +443,7 @@ de:
too_long: "ist zu lang (nicht mehr als %{count} Zeichen)."
too_short: "ist zu kurz (nicht weniger als %{count} Zeichen)."
unchangeable: "kann nicht geändert werden."
unremovable: "ann nicht entfernt werden."
unremovable: "kann nicht entfernt werden."
wrong_length: "hat die falsche Länge (muss genau %{count} Zeichen haben)."
models:
custom_field:
@ -460,10 +460,10 @@ de:
attributes:
redirect_uri:
fragment_present: 'kann kein Fragment enthalten.'
invalid_uri: 'muss ein gültiger URI sein.'
relative_uri: 'muss ein absoluter URI sein.'
secured_uri: 'muss ein HTTPS/SSL-URI sein.'
forbidden_uri: 'ist vom Server verboten.'
invalid_uri: 'muss eine gültige URI sein.'
relative_uri: 'muss eine absolute URI sein.'
secured_uri: 'muss eine HTTPS/SSL-URI sein.'
forbidden_uri: 'ist vom Server nicht erlaubt.'
scopes:
not_match_configured: "stimmt nicht mit verfügbaren Geltungsbereichen überein."
enterprise_token:
@ -593,7 +593,7 @@ de:
role:
one: "Rollen"
other: "Rollen"
type: "Typ"
type: "Art"
user: "Benutzer"
version: "Version"
wiki: "Wiki"
@ -655,7 +655,7 @@ de:
subject: "Thema"
summary: "Zusammenfassung"
title: "Titel"
type: "Typ"
type: "Art"
updated_at: "Aktualisiert am"
updated_on: "Aktualisiert am"
user: "Benutzer"
@ -674,7 +674,7 @@ de:
button_change_password: "Kennwort ändern"
button_check_all: "Alle auswählen"
button_clear: "Zurücksetzen"
button_click_to_reveal: "Klicke um anzuzeigen"
button_click_to_reveal: "Klicke, um anzuzeigen"
button_close: 'Schließen'
button_collapse_all: "Alle zuklappen"
button_configure: "Konfigurieren"
@ -1266,7 +1266,7 @@ de:
label_history: "Historie"
label_hierarchy_leaf: "Hierarchie-Blatt"
label_home: "Hauptseite"
label_subject_or_id: "Betreff oder ID"
label_subject_or_id: "Titel oder ID"
label_impressum: "Impressum"
label_in: "an"
label_in_less_than: "in weniger als"
@ -2146,7 +2146,7 @@ de:
text_work_package_category_destroy_assignments: "Kategorie-Zuordnung entfernen"
text_work_package_category_destroy_question: "Einige Arbeitspakete (%{count}) sind dieser Kategorie zugeordnet. Was möchten Sie tun?"
text_work_package_category_reassign_to: "Arbeitspakete dieser Kategorie zuordnen"
text_work_package_updated: "Arbeitspaket %{id} wurde von %{author} aktualisiert."
text_work_package_updated: "Arbeitspaket %{id} wurde aktualisiert von %{author}."
text_work_package_watcher_added: "Sie wurden von %{watcher_setter} als Beobachter für das Arbeitspaket %{id} eingetragen."
text_work_packages_destroy_confirmation: "Sind Sie sicher, dass Sie die ausgewählten Arbeitspakete löschen möchten?"
text_work_packages_ref_in_commit_messages: "Arbeitspaket-Beziehungen und -Status in Commit-Log-Meldungen"
@ -2263,7 +2263,7 @@ de:
default: "Standard"
column:
assigned_to: "Zugewiesen an"
type: "Typ"
type: "Art"
due_date: "Abschlussdatum"
name: "Name"
status: "Status"
@ -2488,9 +2488,9 @@ de:
messages:
invalid_request: 'Der Anfrage fehlt ein benötigten Parameter, enthält einen nicht unterstützten Parameter oder ist anderweitig fehlerhaft.'
invalid_redirect_uri: "Der angeforderte Redirect-URI ist fehlerhaft."
unauthorized_client: 'Der Kunde ist nicht berechtigt, diese Anfrage mit dieser Methode auszuführen.'
access_denied: 'Der Ressourcenbesitzer oder Autorisierungsserver verweigerte die Anfrage.'
invalid_scope: 'Der angeforderte Anwendungsbereich ist ungültig, unbekannt oder fehlerhaft.'
unauthorized_client: 'Der Client ist nicht berechtigt, einen Request mit dieser Methode durchzuführen.'
access_denied: 'Der Autorisierungsserver verweigerte die Anfrage.'
invalid_scope: 'Der angeforderte Geltungsbereich ist ungültig, unbekannt oder fehlerhaft.'
invalid_code_challenge_method: 'Die Code-Challenge-Methode muss PLAIN oder S256 sein.'
server_error: 'Der Autorisierungsserver kann den Request aufgrund eines Fehlers nicht beantworten.'
temporarily_unavailable: 'Der Autorisierungsserver kann die Anfrage derzeit aufgrund einer temporären Überlastung oder Wartung des Servers nicht bearbeiten.'
@ -2531,7 +2531,7 @@ de:
authorization_dialog:
authorize: "Autorisieren"
cancel: "Autorisierung abbrechen und verweigern."
prompt_html: "Autorisiere <strong>%{application_name}</strong> dein Konto <em>%{login}</em> zu verwenden?"
prompt_html: "Zugriff auf den Account <em>%{login}</em> durch <strong>%{application_name}</strong> gewähren?"
title: "Autorisiere %{application_name}"
wants_to_access_html: >
Diese Anwendung bittet um Zugriff auf Ihr OpenProject-Konto. <br/> <strong>Es hat folgende Berechtigungen angefordert:</strong>
@ -2539,10 +2539,10 @@ de:
api_v3: "Vollständiger API-Zugriff"
api_v3_text: "Die Anwendung erhält vollen Lese- und Schreibzugriff auf die OpenProject-API, um Aktionen in Ihrem Namen durchzuführen."
grants:
created_date: "Genehmigt am"
created_date: "Genehmigt"
scopes: "Berechtigungen"
successful_application_revocation: "Widerrufen von %{application_name} erfolgreich."
none_given: "Es wurde keiner OAuth-Anwendung Zugriff auf Ihr Benutzerkonto gewährt."
none_given: "Keine OAuth-Anwendung erhalten Zugriff auf Ihr Benutzerkonto."
x_active_tokens:
one: 'ein aktiver Token'
other: '%{count} aktive Token'
@ -2553,7 +2553,7 @@ de:
client_credentials_impersonation_set_to: "Client Credentials User-ID gesetzt auf"
client_credentials_impersonation_warning: "Hinweis: Clients, die den 'Client-Credentials' Anmeldefluss in dieser Anwendung verwenden, erhalten die Rechte dieses Benutzers"
client_credentials_impersonation_html: >
Standardmäßig bietet OpenProject OAuth 2.0 Autorisierung via %{authorization_code_flow_link}. Sie können optional %{client_credentials_flow_link} aktivieren, aber Sie müssen einen Benutzer angeben, auf dessen Namen Anfragen ausgeführt werden.
Standardmäßig bietet OpenProject OAuth 2.0 Autorisierung via %{authorization_code_flow_link}. Sie können optional %{client_credentials_flow_link} aktivieren, aber Sie müssen einen Benutzer angeben, in dessen Namen Anfragen ausgeführt werden.
authorization_error: "Ein Autorisierungsfehler ist aufgetreten."
revoke_my_application_confirmation: "Möchtest du diese Anwendung wirklich entfernen? Dies wird %{token_count} aktive Token für sie widerrufen."
revoke_my_application_confirmation: "Möchten Sie diese Anwendung wirklich entfernen? Dies wird %{token_count} aktive Token widerrufen."
my_registered_applications: "Registrierte OAuth-Anwendungen"

@ -259,7 +259,7 @@ hu:
attachment_file_name: "Melléklet fájl neve"
downloads: "Letöltés"
file: "Fájl"
filename: "Fájl"
filename: "File"
filesize: "Méret"
attribute_help_text:
attribute_name: 'Attribútum'
@ -577,7 +577,7 @@ hu:
one: "1 hiba miatt nem menthető a következő: %{model}"
other: "%{count} hiba miatt nem menthető a következő: %{model}"
models:
attachment: "Fájl"
attachment: "File"
attribute_help_text: "Attribútum-súgószöveg"
forum: "Fórum"
comment: "Vélemény"
@ -616,7 +616,7 @@ hu:
base: "Általános hiba:"
blocks_ids: "Lezárt munkacsomagok azonosítója"
category: "Kategória"
comment: "Vélemény"
comment: "Komment"
comments: "Vélemény"
content: "Tartalom"
color: "Szín"
@ -695,7 +695,7 @@ hu:
button_generate: "Generálás"
button_list: "Lista"
button_lock: "Tilt"
button_log_time: "Eltöltött idő rögzítése"
button_log_time: "Idő naplózása"
button_login: "Bejelentkezés"
button_move: "Mozgatás"
button_move_and_follow: "Mozgatés és a következő"
@ -1242,7 +1242,7 @@ hu:
label_file_added: "Fájl hozzáadva"
label_file_plural: "Fájlok"
label_filter_add: "Szűrő hozzáadása"
label_filter_plural: "Szürő"
label_filter_plural: "Szűrők"
label_filters_toggle: "Szűrők mutatása/elrejtése"
label_float: "Mozgó"
label_folder: "Mappa"
@ -2229,8 +2229,8 @@ hu:
delete_thing: "Törlés"
duration: "Időtartam"
duration_days:
one: "1 napja"
other: "%{count} napja"
one: "%{count} nap"
other: "%{count} nap"
edit_color: "Színek szerkesztése"
edit_thing: "Szerkesztés"
edit_timeline: "A %{timeline} ütemterv jelentés szerkesztése"

@ -692,7 +692,7 @@ id:
button_generate: "Generate"
button_list: "List"
button_lock: "Lock"
button_log_time: "Catatan waktu"
button_log_time: "Log waktu"
button_login: "Login"
button_move: "Pindahkan"
button_move_and_follow: "Pindahkan dan amati"

@ -444,7 +444,7 @@ it:
too_long: "è troppo lungo (il massimo è %{count} caratteri)."
too_short: "è troppo breve (il minimo è %{count} caratteri)."
unchangeable: "non può essere modificato."
unremovable: "impossibile rimuovere."
unremovable: "non può essere rimosso."
wrong_length: "è della lunghezza sbagliata (dovrebbe essere %{count} caratteri)."
models:
custom_field:
@ -696,7 +696,7 @@ it:
button_generate: "Genera"
button_list: "Elenca"
button_lock: "Blocca"
button_log_time: "Registra l'orario effettuato"
button_log_time: "Registra tempi"
button_login: "Accedi"
button_move: "Sposta"
button_move_and_follow: "Sposta e segui"

@ -397,7 +397,7 @@ ja:
'doorkeeper/application':
uid: "クライアントID"
secret: "秘密鍵"
owner: "オーナー"
owner: "所有者"
redirect_uri: "リダイレクトURI"
client_credentials_user_id: "クライアント資格情報ユーザーID"
scopes: "範囲"
@ -670,7 +670,7 @@ ja:
button_change_password: "パスワードの変更"
button_check_all: "全てを選択"
button_clear: "クリア"
button_click_to_reveal: "クリックして明らかにする"
button_click_to_reveal: "明らかにするためにクリック"
button_close: '閉じる'
button_collapse_all: "全てを折りたたむ"
button_configure: "設定"

@ -232,7 +232,7 @@ ar:
label_filesize: "حجم"
label_greater_or_equal: "=<"
label_group: 'مجموعة'
label_group_by: "مجموعة من"
label_group_by: "تصنيف حسب"
label_hide_attributes: "أظهِر أقل"
label_hide_column: "إخفاء العمود"
label_hide_project_menu: "Collapse project menu"
@ -686,7 +686,7 @@ ar:
query:
column_names: "الأعمدة"
group_by: "نتائج المجموعة حسب"
group: "مجموعة من"
group: "تصنيف حسب"
group_by_disabled_by_hierarchy: "Group by is disabled due to the hierarchy mode being active."
hierarchy_disabled_by_group_by: "Hierarchy mode is disabled due to results being grouped by %{column}."
sort_ascending: "ترتيب تصاعدي"

@ -384,7 +384,7 @@ da:
click_to_switch_context: 'Open this work package in that project.'
autocompleter:
label: 'Project autocompletion'
text_are_you_sure: "Er du sikker?"
text_are_you_sure: "Sikker?"
types:
attribute_groups:
error_duplicate_group_name: "The name %{group} is used more than once. Group names must be unique."

@ -231,11 +231,11 @@ de:
label_filesize: "Größe"
label_greater_or_equal: ">="
label_group: 'Gruppe'
label_group_by: "Gruppiere Ergebnisse"
label_group_by: "Gruppieren nach"
label_hide_attributes: "Weniger anzeigen"
label_hide_column: "Spalte ausblenden"
label_hide_project_menu: "Projektmenü einklappen"
label_in: "an"
label_in: "in"
label_in_less_than: "in weniger als"
label_in_more_than: "in mehr als"
label_import: "Import"
@ -357,7 +357,7 @@ de:
drag: 'Ziehen Sie Ihre Karten in eine Liste, um diese zu sortieren oder weisen Sie diese einer anderen Liste zu. Ein Doppelklick auf eine Karte öffnet die Detailansicht.'
wp:
toggler: "Hier sind die <b>Arbeitspakete</b>, die Ihnen eine detailliertere Sicht auf die Arbeit in Ihrem Projekt geben."
list: 'Dies ist die Liste der wichtigen <b>Arbeitspakete</b> in Ihrem Projekt, z.B. Aufgaben, Funktionen, Meilensteine, Fehler, und Vieles mehr. <br> Sie können neue Arbeitspakete direkt in der Liste anlegen und bearbeiten. Ein Doppelklick auf die Zeile öffnet die Detailansicht.'
list: 'Dies ist die Liste der wichtigen <b>Arbeitspakete</b> in Ihrem Projekt, z.B. Aufgaben, Funktionen, Meilensteine, Fehler, und Vieles mehr. <br> Sie können neue Arbeitspakete direkt in der Liste anlegen und bearbeiten. Ein Doppelklick auf die Zeile öffnet die Detailansicht.'
full_view: 'In der <b>Arbeitspaket-Detailansicht</b> finden Sie alle wichtigen Informationen, wie Beschreibung, Status und Priorität, Aktivitäten, Abhängigkeiten oder Kommentare.'
back_button: 'Mit dem Pfeil kommen Sie zurück in die Listenansicht.'
create_button: 'Mit <b>Anlegen</b> Können Sie neue Arbeitspakete Ihrem Projekt hinzufügen.'
@ -465,7 +465,7 @@ de:
abort: "Abbrechen"
relations_autocomplete:
placeholder: "Suchbegriff eintippen"
parent_placeholder: "Wählen Sie einen neuen Teil oder drücken sie Escape, um abzubrechen."
parent_placeholder: "Wählen Sie ein neues Eltern-Arbeitspaket oder drücken Sie Escape, um abzubrechen."
repositories:
select_tag: 'Tag auswählen'
select_branch: 'Branch auswählen'
@ -655,7 +655,7 @@ de:
status: "Status"
subject: "Thema"
title: "Titel"
type: "Typ"
type: "Art"
updatedAt: "Aktualisiert am"
versionName: "Version"
version: "Version"
@ -677,7 +677,7 @@ de:
query:
column_names: "Spalten"
group_by: "Gruppiere Ergebnisse nach"
group: "Gruppiere Ergebnisse"
group: "Gruppieren nach"
group_by_disabled_by_hierarchy: "Die Gruppierung ist deaktiviert, da der Hierarchie-Modus aktiv ist."
hierarchy_disabled_by_group_by: "Der Hierarchie-Modus ist deaktiviert da die Ergebnisse nach %{column} gruppiert sind."
sort_ascending: "Sortiere aufsteigend"
@ -726,7 +726,7 @@ de:
entire_row_by: 'Gesamte Zeile durch'
status: 'Status'
priority: 'Priorität'
type: 'Typ'
type: 'Art'
sorting_mode:
description: 'Wählen Sie den Sortiermodus für Arbeitspakete aus:'
automatic: 'Automatisch'
@ -788,7 +788,7 @@ de:
has_children: "Dieses Arbeitspaket hat %{childUnits}:"
confirm_deletion_children: "Ich bestätige, dass alle untergordneten Elemente der hier aufgeführten Arbeitspakete rekursiv entfernt werden."
deletes_children: "Alle untergeordneten Arbeitspaketen und deren Nachkommen werden auch rekursiv gelöscht."
notice_no_results_to_display: "Keine sichtbaren Ergebnisse."
notice_no_results_to_display: "Keine sichtbaren Ergebnisse anzuzeigen."
notice_successful_create: "Erfolgreich angelegt."
notice_successful_delete: "Erfolgreich gelöscht."
notice_successful_update: "Erfolgreich aktualisiert."
@ -825,7 +825,7 @@ de:
one: "ein untergeordnetes Arbeitspaket"
other: "%{count} untergeordnete Arbeitspakete"
hour:
one: "%{count} h"
one: "1 h"
other: "%{count} h"
zen_mode:
button_activate: 'Zen-Modus aktivieren'

@ -24,7 +24,7 @@ fil:
button_check_all: "Suriin lahat"
button_configure-form: "Configure form"
button_confirm: "Kumpirmahin"
button_continue: "Ipagpatuloy"
button_continue: "Magpatuloy"
button_copy: "Kopyahin"
button_custom-fields: "Mga pasadyang patlang"
button_delete: "Burahin"

@ -227,11 +227,11 @@ hu:
label_expand_all: "Az összes kibontása"
label_expand_project_menu: "Project menü kibontása"
label_export: "Exportálás"
label_filename: "Fájl"
label_filename: "File"
label_filesize: "Méret"
label_greater_or_equal: ">="
label_group: 'Csoport'
label_group_by: "Csoportosítás"
label_group_by: "Csoportosítás a következők szerint"
label_hide_attributes: "Kevesebb mutatása"
label_hide_column: "Oszlop elrejtése"
label_hide_project_menu: "Projekt menü összecsukás"
@ -677,7 +677,7 @@ hu:
query:
column_names: "Oszlopok"
group_by: "Csoport szintű eredmények"
group: "Csoportosítás"
group: "Csoportosítás a következők szerint"
group_by_disabled_by_hierarchy: "A csoportosítás le van tiltva, mivel a hierarchia mód aktív."
hierarchy_disabled_by_group_by: "A hierarchia mód le van tiltva az eredmények csoportosítása e-szerint %{column}."
sort_ascending: "Növekvő sorrend"

@ -24,7 +24,7 @@ id:
button_check_all: "Cek semua"
button_configure-form: "Mengkonfigurasi formulir"
button_confirm: "Konfirmasi"
button_continue: "Lanjutkan"
button_continue: "Lanjut"
button_copy: "Salin"
button_custom-fields: "Isian kustom"
button_delete: "Hapus"
@ -232,7 +232,7 @@ id:
label_filesize: "Size"
label_greater_or_equal: ">="
label_group: 'Grup'
label_group_by: "Pengelompokan"
label_group_by: "Grup oleh"
label_hide_attributes: "Show less"
label_hide_column: "Sembunyikan kolom"
label_hide_project_menu: "Collapse project menu"
@ -385,7 +385,7 @@ id:
click_to_switch_context: 'Buka paket kerja ini dalam proyek tersebut.'
autocompleter:
label: 'Penyelesaian Proyek secara otomatis'
text_are_you_sure: "Anda yakin?"
text_are_you_sure: "Apakah anda yakin?"
types:
attribute_groups:
error_duplicate_group_name: "Nama %{group} digunakan lebih dari satu kali. Nama grup harus unik."
@ -676,7 +676,7 @@ id:
query:
column_names: "Kolom"
group_by: "Group"
group: "Pengelompokan"
group: "Grup oleh"
group_by_disabled_by_hierarchy: "Pengelompokan dengan, dinonaktifkan sehubungan dengan modus hirarki menjadi aktif."
hierarchy_disabled_by_group_by: "Modus hirarki dinonaktifkan sehubungan dengan hasil yang dikelompokkan menurut %{column}."
sort_ascending: "Urutkan askending"

@ -198,9 +198,9 @@ it:
label_ascending: "Crescente"
label_author: "Autore: %{user}"
label_between: "tra"
label_board: "Scheda"
label_board: "Tabellone"
label_board_locked: "Chiuso"
label_board_plural: "Schede"
label_board_plural: "Tabelloni"
label_board_sticky: "In evidenza"
label_create: "Crea"
label_create_work_package: "Crea una nuova macro-attività"
@ -385,7 +385,7 @@ it:
click_to_switch_context: 'Apri questa macro-attività nel progetto.'
autocompleter:
label: 'Autocompletamento del progetto'
text_are_you_sure: "Sei sicuro?"
text_are_you_sure: "Sei sicuro/a?"
types:
attribute_groups:
error_duplicate_group_name: "Il nome %{group} è usato più di una volta. I nomi dei gruppi devono essere univoci."
@ -827,7 +827,7 @@ it:
other: "%{count} macro-attività subordinate"
hour:
one: "1 o"
other: "%{count} h"
other: "%{count} o"
zen_mode:
button_activate: 'Attiva modalità zen'
button_deactivate: 'Disattiva modalità zen'

@ -24,7 +24,7 @@ nl:
button_check_all: "Selecteer alles"
button_configure-form: "Formulier configureren"
button_confirm: "Accepteren"
button_continue: "Verdergaan"
button_continue: "Ga verder"
button_copy: "Kopieer"
button_custom-fields: "Aangepaste velden"
button_delete: "Verwijderen"

@ -24,7 +24,7 @@
button_check_all: "Velg alle"
button_configure-form: "Configure form"
button_confirm: "Bekreft"
button_continue: "Fortsette"
button_continue: "Fortsett"
button_copy: "Kopier"
button_custom-fields: "Egendefinerte felter"
button_delete: "Slett"

@ -24,7 +24,7 @@ pl:
button_check_all: "Zaznacz wszystko"
button_configure-form: "Skonfiguruj formularz"
button_confirm: "Potwierdź"
button_continue: "Dalej"
button_continue: "Kontynuuj"
button_copy: "Kopiuj"
button_custom-fields: "Pola niestandardowe"
button_delete: "Usuń"
@ -385,7 +385,7 @@ pl:
click_to_switch_context: 'Otwórz ten pakiet roboczy w tym projekcie.'
autocompleter:
label: 'Autouzupełnianie projektu'
text_are_you_sure: "Jesteś pewien?"
text_are_you_sure: "Jesteś pewny?"
types:
attribute_groups:
error_duplicate_group_name: "Nazwa %{group} jest użyta więcej niż raz. Nazwy grup muszą być unikalne."

@ -349,7 +349,7 @@ pt-BR:
overview: "Gerencie seu trabalho na visão de <b>Backlogs</b>.<br> À direita você possui o Backlog do produto ou um Backlog de Bug, à esquerda você terá sprints respectivos. Aqui você pode criar <b>épicos, histórias de usuários e bugs</b>, priorizar através de arrastar e soltar e adicioná-los a um sprint."
task_board_arrow: 'Para visualizar seu <b>Quadro de tarefas</b>, abra o menu suspenso de Sprint...'
task_board_select: '... e selecione <b>Quadro de tarefas</b>.'
task_board: "O <b>Quadro de tarefas</b> visualiza o progresso do sprint. Adicione novas tarefas ou impedimentos com o + ícone ao lado de uma história de usuário. Arrastando e soltando você pode atualizar o status."
task_board: "O <b>Quadro de tarefas</b> visualiza o progresso do sprint. Adicione novas tarefas ou impedimentos com o + ícone ao lado de uma história de usuário. Arrastando e soltando você pode atualizar a situação."
boards:
overview: 'Gerencie seu trabalho através de uma visão intuitiva de <b>Quadros</b>.'
lists: 'Você pode criar várias listas (colunas) dentro de uma visão de um quadro, por exemplo, para criar um quadro KANBAN.'
@ -358,7 +358,7 @@ pt-BR:
wp:
toggler: "Agora vamos dar uma olhada na seção <b>Pacotes de trabalho</b>, que lhe fornece uma visão mais detalhada do seu trabalho."
list: 'Esta é a lista de <b>Pacotes de trabalho</b> com o trabalho importante dentro de seu projeto, tais como tarefas, recursos, marcos, bugs e muito mais. <br>Você pode criar ou editar um pacote de trabalho diretamente dentro desta lista. Para ver seus detalhes você pode clicar duas vezes em uma linha.'
full_view: 'Nos <b>detalhes do pacote de trabalho</b> você encontra todas as informações pertinentes, tais como descrição, estado e prioridade, atividades, dependências ou comentários.'
full_view: 'Nos <b>detalhes do pacote de trabalho</b> você encontra todas as informações pertinentes, tais como descrição, situação e prioridade, atividades, dependências ou comentários.'
back_button: 'Com a seta você pode navegar de volta para a lista de pacotes de trabalho.'
create_button: 'O botão <b>Criar</b> irá adicionar um novo pacote de trabalho ao seu projeto.'
timeline_button: 'Você pode ativar o <b>gráfico de Gantt</b> para criar uma linha do tempo para o seu projeto.'
@ -482,13 +482,13 @@ pt-BR:
other: "Você pode selecionar somente {{limit}} itens"
project_menu_details: "Detalhes"
sort:
sorted_asc: 'Classificação crescente aplicada, '
sorted_asc: 'Ordenação crescente aplicada, '
sorted_dsc: 'Ordenação decrescente aplicada, '
sorted_no: 'Sem classificação aplicada, '
sorting_disabled: 'a classificação está desativada'
activate_asc: 'ative para aplicar uma classificação crescente'
sorted_no: 'Sem ordenação aplicada, '
sorting_disabled: 'ordenação está desativada'
activate_asc: 'ative para aplicar ordenação decrescente'
activate_dsc: 'ative para aplicar ordenação decrescente'
activate_no: 'ative para remover a classificação'
activate_no: 'ative para remover a ordenação'
text_work_packages_destroy_confirmation: "Tem certeza que deseja excluir o(s) pacote(s) de trabalho selecionado(s)?"
text_query_destroy_confirmation: "Tem certeza que deseja excluir a visão selecionada?"
text_attachment_destroy_confirmation: "Tem certeza de que deseja excluir o anexo?"
@ -638,7 +638,7 @@ pt-BR:
estimatesAndTime: "Estimativas e Tempo"
other: "Outro"
properties:
assignee: "Atribuído para"
assignee: "Atribuição"
author: "Autor"
createdAt: "Criado em"
description: "Descrição"
@ -652,7 +652,7 @@ pt-BR:
projectName: "Projeto"
responsible: "Responsável"
startDate: "Data de início"
status: "Status"
status: "Situação"
subject: "Assunto"
title: "Título"
type: "Tipo"
@ -724,7 +724,7 @@ pt-BR:
inline: 'Atributo(s) destacado(s)'
inline_all: 'Todos atributos'
entire_row_by: 'Toda linha por'
status: 'Status'
status: 'Situação'
priority: 'Prioridade'
type: 'Tipo'
sorting_mode:

@ -56,9 +56,9 @@ pt:
card:
add_new: 'Adicionar novo cartão'
highlighting:
inline: 'Destaque em linha:'
inline: 'Destacar inline:'
entire_card_by: 'Cartão inteiro por'
remove_from_list: 'Eliminar cartão da lista'
remove_from_list: 'Apagar cartão da lista'
clipboard:
browser_error: "O seu navegador não suporta o copiar para a área de transferência. Por favor, copie manualmente o texto selecionado."
copied_successful: "Copiado com sucesso para área de transferência!"

@ -186,7 +186,7 @@ ru:
label_add_comment: "Добавить комментарий"
label_add_comment_title: "Комментарий и тип @ для уведомления других людей"
label_add_row_after: "Добавить строку после"
label_add_row_before: "Добавить строку до"
label_add_row_before: "Добавить строку перед"
label_add_selected_columns: "Добавить выбранные столбцы"
label_added_by: "Добавил(-а)"
label_added_time_by: "Добавил(-а) %{author} %{age}"
@ -323,7 +323,7 @@ ru:
label_add_description: "Добавить описание для %{file}"
label_upload_notification: "Загрузка файлов..."
label_work_package_upload_notification: "Загрузка файлов для пакета работ #%{id}: %{subject}"
label_wp_id_added_by: "#%{id} добавил(а) %{author}"
label_wp_id_added_by: "#%{id} добавлен %{author}"
label_files_to_upload: "Эти файлы будут загружены:"
label_rejected_files: "Эти файлы не могут быть загружены:"
label_rejected_files_reason: "Эти файлы не могут быть загружены, как их размер больше, чем %{maximumFilesize}"
@ -384,7 +384,7 @@ ru:
click_to_switch_context: 'Открыть пакет работ в этом проекте.'
autocompleter:
label: 'Автоматическое завершение проекта'
text_are_you_sure: "Вы уверены?"
text_are_you_sure: "Уверены?"
types:
attribute_groups:
error_duplicate_group_name: "Имя %{group} используется более одного раза. Имена групп должны быть уникальными."

@ -232,7 +232,7 @@ zh-CN:
label_filesize: "大小"
label_greater_or_equal: ">="
label_group: '组'
label_group_by: "分组依据"
label_group_by: "分组按照"
label_hide_attributes: "隐藏显示"
label_hide_column: "隐藏列"
label_hide_project_menu: "折叠项目菜单"
@ -676,7 +676,7 @@ zh-CN:
query:
column_names: "列"
group_by: "汇总结果根据"
group: "分组依据"
group: "分组按照"
group_by_disabled_by_hierarchy: "分组依据已禁用,因为层次结构模式处于活动状态。"
hierarchy_disabled_by_group_by: "层次结构模式已禁用,因为结果依据 %{column} 分组。"
sort_ascending: "升序排序"

@ -705,7 +705,7 @@ lt:
button_generate: "Generuoti"
button_list: "Sąrašas"
button_lock: "Užrakinti"
button_log_time: "Registruoti laiką"
button_log_time: "Vesti į žurnalą laiką"
button_login: "Prisijungti"
button_move: "Perkelti"
button_move_and_follow: "Perkelti ir sekti"

@ -618,7 +618,7 @@ nl:
base: "Algemene fout:"
blocks_ids: "It's van geblokkeerde werkpakketten"
category: "Categorie"
comment: "Commentaar"
comment: "Reactie"
comments: "Commentaar"
content: "Inhoud"
color: "Kleur"

@ -609,7 +609,7 @@ pl:
wiki: "Wiki"
wiki_page: "Strona wiki"
workflow: "Przepływ pracy"
work_package: "Zadanie"
work_package: "Pakiet roboczy"
'doorkeeper/application': "Aplikacje OAuth"
errors:
header_invalid_fields: "Wystąpił problem z następującymi polami:"
@ -626,7 +626,7 @@ pl:
base: "Błąd ogólny:"
blocks_ids: "Identyfikatory zablokowanych pakietów roboczych"
category: "Kategoria"
comment: "Komentarz"
comment: "Typ kosztu"
comments: "Komentarz"
content: "Zawartość"
color: "Kolor"
@ -1054,7 +1054,7 @@ pl:
general_csv_encoding: "UTF-8"
general_csv_separator: "."
general_first_day_of_week: "7"
general_lang_name: "Angielski"
general_lang_name: "Polski"
general_pdf_encoding: "ISO-8859-2"
general_text_no: "nie"
general_text_yes: "tak"
@ -1246,7 +1246,7 @@ pl:
label_duplicated_by: "Powielone przez"
label_duplicate: "duplikat"
label_duplicates: "Duplikaty"
label_edit: "Edycja"
label_edit: "Edytuj"
label_enable_multi_select: "Włącz wybór wielokrotny"
label_enabled_project_custom_fields: 'Aktywne pola niestandardowe'
label_enabled_project_modules: 'Aktywne moduły'
@ -1340,7 +1340,7 @@ pl:
label_loading: "Ładowanie..."
label_lock_user: 'Zablokuj użytkownika'
label_logged_as: "Zalogowany jako"
label_login: "Zaloguj"
label_login: "Logowanie"
label_custom_logo: "Własne logo"
label_custom_favicon: "Własny favicon"
label_custom_touch_icon: "Własny touch icon"
@ -2591,8 +2591,8 @@ pl:
none_given: "Żadnym aplikacjom OAuth nie udzielono dostępu do tego konta użytkownika."
x_active_tokens:
one: 'jeden aktywny token'
few: '%{count} aktywne tokeny'
many: '%{count} active token'
few: '%{count} aktywnych tokenów'
many: '%{count} aktywnych tokenów'
other: '%{count} aktywnych tokenów'
flows:
authorization_code: "Przepływ Kod autoryzacji"

@ -610,7 +610,7 @@ pt-BR:
updated: "Atualizado: %{title}"
attributes:
active: "Ativo"
assigned_to: "Atribuído para"
assigned_to: "Atribuição"
assignee: "Atribuído para"
attachments: "Anexos"
author: "Autor"
@ -696,7 +696,7 @@ pt-BR:
button_generate: "Gerar"
button_list: "Lista"
button_lock: "Bloquear"
button_log_time: "Registro de tempo"
button_log_time: "Registrar tempo"
button_login: "Fazer login"
button_move: "Mover"
button_move_and_follow: "Mover e seguir"
@ -2263,7 +2263,7 @@ pt-BR:
date: "data"
default: "padrão"
column:
assigned_to: "Atribuído para"
assigned_to: "Atribuição"
type: "Tipo"
due_date: "Data de término"
name: "Nome"

@ -618,7 +618,7 @@ pt:
base: "Erro geral:"
blocks_ids: "Identificações de pacotes de trabalho bloqueados"
category: "Categoria"
comment: "Comentario"
comment: "Comentário"
comments: "Comentario"
content: "Conteúdo"
color: "Cor"
@ -697,7 +697,7 @@ pt:
button_generate: "Gerar"
button_list: "Lista"
button_lock: "Bloquear"
button_log_time: "Tempo de registro"
button_log_time: "Hora de registo"
button_login: "Iniciar sessão"
button_move: "Mover"
button_move_and_follow: "Mover e seguir"

@ -110,10 +110,10 @@ ru:
delete:
scheduled: "Удаление было запланировано и исполнено в фоновом режиме. О результатах вы будете уведомлены."
schedule_failed: "Проект удален быть не может: %{errors}"
failed: "Удалить проект %{name} не удалось"
failed: "Удаление проекта %{name} не удалось"
failed_text: "Запрос на удаление проекта %{name} не удался. Проект был оставлен в архиве."
completed: "Удаление проекта %{name} завершено"
completed_text: "Запрос по удалению проекта «%{name}» выполнен."
completed_text: "Запрос на удаление проекта '%{name}' был завершен."
index:
no_results_title_text: На данный момент проектов нет
no_results_content_text: Создать новый проект
@ -447,7 +447,7 @@ ru:
too_long: "слишком длинно (максимум — %{count} знаков)."
too_short: "слишком коротко (минимум — %{count} знаков)."
unchangeable: "изменить нельзя."
unremovable: "удалить нельзя."
unremovable: "не может быть удалено."
wrong_length: "неправильная длина (должно быть %{count} знаков)."
models:
custom_field:
@ -464,7 +464,7 @@ ru:
attributes:
redirect_uri:
fragment_present: 'не может содержать фрагмент.'
invalid_uri: 'должен быть корректным URI.'
invalid_uri: 'должен быть допустимым URI.'
relative_uri: 'должен быть абсолютным URI.'
secured_uri: 'должен быть HTTPS/SSL URI.'
forbidden_uri: 'запрещен сервером.'
@ -610,7 +610,7 @@ ru:
wiki_page: "Wiki-страница"
workflow: "Рабочий поток"
work_package: "Пакет работ"
'doorkeeper/application': "Приложения OAuth"
'doorkeeper/application': "Приложение OAuth"
errors:
header_invalid_fields: "Были проблемы со следующими полями:"
field_erroneous_label: "Значение этого поля неверно: %{full_errors}. Пожалуйста, введите верное значение."
@ -1435,7 +1435,7 @@ ru:
label_previous_week: "Предыдущая неделя"
label_principal_invite_via_email: " или пригласить новых пользователей по электронной почте"
label_principal_search: "Добавление существующих пользователей или групп"
label_privacy_policy: "Политика конфиденциальности и безопасности данных"
label_privacy_policy: "Политика конфиденциальности данных и безопасности"
label_product_version: "Версия продукта"
label_professional_support: "Профессиональная поддержка"
label_profile: "Профиль"
@ -2532,8 +2532,8 @@ ru:
errors:
messages:
invalid_request: 'В запросе нет обязательного параметра, значение параметра не поддерживается или не соответствует требованиям.'
invalid_redirect_uri: "У запрашиваемого перенаправления uri неверный формат или оно не соответствует URI перенаправляемого клиента."
unauthorized_client: 'Клиент не авторизован для выполнения этого запроса с помощью этого метода.'
invalid_redirect_uri: "Запрашиваемый редирект uri является неверным или не соответствует URI перенаправления клиента."
unauthorized_client: 'Клиент не уполномочен выполнить этот запрос с помощью этого метода.'
access_denied: 'Владелец ресурса или сервер авторизации отклонил запрос.'
invalid_scope: 'Запрашиваемая область является недопустимой, неизвестной или неправильной.'
invalid_code_challenge_method: 'Метод вызова кода должен быть простым или S256.'
@ -2543,22 +2543,22 @@ ru:
resource_owner_authenticator_not_configured: 'Не удалось найти владельца ресурсов, так как Doorkeeper.configure.resource_owner_authenticator не настроен.'
admin_authenticator_not_configured: 'Доступ к панели администратора запрещен, так как Doorkeeper.configure.admin_authenticator не настроен.'
unsupported_response_type: 'Сервер авторизации не поддерживает этот тип ответа.'
invalid_client: 'Проверка подлинности клиента не удалась из-за неизвестности клиента, отсутствия у клиента проверки подлинности, или не поддерживаемого метода проверки подлинности.'
invalid_client: 'Аутентификация клиента не удалась из-за неизвестности клиента, отсутствия у клиента аутентификации или не поддерживаемого метода аутентификации.'
invalid_grant: 'Предоставленное разрешение недействительно, истекло, аннулировано, не соответствует URI перенаправления, используемому в запросе авторизации, или было выдано другому клиенту.'
unsupported_grant_type: 'Тип разрешения не поддерживается сервером авторизации.'
invalid_token:
revoked: "Маркер доступа был отозван"
expired: "Срок действия маркера доступа истек"
expired: "Истек срок действия маркера доступа"
unknown: "Недопустимый маркер доступа"
unsupported_browser:
title: "Ваш браузер устарел и не поддерживается."
message: "Вы можете столкнуться с ошибками и ухудшением опыта на этой странице."
message: "На этой странице вы рискуете столкнуться с ошибками и обедненным опытом."
update_message: 'Пожалуйста, обновите свой браузер.'
close_warning: "Игнорировать это предупреждение."
oauth:
application:
singular: "Приложения OAuth"
plural: "Приложения OAuth"
singular: "Приложение OAuth"
plural: "OAuth приложения"
named: "OAuth приложение '%{name}'"
new: "Новое приложение OAuth"
default_scopes: "(Области по умолчанию)"

@ -1554,7 +1554,7 @@ sk:
label_used_by: "Používané"
label_used_by_types: "Používa sa podľa typov"
label_used_in_projects: "Použité v projektoch"
label_user: "Užívateľ(ka)"
label_user: "Užívateľ"
label_user_and_permission: "Users & Permissions"
label_user_named: "Užívateľ %{name}"
label_user_activity: "Aktivita používateľa %{value}"
@ -2594,8 +2594,8 @@ sk:
none_given: "Žiadnym aplikáciám OAuth nebol udelený prístup k vášmu používateľskému účtu."
x_active_tokens:
one: 'one active token'
few: '%{count} aktívnych tokenov'
many: '%{count} aktívnych tokenov'
few: '%{count} aktívne tokeny'
many: '%{count} aktívne tokeny'
other: '%{count} aktívne tokeny'
flows:
authorization_code: "Tok autorizácie"

@ -697,7 +697,7 @@ tr:
button_generate: "Üretmek"
button_list: "Liste"
button_lock: "Kilitle"
button_log_time: "Zaman kaydet"
button_log_time: "Log time"
button_login: "Oturum aç"
button_move: "Taşı"
button_move_and_follow: "Taşı ve takip et"
@ -1244,7 +1244,7 @@ tr:
label_file_added: "Dosya eklendi"
label_file_plural: "Dosyalar"
label_filter_add: "Filtre ekle"
label_filter_plural: "Filtreler"
label_filter_plural: "Süzgeçler"
label_filters_toggle: "Filtreleri göster / gizle"
label_float: "Ondalık"
label_folder: "Klasör"

@ -613,7 +613,7 @@ zh-CN:
base: "一般错误:"
blocks_ids: "被工作包屏蔽的IDs"
category: "类别"
comment: "评论"
comment: "注释"
comments: "评论"
content: "内容"
color: "颜色"

@ -48,7 +48,7 @@ Given /^the [pP]roject(?: "([^\"]+?)")? uses the following types:$/ do |project,
type
}
project.update type_ids: types.map(&:id).map(&:to_s)
project.update_attributes type_ids: types.map(&:id).map(&:to_s)
end
Then(/^I should see the following fields:$/) do |table|

@ -34,6 +34,11 @@
# instead of editing this one. Cucumber will automatically load all features/**/*.rb
# files.
if ENV['COVERAGE']
require 'simplecov'
SimpleCov.start 'rails'
end
require 'cucumber/rails'
require 'cucumber/rspec/doubles'
require 'capybara-screenshot/cucumber'

@ -37,7 +37,6 @@ import {WorkPackagesActivityService} from 'core-components/wp-single-view-tabs/a
import {IWorkPackageEditingServiceToken} from "core-components/wp-edit-form/work-package-editing.service.interface";
import {WorkPackageEditingService} from "core-components/wp-edit-form/work-package-editing-service";
import {SchemaCacheService} from "core-components/schemas/schema-cache.service";
import {WorkPackageEventsService} from "core-app/modules/work_packages/events/work-package-events.service";
@Component({
selector: 'wp-custom-action',
@ -53,7 +52,6 @@ export class WpCustomActionComponent {
private wpSchemaCacheService:SchemaCacheService,
private wpActivity:WorkPackagesActivityService,
private wpNotificationsService:WorkPackageNotificationService,
private wpEvents:WorkPackageEventsService,
@Inject(IWorkPackageEditingServiceToken) protected wpEditing:WorkPackageEditingService) {}
private fetchAction() {
@ -85,7 +83,6 @@ export class WpCustomActionComponent {
this.wpSchemaCacheService.ensureLoaded(savedWp).then(() => {
this.wpCacheService.updateWorkPackage(savedWp, true);
this.wpEditing.stopEditing(savedWp.id!);
this.wpEvents.push({ type: "updated", id: savedWp.id! });
});
}).catch((errorResource:any) => {
this.wpNotificationsService.handleRawError(errorResource, this.workPackage);

@ -1,5 +1,4 @@
#-- encoding: UTF-8
#-- copyright
# OpenProject is a project management system.
# Copyright (C) 2012-2018 the OpenProject Foundation (OPF)

@ -31,13 +31,9 @@
module OpenProject::TextFormatting
module Filters
class SanitizationFilter < HTML::Pipeline::SanitizationFilter
def context
super.merge(whitelist: WHITELIST.merge(
elements: WHITELIST[:elements] + ['macro'],
# Whitelist class and data-* attributes on all macros
attributes: WHITELIST[:attributes].merge('macro' => ['class', :data])
))
end
WHITELIST[:elements] << 'macro'
# Whitelist class and data-* attributes on all macros
WHITELIST[:attributes].merge!('macro' => ['class', :data])
end
end
end

@ -29,12 +29,11 @@
module OpenProject::TextFormatting::Formats
class BaseFormatter
attr_reader :context,
:pipeline
attr_reader :options, :project
def initialize(context)
@context = context
@pipeline = HTML::Pipeline.new(located_filters, context)
def initialize(options)
@options = options
@project = options[:project]
end
def to_html(text)

@ -31,6 +31,14 @@ require 'task_list/filter'
module OpenProject::TextFormatting::Formats::Markdown
class Formatter < OpenProject::TextFormatting::Formats::BaseFormatter
attr_reader :context,
:pipeline
def initialize(context)
@context = context
@pipeline = ::HTML::Pipeline.new(located_filters, context)
end
def to_html(text)
result = pipeline.call(text, context)
output = result[:output].to_s

@ -31,6 +31,14 @@
module OpenProject::TextFormatting::Formats
module Plain
class Formatter < OpenProject::TextFormatting::Formats::BaseFormatter
attr_reader :context,
:pipeline
def initialize(context)
@context = context
@pipeline = HTML::Pipeline.new(located_filters, context)
end
def to_html(text)
pipeline.to_html(text, context).html_safe
end

@ -33,7 +33,7 @@ require 'open3'
module OpenProject
module VERSION #:nodoc:
MAJOR = 10
MINOR = 1
MINOR = 0
PATCH = 0
TINY = PATCH # Redmine compat

@ -109,18 +109,14 @@ module Redmine
# because while they have the right to be added as watchers having
# them pop up in every project would be weird.
def possible_watcher_users
# In rails 6, for reasons I did not look into, a different sql is produced
# when issuing
# User.active_or_registered.allowed_members(self.class.acts_as_watchable_permission, project)
# compared to
# User.allowed_members(self.class.acts_as_watchable_permission, project).active_or_registered
scope = if project.is_public?
User.allowed(self.class.acts_as_watchable_permission, project)
else
User.allowed_members(self.class.acts_as_watchable_permission, project)
end
scope.active_or_registered
users = User
.active_or_registered
if project.is_public?
users.allowed(self.class.acts_as_watchable_permission, project)
else
users.allowed_members(self.class.acts_as_watchable_permission, project)
end
end
# Returns an array of users that are proposed as watchers

@ -26,7 +26,7 @@ module OpenProject
# Don't allow unsetting admin if user is already admin
attributes.delete(:admin) if user.admin?
user.update attributes
user.update_attributes attributes
end
end

@ -60,7 +60,7 @@ class RbApplicationController < ApplicationController
settings = Setting.plugin_openproject_backlogs
if settings['story_types'].blank? || settings['task_type'].blank?
respond_to do |format|
format.html { render template: 'shared/not_configured' }
format.html { render file: 'shared/not_configured' }
end
end
end

@ -39,7 +39,7 @@
# RbTaskboardsController
class RbSprintsController < RbApplicationController
def update
result = @sprint.update(params.permit(:name,
result = @sprint.update_attributes(params.permit(:name,
:start_date,
:effective_date))
status = (result ? 200 : 400)

@ -95,7 +95,7 @@ ar:
label_backlog: "العمل المتراكم غير المنجز"
label_backlogs: "الأعمال المتراكمة غير المنجزة"
label_backlogs_unconfigured: "لم تقم بإنشاء الأعمال المتراكمة غير المنجزة بعد. من فضلك اذهب إلى %{administration} > %{plugins}، ثم اضغط على رابط %{configure} لهذا البرنامج المساعد. عندما تنتهي من تعيين الحقول، ارجع إلى هذه الصفحة لتبدأ باستخدام الأداة."
label_blocks_ids: "مُعرِّفات مجموعات العمل المحظورة"
label_blocks_ids: "الهويات المعرِّفة لمجموعات العمل المحظورة"
label_burndown: "العمل المتبقي"
label_column_in_backlog: "عمود في العمل المتراكم غير المنجز"
label_hours: "الساعات"
@ -116,7 +116,7 @@ ar:
label_stories_tasks: "القصص/ المهمات"
label_task_board: "لوحة المهمة"
label_version_setting: "الإصدارات"
label_version: 'الإصدار'
label_version: 'النسخة'
label_webcal: "تغذية Webcal"
label_wiki: "Wiki"
permission_view_master_backlog: "عرض العمل الرئيسي المتراكم غير المنجز"

@ -39,7 +39,7 @@ bg:
date: "Day"
definition_of_done: "Definition of Done"
generating_chart: "Generating Graph..."
hours: "Часове"
hours: "Hours"
impediment: "Impediment"
label_versions_default_fold_state: "Show versions folded"
work_package_is_closed: "Work package is done, when"
@ -48,7 +48,7 @@ bg:
points: "Points"
positions_could_not_be_rebuilt: "Positions could not be rebuilt."
positions_rebuilt_successfully: "Positions rebuilt successfully."
properties: "Свойства"
properties: "Properties"
rebuild: "Rebuild"
rebuild_positions: "Rebuild positions"
remaining_hours: "Remaining hours"
@ -57,7 +57,7 @@ bg:
story: "Story"
story_points: "Story Points"
story_points_ideal: "Story Points (ideal)"
task: "Задачата"
task: "Task"
task_color: "Task color"
unassigned: "Unassigned"
x_more: "%{count} more..."
@ -95,7 +95,7 @@ bg:
label_backlog: "Backlog"
label_backlogs: "Backlogs"
label_backlogs_unconfigured: "You have not configured Backlogs yet. Please go to %{administration} > %{plugins}, then click on the %{configure} link for this plugin. Once you have set the fields, come back to this page to start using the tool."
label_blocks_ids: "ИД на блокираните работни пакети"
label_blocks_ids: "IDs of blocked work packages"
label_burndown: "Burndown"
label_column_in_backlog: "Column in backlog"
label_hours: "hours"
@ -115,7 +115,7 @@ bg:
label_stories: "Stories"
label_stories_tasks: "Stories/Tasks"
label_task_board: "Task board"
label_version_setting: "Версии"
label_version_setting: "Versions"
label_version: 'Версия'
label_webcal: "Webcal Feed"
label_wiki: "Wiki"

@ -104,7 +104,7 @@ de:
label_not_prioritized: "nicht priorisiert"
label_points: "Punkte"
label_points_burn_down: "Runter"
label_points_burn_up: "Nach oben"
label_points_burn_up: "Hoch"
label_product_backlog: "Produkt Backlog"
label_select_all: "Alle auswählen"
label_sprint_backlog: "Sprint Backlog"
@ -130,7 +130,7 @@ de:
project_module_backlogs: "Backlogs"
rb_label_copy_tasks: "Arbeitspakete kopieren"
rb_label_copy_tasks_all: "Alle"
rb_label_copy_tasks_none: "Kein Planungsvergleich"
rb_label_copy_tasks_none: "Keine"
rb_label_copy_tasks_open: "Offene"
rb_label_link_to_original: "Link zur Original-Story einfügen"
remaining_hours: "Verbleibende Stunden"

@ -95,7 +95,7 @@ es:
label_backlog: "Backlog"
label_backlogs: "Backlogs"
label_backlogs_unconfigured: "Todavía no ha configurado backlogs. Por favor, visite %{administration} > %{plugins}, luego haga clic en el enlace de %{configure} para este plugin. Cuando haya establecido los campos, vuelva a esta página para empezar a usar la herramienta."
label_blocks_ids: "Identificadores de paquetes bloqueados"
label_blocks_ids: "ID de los paquetes de trabajo bloqueados"
label_burndown: "Burndown"
label_column_in_backlog: "Columna en backlog"
label_hours: "horas"

@ -48,7 +48,7 @@ et:
points: "Points"
positions_could_not_be_rebuilt: "Positions could not be rebuilt."
positions_rebuilt_successfully: "Positions rebuilt successfully."
properties: "Atribuudid"
properties: "Omadused"
rebuild: "Taasta"
rebuild_positions: "Rebuild positions"
remaining_hours: "Remaining hours"
@ -130,7 +130,7 @@ et:
project_module_backlogs: "Backlogs"
rb_label_copy_tasks: "Copy work packages"
rb_label_copy_tasks_all: "Kõik"
rb_label_copy_tasks_none: "Mittemingi"
rb_label_copy_tasks_none: "Pole"
rb_label_copy_tasks_open: "Avatud"
rb_label_link_to_original: "Include link to original story"
remaining_hours: "remaining hours"

@ -34,7 +34,7 @@ fr:
burndown_graph: "Graphique d'avancement"
card_paper_size: "Format de papier pour l'impression des cartes"
chart_options: "Options du graphique"
close: "Fermer"
close: "Clôturer"
column_width: "Largeur de la colonne :"
date: "Jour"
definition_of_done: "Définition de Fait"
@ -95,7 +95,7 @@ fr:
label_backlog: "Backlog"
label_backlogs: "Backlogs"
label_backlogs_unconfigured: "Vous n'avez pas encore configuré Backlogs. Veuillez vous rendre dans %{administration} > %{plugins}, puis cliquer sur le lien %{configure} pour ce plugin. Une fois que vous avez défini les champs, revenez sur cette page pour commencer à utiliser l'outil."
label_blocks_ids: "IDs des lots de travaux bloqués"
label_blocks_ids: "ID des lots de travaux bloqués"
label_burndown: "Avancement"
label_column_in_backlog: "Colonne dans le backlog"
label_hours: "heures"
@ -104,7 +104,7 @@ fr:
label_not_prioritized: "non priorisé"
label_points: "points"
label_points_burn_down: "Vers le bas"
label_points_burn_up: "Haut"
label_points_burn_up: "Vers le haut"
label_product_backlog: "carnet de produit"
label_select_all: "Tout sélectionner"
label_sprint_backlog: "carnet de sprint"
@ -130,7 +130,7 @@ fr:
project_module_backlogs: "Backlogs"
rb_label_copy_tasks: "Copier lots de travaux"
rb_label_copy_tasks_all: "Toutes"
rb_label_copy_tasks_none: "Aucun"
rb_label_copy_tasks_none: "Aucune"
rb_label_copy_tasks_open: "Ouvertes"
rb_label_link_to_original: "Inclure le lien vers l'histoire originale"
remaining_hours: "heures restantes"

@ -57,7 +57,7 @@ hr:
story: "Scenarij"
story_points: "Točke priče"
story_points_ideal: "Točke scenarija (idealno)"
task: "Zadatak"
task: "Zadaća"
task_color: "Boja zadaće"
unassigned: "Nedodijeljeno"
x_more: "%{count} više..."
@ -95,7 +95,7 @@ hr:
label_backlog: "Backlog"
label_backlogs: "Backlogs"
label_backlogs_unconfigured: "Niste još konfigurirali Backlog. Za konfiguraciju odaberite %{administration}>%{plugins}, zatim %{configure} Backlog dodatak. Nakon što ste uredili potrebna polja, vratite se na ovu stranicu da biste započeli s korištenjem ovog alata."
label_blocks_ids: "ID-ovi onemogućenih radnih paketa"
label_blocks_ids: "ID blokiranih radnih paketa"
label_burndown: "Burndown"
label_column_in_backlog: "Stupac u backlogu"
label_hours: "sati"
@ -130,7 +130,7 @@ hr:
project_module_backlogs: "Backlogs"
rb_label_copy_tasks: "Kopiraj radne pakete"
rb_label_copy_tasks_all: "Svi"
rb_label_copy_tasks_none: "Bez"
rb_label_copy_tasks_none: "Nijedan"
rb_label_copy_tasks_open: "Otvoren"
rb_label_link_to_original: "Uključi poveznicu u orginalni scenarij"
remaining_hours: "preostali sati"
@ -140,5 +140,5 @@ hr:
todo_work_package_summary: "%{type}: %{summary}"
version_settings_display_label: "Stupac u backlogu"
version_settings_display_option_left: "lijevo"
version_settings_display_option_none: "none"
version_settings_display_option_none: "nijedan"
version_settings_display_option_right: "desno"

@ -39,7 +39,7 @@ hu:
date: "Nap"
definition_of_done: "A \"Kész\" meghatározása"
generating_chart: "Ábra létrehozása..."
hours: "órák"
hours: "Óra"
impediment: "Akadály"
label_versions_default_fold_state: "Összecsukott verziók mutatása"
work_package_is_closed: "A munkacsomag készen áll, ekkor"
@ -95,7 +95,7 @@ hu:
label_backlog: "Elvégzendő feladatok"
label_backlogs: "Backlogs"
label_backlogs_unconfigured: "You have not configured Backlogs yet. Please go to %{administration} > %{plugins}, then click on the %{configure} link for this plugin. Once you have set the fields, come back to this page to start using the tool."
label_blocks_ids: "Lezárt munkacsomagok azonosítója"
label_blocks_ids: "IDs of blocked work packages"
label_burndown: "Burndown"
label_column_in_backlog: "Column in backlog"
label_hours: "hours"
@ -115,7 +115,7 @@ hu:
label_stories: "Storyk"
label_stories_tasks: "Storyk/Feladatok"
label_task_board: "Task board"
label_version_setting: "Verzió"
label_version_setting: "Versions"
label_version: 'Verzió'
label_webcal: "Webcal Feed"
label_wiki: "Wiki"
@ -140,5 +140,5 @@ hu:
todo_work_package_summary: "%{type}: %{summary}"
version_settings_display_label: "Column in backlog"
version_settings_display_option_left: "balra"
version_settings_display_option_none: "Egyik sem"
version_settings_display_option_none: "none"
version_settings_display_option_right: "jobbra"

@ -34,7 +34,7 @@ id:
burndown_graph: "Grafik Burndown"
card_paper_size: "Ukuran kertas untuk pencetakan kartu"
chart_options: "Bagan pilihan"
close: "Tutup"
close: "Dekat"
column_width: "Lebar kolom: "
date: "Hari"
definition_of_done: "Definisi Selesai"
@ -95,7 +95,7 @@ id:
label_backlog: "Jaminan simpanan"
label_backlogs: "Backlogs"
label_backlogs_unconfigured: "Anda belum mengkonfigurasi Backlogs. Silakan masuk ke %{administration}> %{plugins}, lalu klik pada link %{configure} untuk plugin ini. Setelah Anda menyetel bidang, kembali ke halaman ini untuk mulai menggunakan alat ini."
label_blocks_ids: "List ID dari work package yang diblokir"
label_blocks_ids: "ID dari paket pekerjaan yang diblokir"
label_burndown: "Burndown"
label_column_in_backlog: "Kolom di backlog"
label_hours: "jamb"
@ -130,7 +130,7 @@ id:
project_module_backlogs: "Backlogs"
rb_label_copy_tasks: "Salin paket kerja"
rb_label_copy_tasks_all: "Semua"
rb_label_copy_tasks_none: "Kosong"
rb_label_copy_tasks_none: "Tidak ada"
rb_label_copy_tasks_open: "Buka"
rb_label_link_to_original: "Sertakan link ke cerita asli"
remaining_hours: "jam yang tersisa"
@ -140,5 +140,5 @@ id:
todo_work_package_summary: "%{type}: %{summary}"
version_settings_display_label: "Kolom di backlog"
version_settings_display_option_left: "kiri"
version_settings_display_option_none: "kosong"
version_settings_display_option_none: "tidak ada"
version_settings_display_option_right: "kanan"

@ -95,7 +95,7 @@ it:
label_backlog: "Backlog"
label_backlogs: "Backlog"
label_backlogs_unconfigured: "Non hai ancora configurato i Backlog. Vai su %{administration} > %{plugins}, quindi fai clic sul link %{configure} per il plugin. Dopo aver impostato i campi, torna su questa pagina per iniziare a utilizzare lo strumento."
label_blocks_ids: "ID delle macro-attività bloccate"
label_blocks_ids: "ID dei pacchetti di lavoro bloccati"
label_burndown: "Burndown"
label_column_in_backlog: "Colonna nel backlog"
label_hours: "ore"
@ -104,7 +104,7 @@ it:
label_not_prioritized: "priorità non definita"
label_points: "punti"
label_points_burn_down: "Verso il basso"
label_points_burn_up: "Su"
label_points_burn_up: "Verso l'alto"
label_product_backlog: "backlog del prodotto"
label_select_all: "Seleziona tutto"
label_sprint_backlog: "backlog di sprint"

@ -34,12 +34,12 @@ ja:
burndown_graph: "バーンダウングラフ"
card_paper_size: "カード印刷用の用紙サイズ"
chart_options: "チャートオプション"
close: "閉じる"
close: "終了する"
column_width: "列の幅:"
date: "日"
definition_of_done: "「終了」の定義"
generating_chart: "グラフを生成中..."
hours: " 時間"
hours: "時間"
impediment: "障害事項"
label_versions_default_fold_state: "バージョンを折り畳んで表示"
work_package_is_closed: "作業パッケージが終了するには"

@ -57,7 +57,7 @@ ko:
story: "스토리"
story_points: "스토리 포인트"
story_points_ideal: "스토리 포인트(적합함)"
task: "일감"
task: "작업"
task_color: "작업 색상"
unassigned: "할당되지 않음"
x_more: "%{count}개 이상..."
@ -95,7 +95,7 @@ ko:
label_backlog: "백로그"
label_backlogs: "백로그"
label_backlogs_unconfigured: "백로그를 아직 구성하지 않았습니다. %{administration} > %{plugins}(으)로 이동한 다음 이 플러그인의 %{configure} 링크를 클릭하세요. 필드를 설정한 후 이 페이지로 돌아가서 해당 도구 사용을 시작하세요."
label_blocks_ids: "차단 된 작업 패키지의 ID"
label_blocks_ids: "차단된 작업 패키지의 ID"
label_burndown: "번다운"
label_column_in_backlog: "백로그의 열"
label_hours: "시간"

@ -95,7 +95,7 @@ nl:
label_backlog: "Backlog"
label_backlogs: "Backlogs"
label_backlogs_unconfigured: "Je hebt Backlogs nog niet geconfigureerd. Ga naar %{administration} >%{plugins}, en klik op de %{configure} voor deze plug-in. Kom hier terug nadat u de velden hebt geconfigureerd."
label_blocks_ids: "It's van geblokkeerde werkpakketten"
label_blocks_ids: "ID's van geblokkeerde werkpakketten"
label_burndown: "Burndown"
label_column_in_backlog: "Kolom in achterstand"
label_hours: "uren"

@ -61,7 +61,7 @@ pl:
task_color: "Kolor zadania"
unassigned: "Nieprzypisane"
x_more: "%{count} więcej..."
backlogs_active: "aktywne"
backlogs_active: "aktywny"
backlogs_any: "którekolwiek"
backlogs_card_specification: "Typy etykiet do wydruku kart"
backlogs_inactive: "Projekt pokazuje brak aktywności"
@ -95,7 +95,7 @@ pl:
label_backlog: "Backlog"
label_backlogs: "Backlogi"
label_backlogs_unconfigured: "Jeszcze nie skonfigurowałeś backlogów. Przejdź do %{administration} > %{plugins}, następnie kliknij link %{configure} dla otrzymania tego dodatku. Po ustawieniu pól, wróć na tę stronę, aby zacząć korzystanie z narzędzia."
label_blocks_ids: "Identyfikatory zablokowanych pakietów roboczych"
label_blocks_ids: "Identyfikatory zablokowanych pakietów prac"
label_burndown: "Burndown"
label_column_in_backlog: "Kolumna w backlogu"
label_hours: "godziny"
@ -130,7 +130,7 @@ pl:
project_module_backlogs: "Backlogi"
rb_label_copy_tasks: "Kopiuj Zestaw Zadań"
rb_label_copy_tasks_all: "Wszystko"
rb_label_copy_tasks_none: "Brak"
rb_label_copy_tasks_none: "Żaden"
rb_label_copy_tasks_open: "Otwórz"
rb_label_link_to_original: "Podepnij łącze do oryginalnego wątku"
remaining_hours: "pozostałe godziny"
@ -140,5 +140,5 @@ pl:
todo_work_package_summary: "%{type}: %{summary}"
version_settings_display_label: "Kolumna w backlogu"
version_settings_display_option_left: "w lewo"
version_settings_display_option_none: "Brak"
version_settings_display_option_none: "żaden"
version_settings_display_option_right: "w prawo"

@ -39,7 +39,7 @@ pt-BR:
date: "Dia"
definition_of_done: "Definição de pronto"
generating_chart: "Gerando gráfico..."
hours: "horas"
hours: "Horas"
impediment: "Impedimento"
label_versions_default_fold_state: "Mostrar versões em modo fechado"
work_package_is_closed: "Pacote de trabalho está pronto, quando"

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

Loading…
Cancel
Save