decidim 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of decidim might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/Gemfile.lock +41 -43
- data/decidim-admin/config/locales/fr.yml +21 -21
- data/decidim-admin/config/locales/uk.yml +60 -60
- data/decidim-assemblies/config/locales/fr.yml +20 -20
- data/decidim-assemblies/config/locales/uk.yml +6 -6
- data/decidim-budgets/config/locales/fr.yml +4 -4
- data/decidim-budgets/config/locales/uk.yml +3 -3
- data/decidim-comments/app/assets/javascripts/decidim/comments/bundle.js +7 -7
- data/decidim-comments/config/locales/fr.yml +11 -11
- data/decidim-comments/config/locales/uk.yml +1 -1
- data/decidim-core/config/locales/fr.yml +12 -12
- data/decidim-core/config/locales/uk.yml +12 -12
- data/decidim-core/lib/decidim/core/version.rb +1 -1
- data/decidim-dev/decidim-dev.gemspec +0 -1
- data/decidim-meetings/config/locales/fr.yml +43 -43
- data/decidim-meetings/config/locales/uk.yml +3 -3
- data/decidim-pages/config/locales/fr.yml +1 -1
- data/decidim-participatory_processes/config/locales/fr.yml +7 -7
- data/decidim-participatory_processes/config/locales/uk.yml +70 -70
- data/decidim-proposals/app/models/decidim/proposals/proposal.rb +3 -3
- data/decidim-proposals/app/models/decidim/proposals/proposal_vote.rb +6 -0
- data/decidim-proposals/app/views/decidim/proposals/proposals/_vote_button.html.erb +21 -19
- data/decidim-proposals/app/views/decidim/proposals/proposals/show.html.erb +7 -3
- data/decidim-proposals/config/locales/fr.yml +10 -10
- data/decidim-proposals/config/locales/uk.yml +5 -5
- data/decidim-proposals/lib/decidim/proposals/feature.rb +1 -2
- data/decidim-proposals/spec/features/vote_proposal_spec.rb +44 -5
- data/decidim-proposals/spec/models/decidim/proposals/proposal_vote_spec.rb +8 -1
- data/decidim-results/config/locales/fr.yml +2 -2
- data/decidim-results/config/locales/uk.yml +3 -3
- data/decidim-surveys/config/locales/fr.yml +1 -1
- data/decidim-surveys/config/locales/uk.yml +2 -2
- data/decidim-system/config/locales/fr.yml +5 -5
- data/lib/generators/decidim/app_generator.rb +3 -0
- data/lib/generators/decidim/install_generator.rb +1 -1
- data/package-lock.json +575 -3940
- data/package.json +1 -1
- metadata +26 -26
@@ -13,13 +13,13 @@ uk:
|
|
13
13
|
hashtag: Хештег
|
14
14
|
hero_image: Зображення головної сторінки
|
15
15
|
local_area: Місцевість
|
16
|
-
meta_scope: Метадані
|
17
|
-
participatory_process_group_id: Група
|
18
|
-
participatory_scope:
|
16
|
+
meta_scope: Метадані терену
|
17
|
+
participatory_process_group_id: Група рухів
|
18
|
+
participatory_scope: Терен співучасті
|
19
19
|
participatory_structure: Структура співучасті
|
20
20
|
promoted: Підвищено в статусі
|
21
|
-
scope_id:
|
22
|
-
scopes_enabled: Ввімкнені
|
21
|
+
scope_id: Терен
|
22
|
+
scopes_enabled: Ввімкнені терени
|
23
23
|
short_description: Стислий опис
|
24
24
|
slug: Скорочена URL-адреса
|
25
25
|
start_date: Дата початку
|
@@ -30,7 +30,7 @@ uk:
|
|
30
30
|
description: Опис
|
31
31
|
hero_image: Зображення
|
32
32
|
name: Ім'я
|
33
|
-
participatory_process_ids: Супутні
|
33
|
+
participatory_process_ids: Супутні рухи
|
34
34
|
participatory_process_step:
|
35
35
|
description: Опис
|
36
36
|
end_date: Дата закінчення
|
@@ -56,15 +56,15 @@ uk:
|
|
56
56
|
resend_invitation: Повторно надіслати запрошення
|
57
57
|
unpublish: Скасувати публікацію
|
58
58
|
menu:
|
59
|
-
participatory_process_groups: Групи
|
60
|
-
participatory_processes:
|
59
|
+
participatory_process_groups: Групи рухів
|
60
|
+
participatory_processes: Рухи
|
61
61
|
participatory_processes_submenu:
|
62
62
|
attachments: Вкладені файли
|
63
63
|
categories: Розділи
|
64
64
|
features: Складова
|
65
65
|
info: Інформація
|
66
66
|
moderations: Дії з модерації
|
67
|
-
process_admins:
|
67
|
+
process_admins: Учасники руху
|
68
68
|
steps: Кроки
|
69
69
|
models:
|
70
70
|
participatory_process:
|
@@ -73,23 +73,23 @@ uk:
|
|
73
73
|
promoted: Висвітлено
|
74
74
|
published: Опубліковано
|
75
75
|
title: Назва
|
76
|
-
name:
|
76
|
+
name: Рух співучасті
|
77
77
|
participatory_process_group:
|
78
78
|
fields:
|
79
79
|
name: Ім'я
|
80
|
-
name: Група
|
80
|
+
name: Група рухів
|
81
81
|
participatory_process_step:
|
82
82
|
fields:
|
83
83
|
end_date: Дата закінчення
|
84
84
|
start_date: Дата початку
|
85
85
|
title: Назва
|
86
|
-
name: Крок
|
86
|
+
name: Крок руху співучасті
|
87
87
|
participatory_process_user_role:
|
88
88
|
fields:
|
89
89
|
email: Адреса електронної пошти
|
90
90
|
name: Ім'я
|
91
91
|
role: Роль
|
92
|
-
name:
|
92
|
+
name: Учасник руху співучасті
|
93
93
|
roles:
|
94
94
|
admin: Адміністратор
|
95
95
|
collaborator: Співавтор
|
@@ -102,76 +102,76 @@ uk:
|
|
102
102
|
new:
|
103
103
|
copy: Скопіювати
|
104
104
|
select: Оберіть дані, копію яких ви хотіли б створити
|
105
|
-
title: Створити копію
|
105
|
+
title: Створити копію руху співучасті
|
106
106
|
participatory_process_groups:
|
107
107
|
destroy:
|
108
|
-
success: Групу
|
108
|
+
success: Групу рухів співучасті успішно видалено.
|
109
109
|
edit:
|
110
|
-
title: Редагувати групу
|
110
|
+
title: Редагувати групу рухів
|
111
111
|
update: Оновити
|
112
112
|
new:
|
113
113
|
create: Створити
|
114
|
-
title: Нова група
|
114
|
+
title: Нова група рухів
|
115
115
|
update:
|
116
|
-
error: При оновленні цієї групи
|
117
|
-
success: Групу
|
116
|
+
error: При оновленні цієї групи рухів співучасті сталася помилка.
|
117
|
+
success: Групу рухів співучасті успішно оновлено.
|
118
118
|
participatory_process_publications:
|
119
119
|
create:
|
120
|
-
error: При публікації цього
|
121
|
-
success:
|
120
|
+
error: При публікації цього руху співучасті сталася помилка.
|
121
|
+
success: Рух співучасті успішно опубліковано.
|
122
122
|
destroy:
|
123
|
-
error: При скасуванні публікації цього
|
124
|
-
success: Публікацію
|
123
|
+
error: При скасуванні публікації цього руху співучасті сталася помилка.
|
124
|
+
success: Публікацію руху співучасті успішно скасовано.
|
125
125
|
participatory_process_step_activations:
|
126
126
|
create:
|
127
|
-
error: При започаткуванні цього кроку
|
128
|
-
success: Крок
|
127
|
+
error: При започаткуванні цього кроку руху співучасті сталася помилка.
|
128
|
+
success: Крок руху співучасті успішно започато.
|
129
129
|
participatory_process_steps:
|
130
130
|
create:
|
131
|
-
error: При створенні нового кроку
|
132
|
-
success: Крок
|
131
|
+
error: При створенні нового кроку руху співучасті сталася помилка.
|
132
|
+
success: Крок руху співучасті успішно створено.
|
133
133
|
default_title: Вступ
|
134
134
|
destroy:
|
135
135
|
error:
|
136
136
|
active_step: Немає змоги видалити започатий зараз крок.
|
137
|
-
last_step: Немає змоги видалити останній крок
|
138
|
-
success: Крок
|
137
|
+
last_step: Немає змоги видалити останній крок руху.
|
138
|
+
success: Крок руху співучасті успішно видалено.
|
139
139
|
edit:
|
140
|
-
title: Редагувати крок
|
140
|
+
title: Редагувати крок руху співучасті
|
141
141
|
update: Оновити
|
142
142
|
index:
|
143
143
|
steps_title: Кроки
|
144
144
|
new:
|
145
145
|
create: Створити
|
146
|
-
title: Новий крок
|
146
|
+
title: Новий крок руху співучасті
|
147
147
|
ordering:
|
148
|
-
error: При зміні порядку кроків цього
|
148
|
+
error: При зміні порядку кроків цього руху співучасті сталася помилка.
|
149
149
|
update:
|
150
|
-
error: При оновленні цього кроку
|
151
|
-
success: Крок
|
150
|
+
error: При оновленні цього кроку руху співучасті сталася помилка.
|
151
|
+
success: Крок руху співучасті успішно оновлено.
|
152
152
|
participatory_process_user_roles:
|
153
153
|
create:
|
154
|
-
error: При додаванні
|
155
|
-
success:
|
154
|
+
error: При додаванні учасника в цей рух співучасті сталася помилка.
|
155
|
+
success: До цього руху співучасті успішно додано учасника.
|
156
156
|
destroy:
|
157
|
-
success:
|
157
|
+
success: З цього руху співучасті успішно видалено учасника.
|
158
158
|
edit:
|
159
|
-
title: Оновити
|
159
|
+
title: Оновити учасника руху співучасті.
|
160
160
|
update: Оновити
|
161
161
|
index:
|
162
|
-
process_admins_title:
|
162
|
+
process_admins_title: Учасники руху співучасті
|
163
163
|
new:
|
164
164
|
create: Створити
|
165
|
-
title: Новий
|
165
|
+
title: Новий учасник руху співучасті.
|
166
166
|
update:
|
167
|
-
error: При оновленні
|
168
|
-
success:
|
167
|
+
error: При оновленні учасника цього руху співучасті сталася помилка.
|
168
|
+
success: Учасника цього руху співучасті успішно оновлено.
|
169
169
|
participatory_processes:
|
170
170
|
create:
|
171
|
-
error: При створенні нового
|
172
|
-
success:
|
171
|
+
error: При створенні нового руху співучасті сталася помилка.
|
172
|
+
success: Рух співучасті успішно створено. Тепер налаштуйте його кроки.
|
173
173
|
destroy:
|
174
|
-
success:
|
174
|
+
success: Рух співучасті успішно видалено.
|
175
175
|
edit:
|
176
176
|
update: Оновити
|
177
177
|
form:
|
@@ -181,38 +181,38 @@ uk:
|
|
181
181
|
published: Опубліковано
|
182
182
|
new:
|
183
183
|
create: Створити
|
184
|
-
title: Новий
|
184
|
+
title: Новий рух співучасті
|
185
185
|
update:
|
186
|
-
error: При оновленні цього
|
187
|
-
success:
|
186
|
+
error: При оновленні цього руху співучасті сталася помилка.
|
187
|
+
success: Рух співучасті успішно оновлено.
|
188
188
|
participatory_processes_copies:
|
189
189
|
create:
|
190
|
-
error: При створенні копії цього
|
191
|
-
success: Успішно створено копію
|
190
|
+
error: При створенні копії цього руху співучасті сталася помилка.
|
191
|
+
success: Успішно створено копію руху співучасті.
|
192
192
|
participatory_processes_group:
|
193
193
|
create:
|
194
|
-
error: При створенні нової групи
|
195
|
-
success: Групу
|
194
|
+
error: При створенні нової групи рухів співучасті сталася помилка.
|
195
|
+
success: Групу рухів співучасті успішно створено.
|
196
196
|
titles:
|
197
|
-
participatory_process_groups: Групи
|
198
|
-
participatory_processes:
|
197
|
+
participatory_process_groups: Групи рухів співучасті
|
198
|
+
participatory_processes: Рухи співучасті
|
199
199
|
users:
|
200
200
|
resend_invitation:
|
201
201
|
error: При повторному надсиланні запрошення сталася помилка.
|
202
202
|
success: Запрошення успішно знову надіслане.
|
203
203
|
menu:
|
204
|
-
processes:
|
204
|
+
processes: Рухи
|
205
205
|
participatory_process_groups:
|
206
206
|
show:
|
207
|
-
group_participatory_processes:
|
207
|
+
group_participatory_processes: Рухи для %{group}
|
208
208
|
title: Назва
|
209
209
|
participatory_process_steps:
|
210
210
|
index:
|
211
|
-
process_steps: Кроки
|
212
|
-
title: Кроки
|
211
|
+
process_steps: Кроки руху
|
212
|
+
title: Кроки руху співучасті
|
213
213
|
participatory_processes:
|
214
214
|
index:
|
215
|
-
title:
|
215
|
+
title: Рухи співучасті
|
216
216
|
order_by_processes:
|
217
217
|
active: Започатковані
|
218
218
|
past: Минулі
|
@@ -226,9 +226,9 @@ uk:
|
|
226
226
|
developer_group: Група розробників
|
227
227
|
end_date: Дата закінчення
|
228
228
|
local_area: Місцевість
|
229
|
-
participatory_scope:
|
229
|
+
participatory_scope: Терен співучасті
|
230
230
|
participatory_structure: Структура співучасті
|
231
|
-
scope:
|
231
|
+
scope: Терен
|
232
232
|
start_date: Дата початку
|
233
233
|
target: Мета
|
234
234
|
statistics:
|
@@ -238,7 +238,7 @@ uk:
|
|
238
238
|
meetings_count: Зустрічі
|
239
239
|
orders_count: Голоси
|
240
240
|
pages_count: Сторінки
|
241
|
-
processes_count:
|
241
|
+
processes_count: Рухи
|
242
242
|
projects_count: Проекти
|
243
243
|
proposals_count: Пропозиції
|
244
244
|
results_count: Підсумки
|
@@ -246,7 +246,7 @@ uk:
|
|
246
246
|
users_count: Учасники
|
247
247
|
votes_count: Голоси
|
248
248
|
scopes:
|
249
|
-
global: Всеохоплюючий
|
249
|
+
global: Всеохоплюючий терен
|
250
250
|
layouts:
|
251
251
|
decidim:
|
252
252
|
participatory_process_groups:
|
@@ -258,15 +258,15 @@ uk:
|
|
258
258
|
take_part: Взяти участь
|
259
259
|
participatory_processes:
|
260
260
|
index:
|
261
|
-
promoted_processes: Висвітлені
|
261
|
+
promoted_processes: Висвітлені рухи
|
262
262
|
no_processes_yet:
|
263
|
-
no_processes_yet:
|
263
|
+
no_processes_yet: Рухів співучасті поки що нема!
|
264
264
|
order_by_processes:
|
265
265
|
processes:
|
266
|
-
one: "%{count}
|
267
|
-
few: "%{count}
|
268
|
-
many: "%{count}
|
269
|
-
other: "%{count}
|
266
|
+
one: "%{count} рух"
|
267
|
+
few: "%{count} рухи"
|
268
|
+
many: "%{count} рухів"
|
269
|
+
other: "%{count} рухів"
|
270
270
|
participatory_process:
|
271
271
|
active_step: 'Поточний крок:'
|
272
272
|
take_part: Взяти участь
|
@@ -275,7 +275,7 @@ uk:
|
|
275
275
|
more_info: Додаткові відомості
|
276
276
|
take_part: Взяти участь
|
277
277
|
process_header:
|
278
|
-
process_menu_item:
|
278
|
+
process_menu_item: Рух
|
279
279
|
unfold: Розгорнути
|
280
280
|
process_header_steps:
|
281
281
|
step: '%{current}-й крок з %{total} кроків'
|
@@ -61,21 +61,21 @@ module Decidim
|
|
61
61
|
#
|
62
62
|
# Returns Boolean.
|
63
63
|
def accepted?
|
64
|
-
state == "accepted"
|
64
|
+
answered? && state == "accepted"
|
65
65
|
end
|
66
66
|
|
67
67
|
# Public: Checks if the organization has rejected a proposal.
|
68
68
|
#
|
69
69
|
# Returns Boolean.
|
70
70
|
def rejected?
|
71
|
-
state == "rejected"
|
71
|
+
answered? && state == "rejected"
|
72
72
|
end
|
73
73
|
|
74
74
|
# Public: Checks if the organization has marked the proposal as evaluating it.
|
75
75
|
#
|
76
76
|
# Returns Boolean.
|
77
77
|
def evaluating?
|
78
|
-
state == "evaluating"
|
78
|
+
answered? && state == "evaluating"
|
79
79
|
end
|
80
80
|
|
81
81
|
# Public: Overrides the `commentable?` Commentable concern method.
|
@@ -9,6 +9,7 @@ module Decidim
|
|
9
9
|
|
10
10
|
validates :proposal, uniqueness: { scope: :author }
|
11
11
|
validate :author_and_proposal_same_organization
|
12
|
+
validate :proposal_not_rejected
|
12
13
|
|
13
14
|
private
|
14
15
|
|
@@ -17,6 +18,11 @@ module Decidim
|
|
17
18
|
return if !proposal || !author
|
18
19
|
errors.add(:proposal, :invalid) unless author.organization == proposal.organization
|
19
20
|
end
|
21
|
+
|
22
|
+
def proposal_not_rejected
|
23
|
+
return unless proposal
|
24
|
+
errors.add(:proposal, :invalid) if proposal.rejected?
|
25
|
+
end
|
20
26
|
end
|
21
27
|
end
|
22
28
|
end
|
@@ -1,23 +1,25 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
<% if
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
<% if @voted_proposals ? @voted_proposals.include?(proposal.id) : proposal.voted_by?(current_user) %>
|
10
|
-
<%= action_authorized_button_to :vote, t('.already_voted'), proposal_proposal_vote_path(proposal_id: proposal, from_proposals_list: from_proposals_list), method: :delete, remote: true, data: { disable: true }, class: "card__button button #{vote_button_classes(from_proposals_list)} success" %>
|
1
|
+
<% unless proposal.rejected? %>
|
2
|
+
<div id="proposal-<%= proposal.id %>-vote-button">
|
3
|
+
<% if !current_user %>
|
4
|
+
<% if current_settings.votes_blocked? %>
|
5
|
+
<%= action_authorized_button_to :vote, t('.votes_blocked'), proposal_proposal_vote_path(proposal_id: proposal, from_proposals_list: from_proposals_list), class: "card__button button #{vote_button_classes(from_proposals_list)} disabled", disabled: true %>
|
6
|
+
<% else %>
|
7
|
+
<%= action_authorized_button_to :vote, t('.vote'), proposal_proposal_vote_path(proposal_id: proposal, from_proposals_list: from_proposals_list), class: "card__button button #{vote_button_classes(from_proposals_list)}" %>
|
8
|
+
<% end %>
|
11
9
|
<% else %>
|
12
|
-
<% if
|
13
|
-
<%= action_authorized_button_to :vote, t('.
|
14
|
-
<% elsif current_settings.votes_blocked? %>
|
15
|
-
<button class="card__button button <%= vote_button_classes(from_proposals_list) %> disabled" disabled>
|
16
|
-
<%= t('.votes_blocked') %>
|
17
|
-
</button>
|
10
|
+
<% if @voted_proposals ? @voted_proposals.include?(proposal.id) : proposal.voted_by?(current_user) %>
|
11
|
+
<%= action_authorized_button_to :vote, t('.already_voted'), proposal_proposal_vote_path(proposal_id: proposal, from_proposals_list: from_proposals_list), method: :delete, remote: true, data: { disable: true }, class: "card__button button #{vote_button_classes(from_proposals_list)} success" %>
|
18
12
|
<% else %>
|
19
|
-
|
13
|
+
<% if vote_limit_enabled? && remaining_votes_count_for(current_user) == 0 %>
|
14
|
+
<%= action_authorized_button_to :vote, t('.no_votes_remaining'), proposal_proposal_vote_path(proposal_id: proposal, from_proposals_list: from_proposals_list), remote: true, data: { disable: true }, class: "card__button button #{vote_button_classes(from_proposals_list)}", disabled: true %>
|
15
|
+
<% elsif current_settings.votes_blocked? %>
|
16
|
+
<button class="card__button button <%= vote_button_classes(from_proposals_list) %> disabled" disabled>
|
17
|
+
<%= t('.votes_blocked') %>
|
18
|
+
</button>
|
19
|
+
<% else %>
|
20
|
+
<%= action_authorized_button_to :vote, t('.vote'), proposal_proposal_vote_path(proposal_id: proposal, from_proposals_list: from_proposals_list), remote: true, data: { disable: true }, class: "card__button button #{vote_button_classes(from_proposals_list)}" %>
|
21
|
+
<% end %>
|
20
22
|
<% end %>
|
21
23
|
<% end %>
|
22
|
-
|
23
|
-
|
24
|
+
</div>
|
25
|
+
<% end %>
|
@@ -21,9 +21,13 @@
|
|
21
21
|
<% if current_settings.votes_enabled? || current_user %>
|
22
22
|
<div class="card extra">
|
23
23
|
<div class="card__content">
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
<% if current_settings.votes_enabled? %>
|
25
|
+
<%= render partial: "votes_count", locals: { proposal: @proposal, from_proposals_list: false } %>
|
26
|
+
<%= render partial: "vote_button", locals: { proposal: @proposal, from_proposals_list: false } %>
|
27
|
+
<% end %>
|
28
|
+
<% if current_user %>
|
29
|
+
<%= render partial: "decidim/shared/follow_button", locals: { followable: @proposal } %>
|
30
|
+
<% end %>
|
27
31
|
</div>
|
28
32
|
</div>
|
29
33
|
<% end %>
|
@@ -24,7 +24,7 @@ fr:
|
|
24
24
|
geocoding_enabled: Géocodage activé
|
25
25
|
new_proposal_help_text: Nouveau texte d'aide à la proposition
|
26
26
|
official_proposals_enabled: Propositions officielles activées
|
27
|
-
proposal_answering_enabled: Réponses aux propositions
|
27
|
+
proposal_answering_enabled: '"Réponses aux propositions" activé'
|
28
28
|
vote_limit: Limite de vote
|
29
29
|
step:
|
30
30
|
announcement: Annonce
|
@@ -50,10 +50,10 @@ fr:
|
|
50
50
|
name: Proposition
|
51
51
|
proposal_answers:
|
52
52
|
edit:
|
53
|
-
accepted:
|
53
|
+
accepted: Retenue
|
54
54
|
answer_proposal: Répondre
|
55
55
|
evaluating: En cours d'évaluation
|
56
|
-
rejected:
|
56
|
+
rejected: Refusée
|
57
57
|
title: Réponse à la proposition %{title}
|
58
58
|
proposals:
|
59
59
|
answer:
|
@@ -71,10 +71,10 @@ fr:
|
|
71
71
|
create: Créer
|
72
72
|
title: Créer une proposition
|
73
73
|
answers:
|
74
|
-
accepted:
|
74
|
+
accepted: Retenues
|
75
75
|
evaluating: En cours d'évaluation
|
76
76
|
not_answered: Resté sans réponse
|
77
|
-
rejected:
|
77
|
+
rejected: Refusée
|
78
78
|
create:
|
79
79
|
error: Il y a eu des erreurs lors de la sauvegarde de la proposition.
|
80
80
|
success: Proposition créée avec succès.
|
@@ -85,7 +85,7 @@ fr:
|
|
85
85
|
id: ID
|
86
86
|
official_proposal: Proposition officielle
|
87
87
|
scope: Zone d'application
|
88
|
-
state:
|
88
|
+
state: Etat
|
89
89
|
title: Titre
|
90
90
|
proposal_votes:
|
91
91
|
create:
|
@@ -101,19 +101,19 @@ fr:
|
|
101
101
|
filters:
|
102
102
|
accepted: Retenues
|
103
103
|
activity: Activité
|
104
|
-
all:
|
104
|
+
all: Toutes
|
105
105
|
category: Catégorie
|
106
106
|
category_prompt: Sélectionner une catégorie
|
107
107
|
citizenship: Citoyens
|
108
108
|
evaluating: En cours d'évaluation
|
109
109
|
official: Elu-e-s
|
110
110
|
origin: Auteurs
|
111
|
-
rejected:
|
111
|
+
rejected: Refusée
|
112
112
|
related_to: Liée à
|
113
113
|
scope_prompt: Sélectionnez une portée
|
114
|
-
scopes:
|
114
|
+
scopes: Zones d'application
|
115
115
|
search: Rechercher
|
116
|
-
state:
|
116
|
+
state: État
|
117
117
|
voted: Votées
|
118
118
|
filters_small_view:
|
119
119
|
close_modal: Fermer la fenêtre de dialogue
|
@@ -4,7 +4,7 @@ uk:
|
|
4
4
|
proposal:
|
5
5
|
body: Основний текст
|
6
6
|
category_id: Розділ
|
7
|
-
scope_id:
|
7
|
+
scope_id: Терен
|
8
8
|
title: Назва
|
9
9
|
user_group_id: Створити пропозицію як
|
10
10
|
proposal_answer:
|
@@ -84,7 +84,7 @@ uk:
|
|
84
84
|
category: Розділ
|
85
85
|
id: Ідентифікатор
|
86
86
|
official_proposal: Офіційна пропозиція
|
87
|
-
scope:
|
87
|
+
scope: Терен
|
88
88
|
state: Стан
|
89
89
|
title: Назва
|
90
90
|
proposal_votes:
|
@@ -92,7 +92,7 @@ uk:
|
|
92
92
|
error: При голосуванні пропозиції сталися помилки.
|
93
93
|
proposals:
|
94
94
|
author:
|
95
|
-
deleted: Видалений
|
95
|
+
deleted: Видалений учасник
|
96
96
|
verified_user_group: Перевірена організація
|
97
97
|
count:
|
98
98
|
proposals_count:
|
@@ -112,8 +112,8 @@ uk:
|
|
112
112
|
origin: Джерело
|
113
113
|
rejected: Відхилено
|
114
114
|
related_to: Пов'язане з
|
115
|
-
scope_prompt: Оберіть
|
116
|
-
scopes:
|
115
|
+
scope_prompt: Оберіть терен
|
116
|
+
scopes: Терени
|
117
117
|
search: Шукати
|
118
118
|
state: Стан
|
119
119
|
voted: Проголосоване
|
@@ -141,8 +141,7 @@ Decidim.register_feature(:proposals) do |feature|
|
|
141
141
|
confirmed_at: Time.current
|
142
142
|
)
|
143
143
|
|
144
|
-
Decidim::Proposals::ProposalVote.create!(proposal: proposal,
|
145
|
-
author: author)
|
144
|
+
Decidim::Proposals::ProposalVote.create!(proposal: proposal, author: author) unless proposal.answered? && proposal.rejected?
|
146
145
|
end
|
147
146
|
|
148
147
|
Decidim::Comments::Seed.comments_for(proposal)
|
@@ -10,10 +10,34 @@ describe "Vote Proposal", type: :feature do
|
|
10
10
|
let!(:proposal) { Decidim::Proposals::Proposal.where(feature: feature).first }
|
11
11
|
let!(:user) { create :user, :confirmed, organization: organization }
|
12
12
|
|
13
|
+
def expect_page_not_to_include_votes
|
14
|
+
expect(page).to have_no_button("Vote")
|
15
|
+
expect(page).to have_no_css(".card__support__data span", text: "0 VOTES")
|
16
|
+
end
|
17
|
+
|
13
18
|
context "when votes are not enabled" do
|
14
|
-
|
15
|
-
|
16
|
-
|
19
|
+
context "when the user is not logged in" do
|
20
|
+
it "doesn't show the vote proposal button and counts" do
|
21
|
+
visit_feature
|
22
|
+
expect_page_not_to_include_votes
|
23
|
+
|
24
|
+
click_link proposal.title
|
25
|
+
expect_page_not_to_include_votes
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "when the user is logged in" do
|
30
|
+
before do
|
31
|
+
login_as user, scope: :user
|
32
|
+
end
|
33
|
+
|
34
|
+
it "doesn't show the vote proposal button and counts" do
|
35
|
+
visit_feature
|
36
|
+
expect_page_not_to_include_votes
|
37
|
+
|
38
|
+
click_link proposal.title
|
39
|
+
expect_page_not_to_include_votes
|
40
|
+
end
|
17
41
|
end
|
18
42
|
end
|
19
43
|
|
@@ -27,8 +51,7 @@ describe "Vote Proposal", type: :feature do
|
|
27
51
|
|
28
52
|
it "shows the vote count and the vote button is disabled" do
|
29
53
|
visit_feature
|
30
|
-
|
31
|
-
expect(page).to have_content("Voting disabled")
|
54
|
+
expect_page_not_to_include_votes
|
32
55
|
end
|
33
56
|
end
|
34
57
|
|
@@ -200,5 +223,21 @@ describe "Vote Proposal", type: :feature do
|
|
200
223
|
end
|
201
224
|
end
|
202
225
|
end
|
226
|
+
|
227
|
+
context "when the proposal is rejected" do
|
228
|
+
let!(:rejected_proposal) { create(:proposal, :rejected, feature: feature) }
|
229
|
+
|
230
|
+
before do
|
231
|
+
feature.update_attributes(settings: { proposal_answering_enabled: true })
|
232
|
+
end
|
233
|
+
|
234
|
+
it "it cannot be voted" do
|
235
|
+
visit_feature
|
236
|
+
expect(page).not_to have_selector("#proposal-#{rejected_proposal.id}-vote-button")
|
237
|
+
|
238
|
+
click_link rejected_proposal.title
|
239
|
+
expect(page).not_to have_selector("#proposal-#{rejected_proposal.id}-vote-button")
|
240
|
+
end
|
241
|
+
end
|
203
242
|
end
|
204
243
|
end
|
@@ -10,7 +10,7 @@ module Decidim
|
|
10
10
|
let!(:participatory_process) { create(:participatory_process, organization: organization) }
|
11
11
|
let!(:author) { create(:user, organization: organization) }
|
12
12
|
let!(:proposal) { create(:proposal, feature: feature, author: author) }
|
13
|
-
let!(:proposal_vote) {
|
13
|
+
let!(:proposal_vote) { build(:proposal_vote, proposal: proposal, author: author) }
|
14
14
|
|
15
15
|
subject { proposal_vote }
|
16
16
|
|
@@ -27,6 +27,7 @@ module Decidim
|
|
27
27
|
end
|
28
28
|
|
29
29
|
it "validates uniqueness for author and proposal combination" do
|
30
|
+
proposal_vote.save!
|
30
31
|
expect do
|
31
32
|
create(:proposal_vote, proposal: proposal, author: author)
|
32
33
|
end.to raise_error(ActiveRecord::RecordInvalid)
|
@@ -57,6 +58,12 @@ module Decidim
|
|
57
58
|
expect(proposal_vote).to be_invalid
|
58
59
|
end
|
59
60
|
end
|
61
|
+
|
62
|
+
context "when proposal is rejected" do
|
63
|
+
let!(:proposal) { create(:proposal, :rejected, feature: feature, author: author) }
|
64
|
+
|
65
|
+
it { is_expected.to be_invalid }
|
66
|
+
end
|
60
67
|
end
|
61
68
|
end
|
62
69
|
end
|
@@ -63,7 +63,7 @@ fr:
|
|
63
63
|
category: Catégorie
|
64
64
|
category_prompt: Sélectionner une catégorie
|
65
65
|
scope_prompt: Sélectionnez une portée
|
66
|
-
scopes:
|
66
|
+
scopes: Zones d'application
|
67
67
|
search: Rechercher
|
68
68
|
filters_small_view:
|
69
69
|
close_modal: Fermer la fenêtre de dialogue
|
@@ -75,6 +75,6 @@ fr:
|
|
75
75
|
attendees: Participants
|
76
76
|
comments: Commentaires
|
77
77
|
contributions: Contributions
|
78
|
-
meetings:
|
78
|
+
meetings: Rencontre
|
79
79
|
proposals: Propositions
|
80
80
|
votes: Soutiens
|