Merge remote-tracking branch 'origin/release/11.4' into feature/notifications-page

# Conflicts:
#	frontend/src/app/features/in-app-notifications/entry/in-app-notification-entry.component.ts
pull/9556/head
Henriette Darge 3 years ago
commit 9bb7eeb099
  1. 8
      app/models/application_record.rb
  2. 2
      app/services/users/set_attributes_service.rb
  3. 2
      app/views/users/_simple_form.html.erb
  4. 3
      bin/setup_dev
  5. 26
      config/locales/crowdin/hu.yml
  6. 2
      config/locales/crowdin/js-ar.yml
  7. 2
      config/locales/crowdin/js-bg.yml
  8. 2
      config/locales/crowdin/js-ca.yml
  9. 2
      config/locales/crowdin/js-cs.yml
  10. 2
      config/locales/crowdin/js-da.yml
  11. 2
      config/locales/crowdin/js-de.yml
  12. 2
      config/locales/crowdin/js-el.yml
  13. 2
      config/locales/crowdin/js-es.yml
  14. 2
      config/locales/crowdin/js-fi.yml
  15. 2
      config/locales/crowdin/js-fil.yml
  16. 2
      config/locales/crowdin/js-fr.yml
  17. 2
      config/locales/crowdin/js-hr.yml
  18. 52
      config/locales/crowdin/js-hu.yml
  19. 2
      config/locales/crowdin/js-id.yml
  20. 2
      config/locales/crowdin/js-it.yml
  21. 2
      config/locales/crowdin/js-ja.yml
  22. 2
      config/locales/crowdin/js-ko.yml
  23. 2
      config/locales/crowdin/js-lt.yml
  24. 2
      config/locales/crowdin/js-nl.yml
  25. 2
      config/locales/crowdin/js-no.yml
  26. 2
      config/locales/crowdin/js-pl.yml
  27. 2
      config/locales/crowdin/js-pt.yml
  28. 2
      config/locales/crowdin/js-ro.yml
  29. 2
      config/locales/crowdin/js-ru.yml
  30. 2
      config/locales/crowdin/js-sk.yml
  31. 2
      config/locales/crowdin/js-sl.yml
  32. 2
      config/locales/crowdin/js-sv.yml
  33. 2
      config/locales/crowdin/js-tr.yml
  34. 2
      config/locales/crowdin/js-uk.yml
  35. 2
      config/locales/crowdin/js-vi.yml
  36. 2
      config/locales/crowdin/js-zh-CN.yml
  37. 2
      config/locales/crowdin/js-zh-TW.yml
  38. 18
      docs/release-notes/11-3-4/README.md
  39. 7
      docs/release-notes/README.md
  40. 3
      frontend/src/app/features/bim/bcf/bcf-wp-attribute-group/bcf-wp-attribute-group.component.ts
  41. 5
      frontend/src/app/features/bim/bcf/helper/viewpoints.service.ts
  42. 4
      frontend/src/app/features/bim/ifc_models/ifc-viewer/ifc-viewer.service.ts
  43. 2
      frontend/src/app/features/boards/add-list-modal/add-list-modal.component.ts
  44. 2
      frontend/src/app/features/boards/board/add-list-modal/add-list-modal.component.ts
  45. 3
      frontend/src/app/features/boards/board/board-actions/assignee/assignee-action.service.ts
  46. 5
      frontend/src/app/features/boards/board/board-actions/board-action.service.ts
  47. 3
      frontend/src/app/features/boards/board/board-actions/subproject/subproject-board-header.component.ts
  48. 2
      frontend/src/app/features/boards/board/board-actions/subproject/subproject-board-header.html
  49. 3
      frontend/src/app/features/boards/board/board-actions/subtasks/subtasks-board-header.component.ts
  50. 2
      frontend/src/app/features/boards/board/board-actions/subtasks/subtasks-board-header.html
  51. 4
      frontend/src/app/features/hal/helpers/id-from-link.ts
  52. 37
      frontend/src/app/features/hal/resources/hal-resource.ts
  53. 3
      frontend/src/app/features/hal/resources/query-filter-instance-resource.ts
  54. 3
      frontend/src/app/features/hal/resources/query-filter-resource.ts
  55. 12
      frontend/src/app/features/hal/resources/query-operator-resource.ts
  56. 5
      frontend/src/app/features/hal/resources/relation-resource.ts
  57. 5
      frontend/src/app/features/in-app-notifications/entry/in-app-notification-entry.component.ts
  58. 16
      frontend/src/app/features/invite-user-modal/project-selection/project-allowed.validator.ts
  59. 5
      frontend/src/app/features/plugins/plugin-context.ts
  60. 3
      frontend/src/app/features/work-packages/components/wp-activity/activity-entry.component.ts
  61. 3
      frontend/src/app/features/work-packages/components/wp-activity/revision/revision-activity.component.ts
  62. 3
      frontend/src/app/features/work-packages/components/wp-activity/user/user-activity.component.ts
  63. 3
      frontend/src/app/features/work-packages/components/wp-new/wp-create.service.ts
  64. 5
      frontend/src/app/features/work-packages/components/wp-query/url-params-helper.ts
  65. 3
      frontend/src/app/features/work-packages/components/wp-relations/embedded/children/wp-children-query.component.ts
  66. 3
      frontend/src/app/features/work-packages/components/wp-relations/embedded/relations/wp-relation-query.component.ts
  67. 2
      frontend/src/app/features/work-packages/components/wp-relations/embedded/wp-relation-query.html
  68. 5
      frontend/src/app/features/work-packages/components/wp-single-view/wp-single-view.component.ts
  69. 3
      frontend/src/app/shared/components/attachments/authoring/authoring.component.ts
  70. 3
      frontend/src/app/shared/components/calendar/te-calendar/te-calendar.component.ts
  71. 60
      frontend/src/app/shared/components/datepicker/datepicker.modal.helper.ts
  72. 4
      frontend/src/app/shared/components/datepicker/datepicker.modal.ts
  73. 4
      frontend/src/app/shared/components/dynamic-forms/components/dynamic-inputs/select-input/select-input.component.ts
  74. 3
      frontend/src/app/shared/components/fields/edit/field-types/te-work-package-edit-field.component.ts
  75. 3
      frontend/src/app/shared/components/grids/widgets/news/news.component.ts
  76. 5
      frontend/src/app/shared/components/grids/widgets/time-entries/list/time-entries-list.component.ts
  77. 4
      frontend/src/app/shared/components/modals/preview-modal/wp-preview-modal/wp-preview.modal.ts
  78. 3
      frontend/src/app/shared/components/principal/principal-renderer.service.ts
  79. 8
      frontend/src/vendor/ckeditor/ckeditor.js
  80. 2
      frontend/src/vendor/ckeditor/ckeditor.js.map
  81. 2
      modules/backlogs/config/locales/crowdin/hu.yml
  82. 8
      modules/bim/config/locales/crowdin/js-hu.yml
  83. 6
      modules/boards/config/locales/crowdin/js-hu.yml
  84. 4
      modules/ldap_groups/config/locales/crowdin/hu.yml
  85. 2
      modules/meeting/config/locales/crowdin/hu.yml
  86. 28
      modules/two_factor_authentication/config/locales/crowdin/hu.yml
  87. 2
      modules/webhooks/config/locales/crowdin/ar.yml
  88. 2
      modules/webhooks/config/locales/crowdin/bg.yml
  89. 2
      modules/webhooks/config/locales/crowdin/ca.yml
  90. 2
      modules/webhooks/config/locales/crowdin/cs.yml
  91. 2
      modules/webhooks/config/locales/crowdin/da.yml
  92. 2
      modules/webhooks/config/locales/crowdin/de.yml
  93. 2
      modules/webhooks/config/locales/crowdin/el.yml
  94. 2
      modules/webhooks/config/locales/crowdin/es.yml
  95. 2
      modules/webhooks/config/locales/crowdin/fi.yml
  96. 2
      modules/webhooks/config/locales/crowdin/fil.yml
  97. 2
      modules/webhooks/config/locales/crowdin/fr.yml
  98. 2
      modules/webhooks/config/locales/crowdin/hr.yml
  99. 2
      modules/webhooks/config/locales/crowdin/id.yml
  100. 2
      modules/webhooks/config/locales/crowdin/it.yml
  101. Some files were not shown because too many files have changed in this diff Show More

@ -7,6 +7,14 @@ class ApplicationRecord < ::ActiveRecord::Base
saved_change_to_attribute?(:id)
end
##
# Returns whether the given attribute is free of errors
def valid_attribute?(attribute)
valid? # Ensure validations have run
errors[attribute].empty?
end
##
# Get the newest recently changed resource for the given record classes
#

@ -42,7 +42,7 @@ module Users
def set_default_attributes(_params)
# Assign values other than mail to new_user when invited
if model.invited? && model.mail.present?
if model.invited? && model.valid_attribute?(:mail)
::UserInvitation.assign_user_attributes model
end

@ -27,8 +27,6 @@ See docs/COPYRIGHT.rdoc for more details.
++#%>
<%= error_messages_for 'user' %>
<% content_for :header_tags do %>
<meta name="required_script" content="two_factor_authentication" />
<% end %>

@ -11,6 +11,9 @@ printf "Bundling rails dependencies ... "
try 'bundle install > log/setup_dev.log'
echo "done."
echo "Removing public frontend assets"
try 'rm -rf public/assets/frontend >> log/setup_dev.log'
echo "Installing node_modules ... "
try '(cd frontend && npm ci) >> log/setup_dev.log'

@ -436,7 +436,7 @@ hu:
types: "Típus"
versions: "Verzió"
work_packages: "Feladatcsoportok"
templated: 'Template project'
templated: 'Példa projekt'
projects/status:
code: 'Állapot'
explanation: 'Állapot leírása'
@ -553,7 +553,7 @@ hu:
less_than_or_equal_to: "kisebbnek vagy egyenlőnek kell lennie mint, %{count}."
not_available: "is not available due to a system configuration."
not_deletable: "nem törölhető"
not_current_user: "is not the current user."
not_current_user: "nem az aktuális felhasználó"
not_a_date: "nem érvényes dátum."
not_a_datetime: "ez nem érvényes dátum."
not_a_number: "ez nem egy szám."
@ -661,7 +661,7 @@ hu:
queries/filters/base:
attributes:
values:
inclusion: "filter has invalid values."
inclusion: "A szűrő érvénytelen értékeket tartalmaz"
format: "%{message}\n"
relation:
typed_dag:
@ -747,7 +747,7 @@ hu:
roles:
ungrantable: "has an unassignable role."
principal:
unassignable: "cannot be assigned to a project."
unassignable: "nem lehet hozzárendelni a projekthez"
version:
undeletable_work_packages_attached: "Nem lehet a verziót törölni amíg hozzá van rendelve munkacsomagokhoz."
status:
@ -1214,7 +1214,7 @@ hu:
error_menu_item_not_saved: Menüelem nem menthető
error_wiki_root_menu_item_conflict: >
Nem lehet átnevezni "%{old_name}", mert "%{new_name}" menü egy már létező menüvel "%{existing_caption}" (%{existing_identifier}) ütközik.
error_external_authentication_failed: "An error occurred during external authentication. Please try again."
error_external_authentication_failed: "Hiba történt a külső hitelesítés során. Kérjük, próbálja meg újra."
error_attribute_not_highlightable: "Tulajdonság(ok) nem kiemelhetők: %{attributes}"
events:
project: 'Projekt szerkesztve'
@ -1657,7 +1657,7 @@ hu:
label_previous_week: "Előző héten"
label_principal_invite_via_email: " vagy új felhasználót hívhat meg e-mailben"
label_principal_search: "Meglévő felhasználók vagy csoportok hozzáadása"
label_privacy_policy: "Data privacy and security policy"
label_privacy_policy: "Adatvédelmi és biztonsági szabályzat"
label_product_version: "Termékverzió"
label_professional_support: "Szakmai támogatás"
label_profile: "Profil"
@ -1908,7 +1908,7 @@ hu:
mail_body_backup_token_reset_admin_info: The backup token for user '%{user}' has been reset.
mail_body_backup_token_reset_user_info: A visszaállítási kulcs törölve.
mail_body_backup_token_info: Az előző kulcs elavult.
mail_body_backup_waiting_period: The new token will be enabled in %{hours} hours.
mail_body_backup_waiting_period: A visszaállítási kulcs még %{hours} óráig érvényes.
mail_body_backup_token_warning: If this wasn't you, login to OpenProject immediately and reset it again.
mail_body_lost_password: "A jelszó módosításához kattintson az alábbi linkre:"
mail_body_register: "Welcome to OpenProject. Please activate your account by clicking on this link:"
@ -1942,7 +1942,7 @@ hu:
with_message: "%{user} added you as a member to the project '%{project}' writing:"
roles: "You have the following roles:"
mail_member_updated_project:
subject: "%{project} - Your roles have been updated"
subject: "%{project} A szerepköreid frissítve lettek"
body:
updated_by:
without_message: "%{user} updated the roles you have in the project '%{project}'."
@ -2161,7 +2161,7 @@ hu:
member_of_group: "Hozzárendelt csoport"
assignee_or_group: "Megbízott, vagy a hozzá tartozó csoport"
subproject_id: "Including Subproject"
only_subproject_id: "Only subproject"
only_subproject_id: "Csak alprojekt"
name_or_identifier: "Név vagy azonosító"
repositories:
at_identifier: '%{identifier} -n'
@ -2347,7 +2347,7 @@ hu:
setting_mail_handler_api_key: "API-kulcs"
setting_mail_handler_body_delimiters: "E-mailek csonkolása e sorok után"
setting_mail_handler_body_delimiter_regex: "E-mailek csonkítása a megegyező kifejezéssel"
setting_mail_handler_ignore_filenames: "Ignored mail attachments"
setting_mail_handler_ignore_filenames: "Összes melléklet figyelmen kívül hagyva"
setting_new_project_user_role_id: "Szerepkör a nem admin felhasználónak, aki létrehoz egy projektet,"
setting_password_active_rules: "Választható karakter típusok"
setting_password_count_former_banned: "A legutóbb használt jelszavak száma, ezeket tilos újra felhasználni"
@ -2409,7 +2409,7 @@ hu:
first_week_of_year_text: >
Select the date of January that is contained in the first week of the year. This value together with first day of the week determines the total number of weeks in a year.
projects:
section_new_projects: "Settings for new projects"
section_new_projects: "Új projekt beállításai"
section_project_overview: "Settings for project overview list"
user:
default_preferences: "Alapértelmezett preferenciák"
@ -2485,7 +2485,7 @@ hu:
text_journal_added: "%{label} %{value} hozzáadva"
text_journal_aggregation_time_explanation: "Individual actions of a user (e.g. updating a work package twice) are aggregated into a single action if their age difference is less than the specified timespan. They will be displayed as a single action within the application. This will also delay notifications by the same amount of time reducing the number of emails being sent."
text_journal_changed: ""
text_journal_changed_plain: "%{label} changed from %{old} %{linebreak}to %{new}"
text_journal_changed_plain: "%{label} megváltozott %{old} %{linebreak}-tól %{new} -ig"
text_journal_changed_no_detail: "%{label} frissítve"
text_journal_changed_with_diff: "%{label} megváltozott (%{link})"
text_journal_deleted: "%{label} törölve (%{old})"
@ -2513,7 +2513,7 @@ hu:
text_regexp_info: "pl. ^[A-Z0-9]+$"
text_regexp_multiline: 'A reguláris kifejezés többsoros módban legyen alkalmazva. pld. ^---\s+'
text_repository_usernames_mapping: "Jelölje be, vagy frissítse az alkalmazás felhasználóit, minden felhasználónév eltárolva, megtalálhatóak a csomagtároló naplóban. A felhasználók ugyanazzal az alkalmazási és csomagtárolói felhasználó névvel vagy email címmel automatikusan tárolódnak."
text_select_notifications: "Select actions for which notifications should be sent."
text_select_notifications: "Válassza ki a tevékenységeket, amelyekről e-mail értesítést kell küldeni."
text_status_changed_by_changeset: "A %{value} commit-ban hozzáadva."
text_table_difference_description: "Ebben a táblázatban látható az egyszeri %{entries}. Megtekintheti a két bejegyzés közötti különbséget azáltal, hogy először kiválasztja a megfelelő jelölőnégyzeteket a táblázatban. A táblázat alatti gombra kattintva a különbségek jelennek meg."
text_time_logged_by_changeset: "A %{value} commit-ban hozzáadva."

@ -488,7 +488,7 @@ ar:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ bg:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ ca:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ cs:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -487,7 +487,7 @@ da:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -487,7 +487,7 @@ de:
wiki: 'Im <b>Wiki</b> können Sie gemeinsam mit dem Team Informationen dokumentieren und eine Wissensdatenbank aufbauen.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'Um das <b>Taskboard</b> zu sehen, öffnen Sie das Sprint Drop-down Menü...'
task_board_select: '… und wählen Sie den Menüpunkt <b>Taskboard</b>.'
task_board: "Das Aufgabenfeld visualisiert den <b>Fortschritt für diesen Sprint</b>. Klicken Sie auf das Plus (+) Symbol neben einer User Story, um neue Aufgaben oder Hindernisse hinzuzufügen. <br> Der Status kann per Drag & Drop aktualisiert werden."

@ -487,7 +487,7 @@ el:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ es:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ fi:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ fil:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ fr:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ hr:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -135,7 +135,7 @@ hu:
error: 'Cannot expand macro: %{message}'
attribute_reference:
macro_help_tooltip: 'This text segment is being dynamically rendered by a macro.'
not_found: 'Requested resource could not be found'
not_found: 'A kért erőforrás nem található.'
invalid_attribute: "The selected attribute '%{name}' does not exist."
child_pages:
button: 'Gyermek kapcsolatok'
@ -203,24 +203,24 @@ hu:
label_expires_at: "Lejárat ekkor"
receive_newsletter: I want to receive the OpenProject <a target="_blank" href="%{link}">newsletter</a>.
taken_domain: There can only be one active trial per domain.
taken_email: Each user can only create one trial.
taken_email: Felhasználónkként csak egy próba verzió engedélyezett
email_not_received: "You did not receive an email? You can resend the email with the link on the right."
try_another_email: "Or try it with another email address."
try_another_email: "Vagy próbálja meg egy másik e-mail címellel."
next_steps: "Következő lépések"
resend_link: "Újraküldés"
resend_success: "Email has been resent. Please check your emails and click the confirmation link provided."
resend_warning: "Could not resend email."
session_timeout: "Your session timed out. Please try to reload the page or resend email."
resend_warning: "Az email újra küldése sikertelen"
session_timeout: "A munkamenet lejárt. Kérem töltse újra az oldalt vagy küldje újra az emailt"
status_label: "Állapot:"
status_confirmed: "megerősítve"
status_waiting: "email sent - waiting for confirmation"
status_waiting: "email kiküldve - megerősítésre vár"
test_ee: "Test the Enterprise Edition 14 days for free"
quick_overview: "Get a quick overview of project management and team collaboration with OpenProject Enterprise Edition."
quick_overview: "Gyors áttekintés a projekt menedzsmentről és csapatmunkáról az OpenProjecttel."
upsale:
become_hero: "Legyél egy hős!"
benefits:
description: "What are the benefits of the Enterprise on-premises Edition?"
high_security: "Security features"
high_security: "Biztonsági szolgáltatások"
high_security_text: "Single sign on (SAML, OpenID Connect, CAS), two-factor authentication and automatic sync of LDAP groups."
installation: "Telepítési támogatás"
installation_text: "Experienced software engineers guide you through the complete installation and setup process in your own infrastructure."
@ -236,7 +236,7 @@ hu:
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.
unlimited: "Korlátlan"
you_contribute: "Developers need to pay their bills, too. With the Enterprise Edition, you substantially contribute to this Open Source community effort."
you_contribute: "A fejlesztőknek is fizetni kell a számláikat. A vállalati verzióval jelentősen hozzájárulsz a nyílt forráskódú közösség erőfeszítéseihez."
custom_actions:
date:
specific: 'be'
@ -479,17 +479,17 @@ hu:
got_it: 'Rendben'
steps:
help_menu: 'The Help (?) menu provides <b>additional help resources</b>. Here you can find a user guide and helpful how-to videos and more. <br> Enjoy your work with OpenProject!'
members: 'Invite new <b>members</b> to join your project.'
project_selection: 'Please click on one of the demo projects that we have prepared. Demo data is currently only available in English. <br> The general <b>demo project</b> suits best for classical project management, while the <b>Scrum project</b> is better for agile project management.'
members: 'Új <b>tagok</b> meghívása, hogy a projekthez csatlakozzanak.'
project_selection: 'Kérjük, válasszon egyet a projektek közül, amelyek használható példa adatokat tartalmaznak az induláshoz. <br> A <b> Demo projekt </b> a legjobban megfelel a klasszikus projektmenedzsmentnek, míg a <b> Scrum projekt </b> jobb az agilis projektmenedzsment számára.'
quick_add_button: 'Click on the plus (+) icon in the header navigation to <b>create a new project</b> or to <b>invite coworkers</b>.'
sidebar_arrow: "Use the return arrow in the top left corner to return to the project’s <b>main menu</b>."
welcome: 'Áldozzon három percet erre a bemutatóra, hogy megismerje a <b>legfontosabb szolgáltatásokat</b><br> Javasoljuk, hogy végezze el a lépéseket egészen a végéig. A túra bármikor újraindítható.'
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
wiki: 'A <b>Wiki</b> modulban tudását dokumentálhatja és megoszthatja a csapatával.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'A <b>Feladatlap</b> megjelenítéséhez nyissa meg a Sprint legördülő listát...'
task_board_select: '... és válassza ki a <b>Feladatlap</b> bejegyzést.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."
boards:
overview: 'Select <b>boards</b> to shift the view and manage your project using the agile boards view.'
@ -497,12 +497,12 @@ hu:
add: 'Click on the plus (+) icon to <b>create a new card</b> or <b>add an existing card</b> to the list on the board.'
drag: 'Drag and drop your cards within a given list to reorder them, or to move them to another list. <br> You can click the info (i) icon in the upper right-hand corner or double-click a card to open its details.'
wp:
toggler: "Now let's have a look at the <b>work package</b> section, which gives you a more detailed view of your work."
toggler: "Most vessünk egy pillantást a <b>Feladatcsoport</b> kiválasztására, amely részletesebb képet ad a munkáról."
list: 'This <b>work</b> package overview provides a list of all the work in your project, such as tasks, milestones, phases, and more. <br> Work packages can be created and edited directly from this view. To access the details of a particular work package, simply double-click its row.'
full_view: 'The <b>work package details</b> view provides all the relevant information pertaining to a given work package, such as its description, status, priority, activities, dependencies, and comments.'
back_button: 'Use the return arrow in the top left corner to exit and return to the work package list.'
create_button: 'The <b>+ Create</b> button will add a new work package to your project.'
timeline_button: 'You can activate the <b>Gantt chart</b> view to create a timeline for your project.'
create_button: 'A <b>Létrehoz</b> gombbal tudsz új feladatot hozzáadni a projekthez.'
timeline_button: 'Aktiválhatja a <b>Gantt-diagramot</b>, hogy létrehozzon egy idővonalat a projekthez.'
timeline: 'Here you can <b>edit your project plan</b>, create new work packages, such as tasks, milestones, phases, and more, as well as <b>add dependencies</b>. All team members can see and update the latest plan at any time.'
notifications:
title: "Értesítések"
@ -530,7 +530,7 @@ hu:
all: 'Minden esemény'
add: 'Add setting for project'
already_selected: 'A projekt már ki lett választva'
remove_projects: 'Remove notifications for projects'
remove_projects: 'Értesítések kikapcsolása a projektekhez'
title: "Értesítési beállítások"
self_notify: "Értesítés küldése a saját magam által által végrehajtott módosításokról"
password_confirmation:
@ -560,7 +560,7 @@ hu:
autocompleter:
label: 'Projektnevek automatikus kiegészítése'
text_are_you_sure: "Biztos vagy benne?"
text_data_lost: "All entered data will be lost."
text_data_lost: "Az összes adat elveszhet"
types:
attribute_groups:
error_duplicate_group_name: "A %{group} név már használatban van. A csoport névnek egyedinek kell lennie."
@ -568,7 +568,7 @@ hu:
reset_title: "Űrlap konfiguráció visszaállítása"
confirm_reset: >
Figyelmeztetés: Biztosan visszaállítja az alap űrlap beállítást? Az attribútumok az alapértelmezett csoportba kerülnek, a láthatósági beállítások elvesznek és MINDEN egyéni mező deaktiválódik.
upgrade_to_ee: "Upgrade to Enterprise on-premises Edition"
upgrade_to_ee: "Frissítés a Vállalati Verzióra"
upgrade_to_ee_text: "Hűha! Ha erre a funkcióra szükséged van, profi vagy! Támogatna minket, \"nyiltforrású\" fejlesztőket azzal, hogy Enterprise Edition ügyfelünk legyen?"
more_information: "További információ"
nevermind: "Mindegy"
@ -587,7 +587,7 @@ hu:
hours: 'órák'
title: 'Eltöltött idő rögzítése'
two_factor_authentication:
label_two_factor_authentication: 'Two-factor authentication'
label_two_factor_authentication: 'Kétlépcsős hitelesítés'
watchers:
label_loading: megfigyelők betöltése...
label_error_loading: Hiba történt a megfigyelők betöltése közben
@ -1032,8 +1032,8 @@ hu:
lacking_permission: 'Please select a different project since you lack permissions to assign users to the currently selected.'
lacking_permission_info: 'You lack the permission to assign users to the project you are currently in. You need to select a different one.'
next_button: ' Következő'
no_results: 'No projects were found'
no_invite_rights: 'You are not allowed to invite members to this project'
no_results: 'Egyetlen projekt sem található'
no_invite_rights: 'Nincs jogosultságod meghívni felhasználókat ehhez a projekthez'
type:
required: 'Please select the type to be invited'
user:
@ -1063,7 +1063,7 @@ hu:
placeholder: 'Please select a placeholder'
group: 'Válaszd ki a csoportot'
role:
label: 'Role in %{project}'
label: 'Szerepek a %{project}'
no_roles_found: 'Nem található szerepkör.'
description: 'This is the role that %{principal} will receive when they join your project. The role defines which actions they are allowed to take and which information they are allowed to see. <a href="https://docs.openproject.org/system-admin-guide/users-permissions/roles-permissions/#roles-and-permissions" target="_blank"> Learn more about roles and permissions. </a>'
required: 'Kérjük, válasszon szerepet'
@ -1082,7 +1082,7 @@ hu:
group: 'The group is now a part of %{project}. Meanwhile you can already plan with that group and assign work packages for instance.'
next_button: 'Folytatás'
forms:
submit_success_message: 'The form was successfully submitted'
submit_success_message: 'Jelentés sikeresen elküldve'
load_error_message: 'There was an error loading the form'
validation_error_message: 'Please fix the errors present in the form'
advanced_settings: 'Speciális beállítások'

@ -488,7 +488,7 @@ id:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ it:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -489,7 +489,7 @@ ja:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ ko:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ lt:
wiki: '<b>Wiki</b>''yje galite dokumentuoti ir dalintis žiniomis su savo komandos nariais.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'Norėdami matyti jūsų <b>užduočių lentą</b>, atverkite sprinto iškrentantį meniu...'
task_board_select: '... ir pasirinkite <b>task board</b> elementą.'
task_board: "Užduočių lenta vizualizuoja <b>sprinto progresą</b>. Nuspauskite pliuso (+) ženklą prie user story norėdami pridėti naujas užduotis arba trukdžius. <br> Būsena gali būti pakeista nuvelkant į reikiamą vietą."

@ -488,7 +488,7 @@ nl:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ pl:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -487,7 +487,7 @@ pt:
wiki: 'No <b>wiki</b>, você pode documentar e compartilhar conhecimento junto com sua equipe. '
backlogs:
overview: "Gerencie seu trabalho na exibição de <b>backlogs</b>."
sprints: "À direita você tem o backlog do produto ou um backlog de erros, à esquerda, você terá o sprints respectivos. Aqui você pode criar <b>épicos, histórias de usuário e bugs</b>, priorizar através de arrastar e soltar e adicioná-los a um sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'Para ver o seu <b>quadro de tarefas</b>, abra o menu suspenso de sprint ... '
task_board_select: '... e selecione a entrada <b>quadro de tarefas</b>. '
task_board: "O painel de tarefas visualiza o progresso de <b>para este sprint</b>. Clique no ícone mais (+) ao lado de uma história de usuário para adicionar novas tarefas ou impedimentos. <br> O status pode ser atualizado arrastando e soltando."

@ -487,7 +487,7 @@ ro:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -487,7 +487,7 @@ ru:
wiki: 'В пределах <b>вики</b> возможно документирование и обмен знаниями в вашей команде.'
backlogs:
overview: "Управляйте своей работой в представлении <b>backlogs</b>."
sprints: "Справа у вас есть бэклог продукта или бэклог ошибок, слева у вас будут соответствующие спринты. Здесь вы можете создать <b>, пользовательские истории и ошибки</b>, приоритизировать с помощью перетаскивания и добавить их в спринт."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'Чтобы увидеть вашу <b>панель задач</b>, откройте выпадающий спринт...'
task_board_select: '... и выберите строку <b>Панель задач</b>.'
task_board: "Панель задач визуализирует прогресс <b>для этого спринта</b>. Нажмите на значок плюс (+) рядом с пользовательской историей, чтобы добавить новые задачи или препятствия. <br> Статус можно обновить перетаскиванием."

@ -488,7 +488,7 @@ sk:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -487,7 +487,7 @@ sl:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -487,7 +487,7 @@ sv:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ tr:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ uk:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -487,7 +487,7 @@ vi:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -488,7 +488,7 @@ zh-CN:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -487,7 +487,7 @@ zh-TW:
wiki: 'Within the <b>wiki</b> you can document and share knowledge together with your team.'
backlogs:
overview: "Manage your work in the <b>backlogs</b> view."
sprints: "On the right you have the product backlog or a bug backlog, on the left you will have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag and drop and add them to a sprint."
sprints: "On the right you have the product backlog and the bug backlog, on the left you have the respective sprints. Here you can create <b>epics, user stories, and bugs</b>, prioritize via drag drop and add them to a sprint."
task_board_arrow: 'To see your <b>task board</b>, open the sprint drop-down...'
task_board_select: '...and select the <b>task board</b> entry.'
task_board: "The task board visualizes the <b>progress for this sprint</b>. Click on the plus (+) icon next to a user story to add new tasks or impediments. <br> The status can be updated by drag and drop."

@ -0,0 +1,18 @@
---
title: OpenProject 11.3.4
sidebar_navigation:
title: 11.3.4
release_version: 11.3.4
release_date: 2021-07-29
---
# OpenProject 11.3.4
Release date: 2021-07-29
We released [OpenProject 11.3.4](https://community.openproject.com/versions/1488).
The release contains several bug fixes and we recommend updating to the newest version.
<!--more-->
#### Bug fixes and changes

@ -16,6 +16,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. -->
<!--- RELEASE MARKER -->
## 11.3.4
Release date: 2021-07-29
[Release Notes](11-3-4/)
## 11.3.3
Release date: 2021-07-20

@ -12,6 +12,7 @@ import { StateService } from '@uirouter/core';
import { WorkPackageResource } from 'core-app/features/hal/resources/work-package-resource';
import { NgxGalleryComponent, NgxGalleryOptions } from '@kolkov/ngx-gallery';
import { HalLink } from 'core-app/features/hal/hal-link/hal-link';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
import { I18nService } from 'core-app/core/i18n/i18n.service';
import { ViewerBridgeService } from 'core-app/features/bim/bcf/bcf-viewer-bridge/viewer-bridge.service';
import { UntilDestroyedMixin } from 'core-app/shared/helpers/angular/until-destroyed.mixin';
@ -162,7 +163,7 @@ export class BcfWpAttributeGroupComponent extends UntilDestroyedMixin implements
}
async initialize(workPackage:WorkPackageResource) {
this.projectId = workPackage.project.idFromLink;
this.projectId = idFromLink(workPackage.project.href);
this.viewAllowed = await this.bcfAuthorization.isAllowedTo(this.projectId, 'project_actions', 'viewTopic');
this.createAllowed = await this.bcfAuthorization.isAllowedTo(this.projectId, 'topic_actions', 'createViewpoint');

@ -9,6 +9,7 @@ import { forkJoin, Observable, of } from 'rxjs';
import { BcfViewpointInterface } from 'core-app/features/bim/bcf/api/viewpoints/bcf-viewpoint.interface';
import { BcfTopicResource } from 'core-app/features/bim/bcf/api/topics/bcf-topic.resource';
import { APIV3Service } from 'core-app/core/apiv3/api-v3.service';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
@Injectable()
export class ViewpointsService {
@ -46,7 +47,7 @@ export class ViewpointsService {
}
public saveViewpoint$(workPackage:WorkPackageResource, viewpoint?:BcfViewpointInterface):Observable<BcfViewpointInterface> {
const wpProjectId = workPackage.project.idFromLink;
const wpProjectId = idFromLink(workPackage.project.href);
const topicUUID$ = this.setBcfTopic$(workPackage);
// Default to the current viewer's viewpoint
const viewpoint$ = viewpoint
@ -81,7 +82,7 @@ export class ViewpointsService {
}
private createBcfTopic$(workPackage:WorkPackageResource):Observable<string> {
const wpProjectId = workPackage.project.idFromLink;
const wpProjectId = idFromLink(workPackage.project.href);
const wpPayload = workPackage.convertBCF.payload;
return this.bcfApi

@ -10,7 +10,7 @@ import { InjectField } from 'core-app/shared/helpers/angular/inject-field.decora
import { ViewpointsService } from 'core-app/features/bim/bcf/helper/viewpoints.service';
import { CurrentProjectService } from 'core-app/core/current-project/current-project.service';
import { HttpClient } from '@angular/common/http';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
export interface XeokitElements {
canvasElement:HTMLElement;
@ -167,7 +167,7 @@ export class IFCViewerService extends ViewerBridgeService {
// and redirect to a route with a place to show viewer
// ('bim.partitioned.split')
window.location.href = this.pathHelper.bimDetailsPath(
workPackage.project.idFromLink,
idFromLink(workPackage.project.href),
workPackage.id!,
index,
);

@ -54,7 +54,7 @@ import { HalResourceNotificationService } from 'core-app/features/hal/services/h
export class AddListModalComponent extends OpModalComponent implements OnInit {
/** Keep a switchmap for search term and loading state */
public requests = new DebouncedRequestSwitchmap<string, ValueOption>(
(searchTerm:string) => this.actionService.loadAvailable(this.board, this.active, searchTerm),
(searchTerm:string) => this.actionService.loadAvailable(this.active, searchTerm),
errorNotificationHandler(this.halNotification),
true,
);

@ -56,7 +56,7 @@ export class AddListModalComponent extends OpModalComponent implements OnInit {
getAutocompleterData = (searchTerm:string):Observable<HalResource[]> => {
// Remove prefix # from search
searchTerm = searchTerm.replace(/^#/, '');
return this.actionService.loadAvailable(this.board, this.active, searchTerm)
return this.actionService.loadAvailable( this.active, searchTerm)
.pipe(tap((values) => (this.warnIfNoOptions(values))));
};

@ -8,6 +8,7 @@ import { CollectionResource } from 'core-app/features/hal/resources/collection-r
import { QueryResource } from 'core-app/features/hal/resources/query-resource';
import { UserResource } from 'core-app/features/hal/resources/user-resource';
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
import { ProjectResource } from 'core-app/features/hal/resources/project-resource';
@Injectable()
@ -51,7 +52,7 @@ export class BoardAssigneeActionService extends CachedBoardActionService {
filter = {
assignee: {
operator: '=',
values: [value.idFromLink],
values: [idFromLink(value.href)],
},
};
}

@ -21,6 +21,7 @@ import { QueryResource } from 'core-app/features/hal/resources/query-resource';
import { WorkPackageResource } from 'core-app/features/hal/resources/work-package-resource';
import { HalResourceService } from 'core-app/features/hal/services/hal-resource.service';
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
@Injectable()
export abstract class BoardActionService {
@ -132,7 +133,7 @@ export abstract class BoardActionService {
const filter = {
[this.filterName]: {
operator: '=' as FilterOperator,
values: [value.idFromLink],
values: [idFromLink(value.href)],
},
};
@ -146,7 +147,7 @@ export abstract class BoardActionService {
* @param active The active set of values (resources or plain values)
* @param matching values matching the given name
*/
loadAvailable(board:Board, active:Set<string>, matching:string):Observable<HalResource[]> {
loadAvailable(active:Set<string>, matching:string):Observable<HalResource[]> {
return this
.loadValues(matching)
.pipe(

@ -29,6 +29,7 @@ import { Component, Input } from '@angular/core';
import { PathHelperService } from 'core-app/core/path-helper/path-helper.service';
import { I18nService } from 'core-app/core/i18n/i18n.service';
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
@Component({
templateUrl: './subproject-board-header.html',
@ -38,6 +39,8 @@ import { HalResource } from 'core-app/features/hal/resources/hal-resource';
export class SubprojectBoardHeaderComponent {
@Input() public resource:HalResource;
idFromLink = idFromLink;
text = {
project: this.I18n.t('js.time_entry.project'),
};

@ -2,7 +2,7 @@
<h2 class="editable-toolbar-title--fixed">
<small [textContent]="text.project"></small>
<br/>
<a [href]="pathHelper.projectPath(resource.idFromLink)"
<a [href]="pathHelper.projectPath(idFromLink(resource.href))"
[textContent]="resource.name"
target="_blank">
</a>

@ -30,6 +30,7 @@ import { PathHelperService } from 'core-app/core/path-helper/path-helper.service
import { I18nService } from 'core-app/core/i18n/i18n.service';
import { WorkPackageResource } from 'core-app/features/hal/resources/work-package-resource';
import { Highlighting } from 'core-app/features/work-packages/components/wp-fast-table/builders/highlighting/highlighting.functions';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
@Component({
templateUrl: './subtasks-board-header.html',
@ -39,6 +40,8 @@ import { Highlighting } from 'core-app/features/work-packages/components/wp-fast
export class SubtasksBoardHeaderComponent implements OnInit {
@Input() public resource:WorkPackageResource;
idFromLink = idFromLink;
text = {
workPackage: this.I18n.t('js.label_work_package_parent'),
};

@ -6,7 +6,7 @@
[ngClass]="typeHighlightingClass"
[textContent]="resource.type.name">
</span>
<a [href]="pathHelper.workPackagePath(resource.idFromLink)"
<a [href]="pathHelper.workPackagePath(idFromLink(resource.href))"
[textContent]="resource.subjectWithId()"
target="_blank">
</a>

@ -0,0 +1,4 @@
export default function idFromLink(href:string|null):string {
const idPart = (href || '').split('/').pop()!;
return decodeURIComponent(idPart);
}

@ -33,6 +33,7 @@ import { I18nService } from 'core-app/core/i18n/i18n.service';
import { InjectField } from 'core-app/shared/helpers/angular/inject-field.decorator';
import { HalLinkInterface } from 'core-app/features/hal/hal-link/hal-link';
import { ICKEditorContext } from 'core-app/shared/components/editor/components/ckeditor/ckeditor.types';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
export interface HalResourceClass<T extends HalResource = HalResource> {
new(injector:Injector,
@ -112,23 +113,11 @@ export class HalResource {
public _name:string;
public static idFromLink(href:string):string {
return href.split('/').pop()!;
}
public static matchFromLink(href:string, expectedResource:string):string|null {
const match = new RegExp(`/api/v3/${expectedResource}/(\\d+)`).exec(href);
return match && match[1];
}
public get idFromLink():string {
if (this.href) {
return HalResource.idFromLink(this.href);
}
return '';
}
public $initialize(source:any) {
this.$source = source.$source || source;
this.halInitializer(this);
@ -156,7 +145,7 @@ export class HalResource {
return this.$source.id.toString();
}
const id = this.idFromLink;
const id = idFromLink(this.href);
if (/^\d+$/.exec(id)) {
return id;
}
@ -289,28 +278,6 @@ export class HalResource {
// Reset and load this resource
this.$loaded = false;
this.$self = this.$links.self({}).then((source:any) => {
if (source.$halType === 'Collection') {
if (source.total > source.pageSize) {
const remaining = source.total - source.pageSize;
const pagesRemaining = Math.ceil(remaining / source.pageSize);
const calls = (new Array(pagesRemaining))
.fill(null)
.map((_, i) => this.$links.self({
pageSize: source.pageSize,
offset: i + 2, // Page offsets are 1-indexed, and we already fetched the first page
}));
return Promise.all(calls).then((data:any[]) => {
source.count = source.total;
source.elements = source.elements.concat(...data.map(source => source.elements));
return source;
});
}
}
return source;
})
.then((source:any) => {
this.$loaded = true;
this.$initialize(source.$source);
return this;

@ -31,6 +31,7 @@ import { SchemaCacheService } from 'core-app/core/schemas/schema-cache.service';
import { PathHelperService } from 'core-app/core/path-helper/path-helper.service';
import { QueryOperatorResource } from 'core-app/features/hal/resources/query-operator-resource';
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
import { QueryFilterInstanceSchemaResource } from 'core-app/features/hal/resources/query-filter-instance-schema-resource';
import { QueryFilterResource } from 'core-app/features/hal/resources/query-filter-resource';
@ -51,7 +52,7 @@ export class QueryFilterInstanceResource extends HalResource {
super.$initialize(source);
this.$links.schema = {
href: `${this.pathHelper.api.v3.apiV3Base}/queries/filter_instance_schemas/${this.filter.idFromLink}`,
href: `${this.pathHelper.api.v3.apiV3Base}/queries/filter_instance_schemas/${idFromLink(this.filter.href)}`,
};
}

@ -28,6 +28,7 @@
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import { QueryFilterInstanceSchemaResource } from 'core-app/features/hal/resources/query-filter-instance-schema-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
export interface QueryFilterResourceEmbedded {
schema:QueryFilterInstanceSchemaResource;
@ -39,7 +40,7 @@ export class QueryFilterResource extends HalResource {
public values:any[];
public get id():string {
return this.$source.id || this.idFromLink;
return this.$source.id || idFromLink(this.href);
}
public set id(newId:string) {

@ -27,19 +27,11 @@
//++
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
export class QueryOperatorResource extends HalResource {
public get id():string {
return this.$source.id || this.idFromLink;
}
public get idFromLink():string {
if (this.href) {
const idPart = HalResource.idFromLink(this.href);
return decodeURIComponent(idPart);
}
return '';
return this.$source.id || idFromLink(this.href);
}
public set id(val:string) {

@ -28,6 +28,7 @@
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import { WorkPackageResource } from 'core-app/features/hal/resources/work-package-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
export interface RelationResourceLinks {
delete():Promise<any>;
@ -117,8 +118,8 @@ export class RelationResource extends HalResource {
*/
public get ids() {
return {
from: WorkPackageResource.idFromLink(this.from.href!),
to: WorkPackageResource.idFromLink(this.to.href!),
from: idFromLink(this.from.href!),
to: idFromLink(this.to.href!),
};
}

@ -16,7 +16,7 @@ import {
timer,
} from 'rxjs';
import { APIV3Service } from 'core-app/core/apiv3/api-v3.service';
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
import { I18nService } from 'core-app/core/i18n/i18n.service';
import { InAppNotificationsService } from 'core-app/features/in-app-notifications/store/in-app-notifications.service';
import { TimezoneService } from 'core-app/core/datetime/timezone.service';
@ -29,6 +29,7 @@ import { PathHelperService } from 'core-app/core/path-helper/path-helper.service
import { take } from 'rxjs/internal/operators/take';
import { StateService } from '@uirouter/angular';
import { InAppNotificationsQuery } from 'core-app/features/in-app-notifications/store/in-app-notifications.query';
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
@Component({
selector: 'op-in-app-notification-entry',
@ -202,7 +203,7 @@ export class InAppNotificationEntryComponent implements OnInit {
if (project) {
this.project = {
...project,
showUrl: this.pathHelper.projectPath(HalResource.idFromLink(project.href)),
showUrl: this.pathHelper.projectPath(idFromLink(project.href)),
};
}
}

@ -2,9 +2,15 @@ import { AbstractControl } from '@angular/forms';
import { of } from 'rxjs';
import { catchError, map, take } from 'rxjs/operators';
import { CurrentUserService } from 'core-app/core/current-user/current-user.service';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
export const ProjectAllowedValidator = (currentUserService:CurrentUserService) => (control:AbstractControl) => currentUserService.hasCapabilities$('memberships/create', control.value.idFromLink).pipe(
take(1),
map((isAllowed) => (isAllowed ? null : { lackingPermission: true })),
catchError(() => of(null)),
);
export const ProjectAllowedValidator = (currentUserService:CurrentUserService) =>
(control:AbstractControl) =>
currentUserService.hasCapabilities$(
'memberships/create',
idFromLink(control.value.href)
).pipe(
take(1),
map((isAllowed) => (isAllowed ? null : { lackingPermission: true })),
catchError(() => of(null)),
);

@ -5,6 +5,7 @@ import { ExternalQueryConfigurationService } from 'core-app/features/work-packag
import { OpModalService } from 'core-app/shared/components/modal/modal.service';
import { DisplayField } from 'core-app/shared/components/fields/display/display-field.module';
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
import { DisplayFieldService } from 'core-app/shared/components/fields/display/display-field.service';
import { EditFieldService } from 'core-app/shared/components/fields/edit/edit-field.service';
import { DynamicBootstrapper } from 'core-app/core/setup/globals/dynamic-bootstrapper';
@ -57,6 +58,10 @@ export class OpenProjectPluginContext {
configurationService: this.injector.get<ConfigurationService>(ConfigurationService),
};
public readonly helpers = {
idFromLink,
};
// Random collection of classes needed outside of angular
public readonly classes = {
modals: {

@ -30,6 +30,7 @@ import { Component, Input, OnInit } from '@angular/core';
import { WorkPackageResource } from 'core-app/features/hal/resources/work-package-resource';
import { PathHelperService } from 'core-app/core/path-helper/path-helper.service';
import { I18nService } from 'core-app/core/i18n/i18n.service';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
@Component({
selector: 'activity-entry',
@ -53,7 +54,7 @@ export class ActivityEntryComponent implements OnInit {
}
ngOnInit() {
this.projectId = this.workPackage.project.idFromLink;
this.projectId = idFromLink(this.workPackage.project.href);
this.activityType = this.activity._type;
}

@ -34,6 +34,7 @@ import { TimezoneService } from 'core-app/core/datetime/timezone.service';
import { UserResource } from 'core-app/features/hal/resources/user-resource';
import { ProjectResource } from 'core-app/features/hal/resources/project-resource';
import { WorkPackageResource } from 'core-app/features/hal/resources/work-package-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
@Component({
selector: 'revision-activity',
@ -105,7 +106,7 @@ export class RevisionActivityComponent implements OnInit {
this
.apiV3Service
.users
.id(this.activity.author.idFromLink)
.id(idFromLink(this.activity.author.href))
.get()
.subscribe((user:UserResource) => {
this.userId = user.id!;

@ -47,6 +47,7 @@ import { CommentService } from 'core-app/features/work-packages/components/wp-ac
import { WorkPackageResource } from 'core-app/features/hal/resources/work-package-resource';
import { UserResource } from 'core-app/features/hal/resources/user-resource';
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
@Component({
selector: 'user-activity',
@ -132,7 +133,7 @@ export class UserActivityComponent extends WorkPackageCommentFieldHandler implem
this
.apiV3Service
.users
.id(this.activity.user.idFromLink)
.id(idFromLink(this.activity.user.href))
.get()
.subscribe((user:UserResource) => {
this.user = user;

@ -44,6 +44,7 @@ import { AuthorisationService } from 'core-app/core/model-auth/model-auth.servic
import { UntilDestroyedMixin } from 'core-app/shared/helpers/angular/until-destroyed.mixin';
import { APIV3Service } from 'core-app/core/apiv3/api-v3.service';
import { HalResource, HalSource, HalSourceLink } from 'core-app/features/hal/resources/hal-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
import { SchemaResource } from 'core-app/features/hal/resources/schema-resource';
import { SchemaCacheService } from 'core-app/core/schemas/schema-cache.service';
import { HalResourceService } from 'core-app/features/hal/services/hal-resource.service';
@ -211,7 +212,7 @@ export class WorkPackageCreateService extends UntilDestroyedMixin {
const hasChanges = !change.isEmpty();
const typeEmpty = !changeType && !type;
const typeMatches = type && changeType && changeType.idFromLink === type.toString();
const typeMatches = type && changeType && idFromLink(changeType.href) === type.toString();
if (hasChanges && (typeEmpty || typeMatches)) {
return Promise.resolve(change);

@ -29,6 +29,7 @@
import { QueryResource } from 'core-app/features/hal/resources/query-resource';
import { QuerySortByResource } from 'core-app/features/hal/resources/query-sort-by-resource';
import { HalLink } from 'core-app/features/hal/hal-link/hal-link';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
import { Injectable } from '@angular/core';
import { QueryFilterInstanceResource } from 'core-app/features/hal/resources/query-filter-instance-resource';
import { ApiV3Filter, FilterOperator } from 'core-app/shared/helpers/api-v3/api-v3-filter-builder';
@ -297,7 +298,7 @@ export class UrlParamsHelperService {
private buildV3GetColumnsFromQueryResource(query:QueryResource) {
if (query.columns) {
return query.columns.map((column:any) => column.id || column.idFromLink);
return query.columns.map((column:any) => column.id || idFromLink(column.href));
} if (query._links.columns) {
return query._links.columns.map((column:HalLink) => {
const id = column.href!;
@ -340,7 +341,7 @@ export class UrlParamsHelperService {
private buildV3GetOperatorIdFromFilter(filter:QueryFilterInstanceResource) {
if (filter.operator) {
return filter.operator.id || filter.operator.idFromLink;
return filter.operator.id || idFromLink(filter.operator.href);
}
const { href } = filter._links.operator;

@ -42,6 +42,7 @@ import { QueryResource } from 'core-app/features/hal/resources/query-resource';
import { HalEventsService } from 'core-app/features/hal/services/hal-events.service';
import { APIV3Service } from 'core-app/core/apiv3/api-v3.service';
import { GroupDescriptor } from 'core-app/features/work-packages/components/wp-single-view/wp-single-view.component';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
@Component({
selector: 'wp-children-query',
@ -60,6 +61,8 @@ export class WorkPackageChildrenQueryComponent extends WorkPackageRelationQueryB
@Input() public addExistingChildEnabled = false;
public idFromLink = idFromLink;
public tableActions:OpTableActionFactory[] = [
OpUnlinkTableAction.factoryFor(
'remove-child-action',

@ -42,6 +42,7 @@ import { WorkPackageRelationsService } from 'core-app/features/work-packages/com
import { filter } from 'rxjs/operators';
import { QueryResource } from 'core-app/features/hal/resources/query-resource';
import { HalEventsService } from 'core-app/features/hal/services/hal-events.service';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
import { WorkPackageNotificationService } from 'core-app/features/work-packages/services/notifications/work-package-notification.service';
import { GroupDescriptor } from 'core-app/features/work-packages/components/wp-single-view/wp-single-view.component';
@ -73,6 +74,8 @@ export class WorkPackageRelationQueryComponent extends WorkPackageRelationQueryB
),
];
public idFromLink = idFromLink;
constructor(protected readonly PathHelper:PathHelperService,
@Inject(WorkPackageInlineCreateService) protected readonly wpInlineCreate:WpRelationInlineCreateService,
protected readonly wpRelations:WorkPackageRelationsService,

@ -17,7 +17,7 @@
compactTableStyle: true,
columnMenuEnabled: false,
contextMenuEnabled: false,
projectIdentifier: workPackage.project.idFromLink,
projectIdentifier: idFromLink(workPackage.project.href),
projectContext: false }" >
</wp-embedded-table>
</ng-container>

@ -49,6 +49,7 @@ import { Subject } from 'rxjs';
import { randomString } from 'core-app/shared/helpers/random-string';
import { BrowserDetector } from 'core-app/core/browser/browser-detector.service';
import { HalResourceService } from 'core-app/features/hal/services/hal-resource.service';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
import { UntilDestroyedMixin } from 'core-app/shared/helpers/angular/until-destroyed.mixin';
import { CurrentProjectService } from 'core-app/core/current-project/current-project.service';
import { States } from 'core-app/core/states/states.service';
@ -186,7 +187,7 @@ export class WorkPackageSingleViewComponent extends UntilDestroyedMixin implemen
this.projectContext = { matches: false, href: null };
} else {
this.projectContext = {
href: this.PathHelper.projectWorkPackagePath(resource.project.idFromLink, this.workPackage.id!),
href: this.PathHelper.projectWorkPackagePath(idFromLink(resource.project.href), this.workPackage.id!),
matches: resource.project.href === this.currentProject.apiv3Path,
};
}
@ -257,7 +258,7 @@ export class WorkPackageSingleViewComponent extends UntilDestroyedMixin implemen
}
public get projectContextText():string {
const id = this.workPackage.project.idFromLink;
const id = idFromLink(this.workPackage.project.href);
const projectPath = this.PathHelper.projectPath(id);
const project = `<a href="${projectPath}">${this.workPackage.project.name}<a>`;
return this.I18n.t('js.project.work_package_belongs_to', { projectname: project });

@ -31,6 +31,7 @@ import { I18nService } from 'core-app/core/i18n/i18n.service';
import { PathHelperService } from 'core-app/core/path-helper/path-helper.service';
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import { TimezoneService } from 'core-app/core/datetime/timezone.service';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
@Component({
templateUrl: './authoring.component.html',
@ -67,7 +68,7 @@ export class AuthoringComponent implements OnInit {
this.createdOnTime = this.timezoneService.parseDatetime(this.createdOn);
this.timeago = this.createdOnTime.fromNow();
this.time = this.createdOnTime.format('LLL');
this.userLink = this.PathHelper.userPath(this.author.idFromLink);
this.userLink = this.PathHelper.userPath(idFromLink(this.author.href));
}
public activityFromPath(from:any) {

@ -36,6 +36,7 @@ import { SchemaCacheService } from 'core-app/core/schemas/schema-cache.service';
import { FilterOperator } from 'core-app/shared/helpers/api-v3/api-v3-filter-builder';
import { TimezoneService } from 'core-app/core/datetime/timezone.service';
import { HalResourceNotificationService } from 'core-app/features/hal/services/hal-resource-notification.service';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
interface CalendarViewEvent {
el:HTMLElement;
@ -548,7 +549,7 @@ export class TimeEntryCalendarComponent implements AfterViewInit {
}
private workPackageName(entry:TimeEntryResource) {
return `#${entry.workPackage.idFromLink}: ${entry.workPackage.name}`;
return `#${idFromLink(entry.workPackage.href)}: ${entry.workPackage.name}`;
}
private tooltipContentString(entry:TimeEntryResource) {

@ -38,13 +38,15 @@ export class DatePickerModalHelper {
/**
* Map the date to the internal format,
* setting to null if it's empty.
* @param key
* @param date
*/
public mappedDate(date:string):string|null {
// eslint-disable-next-line class-methods-use-this
mappedDate(date:string):string|null {
return date === '' ? null : date;
}
public parseDate(date:Date|string):Date|'' {
// eslint-disable-next-line class-methods-use-this
parseDate(date:Date|string):Date|'' {
if (date instanceof Date) {
return new Date(date.setHours(0, 0, 0, 0));
} if (date === '') {
@ -53,17 +55,18 @@ export class DatePickerModalHelper {
return new Date(new Date(date).setHours(0, 0, 0, 0));
}
public validDate(date:Date|string) {
// eslint-disable-next-line class-methods-use-this
validDate(date:Date|string):boolean {
return (date instanceof Date)
|| (date === '')
|| !!new Date(date).valueOf();
}
public sortDates(dates:Date[]):Date[] {
sortDates(dates:Date[]):Date[] {
return dates.sort((a:Date, b:Date) => a.getTime() - b.getTime());
}
public areDatesEqual(firstDate:Date|string, secondDate:Date|string) {
areDatesEqual(firstDate:Date|string, secondDate:Date|string):boolean {
const parsedDate1 = this.parseDate(firstDate);
const parsedDate2 = this.parseDate(secondDate);
@ -73,20 +76,21 @@ export class DatePickerModalHelper {
return parsedDate1.getTime() === parsedDate2.getTime();
}
public setCurrentActivatedField(val:DateKeys) {
setCurrentActivatedField(val:DateKeys):void {
this.currentlyActivatedDateField = val;
}
public toggleCurrentActivatedField(dates:{ [key in DateKeys]:string }, datePicker:DatePicker) {
toggleCurrentActivatedField(dates:{ [key in DateKeys]:string }, datePicker:DatePicker):void {
this.currentlyActivatedDateField = this.currentlyActivatedDateField === 'start' ? 'end' : 'start';
this.setDatepickerRestrictions(dates, datePicker);
}
public isStateOfCurrentActivatedField(val:DateKeys):boolean {
isStateOfCurrentActivatedField(val:DateKeys):boolean {
return this.currentlyActivatedDateField === val;
}
public setDates(dates:DateOption|DateOption[], datePicker:DatePicker, enforceDate?:Date) {
// eslint-disable-next-line class-methods-use-this
setDates(dates:DateOption|DateOption[], datePicker:DatePicker, enforceDate?:Date):void {
const { currentMonth } = datePicker.datepickerInstance;
const { currentYear } = datePicker.datepickerInstance;
datePicker.setDates(dates);
@ -103,7 +107,7 @@ export class DatePickerModalHelper {
datePicker.datepickerInstance.redraw();
}
public setDatepickerRestrictions(dates:{ [key in DateKeys]:string }, datePicker:DatePicker) {
setDatepickerRestrictions(dates:{ [key in DateKeys]:string }, datePicker:DatePicker):void {
if (!dates.start && !dates.end) {
return;
}
@ -119,7 +123,7 @@ export class DatePickerModalHelper {
datePicker.datepickerInstance.set('disable', [disableFunction]);
}
public setRangeClasses(dates:{ [key in DateKeys]:string }) {
setRangeClasses(dates:{ [key in DateKeys]:string }):void {
if (!dates.start || !dates.end || (dates.start === dates.end)) {
return;
}
@ -131,7 +135,7 @@ export class DatePickerModalHelper {
}
}
private highlightRangeInSingleMonth(container:Element, dates:{ [key in DateKeys]:string }) {
private highlightRangeInSingleMonth(container:Element, dates:{ [key in DateKeys]:string }):void {
const selectedElements = jQuery(container).find('.flatpickr-day.selected');
if (selectedElements.length === 2) {
// Both dates are in the same month
@ -141,10 +145,10 @@ export class DatePickerModalHelper {
this.selectRangeFromUntil(selectedElements[0], selectedElements[1]);
} else if (selectedElements.length === 1) {
// Only one date is in this month
if (this.datepickerShowsDate(dates.start, selectedElements[0])) {
if (DatePickerModalHelper.datepickerShowsDate(dates.start, selectedElements[0])) {
selectedElements[0].classList.add('startRange');
this.selectRangeFromUntil(selectedElements[0], '');
} else if (this.datepickerShowsDate(dates.end, selectedElements[0])) {
} else if (DatePickerModalHelper.datepickerShowsDate(dates.end, selectedElements[0])) {
const firstDay = jQuery(container).find('.flatpickr-day')[0];
selectedElements[0].classList.add('endRange');
@ -152,22 +156,34 @@ export class DatePickerModalHelper {
this.selectRangeFromUntil(firstDay, selectedElements[0]);
}
} else if (this.datepickerIsInDateRange(container, dates)) {
} else if (DatePickerModalHelper.datepickerIsInDateRange(container, dates)) {
// No date is in this month, but the month is completely between start and end date
jQuery(container).find('.flatpickr-day').addClass('inRange');
}
}
private datepickerShowsDate(date:string, selectedElement:Element):boolean {
return new Date(selectedElement.getAttribute('aria-label')!).toDateString() === new Date(date).toDateString();
private static datepickerShowsDate(date:string, selectedElement:Element):boolean {
const isoDate = selectedElement.getAttribute('data-iso-date');
if (isoDate) {
return moment(isoDate).isSame(date, 'days');
}
return false;
}
private datepickerIsInDateRange(container:Element, dates:{ [key in DateKeys]:string }):boolean {
private static datepickerIsInDateRange(container:Element, dates:{ [key in DateKeys]:string }):boolean {
const firstDayOfMonthElement = jQuery(container).find('.flatpickr-day:not(.hidden)')[0];
const firstDayOfMonth = new Date(firstDayOfMonthElement.getAttribute('aria-label')!);
const isoDate = firstDayOfMonthElement.getAttribute('data-iso-date');
if (isoDate) {
const firstDayOfMonth = new Date(isoDate);
return firstDayOfMonth <= new Date(dates.end)
&& firstDayOfMonth >= new Date(dates.start);
}
return firstDayOfMonth <= new Date(dates.end)
&& firstDayOfMonth >= new Date(dates.start);
return false;
}
private selectRangeFromUntil(from:Element, until:string|Element) {

@ -51,6 +51,7 @@ import { BrowserDetector } from 'core-app/core/browser/browser-detector.service'
import { ConfigurationService } from 'core-app/core/config/configuration.service';
import { TimezoneService } from 'core-app/core/datetime/timezone.service';
import { WorkPackageResource } from 'core-app/features/hal/resources/work-package-resource';
import { DayElement } from "flatpickr/dist/types/instance";
export type DateKeys = 'date'|'start'|'end';
@ -284,6 +285,9 @@ export class DatePickerModalComponent extends OpModalComponent implements AfterV
onYearChange: () => {
this.datepickerHelper.setRangeClasses(this.dates);
},
onDayCreate: (dObj:Date[], dStr:string, fp:DatePicker, dayElem:DayElement) => {
dayElem.setAttribute('data-iso-date', dayElem.dateObj.toISOString());
},
},
undefined,
this.configurationService,

@ -1,6 +1,6 @@
import { Component, OnInit } from '@angular/core';
import { FieldType } from '@ngx-formly/core';
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
@Component({
selector: 'op-select-input',
@ -12,7 +12,7 @@ export class SelectInputComponent extends FieldType implements OnInit {
public ngOnInit():void {
if (this.model?.project) {
this.projectId = HalResource.idFromLink(this.model.project?.href);
this.projectId = idFromLink(this.model.project?.href);
}
}
}

@ -29,6 +29,7 @@
import { Component } from '@angular/core';
import { WorkPackageEditFieldComponent } from 'core-app/shared/components/fields/edit/field-types/work-package-edit-field.component';
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
import { InjectField } from 'core-app/shared/helpers/angular/inject-field.decorator';
import { APIV3Service } from 'core-app/core/apiv3/api-v3.service';
import {
@ -92,7 +93,7 @@ export class TimeEntryWorkPackageEditFieldComponent extends WorkPackageEditField
.then((collection) => {
this.recentWorkPackageIds = collection
.elements
.map((timeEntry) => timeEntry.workPackage.idFromLink)
.map((timeEntry) => idFromLink(timeEntry.workPackage.href))
.filter((v, i, a) => a.indexOf(v) === i);
return this.fetchAllowedValueQuery(query);

@ -9,6 +9,7 @@ import { CurrentProjectService } from 'core-app/core/current-project/current-pro
import { APIV3Service } from 'core-app/core/apiv3/api-v3.service';
import { Apiv3ListParameters } from 'core-app/core/apiv3/paths/apiv3-list-resource.interface';
import { TimezoneService } from 'core-app/core/datetime/timezone.service';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
@Component({
templateUrl: './news.component.html',
@ -62,7 +63,7 @@ export class WidgetNewsComponent extends AbstractWidgetComponent implements OnIn
}
public newsProjectPath(news:NewsResource) {
return this.pathHelper.projectPath(news.project?.idFromLink);
return this.pathHelper.projectPath(idFromLink(news.project?.href));
}
public newsProjectName(news:NewsResource) {

@ -11,6 +11,7 @@ import { FilterOperator } from 'core-app/shared/helpers/api-v3/api-v3-filter-bui
import { TimezoneService } from 'core-app/core/datetime/timezone.service';
import { ConfirmDialogService } from 'core-app/shared/components/modals/confirm-dialog/confirm-dialog.service';
import { TimeEntryResource } from 'core-app/features/hal/resources/time-entry-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
@Directive()
export abstract class WidgetTimeEntriesListComponent extends AbstractWidgetComponent implements OnInit {
@ -95,7 +96,7 @@ export abstract class WidgetTimeEntriesListComponent extends AbstractWidgetCompo
}
public workPackagePath(entry:TimeEntryResource) {
return this.pathHelper.workPackagePath(entry.workPackage.idFromLink);
return this.pathHelper.workPackagePath(idFromLink(entry.workPackage.href));
}
public get isEditable() {
@ -132,7 +133,7 @@ export abstract class WidgetTimeEntriesListComponent extends AbstractWidgetCompo
showClose: true,
closeByDocument: true,
passedData: [
`#${entry.workPackage?.idFromLink} ${entry.workPackage?.name}`,
`#${idFromLink(entry.workPackage?.href)} ${entry.workPackage?.name}`,
`${this.i18n.t(
'js.units.hour',
{ count: this.timezone.toHours(entry.hours) },

@ -34,7 +34,7 @@ import { OpModalLocalsToken, OpModalService } from 'core-app/shared/components/m
import { OpModalLocalsMap } from 'core-app/shared/components/modal/modal.types';
import { I18nService } from 'core-app/core/i18n/i18n.service';
import { WorkPackageResource } from 'core-app/features/hal/resources/work-package-resource';
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
import { APIV3Service } from 'core-app/core/apiv3/api-v3.service';
import { StateService } from '@uirouter/core';
@ -63,7 +63,7 @@ export class WpPreviewModalComponent extends OpModalComponent implements OnInit
ngOnInit() {
super.ngOnInit();
const { workPackageLink } = this.locals;
const workPackageId = HalResource.idFromLink(workPackageLink);
const workPackageId = idFromLink(workPackageLink);
this
.apiV3Service

@ -4,6 +4,7 @@ import { ColorsService } from 'core-app/shared/components/colors/colors.service'
import { APIV3Service } from 'core-app/core/apiv3/api-v3.service';
import { HalResource } from 'core-app/features/hal/resources/hal-resource';
import idFromLink from 'core-app/features/hal/helpers/id-from-link';
import { PrincipalLike } from './principal-types';
import { PrincipalHelper } from './principal-helper';
import PrincipalType = PrincipalHelper.PrincipalType;
@ -129,7 +130,7 @@ export class PrincipalRendererService {
}
private userAvatarUrl(principal:PrincipalLike):string|null {
const id = principal.id || HalResource.idFromLink(principal.href || '');
const id = principal.id || idFromLink(principal.href || '');
return id ? this.apiV3Service.users.id(id).avatar.toString() : null;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -99,7 +99,7 @@ hu:
backlogs_empty_title: "No versions are defined to be used in backlogs"
backlogs_empty_action_text: "To get started with backlogs, create a new version and assign it to a backlogs column."
button_edit_wiki: "Edit wiki page"
error_backlogs_task_cannot_be_story: "The settings are invalid. The selected task type can not also be a story type."
error_backlogs_task_cannot_be_story: "A beállítások érvénytelenek. A kiválasztott feladattípus nem lehet sztori típus is."
error_intro_plural: "The following errors were encountered:"
error_intro_singular: "The following error was encountered:"
error_outro: "Please correct the above errors before submitting again."

@ -9,12 +9,12 @@ hu:
export_bcf_xml_file: 'Export BCF XML file (BCF version 2.1)'
viewpoint: 'Nézőpont'
add_viewpoint: 'Nézőpont hozzáadása'
show_viewpoint: 'Show viewpoint'
delete_viewpoint: 'Delete viewpoint'
show_viewpoint: 'Nézőpont megjelenítése'
delete_viewpoint: 'Nézőpont törlése'
management: 'BCF management'
ifc_models:
empty_warning: "This project does not yet have any IFC models."
use_this_link_to_manage: "Use this link to upload and manage your IFC models"
empty_warning: "Ez a projekt nem tartalmaz ICF modellt még"
use_this_link_to_manage: "Ezen a linken tudja feltölteni és szerkeszteni az ICF modelleket"
keyboard_input_disabled: "Viewer does not have keyboard controls. Click on the viewer to give keyboard control to the viewer."
models:
ifc_models: 'IFC modell'

@ -69,9 +69,9 @@ hu:
add_list_modal:
labels:
assignee: Select user to add as a new assignee list
status: Select status to add as a new list
version: Select version to add as a new list
subproject: Select subproject to add as a new list
status: Státusz hozzáadása az új listához
version: Verzió hozzáadása az új listához
subproject: Alprojekt hozzáadása az új listához
subtasks: Select work package to add as a new list
warning:
status: |

@ -20,7 +20,7 @@ hu:
must_contain_base_dn: "Filter base DN must be contained within the LDAP connection's base DN"
ldap_groups:
label_menu_item: 'LDAP csoport szinkronizálása'
label_group_key: 'LDAP group filter key'
label_group_key: 'LDAP csoport szűrési feltétel'
label_synchronize: 'Szinkronizálás'
settings:
name_attribute: 'LDAP csoport érték'
@ -62,7 +62,7 @@ hu:
plural: 'Szinkronizált LDAP csoportok'
singular: 'Szinkronizált LDAP csoport'
form:
auth_source_text: 'Select which LDAP connection should be used.'
auth_source_text: 'LDAP csatlakozás kiválasztása'
sync_users_text: >
If you enable this option, found users will also be automatically created in OpenProject. Without it, only existing accounts in OpenProject will be added to groups.
dn_text: 'Enter the full DN of the group in LDAP'

@ -81,7 +81,7 @@ hu:
text_in_hours: "órában"
text_meeting_agenda_for_meeting: 'a "%{meeting}" megbeszélés napirendje'
text_meeting_closing_are_you_sure: "Biztosan le akarod zárni a találkozót?"
text_meeting_agenda_open_are_you_sure: "This will overwrite all changes in the minutes! Do you want to continue?"
text_meeting_agenda_open_are_you_sure: "Ez minden változást felül fog írni. Biztosan folytani akarja?"
text_meeting_minutes_for_meeting: 'a "%{meeting}" megbeszélés jegyzőkönyve'
text_review_meeting_agenda: "%{author} véleményezésre küldte %{link} -t."
text_review_meeting_minutes: "%{author} véleményezésre küldte %{link} -t."

@ -49,7 +49,7 @@ hu:
title: '2FA beállítások'
current_configuration: 'Jelenlegi konfiguráció'
label_active_strategies: 'Active 2FA strategies'
label_enforced: 'Enforce 2FA'
label_enforced: '2FA kényszerítése'
label_remember: '2FA bejelentkezés megjegyzése'
text_configuration: |
Note: These values represent the current application-wide configuration. You cannot disable settings enforced by the configuration or change the current active strategies, since they require a server restart.
@ -59,14 +59,14 @@ hu:
Set this to greater than zero to allow users to remember their 2FA authentication for the given number of days.
They will not be requested to re-enter it during that period. Can only be set when not enforced by configuration.
error_invalid_settings: 'The 2FA strategies you selected are invalid'
failed_to_save_settings: 'Failed to update 2FA settings: %{message}'
failed_to_save_settings: 'Nem sikerült frissíteni a 2FA beállításokat %{message}'
admin:
self_edit_path: 'To add or modify your own 2FA devices, please go to %{self_edit_link}'
self_edit_path: '2FA hozzáadásához vagy módosításához kérlek menj a %{self_edit_link}'
self_edit_link_name: 'Two-factor authentication on your account page'
self_edit_forbidden: 'You may not edit your own 2FA devices on this path. Go to My Account > Two factor authentication instead.'
self_edit_forbidden: 'Ezen az útvonalon nem tudod szerkeszteni a 2FA-t. Menj a Saját Fiokom > Két faktorú azonosítás menübe'
no_devices_for_user: 'Nincs regisztrált 2FA eszköze a felhasználónak.'
all_devices_deleted: 'A felhasználó összes 2FA eszköze törölve lett'
delete_all_are_you_sure: 'Are you sure you want to delete all 2FA devices for this user?'
delete_all_are_you_sure: 'Biztos vagy benne hogy törölni szeretnéd az összes 2FA eszközt ennél a felhasználónál?'
button_delete_all_devices: '2FA eszköz regisztrációjának törlése'
button_register_mobile_phone_for_user: 'Mobiltelefon regisztrálása'
text_2fa_enabled: 'Upon every login, this user will be requested to enter a OTP token from his default 2FA device.'
@ -93,7 +93,7 @@ hu:
confirm_default: 'Confirm changing default device'
confirm_device: 'Confirm device'
confirm_now: 'Not confirmed, click here to activate'
cannot_delete_default: 'Cannot delete default device'
cannot_delete_default: 'Az alapértelmezett eszközt nem lehet törölni'
make_default_are_you_sure: 'Are you sure you want to make this 2FA device your default?'
make_default_failed: 'Failed to update the default 2FA device.'
deletion_are_you_sure: 'Are you sure you want to delete this 2FA device?'
@ -101,20 +101,20 @@ hu:
registration_failed_token_invalid: '2FA device registration failed, the token was invalid.'
registration_failed_update: '2FA device registration failed, the token was valid but the device could not be updated.'
confirm_send_failed: 'Confirmation of your 2FA device failed.'
button_complete_registration: 'Complete 2FA registration'
button_complete_registration: '2FA regisztráció befejezése'
text_confirm_to_complete_html: "Please complete the registration of your device <strong>%{identifier}</strong> by entering a one-time password from your default device."
text_confirm_to_change_default_html: "Please confirm changing your default device to <strong>%{new_identifier}</strong> by entering a one-time password from your current default device."
text_identifier: 'You can give the device a custom identifier using this field.'
failed_to_delete: 'Failed to delete 2FA device.'
failed_to_delete: 'Nem sikerült törölni a 2FA eszközt'
is_default_cannot_delete: 'The device is marked as default and cannot be deleted due to an active security policy. Mark another device as default before deleting.'
not_existing: 'No 2FA device has been registered for your account.'
not_existing: 'Nincs regisztrál 2FA eszköz ehhez a felhasználóhoz'
request_2fa: Please enter the code from your %{device_name} to verify your identity.
totp:
title: 'Use your app-based authenticator'
provisioning_uri: 'Provisioning URI'
secret_key: 'Titkos kulcs'
time_based: 'Idő alapú'
account: 'Account name / Issuer'
account: 'Felhasználó név / Kibocsátó'
setup: |
For setting up two-factor authentication with Google Authenticator, download the application from the Apple App store or Google Play Store.
After opening the app, you can scan the following QR code to register the device.
@ -126,9 +126,9 @@ hu:
Register an application authenticator for use with OpenProject using the time-based one-time password authentication standard.
Common examples are Google Authenticator or Authy.
sms:
title: 'Use your mobile phone'
redacted_identifier: 'Mobile device (%{redacted_number})'
request_2fa_identifier: '%{redacted_identifier}, we sent you an authentication code via %{delivery_channel}'
title: 'Használja a mobiltelefonját.'
redacted_identifier: 'Mobiltelefon (%{redacted_number})'
request_2fa_identifier: '%{redacted_identifier} azonosító kód elküldve %{delivery_channel}'
description: |
Register your mobile phone number for delivery of OpenProject one-time passwords.
sns:
@ -143,7 +143,7 @@ hu:
sns: 'Amazon SNS'
resdt: 'SMS Rest API'
mobile_transmit_notification: "A one-time password has been sent to your cell phone."
label_two_factor_authentication: 'Two-factor authentication'
label_two_factor_authentication: 'Kétlépcsős hitelesítés'
forced_registration:
required_to_add_device: 'An active security policy requires you to enable two-factor authentication. Please use the following form to register a device.'
remember:

@ -38,7 +38,7 @@ ar:
time: 'Delivery time'
form:
introduction: >
Send a POST request to the payload URL below for any event in the project your subscribe. Payload will correspond to the APIv3 representation of the object being modified.
Send a POST request to the payload URL below for any event in the project you're subscribed to. Payload will correspond to the APIv3 representation of the object being modified.
apiv3_doc_url: For more information, visit the API documentation
description:
placeholder: 'Optional description for the webhook.'

@ -38,7 +38,7 @@ bg:
time: 'Delivery time'
form:
introduction: >
Send a POST request to the payload URL below for any event in the project your subscribe. Payload will correspond to the APIv3 representation of the object being modified.
Send a POST request to the payload URL below for any event in the project you're subscribed to. Payload will correspond to the APIv3 representation of the object being modified.
apiv3_doc_url: For more information, visit the API documentation
description:
placeholder: 'Optional description for the webhook.'

@ -38,7 +38,7 @@ ca:
time: 'Delivery time'
form:
introduction: >
Send a POST request to the payload URL below for any event in the project your subscribe. Payload will correspond to the APIv3 representation of the object being modified.
Send a POST request to the payload URL below for any event in the project you're subscribed to. Payload will correspond to the APIv3 representation of the object being modified.
apiv3_doc_url: For more information, visit the API documentation
description:
placeholder: 'Optional description for the webhook.'

@ -38,7 +38,7 @@ cs:
time: 'Delivery time'
form:
introduction: >
Send a POST request to the payload URL below for any event in the project your subscribe. Payload will correspond to the APIv3 representation of the object being modified.
Send a POST request to the payload URL below for any event in the project you're subscribed to. Payload will correspond to the APIv3 representation of the object being modified.
apiv3_doc_url: For more information, visit the API documentation
description:
placeholder: 'Optional description for the webhook.'

@ -38,7 +38,7 @@ da:
time: 'Delivery time'
form:
introduction: >
Send a POST request to the payload URL below for any event in the project your subscribe. Payload will correspond to the APIv3 representation of the object being modified.
Send a POST request to the payload URL below for any event in the project you're subscribed to. Payload will correspond to the APIv3 representation of the object being modified.
apiv3_doc_url: For more information, visit the API documentation
description:
placeholder: 'Optional description for the webhook.'

@ -38,7 +38,7 @@ de:
time: 'Zustellzeit'
form:
introduction: >
Senden Sie eine POST-Anfrage an die unten stehende Payload-URL für jedes Ereignis im Projekt, das Sie abonnieren. Der Inhalt entspricht der APIv3-Darstellung des modifizierten Objekts.
Send a POST request to the payload URL below for any event in the project you're subscribed to. Payload will correspond to the APIv3 representation of the object being modified.
apiv3_doc_url: Weitere Informationen finden Sie in der API-Dokumentation
description:
placeholder: 'Optionale Beschreibung für den Webhook.'

@ -38,7 +38,7 @@ el:
time: 'Χρόνος παράδοσης'
form:
introduction: >
Στείλτε ένα αίτημα POST στην παρακάτω διεύθυνση payload URL για οποιοδήποτε γεγονός στο έργο που έχετε εγγραφεί. Το payload θα αντιστοιχεί στην αναπαράσταση APIv3 του αντικειμένου που τροποποιείται.
Send a POST request to the payload URL below for any event in the project you're subscribed to. Payload will correspond to the APIv3 representation of the object being modified.
apiv3_doc_url: Για περισσότερες πληροφορίες, επισκεφθείτε την τεκμηρίωση API
description:
placeholder: 'Προαιρετική περιγραφή για το webhook.'

@ -38,7 +38,7 @@ es:
time: 'Hora de entrega'
form:
introduction: >
Envíe una solicitud POST a la URL de carga siguiente para cualquier evento en el proyecto al que se haya suscrito. La carga se corresponderá con la representación de APIv3 del objeto que se vaya a modificar.
Send a POST request to the payload URL below for any event in the project you're subscribed to. Payload will correspond to the APIv3 representation of the object being modified.
apiv3_doc_url: Para obtener más información, visite la documentación de la API
description:
placeholder: 'Descripción opcional del webhook.'

@ -38,7 +38,7 @@ fi:
time: 'Delivery time'
form:
introduction: >
Send a POST request to the payload URL below for any event in the project your subscribe. Payload will correspond to the APIv3 representation of the object being modified.
Send a POST request to the payload URL below for any event in the project you're subscribed to. Payload will correspond to the APIv3 representation of the object being modified.
apiv3_doc_url: For more information, visit the API documentation
description:
placeholder: 'Optional description for the webhook.'

@ -38,7 +38,7 @@ fil:
time: 'Delivery time'
form:
introduction: >
Send a POST request to the payload URL below for any event in the project your subscribe. Payload will correspond to the APIv3 representation of the object being modified.
Send a POST request to the payload URL below for any event in the project you're subscribed to. Payload will correspond to the APIv3 representation of the object being modified.
apiv3_doc_url: For more information, visit the API documentation
description:
placeholder: 'Optional description for the webhook.'

@ -38,7 +38,7 @@ fr:
time: 'Délai de livraison'
form:
introduction: >
Envoyez une demande POST à l'URL de payload ci-dessous pour tout événement dans le projet auquel vous êtes abonné. Payload correspond à la représentation APIv3 de l'objet en cours de modification.
Send a POST request to the payload URL below for any event in the project you're subscribed to. Payload will correspond to the APIv3 representation of the object being modified.
apiv3_doc_url: Pour plus d'informations, consultez la documentation API
description:
placeholder: 'Description facultative pour le webhook.'

@ -38,7 +38,7 @@ hr:
time: 'Delivery time'
form:
introduction: >
Send a POST request to the payload URL below for any event in the project your subscribe. Payload will correspond to the APIv3 representation of the object being modified.
Send a POST request to the payload URL below for any event in the project you're subscribed to. Payload will correspond to the APIv3 representation of the object being modified.
apiv3_doc_url: For more information, visit the API documentation
description:
placeholder: 'Optional description for the webhook.'

@ -38,7 +38,7 @@ id:
time: 'Delivery time'
form:
introduction: >
Send a POST request to the payload URL below for any event in the project your subscribe. Payload will correspond to the APIv3 representation of the object being modified.
Send a POST request to the payload URL below for any event in the project you're subscribed to. Payload will correspond to the APIv3 representation of the object being modified.
apiv3_doc_url: For more information, visit the API documentation
description:
placeholder: 'Optional description for the webhook.'

@ -38,7 +38,7 @@ it:
time: 'Tempo di consegna'
form:
introduction: >
Invia una richiesta POST all'URL di payload qui sotto per ogni evento nel progetto che hai sottoscritto. Il payload corrisponde alla rappresentazione APIv3 dell'oggetto in fase di modifica.
Send a POST request to the payload URL below for any event in the project you're subscribed to. Payload will correspond to the APIv3 representation of the object being modified.
apiv3_doc_url: Per maggiori informazioni visitare la documentazione sulle API
description:
placeholder: 'Descrizione opzionale del webhook.'

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

Loading…
Cancel
Save