save progress

This commit is contained in:
Thomas Hille
2017-04-11 16:29:29 +02:00
parent 73c3b902a3
commit e4d28452bf
6 changed files with 69 additions and 14 deletions

View File

@ -164,6 +164,7 @@ class ExercisesController < ApplicationController
private :handle_file_uploads
def implement
redirect_to_user_feedback
redirect_to(@exercise, alert: t('exercises.implement.no_files')) unless @exercise.files.visible.exists?
user_solved_exercise = @exercise.has_user_solved(current_user)
user_got_enough_interventions = UserExerciseIntervention.where(user: current_user).where("created_at >= ?", Time.zone.now.beginning_of_day).count >= max_intervention_count
@ -409,4 +410,12 @@ class ExercisesController < ApplicationController
redirect_to_lti_return_path
end
def redirect_to_user_feedback
if UserExerciseFeedback.find_by(exercise: @exercise, user: current_user)
redirect_to(edit_user_exercise_feedback_path(user_exercise_feedback: {exercise_id: @exercise.id}))
else
redirect_to(new_user_exercise_feedback_path(user_exercise_feedback: {exercise_id: @exercise.id}))
end
end
end

View File

@ -1,15 +1,33 @@
class UserExerciseFeedbackController < ApplicationController
class UserExerciseFeedbacksController < ApplicationController
include CommonBehavior
before_action :set_user_exercise_feedback, only: [:edit, :update]
def comment_presets
[t('user_exercise_feedback.choose'),
t('user_exercise_feedback.easy'),
t('user_exercise_feedback.some_what_easy'),
t('user_exercise_feedback.some_what_difficult'),
t('user_exercise_feedback.difficult')]
end
def authorize!
authorize(@uef)
end
private :authorize!
def create
@tag = Tag.new(tag_params)
authorize!
create_and_respond(object: @tag)
if validate_feedback_text(uef_params[:difficulty])
exercise = Exercise.find(uef_params[:exercise_id])
if exercise
@uef = UserExerciseFeedback.new(uef_params)
authorize!
create_and_respond(object: @uef, path: proc{implement_exercise_path(exercise)})
end
else
flash[:danger] = t('shared.message_failure')
redirect_to(:back, id: uef_params[:exercise_id])
end
end
def destroy
@ -17,26 +35,43 @@ class UserExerciseFeedbackController < ApplicationController
end
def edit
@texts = comment_presets
authorize!
end
def uef_params
params[:tag].permit(:feedback_text, :difficulty)
params[:user_exercise_feedback].permit(:feedback_text, :difficulty, :exercise_id).merge(user_id: current_user.id, user_type: current_user.class.name)
end
private :uef_params
def new
@texts = comment_presets
@uef = UserExerciseFeedback.new
@exercise = Exercise.find(params[:user_exercise_feedback][:exercise_id])
authorize!
end
def show
end
def update
update_and_respond(object: @UserExerciseFeedback, params: uef_params)
authorize!
if validate_feedback_text(uef_params[:difficulty]) && @exercise
update_and_respond(object: @uef, params: uef_params, path: implement_exercise_path(@exercise))
else
flash[:danger] = t('shared.message_failure')
redirect_to(:back, id: uef_params[:exercise_id])
end
end
def to_s
name
end
def set_user_exercise_feedback
puts "params: #{params}"
@exercise = Exercise.find(params[:user_exercise_feedback][:exercise_id])
@uef = UserExerciseFeedback.find_by(exercise_id: params[:user_exercise_feedback][:exercise_id], user: current_user)
end
def validate_feedback_text(difficulty_text)
return comment_presets.include? difficulty_text
end
end

View File

@ -1,4 +1,4 @@
class TagPolicy < AdminOrAuthorPolicy
class UserExerciseFeedbackPolicy < AdminOrAuthorPolicy
def author?
@user == @record.author
end
@ -8,6 +8,10 @@ class TagPolicy < AdminOrAuthorPolicy
admin?
end
def create?
everyone
end
def show?
@user.internal_user?
end

View File

@ -1,8 +1,11 @@
= form_for(@uef) do |f|
= render('shared/form_errors', object: @uef)
h4
p = t('user_exercise_feedback.description')
.form-group
= f.label(:feedback_text)
= f.text_field(:feedback_text, class: 'form-control', required: true)
= f.label(:difficulty)
= f.text_field(:difficulty, class: 'form-control', required: true)
= f.text_area(:feedback_text, class: 'form-control', required: true, :rows => "10")
h4 = t('user_exercise_feedback.difficulty')
= f.collection_radio_buttons :difficulty, @texts, :to_s, :to_s, html_options={class: "radio-inline"} do |b|
= b.label(:class => 'radio') { b.radio_button + b.text }
= f.hidden_field(:exercise_id, :value => @exercise.id)
.actions = render('shared/submit_button', f: f, object: @uef)

View File

@ -547,8 +547,12 @@ en:
file_template:
no_template_label: "Empty File"
user_exercise_feedback:
choose: "choose one"
easy: "it was easy"
some_what_easy: "it was somewhat easy"
some_what_difficult: "it was somewhat difficult"
difficult: "difficult"
done: "done"
difficulty: "Difficulty of the exercise"
description: "Here you have the chance to comment on the exercise. Feel free to give us feedback on the exercise, the description or difficulty. Did you liked the question or was it too difficult or easy?"