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.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/app/commands/decidim/proposals/create_proposal.rb +12 -0
  3. data/app/commands/decidim/proposals/vote_proposal.rb +2 -0
  4. data/app/controllers/decidim/proposals/application_controller.rb +18 -0
  5. data/app/controllers/decidim/proposals/proposals_controller.rb +7 -1
  6. data/app/helpers/decidim/proposals/application_helper.rb +14 -0
  7. data/app/helpers/decidim/proposals/proposal_votes_helper.rb +45 -1
  8. data/app/models/decidim/proposals/proposal.rb +19 -0
  9. data/app/services/decidim/proposals/proposal_search.rb +1 -1
  10. data/app/views/decidim/proposals/admin/proposals/index.html.erb +11 -0
  11. data/app/views/decidim/proposals/proposals/_filters.html.erb +1 -1
  12. data/app/views/decidim/proposals/proposals/_vote_button.html.erb +9 -7
  13. data/app/views/decidim/proposals/proposals/_voting_rules.html.erb +35 -0
  14. data/app/views/decidim/proposals/proposals/index.html.erb +8 -4
  15. data/app/views/decidim/proposals/proposals/show.html.erb +11 -4
  16. data/config/locales/ca.yml +18 -6
  17. data/config/locales/en.yml +17 -5
  18. data/config/locales/es.yml +17 -5
  19. data/config/locales/eu.yml +28 -16
  20. data/config/locales/fi.yml +23 -11
  21. data/config/locales/fr.yml +21 -9
  22. data/config/locales/it.yml +17 -5
  23. data/config/locales/nl.yml +19 -7
  24. data/config/locales/pl.yml +17 -5
  25. data/config/locales/ru.yml +183 -0
  26. data/config/locales/uk.yml +36 -24
  27. data/lib/decidim/proposals/feature.rb +10 -8
  28. data/lib/decidim/proposals/test/factories.rb +29 -1
  29. data/lib/decidim/proposals/version.rb +10 -0
  30. metadata +25 -51
  31. 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: 'Предложения, представленные в этих итогах:'
@@ -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
- vote_limit: Гранична кількість голосів
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
- citizenship: Громадянство
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
- votes_limit:
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: Ви маєте право проголосувати лише по %{limit} пропозиціям, а не по скільком завгодно багатьом.
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
- 20.times do |n|
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 > 15
109
+ state, answer = if n > 3
108
110
  ["accepted", Decidim::Faker::Localized.sentence(10)]
109
- elsif n > 9
111
+ elsif n > 2
110
112
  ["rejected", nil]
111
- elsif n > 6
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
- rand(3).times do |m|
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
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # This holds decidim-proposals version.
5
+ module Proposals
6
+ def self.version
7
+ "0.7.0"
8
+ end
9
+ end
10
+ end