decidim-surveys 0.29.1 → 0.30.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- 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 -1
- 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/bn-BD.yml +1 -0
- data/config/locales/bs-BA.yml +1 -0
- 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 +85 -16
- 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 -10
- data/config/locales/ja.yml +80 -13
- 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 -10
- 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 +2 -2
- data/lib/decidim/api/survey_type.rb +11 -2
- data/lib/decidim/api/surveys_type.rb +5 -8
- 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 +51 -19
- data/app/commands/decidim/surveys/create_survey.rb +0 -19
- 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("
|
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
|
-
<%=
|
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:
|
30
|
-
<%= render partial: "
|
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,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 %>
|
data/config/locales/ar.yml
CHANGED
@@ -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: إجابات المشاركين في الاستطلاع
|
data/config/locales/bg.yml
CHANGED
@@ -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:
|
@@ -0,0 +1 @@
|
|
1
|
+
bn:
|
@@ -0,0 +1 @@
|
|
1
|
+
bs:
|
data/config/locales/ca.yml
CHANGED
@@ -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:
|
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
|
-
|
58
|
-
|
59
|
-
|
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
|