Skip to content

Commit

Permalink
Migrate auth source table to view component, change labels
Browse files Browse the repository at this point in the history
  • Loading branch information
oliverguenther committed Jul 26, 2023
1 parent bba262d commit 166eda6
Show file tree
Hide file tree
Showing 6 changed files with 141 additions and 86 deletions.
59 changes: 59 additions & 0 deletions app/components/ldap_auth_sources/row_component.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# 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, ldap_auth_source_path(model)
end

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
63 changes: 63 additions & 0 deletions app/components/ldap_auth_sources/table_component.rb
Original file line number Diff line number Diff line change
@@ -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
80 changes: 6 additions & 74 deletions app/views/ldap_auth_sources/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -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 %>
<li class="toolbar-item">
<%= 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') %>
<span class="button--text"><%= t(:label_auth_source) %></span>
<span class="button--text"><%= t(:label_ldap_auth_source) %></span>
<% end %>
</li>
<% end %>
<% if @auth_sources.any? %>
<div class="generic-table--container">
<div class="generic-table--results-container">
<table class="generic-table">
<colgroup>
<col opHighlightCol>
<col opHighlightCol>
<col opHighlightCol>
<col opHighlightCol>
<col>
</colgroup>
<thead>
<tr>
<th>
<div class="generic-table--sort-header-outer">
<div class="generic-table--sort-header">
<span>
<%= LdapAuthSource.human_attribute_name(:name) %>
</span>
</div>
</div>
</th>
<th>
<div class="generic-table--sort-header-outer">
<div class="generic-table--sort-header">
<span>
<%= LdapAuthSource.human_attribute_name(:host) %>
</span>
</div>
</div>
</th>
<th>
<div class="generic-table--sort-header-outer">
<div class="generic-table--sort-header">
<span>
<%= t(:label_user_plural)%>
</span>
</div>
</div>
</th>
<th><div class="generic-table--empty-header"></div></th>
</tr>
</thead>
<tbody>
<% for source in @auth_sources %>
<tr>
<td><%= link_to source.name, action: 'edit', id: source %></td>
<td><%= source.host %></td>
<td><%= source.users.count %></td>
<td class="buttons">
<%= 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) %>
</td>
</tr>
<% end %>
</tbody>
</table>

</div>
</div>
<%= pagination_links_full @auth_sources %>
<% else %>
<%= no_results_box(action_url: { action: 'new' }, display_action: true) %>
<% end %>
<%= render ::LdapAuthSources::TableComponent.new(rows: @auth_sources) %>
8 changes: 4 additions & 4 deletions app/views/ldap_auth_sources/new.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -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 %>
1 change: 1 addition & 0 deletions config/initializers/menus.rb
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,7 @@
{ controller: '/ldap_auth_sources', action: 'index' },
if: Proc.new { User.current.admin? && !OpenProject::Configuration.disable_password_login? },
parent: :authentication,
cpation: :label_ldap_auth_source_plural,
html: { class: 'server_authentication' },
last: true

Expand Down
16 changes: 8 additions & 8 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -617,7 +617,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"
Expand Down Expand Up @@ -1639,9 +1639,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'
Expand Down Expand Up @@ -2370,7 +2370,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.
Expand Down

0 comments on commit 166eda6

Please sign in to comment.