Release OpenProject 11.0.4

pull/8872/head v11.0.4
ulferts 4 years ago
commit da7175d514
No known key found for this signature in database
GPG Key ID: A205708DE1284017
  1. 4
      .pkgr.yml
  2. 2
      Gemfile
  3. 2
      Gemfile.lock
  4. 10
      app/controllers/admin_controller.rb
  5. 33
      app/models/work_package/pdf_export/attachments.rb
  6. 109
      app/models/work_package/pdf_export/work_package_list_to_pdf.rb
  7. 10
      app/workers/work_packages/exports/export_job.rb
  8. 2
      config/locales/crowdin/ar.yml
  9. 2
      config/locales/crowdin/bg.yml
  10. 2
      config/locales/crowdin/ca.yml
  11. 62
      config/locales/crowdin/cs.yml
  12. 2
      config/locales/crowdin/da.yml
  13. 24
      config/locales/crowdin/de.yml
  14. 2
      config/locales/crowdin/el.yml
  15. 2
      config/locales/crowdin/es.yml
  16. 2
      config/locales/crowdin/fi.yml
  17. 2
      config/locales/crowdin/fil.yml
  18. 4
      config/locales/crowdin/fr.yml
  19. 2
      config/locales/crowdin/hr.yml
  20. 2
      config/locales/crowdin/hu.yml
  21. 2
      config/locales/crowdin/id.yml
  22. 2
      config/locales/crowdin/it.yml
  23. 2
      config/locales/crowdin/ja.yml
  24. 6
      config/locales/crowdin/js-de.yml
  25. 10
      config/locales/crowdin/js-sv.yml
  26. 6
      config/locales/crowdin/ko.yml
  27. 4
      config/locales/crowdin/lt.yml
  28. 2
      config/locales/crowdin/nl.yml
  29. 2
      config/locales/crowdin/no.yml
  30. 2
      config/locales/crowdin/pl.yml
  31. 4
      config/locales/crowdin/pt.yml
  32. 4
      config/locales/crowdin/ro.yml
  33. 2
      config/locales/crowdin/ru.yml
  34. 2
      config/locales/crowdin/sk.yml
  35. 2
      config/locales/crowdin/sl.yml
  36. 16
      config/locales/crowdin/sv.yml
  37. 2
      config/locales/crowdin/tr.yml
  38. 2
      config/locales/crowdin/uk.yml
  39. 2
      config/locales/crowdin/vi.yml
  40. 2
      config/locales/crowdin/zh-CN.yml
  41. 2
      config/locales/crowdin/zh-TW.yml
  42. 3
      config/locales/en.yml
  43. 40
      db/migrate/20201125121949_remove_renamed_cron_job.rb
  44. 3
      docker/setup/preinstall-common.sh
  45. 2
      docs/development/create-openproject-plugin/README.md
  46. 4
      docs/development/security/README.md
  47. 4
      docs/getting-started/my-account/README.md
  48. 3
      docs/getting-started/sign-in-registration/README.md
  49. 3
      docs/installation-and-operations/installation/manual/README.md
  50. 2
      docs/installation-and-operations/misc/custom-openid-connect-providers/README.md
  51. 2
      docs/installation-and-operations/operation/faq/README.md
  52. 28
      docs/release-notes/11-0-4/README.md
  53. 4
      docs/release-notes/8-0-0/README.md
  54. 7
      docs/release-notes/README.md
  55. 7
      docs/system-admin-guide/authentication/ldap-authentication/ldap-group-synchronization/README.md
  56. 18
      docs/system-admin-guide/enumerations/README.md
  57. 1
      docs/system-admin-guide/manage-work-packages/work-package-status/README.md
  58. 3
      docs/system-admin-guide/system-settings/display-settings/README.md
  59. 8
      docs/user-guide/budgets/README.md
  60. 4
      docs/user-guide/integrations/README.md
  61. 3
      docs/user-guide/meetings/README.md
  62. 10
      docs/user-guide/projects/project-settings/activities-time-tracking/README.md
  63. 7
      docs/user-guide/work-packages/README.md
  64. 9
      docs/user-guide/work-packages/edit-work-package/README.md
  65. BIN
      docs/user-guide/work-packages/edit-work-package/image-20201119163714831.png
  66. 24
      docs/user-guide/work-packages/work-package-table-configuration/README.md
  67. 3
      frontend/src/app/modules/backlogs/backlogs-page/styles/taskboard.sass
  68. 2
      lib/open_project/version.rb
  69. 4
      modules/avatars/config/locales/crowdin/js-ro.yml
  70. 2
      modules/backlogs/config/locales/crowdin/de.yml
  71. 6
      modules/bim/config/locales/crowdin/js-fi.yml
  72. 2
      modules/bim/spec/support/pages/ifc_models/index.rb
  73. 2
      modules/boards/config/locales/crowdin/js-ko.yml
  74. 2
      modules/boards/config/locales/crowdin/tr.yml
  75. 7
      modules/budgets/app/controllers/budgets_controller.rb
  76. 54
      modules/budgets/app/models/budget.rb
  77. 89
      modules/budgets/spec/features/budgets/copy_budget_spec.rb
  78. 9
      modules/budgets/spec/support/pages/budget_form.rb
  79. 6
      modules/budgets/spec/support/pages/edit_budget.rb
  80. 4
      modules/costs/config/locales/crowdin/cs.yml
  81. 2
      modules/meeting/app/controllers/meeting_contents_controller.rb
  82. 2
      modules/meeting/config/locales/crowdin/de.yml
  83. 1
      modules/overviews/config/locales/crowdin/ar.yml
  84. 1
      modules/overviews/config/locales/crowdin/bg.yml
  85. 1
      modules/overviews/config/locales/crowdin/ca.yml
  86. 1
      modules/overviews/config/locales/crowdin/cs.yml
  87. 1
      modules/overviews/config/locales/crowdin/da.yml
  88. 1
      modules/overviews/config/locales/crowdin/de.yml
  89. 1
      modules/overviews/config/locales/crowdin/el.yml
  90. 1
      modules/overviews/config/locales/crowdin/es.yml
  91. 1
      modules/overviews/config/locales/crowdin/fi.yml
  92. 1
      modules/overviews/config/locales/crowdin/fil.yml
  93. 1
      modules/overviews/config/locales/crowdin/fr.yml
  94. 1
      modules/overviews/config/locales/crowdin/hr.yml
  95. 1
      modules/overviews/config/locales/crowdin/hu.yml
  96. 1
      modules/overviews/config/locales/crowdin/id.yml
  97. 1
      modules/overviews/config/locales/crowdin/it.yml
  98. 1
      modules/overviews/config/locales/crowdin/ja.yml
  99. 1
      modules/overviews/config/locales/crowdin/ko.yml
  100. 1
      modules/overviews/config/locales/crowdin/lt.yml
  101. Some files were not shown because too many files have changed in this diff Show More

@ -10,6 +10,7 @@ targets:
- unrtf - unrtf
- tesseract-ocr - tesseract-ocr
- catdoc - catdoc
- imagemagick
debian-10: debian-10:
<<: *debian9 <<: *debian9
ubuntu-16.04: ubuntu-16.04:
@ -22,12 +23,15 @@ targets:
dependencies: dependencies:
- unzip - unzip
- epel-release - epel-release
- ImageMagick
centos-7: centos-7:
dependencies: dependencies:
- epel-release - epel-release
- ImageMagick
sles-12: sles-12:
build_dependencies: build_dependencies:
- sqlite3-devel - sqlite3-devel
- ImageMagick
before_precompile: "packaging/setup" before_precompile: "packaging/setup"
after_precompile: "packaging/teardown" after_precompile: "packaging/teardown"
services: services:

@ -187,6 +187,8 @@ gem 'rest-client', '~> 2.0'
gem 'ruby-progressbar', '~> 1.10.0', require: false gem 'ruby-progressbar', '~> 1.10.0', require: false
gem 'mini_magick', '~> 4.11.0', require: false
group :test do group :test do
gem 'launchy', '~> 2.5.0' gem 'launchy', '~> 2.5.0'
gem 'rack-test', '~> 1.1.0' gem 'rack-test', '~> 1.1.0'

@ -617,6 +617,7 @@ GEM
mime-types-data (~> 3.2015) mime-types-data (~> 3.2015)
mime-types-data (3.2020.0512) mime-types-data (3.2020.0512)
mimemagic (0.3.5) mimemagic (0.3.5)
mini_magick (4.11.0)
mini_mime (1.0.2) mini_mime (1.0.2)
mini_portile2 (2.4.0) mini_portile2 (2.4.0)
minisyntax (0.2.5) minisyntax (0.2.5)
@ -1027,6 +1028,7 @@ DEPENDENCIES
livingstyleguide (~> 2.1.0) livingstyleguide (~> 2.1.0)
lograge (~> 0.11.0) lograge (~> 0.11.0)
meta-tags (~> 2.13.0) meta-tags (~> 2.13.0)
mini_magick (~> 4.11.0)
multi_json (~> 1.15.0) multi_json (~> 1.15.0)
my_page! my_page!
net-ldap (~> 0.16.0) net-ldap (~> 0.16.0)

@ -26,6 +26,7 @@
# #
# See docs/COPYRIGHT.rdoc for more details. # See docs/COPYRIGHT.rdoc for more details.
#++ #++
require 'open3'
class AdminController < ApplicationController class AdminController < ApplicationController
layout 'admin' layout 'admin'
@ -84,6 +85,7 @@ class AdminController < ApplicationController
@checklist += file_storage_checks @checklist += file_storage_checks
@checklist += plaintext_extraction_checks @checklist += plaintext_extraction_checks
@checklist += admin_information_hook_checks @checklist += admin_information_hook_checks
@checklist += image_conversion_checks
@storage_information = OpenProject::Storage.mount_information @storage_information = OpenProject::Storage.mount_information
end end
@ -118,6 +120,14 @@ class AdminController < ApplicationController
end end
end end
def image_conversion_checks
[[:'image_conversion.imagemagick', image_conversion_libs_available?]]
end
def image_conversion_libs_available?
Open3.capture2e('convert', '-version').first.include?('ImageMagick')
end
def file_storage_checks def file_storage_checks
# Add local directory test if we're not using fog # Add local directory test if we're not using fog
if OpenProject::Configuration.file_storage? if OpenProject::Configuration.file_storage?

@ -50,14 +50,45 @@ module WorkPackage::PDFExport::Attachments
# Access the local file. For Carrierwave attachments, this will be blocking. # Access the local file. For Carrierwave attachments, this will be blocking.
file_path = attachment.file.local_file.path file_path = attachment.file.local_file.path
# Let's not include the raw images as the sum of all images can hit the memory limit of the worker process.
# As we do not need the full image size when printing small images into the PDF let's reduce it on the fly.
# It uses CPU and time. However, we don't expect that feature to get used often.
resized_file_path = resize_image(file_path)
# Fit the image roughly in the center of each cell # Fit the image roughly in the center of each cell
pdf.make_cell(image: file_path, fit: [available_width, 125], position: :center) pdf.make_cell(image: resized_file_path, fit: [available_width, 125], position: :center)
rescue => e rescue => e
Rails.logger.error { "Failed to attach work package image to PDF: #{e} #{e.message}" } Rails.logger.error { "Failed to attach work package image to PDF: #{e} #{e.message}" }
nil nil
end end
def resize_image(file_path)
resized_file_path = extend_file_name_in_path(file_path, '__x325')
image = MiniMagick::Image.open(file_path)
image.resize("x325")
image.write(resized_file_path)
@resized_image_paths << resized_file_path
resized_file_path
end
def extend_file_name_in_path(file_path, name_suffix)
dir_path = File.dirname(file_path)
file_extension = File.extname(file_path)
file_name = File.basename(file_path, '.*')
File.join(dir_path, "#{file_name}#{name_suffix}#{file_extension}")
end
def pdf_embeddable?(attachment) def pdf_embeddable?(attachment)
%w[image/jpeg image/png].include?(attachment.content_type) %w[image/jpeg image/png].include?(attachment.content_type)
end end
def delete_all_resized_images
@resized_image_paths.each do |file_path|
File.delete(file_path)
end
end
end end

@ -28,6 +28,20 @@
# See docs/COPYRIGHT.rdoc for more details. # See docs/COPYRIGHT.rdoc for more details.
#++ #++
# Exporter for work package table.
#
# It can optionally export a work package with
# - description, or with
# - attached images, or with
# - description and attached images.
#
# When exporting with attached images then the memory consumption can quickly
# grow beyond limits. Therefore we create multiple smaller PDFs that we finally
# merge do one file.
require 'mini_magick'
require 'open3'
class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base
include WorkPackage::PDFExport::Common include WorkPackage::PDFExport::Common
include WorkPackage::PDFExport::Attachments include WorkPackage::PDFExport::Attachments
@ -35,26 +49,29 @@ class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base
attr_accessor :pdf, attr_accessor :pdf,
:options :options
WORK_PACKAGES_PER_BATCH = 100
def initialize(object, options = {}) def initialize(object, options = {})
super super
@cell_padding = options.delete(:cell_padding) @cell_padding = options.delete(:cell_padding)
self.pdf = get_pdf(current_language) @total_wp_count = query.results.work_package_count
@batches_count = @total_wp_count.fdiv(WORK_PACKAGES_PER_BATCH).ceil
configure_page_size @batch_files = []
configure_markup @page_count = -1
end end
def configure_page_size def render!
pdf.options[:page_size] = 'EXECUTIVE' (1..@batches_count).each do |batch_index|
pdf.options[:page_layout] = :landscape run_batch!(batch_index)
end end
def render! @merged_pdf_file = merge_pdfs
write_content!
success(pdf.render) delete_tmp_files
success(@merged_pdf_file)
rescue Prawn::Errors::CannotFit rescue Prawn::Errors::CannotFit
error(I18n.t(:error_pdf_export_too_many_columns)) error(I18n.t(:error_pdf_export_too_many_columns))
rescue StandardError => e rescue StandardError => e
@ -62,12 +79,57 @@ class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base
error(I18n.t(:error_pdf_failed_to_export, error: e.message)) error(I18n.t(:error_pdf_failed_to_export, error: e.message))
end end
def write_content! private
def on_first_batch(batch_index)
return unless batch_index == 1
write_title! write_title!
write_headers! write_headers!
write_work_packages! end
def delete_tmp_files
@batch_files.each(&:delete)
end
def configure_page_size
pdf.options[:page_size] = 'EXECUTIVE'
pdf.options[:page_layout] = :landscape
end
def merge_pdfs
merged_pdf = Tempfile.new
# We use the command line tool "pdfunite" for concatenating the PDFs.
# That tool comes with the system package "poppler-utils" which we
# fortunately already have installed for text extraction purposes.
Open3.capture2e("pdfunite", *@batch_files.map(&:path), merged_pdf.path)
merged_pdf
end
def run_batch!(batch_index)
initialize_batch_page
batch_file = render_batch!(batch_index)
@page_count += pdf.page_count
batch_file.close
@batch_files << batch_file
end
def render_batch!(batch_index)
@resized_image_paths = []
on_first_batch(batch_index)
write_work_packages!(batch_index)
write_footers! write_footers!
batch_file = Tempfile.new("pdf_batch_#{batch_index}")
pdf.render_file(batch_file.path)
delete_all_resized_images
batch_file
end end
def project def project
@ -96,11 +158,13 @@ class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base
end end
def write_footers! def write_footers!
@page_count += 1
pdf.number_pages format_date(Date.today), pdf.number_pages format_date(Date.today),
at: [pdf.bounds.left, 0], at: [pdf.bounds.left, 0],
style: :italic style: :italic
pdf.number_pages "<page>/<total>", pdf.number_pages "<page>",
start_count_at: @page_count,
at: [pdf.bounds.right - 25, 0], at: [pdf.bounds.right - 25, 0],
style: :italic style: :italic
end end
@ -138,11 +202,11 @@ class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base
end end
end end
def write_work_packages! def write_work_packages!(batch_index)
pdf.font style: :normal, size: 8 pdf.font style: :normal, size: 8
previous_group = nil previous_group = nil
work_packages.each do |work_package| work_packages_batch(batch_index).each do |work_package|
previous_group = write_group_header!(work_package, previous_group) previous_group = write_group_header!(work_package, previous_group)
write_attributes!(work_package) write_attributes!(work_package)
@ -157,6 +221,14 @@ class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base
end end
end end
def work_packages_batch(batch_index)
query
.results
.work_packages
.page(batch_index)
.per_page(WORK_PACKAGES_PER_BATCH)
end
def write_attributes!(work_package) def write_attributes!(work_package)
values = valid_export_columns.map do |column| values = valid_export_columns.map do |column|
make_column_value work_package, column make_column_value work_package, column
@ -218,4 +290,11 @@ class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base
pdf.make_cell values.map(&:formatted_value).join(', '), pdf.make_cell values.map(&:formatted_value).join(', '),
padding: cell_padding padding: cell_padding
end end
def initialize_batch_page
self.pdf = get_pdf(current_language)
configure_page_size
configure_markup
end
end end

@ -33,12 +33,22 @@ module WorkPackages
raise export_result.message raise export_result.message
elsif export_result.content.is_a? File elsif export_result.content.is_a? File
store_attachment(export, export_result.content) store_attachment(export, export_result.content)
elsif export_result.content.is_a? Tempfile
store_from_tempfile(export, export_result)
else else
store_from_string(export, export_result) store_from_string(export, export_result)
end end
end end
end end
def store_from_tempfile(export, export_result)
renamed_file_path = File.join(File.dirname(export_result.content.path), export_result.title)
File.rename(export_result.content.path, renamed_file_path)
file = File.open(renamed_file_path)
store_attachment(export, file)
file.close
end
def schedule_cleanup def schedule_cleanup
::WorkPackages::Exports::CleanupOutdatedJob.perform_after_grace ::WorkPackages::Exports::CleanupOutdatedJob.perform_after_grace
end end

@ -1262,6 +1262,8 @@ ar:
blog: "مدونة أوبِن بروجِكت" blog: "مدونة أوبِن بروجِكت"
forums: "منتدى المجتمع" forums: "منتدى المجتمع"
newsletter: "Security alerts / Newsletter" newsletter: "Security alerts / Newsletter"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -1198,6 +1198,8 @@ bg:
blog: "OpenProject блог" blog: "OpenProject блог"
forums: "Форум на Общността" forums: "Форум на Общността"
newsletter: "Security alerts / Newsletter" newsletter: "Security alerts / Newsletter"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -1198,6 +1198,8 @@ ca:
blog: "Blog OpenProject" blog: "Blog OpenProject"
forums: "Fòrum de la comunitat" forums: "Fòrum de la comunitat"
newsletter: "Security alerts / Newsletter" newsletter: "Security alerts / Newsletter"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -28,10 +28,10 @@ cs:
plugins: plugins:
no_results_title_text: V současné době nejsou k dispozici žádné pluginy. no_results_title_text: V současné době nejsou k dispozici žádné pluginy.
custom_styles: custom_styles:
color_theme: "Color theme" color_theme: "Barevné téma"
color_theme_custom: "Vlastní" color_theme_custom: "Vlastní"
colors: colors:
alternative-color: "Alternative" alternative-color: "Alternativa"
content-link-color: "Link font" content-link-color: "Link font"
primary-color: "Primární" primary-color: "Primární"
primary-color-dark: "Primární (tmavé)" primary-color-dark: "Primární (tmavé)"
@ -39,20 +39,20 @@ cs:
header-item-bg-hover-color: "Pozadí záhlaví při přejetí myší" header-item-bg-hover-color: "Pozadí záhlaví při přejetí myší"
header-item-font-color: "Písmo záhlaví" header-item-font-color: "Písmo záhlaví"
header-item-font-hover-color: "Písmo záhlaví při přejetí myší" header-item-font-hover-color: "Písmo záhlaví při přejetí myší"
header-border-bottom-color: "Header border" header-border-bottom-color: "Okraj záhlaví"
main-menu-bg-color: "Main menu background" main-menu-bg-color: "Pozadí hlavního menu"
main-menu-bg-selected-background: "Main menu when selected" main-menu-bg-selected-background: "Hlavní menu při výběru"
main-menu-bg-hover-background: "Main menu on hover" main-menu-bg-hover-background: "Hlavní menu při přejetí myší"
main-menu-font-color: "Main menu font" main-menu-font-color: "Písmo hlavního menu"
main-menu-selected-font-color: "Main menu font when selected" main-menu-selected-font-color: "Písmo hlavního menu při výběru"
main-menu-hover-font-color: "Main menu font on hover" main-menu-hover-font-color: "Písmo hlavního menu při přejetí myší"
main-menu-border-color: "Main menu border" main-menu-border-color: "Okraj hlavního menu"
custom_colors: "Vlastní barvy" custom_colors: "Vlastní barvy"
customize: "Přizpůsobte si svou OpenProject instalaci vlastním logem. Poznámka: Logo bude veřejně přístupné." customize: "Přizpůsobte si svou OpenProject instalaci vlastním logem. Poznámka: Logo bude veřejně přístupné."
enterprise_notice: "Jako zvláštní 'Děkujeme!' za jejich finanční příspěvky na vývoj OpenProjektu, je tato malá funkce dostupná pouze pro podporu Enterprise Edition." enterprise_notice: "Jako zvláštní 'Děkujeme!' za jejich finanční příspěvky na vývoj OpenProjektu, je tato malá funkce dostupná pouze pro podporu Enterprise Edition."
manage_colors: "Upravit možnosti výběru barvy" manage_colors: "Upravit možnosti výběru barvy"
instructions: instructions:
alternative-color: "Strong accent color, typically used for the most important button on a screen." alternative-color: "Silná barva zvýraznění, obvykle používaná pro nejdůležitější tlačítko na obrazovce."
content-link-color: "Barva písma většiny odkazů." content-link-color: "Barva písma většiny odkazů."
primary-color: "Hlavní barva." primary-color: "Hlavní barva."
primary-color-dark: "Obvykle tmavší verze hlavní barvy použité pro efekt vznášení." primary-color-dark: "Obvykle tmavší verze hlavní barvy použité pro efekt vznášení."
@ -61,7 +61,7 @@ cs:
header-item-font-hover-color: "Barva pozadí klikacích položek záhlaví při najetí myší." header-item-font-hover-color: "Barva pozadí klikacích položek záhlaví při najetí myší."
header-border-bottom-color: "Tenký řádek pod záhlavím. Ponechte toto pole prázdné, pokud nechcete žádný řádek." header-border-bottom-color: "Tenký řádek pod záhlavím. Ponechte toto pole prázdné, pokud nechcete žádný řádek."
main-menu-bg-color: "Barva pozadí levého menu." main-menu-bg-color: "Barva pozadí levého menu."
theme_warning: Changing the theme will overwrite you custom style. The design will then be lost. Are you sure you want to continue? theme_warning: Změna motivu přepíše váš vlastní styl. Vzhled pak bude ztracen. Jste si jisti, že chcete pokračovat?
enterprise: enterprise:
upgrade_to_ee: "Upgrade to the Enterprise Edition" upgrade_to_ee: "Upgrade to the Enterprise Edition"
add_token: "Nahrát podpůrný token Enterprise Edition" add_token: "Nahrát podpůrný token Enterprise Edition"
@ -94,13 +94,13 @@ cs:
cancelled_due_to: "Job was cancelled due to error: %{message}" cancelled_due_to: "Job was cancelled due to error: %{message}"
ldap_auth_sources: ldap_auth_sources:
technical_warning_html: | technical_warning_html: |
This LDAP form requires technical knowledge of your LDAP / Active Directory setup. Tento LDAP formulář vyžaduje technické znalosti nastavení LDAP / Active Directory.
<br/> <br/>
<a href="https://www.openproject.org/help/administration/manage-ldap-authentication/">Please visit our documentation for detailed instructions</a>. <a href="https://www.openproject.org/help/administration/manage-ldap-authentication/">Prosím navštivte naši dokumentaci pro podrobné pokyny</a>.
attribute_texts: attribute_texts:
name: Arbitrary name of the LDAP connection name: Arbitrary name of the LDAP connection
host: LDAP host name or IP address host: LDAP název hostitele nebo IP adresa
login_map: The attribute key in LDAP that is used to identify the unique user login. Usually, this will be `uid` or `samAccountName`. login_map: Atribut klíč v LDAP, který se používá k identifikaci jedinečného přihlášení uživatele. Obvykle se jedná o `uid` nebo `samAccountName`.
generic_map: The attribute key in LDAP that is mapped to the OpenProject `%{attribute}` attribute generic_map: The attribute key in LDAP that is mapped to the OpenProject `%{attribute}` attribute
admin_map_html: "Optional: The attribute key in LDAP that <strong>if present</strong> marks the OpenProject user an admin. Leave empty when in doubt." admin_map_html: "Optional: The attribute key in LDAP that <strong>if present</strong> marks the OpenProject user an admin. Leave empty when in doubt."
system_user_dn_html: | system_user_dn_html: |
@ -126,12 +126,12 @@ cs:
If you enable group synchronization for this LDAP connection, users will also be automatically created If you enable group synchronization for this LDAP connection, users will also be automatically created
in OpenProject for synchronized groups. Without it, only existing accounts in OpenProject will be added to groups. in OpenProject for synchronized groups. Without it, only existing accounts in OpenProject will be added to groups.
connection_encryption: 'Šifrování připojení' connection_encryption: 'Šifrování připojení'
system_account: 'System account' system_account: 'Systémový účet'
system_account_legend: | system_account_legend: |
OpenProject requires read-only access through a system account to lookup users and groups in your LDAP tree. OpenProject vyžaduje přístup pouze pro čtení prostřednictvím systémového účtu pro vyhledávání uživatelů a skupin ve stromu LDAP.
Please specify the bind credentials for that system user in the following section. Zadejte prosím přístupové údaje pro tohoto systémového uživatele v následující sekci.
ldap_details: 'Podrobnosti LDAP' ldap_details: 'Podrobnosti LDAP'
user_settings: 'Attribute mapping' user_settings: 'Mapování atributů'
user_settings_legend: | user_settings_legend: |
The following fields are related to how users are created in OpenProject from LDAP entries and The following fields are related to how users are created in OpenProject from LDAP entries and
what LDAP attributes are used to define the attributes of an OpenProject user (attribute mapping). what LDAP attributes are used to define the attributes of an OpenProject user (attribute mapping).
@ -539,7 +539,7 @@ cs:
invalid_url: 'není platná adresa URL.' invalid_url: 'není platná adresa URL.'
invalid_url_scheme: 'není podporovaný protokol (povoleny: %{allowed_schemes}).' invalid_url_scheme: 'není podporovaný protokol (povoleny: %{allowed_schemes}).'
less_than_or_equal_to: "musí být menší než nebo rovno %{count}." less_than_or_equal_to: "musí být menší než nebo rovno %{count}."
not_current_user: "is not the current user." not_current_user: "není aktuální uživatel."
not_a_date: "není platné datum." not_a_date: "není platné datum."
not_a_datetime: "není platný čas." not_a_datetime: "není platný čas."
not_a_number: "není číslo." not_a_number: "není číslo."
@ -1118,7 +1118,7 @@ cs:
enumeration_work_package_priorities: "Priority pracovního balíčku" enumeration_work_package_priorities: "Priority pracovního balíčku"
enumeration_reported_project_statuses: "Nahlášený stav projektu" enumeration_reported_project_statuses: "Nahlášený stav projektu"
error_auth_source_sso_failed: "Jednotné přihlášení (SSO) pro uživatele '%{value}' selhalo" error_auth_source_sso_failed: "Jednotné přihlášení (SSO) pro uživatele '%{value}' selhalo"
error_can_not_archive_project: "This project cannot be archived: %{errors}" error_can_not_archive_project: "Tento projekt nelze archivovat: %{errors}"
error_can_not_delete_entry: "Nelze odstranit položku" error_can_not_delete_entry: "Nelze odstranit položku"
error_can_not_delete_custom_field: "Nelze odstranit vlastní pole" error_can_not_delete_custom_field: "Nelze odstranit vlastní pole"
error_can_not_delete_type: "Tento typ obsahuje pracovní balíčky a nedá sa odstrániť." error_can_not_delete_type: "Tento typ obsahuje pracovní balíčky a nedá sa odstrániť."
@ -1127,7 +1127,7 @@ cs:
error_can_not_remove_role: "Tato role je používána a nelze ji odstranit." error_can_not_remove_role: "Tato role je používána a nelze ji odstranit."
error_can_not_reopen_work_package_on_closed_version: "Pracovní balíček v uzavřené verzi nemůže být znovu otevřen" error_can_not_reopen_work_package_on_closed_version: "Pracovní balíček v uzavřené verzi nemůže být znovu otevřen"
error_can_not_find_all_resources: "Nelze najít všechny související zdroje k tomuto požadavku." error_can_not_find_all_resources: "Nelze najít všechny související zdroje k tomuto požadavku."
error_can_not_unarchive_project: "This project cannot be unarchived: %{errors}" error_can_not_unarchive_project: "Tento projekt nemůže být odarchivován: %{errors}"
error_check_user_and_role: "Vyberte uživatele a roli." error_check_user_and_role: "Vyberte uživatele a roli."
error_code: "Chyba %{code}" error_code: "Chyba %{code}"
error_cookie_missing: 'OpenProject cookie chybí. Ujistěte se, že jsou soubory cookie povoleny, protože aplikace nebude správně fungovat.' error_cookie_missing: 'OpenProject cookie chybí. Ujistěte se, že jsou soubory cookie povoleny, protože aplikace nebude správně fungovat.'
@ -1187,7 +1187,7 @@ cs:
pdf_with_descriptions_and_attachments: "PDF s popisky a přílohami" pdf_with_descriptions_and_attachments: "PDF s popisky a přílohami"
pdf_with_attachments: "PDF s přílohami" pdf_with_attachments: "PDF s přílohami"
image: image:
omitted: "Image not exported." omitted: "Obrázek nebyl exportován."
extraction: extraction:
available: available:
pdftotext: "Pdftotext k dispozici (volitelné)" pdftotext: "Pdftotext k dispozici (volitelné)"
@ -1230,6 +1230,8 @@ cs:
blog: "OpenProject blog" blog: "OpenProject blog"
forums: "Komunitní fórum" forums: "Komunitní fórum"
newsletter: "Bezpečnostní upozornění / newsletter" newsletter: "Bezpečnostní upozornění / newsletter"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:
@ -1766,25 +1768,25 @@ cs:
label_workflow_plural: "Pracovní vrstvy" label_workflow_plural: "Pracovní vrstvy"
label_workflow_summary: "Souhrn" label_workflow_summary: "Souhrn"
label_x_closed_work_packages_abbr: label_x_closed_work_packages_abbr:
zero: "0 closed" zero: "0 uzavřeno"
one: "1 uzavřen" one: "1 uzavřen"
few: "%{count} uzavřeny" few: "%{count} uzavřeny"
many: "%{count} uzavřeny" many: "%{count} uzavřeny"
other: "%{count} uzavřeny" other: "%{count} uzavřeny"
label_x_comments: label_x_comments:
zero: "no comments" zero: "žádné komentáře"
one: "1 komentář" one: "1 komentář"
few: "%{count} komentářů" few: "%{count} komentářů"
many: "%{count} komentářů" many: "%{count} komentářů"
other: "%{count} komentářů" other: "%{count} komentářů"
label_x_open_work_packages_abbr: label_x_open_work_packages_abbr:
zero: "0 open" zero: "0 otevřených"
one: "1 otevřený" one: "1 otevřený"
few: "%{count} otevřených" few: "%{count} otevřených"
many: "%{count} otevřených" many: "%{count} otevřených"
other: "%{count} otevřených" other: "%{count} otevřených"
label_x_projects: label_x_projects:
zero: "no projects" zero: "Žádné projekty"
one: "1 projekt" one: "1 projekt"
few: "%{count} projektů" few: "%{count} projektů"
many: "%{count} projektů" many: "%{count} projektů"
@ -1830,14 +1832,14 @@ cs:
mail_body_register_closing: "Your OpenProject team" mail_body_register_closing: "Your OpenProject team"
mail_body_register_ending: "Stay connected! Kind regards," mail_body_register_ending: "Stay connected! Kind regards,"
mail_body_reminder: "%{count} pracovních balíčků, které máte přiřazeny, mají termín během následujících %{days} dnů:" mail_body_reminder: "%{count} pracovních balíčků, které máte přiřazeny, mají termín během následujících %{days} dnů:"
mail_body_group_reminder: "%{count} work package(s) that are assigned to group \"%{group}\" are due in the next %{days} days:" mail_body_group_reminder: "%{count} pracovních balíčků, které jsou přiřazeny ke skupině \"%{group}\", má termín splatnosti během následujících %{days} dnů:"
mail_body_wiki_content_added: "Wiki stránka '%{id}' byla přidána uživatelem %{author}." mail_body_wiki_content_added: "Wiki stránka '%{id}' byla přidána uživatelem %{author}."
mail_body_wiki_content_updated: "Wiki stránka '%{id}' byla aktualizována uživatelem %{author}." mail_body_wiki_content_updated: "Wiki stránka '%{id}' byla aktualizována uživatelem %{author}."
mail_subject_account_activation_request: "Žádost o aktivaci účtu %{value}" mail_subject_account_activation_request: "Žádost o aktivaci účtu %{value}"
mail_subject_lost_password: "Vaše heslo %{value}" mail_subject_lost_password: "Vaše heslo %{value}"
mail_subject_register: "Aktivace vašeho účtu %{value}" mail_subject_register: "Aktivace vašeho účtu %{value}"
mail_subject_reminder: "%{count} pracovních balíčků s termínem do dalších %{days} dnů" mail_subject_reminder: "%{count} pracovních balíčků s termínem do dalších %{days} dnů"
mail_subject_group_reminder: "For group \"%{group}\" %{count} work package(s) due in the next %{days} days" mail_subject_group_reminder: "Pro skupinu \"%{group}\" %{count} pracovních balíčků splatných během následujících %{days} dnů"
mail_subject_wiki_content_added: "'%{id}' wiki stránka byla přidána" mail_subject_wiki_content_added: "'%{id}' wiki stránka byla přidána"
mail_subject_wiki_content_updated: "'%{id}' wiki stránka byla aktualizována" mail_subject_wiki_content_updated: "'%{id}' wiki stránka byla aktualizována"
mail_user_activation_limit_reached: mail_user_activation_limit_reached:

@ -1198,6 +1198,8 @@ da:
blog: "OpenProject blog" blog: "OpenProject blog"
forums: "Community forum" forums: "Community forum"
newsletter: "Security alerts / Newsletter" newsletter: "Security alerts / Newsletter"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -33,13 +33,13 @@ de:
colors: colors:
alternative-color: "Alternativ" alternative-color: "Alternativ"
content-link-color: "Link-Schriftfarbe" content-link-color: "Link-Schriftfarbe"
primary-color: "Primär" primary-color: "Primärfarbe"
primary-color-dark: "Primär (dunkel)" primary-color-dark: "Primärfarbe (dunkel)"
header-bg-color: "Hintergrund der Kopfzeile" header-bg-color: "Hintergrund der Kopfzeile"
header-item-bg-hover-color: "Hintergrund der Kopfzeile bei Hover" header-item-bg-hover-color: "Hintergrund der Kopfzeile bei Hover"
header-item-font-color: "Textfarbe der Kopfzeile" header-item-font-color: "Textfarbe der Kopfzeile"
header-item-font-hover-color: "Textfarbe der Kopfzeile bei Hover" header-item-font-hover-color: "Textfarbe der Kopfzeile bei Hover"
header-border-bottom-color: "Header border" header-border-bottom-color: "Rahmenfarbe der Kopfzeile"
main-menu-bg-color: "Hintergrundfarbe des Hauptmenüs" main-menu-bg-color: "Hintergrundfarbe des Hauptmenüs"
main-menu-bg-selected-background: "Hintergrundfarbe des Hauptmenüs bei Auswahl" main-menu-bg-selected-background: "Hintergrundfarbe des Hauptmenüs bei Auswahl"
main-menu-bg-hover-background: "Hintergrundfarbe des Hauptmenüs bei Hover" main-menu-bg-hover-background: "Hintergrundfarbe des Hauptmenüs bei Hover"
@ -52,7 +52,7 @@ de:
enterprise_notice: "Als ein besonderes Dankeschön für Ihre finanzielle Unterstützung in der Entwicklung von OpenProject ist diese Funktionalität nur in Verknüpfung mit einem Enterprise-Edition Abonnement verfügbar." enterprise_notice: "Als ein besonderes Dankeschön für Ihre finanzielle Unterstützung in der Entwicklung von OpenProject ist diese Funktionalität nur in Verknüpfung mit einem Enterprise-Edition Abonnement verfügbar."
manage_colors: "Farbauswahloptionen bearbeiten" manage_colors: "Farbauswahloptionen bearbeiten"
instructions: instructions:
alternative-color: "Starken Akzentfarbe, wird normalerweise für die wichtigste Schaltfläche auf dem Bildschirm verwendet." alternative-color: "Starke Akzentfarbe, wird normalerweise für die wichtigste Schaltfläche auf dem Bildschirm verwendet."
content-link-color: "Schriftfarbe der meisten Links." content-link-color: "Schriftfarbe der meisten Links."
primary-color: "Hauptfarbe." primary-color: "Hauptfarbe."
primary-color-dark: "In der Regel wird eine dunklere Version der Hauptfarbe für Hover-Effekte verwendet." primary-color-dark: "In der Regel wird eine dunklere Version der Hauptfarbe für Hover-Effekte verwendet."
@ -96,13 +96,13 @@ de:
technical_warning_html: | technical_warning_html: |
Dieses LDAP-Formular erfordert technische Kenntnisse ihres LDAP-/Active Directory Setups. Dieses LDAP-Formular erfordert technische Kenntnisse ihres LDAP-/Active Directory Setups.
<br/> <br/>
<a href="https://www.openproject.org/help/administration/manage-ldap-authentication/">Bitte besuchen Sie unsere Dokumentation für detaillierte Anweisungen</a>. <a href="https://www.openproject.org/help/administration/manage-ldap-authentication/">Bitte rufen Sie für eine detaillierte Anleitung unsere Dokumentation auf</a>.
attribute_texts: attribute_texts:
name: Beliebiger Name der LDAP-Verbindung name: Beliebiger Name der LDAP-Verbindung
host: LDAP Hostname oder IP-Adresse host: LDAP-Hostname oder IP-Adresse
login_map: Der Attributschlüssel in LDAP, der benutzt wird, um die eindeutige Benutzeranmeldung zu identifizieren. Normalerweise wird dies `uid` oder `samAccountName` sein. login_map: Der Attributschlüssel in LDAP, der benutzt wird, um die eindeutige Benutzeranmeldung zu identifizieren. Normalerweise ist das `uid` oder `samAccountName`.
generic_map: Der Attributschlüssel in LDAP, der dem OpenProject `%{attribute}` Attribut zugeordnet ist generic_map: Der Attributschlüssel in LDAP, der dem OpenProject `%{attribute}` Attribut zugeordnet ist
admin_map_html: "Optional: Der Attributenschlüssel in LDAP der, <strong>falls vorhanden</strong>, den OpenProject Nutzer als einen Administrator makiert. \nIm Zweifel leer lassen." admin_map_html: "Optional: Der Attributschlüssel in LDAP der, <strong>falls vorhanden</strong>, den OpenProject-Nutzer als einen Administrator markiert. \nIm Zweifel leer lassen."
system_user_dn_html: | system_user_dn_html: |
Geben Sie den DN des Systembenutzers ein, der für schreibgeschützten Zugriff verwendet wird. Geben Sie den DN des Systembenutzers ein, der für schreibgeschützten Zugriff verwendet wird.
<br/> <br/>
@ -126,7 +126,7 @@ de:
connection_encryption: 'Verbindungsverschlüsselung' connection_encryption: 'Verbindungsverschlüsselung'
system_account: 'Systemkonto' system_account: 'Systemkonto'
system_account_legend: | system_account_legend: |
OpenProject benötigt lesenden Zugriff über ein LDAP Systemkonto, um Benutzer und Gruppen in Ihrem LDAP-Baum zu suchen. OpenProject benötigt lesenden Zugriff über ein LDAP-Systemkonto, um Benutzer und Gruppen in Ihrem LDAP-Baum zu suchen.
Bitte geben Sie die Anmeldedaten für den Systembenutzer im folgenden Abschnitt an. Bitte geben Sie die Anmeldedaten für den Systembenutzer im folgenden Abschnitt an.
ldap_details: 'LDAP-Details' ldap_details: 'LDAP-Details'
user_settings: 'Zuordnen von Attributen' user_settings: 'Zuordnen von Attributen'
@ -532,7 +532,7 @@ de:
invalid_url: 'ist keine gültige URL.' invalid_url: 'ist keine gültige URL.'
invalid_url_scheme: 'ist kein unterstütztes Protokoll (erlaubt: %{allowed_schemes}).' invalid_url_scheme: 'ist kein unterstütztes Protokoll (erlaubt: %{allowed_schemes}).'
less_than_or_equal_to: "muss kleiner oder gleich %{count} sein." less_than_or_equal_to: "muss kleiner oder gleich %{count} sein."
not_current_user: "is not the current user." not_current_user: "ist nicht der aktuelle Benutzer."
not_a_date: "ist kein gültiges Datum." not_a_date: "ist kein gültiges Datum."
not_a_datetime: "ist kein gültiges Datum." not_a_datetime: "ist kein gültiges Datum."
not_a_number: "ist keine Zahl." not_a_number: "ist keine Zahl."
@ -1193,6 +1193,8 @@ de:
blog: "OpenProject Blog" blog: "OpenProject Blog"
forums: "Community Forum" forums: "Community Forum"
newsletter: "Sicherheitswarnungen / Newsletter" newsletter: "Sicherheitswarnungen / Newsletter"
image_conversion:
imagemagick: 'ImageMagick'
journals: journals:
changes_retracted: "Die Änderungen wurden zurückgezogen." changes_retracted: "Die Änderungen wurden zurückgezogen."
links: links:
@ -1368,7 +1370,7 @@ de:
label_enterprise_active_users: "%{current}/%{limit} gebuchte aktive Nutzer" label_enterprise_active_users: "%{current}/%{limit} gebuchte aktive Nutzer"
label_enterprise_edition: "Enterprise-Edition" label_enterprise_edition: "Enterprise-Edition"
label_environment: "Umgebung" label_environment: "Umgebung"
label_estimates_and_time: "Schätzungen & Zeit" label_estimates_and_time: "Schätzungen & Zeiten"
label_equals: "ist" label_equals: "ist"
label_everywhere: "überall" label_everywhere: "überall"
label_example: "Beispiel" label_example: "Beispiel"

@ -1195,6 +1195,8 @@ el:
blog: "OpenProject blog" blog: "OpenProject blog"
forums: "Φόρουμ κοινότητας" forums: "Φόρουμ κοινότητας"
newsletter: "Ειδοποιήσεις ασφάλεια / Ενημερωτικό δελτίο" newsletter: "Ειδοποιήσεις ασφάλεια / Ενημερωτικό δελτίο"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "Οι αλλαγές αποσύρθηκαν." changes_retracted: "Οι αλλαγές αποσύρθηκαν."
links: links:

@ -1195,6 +1195,8 @@ es:
blog: "Blog de OpenProject" blog: "Blog de OpenProject"
forums: "Foro de la comunidad" forums: "Foro de la comunidad"
newsletter: "Alertas de seguridad / boletín" newsletter: "Alertas de seguridad / boletín"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "Se deshicieron los cambios." changes_retracted: "Se deshicieron los cambios."
links: links:

@ -1198,6 +1198,8 @@ fi:
blog: "OpenProject blogi" blog: "OpenProject blogi"
forums: "Keskustelupalsta" forums: "Keskustelupalsta"
newsletter: "Suojausvaroitukset / uutiskirje" newsletter: "Suojausvaroitukset / uutiskirje"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -1198,6 +1198,8 @@ fil:
blog: "Blog ng OpenProject" blog: "Blog ng OpenProject"
forums: "Komunidad forum" forums: "Komunidad forum"
newsletter: "Mga alertong seguridad/ Newsletter" newsletter: "Mga alertong seguridad/ Newsletter"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -536,7 +536,7 @@ fr:
invalid_url: 'n’est pas une URL valide.' invalid_url: 'n’est pas une URL valide.'
invalid_url_scheme: 'n’est pas un protocole pris en charge (autorisés : %{allowed_schemes}).' invalid_url_scheme: 'n’est pas un protocole pris en charge (autorisés : %{allowed_schemes}).'
less_than_or_equal_to: "doit être inférieur ou égal à %{count}." less_than_or_equal_to: "doit être inférieur ou égal à %{count}."
not_current_user: "is not the current user." not_current_user: "n'est pas l'utilisateur actuel."
not_a_date: "n'est pas une date valide." not_a_date: "n'est pas une date valide."
not_a_datetime: "n'est pas une heure valide." not_a_datetime: "n'est pas une heure valide."
not_a_number: "n'est pas un nombre." not_a_number: "n'est pas un nombre."
@ -1197,6 +1197,8 @@ fr:
blog: "Blog OpenProject" blog: "Blog OpenProject"
forums: "Forum de la communauté" forums: "Forum de la communauté"
newsletter: "Alertes de sécurité / Lettre d’information" newsletter: "Alertes de sécurité / Lettre d’information"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "Les modifications ont été retirées." changes_retracted: "Les modifications ont été retirées."
links: links:

@ -1214,6 +1214,8 @@ hr:
blog: "OpenProject blog" blog: "OpenProject blog"
forums: "Forum Zajednice" forums: "Forum Zajednice"
newsletter: "Security alerts / Newsletter" newsletter: "Security alerts / Newsletter"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -1195,6 +1195,8 @@ hu:
blog: "OpenProject blog" blog: "OpenProject blog"
forums: "Közösségi fórum" forums: "Közösségi fórum"
newsletter: "Biztonsági figyelmeztetések / hírlevél" newsletter: "Biztonsági figyelmeztetések / hírlevél"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -1181,6 +1181,8 @@ id:
blog: "OpenProject blog" blog: "OpenProject blog"
forums: "Community forum" forums: "Community forum"
newsletter: "Peringatan keamanan / Jurnal berkala" newsletter: "Peringatan keamanan / Jurnal berkala"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -1194,6 +1194,8 @@ it:
blog: "Blog di OpenProject" blog: "Blog di OpenProject"
forums: "Forum della Comunità" forums: "Forum della Comunità"
newsletter: "Avvisi di sicurezza / Notizie" newsletter: "Avvisi di sicurezza / Notizie"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "Le modifiche sono state annullate." changes_retracted: "Le modifiche sono state annullate."
links: links:

@ -1177,6 +1177,8 @@ ja:
blog: "OpenProject ブログ" blog: "OpenProject ブログ"
forums: "コミュニティ フォーラム" forums: "コミュニティ フォーラム"
newsletter: "セキュリティアラート / ニュースレター" newsletter: "セキュリティアラート / ニュースレター"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -271,7 +271,7 @@ de:
standard: standard:
learn_about_link: https://www.openproject.org/openproject-11-0-release learn_about_link: https://www.openproject.org/openproject-11-0-release
current_new_feature_html: > current_new_feature_html: >
Die Version enthält zahlreiche neue Funktionen und Verbesserungen: <br> <ul class="%{list_styling_class}"> <li><b>Top-Down-Planung</b> um alle Projektaufgaben zu definieren. Dabei sind die Anfangs- und Enddaten eines Elternelements unabhängig von den Daten der Unteraufgaben.</li> <li><b>Vielseitige agile Boards</b> ermöglichen Ihnen die Erstellung eines Projektstrukturplans oder die Verteilung von Aufgaben auf Unterprojekte.</li> <li><b>Projektvorlagen</b> zur einfachen Erstellung neuer Projekte.</li> <li>Konfiguration der Projektseite ermöglicht ein besseres <b>Projektportfolio-Management.</b></li> </ul> Die Version enthält zahlreiche neue Funktionen und Verbesserungen: <br> <ul class="%{list_styling_class}"> <li><b>Top-Down-Planung</b> um alle Projektaufgaben zu definieren. Dabei sind die Anfangs- und Enddaten eines Elternelements unabhängig von den Daten der Unteraufgaben.</li> <li><b>Vielseitige agile Boards</b> ermöglichen Ihnen die Erstellung eines Projektstrukturplans oder die Verteilung von Aufgaben auf Unterprojekte.</li> <li><b>Projektvorlagen</b> zur einfachen Erstellung neuer Projekte.</li> <li>Die Konfiguration der Projektseite ermöglicht ein besseres <b>Projektportfolio-Management.</b></li> </ul>
bim: bim:
learn_about_link: "https://www.openproject.org/openproject-bim-10-5\n" learn_about_link: "https://www.openproject.org/openproject-bim-10-5\n"
current_new_feature_html: > current_new_feature_html: >
@ -477,7 +477,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.' 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: wp:
toggler: "Hier sind die <b>Arbeitspakete</b>, die Ihnen eine detailliertere Sicht auf die Arbeit in Ihrem Projekt geben." 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 eine 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.' 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.' 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.' create_button: 'Mit <b>Anlegen</b> Können Sie neue Arbeitspakete Ihrem Projekt hinzufügen.'
@ -740,7 +740,7 @@ de:
property_groups: property_groups:
details: "Details" details: "Details"
people: "Personen" people: "Personen"
estimatesAndTime: "Schätzungen & Zeit" estimatesAndTime: "Schätzungen & Zeiten"
other: "Andere" other: "Andere"
properties: properties:
assignee: "Zugewiesen an" assignee: "Zugewiesen an"

@ -170,12 +170,12 @@ sv:
reset_to_defaults: 'Återställ standardinställningar' reset_to_defaults: 'Återställ standardinställningar'
enterprise: enterprise:
trial: trial:
confirmation: "Confirmation of email address" confirmation: "Bekräftelse av e-postadress"
confirmation_info: > confirmation_info: >
We sent you an email on %{date} to %{email}. Please check your inbox and click the confirmation link provided to start your 14 days trial. We sent you an email on %{date} to %{email}. Please check your inbox and click the confirmation link provided to start your 14 days trial.
form: form:
general_consent: > general_consent: >
I agree with the <a target="_blank" href="%{link_terms}">terms of service</a> and the <a target="_blank" href="%{link_privacy}">privacy policy</a>. Jag godkänner <a target="_blank" href="%{link_terms}">användarvillkoren</a> och <a target="_blank" href="%{link_privacy}">integritetspolicyn</a>.
invalid_email: "Invalid email address" invalid_email: "Invalid email address"
label_company: "Company" label_company: "Company"
label_first_name: "Förnamn" label_first_name: "Förnamn"
@ -213,11 +213,11 @@ sv:
premium_features_text: "Agile boards, custom theme and logo, graphs, intelligent workflows with custom actions, full text search for work package attachments and multi-select custom fields." premium_features_text: "Agile boards, custom theme and logo, graphs, intelligent workflows with custom actions, full text search for work package attachments and multi-select custom fields."
professional_support: "Professionell hjälp" professional_support: "Professionell hjälp"
professional_support_text: "Get reliable, high-touch support from senior support engineers with expert knowledge about running OpenProject in business-critical environments." professional_support_text: "Get reliable, high-touch support from senior support engineers with expert knowledge about running OpenProject in business-critical environments."
button_start_trial: "Start free trial" button_start_trial: "Starta fri provperiod"
button_book_now: "Book now" button_book_now: "Boka nu"
confidence: > confidence: >
We deliver the confidence of a tested and supported enterprise-class project management software - with Open Source and an open mind. We deliver the confidence of a tested and supported enterprise-class project management software - with Open Source and an open mind.
link_quote: "Get a quote" link_quote: "Få en offert"
text: > text: >
The OpenProject Enterprise Edition builds on top of the Community Edition. It includes premium features and professional support mainly aimed at organizations with more than 10 users that manage business critical projects with OpenProject. The OpenProject Enterprise Edition builds on top of the Community Edition. It includes premium features and professional support mainly aimed at organizations with more than 10 users that manage business critical projects with OpenProject.
unlimited: "Unlimited" unlimited: "Unlimited"

@ -535,7 +535,7 @@ ko:
invalid_url: '은(는) 올바른 URL이 아닙니다.' invalid_url: '은(는) 올바른 URL이 아닙니다.'
invalid_url_scheme: '은(는) 지원되는 프로토콜(허용: %{allowed_schemes})이 아닙니다.' invalid_url_scheme: '은(는) 지원되는 프로토콜(허용: %{allowed_schemes})이 아닙니다.'
less_than_or_equal_to: "은(는) %{count} 보다 작거나 같아야 합니다" less_than_or_equal_to: "은(는) %{count} 보다 작거나 같아야 합니다"
not_current_user: "is not the current user." not_current_user: "은(는) 현재 유효한 사용자가 아닙니다."
not_a_date: "은(는) 유효한 날짜가 아닙니다." not_a_date: "은(는) 유효한 날짜가 아닙니다."
not_a_datetime: "은(는) 유효한 날짜가 아닙니다." not_a_datetime: "은(는) 유효한 날짜가 아닙니다."
not_a_number: "은(는) 숫자가 아닙니다." not_a_number: "은(는) 숫자가 아닙니다."
@ -615,7 +615,7 @@ ko:
queries/filters/base: queries/filters/base:
attributes: attributes:
values: values:
inclusion: "filter has invalid values." inclusion: "필터에 잘못된 값이 있습니다."
format: "%{message}" format: "%{message}"
relation: relation:
typed_dag: typed_dag:
@ -1181,6 +1181,8 @@ ko:
blog: "OpenProject 블로그" blog: "OpenProject 블로그"
forums: "커뮤니티 포럼" forums: "커뮤니티 포럼"
newsletter: "보안 알림/뉴스레터" newsletter: "보안 알림/뉴스레터"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "변경 사항이 취소되었습니다." changes_retracted: "변경 사항이 취소되었습니다."
links: links:

@ -534,7 +534,7 @@ lt:
invalid_url: 'nėra tinkamas URL.' invalid_url: 'nėra tinkamas URL.'
invalid_url_scheme: 'nėra palaikomos protokolas (leidžiamas: %{allowed_schemes}).' invalid_url_scheme: 'nėra palaikomos protokolas (leidžiamas: %{allowed_schemes}).'
less_than_or_equal_to: "turi būti mažesnis arba lygus %{count}." less_than_or_equal_to: "turi būti mažesnis arba lygus %{count}."
not_current_user: "is not the current user." not_current_user: "nėra dabartinis vartotojas"
not_a_date: "nėra tinkama data." not_a_date: "nėra tinkama data."
not_a_datetime: "nėra tinkama data ir laikas." not_a_datetime: "nėra tinkama data ir laikas."
not_a_number: "nėra skaičius." not_a_number: "nėra skaičius."
@ -1225,6 +1225,8 @@ lt:
blog: "OpenProject blogas" blog: "OpenProject blogas"
forums: "Bendruomenės forumas" forums: "Bendruomenės forumas"
newsletter: "Saugos įspėjimai / Naujienos" newsletter: "Saugos įspėjimai / Naujienos"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "Pakeitimai buvo atšaukti." changes_retracted: "Pakeitimai buvo atšaukti."
links: links:

@ -1198,6 +1198,8 @@ nl:
blog: "OpenProject blog" blog: "OpenProject blog"
forums: "Gemeenschapsforum" forums: "Gemeenschapsforum"
newsletter: "Beveiligingswaarschuwingen / nieuwsbrief" newsletter: "Beveiligingswaarschuwingen / nieuwsbrief"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -1198,6 +1198,8 @@
blog: "OpenProject blogg" blog: "OpenProject blogg"
forums: "Brukerforum" forums: "Brukerforum"
newsletter: "Security alerts / Newsletter" newsletter: "Security alerts / Newsletter"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -1226,6 +1226,8 @@ pl:
blog: "Blog OpenProject" blog: "Blog OpenProject"
forums: "Forum społeczności" forums: "Forum społeczności"
newsletter: "Powiadomienia bezpieczeństwa / Newsletter" newsletter: "Powiadomienia bezpieczeństwa / Newsletter"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "Zmiany zostały wycofane." changes_retracted: "Zmiany zostały wycofane."
links: links:

@ -535,7 +535,7 @@ pt:
invalid_url: 'não é um URL válido.' invalid_url: 'não é um URL válido.'
invalid_url_scheme: 'não é um protocolo suportado (permitidos: %{allowed_schemes}).' invalid_url_scheme: 'não é um protocolo suportado (permitidos: %{allowed_schemes}).'
less_than_or_equal_to: "deve ser menor ou igual a %{count}." less_than_or_equal_to: "deve ser menor ou igual a %{count}."
not_current_user: "is not the current user." not_current_user: "não é o usuário atual."
not_a_date: "não é uma data válida." not_a_date: "não é uma data válida."
not_a_datetime: "não é uma data/hora válida." not_a_datetime: "não é uma data/hora válida."
not_a_number: "não é um número." not_a_number: "não é um número."
@ -1196,6 +1196,8 @@ pt:
blog: "Blog do OpenProject" blog: "Blog do OpenProject"
forums: "Fórum da Comunidade" forums: "Fórum da Comunidade"
newsletter: "Alertas de segurança / Newsletter" newsletter: "Alertas de segurança / Newsletter"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "As mudanças foram retraídas." changes_retracted: "As mudanças foram retraídas."
links: links:

@ -538,7 +538,7 @@ ro:
invalid_url: 'nu este o adresa URL validă.' invalid_url: 'nu este o adresa URL validă.'
invalid_url_scheme: 'nu este un protocol permis (allowed: %{allowed_schemes}).' invalid_url_scheme: 'nu este un protocol permis (allowed: %{allowed_schemes}).'
less_than_or_equal_to: "trebuie să fie mai mic sau egal cu %{count}." less_than_or_equal_to: "trebuie să fie mai mic sau egal cu %{count}."
not_current_user: "is not the current user." not_current_user: "nu este utilizatorul curent."
not_a_date: "is not a valid date." not_a_date: "is not a valid date."
not_a_datetime: "is not a valid date time." not_a_datetime: "is not a valid date time."
not_a_number: "nu este un număr." not_a_number: "nu este un număr."
@ -1214,6 +1214,8 @@ ro:
blog: "Blog-ul OpenProject" blog: "Blog-ul OpenProject"
forums: "Forum comunitate" forums: "Forum comunitate"
newsletter: "Security alerts / Newsletter" newsletter: "Security alerts / Newsletter"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -1229,6 +1229,8 @@ ru:
blog: "Openproject блог" blog: "Openproject блог"
forums: "Форум сообщества" forums: "Форум сообщества"
newsletter: "Оповещения системы безопасности / Новости" newsletter: "Оповещения системы безопасности / Новости"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "Изменения отменены." changes_retracted: "Изменения отменены."
links: links:

@ -1230,6 +1230,8 @@ sk:
blog: "OpenProject blog" blog: "OpenProject blog"
forums: "Komunitné fórum" forums: "Komunitné fórum"
newsletter: "Bezpečnostné upozornenia / Newsletter" newsletter: "Bezpečnostné upozornenia / Newsletter"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -1228,6 +1228,8 @@ sl:
blog: "Blog OpenProject" blog: "Blog OpenProject"
forums: "Forum skupnosti" forums: "Forum skupnosti"
newsletter: "Varnostna opozorila / Glasilo" newsletter: "Varnostna opozorila / Glasilo"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "Spremembe so bile umaknjene." changes_retracted: "Spremembe so bile umaknjene."
links: links:

@ -63,16 +63,16 @@ sv:
main-menu-bg-color: "Bakgrundsfärg på den vänstra sidomenyn." main-menu-bg-color: "Bakgrundsfärg på den vänstra sidomenyn."
theme_warning: Changing the theme will overwrite you custom style. The design will then be lost. Are you sure you want to continue? theme_warning: Changing the theme will overwrite you custom style. The design will then be lost. Are you sure you want to continue?
enterprise: enterprise:
upgrade_to_ee: "Upgrade to the Enterprise Edition" upgrade_to_ee: "33 / 5000\nUppgradera till Enterprise Edition"
add_token: "Ladda upp en Enterprise Edition support-nyckel" add_token: "Ladda upp en Enterprise Edition support-nyckel"
replace_token: "Ersätta din nuvarande support-nyckel" replace_token: "Ersätta din nuvarande support-nyckel"
order: "Beställ Enterprise Edition" order: "Beställ Enterprise Edition"
paste: "Klistra in din Enterprise Edition support-nyckel" paste: "Klistra in din Enterprise Edition support-nyckel"
required_for_feature: "Denna funktion är endast tillgänglig med en aktiv Enterprise Edition support-nyckel." required_for_feature: "Denna funktion är endast tillgänglig med en aktiv Enterprise Edition support-nyckel."
enterprise_link: "För mer information, klicka här." enterprise_link: "För mer information, klicka här."
start_trial: 'Start free trial' start_trial: 'Starta fri provperiod'
book_now: 'Book now' book_now: 'Boka nu'
get_quote: 'Get a quote' get_quote: 'Få en offert'
announcements: announcements:
show_until: Visa fram till show_until: Visa fram till
is_active: visas för tillfället is_active: visas för tillfället
@ -1197,11 +1197,13 @@ sv:
blog: "OpenProject blogg" blog: "OpenProject blogg"
forums: "Community forum" forums: "Community forum"
newsletter: "Säkerhetsnotifieringar / Nyhetsbrev" newsletter: "Säkerhetsnotifieringar / Nyhetsbrev"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "Förändringarna drogs tillbaka."
links: links:
configuration_guide: 'Konfigurationsguide' configuration_guide: 'Konfigurationsguide'
get_in_touch: "You have questions? Get in touch with us." get_in_touch: "Har du frågor? Ta kontakt med oss."
instructions_after_registration: "Du kan logga in så snart ditt konto har aktiverats genom att klicka på %{signin}." instructions_after_registration: "Du kan logga in så snart ditt konto har aktiverats genom att klicka på %{signin}."
instructions_after_logout: "Du kan logga in igen genom att klicka på %{signin}." instructions_after_logout: "Du kan logga in igen genom att klicka på %{signin}."
instructions_after_error: "Du kan försöka logga in igen genom att klicka på %{signin}. Om felet kvarstår, be din systemadministratör om hjälp." instructions_after_error: "Du kan försöka logga in igen genom att klicka på %{signin}. Om felet kvarstår, be din systemadministratör om hjälp."
@ -2563,7 +2565,7 @@ sv:
mail_self_notified: "Jag vill bli meddelad om ändringar som jag själv gör" mail_self_notified: "Jag vill bli meddelad om ändringar som jag själv gör"
status_user_and_brute_force: "%{user} och %{brute_force}" status_user_and_brute_force: "%{user} och %{brute_force}"
status_change: "Statusändring" status_change: "Statusändring"
text_change_disabled_for_provider_login: "The name is set by your login provider and can thus not be changed." text_change_disabled_for_provider_login: "Namnet är satt av din inloggningsleverantör och kan därför inte ändras."
unlock: "Lås upp" unlock: "Lås upp"
unlock_and_reset_failed_logins: "Lås upp och nollställ misslyckade inloggningsförsök" unlock_and_reset_failed_logins: "Lås upp och nollställ misslyckade inloggningsförsök"
version_status_closed: "stängt" version_status_closed: "stängt"

@ -1198,6 +1198,8 @@ tr:
blog: "OpenProject blog" blog: "OpenProject blog"
forums: "Topluluk forumu" forums: "Topluluk forumu"
newsletter: "Güvenlik uyarıları / haber bülteni" newsletter: "Güvenlik uyarıları / haber bülteni"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "Değişiklikler geri çekildi." changes_retracted: "Değişiklikler geri çekildi."
links: links:

@ -1230,6 +1230,8 @@ uk:
blog: "Openproject блог" blog: "Openproject блог"
forums: "Форум спільноти" forums: "Форум спільноти"
newsletter: "Сигнали безпеки / Інформаційний бюлетень" newsletter: "Сигнали безпеки / Інформаційний бюлетень"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -1184,6 +1184,8 @@ vi:
blog: "OpenProject blog" blog: "OpenProject blog"
forums: "Diễn đàn cộng đồng" forums: "Diễn đàn cộng đồng"
newsletter: "Security alerts / Newsletter" newsletter: "Security alerts / Newsletter"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "Những thay đổi đã bị rút lại" changes_retracted: "Những thay đổi đã bị rút lại"
links: links:

@ -1177,6 +1177,8 @@ zh-CN:
blog: "OpenProject 博客" blog: "OpenProject 博客"
forums: "社区论坛" forums: "社区论坛"
newsletter: "安全警报/通信" newsletter: "安全警报/通信"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "更改已撤回。" changes_retracted: "更改已撤回。"
links: links:

@ -1182,6 +1182,8 @@ zh-TW:
blog: "Openproject 部落格" blog: "Openproject 部落格"
forums: "社群論壇" forums: "社群論壇"
newsletter: "安全警報 / 消息" newsletter: "安全警報 / 消息"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."
links: links:

@ -1238,6 +1238,9 @@ en:
forums: "Community forum" forums: "Community forum"
newsletter: "Security alerts / Newsletter" newsletter: "Security alerts / Newsletter"
image_conversion:
imagemagick: 'Imagemagick'
journals: journals:
changes_retracted: "The changes were retracted." changes_retracted: "The changes were retracted."

@ -0,0 +1,40 @@
#-- encoding: UTF-8
#-- copyright
# OpenProject is an open source project management software.
# Copyright (C) 2012-2020 the OpenProject GmbH
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2017 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See docs/COPYRIGHT.rdoc for more details.
#++
class RemoveRenamedCronJob < ActiveRecord::Migration[6.0]
def up
# The job has been renamed to JobStatus::Cron::ClearOldJobStatusJob
# the new job will be added on restarting the application but the old will still be in the database
# and will cause 'uninitialized constant' errors.
Delayed::Job
.where('handler LIKE ?', "%job_class: Cron::ClearOldJobStatusJob%")
.delete_all
end
end

@ -18,7 +18,8 @@ apt-get install -y \
tesseract-ocr \ tesseract-ocr \
catdoc \ catdoc \
postgresql-9.6 \ postgresql-9.6 \
postgresql-client-9.6 postgresql-client-9.6 \
imagemagick
rm -rf "$PGDATA_LEGACY" rm -rf "$PGDATA_LEGACY"

@ -42,7 +42,7 @@ bundle install
You may have a look at some existing OpenProject plugins to get inspiration. It is possible to add new routes, views, models, … and/or overwrite existing ones. You may have a look at some existing OpenProject plugins to get inspiration. It is possible to add new routes, views, models, … and/or overwrite existing ones.
Feel free to ask for help in our [Development Forum](https://community.openproject.org/projects/openproject/boards/7). Feel free to ask for help in our [Development Forum](https://community.openproject.com/projects/openproject/forums/7).
## Steps to release a plugin ## Steps to release a plugin

@ -34,10 +34,6 @@ Please include a description on how to reproduce the issue if possible. Our secu
OpenProject administrators can enforce [authentication mechanisms and password rules]() to ensure users choose secure passwords according to current industry standards. Passwords stored by OpenProject are securely stored using salted bcrypt. Alternatively, external authentication providers and protocols (such as LDAP, SAML) can be enforced to avoid using and exposing passwords within OpenProject. OpenProject administrators can enforce [authentication mechanisms and password rules]() to ensure users choose secure passwords according to current industry standards. Passwords stored by OpenProject are securely stored using salted bcrypt. Alternatively, external authentication providers and protocols (such as LDAP, SAML) can be enforced to avoid using and exposing passwords within OpenProject.
### Two-step user registration
In compliance with common requirements in works committees, ensure that new users added by project responsibles are confirmed by a superior before allowing the user to enter the system for the first time.
### User management and access control. ### User management and access control.
Administrators are provided with [fine-grained role-based access control mechanisms]() to ensure that users are only seeing and accessing the data they are allowed to on an individual project level. Administrators are provided with [fine-grained role-based access control mechanisms]() to ensure that users are only seeing and accessing the data they are allowed to on an individual project level.

@ -4,7 +4,7 @@ sidebar_navigation:
priority: 400 priority: 400
description: Learn how to configure account settings. description: Learn how to configure account settings.
robots: index, follow robots: index, follow
keywords: my account, account settings keywords: my account, account settings, change language
--- ---
# My Account # My Account
@ -16,7 +16,7 @@ Change your personal settings in My Account. Here you can adapt, e.g. the langua
| [Open My Account settings](#open-my-account-settings) | How to open your personal settings in OpenProject? | | [Open My Account settings](#open-my-account-settings) | How to open your personal settings in OpenProject? |
| [Change password](#change-password) | How to change my password? | | [Change password](#change-password) | How to change my password? |
| [Edit your user information](#edit-your-user-information) | How to change the name or email address in OpenProject? | | [Edit your user information](#edit-your-user-information) | How to change the name or email address in OpenProject? |
| [Profile settings: change your language, time zone or display of comments](#profile-settings:-change-your-language,-time-zone-or-display-of-comments) | How to change the language, time zone or display of comments in OpenProject? | | [Profile settings: change your language, time zone or display of comments](#profile-settings) | How to change the language, time zone or display of comments in OpenProject? |
| [Two-factor authentication](#two-factor-authentication-premium-feature) | How to set up a two-factor authentication? | | [Two-factor authentication](#two-factor-authentication-premium-feature) | How to set up a two-factor authentication? |
| [Email notifications](#email-notifications) | How to change email notifications sent by OpenProject? | | [Email notifications](#email-notifications) | How to change email notifications sent by OpenProject? |
| [Set an Avatar](#set-an-avatar) | How to set an Avatar in OpenProject and change the profile picture? | | [Set an Avatar](#set-an-avatar) | How to set an Avatar in OpenProject and change the profile picture? |

@ -1,11 +1,10 @@
---
sidebar_navigation: sidebar_navigation:
title: Sign in and registration title: Sign in and registration
priority: 990 priority: 990
description: Sign in and registration in OpenProject. description: Sign in and registration in OpenProject.
robots: index, follow robots: index, follow
keywords: sing in, login, registration keywords: sing in, login, registration
---
# Sign in and registration # Sign in and registration
Here you will get an overview how to sign in and register to an existing OpenProject installation. Here you will get an overview how to sign in and register to an existing OpenProject installation.

@ -49,7 +49,8 @@ sudo passwd openproject #(enter desired password)
libncurses5-dev automake \ libncurses5-dev automake \
libtool bison libffi-dev git curl \ libtool bison libffi-dev git curl \
poppler-utils unrtf tesseract-ocr catdoc \ poppler-utils unrtf tesseract-ocr catdoc \
libxml2 libxml2-dev libxslt1-dev # nokogiri libxml2 libxml2-dev libxslt1-dev # nokogiri \
imagemagick
``` ```
## Install the caching server (memcached) ## Install the caching server (memcached)

@ -62,3 +62,5 @@ After you are done you can leave the console by entering `exit`.
Once this is done you will see an "Okta" button in the bottom area of the login form. Once this is done you will see an "Okta" button in the bottom area of the login form.
Clicking on it will start the login process. Clicking on it will start the login process.
_**Note**: This is an Enterprise Edition feature. If you do not see the button you will have to activate the Enterprise Edition first._

@ -6,7 +6,7 @@ sidebar_navigation:
# Frequently asked questions - FAQ # Frequently asked questions - FAQ
## I lost access to my admin account, how to I reset my password? ## I lost access to my admin account, how do I reset my password?
You can reset your admin account through the Rails console. You can reset your admin account through the Rails console.
[Please see this separate page on how to start the console](https://docs.openproject.org/installation-and-operations/operation/control/). [Please see this separate page on how to start the console](https://docs.openproject.org/installation-and-operations/operation/control/).

@ -0,0 +1,28 @@
---
title: OpenProject 11.0.4
sidebar_navigation:
title: 11.0.4
release_version: 11.0.4
release_date: 2020-12-03
---
# OpenProject 11.0.4
We released [OpenProject 11.0.4](https://community.openproject.com/versions/1458).
The release contains several bug fixes and we recommend updating to the newest version.
<!--more-->
#### Bug fixes and changes
- Fixed: Budgets Fail to Copy due to Missing Superclass Method \[[#34966](https://community.openproject.com/wp/34966)\]
- Fixed: Selected design / theme lost when switching to "Backlogs" module \[[#34968](https://community.openproject.com/wp/34968)\]
- Fixed: Initially seeded homepage grid cannot be edited \[[#35266](https://community.openproject.com/wp/35266)\]
- Fixed: [Translation][German] Administration>User&Permissions>Roles \[[#35363](https://community.openproject.com/wp/35363)\]
- Fixed: Internal error (500) on meeting history page when clicking on previous version link \[[#35433](https://community.openproject.com/wp/35433)\]
#### Contributions
A big thanks to community members for reporting bugs and helping us identifying and providing fixes.
Special thanks for reporting and finding bugs go to
Boris Lukashev, Benjamin Bädorf, Frank Schmid

@ -155,7 +155,3 @@ perform the upgrade.
[Please visit our upgrade guides for more [Please visit our upgrade guides for more
information](https://www.openproject.org/operations/upgrading/). information](https://www.openproject.org/operations/upgrading/).
 
</div>

@ -12,6 +12,13 @@ Stay up to date and get an overview of the new features included in the releases
<!--- New release notes are generated below. Do not remove comment. --> <!--- New release notes are generated below. Do not remove comment. -->
<!--- RELEASE MARKER --> <!--- RELEASE MARKER -->
## 11.0.4
Release date: 2020-12-03
[Release Notes](11-0-4/)
## 11.0.3 ## 11.0.3
Release date: 2020-11-16 Release date: 2020-11-16

@ -52,3 +52,10 @@ To create a new synchronized group, use the button on the top right of the page
The *entry* *identifier* field corresponds to the value of the group key, e.g. **groupA** for our first exemplary group. The *entry* *identifier* field corresponds to the value of the group key, e.g. **groupA** for our first exemplary group.
Click on *Create* to finish the creation of the synchronized group. The LDAP memberships of each user will be synchronized hourly through a cron job on your packaged installation. Changes and output will be logged to */var/log/openproject/cron-hourly.log*. Click on *Create* to finish the creation of the synchronized group. The LDAP memberships of each user will be synchronized hourly through a cron job on your packaged installation. Changes and output will be logged to */var/log/openproject/cron-hourly.log*.
If you want to trigger the synchronization *manually* you can do so by running the respective rake task directly.
In the packaged installation, for instance, this would work like this:
```
sudo openproject run bundle exec rake ldap_groups:synchronize
```

@ -4,16 +4,16 @@ sidebar_navigation:
priority: 780 priority: 780
description: Manage enumerations in OpenProject. description: Manage enumerations in OpenProject.
robots: index, follow robots: index, follow
keywords: enumerations keywords: enumerations, time tracking, priority, document categories
--- ---
# Manage Enumerations # Manage Enumerations
The **Enumerations** settings allow adapting of Activities (for time tracking), work package priorities and document categories. <div class="glossary">
**Enumerations** are a menu item in admin settings that allows the configuration of Activities (for time tracking), project status and work package priorities.
<div class="glossary“>
**Enumerations** are defined as a menu item in admin settings that allows the configuration of Activities (for time tracking), project status and work package priorities.
</div> </div>
To get an overview of existing enumeration values for all of these categories, navigate to the -> *Administration* -> *Enumerations*. You will see the enumerations overview, divided into respective sections. To get an overview of existing enumeration values for all of these categories, navigate to the -> *Administration* -> *Enumerations*. You will see the enumerations overview, divided into respective sections.
![enumerations](image-20200122161732016.png) ![enumerations](image-20200122161732016.png)
@ -38,6 +38,10 @@ You will then be able to name the value, activate it and choose if it should be
![Sys-admin-enumerations](Sys-admin-enumerations.png) ![Sys-admin-enumerations](Sys-admin-enumerations.png)
**Note**: To activate the [Activities (for time tracking)](../../user-guide/projects/project-settings/activities-time-tracking) in a certain project, navigate to -> *Project settings* -> *Activities (time tracking)*. To **change the color of work package priorities** choose the respective priority in the section Work package priorities.
</div>
<div class="alert alert-info" role="alert">
**Note**: To activate the [Activities (for time tracking)](../../user-guide/projects/project-settings/activities-time-tracking) in a certain project, navigate to -> *Project settings* -> *Time tracking activities*.
</div>

@ -14,6 +14,7 @@ Work packages can have various status depending on their types, e.g. tasks can h
The status can be set at the top of the work package details view or in the list view in the corresponding column. The status can be set at the top of the work package details view or in the list view in the corresponding column.
![Sys-admin-work-package-status](Sys-admin-work-package-status.png)The status field can be configured under *Administration ->* *Work packages* -> *Status*. You will see the list of all the existing work package status in the system. You can add new status or change the name and order of existing status. ![Sys-admin-work-package-status](Sys-admin-work-package-status.png)The status field can be configured under *Administration ->* *Work packages* -> *Status*. You will see the list of all the existing work package status in the system. You can add new status or change the name and order of existing status.
To learn about the options for configuring the transition from one status to another navigate to [Manage work package workflows](../work-package-workflows).
## Create a new work package status ## Create a new work package status

@ -21,6 +21,9 @@ At the moment there are more than 30 languages available.
**Note**: Many languages are translated by the Community. We highly appreciate if you want to [help translating OpenProject to your language](../../../development/translate-openproject). **Note**: Many languages are translated by the Community. We highly appreciate if you want to [help translating OpenProject to your language](../../../development/translate-openproject).
</div> </div>
You can [choose your language in your user profile](../../../getting-started/my-account/#change-your-language).
## Time and date formatting ## Time and date formatting
Change time and date formats in OpenProject and configure the display of journal aggregation. Change time and date formats in OpenProject and configure the display of journal aggregation.

@ -4,7 +4,7 @@ sidebar_navigation:
priority: 780 priority: 780
description: Find out how to create and manage budgets for a project in OpenProject. description: Find out how to create and manage budgets for a project in OpenProject.
robots: index, follow robots: index, follow
keywords: budgets keywords: budgets, project budget, costs
--- ---
# Budgets # Budgets
@ -15,14 +15,14 @@ You can add planned **unit costs** as well as **labor costs** for the project.
Then, you will assign work packages to a budgets. If you log time or costs to this work package the costs will booked to this budget and show the percentage spent for a project budget. Then, you will assign work packages to a budgets. If you log time or costs to this work package the costs will booked to this budget and show the percentage spent for a project budget.
| Feature | Documentation for | | Topic | Content |
| ------------------------------------------------------------ | ------------------------------------------------------------ | | ------------------------------------------------------------ | ------------------------------------------------------------ |
| [Create a project budget](#create-a-project-budget) | How to set up a project budget in OpenProject? | | [Create a project budget](#create-a-project-budget) | How to set up a project budget in OpenProject? |
| [Add planned unit costs](#add-planned-unit-costs) | How to add planned unit costs to a budget? | | [Add planned unit costs](#add-planned-unit-costs) | How to add planned unit costs to a budget? |
| [Add planned labor costs](#add-planned-labor-costs) | How to add planned labor costs to a budget? | | [Add planned labor costs](#add-planned-labor-costs) | How to add planned labor costs to a budget? |
| [Assign a work package to a budget](#assign-work-package-to-a-budget) | How to assign a work package to book time and costs to a project budget? | | [Assign a work package to a budget](#assign-a-work-package-to-a-budget) | How to assign a work package to book time and costs to a project budget? |
| [View details and update budget](#view-details-and-update-budget) | How to display the details, update, copy or delete a project budget? | | [View details and update budget](#view-details-and-update-budget) | How to display the details, update, copy or delete a project budget? |
| | | | [Frequently asked questions (FAQ)](Frequently-asked-questions-(FAQ)) | What are frequent questions regarding budgets? |
## Create a project budget ## Create a project budget

@ -10,6 +10,10 @@ keywords: projects, integration, Jira
If you have previously worked with other tools and want to switch or need an integration to OpenProject, there is a way to do so for some applications. If you have previously worked with other tools and want to switch or need an integration to OpenProject, there is a way to do so for some applications.
## GitHub
OpenProject offers a basic GitHub integration. You will find more information about the GitHub integration in our [GitHub integration guideline](../../system-admin-guide/github-integration/).
## Gitlab ## Gitlab
The GitLab integration to OpenProject is currently being developed and you can find all information [here](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/21933#note_309977508). The GitLab integration to OpenProject is currently being developed and you can find all information [here](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/21933#note_309977508).

@ -11,7 +11,8 @@ keywords: meetings
Meetings in OpenProject allow you to manage and document your project meetings at one central place, prepare a meeting agenda together with your team and document and share meeting minutes with your meeting attendees at one central place. Meetings in OpenProject allow you to manage and document your project meetings at one central place, prepare a meeting agenda together with your team and document and share meeting minutes with your meeting attendees at one central place.
<div class="glossary">**Meetings** is defined as a module that allows the organization of meetings. The module has to be activated in the project settings in order to be displayed in the side navigation. </div> <div class="glossary">**Meetings** is defined as a module that allows the organization of meetings. The module has to be activated in the project settings in order to be displayed in the side navigation.
</div>

@ -2,18 +2,18 @@
sidebar_navigation: sidebar_navigation:
title: Time tracking activities title: Time tracking activities
priority: 300 priority: 300
description: Manage activites for time tracking. description: Manage activities for time tracking.
robots: index, follow robots: index, follow
keywords: activities for time tracking keywords: activities for time tracking
--- ---
# Manage activites for time tracking # Manage activities for time tracking
You can configure Activities for time tracking in the System *Administration* -> *Enumerations*. You can activate or deactivate time tracking acitivites per project. You can configure Activities for time tracking in the System *Administration* -> *Enumerations*. You can activate or deactivate time tracking activities per project.
<div class="glossary">**Time tracking** is defined as a module which allows users to log time on work packages. Once the time tracking module is activated, time can be logged via the action menu of a work package.</div> <div class="glossary">**Time tracking** is defined as a module which allows users to log time on work packages. Once the time tracking module is activated, time can be logged via the action menu of a work package.</div>
Navigate to the -> Project settings -> *Activites (time tracking)*. Navigate to the -> Project settings -> *Activities (time tracking)*.
Select the activites which you want to activate for time tracking in your project. Press the blue Save button to apply your changes. Select the activities which you want to activate for time tracking in your project. Press the blue Save button to apply your changes.
![time tracking activities](image-20200211134150920.png) ![time tracking activities](image-20200211134150920.png)

@ -15,10 +15,13 @@ keywords: work packages
Work packages have a **type**, an **ID**, a **subject** and may have various additional attributes, such as **status**, **assignee**, **priority**, **due date**. Work packages have a **type**, an **ID**, a **subject** and may have various additional attributes, such as **status**, **assignee**, **priority**, **due date**.
<div class="glossary">**Work package ID** is defined as a unique integer assigned to a newly created work package. Work package IDs cannot be changed and are numbered across all projects of an OpenProject instance (therefore, the numbering within a project may not be sequential). </div> <div class="glossary">**Work package ID** is defined as a unique integer assigned to a newly created work package. Work package IDs cannot be changed and are numbered across all projects of an OpenProject instance (therefore, the numbering within a project may not be sequential).
</div>
<div class="glossary"> <div class="glossary">
**Types** are the different items a work package can represent, such as task, feature, bug, phase, milestone. The work package types can be configured in the system administration. </div> **Types** are the different items a work package can represent, such as task, feature, bug, phase, milestone. The work package types can be configured in the system administration.
</div>

@ -96,7 +96,7 @@ Tip: **keep the Ctrl. button pressed** in order to select and edit several work
To open the quick context menu, **press the RIGHT mouse button**. To open the quick context menu, **press the RIGHT mouse button**.
You have then the possibility to: Then you have the possibility to:
* Open details view of all selected work packages. * Open details view of all selected work packages.
* Open the fullscreen view of all selected work packages. * Open the fullscreen view of all selected work packages.
@ -106,3 +106,10 @@ You have then the possibility to:
* Bulk delete all selected work packages. * Bulk delete all selected work packages.
![bulk edit right mouse click](image-20200331133245192.png) ![bulk edit right mouse click](image-20200331133245192.png)
At the bottom of the page you can decide whether email updates regarding these changes should be sent or not. It makes sense not to tick the box for large updates to prevent users from getting flooded by emails.
![bulk-edit_email-updates](image-20201119163714831.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

@ -62,9 +62,9 @@ To add a filter criteria, click the **+ Add filter:** button in the grey filter
![add-filter](add-filter.png) ![add-filter](add-filter.png)
You can add as many filter criteria as needed. You can add as many filter criteria as needed.
Also, you can filter by [custom fields](../../../system-admin-guide/) if you set this in the custom field configuration. Also, you can filter by [custom fields](../../../system-admin-guide/custom-fields) if you set this in the custom field configuration.
If you want to search by subject of a work package, type in the **Filter by text** the expression you want to filter for. If you want to search for specific text in the subject, description or comments of a work package, type in the **Filter by text** the expression you want to filter for.
The results will be displayed accordingly in the work package list. The results will be displayed accordingly in the work package list.
@ -76,24 +76,23 @@ The results will be displayed accordingly in the work package list.
By default, the work package list will be sorted by work package ID. By default, the work package list will be sorted by work package ID.
<div class="glossary"> <div class="glossary">
The **ID** is unique for a work package within OpenProject. It will be set automatically from the system. With the ID you can reference to one specific work package in OpenProject. The **ID** is unique for a work package within OpenProject. It will be set automatically from the system. With the ID you can reference a specific work package in OpenProject.
</div> </div>
To sort the work package list view, open the [work package table configuration](#work-package-table-configuration) and select the tab **Sort by**. You can sort by up to three attributes, either ascending or descending. To sort the work package list view, open the [work package table configuration](#work-package-table-configuration) and select the tab **Sort by**. You can sort by up to three attributes, either ascending or descending.
![1566396586476](1566396586476.png) ![1566396586476](1566396586476.png)
Click the blue **Apply** button will save your changes and display the results accordingly in the list view. Clicking the blue **Apply** button will save your changes and display the results accordingly in the list view.
![sort-work-packages](sort-work-packages.png) ![sort-work-packages](sort-work-packages.png)
<div class="alert alert-info" role="alert"> <div class="alert alert-info" role="alert">
**Note**: If you have the hierarchy mode activated, all filtered table results will be augmented with their ancestors. Hierarchies can be expanded and collapsed. **Note**: If you have the hierarchy mode activated, all filtered table results will be augmented with their ancestors. Hierarchies can be expanded and collapsed.
</div> </div>
Therefore, the results may differ if you sort in a flat list or in a hierarchy mode. Therefore, the results may differ if you sort in a flat list or in a hierarchy mode.
The same filter applied in the hierarchy mode. The same filter applied in the hierarchy mode.
@ -106,7 +105,8 @@ You can sort the work package list manually, using the icon with the 6 dots on t
Moving a work package will change its attributes, depending on the kind of list displayed, e.g. hierarchy changes or priority. Moving a work package will change its attributes, depending on the kind of list displayed, e.g. hierarchy changes or priority.
To keep the sorting it is necessary to [save the work package view](#save-work-package-views). Please note: This has no effect on the "All open" view; you have to save your sorting with another name. To keep the sorting it is necessary to [save the work package view](#save-work-package-views).
Please note: This has no effect on the "All open" view; you have to save your sorting with another name.
## How to switch from flat list to hierarchy mode? ## How to switch from flat list to hierarchy mode?
@ -133,18 +133,16 @@ The following attributes can be highlighted in the list:
* Status * Status
* Finish date * Finish date
Either ![attribute-highlighting](attribute-highlighting.png) ![attribute-highlighting](attribute-highlighting.png)
Furthermore, you can highlight the entire row by an attribute.
The following attributes can be highlighted as a complete row: Furthermore, you can highlight the entire row by an attribute. The following attributes can be highlighted as a complete row:
* Priority * Priority
* Status * Status
![highlight-priority](1566399038768.png) ![highlight-priority](1566399038768.png)
You can configure the colors for attribute highlighting in the [system administration](../../../system-admin-guide/#status-colors). You can configure the colors for attribute highlighting in the system administration. Find out how to set it [here](../../../system-admin-guide/enumerations/#edit-or-remove-enumeration-value) for the color of the priority and [here](../../../system-admin-guide/manage-work-packages/work-package-status/#edit-re-order-or-remove-a-work-package-status) for the color of the status.
## Save work package views ## Save work package views

@ -26,9 +26,6 @@
* See docs/COPYRIGHT.rdoc for more details. ++ * See docs/COPYRIGHT.rdoc for more details. ++
*/ */
@import "~global_styles/openproject/variables"
@import "~global_styles/openproject/functions"
@mixin story-header @mixin story-header
background-color: #FFFFFF background-color: #FFFFFF
font-size: 1rem - rem-calc(5px) font-size: 1rem - rem-calc(5px)

@ -34,7 +34,7 @@ module OpenProject
module VERSION #:nodoc: module VERSION #:nodoc:
MAJOR = 11 MAJOR = 11
MINOR = 0 MINOR = 0
PATCH = 3 PATCH = 4
TINY = PATCH # Redmine compat TINY = PATCH # Redmine compat
class << self class << self

@ -5,11 +5,11 @@ ro:
button_update: 'Actualizare' button_update: 'Actualizare'
avatars: avatars:
label_choose_avatar: "Choose Avatar from file" label_choose_avatar: "Choose Avatar from file"
uploading_avatar: "Uploading your avatar." uploading_avatar: "Se încarcă avatarul tău."
text_upload_instructions: | text_upload_instructions: |
Upload your own custom avatar of 128 by 128 pixels. Larger files will be resized and cropped to match. Upload your own custom avatar of 128 by 128 pixels. Larger files will be resized and cropped to match.
A preview of your avatar will be shown before uploading, once you selected an image. A preview of your avatar will be shown before uploading, once you selected an image.
error_image_too_large: "Image is too large." error_image_too_large: "Imaginea este prea mare."
wrong_file_format: "Allowed formats are jpg, png, gif" wrong_file_format: "Allowed formats are jpg, png, gif"
empty_file_error: "Please upload a valid image (jpg, png, gif)" empty_file_error: "Please upload a valid image (jpg, png, gif)"

@ -84,7 +84,7 @@ de:
backlogs_product_backlog: "Produkt Backlog" backlogs_product_backlog: "Produkt Backlog"
backlogs_product_backlog_is_empty: "Produkt Backlog ist leer" backlogs_product_backlog_is_empty: "Produkt Backlog ist leer"
backlogs_product_backlog_unsized: "Die Spitze des Produkt Backlogs hat Stories ohne Aufwandsangaben" backlogs_product_backlog_unsized: "Die Spitze des Produkt Backlogs hat Stories ohne Aufwandsangaben"
backlogs_sizing_inconsistent: "Story Aufwand weicht von den Schätzwerten ab" backlogs_sizing_inconsistent: "Die Story-Aufwände weichen von den Schätzwerten ab"
backlogs_sprint_notes_missing: "Geschlossene Sprints ohne Closed sprints without Retrospective-/Besprechungsnotizen" backlogs_sprint_notes_missing: "Geschlossene Sprints ohne Closed sprints without Retrospective-/Besprechungsnotizen"
backlogs_sprint_unestimated: "Geschlossene oder aktive Sprints mit nicht abgeschätzten Stories" backlogs_sprint_unestimated: "Geschlossene oder aktive Sprints mit nicht abgeschätzten Stories"
backlogs_sprint_unsized: "Das Projekt hat Stories auf aktiven oder vor kurzem geschlossenen Sprints welche keine Aufwandsangaben enthalten" backlogs_sprint_unsized: "Das Projekt hat Stories auf aktiven oder vor kurzem geschlossenen Sprints welche keine Aufwandsangaben enthalten"

@ -20,8 +20,8 @@ fi:
ifc_models: 'IFC models' ifc_models: 'IFC models'
views: views:
viewer: 'Selain' viewer: 'Selain'
split: 'Viewer and table' split: 'Näkymä ja tiedot'
split_cards: 'Selain ja kortit' split_cards: 'Selain ja kortit'
revit: revit:
revit_add_in: "Revit Add-In" revit_add_in: "Revit Lisäosa"
revit_add_in_settings: "Revit Add-In settings" revit_add_in_settings: "Revit Lisäosa asetukset"

@ -108,7 +108,7 @@ module Pages
end end
def expect_model_active(model, active = true) def expect_model_active(model, active = true)
expect(page).to have_field(model.id.to_s, checked: active) expect(page).to have_field(model.id.to_s, checked: active, wait: 30)
end end
def show_defaults(models = []) def show_defaults(models = [])

@ -50,7 +50,7 @@ ko:
action_text_assignee: > action_text_assignee: >
할당된 사용자에 기반한 자동화된 열이 있는 보드입니다. 작업 패키지 디스패치에 적합합니다. 할당된 사용자에 기반한 자동화된 열이 있는 보드입니다. 작업 패키지 디스패치에 적합합니다.
action_text_version: > action_text_version: >
Board with automated columns based on the version attribute. Ideal for planning product development. 버전 속성 컬럼이 있는 보드. 소프트웨어 개발 계획에 적합함.
action_type: action_type:
assignee: 담당자 assignee: 담당자
status: 상태 status: 상태

@ -1,6 +1,6 @@
#English strings go here #English strings go here
tr: tr:
permission_show_board_views: "Panoları görüntülemek" permission_show_board_views: "Panoları görüntüle"
permission_manage_board_views: "Panoları yönet" permission_manage_board_views: "Panoları yönet"
project_module_board_view: "Panolar" project_module_board_view: "Panolar"
boards: boards:

@ -84,10 +84,11 @@ class BudgetsController < ApplicationController
def copy def copy
source = Budget.find(params[:id].to_i) source = Budget.find(params[:id].to_i)
@budget = Budget.new
if source @budget = if source
@budget.copy_from(source) Budget.new_copy(source)
else
Budget.new
end end
@budget.fixed_date ||= Date.today @budget.fixed_date ||= Date.today

@ -63,25 +63,55 @@ class Budget < ApplicationRecord
Budget.replace_author_with_deleted_user user Budget.replace_author_with_deleted_user user
end end
def self.visible(user) class << self
def visible(user)
includes(:project) includes(:project)
.references(:projects) .references(:projects)
.merge(Project.allowed_to(user, :view_budgets)) .merge(Project.allowed_to(user, :view_budgets))
end end
# TODO: Extract into copy service
def new_copy(source)
copy = new(copy_attributes(source))
copy_budget_items(source, copy, items: :labor_budget_items)
copy_budget_items(source, copy, items: :material_budget_items)
copy
end
def replace_author_with_deleted_user(user)
substitute = DeletedUser.first
where(author_id: user.id).update_all(author_id: substitute.id)
end
protected
def copy_attributes(source)
source.attributes.slice('project_id', 'subject', 'description', 'fixed_date').merge('author' => User.current)
end
def copy_budget_items(source, sink, items:)
raise ArgumentError unless %i(labor_budget_items material_budget_items).include? items
source.send(items).each do |bi|
to_slice = if items == :material_budget_items
%w(units cost_type_id comments amount)
else
%w(hours user_id comments amount)
end
sink.send(items).build(bi.attributes.slice(*to_slice).merge('budget' => sink))
end
end
end
def initialize(attributes = nil) def initialize(attributes = nil)
super super
self.author = User.current if new_record? self.author = User.current if new_record?
end end
def copy_from(arg)
budget = (arg.is_a?(Budget) ? arg : self.class.find(arg))
attrs = budget.attributes.dup
super(attrs)
self.labor_budget_items = budget.labor_budget_items.map(&:dup)
self.material_budget_items = budget.material_budget_items.map(&:dup)
end
def budget def budget
material_budget + labor_budget material_budget + labor_budget
end end
@ -105,12 +135,6 @@ class Budget < ApplicationRecord
'budget' 'budget'
end end
def self.replace_author_with_deleted_user(user)
substitute = DeletedUser.first
where(author_id: user.id).update_all(author_id: substitute.id)
end
def to_s def to_s
subject subject
end end

@ -0,0 +1,89 @@
#-- copyright
# OpenProject is an open source project management software.
# Copyright (C) 2012-2020 the OpenProject GmbH
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2017 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See docs/COPYRIGHT.rdoc for more details.
#++
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
describe 'Copying a budget', type: :feature, js: true do
let(:project) { FactoryBot.create :project, enabled_module_names: %i[budgets costs] }
let(:current_user) do
FactoryBot.create :user,
member_in_project: project,
member_with_permissions: %i(view_budgets edit_budgets view_hourly_rates view_cost_rates)
end
let(:original_author) { FactoryBot.create :user }
let(:budget_subject) { "A budget subject" }
let(:budget_description) { "A budget description" }
let!(:budget) do
FactoryBot.create :budget,
subject: budget_subject,
description: budget_description,
author: original_author,
project: project
end
let!(:cost_type) do
FactoryBot.create :cost_type, name: 'Post-war', unit: 'cap', unit_plural: 'caps'
end
let!(:cost_type_rate) { FactoryBot.create :cost_rate, cost_type: cost_type, rate: 50.0 }
let!(:default_hourly_rate) { FactoryBot.create :default_hourly_rate, user: original_author, rate: 25.0 }
let!(:material_budget_item) do
FactoryBot.create :material_budget_item,
units: 3,
cost_type: cost_type,
budget: budget
end
let!(:labor_budget_item) do
FactoryBot.create :labor_budget_item,
hours: 5,
user: original_author,
budget: budget
end
let(:budget_page) { Pages::EditBudget.new budget.id }
before do
login_as(current_user)
end
it 'copies all the items of the budget under the name of the copying user' do
budget_page.visit!
budget_page.click_copy
budget_page.expect_subject(budget_subject)
budget_page.expect_planned_costs!(type: :labor, row: 1, expected: '125.00 EUR')
budget_page.expect_planned_costs!(type: :material, row: 1, expected: '150.00 EUR')
click_button 'Create'
budget_page.expect_notification message: 'Successful creation.'
expect(page)
.to have_selector('.author', text: current_user.name)
end
end

@ -121,6 +121,11 @@ module Pages
end end
end end
def expect_subject(subject)
expect(page)
.to have_field("Subject", with: subject)
end
def unit_costs_at(num_row) def unit_costs_at(num_row)
unit_costs_container.all('tbody td.currency')[num_row - 1] unit_costs_container.all('tbody td.currency')[num_row - 1]
end end
@ -176,5 +181,9 @@ module Pages
def labor_rows def labor_rows
@labor_rows ||= 0 @labor_rows ||= 0
end end
def notification_type
:rails
end
end end
end end

@ -39,6 +39,12 @@ module Pages
@budget_id = budget_id @budget_id = budget_id
end end
def click_copy
within '.toolbar-items' do
click_link 'Copy'
end
end
def path def path
"/budgets/#{budget_id}" "/budgets/#{budget_id}"
end end

@ -82,7 +82,7 @@ cs:
label_costlog: "Logované jednotkové náklady" label_costlog: "Logované jednotkové náklady"
label_cost_plural: "Náklady" label_cost_plural: "Náklady"
label_cost_type_plural: "Typy nákladů" label_cost_type_plural: "Typy nákladů"
label_cost_type_specific: "Cost type #%{id}: %{name}" label_cost_type_specific: "Typ nákladu #%{id}: %{name}"
label_costs_per_page: "Náklady na stránku" label_costs_per_page: "Náklady na stránku"
label_currency: "Měna" label_currency: "Měna"
label_currency_format: "Formát měny" label_currency_format: "Formát měny"
@ -132,7 +132,7 @@ cs:
permission_view_own_cost_entries: "Zobrazit vlastní rezervované náklady" permission_view_own_cost_entries: "Zobrazit vlastní rezervované náklady"
permission_view_own_hourly_rate: "Zobrazit vlastní hodinovou sazbu" permission_view_own_hourly_rate: "Zobrazit vlastní hodinovou sazbu"
permission_view_own_time_entries: "Zobrazit vlastní strávený čas" permission_view_own_time_entries: "Zobrazit vlastní strávený čas"
project_module_costs: "Time and costs" project_module_costs: "Čas a náklady"
text_assign_time_and_cost_entries_to_project: "Přiřadit nahlášené hodiny a náklady projektu" text_assign_time_and_cost_entries_to_project: "Přiřadit nahlášené hodiny a náklady projektu"
text_destroy_cost_entries_question: "%{cost_entries} byl nahlášen k pracovním balíčkům, které se chystáte odstranit. Co chcete udělat?" text_destroy_cost_entries_question: "%{cost_entries} byl nahlášen k pracovním balíčkům, které se chystáte odstranit. Co chcete udělat?"
text_destroy_time_and_cost_entries: "Odstranit nahlášené hodiny a náklady" text_destroy_time_and_cost_entries: "Odstranit nahlášené hodiny a náklady"

@ -44,7 +44,7 @@ class MeetingContentsController < ApplicationController
before_action :authorize before_action :authorize
def show def show
if params[:id].present? && @content.version == params[:id].to_i if params[:id].present? && @content.last_journal.version == params[:id].to_i
# Redirect links to the last version # Redirect links to the last version
redirect_to controller: '/meetings', redirect_to controller: '/meetings',
action: :show, action: :show,

@ -59,7 +59,7 @@ de:
label_meeting_date_time: "Datum/Uhrzeit" label_meeting_date_time: "Datum/Uhrzeit"
label_meeting_diff: "Differenz" label_meeting_diff: "Differenz"
label_notify: "Zur Einsicht verschicken" label_notify: "Zur Einsicht verschicken"
label_icalendar: "ICalendar senden" label_icalendar: "iCalendar senden"
label_version: "Version" label_version: "Version"
label_time_zone: "Zeitzone" label_time_zone: "Zeitzone"
label_start_date: "Anfangstermin" label_start_date: "Anfangstermin"

@ -1,3 +1,4 @@
ar: ar:
overviews: overviews:
label: 'نظرة عامة' label: 'نظرة عامة'
permission_manage_overview: 'Manage overview page'

@ -1,3 +1,4 @@
bg: bg:
overviews: overviews:
label: 'Общ преглед' label: 'Общ преглед'
permission_manage_overview: 'Manage overview page'

@ -1,3 +1,4 @@
ca: ca:
overviews: overviews:
label: 'Visió general' label: 'Visió general'
permission_manage_overview: 'Manage overview page'

@ -1,3 +1,4 @@
cs: cs:
overviews: overviews:
label: 'Přehled' label: 'Přehled'
permission_manage_overview: 'Manage overview page'

@ -1,3 +1,4 @@
da: da:
overviews: overviews:
label: 'Overblik' label: 'Overblik'
permission_manage_overview: 'Manage overview page'

@ -1,3 +1,4 @@
de: de:
overviews: overviews:
label: 'Übersicht' label: 'Übersicht'
permission_manage_overview: 'Übersichtsseite verwalten'

@ -1,3 +1,4 @@
el: el:
overviews: overviews:
label: 'Επισκόπηση' label: 'Επισκόπηση'
permission_manage_overview: 'Manage overview page'

@ -1,3 +1,4 @@
es: es:
overviews: overviews:
label: 'Resumen' label: 'Resumen'
permission_manage_overview: 'Manage overview page'

@ -1,3 +1,4 @@
fi: fi:
overviews: overviews:
label: 'Yleiskatsaus' label: 'Yleiskatsaus'
permission_manage_overview: 'Manage overview page'

@ -1,3 +1,4 @@
fil: fil:
overviews: overviews:
label: 'Buod' label: 'Buod'
permission_manage_overview: 'Manage overview page'

@ -1,3 +1,4 @@
fr: fr:
overviews: overviews:
label: 'Vue globale' label: 'Vue globale'
permission_manage_overview: 'Gérer la page d''aperçu'

@ -1,3 +1,4 @@
hr: hr:
overviews: overviews:
label: 'Pregled' label: 'Pregled'
permission_manage_overview: 'Manage overview page'

@ -1,3 +1,4 @@
hu: hu:
overviews: overviews:
label: 'Áttekintés' label: 'Áttekintés'
permission_manage_overview: 'Manage overview page'

@ -1,3 +1,4 @@
id: id:
overviews: overviews:
label: 'Tinjauan' label: 'Tinjauan'
permission_manage_overview: 'Manage overview page'

@ -1,3 +1,4 @@
it: it:
overviews: overviews:
label: 'Panoramica' label: 'Panoramica'
permission_manage_overview: 'Manage overview page'

@ -1,3 +1,4 @@
ja: ja:
overviews: overviews:
label: '概要' label: '概要'
permission_manage_overview: 'Manage overview page'

@ -1,3 +1,4 @@
ko: ko:
overviews: overviews:
label: '요약' label: '요약'
permission_manage_overview: '개요 페이지 관리'

@ -1,3 +1,4 @@
lt: lt:
overviews: overviews:
label: 'Peržiūra' label: 'Peržiūra'
permission_manage_overview: 'Valdyti apžvalgos puslapį'

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

Loading…
Cancel
Save