Add search for external users

This commit is contained in:
Sebastian Serth
2020-05-05 12:34:28 +02:00
parent 72498e21b1
commit 8e8404dffa
9 changed files with 44 additions and 13 deletions

View File

@ -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 {

View File

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

View File

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

View File

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

View File

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

View File

@ -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}"))

View File

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

View File

@ -52,6 +52,7 @@ de:
external_user:
consumer: Konsument
email: E-Mail
external_id: Externe ID
name: Name
role: Rolle
file:

View File

@ -52,6 +52,7 @@ en:
external_user:
consumer: Consumer
email: Email
external_id: External ID
name: Name
role: Role
file: