diff --git a/app/controllers/request_for_comments_controller.rb b/app/controllers/request_for_comments_controller.rb index 2f8219a9..29c5a6ea 100644 --- a/app/controllers/request_for_comments_controller.rb +++ b/app/controllers/request_for_comments_controller.rb @@ -14,46 +14,40 @@ class RequestForCommentsController < ApplicationController def index @search = RequestForComment .last_per_user(2) - .joins('join "submissions" s on s.id = request_for_comments.submission_id - left outer join "files" f on f.context_id = s.id - left outer join "comments" on comments.file_id = f.id') - .group('request_for_comments.id, request_for_comments.user_id, request_for_comments.exercise_id, - request_for_comments.file_id, request_for_comments.question, request_for_comments.created_at, - request_for_comments.updated_at, request_for_comments.user_type, request_for_comments.solved, - request_for_comments.full_score_reached, request_for_comments.submission_id, request_for_comments.row_number') # ugly, but rails wants it this way - .select('request_for_comments.*, max(comments.updated_at) as last_comment') + .with_last_activity .search(params[:q]) - @request_for_comments = @search.result.order('created_at DESC').paginate(page: params[:page], total_entries: @search.result.length) + @request_for_comments = @search.result + .order('created_at DESC') + .paginate(page: params[:page], total_entries: @search.result.length) authorize! end + # GET /my_request_for_comments def get_my_comment_requests @search = RequestForComment + .with_last_activity .where(user_id: current_user.id) - .joins('join "submissions" s on s.id = request_for_comments.submission_id - left outer join "files" f on f.context_id = s.id - left outer join "comments" on comments.file_id = f.id') - .group('request_for_comments.id') - .select('request_for_comments.*, max(comments.updated_at) as last_comment') .search(params[:q]) - @request_for_comments = @search.result.order('created_at DESC').paginate(page: params[:page]) + @request_for_comments = @search.result + .order('created_at DESC') + .paginate(page: params[:page]) render 'index' end + # GET /my_rfc_activity def get_rfcs_with_my_comments @search = RequestForComment + .with_last_activity .joins(:comments) # we don't need to outer join here, because we know the user has commented on these .where(comments: {user_id: current_user.id}) - .joins('join "submissions" s on s.id = request_for_comments.submission_id - left outer join "files" f on f.context_id = s.id - left outer join "comments" as c on c.file_id = f.id') - .group('request_for_comments.id') - .select('request_for_comments.*, max(c.updated_at) as last_comment') .search(params[:q]) - @request_for_comments = @search.result.order('last_comment DESC').paginate(page: params[:page]) + @request_for_comments = @search.result + .order('last_comment DESC') + .paginate(page: params[:page]) render 'index' end + # GET /request_for_comments/1/mark_as_solved def mark_as_solved authorize! @request_for_comment.solved = true @@ -66,6 +60,7 @@ class RequestForCommentsController < ApplicationController end end + # POST /request_for_comments/1/set_thank_you_note def set_thank_you_note authorize! @request_for_comment.thank_you_note = params[:note] @@ -82,10 +77,6 @@ class RequestForCommentsController < ApplicationController end end - def submit - - end - # GET /request_for_comments/1 # GET /request_for_comments/1.json def show @@ -146,10 +137,6 @@ class RequestForCommentsController < ApplicationController authorize! end - def comment_params - params.permit(:exercise_id, :feedback_text).merge(user_id: current_user.id, user_type: current_user.class.name) - end - private # Use callbacks to share common setup or constraints between actions. def set_request_for_comment @@ -162,4 +149,8 @@ class RequestForCommentsController < ApplicationController params.require(:request_for_comment).permit(:exercise_id, :file_id, :question, :requested_at, :solved, :submission_id).merge(user_id: current_user.id, user_type: current_user.class.name) end + def comment_params + params.permit(:exercise_id, :feedback_text).merge(user_id: current_user.id, user_type: current_user.class.name) + end + end diff --git a/app/models/request_for_comment.rb b/app/models/request_for_comment.rb index d0c300b6..d00d08eb 100644 --- a/app/models/request_for_comment.rb +++ b/app/models/request_for_comment.rb @@ -10,7 +10,13 @@ class RequestForComment < ActiveRecord::Base scope :unsolved, -> { where(solved: [false, nil]) } def self.last_per_user(n = 5) - from("(#{row_number_user_sql}) as request_for_comments").where("row_number <= ?", n) + from("(#{row_number_user_sql}) as request_for_comments") + .where("row_number <= ?", n) + .group('request_for_comments.id, request_for_comments.user_id, request_for_comments.exercise_id, + request_for_comments.file_id, request_for_comments.question, request_for_comments.created_at, + request_for_comments.updated_at, request_for_comments.user_type, request_for_comments.solved, + request_for_comments.full_score_reached, request_for_comments.submission_id, request_for_comments.row_number') + # ugly, but necessary end # not used right now, finds the last submission for the respective user and exercise. @@ -46,6 +52,14 @@ class RequestForComment < ActiveRecord::Base commenters.uniq {|user| user.id} end + def self.with_last_activity + self.joins('join "submissions" s on s.id = request_for_comments.submission_id + left outer join "files" f on f.context_id = s.id + left outer join "comments" c on c.file_id = f.id') + .group('request_for_comments.id') + .select('request_for_comments.*, max(c.updated_at) as last_comment') + end + def to_s "RFC-" + self.id.to_s end