Class: Decidim::TimeTracker::AssigneeQuestionnaireController

Inherits:
ApplicationController
  • Object
show all
Includes:
Forms::Concerns::HasQuestionnaire
Defined in:
app/controllers/decidim/time_tracker/assignee_questionnaire_controller.rb

Instance Method Summary collapse

Instance Method Details

#after_answer_pathObject



75
76
77
# File 'app/controllers/decidim/time_tracker/assignee_questionnaire_controller.rb', line 75

def after_answer_path
  Decidim::EngineRouter.main_proxy(current_component).root_path
end

#allow_answers?Boolean

only allows answers if not in preview mode

Returns:

  • (Boolean)


43
44
45
46
47
48
49
# File 'app/controllers/decidim/time_tracker/assignee_questionnaire_controller.rb', line 43

def allow_answers?
  return false if current_user.blank?

  return true if params[:action] == "preview" && current_user.admin?

  current_component.published?
end

#answerObject

overwrite this method to automatically accept TOS



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/controllers/decidim/time_tracker/assignee_questionnaire_controller.rb', line 17

def answer
  enforce_permission_to :answer, :questionnaire

  @form = form(Decidim::Forms::QuestionnaireForm).from_params(params, session_token: session_token, ip_hash: ip_hash)

  Decidim::Forms::AnswerQuestionnaire.call(@form, current_user, questionnaire) do
    on(:ok) do
      # i18n-tasks-use t("decidim.forms.questionnaires.answer.success")
      TosAcceptance.create!(assignee: Assignee.for(current_user), time_tracker: time_tracker)
      flash[:notice] = I18n.t("answer.success", scope: i18n_flashes_scope)
      redirect_to after_answer_path
    end

    on(:invalid) do
      # i18n-tasks-use t("decidim.forms.questionnaires.answer.invalid")
      flash.now[:alert] = I18n.t("answer.invalid", scope: i18n_flashes_scope)
      render template: "decidim/forms/questionnaires/show"
    end
  end
end

#form_pathObject



71
72
73
# File 'app/controllers/decidim/time_tracker/assignee_questionnaire_controller.rb', line 71

def form_path
  assignee_questionnaire_path
end

#previewObject

only allows answers if not in preview mode



9
10
11
12
13
14
# File 'app/controllers/decidim/time_tracker/assignee_questionnaire_controller.rb', line 9

def preview
  return show if request.method == "GET"

  flash[":alert"] = I18n.t("questionnaire_in_preview_mode", scope: "decidim.time_tracker.time_tracker")
  redirect_to preview_assignee_questionnaire_path
end

#questionnaire_forObject



38
39
40
# File 'app/controllers/decidim/time_tracker/assignee_questionnaire_controller.rb', line 38

def questionnaire_for
  time_tracker.assignee_data
end

#update_urlObject

Returns the path to answer this questionnaire for normal users If the questionnaire is rendered in a preview route, then just do nothing with the responses



65
66
67
68
69
# File 'app/controllers/decidim/time_tracker/assignee_questionnaire_controller.rb', line 65

def update_url
  return preview_assignee_questionnaire_path if params[:action] == "preview"

  answer_assignee_questionnaire_path
end

#visitor_already_answered?Boolean

Returns:

  • (Boolean)


57
58
59
60
61
# File 'app/controllers/decidim/time_tracker/assignee_questionnaire_controller.rb', line 57

def visitor_already_answered?
  return false if params[:action] == "preview" && current_user.admin?

  questionnaire.answered_by?(current_user)
end

#visitor_can_answer?Boolean

Override so can answer only if is an assignation can view Also admins can preview it (but not answer)

Returns:

  • (Boolean)


53
54
55
# File 'app/controllers/decidim/time_tracker/assignee_questionnaire_controller.rb', line 53

def visitor_can_answer?
  current_user.present?
end