diff --git a/app/models/queries/notifications/notification_query.rb b/app/models/queries/notifications/notification_query.rb
index be6587a909..259a04669e 100644
--- a/app/models/queries/notifications/notification_query.rb
+++ b/app/models/queries/notifications/notification_query.rb
@@ -34,6 +34,6 @@ class Queries::Notifications::NotificationQuery < Queries::BaseQuery
end
def default_scope
- Notification.recipient(user)
+ Notification.visible(User.current).recipient(user)
end
end
diff --git a/app/models/repository.rb b/app/models/repository.rb
index e5d31dab64..bb15b05899 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -285,7 +285,7 @@ class Repository < ApplicationRecord
elsif committer.strip =~ /\A([^<]+)(<(.*)>)?\z/
username = $1.strip
email = $3
- u = User.find_by_login(username)
+ u = User.by_login(username).first
u ||= User.find_by_mail(email) unless email.blank?
user = u
end
diff --git a/docs/getting-started/projects/README.md b/docs/getting-started/projects/README.md
index 1871cb4bca..bbc718a39e 100644
--- a/docs/getting-started/projects/README.md
+++ b/docs/getting-started/projects/README.md
@@ -4,7 +4,7 @@ sidebar_navigation:
priority: 900
description: Introduction to projects in OpenProject.
robots: index, follow
-keywords: open project, create project, projects introduction
+keywords: open project, create project, project introduction
---
# Projects introduction
diff --git a/docs/installation-and-operations/configuration/incoming-emails/README.md b/docs/installation-and-operations/configuration/incoming-emails/README.md
index 8b1ef042c7..bdaa832f64 100644
--- a/docs/installation-and-operations/configuration/incoming-emails/README.md
+++ b/docs/installation-and-operations/configuration/incoming-emails/README.md
@@ -123,7 +123,7 @@ If a matching account is found, the mail handler impersonates the user to create
If no matching account is found, the mail is rejected. To override this behavior and allow unknown mail address
to create work packages, set the option `no_permission_check=1` and specify with `unknown_user=accept`
-**Note**: This feature only provides a mapping of mail to user account, it does not authenticate the user based on the mail. Since you can easily spoof mail addresses, you should not rely on the authenticity of work packages created that way.
+**Note**: This feature only provides a mapping of mail to user account, it does not authenticate the user based on the mail. Since you can easily spoof mail addresses, you should not rely on the authenticity of work packages created that way. At the moment in the OpenProject Enterprise Cloud work package generation by emails can only be triggered by registered email addresses.
**Users with mail suffixes**
diff --git a/docs/installation-and-operations/installation/manual/README.md b/docs/installation-and-operations/installation/manual/README.md
index ffe30ea6cb..5be75dfa9b 100644
--- a/docs/installation-and-operations/installation/manual/README.md
+++ b/docs/installation-and-operations/installation/manual/README.md
@@ -381,7 +381,7 @@ Your OpenProject installation is ready to run. Please refer to the [Operation gu
This step is optional.
OpenProject can be extended by various plug-ins, which extend OpenProject's capabilities.
-For general information and a list of all plug-ins known to us, refer to to the [plug-in page](https://community.openproject.org/projects/openproject/wiki/OpenProject_Plug-Ins).
+For general information and a list of all plug-ins known to us, refer to to the [plug-in page](../../../system-admin-guide/integrations/).
OpenProject plug-ins are separated in ruby gems. You can install them by listing them in a file called `Gemfile.plugins`. An example `Gemfile.plugins` file looks like this:
diff --git a/frontend/src/app/features/projects/components/new-project/new-project.component.ts b/frontend/src/app/features/projects/components/new-project/new-project.component.ts
index ae9640f1b3..1d33de4b59 100644
--- a/frontend/src/app/features/projects/components/new-project/new-project.component.ts
+++ b/frontend/src/app/features/projects/components/new-project/new-project.component.ts
@@ -43,7 +43,6 @@ export class NewProjectComponent extends UntilDestroyedMixin implements OnInit {
hiddenFields:string[] = [
'identifier',
- 'sendNotifications',
'active',
];
@@ -114,6 +113,11 @@ export class NewProjectComponent extends UntilDestroyedMixin implements OnInit {
}
private isHiddenField(key:string|undefined):boolean {
+ // We explictly want to show the sendNotifications param
+ if (key === '_meta.sendNotifications') {
+ return false;
+ }
+
return !!key && (this.hiddenFields.includes(key) || this.isMeta(key));
}
diff --git a/frontend/src/app/shared/components/forms/fieldset.sass b/frontend/src/app/shared/components/forms/fieldset.sass
index 885bfed042..8e4b49395d 100644
--- a/frontend/src/app/shared/components/forms/fieldset.sass
+++ b/frontend/src/app/shared/components/forms/fieldset.sass
@@ -7,13 +7,12 @@
&_collapsible &
&--toggle::before
- display: inline-block
- content: ""
+ @include icon-mixin-arrow-up1
padding: .625rem .25rem 0
&_collapsed &
&--toggle::before
- content: ""
+ @include icon-mixin-arrow-down1
&--fields
height: 0
diff --git a/frontend/src/global_styles/content/_table.sass b/frontend/src/global_styles/content/_table.sass
index 36aa5d6f58..3f804fd651 100644
--- a/frontend/src/global_styles/content/_table.sass
+++ b/frontend/src/global_styles/content/_table.sass
@@ -166,6 +166,9 @@ table.generic-table
padding-bottom: 0.5rem
vertical-align: top
+ &.form--td
+ vertical-align: middle
+
// Center input fields and select boxes vertically in tables
.form--field
margin: 0px
diff --git a/modules/budgets/app/controllers/budgets_controller.rb b/modules/budgets/app/controllers/budgets_controller.rb
index 2d47f2c1c8..f09bb8c9e6 100644
--- a/modules/budgets/app/controllers/budgets_controller.rb
+++ b/modules/budgets/app/controllers/budgets_controller.rb
@@ -239,8 +239,8 @@ class BudgetsController < ApplicationController
}
if current_user.allowed_to?(permission, project)
- response["#{element_id}_costs_text"] = number_to_currency(costs)
- response["#{element_id}_cost_value"] = unitless_currency_number(costs)
+ response["#{element_id}_costs"] = number_to_currency(costs)
+ response["#{element_id}_cost_value"] = response["#{element_id}_amount"] = unitless_currency_number(costs)
end
response
diff --git a/modules/budgets/app/views/budgets/items/_budget_override_cost_form.html.erb b/modules/budgets/app/views/budgets/items/_budget_override_cost_form.html.erb
new file mode 100644
index 0000000000..6737592ff2
--- /dev/null
+++ b/modules/budgets/app/views/budgets/items/_budget_override_cost_form.html.erb
@@ -0,0 +1,19 @@
+
<%= t(:help_override_rate) %>
-<%= t(:help_override_rate) %>
+