decidim-forms 0.17.2 → 0.18.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/decidim/forms/concerns/has_questionnaire.rb +1 -0
- data/app/forms/decidim/forms/questionnaire_form.rb +1 -0
- data/app/helpers/decidim/forms/application_helper.rb +19 -0
- data/app/models/decidim/forms/answer.rb +12 -0
- data/app/views/decidim/forms/admin/questionnaires/_answer_option_template.html.erb +7 -0
- data/app/views/decidim/forms/admin/questionnaires/_form.html.erb +9 -7
- data/app/views/decidim/forms/admin/questionnaires/_question.html.erb +1 -7
- data/app/views/decidim/forms/questionnaires/show.html.erb +6 -0
- data/config/locales/ar.yml +82 -0
- data/lib/decidim/forms/test/shared_examples/manage_questionnaires.rb +5 -5
- data/lib/decidim/forms/version.rb +1 -1
- metadata +10 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d354b6d1272004fbe129e57e706ecb2bce8f7f37e5a2f32c530d8df96d862e98
|
4
|
+
data.tar.gz: 8cb45ad3b2d7b7fa4518720215d4fa89428345e1fb4825dd4ad6768f967a11d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 253ca5e79fc6adedad3512672df12413dd3eba8c7e26b75b0bf0e984b99c04694485361040c84f06370793fc54e8d8d802ab886fd75e60955ffcfb94bc421d72
|
7
|
+
data.tar.gz: 3e73bed78008ffaa519a264948234aa8af20b3c4279e16076214454c8453988f9f4ebf2f92b1d6d7b6a659e5f9a967f25b4c03126ae3a8aa339ea3f9a3b2ae2e
|
@@ -5,6 +5,7 @@ module Decidim
|
|
5
5
|
# This class holds a Form to answer a questionnaire from Decidim's public page.
|
6
6
|
class QuestionnaireForm < Decidim::Form
|
7
7
|
attribute :answers, Array[AnswerForm]
|
8
|
+
attribute :user_group_id, Integer
|
8
9
|
|
9
10
|
attribute :tos_agreement, Boolean
|
10
11
|
validates :tos_agreement, allow_nil: false, acceptance: true
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Forms
|
5
|
+
# Custom helpers, scoped to the forms engine.
|
6
|
+
module ApplicationHelper
|
7
|
+
# Show cell for selected models
|
8
|
+
def show_represent_user_group?
|
9
|
+
model_name = questionnaire_for.model_name.element
|
10
|
+
|
11
|
+
permited_models.include?(model_name)
|
12
|
+
end
|
13
|
+
|
14
|
+
def permited_models
|
15
|
+
%(meeting)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -5,6 +5,7 @@ module Decidim
|
|
5
5
|
# The data store for an Answer in the Decidim::Forms
|
6
6
|
class Answer < Forms::ApplicationRecord
|
7
7
|
include Decidim::DataPortability
|
8
|
+
include Decidim::NewsletterParticipant
|
8
9
|
|
9
10
|
belongs_to :user, class_name: "Decidim::User", foreign_key: "decidim_user_id"
|
10
11
|
belongs_to :questionnaire, class_name: "Questionnaire", foreign_key: "decidim_questionnaire_id"
|
@@ -30,6 +31,17 @@ module Decidim
|
|
30
31
|
Decidim::Forms::DataPortabilityUserAnswersSerializer
|
31
32
|
end
|
32
33
|
|
34
|
+
def self.newsletter_participant_ids(component)
|
35
|
+
surveys = Decidim::Surveys::Survey.joins(:component, :questionnaire).where(component: component)
|
36
|
+
questionnaires = Decidim::Forms::Questionnaire.includes(:questionnaire_for)
|
37
|
+
.where(questionnaire_for_type: Decidim::Surveys::Survey.name, questionnaire_for_id: surveys.pluck(:id))
|
38
|
+
|
39
|
+
answers = Decidim::Forms::Answer.joins(:questionnaire)
|
40
|
+
.where(questionnaire: questionnaires)
|
41
|
+
|
42
|
+
answers.pluck(:decidim_user_id).flatten.compact.uniq
|
43
|
+
end
|
44
|
+
|
33
45
|
private
|
34
46
|
|
35
47
|
def user_questionnaire_same_organization
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<% question = form.object %>
|
2
|
+
|
3
|
+
<script type="text/template" class="decidim-template" id="<%= template_id %>">
|
4
|
+
<%= fields_for "questionnaire[questions][#{question.to_param}][answer_options][]", blank_answer_option do |answer_option_form| %>
|
5
|
+
<%= render "decidim/forms/admin/questionnaires/answer_option", form: answer_option_form, question: question, editable: editable %>
|
6
|
+
<% end %>
|
7
|
+
</script>
|
@@ -22,11 +22,12 @@
|
|
22
22
|
|
23
23
|
<div class="questionnaire-questions">
|
24
24
|
<% if questionnaire.questions_editable? %>
|
25
|
-
|
26
|
-
|
27
|
-
<%= render "decidim/forms/admin/questionnaires/question", form: question_form, id: tabs_id_for_question(blank_question), editable: questionnaire.questions_editable
|
28
|
-
|
29
|
-
|
25
|
+
<%= fields_for "questionnaire[questions][#{blank_question.to_param}]", blank_question do |question_form| %>
|
26
|
+
<script type="text/template" class="decidim-template">
|
27
|
+
<%= render "decidim/forms/admin/questionnaires/question", form: question_form, id: tabs_id_for_question(blank_question), editable: questionnaire.questions_editable?, child_template_selector: "#answer-option-template-dummy" %>
|
28
|
+
</script>
|
29
|
+
<%= render "decidim/forms/admin/questionnaires/answer_option_template", form: question_form, editable: questionnaire.questions_editable?, template_id: "answer-option-template-dummy" %>
|
30
|
+
<% end %>
|
30
31
|
<% else %>
|
31
32
|
<div class="callout warning">
|
32
33
|
<%= t(".already_answered_warning") %>
|
@@ -34,9 +35,10 @@
|
|
34
35
|
<% end %>
|
35
36
|
|
36
37
|
<div class="questionnaire-questions-list">
|
37
|
-
<% @form.questions.
|
38
|
+
<% @form.questions.each_with_index do |question, index| %>
|
38
39
|
<%= fields_for "questionnaire[questions][]", question do |question_form| %>
|
39
|
-
<%= render "decidim/forms/admin/questionnaires/question", form: question_form, id: tabs_id_for_question(question), editable: questionnaire.questions_editable
|
40
|
+
<%= render "decidim/forms/admin/questionnaires/question", form: question_form, id: tabs_id_for_question(question), editable: questionnaire.questions_editable?, child_template_selector: "#answer-option-template-#{index}" %>
|
41
|
+
<%= render "decidim/forms/admin/questionnaires/answer_option_template", form: question_form, editable: questionnaire.questions_editable?, template_id: "answer-option-template-#{index}" %>
|
40
42
|
<% end %>
|
41
43
|
<% end %>
|
42
44
|
</div>
|
@@ -81,13 +81,7 @@
|
|
81
81
|
<%= form.hidden_field :position, value: question.position || 0, disabled: !editable %>
|
82
82
|
<%= form.hidden_field :deleted, disabled: !editable %>
|
83
83
|
|
84
|
-
<div class="questionnaire-question-answer-options">
|
85
|
-
<template>
|
86
|
-
<%= fields_for "questionnaire[questions][#{question.to_param}][answer_options][]", blank_answer_option do |answer_option_form| %>
|
87
|
-
<%= render "decidim/forms/admin/questionnaires/answer_option", form: answer_option_form, question: question, editable: editable %>
|
88
|
-
<% end %>
|
89
|
-
</template>
|
90
|
-
|
84
|
+
<div class="questionnaire-question-answer-options" data-template="<%= child_template_selector %>">
|
91
85
|
<div class="questionnaire-question-answer-options-list">
|
92
86
|
<% question.answer_options.each do |answer_option| %>
|
93
87
|
<%= fields_for "questionnaire[questions][#{question.to_param}][answer_options][]", answer_option do |answer_option_form| %>
|
@@ -47,6 +47,12 @@
|
|
47
47
|
</div>
|
48
48
|
<% end %>
|
49
49
|
|
50
|
+
<% if show_represent_user_group? %>
|
51
|
+
<div class="row column represent-user-group">
|
52
|
+
<%= cell("decidim/represent_user_group", form) %>
|
53
|
+
</div>
|
54
|
+
<% end %>
|
55
|
+
|
50
56
|
<div class="row column tos-agreement">
|
51
57
|
<%= form.check_box :tos_agreement, label: t(".tos_agreement"), id: "questionnaire_tos_agreement", disabled: !current_participatory_space.can_participate?(current_user) %>
|
52
58
|
<div class="help-text">
|
@@ -0,0 +1,82 @@
|
|
1
|
+
ar:
|
2
|
+
activemodel:
|
3
|
+
attributes:
|
4
|
+
answer:
|
5
|
+
body: إجابة
|
6
|
+
question:
|
7
|
+
max_choices: أقصى عدد من الخيارات
|
8
|
+
question_type: نوع
|
9
|
+
questionnaire_question:
|
10
|
+
mandatory: إلزامي
|
11
|
+
errors:
|
12
|
+
models:
|
13
|
+
answer:
|
14
|
+
attributes:
|
15
|
+
choices:
|
16
|
+
missing: ليست كاملة
|
17
|
+
too_many: كثير جدا
|
18
|
+
decidim:
|
19
|
+
forms:
|
20
|
+
admin:
|
21
|
+
models:
|
22
|
+
components:
|
23
|
+
description: وصف
|
24
|
+
tos: شروط الخدمة
|
25
|
+
questionnaires:
|
26
|
+
answer_option:
|
27
|
+
answer_option: خيار الإجابة
|
28
|
+
free_text: نص حر
|
29
|
+
remove: إزالة
|
30
|
+
statement: بيان
|
31
|
+
edit:
|
32
|
+
save: حفظ
|
33
|
+
title: عنوان
|
34
|
+
form:
|
35
|
+
add_question: أضف سؤال
|
36
|
+
already_answered_warning: تمت الإجابة على النموذج من قبل بعض المستخدمين حتى لا تتمكن من تعديل أسئلته.
|
37
|
+
question:
|
38
|
+
add_answer_option: إضافة خيار الإجابة
|
39
|
+
any: أي
|
40
|
+
description: وصف
|
41
|
+
down: أسفل
|
42
|
+
question: سؤال
|
43
|
+
remove: إزالة
|
44
|
+
statement: بيان
|
45
|
+
up: فوق
|
46
|
+
update:
|
47
|
+
invalid: كانت هناك مشكلة في حفظ النموذج.
|
48
|
+
success: تم حفظ النماذج بنجاح.
|
49
|
+
errors:
|
50
|
+
answer:
|
51
|
+
body: لا يمكن أن يكون الجسم فارغًا
|
52
|
+
question_types:
|
53
|
+
long_answer: اجابة طويلة
|
54
|
+
multiple_option: خيار متعدد
|
55
|
+
short_answer: اجابة قصيرة
|
56
|
+
single_option: خيار واحد
|
57
|
+
sorting: فرز
|
58
|
+
questionnaires:
|
59
|
+
answer:
|
60
|
+
invalid: كانت هناك مشكلة في الإجابة على النموذج.
|
61
|
+
success: نموذج أجاب بنجاح.
|
62
|
+
question:
|
63
|
+
max_choices: 'خيارات ماكس: %{n}'
|
64
|
+
show:
|
65
|
+
answer_questionnaire:
|
66
|
+
anonymous_user_message: <a href="%{sign_in_link}">قم بتسجيل الدخول بحسابك</a> أو <a href="%{sign_up_link}">اشترك</a> للإجابة على النموذج
|
67
|
+
title: أجب عن النموذج
|
68
|
+
are_you_sure: لا يمكن التراجع عن هذا الإجراء ولن تتمكن من تعديل إجاباتك. هل أنت واثق؟
|
69
|
+
questionnaire_answered:
|
70
|
+
body: لقد أجبت بالفعل على هذا النموذج.
|
71
|
+
title: تمت الاجابة مسبقا
|
72
|
+
questionnaire_closed:
|
73
|
+
body: النموذج مغلق ولا يمكن الرد عليه.
|
74
|
+
title: شكل مغلق
|
75
|
+
questionnaire_for_private_users:
|
76
|
+
body: النموذج متاح فقط للمستخدمين من القطاع الخاص
|
77
|
+
title: شكل مغلق
|
78
|
+
submit: خضع
|
79
|
+
tos_agreement: من خلال المشاركة ، فإنك تقبل شروط الخدمة
|
80
|
+
user_answers_serializer:
|
81
|
+
created_at: أجاب على
|
82
|
+
id: معرف الإجابة
|
@@ -504,9 +504,9 @@ shared_examples_for "manage questionnaires" do
|
|
504
504
|
within ".questionnaire-question:last-of-type" do
|
505
505
|
click_button "Up"
|
506
506
|
end
|
507
|
-
|
508
|
-
it_behaves_like "switching questions order"
|
509
507
|
end
|
508
|
+
|
509
|
+
it_behaves_like "switching questions order"
|
510
510
|
end
|
511
511
|
|
512
512
|
context "when moving a question down" do
|
@@ -522,9 +522,9 @@ shared_examples_for "manage questionnaires" do
|
|
522
522
|
it "properly decides which button to show after adding/removing questions" do
|
523
523
|
click_button "Add question"
|
524
524
|
|
525
|
-
expect(page.find(".questionnaire-question:nth-
|
526
|
-
expect(page.find(".questionnaire-question:nth-
|
527
|
-
expect(page.find(".questionnaire-question:nth-
|
525
|
+
expect(page.find(".questionnaire-question:nth-of-type(1)")).to look_like_first_question
|
526
|
+
expect(page.find(".questionnaire-question:nth-of-type(2)")).to look_like_intermediate_question
|
527
|
+
expect(page.find(".questionnaire-question:nth-of-type(3)")).to look_like_last_question
|
528
528
|
|
529
529
|
within ".questionnaire-question:first-of-type" do
|
530
530
|
click_button "Remove"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decidim-forms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josep Jaume Rey Peroy
|
@@ -19,42 +19,42 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - '='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.
|
22
|
+
version: 0.18.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - '='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
29
|
+
version: 0.18.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: decidim-admin
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
requirements:
|
34
34
|
- - '='
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: 0.
|
36
|
+
version: 0.18.0
|
37
37
|
type: :development
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
41
|
- - '='
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 0.
|
43
|
+
version: 0.18.0
|
44
44
|
- !ruby/object:Gem::Dependency
|
45
45
|
name: decidim-dev
|
46
46
|
requirement: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
48
|
- - '='
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version: 0.
|
50
|
+
version: 0.18.0
|
51
51
|
type: :development
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
54
54
|
requirements:
|
55
55
|
- - '='
|
56
56
|
- !ruby/object:Gem::Version
|
57
|
-
version: 0.
|
57
|
+
version: 0.18.0
|
58
58
|
description: A forms gem for decidim.
|
59
59
|
email:
|
60
60
|
- josepjaume@gmail.com
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- app/forms/decidim/forms/answer_form.rb
|
94
94
|
- app/forms/decidim/forms/questionnaire_form.rb
|
95
95
|
- app/helpers/decidim/forms/admin/application_helper.rb
|
96
|
+
- app/helpers/decidim/forms/application_helper.rb
|
96
97
|
- app/models/concerns/decidim/forms/has_questionnaire.rb
|
97
98
|
- app/models/decidim/forms/answer.rb
|
98
99
|
- app/models/decidim/forms/answer_choice.rb
|
@@ -102,12 +103,14 @@ files:
|
|
102
103
|
- app/models/decidim/forms/questionnaire.rb
|
103
104
|
- app/queries/decidim/forms/questionnaire_user_answers.rb
|
104
105
|
- app/views/decidim/forms/admin/questionnaires/_answer_option.html.erb
|
106
|
+
- app/views/decidim/forms/admin/questionnaires/_answer_option_template.html.erb
|
105
107
|
- app/views/decidim/forms/admin/questionnaires/_form.html.erb
|
106
108
|
- app/views/decidim/forms/admin/questionnaires/_question.html.erb
|
107
109
|
- app/views/decidim/forms/admin/questionnaires/edit.html.erb
|
108
110
|
- app/views/decidim/forms/questionnaires/_answer.html.erb
|
109
111
|
- app/views/decidim/forms/questionnaires/show.html.erb
|
110
112
|
- config/locales/ar-SA.yml
|
113
|
+
- config/locales/ar.yml
|
111
114
|
- config/locales/ca.yml
|
112
115
|
- config/locales/cs-CZ.yml
|
113
116
|
- config/locales/cs.yml
|