Add CRUD operations for Programming Groups
* Correct sorting in table * Modify page when nested in exercises * Fix links between pages * Link from statistics page to programming_groups/index * Link from submission page to programming_groups/<id> * Allow filtering for exercise ID on ProgrammingGroup#index * Add search fields for internal and external user id on pg/index
This commit is contained in:

committed by
Sebastian Serth

parent
f1ca5da44d
commit
79ce069f68
16
app/views/programming_groups/_form_edit.html.slim
Normal file
16
app/views/programming_groups/_form_edit.html.slim
Normal file
@ -0,0 +1,16 @@
|
||||
= form_for(@programming_group) do |f|
|
||||
= render('shared/form_errors', object: @programming_group)
|
||||
|
||||
h3 = t('activerecord.attributes.programming_group.member')
|
||||
.table-responsive
|
||||
table.table class="#{@members.present? ? 'sortable' : ''}"
|
||||
thead
|
||||
tr
|
||||
th = t('activerecord.attributes.exercise.selection')
|
||||
th = t('navigation.sections.contributors')
|
||||
= collection_check_boxes :programming_group, :programming_group_membership_ids, @members, :id, :id do |b|
|
||||
tr
|
||||
td = b.check_box class: 'form-check-input'
|
||||
td = link_to_if(policy(b.object.user).show?, b.object.user.displayname, b.object.user)
|
||||
|
||||
.actions = render('shared/submit_button', f: f, object: @programming_group)
|
3
app/views/programming_groups/edit.html.slim
Normal file
3
app/views/programming_groups/edit.html.slim
Normal file
@ -0,0 +1,3 @@
|
||||
h1 = @programming_group
|
||||
|
||||
= render('form_edit')
|
43
app/views/programming_groups/index.html.slim
Normal file
43
app/views/programming_groups/index.html.slim
Normal file
@ -0,0 +1,43 @@
|
||||
- if params[:exercise_id].nil?
|
||||
h1 = ProgrammingGroup.model_name.human(count: 2)
|
||||
= render(layout: 'shared/form_filters') do |f|
|
||||
.col-auto
|
||||
= f.label(:exercise_id_eq, t('activerecord.attributes.programming_group.exercise'), class: 'visually-hidden form-label')
|
||||
= f.collection_select(:exercise_id_eq, Exercise.with_programming_groups, :id, :title, class: 'form-control', prompt: t('activerecord.attributes.programming_group.exercise'))
|
||||
.col-auto
|
||||
= f.label(:programming_group_memberships_user_of_ExternalUser_type_id_eq, t('activerecord.attributes.programming_group.external_user_id'), class: 'visually-hidden form-label')
|
||||
= f.search_field(:programming_group_memberships_user_of_ExternalUser_type_id_eq, class: 'form-control', placeholder: t('activerecord.attributes.programming_group.external_user_id'))
|
||||
.col-auto
|
||||
= f.label(:programming_group_memberships_user_of_InternalUser_type_id_eq, t('activerecord.attributes.programming_group.internal_user_id'), class: 'visually-hidden form-label')
|
||||
= f.search_field(:programming_group_memberships_user_of_InternalUser_type_id_eq, class: 'form-control', placeholder: t('activerecord.attributes.programming_group.internal_user_id'))
|
||||
- else
|
||||
h1 = "#{ProgrammingGroup.model_name.human(count: 2)} for Exercise '#{@exercise.title}'"
|
||||
|
||||
.table-responsive
|
||||
table.table.mt-4 class="#{@programming_groups.present? ? 'sortable' : ''}"
|
||||
thead
|
||||
tr
|
||||
th.sortable_nosort = sort_link(@search, :id, t('activerecord.attributes.programming_group.name'))
|
||||
- if params[:exercise_id].blank?
|
||||
th.sorttable_nosort = sort_link(@search, :exercise_id, t('activerecord.attributes.programming_group.exercise'))
|
||||
th = t('activerecord.attributes.programming_group.member')
|
||||
th = t('activerecord.attributes.programming_group.member_count')
|
||||
th.sorttable_nosort = sort_link(@search, :created_at, t('shared.created_at'))
|
||||
th colspan=3 = t('shared.actions')
|
||||
tbody
|
||||
- if params[:exercise_id].nil?
|
||||
- filtered_programming_groups = @programming_groups
|
||||
- else
|
||||
- filtered_programming_groups = @programming_groups.where(exercise_id: params[:exercise_id])
|
||||
- filtered_programming_groups.each do |programming_group|
|
||||
tr
|
||||
td = link_to_if(policy(programming_group).show?, programming_group.displayname, programming_group)
|
||||
- if params[:exercise_id].blank?
|
||||
td = link_to_if(policy(programming_group.exercise).show?, programming_group.exercise.title, programming_group.exercise, 'data-turbolinks' => "false")
|
||||
td == programming_group.users.map { |user| link_to_if(policy(user).show?, user.name, user) }.join(', ')
|
||||
td = programming_group.users.size
|
||||
td = l(programming_group.created_at, format: :short)
|
||||
td = link_to(t('shared.show'), programming_group) if policy(programming_group).show?
|
||||
td = link_to(t('shared.edit'), edit_programming_group_path(programming_group)) if policy(programming_group).edit?
|
||||
td = link_to(t('shared.destroy'), programming_group, data: { confirm: t('shared.confirm_destroy') }, method: :delete) if policy(programming_group).destroy?
|
||||
= render('shared/pagination', collection: @programming_groups)
|
19
app/views/programming_groups/show.html.slim
Normal file
19
app/views/programming_groups/show.html.slim
Normal file
@ -0,0 +1,19 @@
|
||||
h1
|
||||
= @programming_group
|
||||
- if policy(@programming_group).edit?
|
||||
= render('shared/edit_button', object: @programming_group)
|
||||
|
||||
= row(label: 'activerecord.attributes.programming_group.name', value: @programming_group.displayname)
|
||||
= row(label: 'activerecord.attributes.programming_group.exercise', value: link_to_if(policy(@programming_group.exercise).show?, @programming_group.exercise.title, @programming_group.exercise))
|
||||
= row(label: 'activerecord.attributes.programming_group.member_count', value: @programming_group.users.size)
|
||||
= row(label: 'shared.created_at', value: l(@programming_group.created_at, format: :short))
|
||||
|
||||
h2.mt-4 = t('activerecord.attributes.study_group.members')
|
||||
.table-responsive
|
||||
table.table class="#{@programming_group.users.present? ? 'sortable' : ''}"
|
||||
thead
|
||||
tr
|
||||
th = t('navigation.sections.contributors')
|
||||
- @programming_group.users.each do |user|
|
||||
tr
|
||||
td = link_to_if(policy(user).show?, user.displayname, user)
|
Reference in New Issue
Block a user