decidim-surveys 0.29.5 → 0.30.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/app/cells/decidim/surveys/survey_card_metadata_cell.rb +43 -0
 - data/app/cells/decidim/surveys/survey_cell.rb +26 -0
 - data/app/cells/decidim/surveys/survey_l_cell.rb +34 -0
 - data/app/cells/decidim/surveys/survey_s_cell.rb +21 -0
 - data/app/commands/decidim/surveys/admin/create_survey.rb +21 -0
 - data/app/commands/decidim/surveys/admin/publish_survey.rb +58 -0
 - data/app/commands/decidim/surveys/admin/unpublish_survey.rb +44 -0
 - data/app/commands/decidim/surveys/admin/update_survey.rb +62 -0
 - data/app/commands/decidim/surveys/publish_answers.rb +55 -0
 - data/app/commands/decidim/surveys/unpublish_answers.rb +55 -0
 - data/app/controllers/concerns/decidim/surveys/admin/filterable.rb +23 -0
 - data/app/controllers/decidim/surveys/admin/answers_controller.rb +73 -0
 - data/app/controllers/decidim/surveys/admin/publish_answers_controller.rb +66 -0
 - data/app/controllers/decidim/surveys/admin/surveys_controller.rb +99 -11
 - data/app/controllers/decidim/surveys/surveys_controller.rb +50 -5
 - data/app/forms/decidim/surveys/admin/survey_form.rb +18 -0
 - data/app/helpers/decidim/surveys/application_helper.rb +34 -0
 - data/app/helpers/decidim/surveys/publish_answers_helper.rb +104 -0
 - data/app/helpers/decidim/surveys/survey_helper.rb +4 -0
 - data/app/models/decidim/surveys/survey.rb +67 -12
 - data/app/permissions/decidim/surveys/admin/permissions.rb +10 -3
 - data/app/permissions/decidim/surveys/permissions.rb +0 -2
 - data/app/presenters/decidim/surveys/admin_log/survey_presenter.rb +34 -0
 - data/app/queries/decidim/surveys/metrics/answers_metric_manage.rb +3 -3
 - data/app/queries/decidim/surveys/metrics/survey_participants_metric_measure.rb +2 -2
 - data/app/views/decidim/surveys/admin/answers/index.html.erb +49 -0
 - data/app/views/decidim/surveys/admin/answers/show.html.erb +43 -0
 - data/app/views/decidim/surveys/admin/publish_answers/_toggle_button.html.erb +22 -0
 - data/app/views/decidim/surveys/admin/publish_answers/index.html.erb +44 -0
 - data/app/views/decidim/surveys/admin/surveys/_form.html.erb +28 -0
 - data/app/views/decidim/surveys/admin/surveys/edit.html.erb +4 -21
 - data/app/views/decidim/surveys/admin/surveys/edit_questions.html.erb +47 -0
 - data/app/views/decidim/surveys/admin/surveys/index.html.erb +51 -0
 - data/app/views/decidim/surveys/surveys/_published_questions_answers.html.erb +13 -0
 - data/app/views/decidim/surveys/surveys/_surveys.html.erb +13 -0
 - data/app/views/decidim/surveys/surveys/index.html.erb +27 -0
 - data/app/views/decidim/surveys/surveys/index.js.erb +4 -0
 - data/app/views/decidim/surveys/surveys/not_allowed.html.erb +22 -0
 - data/config/locales/ar.yml +4 -3
 - data/config/locales/bg.yml +0 -14
 - data/config/locales/ca.yml +83 -14
 - data/config/locales/cs.yml +87 -14
 - data/config/locales/de.yml +83 -14
 - data/config/locales/el.yml +0 -11
 - data/config/locales/en.yml +83 -14
 - data/config/locales/es-MX.yml +83 -14
 - data/config/locales/es-PY.yml +83 -14
 - data/config/locales/es.yml +83 -14
 - data/config/locales/eu.yml +83 -14
 - data/config/locales/fi-plain.yml +83 -14
 - data/config/locales/fi.yml +83 -14
 - data/config/locales/fr-CA.yml +74 -14
 - data/config/locales/fr.yml +74 -14
 - data/config/locales/ga-IE.yml +0 -4
 - data/config/locales/gl.yml +0 -10
 - data/config/locales/hu.yml +0 -3
 - data/config/locales/id-ID.yml +0 -2
 - data/config/locales/is-IS.yml +0 -2
 - data/config/locales/it.yml +3 -14
 - data/config/locales/ja.yml +86 -19
 - data/config/locales/lb.yml +0 -10
 - data/config/locales/lt.yml +0 -11
 - data/config/locales/lv.yml +0 -3
 - data/config/locales/nl.yml +0 -10
 - data/config/locales/no.yml +0 -10
 - data/config/locales/pl.yml +0 -14
 - data/config/locales/pt-BR.yml +0 -14
 - data/config/locales/pt.yml +0 -10
 - data/config/locales/ro-RO.yml +0 -11
 - data/config/locales/ru.yml +0 -2
 - data/config/locales/sk.yml +0 -3
 - data/config/locales/sv.yml +0 -14
 - data/config/locales/tr-TR.yml +0 -16
 - data/config/locales/uk.yml +0 -2
 - data/config/locales/zh-CN.yml +0 -6
 - data/config/locales/zh-TW.yml +0 -11
 - data/db/migrate/20240828103030_add_deleted_at_to_decidim_surveys_surveys.rb +8 -0
 - data/db/migrate/20240925124312_add_settings_to_decidim_surveys_surveys.rb +42 -0
 - data/db/migrate/20250115193836_add_allow_survey_editing.rb +7 -0
 - data/decidim-surveys.gemspec +1 -1
 - data/lib/decidim/api/survey_type.rb +2 -2
 - data/lib/decidim/api/surveys_type.rb +4 -5
 - data/lib/decidim/surveys/admin_engine.rb +15 -5
 - data/lib/decidim/surveys/component.rb +7 -24
 - data/lib/decidim/surveys/engine.rb +2 -2
 - data/lib/decidim/surveys/seeds.rb +115 -10
 - data/lib/decidim/surveys/test/factories.rb +24 -0
 - data/lib/decidim/surveys/version.rb +1 -1
 - metadata +48 -19
 - data/app/commands/decidim/surveys/create_survey.rb +0 -19
 - data/app/views/decidim/surveys/admin/component/_actions.html.erb +0 -44
 - data/config/locales/ca-IT.yml +0 -77
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: ffdd328a9f3ffc27f800eeddab2eeb74147dbba087d115935ef4375f4b37ac05
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: ad666098738e64d72e8ad3db69e6eef2df873625dd2d582571748c4600498e32
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 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
         
     |