Feature/40215 restructure email settings (#10415)

* rename user admin menu item

* rename email admin menu item

* restructure api and email admin menus
pull/10421/head
ulferts 3 years ago committed by GitHub
parent 3b0b0a93b2
commit 98f451c302
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      app/controllers/admin/settings/aggregation_settings_controller.rb
  2. 2
      app/controllers/admin/settings/api_settings_controller.rb
  3. 5
      app/helpers/settings_helper.rb
  4. 2
      app/views/admin/index.html.erb
  5. 12
      app/views/admin/settings/aggregation_settings/show.html.erb
  6. 2
      app/views/admin/settings/api_settings/show.html.erb
  7. 28
      config/initializers/menus.rb
  8. 11
      config/locales/en.yml
  9. 3
      config/routes.rb
  10. 44
      docs/system-admin-guide/README.md
  11. 26
      docs/system-admin-guide/incoming-and-outgoing/README.md
  12. 4
      docs/system-admin-guide/users-permissions/README.md
  13. 2
      docs/system-admin-guide/users-permissions/avatars/README.md
  14. 2
      docs/system-admin-guide/users-permissions/groups/README.md
  15. 2
      docs/system-admin-guide/users-permissions/placeholder-users/README.md
  16. 2
      docs/system-admin-guide/users-permissions/roles-permissions/README.md
  17. 4
      docs/system-admin-guide/users-permissions/users-permissions-faq/README.md
  18. 2
      docs/system-admin-guide/users-permissions/users/README.md
  19. 2
      docs/user-guide/time-and-costs/time-tracking/README.md
  20. 5
      modules/webhooks/app/views/webhooks/outgoing/admin/index.html.erb
  21. 5
      modules/webhooks/config/locales/en.yml
  22. 10
      modules/webhooks/config/routes.rb
  23. 10
      modules/webhooks/lib/open_project/webhooks/engine.rb
  24. 28
      modules/webhooks/spec/routing/webhooks/outgoing/admin_controller_spec.rb
  25. 2
      spec/features/users/edit_users_spec.rb

@ -27,7 +27,7 @@
#++ #++
module Admin::Settings module Admin::Settings
class NotificationsSettingsController < ::Admin::SettingsController class AggregationSettingsController < ::Admin::SettingsController
current_menu_item [:show] do current_menu_item [:show] do
:notification_settings :notification_settings
end end
@ -37,7 +37,7 @@ module Admin::Settings
end end
def default_breadcrumb def default_breadcrumb
t(:'menus.admin.incoming_outgoing') t(:'menus.admin.aggregation_and_retention')
end end
def show_local_breadcrumb def show_local_breadcrumb

@ -28,7 +28,7 @@
module Admin::Settings module Admin::Settings
class APISettingsController < ::Admin::SettingsController class APISettingsController < ::Admin::SettingsController
menu_item :settings_api menu_item :api
def default_breadcrumb def default_breadcrumb
t(:label_api_access_key_type) t(:label_api_access_key_type)

@ -54,11 +54,6 @@ module SettingsHelper
controller: '/admin/settings/attachments_settings', controller: '/admin/settings/attachments_settings',
label: :'attributes.attachments' label: :'attributes.attachments'
}, },
{
name: 'api',
controller: '/admin/settings/api_settings',
label: :label_api_access_key_type
},
{ {
name: 'repositories', name: 'repositories',
controller:'/admin/settings/repositories_settings', controller:'/admin/settings/repositories_settings',

@ -34,7 +34,7 @@ See COPYRIGHT and LICENSE files for more details.
<div class="menu-blocks--container"> <div class="menu-blocks--container">
<% @menu_nodes.each do |menu_node| -%> <% @menu_nodes.each do |menu_node| -%>
<%= link_to menu_node.url, { class: 'menu-block' } do %> <%= link_to menu_node.url, { class: 'menu-block' } do %>
<%= op_icon('menu-block--icon ' + menu_node.icon.gsub(/icon2/, "icon3")) %> <%= op_icon('menu-block--icon ' + (menu_node.icon || '').gsub(/icon2/, "icon3")) %>
<span class="menu-block--title"> <%= menu_node.caption %> </span> <span class="menu-block--title"> <%= menu_node.caption %> </span>
<% end %> <% end %>
<% end %> <% end %>

@ -27,18 +27,22 @@ See COPYRIGHT and LICENSE files for more details.
++#%> ++#%>
<% html_title t(:label_administration), t(:'menus.admin.incoming_outgoing') -%> <% html_title t(:label_administration), t(:'menus.admin.aggregation_and_retention') -%>
<%= toolbar title: t(:'menus.admin.incoming_outgoing') %> <%= toolbar title: t(:'menus.admin.aggregation_and_retention') %>
<%= styled_form_tag(admin_settings_notifications_path, method: :patch) do %> <%= styled_form_tag(admin_settings_aggregation_path, method: :patch) do %>
<div class="form--field"> <div class="form--field">
<%= setting_number_field :journal_aggregation_time_minutes, <%= setting_number_field :journal_aggregation_time_minutes,
unit: t(:label_minute_plural), unit: t(:label_minute_plural),
min: 0, min: 0,
container_class: '-xslim' %> container_class: '-xslim' %>
<span class="form--field-instructions"> <span class="form--field-instructions">
<%= t(:text_journal_aggregation_time_explanation) %><br/> <%= t(:'admin.journal_aggregation.explanation.text',
webhook_link: link_to(t(:'admin.journal_aggregation.explanation.link'),
admin_outgoing_webhooks_path,
target: '_blank')).html_safe %>
<br/>
<%= t(:text_hint_disable_with_0) %> <%= t(:text_hint_disable_with_0) %>
</span> </span>
</div> </div>

@ -28,7 +28,7 @@ See COPYRIGHT and LICENSE files for more details.
++#%> ++#%>
<%= toolbar title: t(:label_api_access_key_type) %> <%= toolbar title: t(:label_api_access_key_type) %>
<%= styled_form_tag(admin_settings_update_api_path, method: :patch) do %> <%= styled_form_tag(admin_settings_api_path, method: :patch) do %>
<section class="form--section"> <section class="form--section">
<div class="form--field"> <div class="form--field">
<%= setting_number_field :apiv3_max_page_size, min: 50, container_class: '-slim' %> <%= setting_number_field :apiv3_max_page_size, min: 50, container_class: '-slim' %>

@ -288,29 +288,41 @@ Redmine::MenuManager.map :admin_menu do |menu|
parent: :settings parent: :settings
end end
menu.push :in_out, menu.push :mail_and_notifications,
{ controller: '/admin/settings/notifications_settings', action: :show }, { controller: '/admin/settings/aggregation_settings', action: :show },
if: Proc.new { User.current.admin? }, if: Proc.new { User.current.admin? },
caption: :'menus.admin.incoming_outgoing', caption: :'menus.admin.mails_and_notifications',
icon: 'icon2 icon-mail1' icon: 'icon2 icon-mail1'
menu.push :notification_settings, menu.push :notification_settings,
{ controller: '/admin/settings/notifications_settings', action: :show }, { controller: '/admin/settings/aggregation_settings', action: :show },
if: Proc.new { User.current.admin? }, if: Proc.new { User.current.admin? },
caption: :label_setting_plural, caption: :'menus.admin.aggregation_and_retention',
parent: :in_out parent: :mail_and_notifications
menu.push :mail_notifications, menu.push :mail_notifications,
{ controller: '/admin/settings/mail_notifications_settings', action: :show }, { controller: '/admin/settings/mail_notifications_settings', action: :show },
if: Proc.new { User.current.admin? }, if: Proc.new { User.current.admin? },
caption: :'menus.admin.mail_notification', caption: :'menus.admin.mail_notification',
parent: :in_out parent: :mail_and_notifications
menu.push :incoming_mails, menu.push :incoming_mails,
{ controller: '/admin/settings/incoming_mails_settings', action: :show }, { controller: '/admin/settings/incoming_mails_settings', action: :show },
if: Proc.new { User.current.admin? }, if: Proc.new { User.current.admin? },
caption: :label_incoming_emails, caption: :label_incoming_emails,
parent: :in_out parent: :mail_and_notifications
menu.push :api_and_webhooks,
{ controller: '/admin/settings/api_settings', action: :show },
if: Proc.new { User.current.admin? },
caption: :'menus.admin.api_and_webhooks',
icon: 'icon2 icon-relations'
menu.push :api,
{ controller: '/admin/settings/api_settings', action: :show },
if: Proc.new { User.current.admin? },
caption: :label_api_access_key_type,
parent: :api_and_webhooks
menu.push :authentication, menu.push :authentication,
{ controller: '/admin/settings/authentication_settings', action: :show }, { controller: '/admin/settings/authentication_settings', action: :show },

@ -87,6 +87,10 @@ en:
contact: "Contact us for a demo" contact: "Contact us for a demo"
enterprise_info_html: "is an Enterprise <strong class='icon-medal'></strong> feature." enterprise_info_html: "is an Enterprise <strong class='icon-medal'></strong> feature."
upgrade_info: "Please upgrade to a paid plan to activate and start using it in your team." upgrade_info: "Please upgrade to a paid plan to activate and start using it in your team."
journal_aggregation:
explanation:
text: "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 and will also affect %{webhook_link} delay."
link: "webhook"
announcements: announcements:
show_until: Show until show_until: Show until
@ -1399,7 +1403,9 @@ en:
menus: menus:
admin: admin:
mail_notification: "Email notifications" mail_notification: "Email notifications"
incoming_outgoing: "Incoming & Outgoing" mails_and_notifications: "Emails and notification"
aggregation_and_retention: 'Aggregation and retention'
api_and_webhooks: "API and webhooks"
quick_add: quick_add:
label: "Open quick add menu" label: "Open quick add menu"
@ -1908,7 +1914,7 @@ en:
label_used_by_types: "Used by types" label_used_by_types: "Used by types"
label_used_in_projects: "Used in projects" label_used_in_projects: "Used in projects"
label_user: "User" label_user: "User"
label_user_and_permission: "Users & Permissions" label_user_and_permission: "Users and permissions"
label_user_named: "User %{name}" label_user_named: "User %{name}"
label_user_activity: "%{value}'s activity" label_user_activity: "%{value}'s activity"
label_user_anonymous: "Anonymous" label_user_anonymous: "Anonymous"
@ -2695,7 +2701,6 @@ en:
text_work_packages_destroy_confirmation: "Are you sure you want to delete the selected work package(s)?" text_work_packages_destroy_confirmation: "Are you sure you want to delete the selected work package(s)?"
text_work_packages_ref_in_commit_messages: "Referencing and fixing work packages in commit messages" text_work_packages_ref_in_commit_messages: "Referencing and fixing work packages in commit messages"
text_journal_added: "%{label} %{value} added" text_journal_added: "%{label} %{value} added"
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_html: "%{label} changed from %{old} %{linebreak}<strong>to</strong> %{new}" text_journal_changed_html: "%{label} changed from %{old} %{linebreak}<strong>to</strong> %{new}"
text_journal_changed_plain: "%{label} changed from %{old} %{linebreak}to %{new}" text_journal_changed_plain: "%{label} changed from %{old} %{linebreak}to %{new}"
text_journal_changed_no_detail: "%{label} updated" text_journal_changed_no_detail: "%{label} updated"

@ -400,8 +400,9 @@ OpenProject::Application.routes.draw do
resource :authentication, controller: '/admin/settings/authentication_settings', only: %i[show update] resource :authentication, controller: '/admin/settings/authentication_settings', only: %i[show update]
resource :incoming_mails, controller: '/admin/settings/incoming_mails_settings', only: %i[show update] resource :incoming_mails, controller: '/admin/settings/incoming_mails_settings', only: %i[show update]
resource :notifications, controller: '/admin/settings/notifications_settings', only: %i[show update] resource :aggregation, controller: '/admin/settings/aggregation_settings', only: %i[show update]
resource :mail_notifications, controller: '/admin/settings/mail_notifications_settings', only: %i[show update] resource :mail_notifications, controller: '/admin/settings/mail_notifications_settings', only: %i[show update]
resource :api, controller: '/admin/settings/api_settings', only: %i[show update]
resource :work_packages, controller: '/admin/settings/work_packages_settings', only: %i[show update] resource :work_packages, controller: '/admin/settings/work_packages_settings', only: %i[show update]
resource :users, controller: '/admin/settings/users_settings', only: %i[show update] resource :users, controller: '/admin/settings/users_settings', only: %i[show update]

@ -22,25 +22,25 @@ Click on one of the categories in order to proceed with the configuration.
## Overview ## Overview
| Topic | Content | | Topic | Content |
| ------------------------------------------------------ | :----------------------------------------------------------- | |-----------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------|
| [Users and permissions](./users-permissions) | How to manage users, groups and permissions in OpenProject? | | [Users and permissions](./users-permissions) | How to manage users, groups and permissions in OpenProject? |
| [Work packages](./manage-work-packages) | How to configure work packages, types, status and workflows? | | [Work packages](./manage-work-packages) | How to configure work packages, types, status and workflows? |
| [Custom fields](./custom-fields) | Set custom fields for work packages, Spent time, projects, versions, users, groups and more. | | [Custom fields](./custom-fields) | Set custom fields for work packages, Spent time, projects, versions, users, groups and more. |
| [Attribute help texts](./attribute-help-texts) | Add help texts to explain attributes (including custom fields) in projects and work packages. | | [Attribute help texts](./attribute-help-texts) | Add help texts to explain attributes (including custom fields) in projects and work packages. |
| [Enumerations](./enumerations) | Set enumerations, e.g. work package priorities, time tracking activities, document categories, and more. | | [Enumerations](./enumerations) | Set enumerations, e.g. work package priorities, time tracking activities, document categories, and more. |
| [System settings](./system-settings) | Configure your system settings, e.g. a welcome text block on the landing page, display settings, repositories, and more. | | [System settings](./system-settings) | Configure your system settings, e.g. a welcome text block on the landing page, display settings, repositories, and more. |
| [Incoming emails](./../installation-and-operations/configuration/incoming-emails) | Configure email settings in OpenProject. How to set up incoming email? | | [Incoming emails](./../installation-and-operations/configuration/incoming-emails) | Configure email settings in OpenProject. How to set up incoming email? |
| [Outbound emails](./../installation-and-operations/configuration/outbound-emails) | Configure email settings in OpenProject. How to configure email notifications and your email provider? | | [Outbound emails](./../installation-and-operations/configuration/outbound-emails) | Configure email settings in OpenProject. How to configure email notifications and your email provider? |
| [Authentication](./authentication) | Configure authentication methods in OpenProject, e.g. OAuth, OpenID, Two-factor-authentication, LDAP, and more. | | [Authentication](./authentication) | Configure authentication methods in OpenProject, e.g. OAuth, OpenID, Two-factor-authentication, LDAP, and more. |
| [Announcement](./announcement) | How to create a system announcement? | | [Announcement](./announcement) | How to create a system announcement? |
| [Design](./design) | Create your own design and make it compliant to your company's Corporate Identity, upload logo and customize colors. | | [Design](./design) | Create your own design and make it compliant to your company's Corporate Identity, upload logo and customize colors. |
| [Colors](./colors) | Configure colors used in the system, e.g. status colors, work package types, priorities and more. | | [Colors](./colors) | Configure colors used in the system, e.g. status colors, work package types, priorities and more. |
| [Time and costs](./time-and-costs) | Configure your currency and create cost types in OpenProject. | | [Time and costs](./time-and-costs) | Configure your currency and create cost types in OpenProject. |
| [Backlogs](./backlogs) | Configure your backlogs settings in OpenProject, e.g. story types to be displayed in the backlogs, task types, and more. | | [Backlogs](./backlogs) | Configure your backlogs settings in OpenProject, e.g. story types to be displayed in the backlogs, task types, and more. |
| [Plugins](./plugins) | Manage plugins in OpenProject. | | [Plugins](./plugins) | Manage plugins in OpenProject. |
| [Incoming & Outgoing](./incoming-and-outgoing/) | Manage notifications, email % webhooks | | [Emails and notification](./incoming-and-outgoing/) | Manage notifications and email |
| [Information](./information/) | View the latest system information status. | | [Information](./information/) | View the latest system information status. |
| [Integrations](./integrations/) | How to combine OpenProject and e.g. GitHub. | | [Integrations](./integrations/) | How to combine OpenProject and e.g. GitHub. |
| [Enterprise on-premises](../enterprise-guide/enterprise-on-premises-guide/) | Upgrading your Community Edition to Enterprise on-premises and other administrative topics. | | [Enterprise on-premises](../enterprise-guide/enterprise-on-premises-guide/) | Upgrading your Community Edition to Enterprise on-premises and other administrative topics. |
| [Enterprise cloud](../enterprise-guide/enterprise-cloud-guide/) | Manage your OpenProject Enterprise cloud and other administrative topics. | | [Enterprise cloud](../enterprise-guide/enterprise-cloud-guide/) | Manage your OpenProject Enterprise cloud and other administrative topics. |

@ -1,26 +1,26 @@
--- ---
sidebar_navigation: sidebar_navigation:
title: Incoming & Outgoing title: Emails and notification
priority: 760 priority: 760
description: incoming and outgoing notification settings in OpenProject. description: incoming and outgoing notification settings in OpenProject.
robots: index, follow robots: index, follow
keywords: incoming and outgoing notifications keywords: incoming and outgoing notifications
--- ---
# Incoming & outgoing # Emails and notification
Configure **incoming & outgoing settings** in OpenProject, i.e. email notifications and incoming email configuration. Configure **Emails and notification settings** in OpenProject, i.e. email notifications and incoming email configuration.
Navigate to *Administration* -> *Incoming & Outgoing*. Navigate to *Administration* -> *Emails and notification*.
| Topic | Content | | Topic | Content |
| ------------------------------------------------------------ | ---------------------------------------------------------- | |------------------------------------------------------------------|------------------------------------------------------------|
| [Incoming & outgoing settings](#incoming--outgoing-settings) | How to configure the global incoming and outgoing settings | | [Emails and notification settings](#incoming--outgoing-settings) | How to configure the global incoming and outgoing settings |
| [Email notifications](#email-notifications-settings) | How to configure outgoing email notifications? | | [Email notifications](#email-notifications-settings) | How to configure outgoing email notifications? |
| [Incoming emails](#incoming-emails-settings) | How to configure settings for inbound emails? | | [Incoming emails](#incoming-emails-settings) | How to configure settings for inbound emails? |
## Incoming & outgoing settings ## Emails and notification settings
To change the global settings for incoming and outgoing messages, navigate to *Administration* -> *Incoming & Outgoing*. To change the global settings for incoming and outgoing messages, navigate to *Administration* -> *Emails and notification*.
![image-20211129133408193](image-20211129133408193.png) ![image-20211129133408193](image-20211129133408193.png)
@ -29,7 +29,7 @@ To change the global settings for incoming and outgoing messages, navigate to *A
## Email notifications settings ## Email notifications settings
To adapt email notification settings, go to *Administration* -> *Incoming & Outgoing* -> *Email notifications*. To adapt email notification settings, go to *Administration* -> *Emails and notification* -> *Email notifications*.
1. **Emission email address**. This email address will be shown as the sender for the email notifications sent by OpenProject (for example, when a work package is changed). 1. **Emission email address**. This email address will be shown as the sender for the email notifications sent by OpenProject (for example, when a work package is changed).
2. Activate **blind carbon copy recipients** (bcc). 2. Activate **blind carbon copy recipients** (bcc).
@ -48,7 +48,7 @@ Configure your notification email header and footer which will be sent out for e
## Incoming emails settings ## Incoming emails settings
To adapt incoming email settings, go to *Administration* -> *Incoming & Outgoing* -> *Incoming emails*. Here you can configure the following options. To adapt incoming email settings, go to *Administration* -> *Emails and notification* -> *Incoming emails*. Here you can configure the following options.
1. **Define after which lines an email should be truncated**. This setting allows shortening email after the entered lines. 1. **Define after which lines an email should be truncated**. This setting allows shortening email after the entered lines.
2. Specify a **regular expression** to truncate emails. 2. Specify a **regular expression** to truncate emails.

@ -1,12 +1,12 @@
--- ---
sidebar_navigation: sidebar_navigation:
title: Users & Permissions title: Users and permissions
priority: 997 priority: 997
description: Manage users and permissions. description: Manage users and permissions.
robots: index, follow robots: index, follow
keywords: users, permissions, roles, groups, avatars keywords: users, permissions, roles, groups, avatars
--- ---
# Users & Permissions # Users and permissions
Manage users, placeholder users and permissions in OpenProject. Manage users, placeholder users and permissions in OpenProject.

@ -8,7 +8,7 @@ keywords: Avatars
--- ---
# OpenProject Avatars # OpenProject Avatars
To select which type of Avatars can be used in your OpenProject, navigate to -> *Administration* -> *Users & Permissions* -> *Avatars*. To select which type of Avatars can be used in your OpenProject, navigate to -> *Administration* -> *Users and permissions* -> *Avatars*.
You can choose whether to allow user Gravatar or enable to upload custom avatars. You can choose whether to allow user Gravatar or enable to upload custom avatars.

@ -10,7 +10,7 @@ keywords: manage groups
# Manage Groups # Manage Groups
<div class="glossary"> <div class="glossary">
A **Group** is defined as a list of users which can be assigned to a project with a selected role. New groups can be defined in *Administration -> Users & Permissions -> Groups*. A **Group** is defined as a list of users which can be assigned to a project with a selected role. New groups can be defined in *Administration -> Users and permissions -> Groups*.
</div> </div>
OpenProject allows creating tailored project member **groups**, which grant additional permissions to individual users within a project. Instead of adding individual users to a project you can add a user group, e.g. Marketing. You can edit existing groups, create new ones, add and remove users or delete groups. OpenProject allows creating tailored project member **groups**, which grant additional permissions to individual users within a project. Instead of adding individual users to a project you can add a user group, e.g. Marketing. You can edit existing groups, create new ones, add and remove users or delete groups.

@ -27,7 +27,7 @@ Placeholder users can be managed by system admins and by users with the [role](.
## Placeholder user list ## Placeholder user list
To manage placeholder users navigate to *Administration -> Users & Permissions -> Placeholder users*. The placeholder user list gives you an overview of all placeholder users with their names and creation dates. From here you can also [add](#create-placeholder-users) placeholder users, [edit](#manage-placeholder-user-settings) them and [delete](#delete-placeholder-users) them. To manage placeholder users navigate to *Administration -> Users and permissions -> Placeholder users*. The placeholder user list gives you an overview of all placeholder users with their names and creation dates. From here you can also [add](#create-placeholder-users) placeholder users, [edit](#manage-placeholder-user-settings) them and [delete](#delete-placeholder-users) them.
The column headers can be clicked to toggle sort direction. Arrows indicate sort order, up for ascending (a-z/0-9) and down for descending (z-a/9-0). The column headers can be clicked to toggle sort direction. Arrows indicate sort order, up for ascending (a-z/0-9) and down for descending (z-a/9-0).

@ -38,7 +38,7 @@ Note: If a [project module](../../../user-guide/projects/project-settings/module
## Create a new role ## Create a new role
To create a new role, navigate to the administration and select *Users & Permissions -> Roles and permissions* from the menu on the left. To create a new role, navigate to the administration and select *Users and permissions -> Roles and permissions* from the menu on the left.
You will see the list of all the roles that have been created so far. You will see the list of all the roles that have been created so far.

@ -1,6 +1,6 @@
--- ---
sidebar_navigation: sidebar_navigation:
title: Users & Permissions FAQ title: Users and permissions FAQ
priority: 001 priority: 001
description: Frequently asked questions regarding user, permissions, roles and groups description: Frequently asked questions regarding user, permissions, roles and groups
robots: index, follow robots: index, follow
@ -11,7 +11,7 @@ keywords: manage users FAQ, permissions, groups, roles, user settings
## I want to delete a user but it fails. ## I want to delete a user but it fails.
If you are using the Enterprise cloud and the user you are trying to delete is the user that initially set up OpenProject, you will need to contact us to delete this user. For other users please make sure the box "User accounts deletable by admins" in *Administration -> Users & Permissions -> Settings* is checked. If you are using the Enterprise cloud and the user you are trying to delete is the user that initially set up OpenProject, you will need to contact us to delete this user. For other users please make sure the box "User accounts deletable by admins" in *Administration -> Users and permissions -> Settings* is checked.
## We use LDAP. How do we release a license should someone leave our team and no longer need access? ## We use LDAP. How do we release a license should someone leave our team and no longer need access?

@ -14,7 +14,7 @@ The user list provides an overview of all users in OpenProject. You can create n
<div class="glossary"> <div class="glossary">
**User** is defined as a person (described by an identifier) who uses OpenProject. Users can become project members by assigning them a role and adding them via the project settings. **User** is defined as a person (described by an identifier) who uses OpenProject. Users can become project members by assigning them a role and adding them via the project settings.
</div> </div>
To manage users click on your avatar (top right corner) and select *Administration*. Select *Users & Permissions -> Users*. The list of current users is shown. To manage users click on your avatar (top right corner) and select *Administration*. Select *Users and permissions -> Users*. The list of current users is shown.
In the Community Edition there is no limit to the number of users. In Enterprise editions (cloud and on-premises) the user limit is based on your subscription. The number of users for your subscription is thus not bound to names. For example, if you block a user you can add a new one without upgrading. In the Community Edition there is no limit to the number of users. In Enterprise editions (cloud and on-premises) the user limit is based on your subscription. The number of users for your subscription is thus not bound to names. For example, if you block a user you can add a new one without upgrading.

@ -100,6 +100,6 @@ Here, you can click the **Edit button** on the top right corner of the user prof
![User-profile-edit](User-profile-edit.png) ![User-profile-edit](User-profile-edit.png)
Alternatively, you can navigate to *Administration -> Users & Permissions -> Users* and click on the respective user name. Alternatively, you can navigate to *Administration -> Users and permissions -> Users* and click on the respective user name.
Click on the **Rate history** tab. Find out [here](../../../system-admin-guide/users-permissions/users/#rate-history) how to continue. Click on the **Rate history** tab. Find out [here](../../../system-admin-guide/users-permissions/users/#rate-history) how to continue.

@ -13,5 +13,10 @@
</li> </li>
<% end %> <% end %>
<p>
<%= t('webhooks.outgoing.explanation.text',
link: link_to(t(:'webhooks.outgoing.explanation.link'), admin_settings_aggregation_path, target: '_blank')).html_safe %>
</p>
<%= rails_cell ::Webhooks::Outgoing::Webhooks::TableCell, @webhooks %> <%= rails_cell ::Webhooks::Outgoing::Webhooks::TableCell, @webhooks %>

@ -27,6 +27,11 @@ en:
events: events:
created: "Created" created: "Created"
updated: "Updated" updated: "Updated"
explanation:
text: >
Upon the occurrence of an event like the creation of a work package or an update on a project, OpenProject will send a POST request to the configured web endpoints.
Oftentimes, the event is sent after the %{link} has passed.
link: configured aggregation period
status: status:
enabled: 'Webhook is enabled' enabled: 'Webhook is enabled'
disabled: 'Webhook is disabled' disabled: 'Webhook is disabled'

@ -32,9 +32,11 @@ OpenProject::Application.routes.draw do
end end
scope 'admin' do scope 'admin' do
resources :webhooks, scope :settings do
param: :webhook_id, resources :webhooks,
controller: 'webhooks/outgoing/admin', param: :webhook_id,
as: 'admin_outgoing_webhooks' controller: 'webhooks/outgoing/admin',
as: 'admin_outgoing_webhooks'
end
end end
end end

@ -41,14 +41,8 @@ module OpenProject::Webhooks
:plugin_webhooks, :plugin_webhooks,
{ controller: 'webhooks/outgoing/admin', action: :index }, { controller: 'webhooks/outgoing/admin', action: :index },
if: Proc.new { User.current.admin? }, if: Proc.new { User.current.admin? },
parent: :in_out, parent: :api_and_webhooks,
caption: ->(*) { I18n.t('webhooks.plural') } caption: :'webhooks.plural'
end
config.before_configuration do |app|
# This is required for the routes to be loaded first as the routes should
# be prepended so they take precedence over the core.
app.config.paths['config/routes.rb'].unshift File.join(File.dirname(__FILE__), "..", "..", "..", "config", "routes.rb")
end end
initializer 'webhooks.subscribe_to_notifications' do initializer 'webhooks.subscribe_to_notifications' do

@ -30,34 +30,34 @@ require 'spec_helper'
describe 'Outgoing webhooks administration', type: :routing do describe 'Outgoing webhooks administration', type: :routing do
it 'route to index' do it 'route to index' do
expect(get('/admin/webhooks')).to route_to('webhooks/outgoing/admin#index') expect(get('/admin/settings/webhooks')).to route_to('webhooks/outgoing/admin#index')
end end
it 'route to new' do it 'route to new' do
expect(get('/admin/webhooks/new')).to route_to('webhooks/outgoing/admin#new') expect(get('/admin/settings/webhooks/new')).to route_to('webhooks/outgoing/admin#new')
end end
it 'route to show' do it 'route to show' do
expect(get('/admin/webhooks/1')).to route_to(controller: 'webhooks/outgoing/admin', expect(get('/admin/settings/webhooks/1')).to route_to(controller: 'webhooks/outgoing/admin',
action: 'show', action: 'show',
webhook_id: '1') webhook_id: '1')
end end
it 'route to edit' do it 'route to edit' do
expect(get('/admin/webhooks/1/edit')).to route_to(controller: 'webhooks/outgoing/admin', expect(get('/admin/settings/webhooks/1/edit')).to route_to(controller: 'webhooks/outgoing/admin',
action: 'edit', action: 'edit',
webhook_id: '1') webhook_id: '1')
end end
it 'route to PUT update' do it 'route to PUT update' do
expect(put('/admin/webhooks/1')).to route_to(controller: 'webhooks/outgoing/admin', expect(put('/admin/settings/webhooks/1')).to route_to(controller: 'webhooks/outgoing/admin',
action: 'update', action: 'update',
webhook_id: '1') webhook_id: '1')
end end
it 'route to DELETE destroy' do it 'route to DELETE destroy' do
expect(delete('/admin/webhooks/1')).to route_to(controller: 'webhooks/outgoing/admin', expect(delete('/admin/settings/webhooks/1')).to route_to(controller: 'webhooks/outgoing/admin',
action: 'destroy', action: 'destroy',
webhook_id: '1') webhook_id: '1')
end end
end end

@ -92,7 +92,7 @@ describe 'edit users', type: :feature, js: true do
visit edit_user_path(user) visit edit_user_path(user)
expect(page).to have_no_selector('.admin-overview-menu-item', text: 'Overview') expect(page).to have_no_selector('.admin-overview-menu-item', text: 'Overview')
expect(page).to have_no_selector('.users-and-permissions-menu-item', text: 'Users & Permissions') expect(page).to have_no_selector('.users-and-permissions-menu-item', text: 'Users and permissions')
expect(page).to have_selector('.users-menu-item.selected', text: 'Users') expect(page).to have_selector('.users-menu-item.selected', text: 'Users')
expect(page).to have_selector 'select#user_auth_source_id' expect(page).to have_selector 'select#user_auth_source_id'

Loading…
Cancel
Save