LearnPulse / app /controllers /courses_controller.rb
Nambinintsoa Rovatiana RAMAROSON
first commit
874ae95
Raw
History Blame Contribute Delete
3.08 kB
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