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.

Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/Gemfile.lock +41 -43
  4. data/decidim-admin/config/locales/fr.yml +21 -21
  5. data/decidim-admin/config/locales/uk.yml +60 -60
  6. data/decidim-assemblies/config/locales/fr.yml +20 -20
  7. data/decidim-assemblies/config/locales/uk.yml +6 -6
  8. data/decidim-budgets/config/locales/fr.yml +4 -4
  9. data/decidim-budgets/config/locales/uk.yml +3 -3
  10. data/decidim-comments/app/assets/javascripts/decidim/comments/bundle.js +7 -7
  11. data/decidim-comments/config/locales/fr.yml +11 -11
  12. data/decidim-comments/config/locales/uk.yml +1 -1
  13. data/decidim-core/config/locales/fr.yml +12 -12
  14. data/decidim-core/config/locales/uk.yml +12 -12
  15. data/decidim-core/lib/decidim/core/version.rb +1 -1
  16. data/decidim-dev/decidim-dev.gemspec +0 -1
  17. data/decidim-meetings/config/locales/fr.yml +43 -43
  18. data/decidim-meetings/config/locales/uk.yml +3 -3
  19. data/decidim-pages/config/locales/fr.yml +1 -1
  20. data/decidim-participatory_processes/config/locales/fr.yml +7 -7
  21. data/decidim-participatory_processes/config/locales/uk.yml +70 -70
  22. data/decidim-proposals/app/models/decidim/proposals/proposal.rb +3 -3
  23. data/decidim-proposals/app/models/decidim/proposals/proposal_vote.rb +6 -0
  24. data/decidim-proposals/app/views/decidim/proposals/proposals/_vote_button.html.erb +21 -19
  25. data/decidim-proposals/app/views/decidim/proposals/proposals/show.html.erb +7 -3
  26. data/decidim-proposals/config/locales/fr.yml +10 -10
  27. data/decidim-proposals/config/locales/uk.yml +5 -5
  28. data/decidim-proposals/lib/decidim/proposals/feature.rb +1 -2
  29. data/decidim-proposals/spec/features/vote_proposal_spec.rb +44 -5
  30. data/decidim-proposals/spec/models/decidim/proposals/proposal_vote_spec.rb +8 -1
  31. data/decidim-results/config/locales/fr.yml +2 -2
  32. data/decidim-results/config/locales/uk.yml +3 -3
  33. data/decidim-surveys/config/locales/fr.yml +1 -1
  34. data/decidim-surveys/config/locales/uk.yml +2 -2
  35. data/decidim-system/config/locales/fr.yml +5 -5
  36. data/lib/generators/decidim/app_generator.rb +3 -0
  37. data/lib/generators/decidim/install_generator.rb +1 -1
  38. data/package-lock.json +575 -3940
  39. data/package.json +1 -1
  40. 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: Процеси для %{group}
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
- <div id="proposal-<%= proposal.id %>-vote-button">
2
- <% if !current_user %>
3
- <% if current_settings.votes_blocked? %>
4
- <%= 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 %>
5
- <% else %>
6
- <%= 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)}" %>
7
- <% end %>
8
- <% else %>
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 vote_limit_enabled? && remaining_votes_count_for(current_user) == 0 %>
13
- <%= 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 %>
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
- <%= 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)}" %>
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
- <% end %>
23
- </div>
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
- <%= render partial: "votes_count", locals: { proposal: @proposal, from_proposals_list: false } %>
25
- <%= render partial: "vote_button", locals: { proposal: @proposal, from_proposals_list: false } %>
26
- <%= render partial: "decidim/shared/follow_button", locals: { followable: @proposal } %>
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 activées
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: Retenues
53
+ accepted: Retenue
54
54
  answer_proposal: Répondre
55
55
  evaluating: En cours d'évaluation
56
- rejected: Refusé
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: Retenue
74
+ accepted: Retenues
75
75
  evaluating: En cours d'évaluation
76
76
  not_answered: Resté sans réponse
77
- rejected: Refusé
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: État
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: Tous
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: Refusé
111
+ rejected: Refusée
112
112
  related_to: Liée à
113
113
  scope_prompt: Sélectionnez une portée
114
- scopes: Zone d'application
114
+ scopes: Zones d'application
115
115
  search: Rechercher
116
- state: Etat
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
- it "doesn't show the vote proposal button and counts" do
15
- expect(page).to have_no_button("Vote")
16
- expect(page).to have_no_css(".card__support__data span", text: "0 VOTES")
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
- expect(page).to have_css(".card__support__data", text: "0 VOTES")
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) { create(:proposal_vote, proposal: proposal, author: author) }
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: Zone d'application
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: Réunions
78
+ meetings: Rencontre
79
79
  proposals: Propositions
80
80
  votes: Soutiens