diff --git a/app/assets/javascripts/editor/editor.js.erb b/app/assets/javascripts/editor/editor.js.erb index e4318dc2..6a9bc960 100644 --- a/app/assets/javascripts/editor/editor.js.erb +++ b/app/assets/javascripts/editor/editor.js.erb @@ -601,11 +601,11 @@ configureEditors: function () { } else { // working time is less than 75 percentile // ensure we give user at least 10 minutes before we bother the user - var timeUntilAskQuestion = (percentile75 - accumulatedWorkTimeUser) > minTimeUntilAskQuestion ? (percentile75 - accumulatedWorkTimeUser) : minTimeUntilAskQuestion; + var timeUntilAskForRFC = (percentile75 - accumulatedWorkTimeUser) > minTimeUntilAskQuestion ? (percentile75 - accumulatedWorkTimeUser) : minTimeUntilAskQuestion; } // if notifications are too close to each other, ensure some time differences between them - if (Math.abs(timeUntilAskQuestion - timeUntilBreak) < 5 * 1000 * 60){ + if (Math.abs(timeUntilAskForRFC - timeUntilBreak) < 5 * 1000 * 60){ timeUntilBreak = timeUntilBreak * 2; } @@ -634,7 +634,7 @@ configureEditors: function () { type: 'POST', url: $('#editor').data('intervention-save-url')}); }; - }, timeUntilAskQuestion); + }, timeUntilAskForRFC); } }); }, @@ -642,7 +642,8 @@ configureEditors: function () { initializeSearchButton: function(){ $('#btn-search-col').button().click(function(){ var search = $('#search-col').val(); - window.open(`https://open.hpi.de/courses/javaeinstieg2017/pinboard?query=${search}`, '_blank'); + var course_token = $('#sidebar-collapsed').data('course_token') + window.open(`https://open.hpi.de/courses/${course_token}/pinboard?query=${search}`, '_blank'); }) $('#sidebar-search-collapsed').on('click',this.handleSideBarToggle.bind(this)); diff --git a/app/controllers/concerns/lti.rb b/app/controllers/concerns/lti.rb index ce2105bd..7483327d 100644 --- a/app/controllers/concerns/lti.rb +++ b/app/controllers/concerns/lti.rb @@ -140,6 +140,7 @@ module Lti lti_parameters.lti_parameters = options[:parameters].slice(*SESSION_PARAMETERS).to_json lti_parameters.save! + @lti_parameters = lti_parameters session[:consumer_id] = options[:consumer].id session[:external_user_id] = @current_user.id diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 3742de4d..87059bf8 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -9,6 +9,7 @@ class ExercisesController < ApplicationController before_action :set_exercise, only: MEMBER_ACTIONS + [:clone, :implement, :working_times, :intervention, :run, :statistics, :submit, :reload] before_action :set_external_user, only: [:statistics] before_action :set_file_types, only: [:create, :edit, :new, :update] + before_action :set_course_token, only: [:implement] skip_before_filter :verify_authenticity_token, only: [:import_proforma_xml] skip_after_action :verify_authorized, only: [:import_proforma_xml] @@ -155,12 +156,16 @@ class ExercisesController < ApplicationController def implement redirect_to(@exercise, alert: t('exercises.implement.no_files')) unless @exercise.files.visible.exists? + user_got_enough_interventions = UserExerciseIntervention.where(exercise: @exercise, user: current_user).count >= 3 + is_java_course = @course_token && @course_token.eql?(java_course_token) + @show_interventions = - if UserExerciseIntervention.where(exercise: @exercise, user: current_user).count >= 3 + if !is_java_course || user_got_enough_interventions "false" else "true" end + @search = Search.new @search.exercise = @exercise @submission = current_user.submissions.where(exercise_id: @exercise.id).order('created_at DESC').first @@ -174,6 +179,22 @@ class ExercisesController < ApplicationController end end + def set_course_token + if @lti_parameters + lti_json = @lti_parameters.lti_parameters + @course_token = + if match = lti_json.match(/^.*courses\/([a-z0-9\-]+)\/sections/) + match.captures.first + else + java_course_token + end + else + # no consumer, therefore implementation with internal user + @course_token = java_course_token + end + end + private :set_course_token + def working_times working_time_accumulated = @exercise.accumulated_working_time_for_only(current_user) working_time_75_percentile = @exercise.get_quantiles([0.75]).first @@ -358,4 +379,8 @@ class ExercisesController < ApplicationController redirect_to_lti_return_path end + def java_course_token + "702cbd2a-c84c-4b37-923a-692d7d1532d0" + end + end diff --git a/app/views/exercises/_editor_file_tree.html.slim b/app/views/exercises/_editor_file_tree.html.slim index 9021e54a..6a90b60d 100644 --- a/app/views/exercises/_editor_file_tree.html.slim +++ b/app/views/exercises/_editor_file_tree.html.slim @@ -1,4 +1,4 @@ -div id='sidebar-collapsed' class=(@exercise.hide_file_tree ? '' : 'hidden') +div id='sidebar-collapsed' class=(@exercise.hide_file_tree ? '' : 'hidden') data-course_token=@course_token = render('editor_button', classes: 'btn-block btn-primary btn-sm', data: {:'data-toggle' => 'tooltip', :'data-placement' => 'right'}, icon: 'fa fa-plus-square', id: 'sidebar-collapse-collapsed', label:'', title:t('exercises.editor.expand_action_sidebar')) - if @exercise.allow_file_creation and not @exercise.hide_file_tree? @@ -6,7 +6,8 @@ div id='sidebar-collapsed' class=(@exercise.hide_file_tree ? '' : 'hidden') = render('editor_button', classes: 'btn-block btn-primary btn-sm enforce-top-margin', data: {:'data-toggle' => 'tooltip', :'data-placement' => 'right'}, icon: 'fa fa-download', id: 'download-collapsed', label:'', title: t('exercises.editor.download')) = render('editor_button', classes: 'btn-block btn-primary btn-sm enforce-top-margin', data: {:'data-message-confirm' => t('exercises.editor.confirm_start_over'), :'data-url' => reload_exercise_path(@exercise), :'data-toggle' => 'tooltip', :'data-placement' => 'right'}, icon: 'fa fa-history', id: 'start-over-collapsed', label:'', title: t('exercises.editor.start_over')) - = render('editor_button', classes: 'btn-block btn-primary btn-sm enforce-top-margin', data: {:'data-toggle' => 'tooltip', :'data-placement' => 'right'}, icon: 'fa fa-search', id: 'sidebar-search-collapsed', label: '', title: t('search.search_in_forum')) + - if @course_token + = render('editor_button', classes: 'btn-block btn-primary btn-sm enforce-top-margin', data: {:'data-toggle' => 'tooltip', :'data-placement' => 'right'}, icon: 'fa fa-search', id: 'sidebar-search-collapsed', label: '', title: t('search.search_in_forum')) div id='sidebar-uncollapsed' class=(@exercise.hide_file_tree ? 'hidden' : '') = render('editor_button', classes: 'btn-block btn-primary btn-sm', icon: 'fa fa-minus-square', id: 'sidebar-collapse', label: t('exercises.editor.collapse_action_sidebar')) @@ -25,14 +26,15 @@ div id='sidebar-uncollapsed' class=(@exercise.hide_file_tree ? 'hidden' : '') = render('editor_button', classes: 'btn-block btn-primary btn-sm enforce-top-margin', icon: 'fa fa-download', id: 'download', label: t('exercises.editor.download')) = render('editor_button', classes: 'btn-block btn-primary btn-sm', data: {:'data-message-confirm' => t('exercises.editor.confirm_start_over'), :'data-url' => reload_exercise_path(@exercise)}, icon: 'fa fa-history', id: 'start-over', label: t('exercises.editor.start_over')) - = form_for(@search, multipart: true, target: "_blank") do |f| - .input-group.enforce-top-margin - = f.hidden_field :exercise_id - .enforce-right-margin - = f.text_field(:search, class: 'form-control', id: "search-col", required: true, placeholder: t('search.search_in_forum')) - .input-group-btn - = button_tag(class: 'btn btn-primary', id: 'btn-search-col', model: @search.class.model_name.human) do - i.fa.fa-search + - if @course_token + = form_for(@search, multipart: true, target: "_blank") do |f| + .input-group.enforce-top-margin + = f.hidden_field :exercise_id + .enforce-right-margin + = f.text_field(:search, class: 'form-control', id: "search-col", required: true, placeholder: t('search.search_in_forum')) + .input-group-btn + = button_tag(class: 'btn btn-primary', id: 'btn-search-col', model: @search.class.model_name.human) do + i.fa.fa-search - if @exercise.allow_file_creation?