diff --git a/app/assets/stylesheets/forms.css.scss b/app/assets/stylesheets/forms.css.scss index 69c1722c..c94a27e1 100644 --- a/app/assets/stylesheets/forms.css.scss +++ b/app/assets/stylesheets/forms.css.scss @@ -12,8 +12,12 @@ } .filter-form { - .form-group:not(:last-child) { - margin-right: 1em; + .form-group { + margin-bottom: 1em; + + &:not(:last-child) { + margin-right: 1em; + } } input, select { diff --git a/app/controllers/external_users_controller.rb b/app/controllers/external_users_controller.rb index 091c6716..537631f6 100644 --- a/app/controllers/external_users_controller.rb +++ b/app/controllers/external_users_controller.rb @@ -5,7 +5,8 @@ class ExternalUsersController < ApplicationController private :authorize! def index - @users = ExternalUser.all.includes(:consumer).paginate(page: params[:page]) + @search = ExternalUser.ransack(params[:q]) + @users = @search.result.includes(:consumer).paginate(page: params[:page]) authorize! end diff --git a/app/models/consumer.rb b/app/models/consumer.rb index 0cefe9ec..dcb06c0c 100644 --- a/app/models/consumer.rb +++ b/app/models/consumer.rb @@ -2,6 +2,7 @@ class Consumer < ApplicationRecord has_many :users scope :with_internal_users, -> { where('id IN (SELECT DISTINCT consumer_id FROM internal_users)') } + scope :with_external_users, -> { where('id IN (SELECT DISTINCT consumer_id FROM external_users)') } scope :with_study_groups, -> { where('id IN (SELECT DISTINCT consumer_id FROM study_groups)') } validates :name, presence: true diff --git a/app/models/user.rb b/app/models/user.rb index 686456f4..73b21fe0 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,7 +1,7 @@ class User < ApplicationRecord self.abstract_class = true - ROLES = %w(admin teacher) + ROLES = %w(admin teacher learner) belongs_to :consumer has_many :study_group_memberships, as: :user diff --git a/app/views/external_users/index.html.slim b/app/views/external_users/index.html.slim index b9450323..93a3e234 100644 --- a/app/views/external_users/index.html.slim +++ b/app/views/external_users/index.html.slim @@ -1,5 +1,23 @@ h1 = ExternalUser.model_name.human(count: 2) += render(layout: 'shared/form_filters') do |f| + .row.px-3 + .form-group + = f.label(:name_cont, t('activerecord.attributes.external_user.name'), class: 'sr-only') + = f.search_field(:name_cont, class: 'form-control', placeholder: t('activerecord.attributes.external_user.name')) + .form-group + = f.label(:email_cont, t('activerecord.attributes.external_user.email'), class: 'sr-only') + = f.search_field(:email_cont, class: 'form-control', placeholder: t('activerecord.attributes.external_user.email')) + .form-group + = f.label(:external_id_cont, t('activerecord.attributes.external_user.external_id'), class: 'sr-only') + = f.search_field(:external_id_cont, class: 'form-control', placeholder: t('activerecord.attributes.external_user.external_id')) + .row.px-3 + .form-group + = f.label(:role_eq, t('activerecord.attributes.external_user.role'), class: 'sr-only') + = f.select(:role_eq, User::ROLES.map { |role| [t("users.roles.#{role}"), role] }, { include_blank: true }, class: 'form-control', prompt: t('activerecord.attributes.external_user.role')) + .form-group + = f.label(:consumer_id_eq, t('activerecord.attributes.external_user.consumer'), class: 'sr-only') + = f.collection_select(:consumer_id_eq, Consumer.with_external_users, :id, :name, class: 'form-control', prompt: t('activerecord.attributes.external_user.consumer')) .table-responsive table.table thead diff --git a/app/views/external_users/show.html.slim b/app/views/external_users/show.html.slim index de7f12fa..b3f72d6c 100644 --- a/app/views/external_users/show.html.slim +++ b/app/views/external_users/show.html.slim @@ -2,6 +2,9 @@ h1 = @user.displayname = row(label: 'external_user.name', value: @user.name) = row(label: 'external_user.email', value: @user.email) += row(label: 'external_user.external_id') do + code + = @user.external_id = row(label: 'external_user.consumer', value: link_to(@user.consumer, @user.consumer)) = row(label: 'external_user.role', value: t("users.roles.#{@user.role}")) diff --git a/app/views/shared/_form_filters.html.slim b/app/views/shared/_form_filters.html.slim index 2026ae21..3a3afb90 100644 --- a/app/views/shared/_form_filters.html.slim +++ b/app/views/shared/_form_filters.html.slim @@ -1,9 +1,11 @@ -.card.card-body.bg-light - = search_form_for(@search, class: 'clearfix filter-form form-inline') do |f| - = yield(f) - .btn-group.ml-auto - button.btn.btn-primary type='submit' = t('shared.apply_filters') - button.btn.btn-primary.dropdown-toggle data-toggle='dropdown' type='button' - ul.dropdown-menu role='menu' - li - a.dropdown-item href=request.path = t('shared.reset_filters') +.card.card-body.bg-light.flex-row.container.row.mx-0 + = search_form_for(@search, class: 'clearfix filter-form form-inline w-100') do |f| + .col-sm.p-0 + = yield(f) + .col-sm-auto.p-0 + .btn-group.ml-auto + button.btn.btn-primary type='submit' = t('shared.apply_filters') + button.btn.btn-primary.dropdown-toggle data-toggle='dropdown' type='button' + ul.dropdown-menu role='menu' + li + a.dropdown-item href=request.path = t('shared.reset_filters') diff --git a/config/locales/de.yml b/config/locales/de.yml index 6b344365..fe46d474 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -52,6 +52,7 @@ de: external_user: consumer: Konsument email: E-Mail + external_id: Externe ID name: Name role: Rolle file: diff --git a/config/locales/en.yml b/config/locales/en.yml index 5547386d..a1e88e77 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -52,6 +52,7 @@ en: external_user: consumer: Consumer email: Email + external_id: External ID name: Name role: Role file: