diff --git a/app/assets/javascripts/submission_statistics.js b/app/assets/javascripts/submission_statistics.js index 75fe42cd..9cb820a0 100644 --- a/app/assets/javascripts/submission_statistics.js +++ b/app/assets/javascripts/submission_statistics.js @@ -55,6 +55,8 @@ $(function() { var submissions = $('#data').data('submissions'); var files = $('#data').data('files'); var filetypes = $('#data').data('file-types'); + var playButton = $('#play-button'); + var playInterval = undefined; editor = ace.edit('current-file'); editor.setShowPrintMargin(false); @@ -88,6 +90,23 @@ $(function() { showActiveFile(); }); + playButton.on('click', function(event) { + if (playInterval == undefined) { + playInterval = setInterval(function() { + if ($.isController('exercises') && $('#timeline').isPresent() && slider.val() < submissions.length - 1) { + slider.val(parseInt(slider.val()) + 1); + slider.change() + } else { + clearInterval(playInterval); + } + }, 5000); + playButton.find('span.fa').removeClass('fa-play').addClass('fa-pause') + } else { + clearInterval(playInterval); + playButton.find('span.fa').removeClass('fa-pause').addClass('fa-play') + } + }); + active_file = files[0][0] initializeFileTree(); showActiveFile(); diff --git a/app/assets/stylesheets/statistics.css.scss b/app/assets/stylesheets/statistics.css.scss index d148f782..631de920 100644 --- a/app/assets/stylesheets/statistics.css.scss +++ b/app/assets/stylesheets/statistics.css.scss @@ -10,3 +10,19 @@ .clickable { cursor: pointer; } + +.flex-container { + display: flex; +} + +.flex-item { + flex-grow: 1; +} + +#play-button { + height: 40px; + width: 40px; + margin-right: 15px; + margin-top: auto; + margin-bottom: auto; +} diff --git a/app/models/exercise.rb b/app/models/exercise.rb index 192c4513..a6b5b8a8 100644 --- a/app/models/exercise.rb +++ b/app/models/exercise.rb @@ -53,7 +53,7 @@ class Exercise < ActiveRecord::Base (SELECT user_id, id, (created_at - lag(created_at) over (PARTITION BY user_id - ORDER BY id)) AS working_time + ORDER BY created_at)) AS working_time FROM submissions WHERE exercise_id=#{id}) AS foo) AS bar GROUP BY user_id diff --git a/app/views/exercises/external_users/statistics.html.slim b/app/views/exercises/external_users/statistics.html.slim index ca5142cc..fd66ca26 100644 --- a/app/views/exercises/external_users/statistics.html.slim +++ b/app/views/exercises/external_users/statistics.html.slim @@ -21,14 +21,17 @@ h1 = "#{@exercise} (external user #{@external_user})" div class=(@exercise.hide_file_tree ? 'col-sm-12' : 'col-sm-9') #current-file.editor - #submissions-slider - input type='range' orient='horizontal' list='datapoints' min=0 max=submissions.length-1 value=0 - datalist#datapoints - - index=0 - - submissions.each do |submission| - option data-submission=submission - =index - - index += 1 + .flex-container + button.btn.btn-default id='play-button' + span.fa.fa-play + #submissions-slider.flex-item + input type='range' orient='horizontal' list='datapoints' min=0 max=submissions.length-1 value=0 + datalist#datapoints + - index=0 + - submissions.each do |submission| + option data-submission=submission + =index + - index += 1 #timeline .table-responsive diff --git a/app/views/external_users/statistics.html.slim b/app/views/external_users/statistics.html.slim index 6c49b967..4a4c1e70 100644 --- a/app/views/external_users/statistics.html.slim +++ b/app/views/external_users/statistics.html.slim @@ -1,2 +1,18 @@ -h1 = @user -H2 = 'Hallo' \ No newline at end of file +h1 = t('.title') + +- exercises = Exercise.where(:id => @user.submissions.group(:exercise_id).select(:exercise_id).distinct()) + +.table-responsive + table.table + thead + tr + - ['.exercise', '.score', '.runs', '.worktime'].each do |title| + th.header = t(title) + tbody + - exercises.each do |exercise| + - submissions = @user.submissions.where(:exercise_id => exercise.id, :cause => ['submit', 'run']) + tr + td = link_to exercise, controller: "exercises", action: "statistics", external_user_id: @user.id, id: exercise.id + td = submissions.maximum(:score) or 0 + td = submissions.count + td = exercise.average_working_time_for(@user.id) or 0 diff --git a/config/locales/de.yml b/config/locales/de.yml index d96e6927..40b745ad 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -259,6 +259,13 @@ de: time: Zeit cause: Grund score: Punktzahl + external_users: + statistics: + title: Statistiken für Externe Benutzer + exercise: Übung + score: Bewertung + runs: Versuche + worktime: Arbeitszeit files: roles: main_file: Hauptdatei diff --git a/config/locales/en.yml b/config/locales/en.yml index dc63e3dd..501fe745 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -259,6 +259,13 @@ en: time: Time cause: Cause score: Score + external_users: + statistics: + title: External User Statistics + exercise: Exercise + score: Score + runs: Runs + worktime: Working Time files: roles: main_file: Main File