Skip to content

Commit

Permalink
Release OpenProject 14.5.1
Browse files Browse the repository at this point in the history
  • Loading branch information
oliverguenther committed Sep 24, 2024
2 parents f6c5668 + 76b2c78 commit dc02623
Show file tree
Hide file tree
Showing 53 changed files with 690 additions and 306 deletions.
10 changes: 5 additions & 5 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ PATH
remote: modules/auth_saml
specs:
openproject-auth_saml (1.0.0)
omniauth-saml (~> 1.10.1)
omniauth-saml (~> 1.10.5)

PATH
remote: modules/avatars
Expand Down Expand Up @@ -780,9 +780,9 @@ GEM
bigdecimal (>= 3.0)
ostruct (>= 0.2)
okcomputer (1.18.5)
omniauth-saml (1.10.3)
omniauth-saml (1.10.5)
omniauth (~> 1.3, >= 1.3.2)
ruby-saml (~> 1.9)
ruby-saml (~> 1.17)
op-clamav-client (3.4.2)
open4 (1.3.4)
openid_connect (2.2.1)
Expand Down Expand Up @@ -869,7 +869,7 @@ GEM
eventmachine_httpserver
http_parser.rb (~> 0.6.0)
multi_json
puma (6.4.2)
puma (6.4.3)
nio4r (~> 2.0)
puma-plugin-statsd (2.6.0)
puma (>= 5.0, < 7)
Expand Down Expand Up @@ -1041,7 +1041,7 @@ GEM
ruby-prof (1.7.0)
ruby-progressbar (1.13.0)
ruby-rc4 (0.1.5)
ruby-saml (1.16.0)
ruby-saml (1.17.0)
nokogiri (>= 1.13.10)
rexml
ruby2_keywords (0.0.5)
Expand Down
3 changes: 2 additions & 1 deletion app/components/projects/row_component.rb
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,8 @@ def more_menu_settings_item
scheme: :default,
icon: :gear,
label: I18n.t(:label_project_settings),
href: project_settings_general_path(project)
href: project_settings_general_path(project),
data: { turbo: false }
}
end
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@
#++

module Members
class DeleteContract < ::DeleteContract
delete_permission :manage_members

# Abstract contract for deleting members. Should not be used directly. Look at the child classes for
# individual use cases.
class DeleteBaseContract < ::DeleteContract
validate :member_is_deletable

private
protected

def member_is_deletable
errors.add(:base, :not_deletable) unless model.some_roles_deletable?
Expand Down
33 changes: 33 additions & 0 deletions app/contracts/members/delete_from_project_contract.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#-- copyright
# OpenProject is an open source project management software.
# Copyright (C) the OpenProject GmbH
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2013 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See COPYRIGHT and LICENSE files for more details.
#++

module Members
class DeleteFromProjectContract < DeleteBaseContract
delete_permission :manage_members
end
end
33 changes: 33 additions & 0 deletions app/contracts/members/delete_globally_contract.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#-- copyright
# OpenProject is an open source project management software.
# Copyright (C) the OpenProject GmbH
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2013 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See COPYRIGHT and LICENSE files for more details.
#++

module Members
class DeleteGloballyContract < DeleteBaseContract
delete_permission :admin
end
end
6 changes: 4 additions & 2 deletions app/helpers/members_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,13 @@ def global_member_role_deletion_link(member, role)
if member.roles.length == 1
link_to("",
principal_membership_path(member.principal, member),
{ method: :delete, class: "icon icon-delete", title: t(:button_delete) })
{ method: :delete, class: "icon icon-delete", title: t(:button_delete),
data: { "test-selector" => "delete-global-role" } })
else
link_to("",
principal_membership_path(member.principal, member, "membership[role_ids]" => member.roles - [role]),
{ method: :patch, class: "icon icon-delete", title: t(:button_delete) })
{ method: :patch, class: "icon icon-delete", title: t(:button_delete),
data: { "test-selector" => "delete-global-role" } })
end
end

Expand Down
9 changes: 9 additions & 0 deletions app/services/members/delete_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,13 @@ def cleanup_for_group(member)
.new(member.principal, current_user: user, contract_class: EmptyContract)
.call
end

def default_contract_class
# We have different contracts for project roles and global roles
if model.project_role?
"#{namespace}::DeleteFromProjectContract".constantize
else
"#{namespace}::DeleteGloballyContract".constantize
end
end
end
11 changes: 10 additions & 1 deletion app/services/principals/replace_references_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ def rewrite_active_models(from, to)
rewrite_actor(from, to)
rewrite_owner(from, to)
rewrite_logged_by(from, to)
rewrite_presenter(from, to)
end

def rewrite_custom_value(from, to)
Expand Down Expand Up @@ -135,12 +136,20 @@ def rewrite_logged_by(from, to)
end
end

def rewrite_presenter(from, to)
[
MeetingAgendaItem
].each do |klass|
rewrite(klass, :presenter_id, from, to)
end
end

def journal_classes
[Journal] + Journal::BaseJournal.subclasses
end

def foreign_keys
%w[author_id user_id assigned_to_id responsible_id logged_by_id]
%w[author_id user_id assigned_to_id responsible_id logged_by_id presenter_id]
end

def rewrite(klass, attribute, from, to)
Expand Down
4 changes: 1 addition & 3 deletions app/views/my/account.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,7 @@ See COPYRIGHT and LICENSE files for more details.
</div>
<div class="form--field -required">
<%= f.text_field :mail, required: true, container_class: '-middle', disabled: login_via_ldap %>
<% if login_via_provider %>
<span class="form--field-instructions"><%= t('user.text_change_disabled_for_provider_login') %></span>
<% elsif login_via_ldap %>
<% if login_via_ldap %>
<span class="form--field-instructions"><%= t('user.text_change_disabled_for_ldap_login') %></span>
<% end %>
</div>
Expand Down
2 changes: 1 addition & 1 deletion app/workers/attachments/finish_direct_upload_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ def validate_attachment(attachment, whitelist)
contract = create_contract attachment, whitelist

unless contract.valid?
errors = contracterrors.full_messages.join(", ")
errors = contract.errors.full_messages.join(", ")
raise "Failed to validate attachment #{attachment.id}: #{errors}"
end
end
Expand Down
68 changes: 34 additions & 34 deletions config/locales/crowdin/de.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1657,27 +1657,27 @@ de:
label: "XLS"
columns:
input_label_report: "Spalten zur Attributtabelle hinzufügen"
input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
input_caption_report: "Standardmäßig sind alle Attribute, die als Spalten in der Arbeitspaketliste hinzugefügt wurden, ausgewählt. Textfelder sind in der Attribut-Tabelle nicht verfügbar, können aber unterhalb der Tabelle angezeigt werden."
input_caption_table: "Standardmäßig sind alle Attribute, die als Spalten in der Arbeitspaketliste hinzugefügt wurden, ausgewählt. Textfelder sind in tabellenbasierten Exporten nicht verfügbar."
pdf:
export_type:
label: "PDF export type"
label: "PDF-Exporttyp"
options:
table:
label: "Tabelle"
caption: "Export the work packages list in a table with the desired columns."
caption: "Exportieren Sie die Liste der Arbeitspakete in eine Tabelle mit den gewünschten Spalten."
report:
label: "Report"
caption: "Export the work package on a detailed report of all work packages in the list."
caption: "Exportieren Sie das Arbeitspaket in einen detaillierten Bericht über alle Arbeitspakete in der Liste."
gantt:
label: "Gantt-Diagramm"
caption: "Export the work packages list in a Gantt diagram view."
caption: "Exportieren Sie die Liste der Arbeitspakete in einer Gantt-Diagramm-Ansicht."
include_images:
label: "Include images"
caption: "Exclude images to reduce the size of the PDF export."
label: "Bilder inkludieren"
caption: "Schließen Sie Bilder aus, um die Größe des PDF-Exports zu reduzieren."
gantt_zoom_levels:
label: "Zoom levels"
caption: "Select what is the zoom level for dates displayed in the chart."
label: "Zoomstufe"
caption: "Wählen Sie die Zoomstufe für die im Diagramm angezeigten Daten."
options:
days: "Tage"
weeks: "Wochen"
Expand All @@ -1696,18 +1696,18 @@ de:
long_text_fields:
input_caption: "Standardmäßig sind alle Langtextfelder ausgewählt."
input_label: "Langtextfelder hinzufügen"
input_placeholder: "Search for long text fields"
drag_area_label: "Manage long text fields"
input_placeholder: "Nach Textfeldern suchen"
drag_area_label: "Textfelder hinzufügen"
xls:
include_relations:
label: "Include relations"
caption: "This option will create a duplicate of each work package for every relation this has with another work package."
label: "Beziehungen inkludieren"
caption: "Jedes Arbeitspakets, mit dem eine Beziehung mit dem exportierten Arbeitspaket besteht, als zusätzliche Zeile einfügen."
include_descriptions:
label: "Include descriptions"
caption: "This option will add a description column in raw format."
your_work_packages_export: "Work packages are being exported"
succeeded: "Export completed"
failed: "An error has occurred while trying to export the work packages: %{message}"
label: "Beschreibungen inkludieren"
caption: "Mit dieser Option wird die Beschreibungs-Spalte im Rohformat hinzugefügt."
your_work_packages_export: "Arbeitspakete werden exportiert"
succeeded: "Export abgeschlossen"
failed: "Beim Versuch, die Arbeitspakete zu exportieren, ist ein Fehler aufgetreten: %{message}"
format:
atom: "Atom"
csv: "CSV"
Expand Down Expand Up @@ -2358,8 +2358,8 @@ de:
label_role_plural: "Rollen"
label_role_search: "Rolle für neue Mitglieder zuweisen"
label_scm: "Versionskontrollsystem"
label_scroll_left: "Scroll left"
label_scroll_right: "Scroll right"
label_scroll_left: "Nach links scrollen"
label_scroll_right: "Nach rechts scrollen"
label_search: "Suche"
label_search_by_name: "Nach Name suchen"
label_send_information: "Neue Anmeldeinformationen an den Benutzer senden"
Expand Down Expand Up @@ -3117,9 +3117,9 @@ de:
setting_work_package_done_ratio_field: "Arbeitsbezogen"
setting_work_package_done_ratio_status: "Statusbezogen"
setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
In <b>work-based</b> mode, % Complete is calculated from how much work is done in relation to total work. In <b>status-based</b> mode, each status has a % Complete value associated with it. Changing status will change % Complete.
Im <b>arbeitsbezogenen</b> Modus beschreibt % abgeschlossen das Verhältnis zwischen verbeibendem Aufwand und Gesamtaufwand. Im <b>statusbasierten</b> Modus ist jedem Status ein Wert für % abgeschlossen zugeordnet. Wenn Sie den Status ändern, ändert sich % abgeschlossen.
setting_work_package_done_ratio_explanation_html: >
In <b>work-based</b> mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In <b>status-based</b> mode, each status has a % Complete value associated with it. Changing status will change % Complete.
Im <b>arbeitsbezogenen</b> Modus ist % abgeschlossen frei wählbar. Falls Sie einen Wert für Aufwand angeben, wird Verbleibender Aufand automatisch abgeleitet. Im <b>statusbasierten</b> Modus ist jedem Status ein Wert für % abgeschlossen zugeordnet. Wenn Sie den Status ändern, ändert sich % abgeschlossen.
setting_work_package_properties: "Arbeitspaket-Eigenschaften"
setting_work_package_startdate_is_adddate: "Neue Arbeitspakete haben \"Heute\" als Anfangsdatum"
setting_work_packages_projects_export_limit: "Arbeitspakete / Exportlimit für Projekte"
Expand Down Expand Up @@ -3501,26 +3501,26 @@ de:
progress:
label_note: "Hinweis:"
modal:
work_based_help_text: "Each field is automatically calculated from the two others when possible."
work_based_help_text: "Jedes Feld wird, wenn möglich, automatisch aus den beiden anderen berechnet."
work_based_help_text_pre_14_4_without_percent_complete_edition: "% Abgeschlossen wird automatisch aus Aufwand und Verbleibender Aufwand abgeleitet."
status_based_help_text: "% Abgeschlossen wird durch den Status des Arbeitspakets festgelegt."
migration_warning_text: "Im aufwandsbezogenen Modus, kann % Fertig nicht manuell eingegeben werden und ist immer an den Aufwand gebunden. Der vorhandene Wert wurde beibehalten, kann aber nicht bearbeitet werden. Bitte geben Sie zuerst den Wert für Aufwand ein."
derivation_hints:
done_ratio:
cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
cleared_because_work_is_0h: "Cleared because Work is 0h."
derived: "Derived from Work and Remaining work."
cleared_because_remaining_work_is_empty: "Gelöscht, weil Verbleibender Aufwand leer ist."
cleared_because_work_is_0h: "Gelöscht, weil Aufwand 0h beträgt."
derived: "Von Aufwand und Verbleibendem Aufwand abgeleitet."
estimated_hours:
cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
derived: "Derived from Remaining work and % Complete."
same_as_remaining_work: "Set to same value as Remaining work."
cleared_because_remaining_work_is_empty: "Gelöscht, weil Verbleibender Aufwand leer ist."
derived: "Von Aufwand und % abgeschlossen abgeleitet."
same_as_remaining_work: "Auf denselben Wert wie Verbleibender Aufwand gesetzt."
remaining_hours:
cleared_because_work_is_empty: "Cleared because Work is empty."
cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
cleared_because_work_is_empty: "Gelöscht, weil Aufwand leer ist."
cleared_because_percent_complete_is_empty: "Gelöscht, da % abgeschlossen leer ist."
decreased_like_work: "Verringert um den gleichen Betrag wie Aufwand."
derived: "Derived from Work and % Complete."
derived: "Abgeleitet von Aufwand und % abgeschlossen."
increased_like_work: "Erhöht um den gleichen Betrag wie Aufwand."
same_as_work: "Set to same value as Work."
same_as_work: "Auf denselben Wert wie Aufwand gesetzt."
permissions:
comment: "Kommentar"
comment_description: "Kann dieses Arbeitspaket anzeigen und kommentieren."
Expand Down
2 changes: 1 addition & 1 deletion config/locales/crowdin/js-de.yml
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ de:
warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Wenn Sie den Modus der Fortschrittsberechnung von statusbezogen auf aufwandsbezogen ändern, wird <i>% Abgeschlossen</i> zu einem nicht editierbaren Feld, dessen Wert von <i>Aufwand</i> und <i>Verbleibender Aufwand</i> abgeleitet wird. Vorhandene Werte für <i>% Abgeschlossen</i> werden beibehalten. Wenn die Werte für <i>Aufwand</i> und Verbleibender <i>Aufwand</i> nicht vorhanden waren, werden sie benötigt, um <i>% Abgeschlossen</i> zu ändern.
warning_progress_calculation_mode_change_from_status_to_field_html: >-
Changing progress calculation mode from status-based to work-based will make the <i>% Complete</i> field freely editable. If you optionally enter values for <i>Work</i> or <i>Remaining work</i>, they will also be linked to <i>% Complete</i>. Changing <i>Remaining work</i> can then update <i>% Complete</i>.
Wenn Sie den Modus der Fortschrittsberechnung von statusbasiert auf arbeitsbasiert ändern, ist das Feld <i>% abgeschlossen</i> frei editierbar. Wenn Sie optional Werte für <i>Aufwand</i> oder <i>Verbleibenden Aufwand</i> eingeben, werden diese auch mit <i>% abgeschlossen</i> verknüpft. Eine Änderung des <i>verbleibenden Aufwands</i> aktualisiert dann <i>% abgschlossen</i>.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Wenn Sie den Modus der Fortschrittsberechnung von aufwandsbezogen auf statusbezogen ändern, gehen alle bestehenden Werte für <i>% Fertigstellung</i> verloren und werden durch Werte ersetzt, die mit dem jeweiligen Status verbunden sind. Bestehende Werte für <i>Verbleibender Aufwand</i> können ebenfalls neu berechnet werden, um diese Änderung widerzuspiegeln. Diese Aktion ist nicht umkehrbar.
custom_actions:
Expand Down
2 changes: 1 addition & 1 deletion config/locales/crowdin/js-lt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1350,7 +1350,7 @@ lt:
close: "Close modal"
open_project_storage_modal:
waiting_title:
timeout: "Timeout"
timeout: "Skirtojo laiko pabaiga"
waiting_subtitle:
network_off: "Yra tinklo problema."
network_on: "Tinklas grįžo. Mes bandome."
Expand Down
Loading

0 comments on commit dc02623

Please sign in to comment.