Spaces:
Paused
Paused
File size: 3,076 Bytes
874ae95 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | class CoursesController < ApplicationController
include RecaptchaVerifiable
include DiscordAccountRequirable
before_action :authenticate_user!,
except: %i[show apply process_application curriculum]
before_action :preview_or_authenticate, only: %i[curriculum]
before_action :require_discord_account, only: %i[curriculum report]
# GET /courses/:id/curriculum
def curriculum
@presenter = Courses::CurriculumPresenter.new(view_context, @course)
render layout: "student_course"
end
# GET /courses/:id/leaderboard?weeks_before=
def leaderboard
@course = authorize(find_course)
@on = params[:on]
render layout: "student_course"
end
# GET /courses/:id/apply
def apply
@course = authorize(find_course)
@show_checkbox_recaptcha = params[:visible_recaptcha].present?
save_tag
end
# POST /courses/:id/apply
def process_application
@course = authorize(find_course)
form = Courses::EnrollmentForm.new(@course)
recaptcha_success =
recaptcha_success?(@form, action: "public_course_enrollment")
unless recaptcha_success
redirect_to apply_course_path(params[:id], visible_recaptcha: 1)
return
end
if form.validate(params)
form.create_applicant(session)
flash[:success] = t(".sent_mail")
redirect_to root_path
else
flash[:error] = t(
".errors",
form_errors: form.errors.full_messages.join(", ")
)
redirect_to apply_course_path(params[:id], visible_recaptcha: 1)
end
end
# GET /courses/:id/(:slug)
def show
@course = authorize(find_course)
render layout: "student"
end
# GET /courses/:id/review
def review
@course = authorize(find_course)
render html: "", layout: "app_router"
end
# GET /courses/:id/cohorts
def cohorts
@course = authorize(find_course)
render layout: "student_course"
end
# GET /courses/:id/report
def report
@course = authorize(find_course)
@presenter = Courses::ReportPresenter.new(view_context, @course, student)
render layout: "student_course"
end
# GET /courses/:id/calendar
def calendar
@course = authorize(find_course)
@presenter = Courses::CalendarsPresenter.new(view_context, @course, params)
render layout: "student_course"
end
def calendar_month_data
@course = authorize(find_course)
@presenter = Courses::CalendarsPresenter.new(view_context, @course, params)
render json: @presenter.month_data
end
private
def course
@course ||= Course.find(params[:id])
end
def preview_or_authenticate
course = find_course
authenticate_user! unless course.public_preview?
@course = authorize(course)
end
def student
@student ||=
@course.students.not_dropped_out.find_by(user_id: current_user.id)
end
def find_course
policy_scope(Course).find(params[:id])
end
def save_tag
return if params[:tag].blank?
if params[:tag].in?(current_school.student_tag_list)
session[:applicant_tag] = params[:tag]
end
end
end
|