diff --git a/app/components/ldap_auth_sources/row_component.rb b/app/components/ldap_auth_sources/row_component.rb new file mode 100644 index 000000000000..b7432042a7c1 --- /dev/null +++ b/app/components/ldap_auth_sources/row_component.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 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 LdapAuthSources + class RowComponent < ::RowComponent + def name + link_to model.name, edit_ldap_auth_source_path(model) + end + + delegate :host, to: :model + + def users + model.users.size + end + + def button_links + [test_link, delete_link] + end + + def test_link + link_to t(:button_test), { controller: 'ldap_auth_sources', action: 'test_connection', id: model } + end + + def delete_link + link_to I18n.t(:button_delete), + { controller: 'ldap_auth_sources', id: model.id, action: :destroy }, + method: :delete, + data: { confirm: I18n.t(:text_are_you_sure) }, + class: 'icon icon-delete', + disabled: users.zero?, + title: I18n.t(:button_delete) + end + end +end diff --git a/app/components/ldap_auth_sources/table_component.rb b/app/components/ldap_auth_sources/table_component.rb new file mode 100644 index 000000000000..7e534ab8c168 --- /dev/null +++ b/app/components/ldap_auth_sources/table_component.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 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 LdapAuthSources + class TableComponent < ::TableComponent + columns :name, :host, :users + + def initial_sort + %i[id asc] + end + + def sortable? + true + end + + def sortable_column?(_column) + false + end + + def inline_create_link + link_to(new_ldap_auth_source_path, + class: 'budget-add-row wp-inline-create--add-link', + title: I18n.t(:label_ldap_auth_source_new)) do + helpers.op_icon('icon icon-add') + end + end + + def headers + [ + ['name', { caption: LdapAuthSource.human_attribute_name('name') }], + ['host', { caption: LdapAuthSource.human_attribute_name('host') }], + ['users', { caption: I18n.t(:label_user_plural) }] + ] + end + end +end diff --git a/app/controllers/ldap_auth_sources_controller.rb b/app/controllers/ldap_auth_sources_controller.rb index ccc52f08a1ce..c270e689b0bc 100644 --- a/app/controllers/ldap_auth_sources_controller.rb +++ b/app/controllers/ldap_auth_sources_controller.rb @@ -99,9 +99,9 @@ def destroy def default_breadcrumb if action_name == 'index' - t(:label_auth_source_plural) + t(:label_ldap_auth_source_plural) else - ActionController::Base.helpers.link_to(t(:label_auth_source_plural), ldap_auth_sources_path) + ActionController::Base.helpers.link_to(t(:label_ldap_auth_source_plural), ldap_auth_sources_path) end end diff --git a/app/views/ldap_auth_sources/index.html.erb b/app/views/ldap_auth_sources/index.html.erb index ce229a568f20..403f9a37628e 100644 --- a/app/views/ldap_auth_sources/index.html.erb +++ b/app/views/ldap_auth_sources/index.html.erb @@ -27,85 +27,17 @@ See COPYRIGHT and LICENSE files for more details. ++#%> -<% html_title t(:label_administration), t(:label_auth_source_plural) %> -<%= toolbar title: t(:label_auth_source_plural) do %> +<% html_title t(:label_administration), t(:label_ldap_auth_source_plural) %> +<%= toolbar title: t(:label_ldap_auth_source_plural) do %>
  • <%= link_to({ action: 'new' }, { class: 'button -alt-highlight', - aria: {label: t(:label_auth_source_new)}, - title: t(:label_auth_source_new)}) do %> + aria: {label: t(:label_ldap_auth_source_new)}, + title: t(:label_ldap_auth_source_new)}) do %> <%= op_icon('button--icon icon-add') %> - <%= t(:label_auth_source) %> + <%= t(:label_ldap_auth_source) %> <% end %>
  • <% end %> -<% if @auth_sources.any? %> -
    -
    - - - - - - - - - - - - - - - - - - <% for source in @auth_sources %> - - - - - - - <% end %> - -
    -
    -
    - - <%= LdapAuthSource.human_attribute_name(:name) %> - -
    -
    -
    -
    -
    - - <%= LdapAuthSource.human_attribute_name(:host) %> - -
    -
    -
    -
    -
    - - <%= t(:label_user_plural)%> - -
    -
    -
    <%= link_to source.name, action: 'edit', id: source %><%= source.host %><%= source.users.count %> - <%= link_to t(:button_test), { action: 'test_connection', id: source } %> - <%= link_to '', { action: 'destroy', id: source }, - method: :delete, - data: { confirm: t(:text_are_you_sure) }, - class: 'icon icon-delete', - disabled: source.users.any?, - title: t(:button_delete) %> -
    - -
    -
    - <%= pagination_links_full @auth_sources %> -<% else %> - <%= no_results_box(action_url: { action: 'new' }, display_action: true) %> -<% end %> +<%= render ::LdapAuthSources::TableComponent.new(rows: @auth_sources) %> diff --git a/app/views/ldap_auth_sources/new.html.erb b/app/views/ldap_auth_sources/new.html.erb index 507c29b00551..741e16bf1673 100644 --- a/app/views/ldap_auth_sources/new.html.erb +++ b/app/views/ldap_auth_sources/new.html.erb @@ -27,11 +27,11 @@ See COPYRIGHT and LICENSE files for more details. ++#%> -<% html_title t(:label_administration), t(:label_auth_source_new) %> -<% local_assigns[:additional_breadcrumb] = t(:label_auth_source_new) %> -<%= toolbar title: "#{t(:label_auth_source_new)}" %> +<% html_title t(:label_administration), t(:label_ldap_auth_source_new) %> +<% local_assigns[:additional_breadcrumb] = t(:label_ldap_auth_source_new) %> +<%= toolbar title: "#{t(:label_ldap_auth_source_new)}" %> -<%= labelled_tabular_form_for @auth_source, as: :auth_source do |f| %> +<%= labelled_tabular_form_for @auth_source, as: :ldap_auth_source do |f| %> <%= render partial: 'form', locals: { f: f } %> <%= styled_button_tag t(:button_create), class: '-highlight -with-icon icon-checkmark' %> <% end %> diff --git a/config/initializers/menus.rb b/config/initializers/menus.rb index aedde3a36ff3..c96eb482bed9 100644 --- a/config/initializers/menus.rb +++ b/config/initializers/menus.rb @@ -442,6 +442,7 @@ { controller: '/ldap_auth_sources', action: 'index' }, if: Proc.new { User.current.admin? && !OpenProject::Configuration.disable_password_login? }, parent: :authentication, + caption: :label_ldap_auth_source_plural, html: { class: 'server_authentication' }, last: true diff --git a/config/locales/en.yml b/config/locales/en.yml index 090f00d73a4e..1505e4f1e14a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -111,10 +111,10 @@ en: enterprise: description: 'Provide additional information for attributes (incl. custom fields) of work packages and projects. Help texts are displayed when users click on the question mark symbol next to input fields in projects and work packages.' - auth_sources: + ldap_auth_sources: index: - no_results_content_title: There are currently no authentication modes. - no_results_content_text: Create a new authentication mode + no_results_content_title: There are currently no LDAP connections. + no_results_content_text: Create a new LDAP connection background_jobs: status: @@ -624,7 +624,7 @@ en: color: "Color" user: admin: "Administrator" - ldap_auth_source: "Authentication mode" + ldap_auth_source: "LDAP connection" current_password: "Current password" force_password_change: "Enforce password change on next login" language: "Language" @@ -1646,9 +1646,9 @@ en: label_attachment_plural: "Files" label_attribute: "Attribute" label_attribute_plural: "Attributes" - label_auth_source: "Authentication mode" - label_auth_source_new: "New authentication mode" - label_auth_source_plural: "Authentication modes" + label_ldap_auth_source_new: "New LDAP connection" + label_ldap_auth_source: "LDAP connection" + label_ldap_auth_source_plural: "LDAP connections" label_authentication: "Authentication" label_available_project_work_package_categories: 'Available work package categories' label_available_project_work_package_types: 'Available work package types' @@ -2377,7 +2377,7 @@ en: present_access_key_value: "Your %{key_name} is: %{value}" notice_automatic_set_of_standard_type: "Set standard type automatically." notice_logged_out: "You have been logged out." - notice_wont_delete_auth_source: The authentication mode cannot be deleted as long as there are still users using it. + notice_wont_delete_auth_source: The LDAP connection cannot be deleted as long as there are still users using it. notice_project_cannot_update_custom_fields: "You cannot update the project's available custom fields. The project is invalid: %{errors}" notice_attachment_migration_wiki_page: > This page was generated automatically during the update of OpenProject. diff --git a/spec/support/pages/new_user.rb b/spec/support/pages/new_user.rb index 283db3b68322..cf5aad90efd2 100644 --- a/spec/support/pages/new_user.rb +++ b/spec/support/pages/new_user.rb @@ -43,7 +43,7 @@ def fill_in!(fields = {}) form.fill! 'Last name', :last_name form.fill! 'Email', :email - form.select! 'Authentication mode', :ldap_auth_source + form.select! 'LDAP connection', :ldap_auth_source form.fill! 'Username', :login form.set_checked! 'Administrator', :admin