From 10aa55a770c2985c22c92d17b8a7ea90b0a09085 Mon Sep 17 00:00:00 2001 From: Bob Van Landuyt Date: Fri, 27 Apr 2018 14:56:50 +0200 Subject: Allow a user to accept/decline terms When a user accepts, we store this in the agreements to keep track of which terms they accepted. We also update the flag on the user. --- app/controllers/users/terms_controller.rb | 43 ++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) (limited to 'app/controllers') diff --git a/app/controllers/users/terms_controller.rb b/app/controllers/users/terms_controller.rb index 778e388ff5a..32507bdb7b1 100644 --- a/app/controllers/users/terms_controller.rb +++ b/app/controllers/users/terms_controller.rb @@ -2,18 +2,55 @@ module Users class TermsController < ApplicationController before_action :terms - layout 'terms' def index + @redirect = redirect_path + end + + def accept + agreement = Users::RespondToTermsService.new(current_user, viewed_term) + .execute(accepted: true) + + if agreement.persisted? + redirect_to redirect_path + else + flash[:alert] = agreement.errors.full_messages.join(', ') + redirect_to terms_path, redirect: redirect_path + end + end + + def decline + agreement = Users::RespondToTermsService.new(current_user, viewed_term) + .execute(accepted: false) + + if agreement.persisted? + sign_out(current_user) + redirect_to root_path + else + flash[:alert] = agreement.errors.full_messages.join(', ') + redirect_to terms_path, redirect: redirect_path + end end private + def viewed_term + @viewed_term ||= ApplicationSetting::Term.find(params[:id]) + end + def terms - unless @terms = Gitlab::CurrentSettings.current_application_settings.latest_terms - redirect_to request.referer || root_path + unless @term = Gitlab::CurrentSettings.current_application_settings.latest_terms + redirect_to redirect_path end end + + def redirect_path + referer = if request.referer && !request.referer.include?(terms_path) + URI(request.referer).path + end + + params[:redirect] || referer || root_path + end end end -- cgit v1.2.1