decidim-proposals 0.6.8 → 0.7.0
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/commands/decidim/proposals/create_proposal.rb +12 -0
- data/app/commands/decidim/proposals/vote_proposal.rb +2 -0
- data/app/controllers/decidim/proposals/application_controller.rb +18 -0
- data/app/controllers/decidim/proposals/proposals_controller.rb +7 -1
- data/app/helpers/decidim/proposals/application_helper.rb +14 -0
- data/app/helpers/decidim/proposals/proposal_votes_helper.rb +45 -1
- data/app/models/decidim/proposals/proposal.rb +19 -0
- data/app/services/decidim/proposals/proposal_search.rb +1 -1
- data/app/views/decidim/proposals/admin/proposals/index.html.erb +11 -0
- data/app/views/decidim/proposals/proposals/_filters.html.erb +1 -1
- data/app/views/decidim/proposals/proposals/_vote_button.html.erb +9 -7
- data/app/views/decidim/proposals/proposals/_voting_rules.html.erb +35 -0
- data/app/views/decidim/proposals/proposals/index.html.erb +8 -4
- data/app/views/decidim/proposals/proposals/show.html.erb +11 -4
- data/config/locales/ca.yml +18 -6
- data/config/locales/en.yml +17 -5
- data/config/locales/es.yml +17 -5
- data/config/locales/eu.yml +28 -16
- data/config/locales/fi.yml +23 -11
- data/config/locales/fr.yml +21 -9
- data/config/locales/it.yml +17 -5
- data/config/locales/nl.yml +19 -7
- data/config/locales/pl.yml +17 -5
- data/config/locales/ru.yml +183 -0
- data/config/locales/uk.yml +36 -24
- data/lib/decidim/proposals/feature.rb +10 -8
- data/lib/decidim/proposals/test/factories.rb +29 -1
- data/lib/decidim/proposals/version.rb +10 -0
- metadata +25 -51
- data/app/views/decidim/proposals/proposals/_votes_limit.html.erb +0 -21
@@ -0,0 +1,183 @@
|
|
1
|
+
ru:
|
2
|
+
activemodel:
|
3
|
+
attributes:
|
4
|
+
proposal:
|
5
|
+
body: Основной текст
|
6
|
+
category_id: Категория
|
7
|
+
scope_id: Охват
|
8
|
+
title: Название
|
9
|
+
user_group_id: Внести предложение как
|
10
|
+
proposal_answer:
|
11
|
+
answer: Ответить
|
12
|
+
decidim:
|
13
|
+
features:
|
14
|
+
proposals:
|
15
|
+
actions:
|
16
|
+
create: Внести
|
17
|
+
vote: Голосовать
|
18
|
+
name: Предложения
|
19
|
+
settings:
|
20
|
+
global:
|
21
|
+
announcement: Объявление
|
22
|
+
attachments_allowed: Разрешить вложения
|
23
|
+
comments_enabled: Комментарии включены
|
24
|
+
geocoding_enabled: Геокодирование включено
|
25
|
+
maximum_votes_per_proposal: Максимальное количество голосов на одно предложение
|
26
|
+
new_proposal_help_text: Подсказки по созданию нового предложения
|
27
|
+
official_proposals_enabled: Включена возможность выдвигать официальные предложения
|
28
|
+
proposal_answering_enabled: Включена возможность отвечать на предложения
|
29
|
+
proposal_limit: Максимальное количество предложений на одного участника
|
30
|
+
vote_limit: Максимальное количество голосов для одного пользователя
|
31
|
+
step:
|
32
|
+
announcement: Объявление
|
33
|
+
comments_blocked: Комментарии выключены
|
34
|
+
creation_enabled: Включена возможность создания предложений
|
35
|
+
proposal_answering_enabled: Включена возможность отвечать на предложения
|
36
|
+
votes_blocked: Голосование выключено
|
37
|
+
votes_enabled: Голосование включено
|
38
|
+
votes_hidden: Голоса скрыты (если голосование включено, то при поставленной здесь птичке будет скрыто количество голосов)
|
39
|
+
proposals:
|
40
|
+
actions:
|
41
|
+
answer: Ответить
|
42
|
+
new: Новая
|
43
|
+
title: Действия
|
44
|
+
admin:
|
45
|
+
actions:
|
46
|
+
preview: Предпросмотр
|
47
|
+
exports:
|
48
|
+
comments: Комментарии
|
49
|
+
proposals: Предложения
|
50
|
+
models:
|
51
|
+
proposal:
|
52
|
+
name: Предложение
|
53
|
+
proposal_answers:
|
54
|
+
edit:
|
55
|
+
accepted: Принято
|
56
|
+
answer_proposal: Ответить
|
57
|
+
evaluating: Рассматривается
|
58
|
+
rejected: Отклонено
|
59
|
+
title: Ответ на предложение %{title}
|
60
|
+
proposals:
|
61
|
+
answer:
|
62
|
+
invalid: При попытке ответить на это предложение возникла проблема
|
63
|
+
success: Успешно дан ответ на предложение
|
64
|
+
create:
|
65
|
+
invalid: При попытке выдвинуть предложение возникла проблема
|
66
|
+
success: Предложение успешно внесено
|
67
|
+
form:
|
68
|
+
attachment_legend: "(Необязательно) Добавить вложение"
|
69
|
+
select_a_category: Выберите категорию
|
70
|
+
index:
|
71
|
+
title: Предложения
|
72
|
+
new:
|
73
|
+
create: Внести
|
74
|
+
title: Внести предложение
|
75
|
+
answers:
|
76
|
+
accepted: Принято
|
77
|
+
evaluating: Рассматривается
|
78
|
+
not_answered: Без ответов
|
79
|
+
rejected: Отклонено
|
80
|
+
create:
|
81
|
+
error: При сохранении этого предложения произошли ошибки.
|
82
|
+
success: Предложение успешно внесено.
|
83
|
+
models:
|
84
|
+
proposal:
|
85
|
+
fields:
|
86
|
+
category: Категория
|
87
|
+
id: Идентификатор
|
88
|
+
official_proposal: Официальное предложение
|
89
|
+
scope: Охват
|
90
|
+
state: Cостояние
|
91
|
+
title: Название
|
92
|
+
votes: Голоса
|
93
|
+
new:
|
94
|
+
limit_reached: Вы не можете вносить новые предложения, так как вы превысили лимит.
|
95
|
+
proposal_votes:
|
96
|
+
create:
|
97
|
+
error: При голосовании по этому предложению произошли ошибки.
|
98
|
+
proposals:
|
99
|
+
author:
|
100
|
+
deleted: Удаленный пользователь
|
101
|
+
verified_user_group: Проверенная организация
|
102
|
+
count:
|
103
|
+
proposals_count:
|
104
|
+
one: 1 предложение
|
105
|
+
few: "%{count} предложения"
|
106
|
+
many: "%{count} предложений"
|
107
|
+
other: "%{count} предложений"
|
108
|
+
filters:
|
109
|
+
accepted: Принято
|
110
|
+
activity: Деятельность
|
111
|
+
all: Все
|
112
|
+
category: Категория
|
113
|
+
category_prompt: Выберите категорию
|
114
|
+
citizens: Граждане
|
115
|
+
evaluating: Рассматривается
|
116
|
+
official: Официальный
|
117
|
+
origin: Источник
|
118
|
+
rejected: Отклонено
|
119
|
+
related_to: Связано с
|
120
|
+
scope_prompt: Выбрать охват
|
121
|
+
scopes: Охваты
|
122
|
+
search: Поиск
|
123
|
+
state: Cостояние
|
124
|
+
voted: Проголосованные
|
125
|
+
filters_small_view:
|
126
|
+
close_modal: Закрыть окошко
|
127
|
+
filter: Отобрать
|
128
|
+
filter_by: 'Отобрать по признаку:'
|
129
|
+
unfold: Развернуть
|
130
|
+
index:
|
131
|
+
new_proposal: Новое предложение
|
132
|
+
proposal_limit_reached: Достигнуто максимальное количество предложений
|
133
|
+
view_proposal: Просмотреть предложение
|
134
|
+
linked_proposals:
|
135
|
+
proposal_votes:
|
136
|
+
one: <span class="card--list__data__number">1</span> голос
|
137
|
+
few: <span class="card--list__data__number">%{count}</span> голоса
|
138
|
+
many: <span class="card--list__data__number">%{count}</span> голосов
|
139
|
+
other: <span class="card--list__data__number">%{count}</span> голосов
|
140
|
+
new:
|
141
|
+
attachment_legend: "(Необязательно) Добавить вложение"
|
142
|
+
back: Вернуться
|
143
|
+
select_a_category: Пожалуйста, выберите категорию
|
144
|
+
send: Отправить
|
145
|
+
title: Новое предложение
|
146
|
+
orders:
|
147
|
+
label: 'Упорядочить предложения по:'
|
148
|
+
most_voted: С наибольшим количеством голосов
|
149
|
+
random: Произвольно
|
150
|
+
recent: Недавние
|
151
|
+
proposal:
|
152
|
+
view_proposal: Просмотреть предложение
|
153
|
+
show:
|
154
|
+
proposal_accepted_reason: 'Это предложение было принято, поскольку:'
|
155
|
+
proposal_in_evaluation_reason: Это предложение сейчас рассматривается
|
156
|
+
proposal_rejected_reason: 'Это предложение было отклонено, поскольку:'
|
157
|
+
report: Пожаловаться
|
158
|
+
vote_button:
|
159
|
+
already_voted: Уже проголосовали
|
160
|
+
maximum_votes_reached: Достигнуто предельное количество голосов
|
161
|
+
no_votes_remaining: Больше не осталось голосов
|
162
|
+
vote: Голосовать
|
163
|
+
votes_blocked: Голосование отключено
|
164
|
+
votes_count:
|
165
|
+
count:
|
166
|
+
one: ГОЛОС
|
167
|
+
few: ГОЛОСА
|
168
|
+
many: ГОЛОСОВ
|
169
|
+
other: ГОЛОСА
|
170
|
+
voting_rules:
|
171
|
+
maximum_votes_per_proposal:
|
172
|
+
description: Каждое предложение может получить максимум %{limit} голосов.
|
173
|
+
proposal_limit:
|
174
|
+
description: Вы можете внести до %{limit} предложений.
|
175
|
+
title: 'Голосование регулируется следующими правилами:'
|
176
|
+
vote_limit:
|
177
|
+
description: Вы можете проголосовать до %{limit} предложений.
|
178
|
+
left: Осталось
|
179
|
+
votes: Голоса
|
180
|
+
resource_links:
|
181
|
+
included_proposals:
|
182
|
+
proposal_projects: 'Предложение представлено в проектах:'
|
183
|
+
proposal_results: 'Предложения, представленные в этих итогах:'
|
data/config/locales/uk.yml
CHANGED
@@ -6,14 +6,14 @@ uk:
|
|
6
6
|
category_id: Розділ
|
7
7
|
scope_id: Терен
|
8
8
|
title: Назва
|
9
|
-
user_group_id:
|
9
|
+
user_group_id: Внести пропозицію як
|
10
10
|
proposal_answer:
|
11
|
-
answer:
|
11
|
+
answer: Відповісти
|
12
12
|
decidim:
|
13
13
|
features:
|
14
14
|
proposals:
|
15
15
|
actions:
|
16
|
-
create:
|
16
|
+
create: Внести
|
17
17
|
vote: Голосувати
|
18
18
|
name: Пропозиції
|
19
19
|
settings:
|
@@ -22,21 +22,23 @@ uk:
|
|
22
22
|
attachments_allowed: Дозволити вкладення
|
23
23
|
comments_enabled: Коментарі ввімкнено
|
24
24
|
geocoding_enabled: Геокодування ввімкнено
|
25
|
+
maximum_votes_per_proposal: Максимальна кількість голосів на пропозицію
|
25
26
|
new_proposal_help_text: Підказки зі створення нової пропозиції
|
26
27
|
official_proposals_enabled: Офіційні пропозиції ввімкнені
|
27
28
|
proposal_answering_enabled: Ввімкнуто відповіді на пропозиції
|
28
|
-
|
29
|
+
proposal_limit: Максимальна кількість пропозицій на одного учасника
|
30
|
+
vote_limit: Максимальна кількість голосів для одного користувача
|
29
31
|
step:
|
30
32
|
announcement: Оголошення
|
31
|
-
comments_blocked: Коментарі
|
33
|
+
comments_blocked: Коментарі вимкнено
|
32
34
|
creation_enabled: Ввімкнено створення пропозицій
|
33
35
|
proposal_answering_enabled: Ввімкнуто відповіді на пропозиції
|
34
|
-
votes_blocked: Голосування
|
36
|
+
votes_blocked: Голосування вимкнене
|
35
37
|
votes_enabled: Голосування ввімкнене
|
36
38
|
votes_hidden: Голосування приховане (якщо голосування ввімкнене, то при галочці тут буде сховано кількість голосів)
|
37
39
|
proposals:
|
38
40
|
actions:
|
39
|
-
answer:
|
41
|
+
answer: Відповісти
|
40
42
|
new: Нова
|
41
43
|
title: Дії
|
42
44
|
admin:
|
@@ -51,33 +53,33 @@ uk:
|
|
51
53
|
proposal_answers:
|
52
54
|
edit:
|
53
55
|
accepted: Прийнято
|
54
|
-
answer_proposal:
|
56
|
+
answer_proposal: Відповісти
|
55
57
|
evaluating: Розглядається
|
56
58
|
rejected: Відхилено
|
57
59
|
title: Відповідь на пропозицію %{title}
|
58
60
|
proposals:
|
59
61
|
answer:
|
60
|
-
invalid: При
|
61
|
-
success:
|
62
|
+
invalid: При спробі відповісти на цю пропозицію виникла проблема
|
63
|
+
success: Успішно дано відповідь на пропозицію
|
62
64
|
create:
|
63
|
-
invalid: При
|
64
|
-
success: Пропозицію успішно
|
65
|
+
invalid: При спробі створити цю пропозицію виникла проблема
|
66
|
+
success: Пропозицію успішно внесено
|
65
67
|
form:
|
66
68
|
attachment_legend: "(Необов'язково) Додати вкладений файл"
|
67
69
|
select_a_category: Оберіть розділ
|
68
70
|
index:
|
69
71
|
title: Пропозиції
|
70
72
|
new:
|
71
|
-
create:
|
72
|
-
title:
|
73
|
+
create: Внести
|
74
|
+
title: Внести пропозицію
|
73
75
|
answers:
|
74
76
|
accepted: Прийнято
|
75
77
|
evaluating: Розглядається
|
76
|
-
not_answered:
|
78
|
+
not_answered: Без відповідей
|
77
79
|
rejected: Відхилено
|
78
80
|
create:
|
79
81
|
error: При збереженні цієї пропозиції сталися помилки.
|
80
|
-
success: Пропозицію успішно
|
82
|
+
success: Пропозицію успішно додано.
|
81
83
|
models:
|
82
84
|
proposal:
|
83
85
|
fields:
|
@@ -87,6 +89,9 @@ uk:
|
|
87
89
|
scope: Терен
|
88
90
|
state: Стан
|
89
91
|
title: Назва
|
92
|
+
votes: Голоси
|
93
|
+
new:
|
94
|
+
limit_reached: Ви не можете додавати нові пропозиції, оскільки ви перевищили ліміт.
|
90
95
|
proposal_votes:
|
91
96
|
create:
|
92
97
|
error: При голосуванні пропозиції сталися помилки.
|
@@ -106,7 +111,7 @@ uk:
|
|
106
111
|
all: Усі
|
107
112
|
category: Розділ
|
108
113
|
category_prompt: Оберіть розділ
|
109
|
-
|
114
|
+
citizens: Громадяни
|
110
115
|
evaluating: Розглядається
|
111
116
|
official: Офіційне
|
112
117
|
origin: Джерело
|
@@ -124,6 +129,7 @@ uk:
|
|
124
129
|
unfold: Розгорнути
|
125
130
|
index:
|
126
131
|
new_proposal: Нова пропозиція
|
132
|
+
proposal_limit_reached: Досягнуто максимальної дозволеної кількості пропозицій
|
127
133
|
view_proposal: Переглянути пропозицію
|
128
134
|
linked_proposals:
|
129
135
|
proposal_votes:
|
@@ -140,16 +146,18 @@ uk:
|
|
140
146
|
orders:
|
141
147
|
label: 'Впорядкувати пропозиції за:'
|
142
148
|
most_voted: Найбільш підтримані
|
143
|
-
random:
|
149
|
+
random: Довільно
|
144
150
|
recent: Нещодавні
|
145
151
|
proposal:
|
146
152
|
view_proposal: Переглянути пропозицію
|
147
153
|
show:
|
148
154
|
proposal_accepted_reason: 'Ця пропозиція була прийнята, тому що:'
|
155
|
+
proposal_in_evaluation_reason: Ця пропозиція розглядається
|
149
156
|
proposal_rejected_reason: 'Ця пропозиція була відхилена, оскільки:'
|
150
|
-
report:
|
157
|
+
report: Поскаржитись
|
151
158
|
vote_button:
|
152
159
|
already_voted: Вже проголосували
|
160
|
+
maximum_votes_reached: Використано всі голоси
|
153
161
|
no_votes_remaining: Не залишилось голосів
|
154
162
|
vote: Голосувати
|
155
163
|
votes_blocked: Голосування вимкнене
|
@@ -159,13 +167,17 @@ uk:
|
|
159
167
|
few: ГОЛОСИ
|
160
168
|
many: ГОЛОСІВ
|
161
169
|
other: ГОЛОСІВ
|
162
|
-
|
170
|
+
voting_rules:
|
171
|
+
maximum_votes_per_proposal:
|
172
|
+
description: Кожна пропозиція може отримати максимум %{limit} голосів.
|
173
|
+
proposal_limit:
|
174
|
+
description: Ви можете висунути до %{limit} пропозицій.
|
175
|
+
title: 'Голосування регулюється наступними правилами:'
|
163
176
|
vote_limit:
|
164
|
-
description: Ви
|
177
|
+
description: Ви можете проголосувати до %{limit} пропозицій.
|
165
178
|
left: Залишилось
|
166
|
-
title: У вас є %{limit} голосів для того, щоб їх розподілити
|
167
179
|
votes: Голоси
|
168
180
|
resource_links:
|
169
181
|
included_proposals:
|
170
|
-
proposal_projects: '
|
171
|
-
proposal_results: '
|
182
|
+
proposal_projects: 'Пропозиція є в таких проектах:'
|
183
|
+
proposal_results: 'Пропозиція є в таких підсумках:'
|
@@ -17,6 +17,8 @@ Decidim.register_feature(:proposals) do |feature|
|
|
17
17
|
|
18
18
|
feature.settings(:global) do |settings|
|
19
19
|
settings.attribute :vote_limit, type: :integer, default: 0
|
20
|
+
settings.attribute :proposal_limit, type: :integer, default: 0
|
21
|
+
settings.attribute :maximum_votes_per_proposal, type: :integer, default: 0
|
20
22
|
settings.attribute :proposal_answering_enabled, type: :boolean, default: true
|
21
23
|
settings.attribute :official_proposals_enabled, type: :boolean, default: true
|
22
24
|
settings.attribute :comments_enabled, type: :boolean, default: true
|
@@ -42,16 +44,16 @@ Decidim.register_feature(:proposals) do |feature|
|
|
42
44
|
end
|
43
45
|
|
44
46
|
feature.register_stat :proposals_count, primary: true, priority: Decidim::StatsRegistry::HIGH_PRIORITY do |features, start_at, end_at|
|
45
|
-
Decidim::Proposals::FilteredProposals.for(features, start_at, end_at).count
|
47
|
+
Decidim::Proposals::FilteredProposals.for(features, start_at, end_at).not_hidden.count
|
46
48
|
end
|
47
49
|
|
48
50
|
feature.register_stat :votes_count, priority: Decidim::StatsRegistry::MEDIUM_PRIORITY do |features, start_at, end_at|
|
49
|
-
proposals = Decidim::Proposals::FilteredProposals.for(features, start_at, end_at)
|
51
|
+
proposals = Decidim::Proposals::FilteredProposals.for(features, start_at, end_at).not_hidden
|
50
52
|
Decidim::Proposals::ProposalVote.where(proposal: proposals).count
|
51
53
|
end
|
52
54
|
|
53
55
|
feature.register_stat :comments_count, tag: :comments do |features, start_at, end_at|
|
54
|
-
proposals = Decidim::Proposals::FilteredProposals.for(features, start_at, end_at)
|
56
|
+
proposals = Decidim::Proposals::FilteredProposals.for(features, start_at, end_at).not_hidden
|
55
57
|
Decidim::Comments::Comment.where(root_commentable: proposals).count
|
56
58
|
end
|
57
59
|
|
@@ -101,14 +103,14 @@ Decidim.register_feature(:proposals) do |feature|
|
|
101
103
|
global = nil
|
102
104
|
end
|
103
105
|
|
104
|
-
|
106
|
+
5.times do |n|
|
105
107
|
author = Decidim::User.where(organization: feature.organization).all.sample
|
106
108
|
user_group = [true, false].sample ? author.user_groups.verified.sample : nil
|
107
|
-
state, answer = if n >
|
109
|
+
state, answer = if n > 3
|
108
110
|
["accepted", Decidim::Faker::Localized.sentence(10)]
|
109
|
-
elsif n >
|
111
|
+
elsif n > 2
|
110
112
|
["rejected", nil]
|
111
|
-
elsif n >
|
113
|
+
elsif n > 1
|
112
114
|
["evaluating", nil]
|
113
115
|
else
|
114
116
|
[nil, nil]
|
@@ -127,7 +129,7 @@ Decidim.register_feature(:proposals) do |feature|
|
|
127
129
|
answered_at: Time.current
|
128
130
|
)
|
129
131
|
|
130
|
-
|
132
|
+
(n % 3).times do |m|
|
131
133
|
email = "vote-author-#{participatory_space.underscored_name}-#{participatory_space.id}-#{n}-#{m}@example.org"
|
132
134
|
name = "#{Faker::Name.name} #{participatory_space.id} #{n} #{m}"
|
133
135
|
|
@@ -34,6 +34,18 @@ FactoryGirl.define do
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
+
trait :with_proposal_limit do
|
38
|
+
transient do
|
39
|
+
proposal_limit 1
|
40
|
+
end
|
41
|
+
|
42
|
+
settings do
|
43
|
+
{
|
44
|
+
proposal_limit: proposal_limit
|
45
|
+
}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
37
49
|
trait :with_votes_blocked do
|
38
50
|
step_settings do
|
39
51
|
{
|
@@ -68,6 +80,14 @@ FactoryGirl.define do
|
|
68
80
|
}
|
69
81
|
end
|
70
82
|
end
|
83
|
+
|
84
|
+
trait :with_maximum_votes_per_proposal do
|
85
|
+
settings do
|
86
|
+
{
|
87
|
+
maximum_votes_per_proposal: 1
|
88
|
+
}
|
89
|
+
end
|
90
|
+
end
|
71
91
|
end
|
72
92
|
|
73
93
|
factory :proposal, class: Decidim::Proposals::Proposal do
|
@@ -82,6 +102,11 @@ FactoryGirl.define do
|
|
82
102
|
author nil
|
83
103
|
end
|
84
104
|
|
105
|
+
trait :evaluating do
|
106
|
+
state "evaluating"
|
107
|
+
answered_at { Time.current }
|
108
|
+
end
|
109
|
+
|
85
110
|
trait :accepted do
|
86
111
|
state "accepted"
|
87
112
|
answered_at { Time.current }
|
@@ -89,9 +114,12 @@ FactoryGirl.define do
|
|
89
114
|
|
90
115
|
trait :rejected do
|
91
116
|
state "rejected"
|
92
|
-
answer { Decidim::Faker::Localized.sentence }
|
93
117
|
answered_at { Time.current }
|
94
118
|
end
|
119
|
+
|
120
|
+
trait :with_answer do
|
121
|
+
answer { Decidim::Faker::Localized.sentence }
|
122
|
+
end
|
95
123
|
end
|
96
124
|
|
97
125
|
factory :proposal_vote, class: Decidim::Proposals::ProposalVote do
|