mirror of
https://github.com/opf/openproject.git
synced 2026-06-13 19:20:00 +00:00
Revert "[31080] Trigger wpEvent after custom action"
This commit is contained in:
+1
-3
@@ -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
|
||||
|
||||
-19
@@ -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
|
||||
|
||||
+208
-199
@@ -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
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
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?
|
||||
|
||||
+7
-11
@@ -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
|
||||
|
||||
+3
-3
@@ -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)
|
||||
column = query.group_by_column
|
||||
|
||||
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_property_keys(groups)
|
||||
groups
|
||||
end
|
||||
end
|
||||
|
||||
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)
|
||||
else
|
||||
transform_single_custom_field_keys(custom_field, 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
|
||||
|
||||
+3
-4
@@ -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?
|
||||
|
||||
+7
-7
@@ -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'
|
||||
|
||||
-3
@@ -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
|
||||
users = User
|
||||
.active_or_registered
|
||||
|
||||
scope.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
Reference in New Issue
Block a user