Add ProgrammingGroup & ProgrammingGroupMembership
* User can create programming group with other users for exercise * Submission is shared in a group * Also adjust specs
This commit is contained in:

committed by
Sebastian Serth

parent
0234414bae
commit
319c3ab3b4
@@ -4,7 +4,7 @@ h1 = @execution_environment
|
||||
table.table.table-striped class="#{@execution_environment.present? ? 'sortable' : ''}"
|
||||
thead
|
||||
tr
|
||||
- ['.exercise', '.users', '.score', '.maximum_score', '.stddev_score', '.percentage_correct', '.runs', '.worktime', '.stddev_worktime'].each do |title|
|
||||
- ['.exercise', '.users_and_programming_groups', '.score', '.maximum_score', '.stddev_score', '.percentage_correct', '.runs', '.worktime', '.stddev_worktime'].each do |title|
|
||||
th.header = t(title)
|
||||
tbody
|
||||
- @execution_environment.exercises.each do |exercise|
|
||||
|
@@ -33,7 +33,7 @@ h4.mt-4 = t('activerecord.attributes.exercise_collections.exercises')
|
||||
tr
|
||||
th = '#'
|
||||
th = t('activerecord.attributes.exercise.title')
|
||||
th = t('activerecord.attributes.exercise.number_of_users')
|
||||
th = t('activerecord.attributes.exercise.number_of_users_and_programming_groups')
|
||||
th = t('activerecord.attributes.exercise.distinct_final_submissions')
|
||||
th = t('activerecord.attributes.exercise.finishing_rate')
|
||||
th = t('activerecord.attributes.exercise.average_score_percentage')
|
||||
@@ -44,8 +44,8 @@ h4.mt-4 = t('activerecord.attributes.exercise_collections.exercises')
|
||||
tr
|
||||
td = exercise_collection_item.position
|
||||
td = link_to_if(policy(exercise).show?, exercise.title, exercise)
|
||||
td = exercise.users.distinct.count
|
||||
td = exercise.submissions.send(:final).distinct.count(:user_id)
|
||||
td = exercise.contributors.size
|
||||
td = exercise.submissions.send(:final).distinct.count(:contributor_id)
|
||||
td = exercise.finishers_percentage
|
||||
td = exercise.average_percentage
|
||||
td = link_to(t('shared.statistics'), statistics_exercise_path(exercise), 'data-turbolinks' => "false") if policy(exercise).statistics?
|
||||
|
@@ -52,7 +52,7 @@ div.d-grid id='output_sidebar_uncollapsed' class='d-none col-sm-12 enforce-botto
|
||||
| 0
|
||||
= row(label: 'exercises.implement.feedback')
|
||||
= row(label: 'exercises.implement.messages')
|
||||
#score data-maximum-score=@exercise.maximum_score data-score=@exercise.final_submission(current_user).try(:score)
|
||||
#score data-maximum-score=@exercise.maximum_score data-score=@exercise.final_submission(current_contributor).try(:score)
|
||||
h4
|
||||
span == "#{t('activerecord.attributes.submission.score')}: "
|
||||
span.score
|
||||
|
@@ -5,25 +5,26 @@
|
||||
- append_javascript_pack_tag('d3-tip')
|
||||
h1 = @exercise
|
||||
|
||||
= row(label: '.participants', value: @exercise.users.distinct.count)
|
||||
= row(label: '.participants', value: @exercise.contributors.size)
|
||||
|
||||
- [:intermediate, :final].each do |scope|
|
||||
= row(label: ".#{scope}_submissions") do
|
||||
= "#{@exercise.submissions.send(scope).count} (#{t('.users', count: @exercise.submissions.send(scope).distinct.count(:contributor_id))})"
|
||||
/TODO: Refactor next line
|
||||
= "#{@exercise.submissions.send(scope).count} (#{t('.users_and_programming_groups', count: Submission.from(@exercise.submissions.send(scope).group(:contributor_id, :contributor_type).select(:contributor_id, :contributor_type)).count)})"
|
||||
|
||||
= row(label: '.finishing_rate') do
|
||||
p
|
||||
- if @exercise.finishers.count
|
||||
- if @exercise.finishers_count
|
||||
span.number
|
||||
= @exercise.finishers.count
|
||||
= @exercise.finishers_count
|
||||
=<> t('shared.out_of')
|
||||
span.number
|
||||
= @exercise.users.distinct.count
|
||||
= @exercise.contributors.size
|
||||
=< t('exercises.statistics.external_users')
|
||||
- else
|
||||
= empty
|
||||
- finishers_count = @exercise.users.distinct.count
|
||||
- finishers_percentage = finishers_count == 0 ? 0 : (100.0 / finishers_count * @exercise.finishers.count).round(2)
|
||||
- finishers_count = @exercise.contributors.size
|
||||
- finishers_percentage = finishers_count == 0 ? 0 : (100.0 / finishers_count * @exercise.finishers_count).round(2)
|
||||
p = progress_bar(finishers_percentage)
|
||||
|
||||
= row(label: '.average_score') do
|
||||
@@ -42,7 +43,7 @@ h1 = @exercise
|
||||
= row(label: '.average_worktime') do
|
||||
p = @exercise.average_working_time
|
||||
|
||||
- Hash[:internal_users => t('.internal_users'), :external_users => t('.external_users')].each_pair do |symbol, label|
|
||||
- Hash[:internal_users => t('.internal_users'), :external_users => t('.external_users'), :programming_groups => t('.programming_groups')].each_pair do |symbol, label|
|
||||
- submissions = Submission.where(contributor: @exercise.send(symbol), exercise: @exercise).in_study_group_of(current_user)
|
||||
- if !policy(@exercise).detailed_statistics?
|
||||
- submissions = submissions.final
|
||||
|
7
app/views/programming_groups/_form.html.slim
Normal file
7
app/views/programming_groups/_form.html.slim
Normal file
@@ -0,0 +1,7 @@
|
||||
= form_for(@programming_group, url: exercise_programming_groups_path) do |f|
|
||||
= render('shared/form_errors', object: @programming_group)
|
||||
.mb-3
|
||||
= f.label(:programming_partner_ids, class: 'form-label')
|
||||
= f.text_field(:programming_partner_ids, class: 'form-control', required: true, value: (@programming_group.programming_partner_ids - [current_user.id_with_type]).join(', '))
|
||||
.help-block.form-text = t('.hints.programming_partner_ids')
|
||||
.actions.mb-0 = render('shared/submit_button', f: f, object: @programming_group)
|
14
app/views/programming_groups/new.html.slim
Normal file
14
app/views/programming_groups/new.html.slim
Normal file
@@ -0,0 +1,14 @@
|
||||
h1 = t('shared.new_model', model: ProgrammingGroup.model_name.human)
|
||||
p
|
||||
=> t('programming_groups.new.own_user_id')
|
||||
b
|
||||
= current_user.id_with_type
|
||||
p
|
||||
= t('programming_groups.new.enter_partner_id', exercise_title: @exercise.title)
|
||||
= render('form')
|
||||
|
||||
div.mt-4
|
||||
a.btn.btn-success href=new_exercise_programming_group_path(@exercise) == t('programming_groups.new.check_invitation')
|
||||
|
||||
p.mt-4
|
||||
== t('programming_groups.new.work_alone', path: implement_exercise_path(@exercise))
|
@@ -22,7 +22,7 @@ h1 = Submission.model_name.human(count: 2)
|
||||
- @submissions.each do |submission|
|
||||
tr
|
||||
td = link_to_if(submission.exercise && policy(submission.exercise).show?, submission.exercise, submission.exercise)
|
||||
td = link_to_if(policy(submission.contributor).show?, submission.contributor, submission.contributor)
|
||||
td = link_to_if(submission.contributor.is_a?(User) && policy(submission.contributor).show?, submission.contributor, submission.contributor)
|
||||
td = t("submissions.causes.#{submission.cause}")
|
||||
td = submission.score
|
||||
td = l(submission.created_at, format: :short)
|
||||
|
@@ -8,7 +8,7 @@
|
||||
h1 = @submission
|
||||
|
||||
= row(label: 'submission.exercise', value: link_to_if(policy(@submission.exercise).show?, @submission.exercise, @submission.exercise))
|
||||
= row(label: 'submission.contributor', value: link_to_if(policy(@submission.contributor).show?, @submission.contributor, @submission.contributor))
|
||||
= row(label: 'submission.contributor', value: link_to_if(@submission.contributor.is_a?(User) && policy(@submission.contributor).show?, @submission.contributor, @submission.contributor))
|
||||
= row(label: 'submission.study_group', value: link_to_if(@submission.study_group.present? && policy(@submission.study_group).show?, @submission.study_group, @submission.study_group))
|
||||
= row(label: 'submission.cause', value: t("submissions.causes.#{@submission.cause}"))
|
||||
= row(label: 'submission.score', value: @submission.score)
|
||||
|
Reference in New Issue
Block a user