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
@@ -0,0 +1,43 @@
1
+ <div class="card" id="answers">
2
+ <div class="item_show__header">
3
+ <h1 class="item_show__header-title">
4
+ <%= t ".title", number: current_idx %>
5
+
6
+ <%= link_to t("actions.next", scope: "decidim.forms.admin.questionnaires.answers").html_safe, next_url, rel: "next", class: "button button__sm button__secondary next" unless last? %>
7
+ <%= link_to t("actions.previous", scope: "decidim.forms.admin.questionnaires.answers").html_safe, prev_url, rel: "prev", class: "button button__sm button__secondary prev" unless first? %>
8
+ <%= link_to t("actions.export", scope: "decidim.forms.admin.questionnaires.answers"), questionnaire_export_response_url(@participant.session_token), class: "button button__sm button__secondary export" %>
9
+ <%= link_to t("actions.back", scope: "decidim.forms.admin.questionnaires.answers"), questionnaire_participants_url, class: "button button__sm button__secondary back" %>
10
+ </h1>
11
+ </div>
12
+ <div class="card-section">
13
+ <div class="table">
14
+ <table class="table-list">
15
+ <thead>
16
+ <tr>
17
+ <th><%= t("session_token", scope: "decidim.forms.user_answers_serializer") %></th>
18
+ <th><%= t("user_status", scope: "decidim.forms.user_answers_serializer") %></th>
19
+ <th><%= t("ip_hash", scope: "decidim.forms.user_answers_serializer") %></th>
20
+ <th><%= t("completion", scope: "decidim.forms.user_answers_serializer") %></th>
21
+ <th><%= t("created_at", scope: "decidim.forms.user_answers_serializer") %></th>
22
+ <th></th>
23
+ </tr>
24
+ </thead>
25
+ <tbody>
26
+ <tr>
27
+ <td><%= @participant.session_token %></td>
28
+ <td><%= @participant.status %></td>
29
+ <td><%= @participant.ip_hash %></td>
30
+ <td><%= display_percentage(@participant.completion) %></td>
31
+ <td><%= l @participant.answered_at, format: :short %></td>
32
+ </tr>
33
+ </tbody>
34
+ </table>
35
+ </div>
36
+ <dl class="p-4 [&_ul]:list-disc [&_ul]:pl-4">
37
+ <% @participant.answers.each do |answer| %>
38
+ <dt class="font-semibold"><%= answer.question %></dt>
39
+ <dd><%= answer.body %></dd>
40
+ <% end %>
41
+ </dl>
42
+ </div>
43
+ </div>
@@ -0,0 +1,22 @@
1
+ <div class="toggle__switch-trigger float-right">
2
+ <% label = "publish_answer_#{question.id}" %>
3
+ <label for="<%= label %>" class="toggle__switch-toggle">
4
+ <span class="toggle__switch-trigger-text">
5
+ <%= content_tag(:span, class: "label success ml-[-8.5rem] mt-1 #{"hidden" if question.survey_answers_published_at.blank?}") { t("status.published", scope: "decidim.surveys.admin.publish_answers.index") } %>
6
+ <%= content_tag(:span, class: "label alert -ml-40 mt-1 #{"hidden" if question.survey_answers_published_at.present?}") { t("status.not_published", scope: "decidim.surveys.admin.publish_answers.index") } %>
7
+ </span>
8
+ <span>
9
+ <input
10
+ <%== %(checked="checked") if question.survey_answers_published_at.present? %>
11
+ id="<%= label %>"
12
+ type="checkbox"
13
+ name="<%= label %>"
14
+ data-publish-question-answer-action="<%= question.survey_answers_published_at.present? ? "unpublish" : "publish" %>"
15
+ data-publish-question-answer-question-url="<%= survey_publish_answer_path(params[:survey_id], question) %>">
16
+ <span class="toggle__switch-toggle-content">
17
+ </span>
18
+ <%= icon "check-line", class: "toggle__switch-toggle-icon" %>
19
+ <%= icon "close-line", class: "toggle__switch-toggle-icon" %>
20
+ </span>
21
+ </label>
22
+ </div>
@@ -0,0 +1,44 @@
1
+
2
+ <% add_decidim_page_title(t(".title")) %>
3
+ <div class="item_show__header border-none">
4
+ <div class="w-full">
5
+ <h1 class="item_show__header-title">
6
+ <%= t(".title") %>
7
+ <%= link_to t("actions.back", scope: "decidim.forms.admin.questionnaires"), questionnaire_url, class: "button button__sm button__secondary new" %>
8
+ </h1>
9
+ </div>
10
+ </div>
11
+
12
+ <p class="mt-2 text-gray-600">
13
+ <%= t(".description") %>
14
+ </p>
15
+
16
+ <hr class="border-b border-t-0 border-gray mb-8 pb-4">
17
+
18
+ <div class="item__edit item__edit-1col">
19
+ <div class="item__edit-form">
20
+ <ol class="list-decimal list-inside">
21
+ <% @survey.questionnaire.questions.each do |question| %>
22
+ <% next if question.question_type == "separator" %>
23
+
24
+ <li class="<%= "text-gray" unless question_answer_is_publicable(question.question_type) %> mb-6">
25
+ <div class="inline">
26
+ <span><%= translated_attribute question.body %> (<%= I18n.t("decidim.surveys.admin.publish_answers.index.answers", count: question.answers.count) %>)</span>
27
+
28
+ <% if question_answer_is_publicable(question.question_type) %>
29
+ <%= render partial: "toggle_button", locals: { question: } %>
30
+ <% end %>
31
+ </div>
32
+
33
+ <% if question_answer_is_publicable(question.question_type) %>
34
+ <div class="m-4">
35
+ <%= chart_for_question(question.id) %>
36
+ </div>
37
+ <% end %>
38
+ </li>
39
+ <% end %>
40
+ </ol>
41
+ </div>
42
+ </div>
43
+
44
+ <%= append_javascript_pack_tag "decidim_forms_admin" %>
@@ -0,0 +1,28 @@
1
+ <%= render "decidim/forms/admin/questionnaires/form", form: %>
2
+ <div class="form__wrapper">
3
+ <div class="card pt-4">
4
+ <div class="card-section">
5
+ <div class="row column">
6
+ <%= form.check_box :allow_answers, label: t("models.components.allow_answers", scope: "decidim.forms.admin"), aria: { label: :allow_answers } %>
7
+ </div>
8
+ <div class="row column">
9
+ <%= form.check_box :allow_editing_answers, label: t("models.components.allow_editing_answers", scope: "decidim.forms.admin"), aria: { label: :allow_editing_answers } %>
10
+ </div>
11
+ <div class="row column">
12
+ <%= form.check_box :allow_unregistered, label: t("models.components.allow_unregistered", scope: "decidim.forms.admin"), aria: { label: :allow_unregistered }, help_text: t("models.components.allow_unregistered_help", scope: "decidim.forms.admin") %>
13
+ </div>
14
+ <div class="row column">
15
+ <%= form.datetime_field :starts_at, label: t("models.components.starts_at", scope: "decidim.forms.admin"), aria: { label: :starts_at }, help_text: t("models.components.starts_at_help", scope: "decidim.forms.admin") %>
16
+ </div>
17
+ <div class="row column">
18
+ <%= form.datetime_field :ends_at, label: t("models.components.ends_at", scope: "decidim.forms.admin"), aria: { label: :ends_at }, help_text: t("models.components.ends_at_help", scope: "decidim.forms.admin") %>
19
+ </div>
20
+ <div class="row column">
21
+ <%= form.check_box :clean_after_publish, label: t("models.components.clean_after_publish", scope: "decidim.forms.admin"), aria: { label: :clean_after_publish } %>
22
+ </div>
23
+ <div class="row column">
24
+ <%= form.translated :editor, :announcement, toolbar: :content, lines: 10, label: t("models.components.announcement", scope: "decidim.forms.admin"), aria: { label: :announcement } %>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ </div>
@@ -1,33 +1,17 @@
1
- <% add_decidim_page_title(t("decidim.forms.admin.questionnaires.edit.title")) %>
1
+ <% add_decidim_page_title(t(".title")) %>
2
2
 
3
3
  <% if templates_defined? && choose_template? %>
4
4
  <%= render partial: "decidim/templates/admin/questionnaire_templates/choose", locals: { target: questionnaire, form_title: t("decidim.forms.admin.questionnaires.edit.title") } %>
5
5
  <% else %>
6
-
7
6
  <div class="item_show__header">
8
7
  <h1 class="item_show__header-title">
9
- <%= edit_questionnaire_title %>
10
-
11
- <% if allowed_to? :preview, :questionnaire %>
12
- <%= link_to t("preview", scope: "decidim.forms.admin.questionnaires.form"), public_url, class: "button button__sm button__secondary", target: :_blank, data: { "external-link": false } %>
13
- <% end %>
14
- <% if questionnaire.answers.any? %>
15
- <%= export_dropdown(current_component, questionnaire.id) if allowed_to? :export_answers, :questionnaire %>
16
- <% if allowed_to? :show, :questionnaire_answers %>
17
- <%= link_to t("actions.show", scope: "decidim.forms.admin.questionnaires"), questionnaire_participants_url, class: "button button__sm button__secondary new whitespace-nowrap" %>
18
- <% end %>
19
- <% else %>
20
- <button class="button button__sm button__secondary whitespace-nowrap" disabled><%= t("empty", scope: "decidim.forms.admin.questionnaires.answers") %></button>
21
- <% end %>
22
- <%= render partial: "decidim/admin/components/resource_action" %>
23
-
8
+ <%= t(".title") %>
24
9
  </h1>
25
10
  </div>
26
-
27
11
  <div class="item__edit item__edit-1col">
28
12
  <div class="item__edit-form">
29
- <%= decidim_form_for(@form, url: update_url, method: :put, html: { class: "form-defaults form edit_questionnaire" }) do |form| %>
30
- <%= render partial: "decidim/forms/admin/questionnaires/form", object: form %>
13
+ <%= decidim_form_for(@form, url: survey_path(@survey), html: { class: "form-defaults form edit_questionnaire" }) do |form| %>
14
+ <%= render partial: "form", object: form %>
31
15
  <div class="item__edit-sticky">
32
16
  <div class="item__edit-sticky-container">
33
17
  <%= form.submit t("save", scope: "decidim.forms.admin.questionnaires.edit"), class: "button button__sm button__secondary" %>
@@ -36,5 +20,4 @@
36
20
  <% end %>
37
21
  </div>
38
22
  </div>
39
-
40
23
  <% end %>
@@ -0,0 +1,47 @@
1
+ <% add_decidim_page_title(t("decidim.forms.admin.questionnaires.edit_questions.title")) %>
2
+
3
+ <% if templates_defined? && choose_template? %>
4
+ <%= render partial: "decidim/templates/admin/questionnaire_templates/choose", locals: { target: questionnaire, form_title: t("decidim.forms.admin.questionnaires.edit.title") } %>
5
+ <% else %>
6
+
7
+ <div class="questionnaire-questions">
8
+ <div class="item_show__header">
9
+ <h1 class="item_show__header-title">
10
+ <%= t("decidim.forms.admin.questionnaires.edit_questions.title") %>
11
+ <% if questionnaire.questions_editable? %>
12
+ <button class="button button__sm button__secondary add-question"><%= t("add_question", scope: "decidim.forms.admin.questionnaires.edit_questions") %></button>
13
+ <button class="button button__sm button__secondary add-separator"><%= t("add_separator", scope: "decidim.forms.admin.questionnaires.edit_questions") %></button>
14
+ <button class="button button__sm button__secondary add-title-and-description"><%= t("add_title_and_description", scope: "decidim.forms.admin.questionnaires.edit_questions") %></button>
15
+ <% end %>
16
+ <% if allowed_to? :preview, :questionnaire %>
17
+ <%= link_to t("preview", scope: "decidim.forms.admin.questionnaires.form"), public_url, class: "button button__sm button__transparent-secondary", target: :_blank, data: { "external-link": false } %>
18
+ <% end %>
19
+ <% if questionnaire.answers.any? %>
20
+ <%= export_dropdown(current_component, questionnaire.id) if allowed_to? :export_answers, :questionnaire %>
21
+ <% if allowed_to? :show, :questionnaire_answers %>
22
+ <%= link_to t("actions.show", scope: "decidim.forms.admin.questionnaires"), questionnaire_participants_url, class: "button button__sm button__secondary new whitespace-nowrap" %>
23
+ <% end %>
24
+ <% if allowed_to? :index, :questionnaire_publish_answers, survey: @survey %>
25
+ <%= link_to t("actions.publish_answers", scope: "decidim.forms.admin.questionnaires"), survey_publish_answers_path(survey_id: params[:id]), class: "button button__sm button__secondary new" %>
26
+ <% end %>
27
+ <% else %>
28
+ <button class="button button__sm button__secondary whitespace-nowrap" disabled><%= t("empty", scope: "decidim.forms.admin.questionnaires.answers") %></button>
29
+ <% end %>
30
+ </h1>
31
+ </div>
32
+ </div>
33
+
34
+ <div class="item__edit item__edit-1col">
35
+ <div class="item__edit-form">
36
+ <%= decidim_form_for(@form, url: update_questions_survey_path(@survey), method: :patch, html: { class: "form-defaults form edit_questions_survey" }) do |form| %>
37
+ <%= render partial: "decidim/forms/admin/questionnaires/questions_form", object: form %>
38
+ <div class="item__edit-sticky">
39
+ <div class="item__edit-sticky-container">
40
+ <%= form.submit t("save", scope: "decidim.forms.admin.questionnaires.edit"), class: "button button__sm button__secondary" %>
41
+ </div>
42
+ </div>
43
+ <% end %>
44
+ </div>
45
+ </div>
46
+
47
+ <% end %>
@@ -0,0 +1,51 @@
1
+ <% add_decidim_page_title(t(".title")) %>
2
+ <div class="card">
3
+ <div class="item_show__header item_show__header--with-action-options">
4
+ <h1 class="item_show__header-title">
5
+ <%= t(".title") %>
6
+ <%= link_to t("actions.new_survey", scope: "decidim.surveys"), surveys_path, method: :post, class: "button button__sm button__secondary" %>
7
+ <%= render partial: "decidim/admin/components/resource_action" %>
8
+ </h1>
9
+ </div>
10
+ <div class="table-scroll mt-8">
11
+ <table class="table-list">
12
+ <thead>
13
+ <tr>
14
+ <th><%= t("models.survey.fields.title", scope: "decidim.surveys") %></th>
15
+ <th><%= t("models.survey.fields.questions", scope: "decidim.surveys") %></th>
16
+ <th><%= t("models.survey.fields.answers", scope: "decidim.surveys") %></th>
17
+ <th><%= t("models.survey.fields.status", scope: "decidim.surveys") %></th>
18
+ <th><%= t("actions.title", scope: "decidim.surveys") %></th>
19
+ </tr>
20
+ </thead>
21
+ <tbody>
22
+ <% surveys.each do |survey| %>
23
+ <tr>
24
+ <td><%= decidim_sanitize_translated(survey.title) %></td>
25
+ <td><%= survey.questionnaire.questions.size %></td>
26
+ <td><%= survey.questionnaire.answers.size %></td>
27
+ <td><%= survey.open? ? t("models.survey.status.open", scope: "decidim.surveys") : t("models.survey.status.closed", scope: "decidim.surveys") %></td>
28
+ <td class="table-list__actions">
29
+ <%= icon_link_to "pencil-line", edit_survey_path(survey), t("actions.edit", scope: "decidim.surveys"), class: "action-icon--edit" %>
30
+ <%= icon_link_to "survey-line", edit_questions_survey_path(survey), t("actions.manage_questions", scope: "decidim.surveys"), class: "action-icon--copy" %>
31
+ <% if allowed_to? :preview, :questionnaire %>
32
+ <%= icon_link_to "eye-line", resource_locator(survey).path, t("actions.preview", scope: "decidim.surveys"), class: "action-icon--preview", target: :blank, data: { "external-link": false } %>
33
+ <% end %>
34
+ <% if allowed_to?(:update, :questionnaire) %>
35
+ <% if survey.published? %>
36
+ <%= icon_link_to "close-circle-line", unpublish_survey_path(survey), t("actions.unpublish", scope: "decidim.admin"), method: :put, class: "action-icon--unpublish" %>
37
+ <% elsif survey.clean_after_publish? %>
38
+ <%= icon_link_to "check-line", publish_survey_path(survey), t("actions.publish", scope: "decidim.admin"), method: :put, class: "action-icon--publish", data: { confirm: t("actions.answers_alert", scope: "decidim.surveys", answers_count: survey.questionnaire.answers.size) } %>
39
+ <% else %>
40
+ <%= icon_link_to "check-line", publish_survey_path(survey), t("actions.publish", scope: "decidim.admin"), method: :put, class: "action-icon--publish" %>
41
+ <% end %>
42
+ <% end %>
43
+ <%= resource_permissions_link(survey) %>
44
+ <%= icon_link_to "delete-bin-line", survey_path(survey), t("actions.destroy", scope: "decidim.surveys"), method: :delete, class: "action-icon--remove", data: { confirm: t("actions.confirm_destroy", scope: "decidim.surveys") } %>
45
+ </td>
46
+ </tr>
47
+ <% end %>
48
+ </tbody>
49
+ </table>
50
+ </div>
51
+ </div>
@@ -0,0 +1,13 @@
1
+ <% questionnaire.questions.each do |question| %>
2
+ <% next if question.question_type == "separator" %>
3
+ <% next unless question.survey_answers_published_at %>
4
+
5
+ <div class="mb-12">
6
+ <div class="mb-4">
7
+ <h2 class="h5 inline"><%= translated_attribute question.body %></h2>
8
+ <span><%= I18n.t("decidim.surveys.admin.publish_answers.index.answers", count: question.answers.count) %></span>
9
+ </div>
10
+
11
+ <%= chart_for_question(question.id) %>
12
+ </div>
13
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <% if surveys.length.zero? %>
2
+ <%= cell("decidim/announcement", t("decidim.surveys.surveys.no_surveys_warning"), callout_class: "warning" ) %>
3
+ <% else %>
4
+ <h2 class="h5 md:h3 decorator"><%= t("surveys_count", scope: "decidim.surveys.surveys.count", count: surveys.count) %></h2>
5
+
6
+ <div class="card__list-list">
7
+ <% surveys.each do |survey| %>
8
+ <%= card_for survey %>
9
+ <% end %>
10
+ </div>
11
+
12
+ <%= decidim_paginate surveys %>
13
+ <% end %>
@@ -0,0 +1,27 @@
1
+ <% add_decidim_meta_tags(
2
+ description: translated_attribute(current_component.participatory_space.try(:description)),
3
+ title: t("decidim.components.pagination.page_title",
4
+ component_name: translated_attribute(current_component.name),
5
+ current_page: surveys.current_page,
6
+ total_pages: surveys.total_pages ),
7
+ url: surveys_url,
8
+ resource: current_component
9
+ ) %>
10
+
11
+ <% add_decidim_page_title(t("decidim.surveys.directory.surveys.index.surveys")) %>
12
+
13
+ <% content_for :aside do %>
14
+ <% title = current_component.present? ? translated_attribute(current_component.name) : t("decidim.components.surveys.name") %>
15
+ <h1 class="title-decorator"><%= title %></h1>
16
+
17
+ <%= render layout: "decidim/shared/filters", locals: { filter_sections:, skip_to_id: "surveys" } do %>
18
+ <% end %>
19
+ <% end %>
20
+
21
+ <%= render layout: "layouts/decidim/shared/layout_two_col" do %>
22
+ <%= render partial: "decidim/shared/component_announcement" %>
23
+
24
+ <section id="surveys" class="layout-main__section layout-main__heading">
25
+ <%= render partial: "surveys" %>
26
+ </section>
27
+ <% end %>
@@ -0,0 +1,4 @@
1
+ var $surveys = $('#surveys');
2
+ $surveys.html('<%= j(render partial: "surveys").strip.html_safe %>');
3
+
4
+ document.dispatchEvent(new CustomEvent("ajax:loaded", { detail: $surveys[0] }));
@@ -0,0 +1,22 @@
1
+ <%= render layout: "layouts/decidim/shared/layout_center" do %>
2
+
3
+ <div class="text-center py-10">
4
+ <% if questionnaire.title.present? %>
5
+ <h1 class="title-decorator inline-block text-left mb-12">
6
+ <%= translated_attribute questionnaire.title %>
7
+ </h1>
8
+ <% end %>
9
+
10
+ <% if questionnaire.description.present? %>
11
+ <div class="text-left editor-content">
12
+ <%= decidim_sanitize_editor_admin translated_attribute questionnaire.description %>
13
+ </div>
14
+ <% end %>
15
+ </div>
16
+
17
+ <%= render partial: "decidim/shared/component_announcement" if current_component.manifest_name == "surveys" %>
18
+ <section>
19
+ <% body = t("decidim.forms.questionnaires.show.questionnaire_answered.body") %>
20
+ <%= cell("decidim/announcement", { title: t("decidim.forms.questionnaires.show.questionnaire_answered.title"), body: body }) %>
21
+ </section>
22
+ <% end %>
@@ -25,13 +25,10 @@ ar:
25
25
  surveys:
26
26
  actions:
27
27
  answer: إجابة
28
- name: الدراسة الاستقصائية
29
28
  settings:
30
29
  global:
31
30
  announcement: إعلان
32
31
  step:
33
- allow_answers: السماح بالإجابات
34
- allow_unregistered: السماح للمستخدمين غير المسجَّلِين بالإجابة على استطلاع الرأي
35
32
  announcement: إعلان
36
33
  events:
37
34
  surveys:
@@ -51,6 +48,10 @@ ar:
51
48
  object: إجابات على الدراسات الاستقصائية
52
49
  title: إجابات للمسوحات
53
50
  surveys:
51
+ actions:
52
+ edit: تعديل
53
+ preview: معاينة
54
+ title: الإجراءات
54
55
  admin:
55
56
  exports:
56
57
  survey_user_answers: إجابات المشاركين في الاستطلاع
@@ -17,21 +17,10 @@ bg:
17
17
  surveys:
18
18
  actions:
19
19
  answer: Отговор
20
- name: Анкета
21
20
  settings:
22
21
  global:
23
22
  announcement: Съобщение
24
- clean_after_publish: Изтриване на отговорите при публикуване на проучването
25
- ends_at: Отговорите се приемат до
26
- ends_at_help: Оставете празно при липса на конкретна дата
27
- scope_id: Обхват
28
- scopes_enabled: Обхватите са активирани
29
- starts_at: Отговорите се приемат от
30
- starts_at_help: Оставете празно при липса на конкретна дата
31
23
  step:
32
- allow_answers: Разрешаване на отговори
33
- allow_unregistered: Разрешаване на нерегистрирани потребители да отговарят на въпросите в проучването
34
- allow_unregistered_help: Ако е активно, няма да се изисква влизане, за да се отговори на анкетата. Това може да доведе до лоши или ненадеждни данни и ще e по-уязвимo на автоматизирани атаки. Използвайте с повишено внимание! Имайте предвид, че участник може да отговори на едно и също проучване няколко пъти, като използва различни браузъри или функцията за „частно сърфиране“ на своя уеб браузър.
35
24
  announcement: Съобщение
36
25
  events:
37
26
  surveys:
@@ -54,9 +43,6 @@ bg:
54
43
  answers_count: Отговори
55
44
  surveys:
56
45
  admin:
57
- component:
58
- actions:
59
- answers_alert: Ако публикувате компонента, всички резултати ще бъдат премахнати.
60
46
  exports:
61
47
  survey_user_answers: Отговори на участник в анкети
62
48
  surveys:
@@ -13,25 +13,20 @@ ca:
13
13
  one: Resposta
14
14
  other: Respostes
15
15
  decidim:
16
+ admin:
17
+ admin_log:
18
+ changeset:
19
+ surveys: Enquestes
16
20
  components:
17
21
  surveys:
18
22
  actions:
19
23
  answer: Respondre
20
- name: Enquesta
24
+ name: Enquestes
21
25
  settings:
26
+ announcement: Avís
22
27
  global:
23
28
  announcement: Avís
24
- clean_after_publish: Esborrar les respostes en publicar l'enquesta
25
- ends_at: Respostes acceptades fins a
26
- ends_at_help: Deixar en blanc per cap data específica
27
- scope_id: Àmbit
28
- scopes_enabled: Àmbits habilitats
29
- starts_at: Respostes acceptades de
30
- starts_at_help: Deixar en blanc per cap data específica
31
29
  step:
32
- allow_answers: Permetre respostes
33
- allow_unregistered: Permet a usuàries no registrades contestar l'enquesta
34
- allow_unregistered_help: Si està activat, no serà necessari iniciar sessió per a respondre l'enquesta. Això pot implicar una recollida de dades pobra o poc fiable i serà més vulnerable a atacs automatitzats. Fes-ho servir amb precaució! És important que una participant pugui respondre a la mateixa enquesta diverses vegades, fent servir diferents navegador o la funció de "navegació privada" del seu navegadro web.
35
30
  announcement: Avís
36
31
  events:
37
32
  surveys:
@@ -53,18 +48,78 @@ ca:
53
48
  statistics:
54
49
  answers_count: Respostes
55
50
  surveys:
51
+ actions:
52
+ answers_alert: L'opció d'esborrar les respostes en publicar l'enquesta està activada. Si segueixes, s'esborraran les %{answers_count} existents actualment.
53
+ confirm_destroy: Segur que ho vols eliminar?
54
+ destroy: Eliminar
55
+ edit: Editar
56
+ manage_questions: Gestionar les preguntes
57
+ new_survey: Nova enquesta
58
+ preview: Previsualitzar
59
+ title: Accions
56
60
  admin:
57
- component:
58
- actions:
59
- answers_alert: Si publiques el component, s'eliminaran tots els resultats.
61
+ answers:
62
+ index:
63
+ title: "%{total} respostes totals"
64
+ show:
65
+ title: 'Resposta #%{number}'
60
66
  exports:
61
67
  survey_user_answers: Respostes de les participants de l'enquesta
68
+ publish_answers:
69
+ index:
70
+ answers:
71
+ one: "%{count} resposta"
72
+ other: "%{count} respuestas"
73
+ description: |-
74
+ Publicant les respostes a les preguntes de l'enquesta, aquestes seran visibles per a les visitants.
75
+ Pots seleccionar les preguntes de les que vols publicar les respostes marcant el "checkbox" de cadascuna d'elles.
76
+ Només pots publicar les respostes de les preguntes que són del tipus de resposta: "Opció única", "Opció múltiple", "Matriu (opció única)", "Matriu (opció múltiple), i "Ordenació".
77
+ status:
78
+ not_published: No publicades
79
+ published: Publicades
80
+ title: Publicar respostes
62
81
  surveys:
82
+ create:
83
+ invalid: S'ha produït un error creant l'enquesta.
84
+ success: Enquesta creada correctament.
85
+ destroy:
86
+ success: Enquesta eliminada correctament.
87
+ edit:
88
+ title: Editar l'enquesta
89
+ index:
90
+ title: Enquestes
91
+ publish:
92
+ invalid: S'ha produït un error en publicar aquesta enquesta.
93
+ success: Enquesta publicada correctament.
94
+ unpublish:
95
+ invalid: S'ha produït un error en despublicar aquesta enquesta.
96
+ success: Enquesta despublicada correctament.
63
97
  update:
64
98
  invalid: S'ha produït un error en desar l'enquesta.
65
99
  success: Enquesta desada correctament.
100
+ admin_log:
101
+ survey:
102
+ create: "%{user_name} ha creat l'enquesta %{resource_name} a l'espai de participació %{space_name}"
103
+ delete: "%{user_name} ha eliminat l'enquesta %{resource_name} a l'espai de participació %{space_name}"
104
+ publish: "%{user_name} ha publicat l'enquesta %{resource_name} a l'espai de participació %{space_name}"
105
+ unpublish: "%{user_name} ha despublicat l'enquesta %{resource_name} a l'espai de participació %{space_name}"
106
+ update: "%{user_name} ha actualitzat l'enquesta %{resource_name} de l'espai de participació %{space_name}"
107
+ directory:
108
+ surveys:
109
+ index:
110
+ surveys: Enquestes
66
111
  last_activity:
67
112
  new_survey: 'Nova enquesta:'
113
+ models:
114
+ survey:
115
+ fields:
116
+ answers: Respostes
117
+ questions: Preguntes
118
+ status: Estat
119
+ title: Títol
120
+ status:
121
+ closed: Tancada
122
+ open: Oberta
68
123
  survey_confirmation_mailer:
69
124
  confirmation:
70
125
  body: Has respost amb èxit a l'enquesta %{questionnaire_title} dins de %{participatory_space}
@@ -75,3 +130,17 @@ ca:
75
130
  invalid: S'ha produït un error en respondre l'enquesta.
76
131
  spam_detected: Hi ha hagut un problema responent el formulari. Potser has anat massa ràpid, ho pots tornar a intentar?
77
132
  success: Enquesta resposta correctament.
133
+ count:
134
+ surveys_count:
135
+ one: "%{count} enquesta"
136
+ other: "%{count} enquestes"
137
+ filters:
138
+ all: Totes
139
+ state_values:
140
+ closed: Tancada
141
+ open: Obertes
142
+ no_surveys_warning: No hi ha enquestes que coincideixin amb el teu criteri de cerca o no hi ha cap enquesta.
143
+ show:
144
+ closed: Tancada
145
+ open: Oberta
146
+ questions: preguntes