Skip to content

Commit 64ad553

Browse files
authored
Add paste visibility option for completed only (#588)
* Add paste visibility option for completed only * Restrict protected/secured paste_visibility option
1 parent 02ad77e commit 64ad553

File tree

3 files changed

+6
-4
lines changed

3 files changed

+6
-4
lines changed

app/controllers/submissions_controller.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,15 +317,17 @@ def check_access!
317317
end
318318

319319
paste_visible = @submission.paste_visible_for?(current_user)
320-
return if paste_visible
320+
321321
paste_visibility = @exercise.paste_visibility
322322
paste_visibility ||= @course.paste_visibility
323323
paste_visibility ||= 'open'
324324
case paste_visibility
325325
when 'protected', 'secured'
326-
respond_forbidden unless can?(:teach, @course) || @submission.user_id.to_s == current_user.id.to_s || paste_visible
326+
respond_forbidden unless can?(:teach, @course) || @submission.user_id.to_s == current_user.id.to_s
327327
when 'no-tests-public'
328328
respond_forbidden unless can?(:teach, @course) || @submission.created_at > 2.hours.ago || @submission.user_id.to_s == current_user.id.to_s
329+
when 'completed-only'
330+
respond_forbidden("You cannot see this paste because you haven't completed this exercise.") unless can?(:teach, @course) || @submission.user_id.to_s == current_user.id.to_s || @submission.exercise.completed_by?(current_user) || current_user.submissions.where(exercise_name: @exercise.name, pretest_error: nil, all_tests_passed: true).any?
329331
when 'everyone'
330332
nil
331333
else

app/models/course.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ def links_as_json(view_context)
189189
scope :with_certificates_for, ->(user) { select { |c| c.visible_to?(user) && c.certificate_downloadable_for?(user) } }
190190

191191
enum disabled_status: %i[enabled disabled]
192-
enum paste_visibility: %i[open secured no-tests-public everyone]
192+
enum paste_visibility: %i[open secured no-tests-public everyone completed-only]
193193

194194
def destroy
195195
# Optimization: delete dependent objects quickly.

app/models/exercise.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ class Exercise < ApplicationRecord
122122
}
123123

124124
enum disabled_status: %i[enabled disabled]
125-
enum paste_visibility: %i[open secured no-tests-public everyone]
125+
enum paste_visibility: %i[open secured no-tests-public everyone completed-only]
126126

127127
def relative_path
128128
name.tr('-', '/')

0 commit comments

Comments
 (0)