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 { .filter-form {
.form-group:not(:last-child) { .form-group {
margin-right: 1em; margin-bottom: 1em;
&:not(:last-child) {
margin-right: 1em;
}
} }
input, select { input, select {

View File

@ -5,7 +5,8 @@ class ExternalUsersController < ApplicationController
private :authorize! private :authorize!
def index 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! authorize!
end end

View File

@ -2,6 +2,7 @@ class Consumer < ApplicationRecord
has_many :users has_many :users
scope :with_internal_users, -> { where('id IN (SELECT DISTINCT consumer_id FROM internal_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)') } scope :with_study_groups, -> { where('id IN (SELECT DISTINCT consumer_id FROM study_groups)') }
validates :name, presence: true validates :name, presence: true

View File

@ -1,7 +1,7 @@
class User < ApplicationRecord class User < ApplicationRecord
self.abstract_class = true self.abstract_class = true
ROLES = %w(admin teacher) ROLES = %w(admin teacher learner)
belongs_to :consumer belongs_to :consumer
has_many :study_group_memberships, as: :user has_many :study_group_memberships, as: :user

View File

@ -1,5 +1,23 @@
h1 = ExternalUser.model_name.human(count: 2) 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-responsive
table.table table.table
thead thead

View File

@ -2,6 +2,9 @@ h1 = @user.displayname
= row(label: 'external_user.name', value: @user.name) = row(label: 'external_user.name', value: @user.name)
= row(label: 'external_user.email', value: @user.email) = 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.consumer', value: link_to(@user.consumer, @user.consumer))
= row(label: 'external_user.role', value: t("users.roles.#{@user.role}")) = row(label: 'external_user.role', value: t("users.roles.#{@user.role}"))

View File

@ -1,9 +1,11 @@
.card.card-body.bg-light .card.card-body.bg-light.flex-row.container.row.mx-0
= search_form_for(@search, class: 'clearfix filter-form form-inline') do |f| = search_form_for(@search, class: 'clearfix filter-form form-inline w-100') do |f|
= yield(f) .col-sm.p-0
.btn-group.ml-auto = yield(f)
button.btn.btn-primary type='submit' = t('shared.apply_filters') .col-sm-auto.p-0
button.btn.btn-primary.dropdown-toggle data-toggle='dropdown' type='button' .btn-group.ml-auto
ul.dropdown-menu role='menu' button.btn.btn-primary type='submit' = t('shared.apply_filters')
li button.btn.btn-primary.dropdown-toggle data-toggle='dropdown' type='button'
a.dropdown-item href=request.path = t('shared.reset_filters') 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: external_user:
consumer: Konsument consumer: Konsument
email: E-Mail email: E-Mail
external_id: Externe ID
name: Name name: Name
role: Rolle role: Rolle
file: file:

View File

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