Class: Decidim::Challenges::Admin::SurveysController

Inherits:
ApplicationController
  • Object
show all
Includes:
Forms::Admin::Concerns::HasQuestionnaire, Forms::Admin::Concerns::HasQuestionnaireAnswers
Defined in:
app/controllers/decidim/challenges/admin/surveys_controller.rb

Overview

This controller allows an admin to manage surveys from a challenge

Instance Method Summary collapse

Instance Method Details

#editObject



25
26
27
28
29
# File 'app/controllers/decidim/challenges/admin/surveys_controller.rb', line 25

def edit
  enforce_permission_to(:edit, :challenge, challenge:)

  @form = ChallengeSurveysForm.from_model(challenge)
end

#exportObject



49
50
51
52
53
54
55
56
57
# File 'app/controllers/decidim/challenges/admin/surveys_controller.rb', line 49

def export
  enforce_permission_to(:export_surveys, :challenge, challenge:)

  ExportChallengeSurveys.call(challenge, params[:format], current_user) do
    on(:ok) do |export_data|
      send_data export_data.read, type: "text/#{export_data.extension}", filename: export_data.filename("registrations")
    end
  end
end

#export_responseObject



59
60
61
62
63
64
65
66
67
68
69
70
# File 'app/controllers/decidim/challenges/admin/surveys_controller.rb', line 59

def export_response
  enforce_permission_to :export_answers, :questionnaire

  session_token = params[:session_token]
  answers = Decidim::Forms::QuestionnaireUserAnswers.for(questionnaire)
  title = t("export_response.title", scope: i18n_scope, token: session_token)
  Decidim::Forms::ExportQuestionnaireAnswersJob.perform_later(current_user, title, answers.select { |a| a.first.session_token == session_token })

  flash[:notice] = t("decidim.admin.exports.notice")

  redirect_back(fallback_location: questionnaire_participant_answers_url(session_token))
end

#indexObject



11
12
13
14
15
16
17
# File 'app/controllers/decidim/challenges/admin/surveys_controller.rb', line 11

def index
  enforce_permission_to :index, :questionnaire_answers

  @query = paginate(collection)
  @participants = participants(@query)
  @total = participants_query.count_participants
end

#public_urlObject



88
89
90
# File 'app/controllers/decidim/challenges/admin/surveys_controller.rb', line 88

def public_url
  Decidim::EngineRouter.main_proxy(current_component).answer_challenge_survey_path(challenge.id)
end

#questionnaire_export_response_url(session_token) ⇒ Object



80
81
82
# File 'app/controllers/decidim/challenges/admin/surveys_controller.rb', line 80

def questionnaire_export_response_url(session_token)
  export_response_challenge_surveys_url(session_token:, format: "pdf")
end

#questionnaire_forObject



84
85
86
# File 'app/controllers/decidim/challenges/admin/surveys_controller.rb', line 84

def questionnaire_for
  challenge
end

#questionnaire_participant_answers_url(session_token) ⇒ Object



76
77
78
# File 'app/controllers/decidim/challenges/admin/surveys_controller.rb', line 76

def questionnaire_participant_answers_url(session_token)
  show_answers_challenge_surveys_url(session_token:)
end

#questionnaire_participants_urlObject



72
73
74
# File 'app/controllers/decidim/challenges/admin/surveys_controller.rb', line 72

def questionnaire_participants_url
  index_answers_challenge_surveys_path
end

#showObject



19
20
21
22
23
# File 'app/controllers/decidim/challenges/admin/surveys_controller.rb', line 19

def show
  enforce_permission_to :show, :questionnaire_answers

  @participant = participant(participants_query.participant(params[:session_token]))
end

#updateObject



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'app/controllers/decidim/challenges/admin/surveys_controller.rb', line 31

def update
  enforce_permission_to(:edit, :challenge, challenge:)

  @form = ChallengeSurveysForm.from_params(params).with_context(current_organization: challenge.organization, challenge:)

  UpdateSurveys.call(@form, challenge) do
    on(:ok) do
      flash[:notice] = I18n.t("surveys.update.success", scope: "decidim.challenges.admin")
      redirect_to challenges_path
    end

    on(:invalid) do
      flash.now[:alert] = I18n.t("surveys.update.invalid", scope: "decidim.challenges.admin")
      render action: "edit"
    end
  end
end