Skip to content

Commit d70b7c1

Browse files
committed
Release OpenProject 17.1.2
2 parents 8cbd04a + 0774914 commit d70b7c1

File tree

114 files changed

+1258
-344
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+1258
-344
lines changed

app/helpers/application_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,7 @@ def body_data_attributes(local_assigns)
305305
controller: "application auto-theme-switcher hover-card-trigger beforeunload external-links highlight-target-element",
306306
relative_url_root: root_path,
307307
overflowing_identifier: ".__overflowing_body",
308+
external_links_enabled_value: Setting.capture_external_links?,
308309
rendered_at: Time.zone.now.iso8601,
309310
turbo: local_assigns[:turbo_opt_out] ? "false" : nil
310311
}.merge(user_theme_data_attributes)

app/models/project_custom_field.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,34 @@ class ProjectCustomField < CustomField
5555
end
5656

5757
class << self
58+
def visible(user = User.current, project: nil)
59+
if user.admin?
60+
all
61+
elsif user.allowed_in_any_project?(:select_project_custom_fields) || user.allowed_globally?(:add_project)
62+
where(admin_only: false)
63+
else
64+
where(admin_only: false).where(mappings_with_view_project_attributes_permission(user, project).exists)
65+
end
66+
end
67+
68+
def toggleable_ids_in_project_settings(project, user, custom_field_section_id)
69+
toggleable_ids(
70+
project:,
71+
user:,
72+
custom_field_section_id:,
73+
options: { is_for_all: false }
74+
).first
75+
end
76+
77+
def toggleable_ids_in_creation_wizard_settings(project, custom_field_section_id)
78+
toggleable_ids(
79+
project:,
80+
custom_field_section_id:,
81+
options: { is_required: false },
82+
invert_options: { is_required: true }
83+
)
84+
end
85+
5886
private
5987

6088
# Returns an array with:

app/models/status.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ class Status < ApplicationRecord
4949

5050
after_save :unmark_old_default_value, if: :is_default?
5151

52+
scope :visible, ->(user = User.current) { user.allowed_in_any_project?(:view_work_packages) ? all : none }
53+
5254
def unmark_old_default_value
5355
Status.where.not(id:).update_all(is_default: false)
5456
end

app/models/type.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,13 @@ def copy_from_type(source_type)
7272

7373
scope :without_standard, -> { where(is_standard: false).order(:position) }
7474
scope :default, -> { where(is_default: true) }
75+
scope :visible, ->(user = User.current) {
76+
if user.allowed_in_any_project?(:view_work_packages) || user.allowed_in_any_project?(:manage_types)
77+
all
78+
else
79+
none
80+
end
81+
}
7582

7683
delegate :to_s, to: :name
7784

app/services/mcp_resources/status.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class Status < Base
3737
default_description "Access work package statuses of this OpenProject instance."
3838

3939
def read(id:)
40-
status = ::Status.find_by(id:)
40+
status = ::Status.visible(current_user).find_by(id:)
4141
return nil if status.nil?
4242

4343
API::V3::Statuses::StatusRepresenter.new(status, current_user:)

app/services/mcp_resources/status_list.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ class StatusList < Base
3737
default_description "A list of all work package statuses configured in this OpenProject instance."
3838

3939
def read
40-
API::V3::Statuses::StatusCollectionRepresenter.new(::Status.all, self_link: api_v3_paths.statuses, current_user:)
40+
API::V3::Statuses::StatusCollectionRepresenter.new(
41+
::Status.visible(current_user),
42+
self_link: api_v3_paths.statuses,
43+
current_user:
44+
)
4145
end
4246
end
4347
end

app/services/mcp_resources/type.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class Type < Base
3737
default_description "Access work package types of this OpenProject instance."
3838

3939
def read(id:)
40-
type = ::Type.find_by(id:)
40+
type = ::Type.visible.find_by(id:)
4141
return nil if type.nil?
4242

4343
API::V3::Types::TypeRepresenter.new(type, current_user:)

app/services/mcp_resources/type_list.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ class TypeList < Base
3737
default_description "A list of all work package types configured in this OpenProject instance."
3838

3939
def read
40-
API::V3::Types::TypeCollectionRepresenter.new(::Type.includes(:color).all, self_link: api_v3_paths.types, current_user:)
40+
API::V3::Types::TypeCollectionRepresenter.new(
41+
::Type.includes(:color).visible(current_user),
42+
self_link: api_v3_paths.types,
43+
current_user:
44+
)
4145
end
4246
end
4347
end

config/locales/crowdin/de.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3235,7 +3235,7 @@ de:
32353235
label_equals_with_descendants: "ist (ODER) inkl. Unterelementen "
32363236
label_everywhere: "überall"
32373237
label_example: "Beispiel"
3238-
label_experimental: "Experimentel"
3238+
label_experimental: "Experimentell"
32393239
label_i_am_member: "Ich bin Mitglied"
32403240
label_ifc_viewer: "IFC-Viewer"
32413241
label_ifc_model_plural: "IFC-Modelle"
@@ -4905,7 +4905,7 @@ de:
49054905
text_change_disabled_for_ldap_login: "Der Name und die E-Mail-Adresse werden über LDAP festgelegt und können daher nicht geändert werden."
49064906
unlock: "Entsperren"
49074907
unlock_and_reset_failed_logins: "Entsperren und fehlgeschlagene Logins zurücksetzen"
4908-
error_cannot_delete_user: "User cannot be deleted"
4908+
error_cannot_delete_user: "Benutzer kann nicht gelöscht werden"
49094909
version_status_closed: "geschlossen"
49104910
version_status_locked: "gesperrt"
49114911
version_status_open: "offen"

config/locales/crowdin/fr.yml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ fr:
113113
index:
114114
description: "Le protocole de contexte de modèle permet aux agents d'intelligence artificielle de fournir à leurs utilisateurs les outils et les ressources exposés par cette instance d'OpenProject."
115115
resources_heading: "Ressources"
116-
resources_description: "OpenProject implements the following resources. Each can be enabled, renamed and described as you want. For more information, please refer to the [documentation on MCP resources](docs_url)."
116+
resources_description: "OpenProject met en œuvre les ressources suivantes. Chacune d'entre elles peut être activée, renommée et décrite comme vous le souhaitez. Pour plus d'informations, veuillez vous référer à la [documentation sur les ressources MCP](docs_url)."
117117
resources_submit: "Mettre à jour les ressources"
118118
tools_heading: "Outils"
119119
tools_description: "OpenProject implémente les outils suivants. Chacun d'entre eux peut être activé, renommé et décrit comme vous le souhaitez. Pour en savoir plus, veuillez vous référer à la [documentation sur les outils MCP](docs_url)."
@@ -122,7 +122,7 @@ fr:
122122
success: "Les configurations MCP ont été mises à jour avec succès."
123123
server_form:
124124
description_caption: "Comment le serveur MCP sera décrit aux autres applications qui s'y connectent."
125-
title_caption: "A short title shown to applications that connect to the MCP server."
125+
title_caption: "Titre court affiché aux applications qui se connectent au serveur MCP."
126126
update:
127127
failure: "La configuration MCP n'a pas pu être mise à jour."
128128
success: "La configuration MCP a été mise à jour avec succès."
@@ -608,7 +608,7 @@ fr:
608608
is_for_all_blank_slate:
609609
heading: Pour tous les projets
610610
description: Cet attribut de projet est activé dans tous les projets, car l'option « Pour tous les projets » est cochée. Il ne peut pas être désactivé pour les projets individuels.
611-
enabled_via_assignee_when_submitted_html: This project attribute cannot be disabled since it is set as <a href=%{pir_submission_url} target="_blank">assignee when submitted</a> for project initiation requests.
611+
enabled_via_assignee_when_submitted_html: Cet attribut de projet ne peut pas être désactivé car il est défini comme <a href=%{pir_submission_url} target="_blank">assignee when submitted</a> pour les demandes d'initiation de projet.
612612
types:
613613
no_results_title_text: Il n'y a actuellement aucun type disponible.
614614
form:
@@ -624,8 +624,8 @@ fr:
624624
new_label: "Nouvelle priorité"
625625
creation_wizard:
626626
errors:
627-
no_work_package_type: "Failed to enable project initiation request because it requires at least one active work package type and this project has none. Please add at least one work package type to this project."
628-
no_status_when_submitted: "Failed to enable project initiation request because work package type %{type} requires at least one status associated with it. Please enable at least one status workflow for this work package type."
627+
no_work_package_type: "La demande d'initiation de projet n'a pas pu être activée car elle nécessite au moins un type de lot de travaux actif et ce projet n'en a pas. Veuillez ajouter au moins un type de lot de travail à ce projet."
628+
no_status_when_submitted: "Échec de l'activation de la demande d'initiation de projet car le type de lot de travail %{type} doit être associé à au moins un statut. Veuillez activer au moins un workflow de statut pour ce type de work package."
629629
export:
630630
description_attachment_export: "L'artefact généré sera enregistré en tant que pièce jointe au format PDF dans le lot de travaux de l'artefact."
631631
description_file_link_export: "Le lot de travaux de l'artefact contient un lien vers un fichier PDF stocké dans un espace de stockage de fichiers externe. Nécessite un stockage de fichiers de travail avec des dossiers de projet gérés automatiquement pour ce projet. Pour le moment, seuls les espaces de stockage de fichiers Nextcloud sont pris en charge."
@@ -639,7 +639,7 @@ fr:
639639
label_request_submission: "Demande d'envoi"
640640
project_attributes_description: >
641641
Sélectionnez les attributs du projet à inclure dans la demande de lancement du projet. Cette liste ne comprend que les [attributs du projet](project_attributes_url) activés pour ce projet.
642-
enabled_because_required_html: This project attribute cannot be disabled for this project initiation request since it is defined as required. This can be changed in the <a href=%{admin_settings_url} target="_blank">administration settings</a> by the administrator of the instance.
642+
enabled_because_required_html: Cet attribut de projet ne peut pas être désactivé pour cette demande d'initiation de projet puisqu'il est défini comme obligatoire. Il peut être modifié dans les <a href=%{admin_settings_url} target="_blank">paramètres d'administration</a> par l'administrateur de l'instance.
643643
status:
644644
button_edit: Modifier le statut
645645
wizard:
@@ -1643,7 +1643,7 @@ fr:
16431643
meeting:
16441644
error_conflict: "Impossible d'enregistrer, car la réunion a été mise à jour par quelqu'un d'autre entre-temps. Veuillez recharger la page."
16451645
message:
1646-
cannot_move_message_to_forum_of_different_project: "A message cannot be moved to a forum of a different project."
1646+
cannot_move_message_to_forum_of_different_project: "Un message ne peut pas être déplacé vers un forum d'un autre projet."
16471647
notifications:
16481648
at_least_one_channel: "Au moins un canal pour envoyer des notifications doit être spécifié."
16491649
attributes:
@@ -2864,7 +2864,7 @@ fr:
28642864
new_features_list:
28652865
line_0: Lancement automatisé de projets (module complémentaire Enterprise).
28662866
line_1: "Réunions : ajoutez des work packages nouveaux ou existants en tant que résultats."
2867-
line_2: "Meetings: show iCal responses in OpenProject."
2867+
line_2: "Réunions : afficher les réponses iCal dans OpenProject."
28682868
line_3: "Réunions récurrentes : dupliquez les points de l'ordre du jour lors de la prochaine réunion."
28692869
line_4: "Mise à disposition de la Communauté : Mise en évidence des attributs."
28702870
line_5: Avertissement avant l'ouverture de liens externes dans le contenu fourni par l'utilisateur (module complémentaire Enterprise).
@@ -4909,7 +4909,7 @@ fr:
49094909
text_change_disabled_for_ldap_login: "Le nom et l'e-mail sont définis par LDAP et ne peuvent donc pas être modifiés."
49104910
unlock: "Déverrouiller"
49114911
unlock_and_reset_failed_logins: "Déverrouiller et réinitialiser les échecs de connexion"
4912-
error_cannot_delete_user: "User cannot be deleted"
4912+
error_cannot_delete_user: "L'utilisateur ne peut pas être supprimé"
49134913
version_status_closed: "clôturé"
49144914
version_status_locked: "verrouillé"
49154915
version_status_open: "ouvert"

0 commit comments

Comments
 (0)