From a18954b2c9c8a1b3f2891cff9910b2b96306b7c0 Mon Sep 17 00:00:00 2001 From: Wieland Lindenthal Date: Fri, 12 Feb 2021 17:18:55 +0100 Subject: [PATCH] Placeholder user services and administration (#8944) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Adding placeholder user contracts * Adding create, update, and delete services for placeholder users * WIP: Adding Placeholder User contract specs [ci skip] * Extract contract validation into common helper * Add common validation in BaseContract + common example for admin checks * Introduce common ModelContract shared context for validations * WIP: PlaceholderUser controller, i18n, and routes [ci skip] * Placeholder users index page and query - moved all group related scopes from User to Principal to make them also available in PlaceholderUser. * end * Create PlaceholderUser * Feature spec for editing a placeholder user * Manage PlaceholderUser memberships The managment of memberships is pretty similar for User and PlaceholderUser. This commit extacts the similarities and uses them for both. * General partial and show view for PlaceholderUser * Delete obosolete partial * Allow RequireAdminGuard to be used as a module function * Fix I18n for confirmation text * Smaller code improvements * Fix: Syntax for accessing status enums was wrong. * Use UpdateService for updating a placeholder user * Add spec for PlaceholderUsersController * First code improvements after code review. - more improvements to come. * Further code improvements after review ... still more to come * Correct namespace of delete service * Fix: Make placeholder user contract validate * Remove :type attribute from base contract of User and PlaceholerUser ...and add it to the CreateContracts. Also add type validations. Further extract shared examples for placeholder user attribute validation * Refactor: Extract membership hook calls to helper * Fix redirect paths for membership controllers * Specs already present in shared exampels. * Fix duplicates routes for users and placeholder users * Fix user path * Add attribute name and lastname We don't need a writeable check as both are equally writable * Replace more references to tab_edit_user_path * Skip specs for PlaceholderUsers::DeletionService We will tackle that service in a separate PR. * Fix module usage of RequireAdminGuard * Fix group filter for placeholder users * Fix invalid reference to expect_valid * Fix: Fix tabbed edit path for placeholder users * Fix status filtering on users * Linting * Improve generalisation of individual principal filter cell - Check for presence of groups and statuses in order to toggle visibility of their UI element. - Remove groups from placeholder user controller and cell initialization and options * Fix selector on groups assign * Remove using_shared_fixtures Co-authored-by: Oliver Günther --- .../individual_principal_base_filter_cell.rb | 117 ++++++++ .../placeholder_user_filter_cell.rb | 47 +++ app/cells/placeholder_users/row_cell.rb | 58 ++++ app/cells/placeholder_users/table_cell.rb | 58 ++++ app/cells/user_filter_cell.rb | 99 +++--- app/cells/users/user_filter_cell.rb | 30 ++ .../show.erb | 8 +- .../attribute_help_texts/base_contract.rb | 7 +- .../concerns/requires_admin_guard.rb | 12 +- app/contracts/delete_contract.rb | 2 +- .../placeholder_users/base_contract.rb | 55 ++++ .../placeholder_users/create_contract.rb | 45 +++ .../placeholder_users/delete_contract.rb | 59 ++++ .../placeholder_users/update_contract.rb | 34 +++ app/contracts/projects/archive_contract.rb | 2 +- app/contracts/projects/archiver.rb | 6 - app/contracts/projects/base_contract.rb | 2 +- app/contracts/projects/unarchive_contract.rb | 2 +- app/contracts/users/base_contract.rb | 3 - app/contracts/users/create_contract.rb | 11 +- app/contracts/users/delete_contract.rb | 2 - app/contracts/users/update_contract.rb | 2 - app/controllers/messages_controller.rb | 2 +- .../memberships_controller.rb | 47 +++ .../placeholder_users_controller.rb | 162 ++++++++++ .../users/memberships_controller.rb | 50 +--- app/controllers/users_controller.rb | 1 + .../individual_principal_hooks_helper.rb | 40 +++ app/models/permitted_params.rb | 7 + app/models/placeholder_user.rb | 1 + app/models/principal.rb | 25 ++ .../orders/group_order.rb | 50 ++++ .../orders/name_order.rb | 49 +++ app/models/queries/placeholder_users.rb | 49 +++ .../filters/any_name_attribute_filter.rb | 33 ++ .../placeholder_users/filters/group_filter.rb | 49 +++ .../placeholder_users/filters/name_filter.rb | 33 ++ .../filters/placeholder_user_filter.rb | 37 +++ .../placeholder_users/orders/default_order.rb | 37 +++ .../placeholder_users/orders/group_order.rb | 33 ++ .../placeholder_users/orders/name_order.rb | 33 ++ .../placeholder_user_query.rb | 35 +++ .../queries/users/orders/group_order.rb | 20 +- app/models/user.rb | 20 -- .../placeholder_users/create_service.rb | 32 ++ .../placeholder_users/delete_service.rb | 32 ++ .../set_attributes_service.rb | 34 +++ .../placeholder_users/update_service.rb | 32 ++ .../_memberships.html.erb | 28 +- app/views/placeholder_users/_form.html.erb | 38 +++ app/views/placeholder_users/_general.html.erb | 40 +++ app/views/placeholder_users/_toolbar.html.erb | 38 +++ app/views/placeholder_users/edit.html.erb | 36 +++ app/views/placeholder_users/index.html.erb | 46 +++ app/views/placeholder_users/new.html.erb | 44 +++ app/views/placeholder_users/show.html.erb | 66 ++++ app/views/users/index.html.erb | 4 +- config/initializers/menus.rb | 5 + config/locales/en.yml | 5 + config/routes.rb | 12 +- .../membership_controller_methods.rb | 43 +++ lib/open_project/ui/extensible_tabs.rb | 30 +- .../lib/open_project/avatars/engine.rb | 2 +- modules/costs/lib/costs/engine.rb | 2 +- .../config/routes.rb | 2 +- .../two_factor_authentication/engine.rb | 2 +- .../base_contract_spec.rb | 22 +- .../custom_actions/cu_contract_spec.rb | 49 +-- .../custom_fields/create_contract_spec.rb | 21 +- .../custom_fields/update_contract_spec.rb | 21 +- .../contracts/members/create_contract_spec.rb | 17 +- .../contracts/members/update_contract_spec.rb | 18 +- .../placeholder_users/create_contract_spec.rb | 42 +++ .../placeholder_users/delete_contract_spec.rb | 41 +++ .../shared_contract_examples.rb | 73 +++++ .../placeholder_users/update_contract_spec.rb | 42 +++ .../projects/archive_contract_spec.rb | 31 +- .../projects/delete_contract_spec.rb | 34 +-- .../instantiate_template_contract_spec.rb | 20 +- .../projects/unarchive_contract_spec.rb | 31 +- .../contracts/queries/update_contract_spec.rb | 37 +-- .../shared/model_contract_shared_context.rb | 53 ++++ spec/contracts/users/create_contract_spec.rb | 47 +-- .../memberships_controller_spec.rb | 66 ++++ .../placeholder_users_controller_spec.rb | 283 ++++++++++++++++++ .../features/placeholder_users/create_spec.rb | 62 ++++ .../edit_placeholder_users_spec.rb | 58 ++++ spec/features/placeholder_users/index_spec.rb | 74 +++++ .../placeholder_user_memberships_spec.rb | 77 +++++ spec/features/users/index_spec.rb | 6 +- spec/features/users/user_memberships_spec.rb | 2 +- .../individual_principal_hooks_helper_spec.rb | 79 +++++ spec/helpers/tabs_helper_spec.rb | 2 +- .../placeholder_user_query_spec.rb | 196 ++++++++++++ .../placeholder_users/delete_service_spec.rb | 100 +++++++ .../pages/admin/individual_principals/edit.rb | 119 ++++++++ .../pages/admin/placeholder_users/index.rb | 89 ++++++ spec/support/pages/new_placeholder_user.rb | 49 +++ 98 files changed, 3438 insertions(+), 470 deletions(-) create mode 100644 app/cells/individual_principal_base_filter_cell.rb create mode 100644 app/cells/placeholder_users/placeholder_user_filter_cell.rb create mode 100644 app/cells/placeholder_users/row_cell.rb create mode 100644 app/cells/placeholder_users/table_cell.rb rename app/cells/views/{user_filter => individual_principal_base_filter}/show.erb (96%) create mode 100644 app/contracts/placeholder_users/base_contract.rb create mode 100644 app/contracts/placeholder_users/create_contract.rb create mode 100644 app/contracts/placeholder_users/delete_contract.rb create mode 100644 app/contracts/placeholder_users/update_contract.rb create mode 100644 app/controllers/placeholder_users/memberships_controller.rb create mode 100644 app/controllers/placeholder_users_controller.rb create mode 100644 app/helpers/individual_principal_hooks_helper.rb create mode 100644 app/models/queries/individual_principals/orders/group_order.rb create mode 100644 app/models/queries/individual_principals/orders/name_order.rb create mode 100644 app/models/queries/placeholder_users.rb create mode 100644 app/models/queries/placeholder_users/filters/any_name_attribute_filter.rb create mode 100644 app/models/queries/placeholder_users/filters/group_filter.rb create mode 100644 app/models/queries/placeholder_users/filters/name_filter.rb create mode 100644 app/models/queries/placeholder_users/filters/placeholder_user_filter.rb create mode 100644 app/models/queries/placeholder_users/orders/default_order.rb create mode 100644 app/models/queries/placeholder_users/orders/group_order.rb create mode 100644 app/models/queries/placeholder_users/orders/name_order.rb create mode 100644 app/models/queries/placeholder_users/placeholder_user_query.rb create mode 100644 app/services/placeholder_users/create_service.rb create mode 100644 app/services/placeholder_users/delete_service.rb create mode 100644 app/services/placeholder_users/set_attributes_service.rb create mode 100644 app/services/placeholder_users/update_service.rb rename app/views/{users => individual_principals}/_memberships.html.erb (82%) create mode 100644 app/views/placeholder_users/_form.html.erb create mode 100644 app/views/placeholder_users/_general.html.erb create mode 100644 app/views/placeholder_users/_toolbar.html.erb create mode 100644 app/views/placeholder_users/edit.html.erb create mode 100644 app/views/placeholder_users/index.html.erb create mode 100644 app/views/placeholder_users/new.html.erb create mode 100644 app/views/placeholder_users/show.html.erb create mode 100644 lib/individual_principals/membership_controller_methods.rb create mode 100644 spec/contracts/placeholder_users/create_contract_spec.rb create mode 100644 spec/contracts/placeholder_users/delete_contract_spec.rb create mode 100644 spec/contracts/placeholder_users/shared_contract_examples.rb create mode 100644 spec/contracts/placeholder_users/update_contract_spec.rb create mode 100644 spec/contracts/shared/model_contract_shared_context.rb create mode 100644 spec/controllers/placeholder_users/memberships_controller_spec.rb create mode 100644 spec/controllers/placeholder_users_controller_spec.rb create mode 100644 spec/features/placeholder_users/create_spec.rb create mode 100644 spec/features/placeholder_users/edit_placeholder_users_spec.rb create mode 100644 spec/features/placeholder_users/index_spec.rb create mode 100644 spec/features/placeholder_users/placeholder_user_memberships_spec.rb create mode 100644 spec/helpers/individual_principal_hooks_helper_spec.rb create mode 100644 spec/models/queries/placeholder_users/placeholder_user_query_spec.rb create mode 100644 spec/services/placeholder_users/delete_service_spec.rb create mode 100644 spec/support/pages/admin/individual_principals/edit.rb create mode 100644 spec/support/pages/admin/placeholder_users/index.rb create mode 100644 spec/support/pages/new_placeholder_user.rb diff --git a/app/cells/individual_principal_base_filter_cell.rb b/app/cells/individual_principal_base_filter_cell.rb new file mode 100644 index 00000000000..ee57756ed16 --- /dev/null +++ b/app/cells/individual_principal_base_filter_cell.rb @@ -0,0 +1,117 @@ +#-- encoding: UTF-8 + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 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-2017 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 docs/COPYRIGHT.rdoc for more details. +#++ + +class IndividualPrincipalBaseFilterCell < RailsCell + include UsersHelper + include ActionView::Helpers::FormOptionsHelper + + class << self + def query(params) + q = base_query.new + + apply_filters(params, q) + + q + end + + def filter(params) + query(params).results + end + + def filtered?(params) + %i(name status group_id role_id).any? { |name| params[name].present? } + end + + def filter_name(query, name) + if name.present? + query.where(:any_name_attribute, '~', name) + end + end + + def filter_group(query, group_id) + if group_id.present? + query.where(:group, '=', group_id) + end + end + + def filter_role(query, role_id) + if role_id.present? + query.where(:role_id, '=', role_id) + end + end + + def filter_project(query, project_id) + if project_id.present? + query.where(:project_id, '=', project_id) + end + end + + def base_query + raise NotImplementedError + end + + protected + + def apply_filters(params, query) + filter_project query, params[:project_id] + filter_name query, params[:name] + filter_group query, params[:group_id] + filter_role query, params[:role_id] + + query + end + end + + # INSTANCE METHODS: + + def filter_path + raise NotImplementedError + end + + def initially_visible? + true + end + + def has_close_icon? + false + end + + def has_statuses? + defined?(status) + end + + def has_groups? + defined?(groups) && groups.present? + end + + def params + model + end +end diff --git a/app/cells/placeholder_users/placeholder_user_filter_cell.rb b/app/cells/placeholder_users/placeholder_user_filter_cell.rb new file mode 100644 index 00000000000..c1b5514f157 --- /dev/null +++ b/app/cells/placeholder_users/placeholder_user_filter_cell.rb @@ -0,0 +1,47 @@ +#-- encoding: UTF-8 + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 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-2017 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 docs/COPYRIGHT.rdoc for more details. +#++ + +module PlaceholderUsers + class PlaceholderUserFilterCell < IndividualPrincipalBaseFilterCell + options :roles, :clear_url, :project + + class << self + def base_query + Queries::PlaceholderUsers::PlaceholderUserQuery + end + end + + # INSTANCE METHODS: + + def filter_path + placeholder_users_path + end + end +end diff --git a/app/cells/placeholder_users/row_cell.rb b/app/cells/placeholder_users/row_cell.rb new file mode 100644 index 00000000000..aec8386bd76 --- /dev/null +++ b/app/cells/placeholder_users/row_cell.rb @@ -0,0 +1,58 @@ +#-- encoding: UTF-8 + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 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-2017 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 docs/COPYRIGHT.rdoc for more details. +#++ + +module PlaceholderUsers + class RowCell < ::RowCell + include AvatarHelper + include UsersHelper + + def placeholder_user + model + end + + def name + link_to h(placeholder_user.name), edit_placeholder_user_path(placeholder_user) + end + + def button_links + [delete_link].compact + end + + def delete_link + return nil unless User.current.admin? + + link_to '', + placeholder_user_path(placeholder_user), + data: { confirm: I18n.t(:text_are_you_sure) }, + class: 'icon icon-delete', + method: :delete + end + end +end diff --git a/app/cells/placeholder_users/table_cell.rb b/app/cells/placeholder_users/table_cell.rb new file mode 100644 index 00000000000..1fb0f261e0a --- /dev/null +++ b/app/cells/placeholder_users/table_cell.rb @@ -0,0 +1,58 @@ +#-- encoding: UTF-8 + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 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-2017 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 docs/COPYRIGHT.rdoc for more details. +#++ + +module PlaceholderUsers + class TableCell < ::TableCell + options :current_user # adds this option to those of the base class + columns :name, :created_at + + def initial_sort + %i[id asc] + end + + def headers + columns.map do |name| + [name.to_s, header_options(name)] + end + end + + def header_options(name) + options = { caption: PlaceholderUser.human_attribute_name(name) } + + options[:default_order] = 'desc' if desc_by_default.include? name + + options + end + + def desc_by_default + [:created_at] + end + end +end diff --git a/app/cells/user_filter_cell.rb b/app/cells/user_filter_cell.rb index eecdeba3018..0a95a292e80 100644 --- a/app/cells/user_filter_cell.rb +++ b/app/cells/user_filter_cell.rb @@ -1,30 +1,37 @@ -class UserFilterCell < RailsCell - include UsersHelper - include ActionView::Helpers::FormOptionsHelper +#-- encoding: UTF-8 +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 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-2017 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 docs/COPYRIGHT.rdoc for more details. +#++ + +class UserFilterCell < IndividualPrincipalBaseFilterCell options :groups, :status, :roles, :clear_url, :project class << self - def query(params) - q = base_query.new - - filter_project q, params[:project_id] - filter_name q, params[:name] - filter_status q, status_param(params) - filter_group q, params[:group_id] - filter_role q, params[:role_id] - - q - end - - def filter(params) - query(params).results - end - - def filtered?(params) - %i(name status group_id role_id).any? { |name| params[name].present? } - end - ## # Returns the selected status from the parameters # or the default status to be filtered by (all) @@ -33,12 +40,6 @@ class UserFilterCell < RailsCell params[:status].presence || 'all' end - def filter_name(query, name) - if name.present? - query.where(:any_name_attribute, '~', name) - end - end - def filter_status(query, status) return unless status && status != 'all' @@ -53,27 +54,19 @@ class UserFilterCell < RailsCell end end - def filter_group(query, group_id) - if group_id.present? - query.where(:group, '=', group_id) - end - end - - def filter_role(query, role_id) - if role_id.present? - query.where(:role_id, '=', role_id) - end - end - - def filter_project(query, project_id) - if project_id.present? - query.where(:project_id, '=', project_id) - end - end - def base_query Queries::Users::UserQuery end + + + protected + + def apply_filters(params, query) + super(params, query) + filter_status query, status_param(params) + + query + end end # INSTANCE METHODS: @@ -82,18 +75,6 @@ class UserFilterCell < RailsCell users_path end - def initially_visible? - true - end - - def has_close_icon? - false - end - - def params - model - end - def user_status_options users_status_options_for_select status, extra: extra_user_status_options end diff --git a/app/cells/users/user_filter_cell.rb b/app/cells/users/user_filter_cell.rb index aaa4967c369..b9e3168b745 100644 --- a/app/cells/users/user_filter_cell.rb +++ b/app/cells/users/user_filter_cell.rb @@ -1,3 +1,33 @@ +#-- encoding: UTF-8 + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 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-2017 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 docs/COPYRIGHT.rdoc for more details. +#++ + module Users class UserFilterCell < ::UserFilterCell def filter_role(query, role_id) diff --git a/app/cells/views/user_filter/show.erb b/app/cells/views/individual_principal_base_filter/show.erb similarity index 96% rename from app/cells/views/user_filter/show.erb rename to app/cells/views/individual_principal_base_filter/show.erb index 16fd55321ac..cc8ce3432d1 100644 --- a/app/cells/views/user_filter/show.erb +++ b/app/cells/views/individual_principal_base_filter/show.erb @@ -37,11 +37,13 @@ See docs/COPYRIGHT.rdoc for more details. <% end %>