decidim-proposals 0.14.4 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -0
- data/app/assets/images/decidim/gamification/badges/accepted_proposals.svg +194 -104
- data/app/assets/images/decidim/gamification/badges/proposals.svg +192 -108
- data/app/assets/javascripts/decidim/proposals/admin/proposals.es6 +25 -20
- data/app/cells/decidim/proposals/proposal_activity_cell.rb +19 -0
- data/app/commands/decidim/proposals/admin/answer_proposal.rb +6 -2
- data/app/commands/decidim/proposals/admin/create_proposal.rb +4 -4
- data/app/commands/decidim/proposals/admin/import_participatory_text.rb +49 -0
- data/app/commands/decidim/proposals/admin/import_proposals.rb +7 -21
- data/app/commands/decidim/proposals/admin/merge_proposals.rb +68 -0
- data/app/commands/decidim/proposals/admin/publish_participatory_text.rb +65 -0
- data/app/commands/decidim/proposals/admin/split_proposals.rb +67 -0
- data/app/commands/decidim/proposals/admin/update_proposal.rb +67 -0
- data/app/commands/decidim/proposals/create_collaborative_draft.rb +19 -14
- data/app/commands/decidim/proposals/create_proposal.rb +4 -2
- data/app/commands/decidim/proposals/endorse_proposal.rb +5 -1
- data/app/commands/decidim/proposals/publish_proposal.rb +15 -3
- data/app/commands/decidim/proposals/unvote_proposal.rb +34 -3
- data/app/commands/decidim/proposals/vote_proposal.rb +32 -2
- data/app/controllers/decidim/proposals/admin/participatory_texts_controller.rb +62 -0
- data/app/controllers/decidim/proposals/admin/proposals_controller.rb +28 -1
- data/app/controllers/decidim/proposals/admin/proposals_merges_controller.rb +27 -0
- data/app/controllers/decidim/proposals/admin/proposals_splits_controller.rb +27 -0
- data/app/controllers/decidim/proposals/collaborative_drafts_controller.rb +0 -1
- data/app/controllers/decidim/proposals/proposal_endorsements_controller.rb +6 -2
- data/app/controllers/decidim/proposals/proposal_votes_controller.rb +15 -0
- data/app/controllers/decidim/proposals/proposals_controller.rb +1 -1
- data/app/forms/decidim/proposals/admin/import_participatory_text_form.rb +28 -0
- data/app/forms/decidim/proposals/admin/preview_participatory_text_form.rb +21 -0
- data/app/forms/decidim/proposals/admin/proposal_form.rb +4 -1
- data/app/forms/decidim/proposals/admin/proposals_fork_form.rb +57 -0
- data/app/forms/decidim/proposals/admin/proposals_merge_form.rb +13 -0
- data/app/forms/decidim/proposals/admin/proposals_split_form.rb +12 -0
- data/app/helpers/decidim/proposals/application_helper.rb +23 -0
- data/app/helpers/decidim/proposals/map_helper.rb +1 -1
- data/app/helpers/decidim/proposals/participatory_texts_helper.rb +18 -0
- data/app/helpers/decidim/proposals/proposal_endorsements_helper.rb +1 -1
- data/app/helpers/decidim/proposals/proposal_wizard_helper.rb +2 -1
- data/app/jobs/decidim/proposals/notify_proposals_mentioned_job.rb +3 -4
- data/app/models/decidim/proposals/participatory_text.rb +13 -0
- data/app/models/decidim/proposals/proposal.rb +31 -9
- data/app/models/decidim/proposals/proposal_vote.rb +21 -1
- data/app/permissions/decidim/proposals/admin/permissions.rb +30 -0
- data/app/presenters/decidim/proposals/admin_log/proposal_presenter.rb +5 -1
- data/app/presenters/decidim/proposals/log/resource_presenter.rb +18 -0
- data/app/presenters/decidim/proposals/official_author_presenter.rb +4 -0
- data/app/queries/decidim/proposals/metrics/accepted_proposals_metric_manage.rb +29 -0
- data/app/queries/decidim/proposals/metrics/proposals_metric_manage.rb +53 -0
- data/app/queries/decidim/proposals/metrics/votes_metric_manage.rb +57 -0
- data/app/services/decidim/proposals/proposal_builder.rb +72 -0
- data/app/services/decidim/proposals/proposal_search.rb +2 -2
- data/app/views/decidim/proposals/admin/participatory_texts/_article-preview.html.erb +13 -0
- data/app/views/decidim/proposals/admin/participatory_texts/_bulk-actions.html.erb +1 -0
- data/app/views/decidim/proposals/admin/participatory_texts/index.html.erb +43 -0
- data/app/views/decidim/proposals/admin/participatory_texts/new_import.html.erb +39 -0
- data/app/views/decidim/proposals/admin/proposals/_bulk-actions.html.erb +7 -2
- data/app/views/decidim/proposals/admin/proposals/_proposal-tr.html.erb +4 -0
- data/app/views/decidim/proposals/admin/proposals/bulk_actions/_dropdown.html.erb +36 -0
- data/app/views/decidim/proposals/admin/proposals/bulk_actions/_merge.html.erb +15 -0
- data/app/views/decidim/proposals/admin/proposals/bulk_actions/_recategorize.html.erb +15 -0
- data/app/views/decidim/proposals/admin/proposals/bulk_actions/_split.html.erb +15 -0
- data/app/views/decidim/proposals/admin/proposals/edit.html.erb +7 -0
- data/app/views/decidim/proposals/admin/proposals/index.html.erb +2 -2
- data/app/views/decidim/proposals/collaborative_drafts/compare.html.erb +2 -2
- data/app/views/decidim/proposals/collaborative_drafts/complete.html.erb +1 -1
- data/app/views/decidim/proposals/collaborative_drafts/show.html.erb +1 -1
- data/app/views/decidim/proposals/proposal_endorsements/_identity.html.erb +5 -1
- data/app/views/decidim/proposals/proposal_endorsements/update_buttons_and_counters.js.erb +1 -1
- data/app/views/decidim/proposals/proposal_votes/update_buttons_and_counters.js.erb +13 -4
- data/app/views/decidim/proposals/proposals/_edit_form_fields.html.erb +2 -2
- data/app/views/decidim/proposals/proposals/_endorsement_identities_cabin.html.erb +1 -1
- data/app/views/decidim/proposals/proposals/_proposal_similar.html.erb +1 -1
- data/app/views/decidim/proposals/proposals/_voting_rules.html.erb +15 -4
- data/app/views/decidim/proposals/proposals/new.html.erb +1 -1
- data/config/locales/ca.yml +72 -4
- data/config/locales/de.yml +71 -3
- data/config/locales/en.yml +71 -3
- data/config/locales/es-PY.yml +71 -3
- data/config/locales/es.yml +73 -5
- data/config/locales/eu.yml +71 -3
- data/config/locales/fi.yml +81 -13
- data/config/locales/fr.yml +71 -3
- data/config/locales/gl.yml +71 -3
- data/config/locales/hu.yml +71 -3
- data/config/locales/it.yml +71 -3
- data/config/locales/nl.yml +71 -3
- data/config/locales/pl.yml +71 -3
- data/config/locales/pt-BR.yml +72 -4
- data/config/locales/pt.yml +71 -3
- data/config/locales/sv.yml +71 -3
- data/db/migrate/20180927111721_create_participatory_texts.rb +13 -0
- data/db/migrate/20180930125321_add_participatory_text_level_to_proposals.rb +7 -0
- data/db/migrate/20180930125321_add_position_to_proposals.rb +7 -0
- data/db/migrate/20181003074440_fix_user_groups_ids_in_proposals_endorsements.rb +16 -0
- data/db/migrate/20181010114622_add_temporary_votes.rb +9 -0
- data/db/migrate/20181016132225_add_organization_as_author.rb +13 -0
- data/db/migrate/20181017084221_make_author_polymorhpic_for_proposal_endorsements.rb +31 -0
- data/lib/decidim/content_parsers/proposal_parser.rb +9 -3
- data/lib/decidim/proposals.rb +3 -1
- data/lib/decidim/proposals/admin_engine.rb +12 -1
- data/lib/decidim/proposals/component.rb +60 -23
- data/lib/decidim/proposals/engine.rb +55 -12
- data/lib/decidim/proposals/markdown_to_proposals.rb +90 -0
- data/lib/decidim/proposals/participatory_text_section.rb +21 -0
- data/lib/decidim/proposals/test/factories.rb +35 -7
- data/lib/decidim/proposals/version.rb +1 -1
- metadata +86 -19
data/config/locales/pt.yml
CHANGED
@@ -75,8 +75,10 @@ pt:
|
|
75
75
|
collaborative_drafts_enabled: Rascunhos colaborativos ativados
|
76
76
|
comments_enabled: Comentários ativados
|
77
77
|
geocoding_enabled: Geocoding habilitado
|
78
|
+
minimum_votes_per_user: Mínimo de votos por usuário
|
78
79
|
new_proposal_help_text: Novo texto de ajuda da proposta
|
79
80
|
official_proposals_enabled: Proposta oficial habilitada
|
81
|
+
participatory_texts_enabled: Textos participativos habilitados
|
80
82
|
proposal_answering_enabled: Resposta de proposta ativada
|
81
83
|
proposal_edit_before_minutes: As propostas podem ser editadas pelos autores antes que muitos minutos passem.
|
82
84
|
proposal_length: Comprimento máximo do corpo da proposta
|
@@ -187,29 +189,48 @@ pt:
|
|
187
189
|
gamification:
|
188
190
|
badges:
|
189
191
|
accepted_proposals:
|
192
|
+
conditions:
|
193
|
+
- Escolha o espaço de participação de seu interesse com o envio de propostas ativadas
|
194
|
+
- Tente fazer propostas que possam ser realizadas. Desta forma, eles são mais propensos a serem aceitos.
|
195
|
+
description: Esse selo é concedido quando você participa ativamente de novas propostas e elas são aceitas.
|
190
196
|
description_another: Este utilizador obteve %{score} propostas aceites.
|
191
197
|
description_own: Você tem %{score} propostas aceitas.
|
192
|
-
explanation: Os usuários recebem esse selo ao aceitar suas propostas.
|
193
198
|
name: Propostas aceitas
|
194
199
|
next_level_in: Receba mais %{score} propostas aceitas para alcançar o próximo nível!
|
195
200
|
unearned_another: Este usuário ainda não recebeu nenhuma proposta aceita.
|
196
201
|
unearned_own: Você não recebeu nenhuma proposta aceita ainda.
|
197
202
|
proposal_votes:
|
203
|
+
conditions:
|
204
|
+
- Navegue e passe algum tempo lendo as propostas de outras pessoas
|
205
|
+
- Dar apoio às propostas que você gosta ou encontrar interessante
|
206
|
+
description: Este selo é concedido quando você oferece suporte a propostas de outras pessoas.
|
198
207
|
description_another: Este usuário deu suporte a %{score} propostas.
|
199
208
|
description_own: Você deu suporte a %{score} propostas.
|
200
|
-
explanation: Os usuários recebem esse selo dando suporte a propostas.
|
201
209
|
name: Apoios proposta
|
202
210
|
next_level_in: Dê suporte a mais %{score} propostas para alcançar o próximo nível!
|
203
211
|
unearned_another: Este usuário ainda não deu suporte a nenhuma proposta.
|
204
212
|
unearned_own: Você deu suporte a nenhuma proposta ainda.
|
205
213
|
proposals:
|
214
|
+
conditions:
|
215
|
+
- Escolha o espaço de participação de seu interesse com o envio de propostas ativadas
|
216
|
+
- Crie uma nova proposta
|
217
|
+
description: Esse selo é concedido quando você participa ativamente de novas propostas.
|
206
218
|
description_another: Este usuário criou %{score} propostas.
|
207
219
|
description_own: Você criou %{score} propostas.
|
208
|
-
explanation: Os usuários recebem esse selo criando propostas.
|
209
220
|
name: Propostas
|
210
221
|
next_level_in: Crie mais %{score} propostas para alcançar o próximo nível!
|
211
222
|
unearned_another: Este usuário ainda não criou nenhuma proposta.
|
212
223
|
unearned_own: Você não criou nenhuma proposta ainda.
|
224
|
+
metrics:
|
225
|
+
accepted_proposals:
|
226
|
+
object: propostas
|
227
|
+
title: Propostas aceitas
|
228
|
+
proposals:
|
229
|
+
object: propostas
|
230
|
+
title: Propostas
|
231
|
+
votes:
|
232
|
+
object: votos
|
233
|
+
title: Votos
|
213
234
|
participatory_processes:
|
214
235
|
participatory_process_groups:
|
215
236
|
highlighted_proposals:
|
@@ -221,8 +242,10 @@ pt:
|
|
221
242
|
proposals:
|
222
243
|
actions:
|
223
244
|
answer: Responda
|
245
|
+
edit_proposal: Editar proposta
|
224
246
|
import: Importar de outro componente
|
225
247
|
new: Nova proposta
|
248
|
+
participatory_texts: Textos participativos
|
226
249
|
private_notes: Notas privadas
|
227
250
|
title: Ações
|
228
251
|
admin:
|
@@ -234,6 +257,28 @@ pt:
|
|
234
257
|
models:
|
235
258
|
proposal:
|
236
259
|
name: Proposta
|
260
|
+
participatory_texts:
|
261
|
+
bulk-actions:
|
262
|
+
import_doc: Documento de importação
|
263
|
+
import:
|
264
|
+
invalid: O formulário é inválido!
|
265
|
+
success: Parabéns, as seções a seguir foram analisadas do documento importado, elas foram convertidas em propostas. Agora você pode revisar e ajustar o que precisar antes de publicar.
|
266
|
+
index:
|
267
|
+
info_1: As seções a seguir foram analisadas a partir do documento importado, elas foram convertidas em propostas. Agora você pode revisar e ajustar o que precisar antes de publicar.
|
268
|
+
publish_document: Publicar documento
|
269
|
+
title: PREVIEW TEXTO PARTICIPATIVO
|
270
|
+
new_import:
|
271
|
+
bottom_hint: "(Você será capaz de visualizar e classificar as seções do documento)"
|
272
|
+
document_legend: 'Adicione um documento menor que 2MB, cada seção até que 3 níveis de profundidade sejam analisados em Propostas. Formatos suportados são: Markdown'
|
273
|
+
title: ADICIONAR DOCUMENTO
|
274
|
+
upload_document: Carregar documento
|
275
|
+
publish:
|
276
|
+
invalid: Não foi possível publicar propostas
|
277
|
+
success: Todas as propostas foram publicadas
|
278
|
+
sections:
|
279
|
+
article: "<em>Artigo</em>"
|
280
|
+
section: "<em>Seção:</em> <strong>%{title}</strong>"
|
281
|
+
sub-section: "<em>Subsecção:</em> %{title}"
|
237
282
|
proposal_answers:
|
238
283
|
edit:
|
239
284
|
accepted: Aceitaram
|
@@ -257,6 +302,9 @@ pt:
|
|
257
302
|
create:
|
258
303
|
invalid: Tem havido um problema ao criar esta proposta
|
259
304
|
success: Proposta criada com sucesso
|
305
|
+
edit:
|
306
|
+
title: Atualizar proposta
|
307
|
+
update: Atualizar
|
260
308
|
form:
|
261
309
|
attachment_legend: "(Opcional) Adicionar um anexo"
|
262
310
|
select_a_category: Selecione uma categoria
|
@@ -264,7 +312,12 @@ pt:
|
|
264
312
|
actions: Ações
|
265
313
|
cancel: Cancelar
|
266
314
|
change_category: Alterar categoria
|
315
|
+
merge: Junte-se a um novo
|
316
|
+
merge_button: Mesclar
|
317
|
+
select_component: Selecione um componente
|
267
318
|
selected: selecionado
|
319
|
+
split: Dividir propostas
|
320
|
+
split_button: Dividido
|
268
321
|
title: Propostas
|
269
322
|
update: Atualizar
|
270
323
|
new:
|
@@ -284,6 +337,14 @@ pt:
|
|
284
337
|
no_components: Não há outros componentes da proposta neste espaço participativo para importar as propostas.
|
285
338
|
select_component: Selecione um componente
|
286
339
|
select_states: Verifique os estados das propostas para importar
|
340
|
+
proposals_merges:
|
341
|
+
create:
|
342
|
+
invalid: Ocorreu um erro ao mesclar as propostas selecionadas.
|
343
|
+
success: Fundiu com sucesso as propostas em uma nova.
|
344
|
+
proposals_splits:
|
345
|
+
create:
|
346
|
+
invalid: Ocorreu um erro ao dividir as propostas selecionadas.
|
347
|
+
success: Com sucesso dividiu as propostas em novas.
|
287
348
|
shared:
|
288
349
|
info_proposal:
|
289
350
|
body: Corpo
|
@@ -294,6 +355,7 @@ pt:
|
|
294
355
|
proposal:
|
295
356
|
answer: "%{user_name} respondeu a proposta %{resource_name} no espaço %{space_name}"
|
296
357
|
create: "%{user_name} criou a proposta %{resource_name} no espaço %{space_name} como uma proposta oficial"
|
358
|
+
update: "%{user_name} atualizou a proposta oficial %{resource_name} no espaço %{space_name}"
|
297
359
|
proposal_note:
|
298
360
|
create: "%{user_name} deixou uma nota privada na proposta %{resource_name} no espaço %{space_name}"
|
299
361
|
answers:
|
@@ -422,6 +484,8 @@ pt:
|
|
422
484
|
destroy_draft:
|
423
485
|
error: Houve erros ao excluir o rascunho da proposta.
|
424
486
|
success: O rascunho da proposta foi excluído com sucesso.
|
487
|
+
last_activity:
|
488
|
+
new_proposal_at_html: "<span>Nova proposta em %{link}</span>"
|
425
489
|
models:
|
426
490
|
collaborative_draft:
|
427
491
|
fields:
|
@@ -570,6 +634,10 @@ pt:
|
|
570
634
|
voting_rules:
|
571
635
|
can_accumulate_supports_beyond_threshold:
|
572
636
|
description: Cada proposta pode acumular mais de %{limit} suporta
|
637
|
+
minimum_votes_per_user:
|
638
|
+
description: Você deve distribuir um mínimo de 3 votos entre diferentes propostas.
|
639
|
+
given_enough_votes: Você deu suporte suficiente.
|
640
|
+
supports_remaining: Você tem que votar %{remaining_votes} mais propostas para seus votos a serem levados em conta.
|
573
641
|
proposal_limit:
|
574
642
|
description: Você pode criar até %{limit} propostas.
|
575
643
|
threshold_per_proposal:
|
data/config/locales/sv.yml
CHANGED
@@ -75,8 +75,10 @@ sv:
|
|
75
75
|
collaborative_drafts_enabled: Samarbetsutkast aktiverat
|
76
76
|
comments_enabled: Kommentarer aktiverade
|
77
77
|
geocoding_enabled: Geocoding aktiverad
|
78
|
+
minimum_votes_per_user: Minsta antal röster per användare
|
78
79
|
new_proposal_help_text: Nytt förslag till hjälptext
|
79
80
|
official_proposals_enabled: Officiella förslag möjliga
|
81
|
+
participatory_texts_enabled: Deltagande texter aktiverade
|
80
82
|
proposal_answering_enabled: Svar tlll förslag aktiverat
|
81
83
|
proposal_edit_before_minutes: Förslag kan redigeras av författare innan så här många minuter passerar
|
82
84
|
proposal_length: Maximal längd på förslagets innehåll
|
@@ -187,29 +189,48 @@ sv:
|
|
187
189
|
gamification:
|
188
190
|
badges:
|
189
191
|
accepted_proposals:
|
192
|
+
conditions:
|
193
|
+
- Välj deltagarutrymme av intresse med inlämning av förslag aktiverade
|
194
|
+
- Försök att lägga fram förslag som kan utföras. På detta sätt är de mer benägna att accepteras.
|
195
|
+
description: Detta märke beviljas när du aktivt deltar med nya förslag och dessa accepteras.
|
190
196
|
description_another: Den här användaren har fått %{score} förslag accepterade.
|
191
197
|
description_own: Du har accepterat %{score} förslag.
|
192
|
-
explanation: Användare får detta märke genom att få sina förslag godkända.
|
193
198
|
name: Godkända förslag
|
194
199
|
next_level_in: Få %{score} fler förslag accepterade för att nå nästa nivå!
|
195
200
|
unearned_another: Den här användaren har inte fått några förslag accepterade än.
|
196
201
|
unearned_own: Du har inga förslag accepterade än.
|
197
202
|
proposal_votes:
|
203
|
+
conditions:
|
204
|
+
- Bläddra och spendera lite tid på att läsa andras förslag
|
205
|
+
- Ge stöd till de förslag du tycker om eller hitta intressanta
|
206
|
+
description: Detta märke beviljas när du stöder andra människors förslag.
|
198
207
|
description_another: Denna användare har gett stöd till %{score} förslag.
|
199
208
|
description_own: Du har gett stöd till %{score} förslag.
|
200
|
-
explanation: Användare får detta märke genom att ge stöd till förslag.
|
201
209
|
name: Förslagstjänster
|
202
210
|
next_level_in: Ge stöd till %{score} fler förslag för att nå nästa nivå!
|
203
211
|
unearned_another: Den här användaren har inte stöttat några förslag än.
|
204
212
|
unearned_own: Du har inte stöttat några förslag än.
|
205
213
|
proposals:
|
214
|
+
conditions:
|
215
|
+
- Välj deltagarutrymme av intresse med inlämning av förslag aktiverade
|
216
|
+
- Skapa ett nytt förslag
|
217
|
+
description: Detta märke beviljas när du aktivt deltar med nya förslag.
|
206
218
|
description_another: Den här användaren har skapat %{score} förslag.
|
207
219
|
description_own: Du har skapat %{score} förslag.
|
208
|
-
explanation: Användare får detta märke genom att skapa förslag.
|
209
220
|
name: Förslag
|
210
221
|
next_level_in: Skapa %{score} fler förslag för att nå nästa nivå!
|
211
222
|
unearned_another: Den här användaren har inte skapat några förslag ännu.
|
212
223
|
unearned_own: Du har inte skapat några förslag än.
|
224
|
+
metrics:
|
225
|
+
accepted_proposals:
|
226
|
+
object: förslag
|
227
|
+
title: Godkända Förslag
|
228
|
+
proposals:
|
229
|
+
object: förslag
|
230
|
+
title: Förslag
|
231
|
+
votes:
|
232
|
+
object: röster
|
233
|
+
title: Röster
|
213
234
|
participatory_processes:
|
214
235
|
participatory_process_groups:
|
215
236
|
highlighted_proposals:
|
@@ -221,8 +242,10 @@ sv:
|
|
221
242
|
proposals:
|
222
243
|
actions:
|
223
244
|
answer: Svara
|
245
|
+
edit_proposal: Redigera förslag
|
224
246
|
import: Importera från en annan komponent
|
225
247
|
new: Nytt förslag
|
248
|
+
participatory_texts: Deltagande texter
|
226
249
|
private_notes: Privata anteckningar
|
227
250
|
title: Åtgärder
|
228
251
|
admin:
|
@@ -234,6 +257,28 @@ sv:
|
|
234
257
|
models:
|
235
258
|
proposal:
|
236
259
|
name: Förslag
|
260
|
+
participatory_texts:
|
261
|
+
bulk-actions:
|
262
|
+
import_doc: Importera dokument
|
263
|
+
import:
|
264
|
+
invalid: Blanketten är ogiltig!
|
265
|
+
success: Grattis, följande avsnitt har analyserats från det importerade dokumentet, de har konverterats till förslag. Nu kan du granska och justera vad du behöver innan du publicerar.
|
266
|
+
index:
|
267
|
+
info_1: Följande avsnitt har analyserats från det importerade dokumentet, de har konverterats till förslag. Nu kan du granska och justera vad du behöver innan du publicerar.
|
268
|
+
publish_document: Publicera dokument
|
269
|
+
title: PREVIEW PARTICIPERY TEXT
|
270
|
+
new_import:
|
271
|
+
bottom_hint: "(Du kommer att kunna förhandsgranska och sortera dokumentavsnitt)"
|
272
|
+
document_legend: 'Lägg till ett dokument mindre än 2 MB, varje sektion tills 3 nivåer djup kommer att analyseras i förslag. Suported format är: Markdown'
|
273
|
+
title: ADD DOKUMENT
|
274
|
+
upload_document: Ladda upp dokument
|
275
|
+
publish:
|
276
|
+
invalid: Kunde inte publicera förslag
|
277
|
+
success: Alla förslag har publicerats
|
278
|
+
sections:
|
279
|
+
article: "<em>Artikel</em>"
|
280
|
+
section: "<em>Avsnitt:</em> <strong>%{title}</strong>"
|
281
|
+
sub-section: "<em>Underavsnitt:</em> %{title}"
|
237
282
|
proposal_answers:
|
238
283
|
edit:
|
239
284
|
accepted: Accepterad
|
@@ -257,6 +302,9 @@ sv:
|
|
257
302
|
create:
|
258
303
|
invalid: Det har uppstått ett problem med att skapa detta förslag
|
259
304
|
success: Förslaget skapades
|
305
|
+
edit:
|
306
|
+
title: Uppdatera förslag
|
307
|
+
update: Uppdatera
|
260
308
|
form:
|
261
309
|
attachment_legend: "(Valfritt) Lägg till en bilaga"
|
262
310
|
select_a_category: Välj en kategori
|
@@ -264,7 +312,12 @@ sv:
|
|
264
312
|
actions: Åtgärder
|
265
313
|
cancel: Avbryt
|
266
314
|
change_category: Ändra kategori
|
315
|
+
merge: Sammanfoga till en ny
|
316
|
+
merge_button: Sammanfoga
|
317
|
+
select_component: Välj en komponent
|
267
318
|
selected: vald
|
319
|
+
split: Delade förslag
|
320
|
+
split_button: Dela
|
268
321
|
title: Förslag
|
269
322
|
update: Uppdatera
|
270
323
|
new:
|
@@ -284,6 +337,14 @@ sv:
|
|
284
337
|
no_components: Det finns inga andra förslagskomponenter i detta deltagandeutrymme att importera förslagen från.
|
285
338
|
select_component: Välj en komponent
|
286
339
|
select_states: Kontrollera tillstånden för de förslag som ska importeras
|
340
|
+
proposals_merges:
|
341
|
+
create:
|
342
|
+
invalid: Det fanns ett fel att slå samman de valda förslagen.
|
343
|
+
success: Framgångsrikt fusionerade förslagen till en ny.
|
344
|
+
proposals_splits:
|
345
|
+
create:
|
346
|
+
invalid: Det gick inte att splittra de valda förslagen.
|
347
|
+
success: Framgångsrikt splittrade förslagen till nya.
|
287
348
|
shared:
|
288
349
|
info_proposal:
|
289
350
|
body: Innehåll
|
@@ -294,6 +355,7 @@ sv:
|
|
294
355
|
proposal:
|
295
356
|
answer: "%{user_name} svarade på förslaget %{resource_name} på utrymmet %{space_name}"
|
296
357
|
create: "%{user_name} skapade förslaget %{resource_name} på utrymmet %{space_name} som ett officiellt förslag"
|
358
|
+
update: "%{user_name} uppdaterade officiella förslaget %{resource_name} på platsen %{space_name}"
|
297
359
|
proposal_note:
|
298
360
|
create: "%{user_name} lämnade en privat anteckning på förslaget %{resource_name} på platsen %{space_name}"
|
299
361
|
answers:
|
@@ -422,6 +484,8 @@ sv:
|
|
422
484
|
destroy_draft:
|
423
485
|
error: Det har uppstått fel vid radering av förslagsutkastet.
|
424
486
|
success: Förslagsutkastet har tagits bort.
|
487
|
+
last_activity:
|
488
|
+
new_proposal_at_html: "<span>Nytt förslag till %{link}</span>"
|
425
489
|
models:
|
426
490
|
collaborative_draft:
|
427
491
|
fields:
|
@@ -570,6 +634,10 @@ sv:
|
|
570
634
|
voting_rules:
|
571
635
|
can_accumulate_supports_beyond_threshold:
|
572
636
|
description: Varje förslag kan samla mer än %{limit} stöd
|
637
|
+
minimum_votes_per_user:
|
638
|
+
description: Du måste distribuera minst 3 röster bland olika förslag.
|
639
|
+
given_enough_votes: Du har gett tillräckligt med stöd.
|
640
|
+
supports_remaining: Du måste rösta %{remaining_votes} ytterligare förslag för att dina röster ska beaktas.
|
573
641
|
proposal_limit:
|
574
642
|
description: Du kan skapa upp till %{limit} förslag.
|
575
643
|
threshold_per_proposal:
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class CreateParticipatoryTexts < ActiveRecord::Migration[5.2]
|
4
|
+
def change
|
5
|
+
create_table :decidim_proposals_participatory_texts do |t|
|
6
|
+
t.jsonb :title
|
7
|
+
t.jsonb :description
|
8
|
+
t.belongs_to :decidim_component, null: false, index: { name: "idx_participatory_texts_on_decidim_component_id" }
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class FixUserGroupsIdsInProposalsEndorsements < ActiveRecord::Migration[5.2]
|
4
|
+
# rubocop:disable Rails/SkipsModelValidations
|
5
|
+
def change
|
6
|
+
Decidim::UserGroup.find_each do |group|
|
7
|
+
old_id = group.extended_data["old_user_group_id"]
|
8
|
+
next unless old_id
|
9
|
+
|
10
|
+
Decidim::Proposals::ProposalEndorsement
|
11
|
+
.where(decidim_user_group_id: old_id)
|
12
|
+
.update_all(decidim_user_group_id: group.id)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
# rubocop:enable Rails/SkipsModelValidations
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class AddOrganizationAsAuthor < ActiveRecord::Migration[5.2]
|
4
|
+
def change
|
5
|
+
official_proposals = Decidim::Proposals::Proposal.find_each.select do |proposal|
|
6
|
+
proposal.coauthorships.count.zero?
|
7
|
+
end
|
8
|
+
|
9
|
+
official_proposals.each do |proposal|
|
10
|
+
proposal.add_coauthor(proposal.organization)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class MakeAuthorPolymorhpicForProposalEndorsements < ActiveRecord::Migration[5.2]
|
4
|
+
class ProposalEndorsement < ApplicationRecord
|
5
|
+
self.table_name = :decidim_proposals_proposal_endorsements
|
6
|
+
end
|
7
|
+
|
8
|
+
def change
|
9
|
+
remove_index :decidim_proposals_proposal_endorsements, :decidim_author_id
|
10
|
+
|
11
|
+
add_column :decidim_proposals_proposal_endorsements, :decidim_author_type, :string
|
12
|
+
|
13
|
+
reversible do |direction|
|
14
|
+
direction.up do
|
15
|
+
execute <<~SQL.squish
|
16
|
+
UPDATE decidim_proposals_proposal_endorsements
|
17
|
+
SET decidim_author_type = 'Decidim::UserBaseEntity'
|
18
|
+
SQL
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
add_index :decidim_proposals_proposal_endorsements,
|
23
|
+
[:decidim_author_id, :decidim_author_type],
|
24
|
+
name: "index_decidim_proposals_proposal_endorsements_on_decidim_author"
|
25
|
+
|
26
|
+
change_column_null :decidim_proposals_proposal_endorsements, :decidim_author_id, false
|
27
|
+
change_column_null :decidim_proposals_proposal_endorsements, :decidim_author_type, false
|
28
|
+
|
29
|
+
ProposalEndorsement.reset_column_information
|
30
|
+
end
|
31
|
+
end
|
@@ -20,9 +20,10 @@ module Decidim
|
|
20
20
|
Metadata = Struct.new(:linked_proposals)
|
21
21
|
|
22
22
|
# Matches a URL
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
URL_REGEX_SCHEME = '(?:http(s)?:\/\/)'
|
24
|
+
URL_REGEX_CONTENT = '[\w.-]+[\w\-\._~:\/?#\[\]@!\$&\'\(\)\*\+,;=.]+'
|
25
|
+
URL_REGEX_END_CHAR = '[\w]'
|
26
|
+
URL_REGEX = /#{URL_REGEX_SCHEME}#{URL_REGEX_CONTENT}#{URL_REGEX_END_CHAR}/i
|
26
27
|
# Matches a mentioned Proposal ID (~(d)+ expression)
|
27
28
|
ID_REGEX = /~(\d+)/
|
28
29
|
|
@@ -72,8 +73,13 @@ module Decidim
|
|
72
73
|
|
73
74
|
def proposal_from_url_match(match)
|
74
75
|
uri = URI.parse(match)
|
76
|
+
return if uri.path.blank?
|
77
|
+
|
75
78
|
proposal_id = uri.path.split("/").last
|
76
79
|
find_proposal_by_id(proposal_id)
|
80
|
+
rescue URI::InvalidURIError
|
81
|
+
Rails.logger.error("#{e.message}=>#{e.backtrace}")
|
82
|
+
nil
|
77
83
|
end
|
78
84
|
|
79
85
|
def proposal_from_id_match(match)
|