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. 4
      docs/system-admin-guide/README.md
  11. 20
      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. 2
      modules/webhooks/config/routes.rb
  23. 10
      modules/webhooks/lib/open_project/webhooks/engine.rb
  24. 12
      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
class NotificationsSettingsController < ::Admin::SettingsController
class AggregationSettingsController < ::Admin::SettingsController
current_menu_item [:show] do
:notification_settings
end
@ -37,7 +37,7 @@ module Admin::Settings
end
def default_breadcrumb
t(:'menus.admin.incoming_outgoing')
t(:'menus.admin.aggregation_and_retention')
end
def show_local_breadcrumb

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

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

@ -34,7 +34,7 @@ See COPYRIGHT and LICENSE files for more details.
<div class="menu-blocks--container">
<% @menu_nodes.each do |menu_node| -%>
<%= 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>
<% 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">
<%= setting_number_field :journal_aggregation_time_minutes,
unit: t(:label_minute_plural),
min: 0,
container_class: '-xslim' %>
<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) %>
</span>
</div>

@ -28,7 +28,7 @@ See COPYRIGHT and LICENSE files for more details.
++#%>
<%= 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">
<div class="form--field">
<%= 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
end
menu.push :in_out,
{ controller: '/admin/settings/notifications_settings', action: :show },
menu.push :mail_and_notifications,
{ controller: '/admin/settings/aggregation_settings', action: :show },
if: Proc.new { User.current.admin? },
caption: :'menus.admin.incoming_outgoing',
caption: :'menus.admin.mails_and_notifications',
icon: 'icon2 icon-mail1'
menu.push :notification_settings,
{ controller: '/admin/settings/notifications_settings', action: :show },
{ controller: '/admin/settings/aggregation_settings', action: :show },
if: Proc.new { User.current.admin? },
caption: :label_setting_plural,
parent: :in_out
caption: :'menus.admin.aggregation_and_retention',
parent: :mail_and_notifications
menu.push :mail_notifications,
{ controller: '/admin/settings/mail_notifications_settings', action: :show },
if: Proc.new { User.current.admin? },
caption: :'menus.admin.mail_notification',
parent: :in_out
parent: :mail_and_notifications
menu.push :incoming_mails,
{ controller: '/admin/settings/incoming_mails_settings', action: :show },
if: Proc.new { User.current.admin? },
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,
{ controller: '/admin/settings/authentication_settings', action: :show },

@ -87,6 +87,10 @@ en:
contact: "Contact us for a demo"
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."
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:
show_until: Show until
@ -1399,7 +1403,9 @@ en:
menus:
admin:
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:
label: "Open quick add menu"
@ -1908,7 +1914,7 @@ en:
label_used_by_types: "Used by types"
label_used_in_projects: "Used in projects"
label_user: "User"
label_user_and_permission: "Users & Permissions"
label_user_and_permission: "Users and permissions"
label_user_named: "User %{name}"
label_user_activity: "%{value}'s activity"
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_ref_in_commit_messages: "Referencing and fixing work packages in commit messages"
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_plain: "%{label} changed from %{old} %{linebreak}to %{new}"
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 :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 :api, controller: '/admin/settings/api_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]

@ -23,7 +23,7 @@ Click on one of the categories in order to proceed with the configuration.
## Overview
| Topic | Content |
| ------------------------------------------------------ | :----------------------------------------------------------- |
|-----------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------|
| [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? |
| [Custom fields](./custom-fields) | Set custom fields for work packages, Spent time, projects, versions, users, groups and more. |
@ -39,7 +39,7 @@ Click on one of the categories in order to proceed with the configuration.
| [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. |
| [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. |
| [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. |

@ -1,26 +1,26 @@
---
sidebar_navigation:
title: Incoming & Outgoing
title: Emails and notification
priority: 760
description: incoming and outgoing notification settings in OpenProject.
robots: index, follow
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 |
| ------------------------------------------------------------ | ---------------------------------------------------------- |
| [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? |
| [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)
@ -29,7 +29,7 @@ To change the global settings for incoming and outgoing messages, navigate to *A
## 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).
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
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.
2. Specify a **regular expression** to truncate emails.

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

@ -8,7 +8,7 @@ keywords: 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.

@ -10,7 +10,7 @@ keywords: manage groups
# Manage Groups
<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>
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
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).

@ -38,7 +38,7 @@ Note: If a [project module](../../../user-guide/projects/project-settings/module
## 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.

@ -1,6 +1,6 @@
---
sidebar_navigation:
title: Users & Permissions FAQ
title: Users and permissions FAQ
priority: 001
description: Frequently asked questions regarding user, permissions, roles and groups
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.
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?

@ -14,7 +14,7 @@ The user list provides an overview of all users in OpenProject. You can create n
<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.
</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.

@ -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)
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.

@ -13,5 +13,10 @@
</li>
<% 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 %>

@ -27,6 +27,11 @@ en:
events:
created: "Created"
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:
enabled: 'Webhook is enabled'
disabled: 'Webhook is disabled'

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

@ -41,14 +41,8 @@ module OpenProject::Webhooks
:plugin_webhooks,
{ controller: 'webhooks/outgoing/admin', action: :index },
if: Proc.new { User.current.admin? },
parent: :in_out,
caption: ->(*) { I18n.t('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")
parent: :api_and_webhooks,
caption: :'webhooks.plural'
end
initializer 'webhooks.subscribe_to_notifications' do

@ -30,33 +30,33 @@ require 'spec_helper'
describe 'Outgoing webhooks administration', type: :routing 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
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
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',
webhook_id: '1')
end
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',
webhook_id: '1')
end
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',
webhook_id: '1')
end
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',
webhook_id: '1')
end

@ -92,7 +92,7 @@ describe 'edit users', type: :feature, js: true do
visit edit_user_path(user)
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 'select#user_auth_source_id'

Loading…
Cancel
Save