decidim-surveys 0.29.2 → 0.30.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/surveys/survey_card_metadata_cell.rb +43 -0
  3. data/app/cells/decidim/surveys/survey_cell.rb +26 -0
  4. data/app/cells/decidim/surveys/survey_l_cell.rb +34 -0
  5. data/app/cells/decidim/surveys/survey_s_cell.rb +21 -0
  6. data/app/commands/decidim/surveys/admin/create_survey.rb +21 -0
  7. data/app/commands/decidim/surveys/admin/publish_survey.rb +58 -0
  8. data/app/commands/decidim/surveys/admin/unpublish_survey.rb +44 -0
  9. data/app/commands/decidim/surveys/admin/update_survey.rb +62 -0
  10. data/app/commands/decidim/surveys/publish_answers.rb +55 -0
  11. data/app/commands/decidim/surveys/unpublish_answers.rb +55 -0
  12. data/app/controllers/concerns/decidim/surveys/admin/filterable.rb +23 -0
  13. data/app/controllers/decidim/surveys/admin/answers_controller.rb +73 -0
  14. data/app/controllers/decidim/surveys/admin/publish_answers_controller.rb +66 -0
  15. data/app/controllers/decidim/surveys/admin/surveys_controller.rb +99 -11
  16. data/app/controllers/decidim/surveys/surveys_controller.rb +50 -5
  17. data/app/forms/decidim/surveys/admin/survey_form.rb +18 -0
  18. data/app/helpers/decidim/surveys/application_helper.rb +34 -0
  19. data/app/helpers/decidim/surveys/publish_answers_helper.rb +104 -0
  20. data/app/helpers/decidim/surveys/survey_helper.rb +4 -0
  21. data/app/models/decidim/surveys/survey.rb +67 -12
  22. data/app/permissions/decidim/surveys/admin/permissions.rb +10 -1
  23. data/app/permissions/decidim/surveys/permissions.rb +0 -2
  24. data/app/presenters/decidim/surveys/admin_log/survey_presenter.rb +34 -0
  25. data/app/queries/decidim/surveys/metrics/answers_metric_manage.rb +3 -3
  26. data/app/queries/decidim/surveys/metrics/survey_participants_metric_measure.rb +2 -2
  27. data/app/views/decidim/surveys/admin/answers/index.html.erb +49 -0
  28. data/app/views/decidim/surveys/admin/answers/show.html.erb +43 -0
  29. data/app/views/decidim/surveys/admin/publish_answers/_toggle_button.html.erb +22 -0
  30. data/app/views/decidim/surveys/admin/publish_answers/index.html.erb +44 -0
  31. data/app/views/decidim/surveys/admin/surveys/_form.html.erb +28 -0
  32. data/app/views/decidim/surveys/admin/surveys/edit.html.erb +4 -21
  33. data/app/views/decidim/surveys/admin/surveys/edit_questions.html.erb +47 -0
  34. data/app/views/decidim/surveys/admin/surveys/index.html.erb +51 -0
  35. data/app/views/decidim/surveys/surveys/_published_questions_answers.html.erb +13 -0
  36. data/app/views/decidim/surveys/surveys/_surveys.html.erb +13 -0
  37. data/app/views/decidim/surveys/surveys/index.html.erb +27 -0
  38. data/app/views/decidim/surveys/surveys/index.js.erb +4 -0
  39. data/app/views/decidim/surveys/surveys/not_allowed.html.erb +22 -0
  40. data/config/locales/ar.yml +4 -3
  41. data/config/locales/bg.yml +0 -14
  42. data/config/locales/ca.yml +83 -14
  43. data/config/locales/cs.yml +87 -14
  44. data/config/locales/de.yml +83 -14
  45. data/config/locales/el.yml +0 -11
  46. data/config/locales/en.yml +83 -14
  47. data/config/locales/es-MX.yml +83 -14
  48. data/config/locales/es-PY.yml +83 -14
  49. data/config/locales/es.yml +83 -14
  50. data/config/locales/eu.yml +83 -14
  51. data/config/locales/fi-plain.yml +83 -14
  52. data/config/locales/fi.yml +83 -14
  53. data/config/locales/fr-CA.yml +74 -14
  54. data/config/locales/fr.yml +74 -14
  55. data/config/locales/ga-IE.yml +0 -4
  56. data/config/locales/gl.yml +0 -10
  57. data/config/locales/hu.yml +0 -3
  58. data/config/locales/id-ID.yml +0 -2
  59. data/config/locales/is-IS.yml +0 -2
  60. data/config/locales/it.yml +3 -10
  61. data/config/locales/ja.yml +80 -13
  62. data/config/locales/lb.yml +0 -10
  63. data/config/locales/lt.yml +0 -11
  64. data/config/locales/lv.yml +0 -3
  65. data/config/locales/nl.yml +0 -10
  66. data/config/locales/no.yml +0 -10
  67. data/config/locales/pl.yml +0 -14
  68. data/config/locales/pt-BR.yml +0 -14
  69. data/config/locales/pt.yml +0 -10
  70. data/config/locales/ro-RO.yml +0 -11
  71. data/config/locales/ru.yml +0 -2
  72. data/config/locales/sk.yml +0 -3
  73. data/config/locales/sv.yml +0 -14
  74. data/config/locales/tr-TR.yml +0 -10
  75. data/config/locales/uk.yml +0 -2
  76. data/config/locales/zh-CN.yml +0 -6
  77. data/config/locales/zh-TW.yml +0 -11
  78. data/db/migrate/20240828103030_add_deleted_at_to_decidim_surveys_surveys.rb +8 -0
  79. data/db/migrate/20240925124312_add_settings_to_decidim_surveys_surveys.rb +42 -0
  80. data/db/migrate/20250115193836_add_allow_survey_editing.rb +7 -0
  81. data/decidim-surveys.gemspec +1 -1
  82. data/lib/decidim/api/survey_type.rb +2 -2
  83. data/lib/decidim/api/surveys_type.rb +4 -5
  84. data/lib/decidim/surveys/admin_engine.rb +15 -5
  85. data/lib/decidim/surveys/component.rb +7 -24
  86. data/lib/decidim/surveys/engine.rb +2 -2
  87. data/lib/decidim/surveys/seeds.rb +115 -10
  88. data/lib/decidim/surveys/test/factories.rb +24 -0
  89. data/lib/decidim/surveys/version.rb +1 -1
  90. metadata +48 -18
  91. data/app/commands/decidim/surveys/create_survey.rb +0 -19
  92. data/app/views/decidim/surveys/admin/component/_actions.html.erb +0 -44
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b6d1ed5eeb250f269f646e0ac9c34ad9fdd14044a90ebf9ed8e599db40a6b39
4
- data.tar.gz: 89e27243dc1d1b5e62cd528b34240be8fb5f499ea4ce584057ed9fe793c7afc2
3
+ metadata.gz: ffdd328a9f3ffc27f800eeddab2eeb74147dbba087d115935ef4375f4b37ac05
4
+ data.tar.gz: ad666098738e64d72e8ad3db69e6eef2df873625dd2d582571748c4600498e32
5
5
  SHA512:
6
- metadata.gz: 83c9c782ca57c52ab5bf259c36c620e3efe5797e4dfe7501a6b651ee35246be955b20d47f267a72ffff89ea3e103397591844f6543d72d9daa76902826c364ea
7
- data.tar.gz: 563dcf5fe0904df94905578bffdc67d21aaa62d2ca9794722818d15da1e0e50ddf9c494cad5b319c894cac79ea76c3388c2a3b7cf2a6efbadd8972b0d0e4a2ab
6
+ metadata.gz: ccba07af7e2dcf5b98785d371dd4889aed0d7f1622f360b71a5334ee7d5ae0ef8478e2e1229fdb083843661bf383acd89172d6ee2f4df7a4daf8df36a80b33dc
7
+ data.tar.gz: abff712aafc743f2f216ebadf7746ac90033deaecbe982fb242e81ed3059ceb05c114edd8691a26dff78a05901344216d9c5fc8b20a5cdd6122765808e2ab115
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Surveys
5
+ # This cell renders metadata for an instance of a Survey
6
+ class SurveyCardMetadataCell < Decidim::CardMetadataCell
7
+ include Decidim::LayoutHelper
8
+ include ActionView::Helpers::DateHelper
9
+
10
+ alias survey model
11
+
12
+ def initialize(*)
13
+ super
14
+
15
+ @items.prepend(*survey_items)
16
+ end
17
+
18
+ private
19
+
20
+ def survey_items
21
+ [duration, questions_count_item]
22
+ end
23
+
24
+ def duration
25
+ text = survey.open? ? t("open", scope: "decidim.surveys.surveys.show") : t("closed", scope: "decidim.surveys.surveys.show")
26
+
27
+ {
28
+ text:,
29
+ icon: "time-line"
30
+ }
31
+ end
32
+
33
+ def questions_count_item
34
+ text = "#{survey.questionnaire.questions.size} #{t("questions", scope: "decidim.surveys.surveys.show")}"
35
+
36
+ {
37
+ text:,
38
+ icon: "survey-line"
39
+ }
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Surveys
5
+ # This cell renders the proposal card for an instance of a Survey
6
+ # the default size is the Medium Card (:m)
7
+ class SurveyCell < Decidim::ViewModel
8
+ include Cell::ViewModel::Partial
9
+
10
+ def show
11
+ cell card_size, model, options
12
+ end
13
+
14
+ private
15
+
16
+ def card_size
17
+ case @options[:size]
18
+ when :s
19
+ "decidim/surveys/survey_s"
20
+ else
21
+ "decidim/surveys/survey_l"
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cell/partial"
4
+
5
+ module Decidim
6
+ module Surveys
7
+ # This cell renders the List (:l) survey card
8
+ # for a given instance of a Survey
9
+ class SurveyLCell < Decidim::CardLCell
10
+ include Decidim::SanitizeHelper
11
+
12
+ def has_description?
13
+ true
14
+ end
15
+
16
+ def title
17
+ decidim_sanitize_translated(model.title)
18
+ end
19
+
20
+ def description
21
+ attribute = model.try(:short_description) || model.try(:body) || model.description
22
+ text = translated_attribute(attribute)
23
+
24
+ decidim_sanitize(html_truncate(text, length: 240), strip_tags: true)
25
+ end
26
+
27
+ private
28
+
29
+ def metadata_cell
30
+ "decidim/surveys/survey_card_metadata"
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cell/partial"
4
+
5
+ module Decidim
6
+ module Surveys
7
+ # This cell renders the Search (:s) survey card
8
+ # for a given instance of a Survey
9
+ class SurveySCell < Decidim::CardSCell
10
+ private
11
+
12
+ def title
13
+ present(model).title(html_escape: true)
14
+ end
15
+
16
+ def metadata_cell
17
+ "decidim/surveys/survey_card_metadata"
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Surveys
5
+ module Admin
6
+ # Command that gets called whenever a component's survey has to be created. It
7
+ # usually happens as a callback when the component itself is created.
8
+ class CreateSurvey < Decidim::Command
9
+ def initialize(component)
10
+ @component = component
11
+ end
12
+
13
+ def call
14
+ @survey = Survey.new(component: @component, questionnaire: Decidim::Forms::Questionnaire.new)
15
+
16
+ @survey.save ? broadcast(:ok, @survey) : broadcast(:invalid)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Surveys
5
+ module Admin
6
+ # A command with all the business logic that publishes an
7
+ # existing survey.
8
+ class PublishSurvey < Decidim::Command
9
+ # Public: Initializes the command.
10
+ #
11
+ # survey - Decidim::Surveys::Survey
12
+ # current_user - the user performing the action
13
+ def initialize(survey, current_user)
14
+ @survey = survey
15
+ @current_user = current_user
16
+ @questionnaire = survey.questionnaire
17
+ end
18
+
19
+ # Executes the command. Broadcasts these events:
20
+ #
21
+ # - :ok when everything is valid.
22
+ # - :invalid if the form was not valid and we could not proceed.
23
+ #
24
+ # Returns nothing.
25
+ def call
26
+ return broadcast(:invalid) if survey.published?
27
+
28
+ transaction do
29
+ publish_survey
30
+ delete_answers if @survey.clean_after_publish?
31
+ end
32
+
33
+ broadcast(:ok, survey)
34
+ end
35
+
36
+ private
37
+
38
+ attr_reader :survey, :current_user
39
+
40
+ def publish_survey
41
+ @survey = Decidim.traceability.perform_action!(
42
+ :publish,
43
+ survey,
44
+ current_user,
45
+ visibility: "all"
46
+ ) do
47
+ survey.publish!
48
+ survey
49
+ end
50
+ end
51
+
52
+ def delete_answers
53
+ @questionnaire.answers.destroy_all
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Surveys
5
+ module Admin
6
+ # A command with all the business logic that unpublishes an
7
+ # existing survey.
8
+ class UnpublishSurvey < Decidim::Command
9
+ # Public: Initializes the command.
10
+ #
11
+ # survey - Decidim::Surveys::Survey
12
+ # current_user - the user performing the action
13
+ def initialize(survey, current_user)
14
+ @survey = survey
15
+ @current_user = current_user
16
+ end
17
+
18
+ # Executes the command. Broadcasts these events:
19
+ #
20
+ # - :ok when everything is valid.
21
+ # - :invalid if the form was not valid and we could not proceed.
22
+ #
23
+ # Returns nothing.
24
+ def call
25
+ return broadcast(:invalid) unless survey.published?
26
+
27
+ @survey = Decidim.traceability.perform_action!(
28
+ :unpublish,
29
+ survey,
30
+ current_user
31
+ ) do
32
+ survey.unpublish!
33
+ survey
34
+ end
35
+ broadcast(:ok, survey)
36
+ end
37
+
38
+ private
39
+
40
+ attr_reader :survey, :current_user
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Surveys
5
+ module Admin
6
+ # This command is executed when the user changes a Survey Questionnaire from the admin
7
+ # panel.
8
+ class UpdateSurvey < Decidim::Forms::Admin::UpdateQuestionnaire
9
+ # Initializes a UpdateSurvey Command.
10
+ #
11
+ # form - The form from which to get the data.
12
+ # survey questionnaire - The current instance of the questionnaire to be updated.
13
+ def initialize(form, survey, user)
14
+ @form = form
15
+ @survey = survey
16
+ @questionnaire = survey.questionnaire
17
+ @user = user
18
+ end
19
+
20
+ # Updates the survey questionnaire if valid.
21
+ #
22
+ # Broadcasts :ok if successful, :invalid otherwise.
23
+ def call
24
+ return broadcast(:invalid) if @form.invalid?
25
+
26
+ Decidim.traceability.perform_action!("update", @survey, @user) do
27
+ transaction do
28
+ update_survey_attributes
29
+ update_questionnaire_attributes
30
+ end
31
+ rescue ActiveRecord::RecordInvalid
32
+ broadcast(:invalid)
33
+ end
34
+
35
+ broadcast(:ok)
36
+ end
37
+
38
+ private
39
+
40
+ def update_survey_attributes
41
+ @survey.update!(
42
+ allow_answers: @form.allow_answers,
43
+ allow_editing_answers: @form.allow_editing_answers,
44
+ allow_unregistered: @form.allow_unregistered,
45
+ starts_at: @form.starts_at,
46
+ ends_at: @form.ends_at,
47
+ clean_after_publish: @form.clean_after_publish,
48
+ announcement: @form.announcement
49
+ )
50
+ end
51
+
52
+ def update_questionnaire_attributes
53
+ @questionnaire.update!(
54
+ title: @form.title,
55
+ description: @form.description,
56
+ tos: @form.tos
57
+ )
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Surveys
5
+ # This command is executed when the admin publishes the Answers from the admin
6
+ # panel.
7
+ class PublishAnswers < Decidim::Command
8
+ include Decidim::TranslatableAttributes
9
+
10
+ # Initializes a PublishAnswers Command.
11
+ #
12
+ def initialize(question_id, current_user)
13
+ @question_id = question_id
14
+ @current_user = current_user
15
+ end
16
+
17
+ # Publishes the questions' answers
18
+ #
19
+ # Broadcasts :ok if successful, :invalid otherwise.
20
+ def call
21
+ transaction do
22
+ publish_survey_answer
23
+ create_action_log
24
+ end
25
+
26
+ broadcast(:ok)
27
+ rescue StandardError
28
+ broadcast(:invalid)
29
+ end
30
+
31
+ private
32
+
33
+ attr_reader :question_id, :current_user
34
+
35
+ def publish_survey_answer
36
+ question.update(survey_answers_published_at: Time.current)
37
+ end
38
+
39
+ def question
40
+ Decidim::Forms::Question.find(question_id)
41
+ end
42
+
43
+ def create_action_log
44
+ Decidim::ActionLogger.log(
45
+ "publish_answers",
46
+ current_user,
47
+ question,
48
+ nil,
49
+ resource: { title: translated_attribute(question.body) },
50
+ participatory_space: { title: question.questionnaire.questionnaire_for.title }
51
+ )
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Surveys
5
+ # This command is executed when the admin unpublishes the Answers from the admin
6
+ # panel.
7
+ class UnpublishAnswers < Decidim::Command
8
+ include Decidim::TranslatableAttributes
9
+
10
+ # Initializes a UnpublishAnswers Command.
11
+ #
12
+ def initialize(question_id, current_user)
13
+ @question_id = question_id
14
+ @current_user = current_user
15
+ end
16
+
17
+ # Unpublishes the questions' answers
18
+ #
19
+ # Broadcasts :ok if successful, :invalid otherwise.
20
+ def call
21
+ transaction do
22
+ unpublish_survey_answer
23
+ create_action_log
24
+ end
25
+
26
+ broadcast(:ok)
27
+ rescue StandardError
28
+ broadcast(:invalid)
29
+ end
30
+
31
+ private
32
+
33
+ attr_reader :question_id, :current_user
34
+
35
+ def unpublish_survey_answer
36
+ question.update(survey_answers_published_at: nil)
37
+ end
38
+
39
+ def question
40
+ Decidim::Forms::Question.find(question_id)
41
+ end
42
+
43
+ def create_action_log
44
+ Decidim::ActionLogger.log(
45
+ "unpublish_answers",
46
+ current_user,
47
+ question,
48
+ nil,
49
+ resource: { title: translated_attribute(question.body) },
50
+ participatory_space: { title: question.questionnaire.questionnaire_for.title }
51
+ )
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/concern"
4
+
5
+ module Decidim
6
+ module Surveys
7
+ module Admin
8
+ module Filterable
9
+ extend ActiveSupport::Concern
10
+
11
+ included do
12
+ include Decidim::Admin::Filterable
13
+
14
+ private
15
+
16
+ def base_query
17
+ collection
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Surveys
5
+ module Admin
6
+ # This controller allows the user to update a Page.
7
+ class AnswersController < Admin::ApplicationController
8
+ include Decidim::Forms::Admin::Concerns::HasQuestionnaireAnswers
9
+
10
+ def index
11
+ enforce_permission_to :index, :questionnaire_answers
12
+
13
+ @query = paginate(collection)
14
+ @participants = participants(@query)
15
+ @total = participants_query.count_participants
16
+
17
+ render template: "decidim/surveys/admin/answers/index"
18
+ end
19
+
20
+ def show
21
+ enforce_permission_to :show, :questionnaire_answers
22
+
23
+ @participant = participant(participants_query.participant(params[:id]))
24
+
25
+ render template: "decidim/surveys/admin/answers/show"
26
+ end
27
+
28
+ def questionnaire_for
29
+ @questionnaire_for ||= Decidim::Surveys::Survey.where(component: current_component).find_by(id: params[:survey_id])
30
+ end
31
+
32
+ def questionnaire_export_response_url(id)
33
+ Decidim::EngineRouter.admin_proxy(questionnaire_for.component).export_response_survey_answer_path(questionnaire_for, id:)
34
+ end
35
+
36
+ def questionnaire_url
37
+ Decidim::EngineRouter.admin_proxy(questionnaire_for.component).edit_questions_survey_path(questionnaire_for)
38
+ end
39
+
40
+ # Specify where to redirect after exporting a user response
41
+ def questionnaire_participant_answers_url(id)
42
+ Decidim::EngineRouter.admin_proxy(questionnaire_for.component).survey_answer_path(questionnaire_for, id:)
43
+ end
44
+
45
+ def questionnaire_participants_url
46
+ Decidim::EngineRouter.admin_proxy(questionnaire_for.component).survey_answers_path(questionnaire_for)
47
+ end
48
+
49
+ private
50
+
51
+ def questionnaire
52
+ @questionnaire ||= Decidim::Forms::Questionnaire.find_by(questionnaire_for:)
53
+ end
54
+
55
+ def participants_query
56
+ Decidim::Forms::QuestionnaireParticipants.new(questionnaire)
57
+ end
58
+
59
+ def collection
60
+ @collection ||= participants_query.participants
61
+ end
62
+
63
+ def participant(answer)
64
+ Decidim::Forms::Admin::QuestionnaireParticipantPresenter.new(participant: answer)
65
+ end
66
+
67
+ def participants(query)
68
+ query.map { |answer| participant(answer) }
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Surveys
5
+ module Admin
6
+ # This controller allows the user to see which questions' answers can be published, and publish or unpublish them
7
+ class PublishAnswersController < Admin::ApplicationController
8
+ include Decidim::Forms::Admin::Concerns::HasQuestionnaireAnswersUrlHelper
9
+
10
+ helper PublishAnswersHelper
11
+
12
+ def index
13
+ enforce_permission_to(:index, :questionnaire_publish_answers, survey:)
14
+
15
+ @survey ||= survey
16
+ end
17
+
18
+ def update
19
+ enforce_permission_to(:update, :questionnaire_publish_answers, survey:)
20
+
21
+ Decidim::Surveys::PublishAnswers.call(params[:id], current_user) do
22
+ on(:ok) do
23
+ render json: {}
24
+ end
25
+
26
+ on(:invalid) do
27
+ render json: {}, status: :unprocessable_entity
28
+ end
29
+ end
30
+ end
31
+
32
+ def destroy
33
+ enforce_permission_to(:destroy, :questionnaire_publish_answers, survey:)
34
+
35
+ Decidim::Surveys::UnpublishAnswers.call(params[:id], current_user) do
36
+ on(:ok) do
37
+ render json: {}
38
+ end
39
+
40
+ on(:invalid) do
41
+ render json: {}, status: :unprocessable_entity
42
+ end
43
+ end
44
+ end
45
+
46
+ def questionnaire
47
+ @questionnaire ||= Decidim::Forms::Questionnaire.find_by(questionnaire_for:)
48
+ end
49
+
50
+ def questionnaire_for
51
+ survey
52
+ end
53
+
54
+ def questionnaire_url
55
+ Decidim::EngineRouter.admin_proxy(questionnaire_for.component).edit_questions_survey_path(questionnaire_for)
56
+ end
57
+
58
+ private
59
+
60
+ def survey
61
+ @survey ||= Survey.where(component: current_component).find(params[:survey_id])
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end