Add search for external users
This commit is contained in:
@ -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 {
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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}"))
|
||||||
|
|
||||||
|
@ -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')
|
||||||
|
@ -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:
|
||||||
|
@ -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:
|
||||||
|
Reference in New Issue
Block a user