From e4d28452bf4ee6f4fcb9dcf8a406340fba5c2131 Mon Sep 17 00:00:00 2001 From: Thomas Hille Date: Tue, 11 Apr 2017 16:29:29 +0200 Subject: [PATCH] save progress --- app/controllers/exercises_controller.rb | 9 ++++ .../user_exercise_feedbacks_controller.rb | 53 +++++++++++++++---- app/policies/user_exercise_feedback_policy.rb | 6 ++- .../user_exercise_feedbacks/_form.html.slim | 11 ++-- .../user_exercise_feedbacks/edit.html.slim | 0 config/locales/en.yml | 4 ++ 6 files changed, 69 insertions(+), 14 deletions(-) create mode 100644 app/views/user_exercise_feedbacks/edit.html.slim diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 8af8bb8e..fc2848e7 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -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 diff --git a/app/controllers/user_exercise_feedbacks_controller.rb b/app/controllers/user_exercise_feedbacks_controller.rb index 445b1a83..6a835a37 100644 --- a/app/controllers/user_exercise_feedbacks_controller.rb +++ b/app/controllers/user_exercise_feedbacks_controller.rb @@ -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 \ No newline at end of file diff --git a/app/policies/user_exercise_feedback_policy.rb b/app/policies/user_exercise_feedback_policy.rb index 8325b9fa..f005cc0d 100644 --- a/app/policies/user_exercise_feedback_policy.rb +++ b/app/policies/user_exercise_feedback_policy.rb @@ -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 diff --git a/app/views/user_exercise_feedbacks/_form.html.slim b/app/views/user_exercise_feedbacks/_form.html.slim index 60bde323..2d6cfd54 100644 --- a/app/views/user_exercise_feedbacks/_form.html.slim +++ b/app/views/user_exercise_feedbacks/_form.html.slim @@ -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) diff --git a/app/views/user_exercise_feedbacks/edit.html.slim b/app/views/user_exercise_feedbacks/edit.html.slim new file mode 100644 index 00000000..e69de29b diff --git a/config/locales/en.yml b/config/locales/en.yml index eeadb83a..99d11c32 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -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?"