<%= decidim_sanitize_editor_admin translated_attribute(participatory_process_group.description) %>
diff --git a/decidim-participatory_processes/app/cells/decidim/participatory_processes/process_group_m_cell.rb b/decidim-participatory_processes/app/cells/decidim/participatory_processes/process_group_m_cell.rb
index a7371c82723aa..88c1f98cb3a60 100644
--- a/decidim-participatory_processes/app/cells/decidim/participatory_processes/process_group_m_cell.rb
+++ b/decidim-participatory_processes/app/cells/decidim/participatory_processes/process_group_m_cell.rb
@@ -16,7 +16,7 @@ def resource_image_path
end
def title
- translated_attribute model.title
+ decidim_escape_translated model.title
end
def resource_path
diff --git a/decidim-participatory_processes/config/locales/bg.yml b/decidim-participatory_processes/config/locales/bg.yml
index 1cbca58772a13..c48a8b353cd56 100644
--- a/decidim-participatory_processes/config/locales/bg.yml
+++ b/decidim-participatory_processes/config/locales/bg.yml
@@ -19,8 +19,74 @@ bg:
local_area: Район на организацията
meta_scope: Метаданни сфера
decidim:
+ admin:
+ actions:
+ filter:
+ all_processes: Показване на всички процеси
+ process_groups: Групи процеси
+ models:
+ participatory_process:
+ fields:
+ promoted: Акцентирано
+ participatory_process_group_landing_page:
+ edit:
+ active_content_blocks: Активни блокове със съдържание
+ inactive_content_blocks: Неактивни блокове със съдържание
+ participatory_process_steps:
+ destroy:
+ error:
+ active_step: Не може да изтриете активна фаза.
+ last_step: Не може да изтриете последната фаза от процеса.
+ participatory_processes:
+ index:
+ not_published: Не публикувано
+ log:
+ value_types:
+ participatory_process_type_presenter:
+ not_found: 'Типът на процеса не бе намерен в базата данни (Идент. №: %{id})'
+ participatory_process:
+ show:
+ related_assemblies: Свързани събрания
+ participatory_process_groups:
+ content_blocks:
+ title:
+ name: Заглавие, описание и хаштаг
+ participatory_process_steps:
+ index:
+ title: Фази на процес за участие
participatory_processes:
+ pages:
+ home:
+ highlighted_processes:
+ active_step: Активна фаза
+ more_information: Още информация
+ participate: Участвайте
+ participate_in: Участие в процеса %{resource_name}
+ processes_button_title: Връзка към страницата „Процеси“, на която се показват всички процеси
+ participatory_processes:
+ filters:
+ explanations:
+ no_active: Няма активни процеси
+ no_active_nor_upcoming: Няма активни или предстоящи процеси
+ index:
+ loading: Зареждане на резултати...
show:
area: Район
+ dates: Дати
developer_group: Група за популяризиране
end_date: Крайна дата
+ unspecified: Неопределено
+ layouts:
+ decidim:
+ participatory_process_widgets:
+ show:
+ active_step: Активна фаза
+ participatory_processes:
+ participatory_process:
+ active_step: 'Текуща фаза:'
+ promoted_process:
+ active_step: 'Текуща фаза:'
+ process_header_steps:
+ step: Фаза %{current} от общо %{total}
+ process_navigation:
+ process_menu_item: Процесът
diff --git a/decidim-participatory_processes/config/locales/ca.yml b/decidim-participatory_processes/config/locales/ca.yml
index c4b0cf0955bf7..2301a85b23dd7 100644
--- a/decidim-participatory_processes/config/locales/ca.yml
+++ b/decidim-participatory_processes/config/locales/ca.yml
@@ -337,12 +337,12 @@ ca:
notification_title: Se t'ha assignat el rol de %{role} al procés participatiu
%{resource_title}.
step_activated:
email_intro: 'Ja està activa la fase %{resource_title} per a %{participatory_space_title}. Pots veure-ho des d''aquesta pàgina:'
- email_outro: Has rebut aquesta notificació perquè estàs seguint %{participatory_space_title}. Pots deixar de rebre notificacions seguint l'enllaç anterior.
+ email_outro: Has rebut aquesta notificació perquè estàs seguint l'espai "%{participatory_space_title}". Pots deixar de rebre notificacions seguint l'enllaç anterior.
email_subject: Una actualització a %{participatory_space_title}
notification_title: Ja està activa la fase %{resource_title} per a
%{participatory_space_title}
step_changed:
email_intro: 'S''han actualitzat les dates de la fase %{resource_title} a %{participatory_space_title}. Pots veure-ho des d''aquesta pàgina:'
- email_outro: Has rebut aquesta notificació perquè estàs seguint %{participatory_space_title}. Pots deixar de rebre notificacions seguint l'enllaç anterior.
+ email_outro: Has rebut aquesta notificació perquè estàs seguint l'espai "%{participatory_space_title}". Pots deixar de rebre notificacions seguint l'enllaç anterior.
email_subject: Una actualització a %{participatory_space_title}
notification_title: Les dates de la fase
%{resource_title} a
%{participatory_space_title} s'han actualitzat.
help:
diff --git a/decidim-participatory_processes/config/locales/es.yml b/decidim-participatory_processes/config/locales/es.yml
index 93b7be9260e9a..c0d41cd52f78e 100644
--- a/decidim-participatory_processes/config/locales/es.yml
+++ b/decidim-participatory_processes/config/locales/es.yml
@@ -337,7 +337,7 @@ es:
notification_title: Se te ha asignado el rol de %{role} en el proceso participativo
%{resource_title}.
step_activated:
email_intro: 'Ya está activa la fase %{resource_title} para %{participatory_space_title}. Puedes verla desde esta página:'
- email_outro: Has recibido esta notificación porque estás siguiendo %{participatory_space_title}. Puedes dejar de recibir notificaciones siguiendo el enlace anterior.
+ email_outro: Has recibido esta notificación porque estás siguiendo el espacio "%{participatory_space_title}". Puedes dejar de recibir notificaciones siguiendo el enlace anterior.
email_subject: Una actualización en %{participatory_space_title}
notification_title: Ya está activa la fase %{resource_title} para
%{participatory_space_title}
step_changed:
diff --git a/decidim-participatory_processes/config/locales/he-IL.yml b/decidim-participatory_processes/config/locales/he-IL.yml
new file mode 100644
index 0000000000000..af6fa60a73f2c
--- /dev/null
+++ b/decidim-participatory_processes/config/locales/he-IL.yml
@@ -0,0 +1 @@
+he:
diff --git a/decidim-participatory_processes/config/locales/lb.yml b/decidim-participatory_processes/config/locales/lb.yml
index 48c31bce4d9e1..544a286736ae9 100644
--- a/decidim-participatory_processes/config/locales/lb.yml
+++ b/decidim-participatory_processes/config/locales/lb.yml
@@ -72,6 +72,9 @@ lb:
decidim/participatory_process_group:
one: Prozessgruppe
other: Prozessgruppen
+ decidim/participatory_process_step:
+ one: Etapp
+ other: Phasen
decidim:
admin:
actions:
@@ -169,14 +172,64 @@ lb:
update:
error: Beim Aktualisieren dieser partizipativen Prozessgruppe ist ein Fehler aufgetreten.
success: Partizipative Prozessgruppe wurde erfolgreich aktualisiert.
+ participatory_process_imports:
+ create:
+ error: Beim Importieren dieses Beteiligungsprozesses ist ein Fehler aufgetreten.
+ success: Beteiligungsprozess wurde erfolgreich importiert.
+ new:
+ import: Import
+ select: Wählen Sie aus, welche Daten Sie importieren möchten
+ title: Beteiligungsprozess importieren
+ participatory_process_publications:
+ create:
+ error: Bei der Veröffentlichung dieses Beteiligungsprozesses ist ein Fehler aufgetreten.
+ success: Partizipativer Prozess erfolgreich veröffentlicht.
+ destroy:
+ error: Beim Aufheben der Veröffentlichung dieses Beteiligungsprozesses ist ein Fehler aufgetreten.
+ success: Partizipativer Prozess wurde nicht veröffentlicht.
+ participatory_process_step_activations:
+ create:
+ error: Beim Aktivieren dieses partizipativen Prozessschritts ist ein Fehler aufgetreten.
+ success: Partizipativer Prozessschritt erfolgreich aktiviert.
participatory_process_steps:
+ create:
+ error: Beim Erstellen eines neuen partizipativen Prozessschritts ist ein Fehler aufgetreten.
+ success: Partizipativer Prozessschritt erfolgreich erstellt.
+ default_title: Aféierung
destroy:
error:
active_step: Der aktive Schritt kann nicht gelöscht werden.
last_step: Der letzte Schritt eines Beteiligungsprozesses kann nicht gelöscht werden.
+ success: Participatory-Prozessschritt erfolgreich gelöscht.
+ edit:
+ title: Beteiligungsschritt bearbeiten
+ update: Aktualiséieren
+ index:
+ steps_title: Phasen
+ new:
+ create: Erstellen
+ title: Neuer partizipativer Prozessschritt
+ ordering:
+ error: Beim Neuanordnen dieser partizipativen Prozessschritte ist ein Fehler aufgetreten.
+ update:
+ error: Beim Aktualisieren dieses partizipativen Prozessschritts ist ein Fehler aufgetreten.
+ success: Partizipativer Prozessschritt erfolgreich aktualisiert.
participatory_process_types:
form:
title: Titel
+ participatory_process_user_roles:
+ create:
+ error: Beim Hinzufügen eines Benutzers für diesen partizipativen Prozess ist ein Fehler aufgetreten.
+ success: Benutzer hat diesen partizipativen Prozess erfolgreich hinzugefügt.
+ destroy:
+ success: Der Benutzer wurde erfolgreich aus diesem partizipativen Prozess entfernt.
+ edit:
+ title: Administrator des Beteiligungsprozesses aktualisieren
+ update: Aktualiséieren
+ index:
+ process_admins_title: Partizipative Prozessbenutzer
+ new:
+ create: Erstellen
titles:
participatory_process_groups: Prozessgruppen
participatory_processes: Bedeelegungsprozesser
@@ -257,6 +310,25 @@ lb:
show:
title: Prozessgruppen
participatory_processes:
+ admin:
+ participatory_process_groups:
+ form:
+ title: Allgemeine Information
+ participatory_processes:
+ form:
+ other: Andere
+ related_processes: Ähnliche Beteiligungsprozesse
+ scope_type_max_depth_help: Beschränken Sie die Bereichs-Filtertiefe; der Filter zeigt nur Ergebnisse von Allgemein bis zum ausgewählten Bereichstyp an.
+ select_an_area: Wählen Sie einen Bereich aus
+ select_process_group: Wählen Sie eine Prozessgruppe aus
+ title: Allgemeine Information
+ content_blocks:
+ highlighted_processes:
+ name: Hervorgehobene Beteiligungsprozesse
+ index:
+ title: Bedeelegungsprozesser
+ last_activity:
+ new_participatory_process: Neuer partizipativer Prozess
pages:
home:
highlighted_processes:
@@ -264,11 +336,25 @@ lb:
more_information: weider Informatiounen
participate: Matmaachen
participate_in: Am Prozess %{resource_name} teilnehmen
+ participatory_process_steps:
+ index:
+ back_to_process: Zurück zur Prozessseite
participatory_processes:
filters:
+ counters:
+ active:
+ one: 1 aktiver Beteiligungsprozess
+ other: "%{count} Beteiligungsprozesse"
explanations:
no_active: Keine aktiven Prozesse
no_active_nor_upcoming: Keine aktiven oder zukünftigen Beteiligungsprozesse
+ no_active_nor_upcoming_callout: Es gibt keine aktiven oder zukünftigen Beteiligungsprozesse. Hier ist eine Liste der vergangenen.
+ names:
+ active: Aktiv
+ all: All
+ past: Vergaangenes
+ upcoming: Demnächst stattfannend
+ see: Sehen
index:
loading: Ergebnisse werden geladen...
show:
diff --git a/decidim-participatory_processes/config/locales/pl.yml b/decidim-participatory_processes/config/locales/pl.yml
index 98ef3f4d0f945..1a16eec3c4d50 100644
--- a/decidim-participatory_processes/config/locales/pl.yml
+++ b/decidim-participatory_processes/config/locales/pl.yml
@@ -12,15 +12,22 @@ pl:
decidim_area_id: Kategoria
description: Opis
developer_group: Grupa inicjatorów
+ document: Dokument
domain: Domena
end_date: Data zakończenia
hashtag: Hashtag
hero_image: Obraz główny
+ import_attachments: Importuj załączniki
+ import_categories: Importuj kategorie
+ import_components: Importuj komponenty
+ import_steps: Importuj kroki
local_area: Obszar organizacji
meta_scope: Zakres metadanych
participatory_process_group_id: Grupa procesów
+ participatory_process_type_id: Typ procesów
participatory_scope: Zaproponowano
participatory_structure: Jak decydowano
+ private_space: Proces prywatny
promoted: Promowany
published_at: Opublikowano
related_process_ids: Powiązane procesy
@@ -57,10 +64,18 @@ pl:
short_description: Krótki opis
start_date: Data rozpoczęcia
title: Tytuł
+ participatory_process_type:
+ title: Tytuł
participatory_process_user_role:
email: Adres e-mail
name: Imię
role: Rola
+ errors:
+ models:
+ participatory_process:
+ attributes:
+ document:
+ allowed_file_content_types: 'Nieprawidłowy typ dokumentu. Dozwolone są tylko pliki z następującymi rozszerzeniami: %{types}'
models:
decidim/participatory_process_step_activated_event: Aktualny etap
decidim/participatory_process_step_changed_event: Zmieniono etap
@@ -108,6 +123,7 @@ pl:
participatory_process_groups_submenu:
info: Informacje
landing_page: Strona startowa
+ participatory_process_types: Typy procesu
participatory_processes: Procesy
participatory_processes_submenu:
attachment_collections: Foldery
@@ -139,6 +155,11 @@ pl:
start_date: Data rozpoczęcia
title: Tytuł
name: Etap procesu partycypacyjnego
+ participatory_process_type:
+ fields:
+ created_at: Utworzono
+ title: Tytuł
+ name: Typ procesu
participatory_process_user_role:
fields:
email: Adres e-mail
@@ -470,6 +491,7 @@ pl:
no_active: Brak aktualnych procesów
no_active_nor_upcoming: Brak aktualnych i nadchodzących procesów
no_active_nor_upcoming_callout: Nie ma aktualnych ani nadchodzących procesów. Oto lista poprzednich procesów.
+ filter_by: Pokaż
names:
active: Aktualne
all: Wszystko
@@ -478,6 +500,8 @@ pl:
see: Zobacz
index:
loading: Ładowanie wyników...
+ show:
+ title: O tym procesie
show:
area: Kategoria
belongs_to_group: Ten proces należy do
diff --git a/decidim-participatory_processes/lib/decidim/participatory_processes/test/factories.rb b/decidim-participatory_processes/lib/decidim/participatory_processes/test/factories.rb
index 6157e254bb6c9..f273c0b1c6a57 100644
--- a/decidim-participatory_processes/lib/decidim/participatory_processes/test/factories.rb
+++ b/decidim-participatory_processes/lib/decidim/participatory_processes/test/factories.rb
@@ -14,23 +14,23 @@
transient do
skip_injection { false }
end
- title { generate_localized_title }
+ title { generate_localized_title(:participatory_process_title, skip_injection: skip_injection) }
slug { generate(:participatory_process_slug) }
- subtitle { generate_localized_title }
+ subtitle { generate_localized_title(:participatory_process_subtitle, skip_injection: skip_injection) }
weight { 1 }
- short_description { Decidim::Faker::Localized.wrapped("
", "
") { generate_localized_title } }
- description { Decidim::Faker::Localized.wrapped("
", "
") { generate_localized_title } }
+ short_description { generate_localized_description(:participatory_process_short_description, skip_injection: skip_injection) }
+ description { generate_localized_description(:participatory_process_description, skip_injection: skip_injection) }
organization
hero_image { Decidim::Dev.test_file("city.jpeg", "image/jpeg") } # Keep after organization
banner_image { Decidim::Dev.test_file("city2.jpeg", "image/jpeg") } # Keep after organization
published_at { Time.current }
- meta_scope { Decidim::Faker::Localized.word }
- developer_group { generate_localized_title }
- local_area { generate_localized_title }
- target { generate_localized_title }
- participatory_scope { generate_localized_title }
- participatory_structure { generate_localized_title }
- announcement { generate_localized_title }
+ meta_scope { generate_localized_word(:participatory_process_meta_scope, skip_injection: skip_injection) }
+ developer_group { generate_localized_title(:participatory_process_developer_group, skip_injection: skip_injection) }
+ local_area { generate_localized_title(:participatory_process_local_area, skip_injection: skip_injection) }
+ target { generate_localized_title(:participatory_process_target, skip_injection: skip_injection) }
+ participatory_scope { generate_localized_title(:participatory_process_participatory_scope, skip_injection: skip_injection) }
+ participatory_structure { generate_localized_title(:participatory_process_participatory_structure, skip_injection: skip_injection) }
+ announcement { generate_localized_title(:participatory_process_announcement, skip_injection: skip_injection) }
show_metrics { true }
show_statistics { true }
private_space { false }
@@ -61,6 +61,7 @@
create(:participatory_process_step,
active: true,
end_date: evaluator.current_step_ends,
+ skip_injection: evaluator.skip_injection,
participatory_process: participatory_process)
participatory_process.reload
participatory_process.steps.reload
@@ -89,26 +90,30 @@
end
factory :participatory_process_group, class: "Decidim::ParticipatoryProcessGroup" do
- title { generate_localized_title }
- description { Decidim::Faker::Localized.wrapped("
", "
") { generate_localized_title } }
+ transient do
+ skip_injection { false }
+ end
+ title { generate_localized_title(:participatory_process_group_title, skip_injection: skip_injection) }
+ description { generate_localized_description(:participatory_process_group_description, skip_injection: skip_injection) }
hero_image { Decidim::Dev.test_file("city.jpeg", "image/jpeg") }
organization
hashtag { Faker::Internet.slug }
group_url { Faker::Internet.url }
- developer_group { generate_localized_title }
- local_area { generate_localized_title }
+ developer_group { generate_localized_title(:participatory_process_group_developer_group, skip_injection: skip_injection) }
+ local_area { generate_localized_title(:participatory_process_group_local_area, skip_injection: skip_injection) }
meta_scope { Decidim::Faker::Localized.word }
- target { generate_localized_title }
- participatory_scope { generate_localized_title }
- participatory_structure { generate_localized_title }
+ target { generate_localized_title(:participatory_process_group_target, skip_injection: skip_injection) }
+ participatory_scope { generate_localized_title(:participatory_process_group_participatory_scope, skip_injection: skip_injection) }
+ participatory_structure { generate_localized_title(:participatory_process_group_participatory_structure, skip_injection: skip_injection) }
trait :promoted do
promoted { true }
end
trait :with_participatory_processes do
- after(:create) do |participatory_process_group|
- create_list(:participatory_process, 2, :published, organization: participatory_process_group.organization, participatory_process_group: participatory_process_group)
+ after(:create) do |participatory_process_group, evaluator|
+ create_list(:participatory_process, 2, :published, organization: participatory_process_group.organization, participatory_process_group: participatory_process_group,
+ skip_injection: evaluator.skip_injection)
end
end
end
@@ -117,8 +122,8 @@
transient do
skip_injection { false }
end
- title { generate_localized_title }
- description { Decidim::Faker::Localized.wrapped("
", "
") { generate_localized_title } }
+ title { generate_localized_title(:participatory_process_step_title, skip_injection: skip_injection) }
+ description { generate_localized_description(:participatory_process_step_description, skip_injection: skip_injection) }
start_date { 1.month.ago }
end_date { 2.months.from_now }
position { nil }
@@ -135,25 +140,31 @@
end
factory :participatory_process_type, class: "Decidim::ParticipatoryProcessType" do
- title { generate_localized_title }
+ transient do
+ skip_injection { false }
+ end
+ title { generate_localized_title(:participatory_process_type_title, skip_injection: skip_injection) }
organization
trait :with_active_participatory_processes do
- after(:create) do |participatory_process_type|
- create_list(:participatory_process, 2, :active, :published, organization: participatory_process_type.organization, participatory_process_type: participatory_process_type)
+ after(:create) do |participatory_process_type, evaluator|
+ create_list(:participatory_process, 2, :active, :published, organization: participatory_process_type.organization, participatory_process_type: participatory_process_type,
+ skip_injection: evaluator.skip_injection)
end
end
trait :with_past_participatory_processes do
- after(:create) do |participatory_process_type|
- create_list(:participatory_process, 2, :past, :published, organization: participatory_process_type.organization, participatory_process_type: participatory_process_type)
+ after(:create) do |participatory_process_type, evaluator|
+ create_list(:participatory_process, 2, :past, :published, organization: participatory_process_type.organization, participatory_process_type: participatory_process_type,
+ skip_injection: evaluator.skip_injection)
end
end
end
factory :process_admin, parent: :user, class: "Decidim::User" do
transient do
- participatory_process { create(:participatory_process) }
+ skip_injection { false }
+ participatory_process { create(:participatory_process, skip_injection: skip_injection) }
end
organization { participatory_process.organization }
@@ -163,13 +174,14 @@
create :participatory_process_user_role,
user: user,
participatory_process: evaluator.participatory_process,
- role: :admin
+ role: :admin, skip_injection: evaluator.skip_injection
end
end
factory :process_collaborator, parent: :user, class: "Decidim::User" do
transient do
- participatory_process { create(:participatory_process) }
+ skip_injection { false }
+ participatory_process { create(:participatory_process, skip_injection: skip_injection) }
end
organization { participatory_process.organization }
@@ -179,13 +191,14 @@
create :participatory_process_user_role,
user: user,
participatory_process: evaluator.participatory_process,
- role: :collaborator
+ role: :collaborator, skip_injection: evaluator.skip_injection
end
end
factory :process_moderator, parent: :user, class: "Decidim::User" do
transient do
- participatory_process { create(:participatory_process) }
+ skip_injection { false }
+ participatory_process { create(:participatory_process, skip_injection: skip_injection) }
end
organization { participatory_process.organization }
@@ -195,13 +208,14 @@
create :participatory_process_user_role,
user: user,
participatory_process: evaluator.participatory_process,
- role: :moderator
+ role: :moderator, skip_injection: evaluator.skip_injection
end
end
factory :process_valuator, parent: :user, class: "Decidim::User" do
transient do
- participatory_process { create(:participatory_process) }
+ skip_injection { false }
+ participatory_process { create(:participatory_process, skip_injection: skip_injection) }
end
organization { participatory_process.organization }
@@ -211,13 +225,16 @@
create :participatory_process_user_role,
user: user,
participatory_process: evaluator.participatory_process,
- role: :valuator
+ role: :valuator, skip_injection: evaluator.skip_injection
end
end
factory :participatory_process_user_role, class: "Decidim::ParticipatoryProcessUserRole" do
+ transient do
+ skip_injection { false }
+ end
user
- participatory_process { create :participatory_process, organization: user.organization }
+ participatory_process { create :participatory_process, organization: user.organization, skip_injection: skip_injection }
role { "admin" }
end
end
diff --git a/decidim-participatory_processes/lib/decidim/participatory_processes/version.rb b/decidim-participatory_processes/lib/decidim/participatory_processes/version.rb
index 1f0950d608856..f8bef1603efaa 100644
--- a/decidim-participatory_processes/lib/decidim/participatory_processes/version.rb
+++ b/decidim-participatory_processes/lib/decidim/participatory_processes/version.rb
@@ -4,7 +4,7 @@ module Decidim
# This holds the decidim-participatory_processes version.
module ParticipatoryProcesses
def self.version
- "0.27.5"
+ "0.27.6"
end
end
end
diff --git a/decidim-participatory_processes/spec/events/decidim/participatory_process_role_assigned_event_spec.rb b/decidim-participatory_processes/spec/events/decidim/participatory_process_role_assigned_event_spec.rb
index 2bdfff0016e7c..bc898579db835 100644
--- a/decidim-participatory_processes/spec/events/decidim/participatory_process_role_assigned_event_spec.rb
+++ b/decidim-participatory_processes/spec/events/decidim/participatory_process_role_assigned_event_spec.rb
@@ -6,13 +6,14 @@
include_context "when a simple event"
let(:resource) { create :participatory_process }
+ let(:participatory_space) { resource }
let(:event_name) { "decidim.events.participatory_process.role_assigned" }
- let(:role) { create :participatory_process_user_role, user: user, participatory_process: resource, role: :admin }
+ let(:role) { create(:participatory_process_user_role, user: user, participatory_process: resource, role: :admin) }
let(:extra) { { role: role } }
- let(:email_subject) { "You have been assigned as #{role} for \"#{resource.title["en"]}\"." }
- let(:email_outro) { "You have received this notification because you are #{role} of the \"#{resource.title["en"]}\" participatory process." }
- let(:email_intro) { "You have been assigned as #{role} for participatory process \"#{resource.title["en"]}\"." }
- let(:notification_title) { "You have been assigned as #{role} for participatory process
#{resource.title["en"]}." }
+ let(:email_subject) { "You have been assigned as #{role} for \"#{resource_title}\"." }
+ let(:email_outro) { "You have received this notification because you are #{role} of the \"#{resource_title}\" participatory process." }
+ let(:email_intro) { "You have been assigned as #{role} for participatory process \"#{resource_title}\"." }
+ let(:notification_title) { "You have been assigned as #{role} for participatory process
#{resource_title}." }
it_behaves_like "a simple event"
it_behaves_like "a simple event email"
diff --git a/decidim-participatory_processes/spec/events/decidim/participatory_process_step_activated_event_spec.rb b/decidim-participatory_processes/spec/events/decidim/participatory_process_step_activated_event_spec.rb
index 0ea3d00ba0669..2e584d3868314 100644
--- a/decidim-participatory_processes/spec/events/decidim/participatory_process_step_activated_event_spec.rb
+++ b/decidim-participatory_processes/spec/events/decidim/participatory_process_step_activated_event_spec.rb
@@ -23,7 +23,8 @@
)
end
- let(:email_subject) { "An update to #{participatory_space_title}" }
+ let(:resource_title) { decidim_sanitize_translated(resource.title) }
+ let(:email_subject) { "An update to #{decidim_sanitize_translated(participatory_space.title)}" }
let(:email_intro) { "The #{resource_title} phase is now active for #{participatory_space_title}. You can see it from this page:" }
let(:email_outro) { "You have received this notification because you are following #{participatory_space_title}. You can stop receiving notifications following the previous link." }
let(:notification_title) { "The #{resource_title} phase is now active for
#{participatory_space_title}" }
diff --git a/decidim-participatory_processes/spec/events/decidim/participatory_process_step_changed_event_spec.rb b/decidim-participatory_processes/spec/events/decidim/participatory_process_step_changed_event_spec.rb
index 849a7f8b63ba6..675019a6cf2e3 100644
--- a/decidim-participatory_processes/spec/events/decidim/participatory_process_step_changed_event_spec.rb
+++ b/decidim-participatory_processes/spec/events/decidim/participatory_process_step_changed_event_spec.rb
@@ -23,7 +23,7 @@
)
end
- let(:email_subject) { "An update to #{participatory_space_title}" }
+ let(:email_subject) { "An update to #{decidim_sanitize_translated(participatory_space.title)}" }
let(:email_intro) { "The dates for the #{resource_title} phase at #{participatory_space_title} have been updated. You can see it from this page:" }
let(:email_outro) { "You have received this notification because you are following #{participatory_space_title}. You can stop receiving notifications following the previous link." }
let(:notification_title) { "The dates for the
#{resource_title} phase at
#{participatory_space_title} have been updated." }
diff --git a/decidim-participatory_processes/spec/presenters/decidim/resource_locator_presenter_spec.rb b/decidim-participatory_processes/spec/presenters/decidim/resource_locator_presenter_spec.rb
new file mode 100644
index 0000000000000..abecff65dbb29
--- /dev/null
+++ b/decidim-participatory_processes/spec/presenters/decidim/resource_locator_presenter_spec.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+require "spec_helper"
+
+module Decidim
+ describe ResourceLocatorPresenter, type: :helper do
+ it_behaves_like "generates routes without query strings on slug" do
+ let(:route_fragment) { "processes/#{participatory_space.slug}" }
+ let(:admin_route_fragment) { "participatory_processes/#{participatory_space.slug}" }
+ let(:factory_name) { :participatory_process }
+ end
+ end
+end
diff --git a/decidim-participatory_processes/spec/requests/participatory_process_search_spec.rb b/decidim-participatory_processes/spec/requests/participatory_process_search_spec.rb
index 69f4943b03393..fcc5eb0115170 100644
--- a/decidim-participatory_processes/spec/requests/participatory_process_search_spec.rb
+++ b/decidim-participatory_processes/spec/requests/participatory_process_search_spec.rb
@@ -47,18 +47,18 @@
end
it "displays all public active processes by default" do
- expect(subject).to include(translated(process1.title))
- expect(subject).to include(translated(process2.title))
- expect(subject).not_to include(translated(past_process.title))
- expect(subject).not_to include(translated(upcoming_process.title))
+ expect(subject).to include(decidim_escape_translated(process1.title))
+ expect(subject).to include(decidim_escape_translated(process2.title))
+ expect(subject).not_to include(decidim_escape_translated(past_process.title))
+ expect(subject).not_to include(decidim_escape_translated(upcoming_process.title))
end
context "when filtering by area" do
let(:filter_params) { { with_area: process1.area.id } }
it "displays matching assemblies" do
- expect(subject).to include(translated(process1.title))
- expect(subject).not_to include(translated(process2.title))
+ expect(subject).to include(decidim_escape_translated(process1.title))
+ expect(subject).not_to include(decidim_escape_translated(process2.title))
end
end
@@ -66,8 +66,8 @@
let(:filter_params) { { with_any_scope: [process1.scope.id] } }
it "displays matching assemblies" do
- expect(subject).to include(translated(process1.title))
- expect(subject).not_to include(translated(process2.title))
+ expect(subject).to include(decidim_escape_translated(process1.title))
+ expect(subject).not_to include(decidim_escape_translated(process2.title))
end
end
@@ -78,10 +78,10 @@
let(:date) { "active" }
it "displays all active processes" do
- expect(subject).to include(translated(process1.title))
- expect(subject).to include(translated(process2.title))
- expect(subject).not_to include(translated(past_process.title))
- expect(subject).not_to include(translated(upcoming_process.title))
+ expect(subject).to include(decidim_escape_translated(process1.title))
+ expect(subject).to include(decidim_escape_translated(process2.title))
+ expect(subject).not_to include(decidim_escape_translated(past_process.title))
+ expect(subject).not_to include(decidim_escape_translated(upcoming_process.title))
end
end
@@ -89,10 +89,10 @@
let(:date) { "past" }
it "displays the past process" do
- expect(subject).not_to include(translated(process1.title))
- expect(subject).not_to include(translated(process2.title))
- expect(subject).to include(translated(past_process.title))
- expect(subject).not_to include(translated(upcoming_process.title))
+ expect(subject).not_to include(decidim_escape_translated(process1.title))
+ expect(subject).not_to include(decidim_escape_translated(process2.title))
+ expect(subject).to include(decidim_escape_translated(past_process.title))
+ expect(subject).not_to include(decidim_escape_translated(upcoming_process.title))
end
end
@@ -100,10 +100,10 @@
let(:date) { "upcoming" }
it "displays the upcoming process" do
- expect(subject).not_to include(translated(process1.title))
- expect(subject).not_to include(translated(process2.title))
- expect(subject).not_to include(translated(past_process.title))
- expect(subject).to include(translated(upcoming_process.title))
+ expect(subject).not_to include(decidim_escape_translated(process1.title))
+ expect(subject).not_to include(decidim_escape_translated(process2.title))
+ expect(subject).not_to include(decidim_escape_translated(past_process.title))
+ expect(subject).to include(decidim_escape_translated(upcoming_process.title))
end
end
@@ -111,10 +111,10 @@
let(:date) { "all" }
it "displays all public processes" do
- expect(subject).to include(translated(process1.title))
- expect(subject).to include(translated(process2.title))
- expect(subject).to include(translated(past_process.title))
- expect(subject).to include(translated(upcoming_process.title))
+ expect(subject).to include(decidim_escape_translated(process1.title))
+ expect(subject).to include(decidim_escape_translated(process2.title))
+ expect(subject).to include(decidim_escape_translated(past_process.title))
+ expect(subject).to include(decidim_escape_translated(upcoming_process.title))
end
end
@@ -123,10 +123,10 @@
let(:dom) { Nokogiri::HTML(subject) }
it "displays all public processes" do
- expect(subject).to include(translated(process1.title))
- expect(subject).to include(translated(process2.title))
- expect(subject).to include(translated(past_process.title))
- expect(subject).to include(translated(upcoming_process.title))
+ expect(subject).to include(decidim_escape_translated(process1.title))
+ expect(subject).to include(decidim_escape_translated(process2.title))
+ expect(subject).to include(decidim_escape_translated(past_process.title))
+ expect(subject).to include(decidim_escape_translated(upcoming_process.title))
end
it "does not cause any display issues" do
diff --git a/decidim-participatory_processes/spec/shared/manage_process_components_examples.rb b/decidim-participatory_processes/spec/shared/manage_process_components_examples.rb
index 8213272090ca8..8901da23e0dc7 100644
--- a/decidim-participatory_processes/spec/shared/manage_process_components_examples.rb
+++ b/decidim-participatory_processes/spec/shared/manage_process_components_examples.rb
@@ -319,7 +319,16 @@
click_link "Publish"
end
- expect(enqueued_jobs.last[:args]).to include("decidim.events.components.component_published")
+ expect(Decidim::EventPublisherJob).to(have_been_enqueued.with(
+ "decidim.events.components.component_published", {
+ resource: component,
+ event_class: "Decidim::ComponentPublishedEvent",
+ affected_users: [],
+ followers: [follower],
+ force_send: false,
+ extra: {}
+ }
+ ))
end
it_behaves_like "manage component share tokens"
diff --git a/decidim-participatory_processes/spec/system/participatory_process_groups_spec.rb b/decidim-participatory_processes/spec/system/participatory_process_groups_spec.rb
index 2802d754cf5e5..44d7f55e8091b 100644
--- a/decidim-participatory_processes/spec/system/participatory_process_groups_spec.rb
+++ b/decidim-participatory_processes/spec/system/participatory_process_groups_spec.rb
@@ -83,7 +83,7 @@
end
it "shows the description" do
- expect(page).to have_i18n_content(participatory_process_group.description)
+ expect(page).to have_i18n_content(participatory_process_group.description, strip_tags: true)
end
it "shows the meta scope name" do
@@ -120,10 +120,10 @@
it "shows metadata attributes" do
within "#participatory_process_group-metadata" do
- expect(page).to have_i18n_content(participatory_process_group.developer_group)
- expect(page).to have_i18n_content(participatory_process_group.target)
- expect(page).to have_i18n_content(participatory_process_group.participatory_scope)
- expect(page).to have_i18n_content(participatory_process_group.participatory_structure)
+ expect(page).to have_i18n_content(participatory_process_group.developer_group, strip_tags: true)
+ expect(page).to have_i18n_content(participatory_process_group.target, strip_tags: true)
+ expect(page).to have_i18n_content(participatory_process_group.participatory_scope, strip_tags: true)
+ expect(page).to have_i18n_content(participatory_process_group.participatory_structure, strip_tags: true)
end
end
end
diff --git a/decidim-participatory_processes/spec/system/participatory_process_steps_spec.rb b/decidim-participatory_processes/spec/system/participatory_process_steps_spec.rb
index 31fff91640c0f..8526cf9c93c9c 100644
--- a/decidim-participatory_processes/spec/system/participatory_process_steps_spec.rb
+++ b/decidim-participatory_processes/spec/system/participatory_process_steps_spec.rb
@@ -37,7 +37,7 @@
expect(page).to have_css(".timeline__item", count: 3)
steps.each do |step|
- expect(page).to have_content(/#{translated(step.title)}/i)
+ expect(page).to have_content(translated(step.title))
end
end
diff --git a/decidim-proposals/app/helpers/decidim/proposals/application_helper.rb b/decidim-proposals/app/helpers/decidim/proposals/application_helper.rb
index 2ea1de6f66fe7..d985182eaa98a 100644
--- a/decidim-proposals/app/helpers/decidim/proposals/application_helper.rb
+++ b/decidim-proposals/app/helpers/decidim/proposals/application_helper.rb
@@ -121,7 +121,7 @@ def form_has_address?
end
def show_voting_rules?
- return false unless votes_enabled?
+ return false if !votes_enabled? || current_settings.votes_blocked?
return true if vote_limit_enabled?
return true if threshold_per_proposal_enabled?
diff --git a/decidim-proposals/app/models/decidim/proposals/proposal.rb b/decidim-proposals/app/models/decidim/proposals/proposal.rb
index 2a376a7f3ac13..e548702577723 100644
--- a/decidim-proposals/app/models/decidim/proposals/proposal.rb
+++ b/decidim-proposals/app/models/decidim/proposals/proposal.rb
@@ -96,11 +96,11 @@ class Proposal < Proposals::ApplicationRecord
}
scope :sort_by_valuation_assignments_count_asc, lambda {
- order(Arel.sql("#{sort_by_valuation_assignments_count_nulls_last_query} ASC NULLS FIRST").to_s)
+ order(valuation_assignments_count: :asc)
}
scope :sort_by_valuation_assignments_count_desc, lambda {
- order(Arel.sql("#{sort_by_valuation_assignments_count_nulls_last_query} DESC NULLS LAST").to_s)
+ order(valuation_assignments_count: :desc)
}
scope_search_multi :with_any_state, [:accepted, :rejected, :evaluating, :state_not_published]
@@ -333,18 +333,6 @@ def self.ransack(params = {}, options = {})
ProposalSearch.new(self, params, options)
end
- # Defines the base query so that ransack can actually sort by this value
- def self.sort_by_valuation_assignments_count_nulls_last_query
- <<-SQL.squish
- (
- SELECT COUNT(decidim_proposals_valuation_assignments.id)
- FROM decidim_proposals_valuation_assignments
- WHERE decidim_proposals_valuation_assignments.decidim_proposal_id = decidim_proposals_proposals.id
- GROUP BY decidim_proposals_valuation_assignments.decidim_proposal_id
- )
- SQL
- end
-
# method to filter by assigned valuator role ID
def self.valuator_role_ids_has(value)
query = <<-SQL.squish
diff --git a/decidim-proposals/app/models/decidim/proposals/valuation_assignment.rb b/decidim-proposals/app/models/decidim/proposals/valuation_assignment.rb
index dcf9ccda990af..ac7cf5f37a3ad 100644
--- a/decidim-proposals/app/models/decidim/proposals/valuation_assignment.rb
+++ b/decidim-proposals/app/models/decidim/proposals/valuation_assignment.rb
@@ -9,7 +9,8 @@ class ValuationAssignment < ApplicationRecord
include Decidim::Traceable
include Decidim::Loggable
- belongs_to :proposal, foreign_key: "decidim_proposal_id", class_name: "Decidim::Proposals::Proposal"
+ belongs_to :proposal, foreign_key: "decidim_proposal_id", class_name: "Decidim::Proposals::Proposal",
+ counter_cache: true
belongs_to :valuator_role, polymorphic: true
def self.log_presenter_class_for(_log)
diff --git a/decidim-proposals/app/views/decidim/proposals/admin/proposals/_form.html.erb b/decidim-proposals/app/views/decidim/proposals/admin/proposals/_form.html.erb
index 304fa5194399c..c328ee82c9db0 100644
--- a/decidim-proposals/app/views/decidim/proposals/admin/proposals/_form.html.erb
+++ b/decidim-proposals/app/views/decidim/proposals/admin/proposals/_form.html.erb
@@ -44,7 +44,7 @@
<%= form.select :meeting_id,
- options_for_select(@form.meetings&.map { |meeting| [present(meeting).title, meeting.id] }, selected: meetings_as_authors_selected ),
+ options_for_select(@form.meetings&.map { |meeting| [present(meeting).title(html_escape: true), meeting.id] }, selected: meetings_as_authors_selected ),
{ include_blank: true, label: t(".select_a_meeting") },
{ multiple: false, class: "chosen-select" } %>
diff --git a/decidim-proposals/app/views/decidim/proposals/admin/proposals/_proposal-tr.html.erb b/decidim-proposals/app/views/decidim/proposals/admin/proposals/_proposal-tr.html.erb
index bd153f2faf79a..cbaafe51fa3de 100644
--- a/decidim-proposals/app/views/decidim/proposals/admin/proposals/_proposal-tr.html.erb
+++ b/decidim-proposals/app/views/decidim/proposals/admin/proposals/_proposal-tr.html.erb
@@ -53,7 +53,7 @@
- <%= proposal.valuation_assignments.count %>
+ <%= proposal.valuation_assignments.size %>
|
diff --git a/decidim-proposals/app/views/decidim/proposals/admin/proposals/show.html.erb b/decidim-proposals/app/views/decidim/proposals/admin/proposals/show.html.erb
index 4fe1e2a304685..b1081eb7d0a91 100644
--- a/decidim-proposals/app/views/decidim/proposals/admin/proposals/show.html.erb
+++ b/decidim-proposals/app/views/decidim/proposals/admin/proposals/show.html.erb
@@ -107,7 +107,7 @@
<% proposal_meetings.each do |meeting| %>
<% presented_meeting = present(meeting) %>
- <%= link_to presented_meeting.title, presented_meeting.profile_path %>
+ <%= link_to decidim_escape_translated(meeting.title).html_safe, presented_meeting.profile_path %>
<% end %>
diff --git a/decidim-proposals/config/locales/ar.yml b/decidim-proposals/config/locales/ar.yml
index 0d69f40d2c501..5f40165b7904f 100644
--- a/decidim-proposals/config/locales/ar.yml
+++ b/decidim-proposals/config/locales/ar.yml
@@ -191,7 +191,6 @@ ar:
proposal_wizard_step_1_help_text: اقتراح الاقتراح "إنشاء" نص مساعدة الخطوة
proposal_wizard_step_2_help_text: اقتراح الاقتراح "قارن" نص خطوة المساعدة
proposal_wizard_step_3_help_text: نص اقتراح "إكمال" تعليمات نص المعالج
- proposal_wizard_step_4_help_text: اقتراح الاقتراح "نشر" نص تعليمات الخطوة
resources_permissions_enabled: يمكن تعيين أذونات الإجراءات لكل اقتراح
scope_id: نطاق
scopes_enabled: النطاقات مفعلة
@@ -989,7 +988,7 @@ ar:
step_1: إنشاء اقتراحك
step_2: قارن
step_3: إكمال
- step_4: انشر اقتراحك
+ step_4: نشر اقتراحك
step_of: الخطوة %{current_step_num} من %{total_steps}
title: خطوات إنشاء الاقتراحات
proposals_picker:
diff --git a/decidim-proposals/config/locales/bg.yml b/decidim-proposals/config/locales/bg.yml
index 22dd9ef66d930..3cfefef9aa163 100644
--- a/decidim-proposals/config/locales/bg.yml
+++ b/decidim-proposals/config/locales/bg.yml
@@ -8,9 +8,12 @@ bg:
category_id: Категория
decidim_scope_id: Сфера
has_address: Има адрес
+ scope_id: Обхват
state: Състояние
title: Заглавие
user_group_id: Създай съвместна чернова като
+ import_participatory_text:
+ document: Текстов документ за участие
proposal:
address: Адрес
answer: Отговор
@@ -20,23 +23,32 @@ bg:
category_id: Категория
decidim_scope_id: Сфера
has_address: Има адрес
+ scope_id: Обхват
state: Състояние
suggested_hashtags: Предложени хаштагове
title: Заглавие
user_group_id: Създай предложение като
proposal_answer:
answer: Отговор
+ cost: Разход
+ cost_report: Доклад за разходите
+ execution_period: Период на изпълнение
proposals_copy:
copy_proposals: Разбирам, че това ще вмъкне всички предложения от избрания компонент към текущия и това действие не е обратимо.
origin_component_id: Компонент, от който да се копират предложенията
proposals_import:
import_proposals: Копиране на предложения
+ keep_answers: Запазете състоянието и отговорите
keep_authors: Запази автора на оригинала
valuation_assignment:
admin_log:
valuator_role_id: Име на проверяващ
errors:
models:
+ participatory_text:
+ attributes:
+ document:
+ allowed_file_content_types: 'Невалиден файлов формат. Позволени са само файлове със следните разширения: %{types}'
proposal:
attributes:
add_documents:
@@ -48,6 +60,16 @@ bg:
identical: И заглавието не може да е еднакво
title:
identical: И основния текст не може да е еднакъв
+ proposals_merge:
+ attributes:
+ base:
+ not_official: Не са официални
+ supported: Получили са подкрепа или одобрения
+ proposals_split:
+ attributes:
+ base:
+ not_official: Не са официални
+ supported: Получили са подкрепа или одобрения
models:
decidim/proposals/accepted_proposal_event: Предложението е прието
decidim/proposals/admin/update_proposal_category_event: Категорията на предложението е променена
@@ -77,8 +99,28 @@ bg:
admin:
filters:
proposals:
+ category_id_eq:
+ label: Категория
+ is_emendation_true:
+ label: Тип
+ values:
+ 'false': Предложения
+ 'true': Изменения
+ scope_id_eq:
+ label: Обхват
+ state_eq:
+ label: Състояние
+ values:
+ accepted: Прието
+ evaluating: Оценяване
+ published: Публикувано
+ rejected: Отхвърлено
+ validating: Техническа проверка
+ withdrawn: Оттеглено
state_null:
label: Състояние
+ values:
+ 'true': Не отговорено
valuator_role_ids_has:
label: Прикрепено към проверяващ
search_placeholder:
@@ -87,9 +129,11 @@ bg:
proposals:
actions:
amend: Промяна
+ comment: Коментар
create: Създай
endorse: Одобри
vote: Поддръжка
+ vote_comment: Оцени коментара
withdraw: Оттегляне
name: Предложения
settings:
@@ -102,6 +146,18 @@ bg:
can_accumulate_supports_beyond_threshold: Може да събира поддръжка над прага
collaborative_drafts_enabled: Съвместните чернови са разрешени
comments_enabled: Коментарите са разрешени
+ comments_max_length: Максимална дължина на коментарите (Оставете 0 за стойност по подразбиране)
+ default_sort_order: Сортиране на предложения по подразбиране
+ default_sort_order_help: '"По подразбиране" означава, че ако подрепата е активирана, предложенията ще се показват сортирани по произволен ред, а ако подкрепата е блокирана, тогава те ще бъдат сортирани по най-подкрепяни.'
+ default_sort_order_options:
+ default: По подразбиране
+ most_commented: Най-коментирани
+ most_endorsed: Най-препоръчвани
+ most_followed: Най-следвани
+ most_voted: Най-подкрепяни
+ random: Произволно
+ recent: Скорошни
+ with_more_authors: С повече автори
geocoding_enabled: Координатите са разрешени
minimum_votes_per_user: Минимална поддръжка за потребител
new_proposal_body_template: Шаблон за основен текст на предложение
@@ -112,13 +168,19 @@ bg:
participatory_texts_enabled_readonly: Тази настройка не е активна, ако има съществуващи предложения. Моля, създайте нов компонент „Предложения“, ако желаете да активирате тази функция или изчистете всички внесени предложения в менюто „Текст на участници“, ако искате да я деактивирате.
proposal_answering_enabled: Отговора на предложение е разрешен
proposal_edit_before_minutes: Предложенията могат да бъдат редактирани от авторите преди да минат толкова минути
+ proposal_edit_time: Редактиране на предложение
+ proposal_edit_time_choices:
+ infinite: Разрешаване на редактиране на предложения за безкраен период от време
+ limited: Позволете редактиране на предложения в рамките на определен период от време
proposal_length: Максимална дължина на основния текст на предложението
proposal_limit: Максимален брой предложения на участник
proposal_wizard_step_1_help_text: Текст на помощника за стъпка "Създай"
proposal_wizard_step_2_help_text: Текст на помощника за стъпка "Сравни"
proposal_wizard_step_3_help_text: Текст на помощника за стъпка "Завърши"
- proposal_wizard_step_4_help_text: Текст на помощника за стъпка "Публикувай"
+ proposal_wizard_step_4_help_text: Помощен текст на стъпка "Публикуване" на съветника за предложения
resources_permissions_enabled: Позволените действия могат да се задават за всяко предложение
+ scope_id: Обхват
+ scopes_enabled: Обхватите са активирани
threshold_per_proposal: Праг за предложенията
vote_limit: Максимален брой поддръжки на участник
step:
@@ -137,10 +199,24 @@ bg:
answers_with_costs: Активиране на "тежест" за отговорите на предложение
automatic_hashtags: Добавени са хаштагове на всички предложения
comments_blocked: Коментарите са блокирани
+ creation_enabled: Участниците могат да създават предложения
+ creation_enabled_readonly: Тази настройка е деактивирана, когато активирате функцията "Текстове за участие". За да качите предложения като текст за участие, щракнете върху бутона "Текстове за участие" и следвайте инструкциите.
+ default_sort_order: Сортиране на предложения по подразбиране
+ default_sort_order_help: '"По подразбиране" означава, че ако подрепата е активирана, предложенията ще се показват сортирани по произволен ред, а ако подкрепата е блокирана, тогава те ще бъдат сортирани по най-подкрепяни.'
+ default_sort_order_options:
+ default: По подразбиране
+ most_commented: Най-коментирани
+ most_endorsed: Най-препоръчвани
+ most_followed: Най-следвани
+ most_voted: Най-подкрепяни
+ random: Произволно
+ recent: Скорошни
+ with_more_authors: С повече автори
endorsements_blocked: Одобряване забранено
endorsements_enabled: Одобряване разрешено
proposal_answering_enabled: Отговора на предложение е разрешен
publish_answers_immediately: Публикувай отговорите на предложения незабавно
+ publish_answers_immediately_help_html: 'Имайте предвид, че ако отговаряте на някои предложения, без това активиране, ще трябва да ги публикувате ръчно, като ги изберете и използвате действието за публикуване. За повече информация как работи това вижте страницата с документация за отговорите на предложенията.'
suggested_hashtags: Предлагай хаштаг на участниците когато създават предложения
votes_blocked: Поддържането блокирано
votes_enabled: Поддържането разрешено
@@ -154,21 +230,33 @@ bg:
email_subject: Някой е направил бележка в предложението %{resource_title}.
notification_title: Някой е направил бележка в предложението %{resource_title}. Вижте я в администраторския панел
collaborative_draft_access_accepted:
+ email_intro: '%{requester_name} получи достъп като сътрудник в съвместната чернова %{resource_title}.'
+ email_outro: Получихте известие, защото сте сътрудник в %{resource_title}.
email_subject: "%{requester_name} получи достъп като сътрудник в %{resource_title}."
notification_title: %{requester_name} %{requester_nickname} получи достъп като сътрудник в съвместната чернова %{resource_title}.
collaborative_draft_access_rejected:
+ email_intro: '%{requester_name} е отхвърлен като сътрудник в съвместната чернова %{resource_title}.'
+ email_outro: Получихте известие, защото сте сътрудник в %{resource_title}.
email_subject: "%{requester_name} е отхвърлен като сътрудник в съвместната чернова %{resource_title}."
notification_title: %{requester_name} %{requester_nickname} е отхвърлен като сътрудник в съвместната чернова %{resource_title}.
collaborative_draft_access_requested:
+ email_intro: '%{requester_name} заяви достъп като сътрудник. Можете да приемете или отхвърлите от сраницата на колективната чернова %{resource_title}.'
+ email_outro: Получихте известие, защото сте сътрудник в %{resource_title}.
email_subject: "%{requester_name} заяви достъп като сътрудник в %{resource_title}."
notification_title: %{requester_name} %{requester_nickname} заяви достъп като сътрудник в колективната чернова %{resource_title}. Моля, приемете или отхвърлете заявката.
collaborative_draft_access_requester_accepted:
+ email_intro: Получихте достъп като сътрудник в колективната чернова %{resource_title}.
+ email_outro: Получихте известие, защото заявихте да бъдете сътрудник в %{resource_title}.
email_subject: Приет сте като сътрудник в %{resource_title}.
notification_title: Получихте достъп като сътрудник в колективната чернова %{resource_title}.
collaborative_draft_access_requester_rejected:
+ email_intro: Отказан Ви е достъп като сътрудник в колективната чернова %{resource_title}.
+ email_outro: Получихте известие, защото заявихте да бъдете сътрудник в %{resource_title}.
email_subject: Отхвърлен сте като сътрудник в %{resource_title}.
notification_title: Отказан Ви е достъп като сътрудник в колективната чернова %{resource_title}.
collaborative_draft_withdrawn:
+ email_intro: %{author_name} %{author_nickname} оттегли колективната чернова %{resource_title}.
+ email_outro: Получихте известие, защото сте сътрудник в %{resource_title}.
email_subject: "%{author_name} %{author_nickname} оттегли колективната чернова %{resource_title}."
notification_title: %{author_name} %{author_nickname} оттегли колективната чернова %{resource_title}.
creation_enabled:
@@ -189,6 +277,7 @@ bg:
notification_title: Вашето предложение %{resource_title} е одобрено.
follower:
email_intro: 'Предложението "%{resource_title}" е одобрено. Прочетете отговора на страницата:'
+ email_outro: Получавате това известие, защото следвате "%{resource_title}". Може да премахнете следването чрез предната връзка.
email_subject: Предложение, което следвате е одобрено
notification_title: Предложението %{resource_title} беше одобрено.
proposal_evaluating:
@@ -199,6 +288,7 @@ bg:
notification_title: Вашето предложение %{resource_title} се разглежда.
follower:
email_intro: 'Предложението "%{resource_title}" се разглежда в момента. Прочетете отговора на страницата:'
+ email_outro: Получавате това известие, защото следвате "%{resource_title}". Може да премахнете следването чрез предната връзка.
email_subject: Предложение, което следвате се разглежда
notification_title: Предложението %{resource_title} се разглежда.
proposal_mentioned:
@@ -214,23 +304,534 @@ bg:
proposal_published_for_space:
email_intro: Предложението "%{resource_title}" беше добавено в "%{participatory_space_title}", което следвате.
email_outro: Получавате това известие, защото следвате "%{participatory_space_title}". Може да прекратите известията чрез предната връзка.
+ email_subject: Ново предложение „%{resource_title}“ беше добавено в(ъв) %{participatory_space_title}
+ notification_title: Предложениетоl %{resource_title} е добавено към %{participatory_space_title} от %{author}
+ notification_title_official: Официалното предложение %{resource_title} е добавено към %{participatory_space_title}
proposal_rejected:
affected_user:
+ email_intro: 'Вашето предложение "%{resource_title}" беше отхвърлено. Можете да прочетете отговора на тази страница:'
email_outro: Получавате това известие, защото сте автор на %{resource_title}".
+ email_subject: Вашето предложение беше отхвърлено
+ notification_title: Вашето предложение %{resource_title} беше отхвърлено.
+ follower:
+ email_intro: 'Предложението „%{resource_title}“ беше отхвърлено. Можете да прочетете отговора на тази страница:'
+ email_outro: Получавате това известие, защото следвате "%{resource_title}". Може да премахнете следването чрез предната връзка.
+ email_subject: Предложение, което следвате, беше отхвърлено
+ notification_title: Предложението %{resource_title} беше отхвърлено.
+ proposal_update_category:
+ email_intro: 'Администратор актуализира категорията на Вашето предложение „%{resource_title}“. Вижте повече на тази страница:'
+ email_outro: Получавате това известие, защото сте авторът на предложението.
+ email_subject: Категорията на предложението %{resource_title} беше актуализирана
+ notification_title: Категорията на предложението %{resource_title} беше актуализирана от администратор.
+ proposal_update_scope:
+ email_intro: 'Администратор актуализира обхвата на Вашето предложение „%{resource_title}“. Вижте повече на тази страница:'
+ email_outro: Получавате това известие, защото сте авторът на предложението.
+ email_subject: Обхватът на предложението %{resource_title} беше актуализиран
+ notification_title: Обхватът на предложението %{resource_title} беше актуализиран от администратор.
+ voting_enabled:
+ email_intro: 'Можете да подкрепяте нови предложения в(ъв) %{participatory_space_title}! Започнете да участвате на следната страница:'
+ email_outro: Получавате това известие, защото следвате %{participatory_space_title}. Може да прекратите известията чрез предходния линк.
+ email_subject: Предоставянето на подкрепа за предложения започна за %{participatory_space_title}
+ notification_title: Вече можете да започнете да подкрепяте предложения в(ъв) %{participatory_space_title}
+ gamification:
+ badges:
+ accepted_proposals:
+ conditions:
+ - Изберете пространството за участие, което ви интересува, с подаване на активни предложения
+ - Опитайте се да правите предложения, които могат да бъдат изпълнени. По този начин е по-вероятно те да бъдат приети.
+ description: Тази значка се дава, когато участвате активно с нови предложения и те са приети.
+ description_another: Този участник има %{score} приети предложения.
+ description_own: Имате %{score} приети предложения.
+ name: Приети предложения
+ next_level_in: Нужни са Ви още %{score} приети предложения, за да достигнете следващото ниво!
+ unearned_another: Все още не е прието нито едно предложение на този участник.
+ unearned_own: Все нямате прието предложение.
+ proposal_votes:
+ conditions:
+ - Разгледайте и прекарайте известно време, за да се запознаете с предложенията на други хора
+ - Подкрепете предложенията, които харесвате или намирате за интересни
+ description: Тази значка се предоставя, когато подкрепяте предложения на други хора.
+ description_another: Този участник е подкрепил %{score} предложения.
+ description_own: Подкрепили сте %{score} предложения.
+ name: Подкрепяния на предложение
+ next_level_in: Подкрепете още %{score} предложения, за да достигнете следващото ниво!
+ unearned_another: Този участник все още не е подкрепил нито едно предложение.
+ unearned_own: Все още не сте подкрепили нито едно предложение.
+ proposals:
+ conditions:
+ - Изберете пространството за участие, което ви интересува, с подаване на активни предложения
+ - Създайте ноео предложение
+ description: Тази значка се предоставя, когато участвате активно с нови предложения.
+ description_another: Този участник е създал %{score} предложения.
+ description_own: Създали сте %{score} предложения.
+ name: Предложения
+ next_level_in: Създайте още %{score} предложения, за да достигнете следващото ниво!
+ unearned_another: Този участник все още не е създал нито едно предложение.
+ unearned_own: Все още не сте създали нито едно предложение.
+ metrics:
+ accepted_proposals:
+ description: Брой на приетите предложения
+ object: предложения
+ title: Приети предложения
+ endorsements:
+ description: Брой одобрения на предложения
+ object: одобрения
+ title: Одобрения
+ proposals:
+ description: Брой предложения
+ object: предложения
+ title: Предложения
+ votes:
+ description: Брой на подкрепяния за предложения
+ object: подкрепа
+ title: Подкрепа
+ participatory_spaces:
+ highlighted_proposals:
+ see_all: Виж всички предложения (%{count})
proposals:
+ actions:
+ answer_proposal: Отговор на предложение
+ edit_proposal: Редактиране на предложение
+ import: Импортиране на предложения от друг компонент
+ new: Ново предложение
+ participatory_texts: Текстове на участници
+ show: Показване на предложението
+ title: Активности
admin:
+ actions:
+ preview: Преглед
+ exports:
+ proposal_comments: Коментари
+ proposals: Предложения
imports:
+ help:
+ answers: |
+ Документът за импортиране трябва да съдържа следните имена на колони в случай на CSV или Excel файлове или имена на ключове в случай на JSON файлове:
+
+ - id: ID на предложението за отговор
+ - състояние: Едно от „прието“, „оценява“ или „отхвърлено“
+ - answer/en: Отговор на английски език. Това ще зависи от езиковата конфигурация на вашата платформа.
+
+ proposals: |
+ Файлът трябва да има следните имена на колони в случай на CSV или Excel файлове или имена на ключове в случай на JSON файлове:
+
+ - title/en: Заглавие на английски език. Това ще зависи от езиковата конфигурация на вашата платформа.
+ - body/en: Основен текст на английски език. Това ще зависи от езиковата конфигурация на вашата платформа.
+ - scope/id: ID за обхвата
+ - category/id: ID за категорията
+
+ label:
+ answers: Импортиране на отговори от файл
+ proposals: Импортиране на предложения от файл
+ resources:
+ answers:
+ one: отговор на предложение
+ other: отговори на предложение
+ proposals:
+ one: предложение
+ other: предложения
title:
+ answers: Импортиране на отговори на предложения
proposals: Копиране на предложения
+ models:
+ proposal:
+ name: Предложение
+ participatory_texts:
+ bulk-actions:
+ are_you_sure: Наистина ли искате да отхвърлите цялата чернова на текста за участие?
+ discard_all: Отхвърли всички
+ import_doc: Импортиране на документ
+ discard:
+ success: Всички чернови на текстове за участие бяха отхвърлени.
+ import:
+ invalid: Формулярът е невалиден!
+ invalid_file: Файлът съдържа грешка, моля, опитайте да редактирате съдържанието на файла и го качете повторно.
+ success: Поздравления, следните раздели бяха преобразувани в предложения. Вече можете да ги прегледате и да ги коригирате, преди да ги публикувате.
+ index:
+ info_1: Следните раздели бяха преобразувани в предложения. Вече можете да ги прегледате и да ги коригирате, преди да ги публикувате.
+ publish_document: Публикуване на Документ
+ save_draft: Запазване на чернова
+ title: Преглед на текста за участие
+ new_import:
+ accepted_mime_types:
+ md: Маркиране
+ odt: ODT
+ bottom_hint: "(Ще имате възможност да прегледате и сортирате секциите с документи)"
+ document_legend: 'Добавете документ с големина до 2 Mb, като всеки раздел до 3 нива надолу в структурата ще бъде анализиран в „Предложения“. Поддържаните формати са: %{valid_mime_types}'
+ title: Добави документ
+ upload_document: Качване на документ
+ publish:
+ invalid: Неуспешно публикуване на предложения
+ success: Всички предложения бяха публикувани
+ sections:
+ article: "Член"
+ section: "Раздел: %{title}"
+ sub-section: "Подраздел: %{title}"
+ update:
+ success: Текстът за участие беше актуализиран успешно.
+ proposal_answers:
+ form:
+ accepted: Прието
+ answer_proposal: Отговор
+ evaluating: Оценяване
+ not_answered: Не отговорено
+ rejected: Отхвърлено
+ title: Отговор на предложение %{title}
+ proposal_notes:
+ create:
+ error: Възникна проблем при създаването на тази бележка за предложението
+ success: Бележката за предложението беше създадена успешно
+ form:
+ note: Бележка
+ submit: Подаване
+ leave_your_note: Оставете Вашата бележка
+ title: Лични бележки
proposals:
+ answer:
+ invalid: Възникна проблем при отговарянето на това предложение
+ success: Отговорихте успешно на предложението
+ create:
+ invalid: Възникна проблем при създаването на това предложение
+ success: Предложението беше създадено успешно
+ edit:
+ title: Актуализиране на предложението
+ update: Актуализация
+ form:
+ attachment_legend: "(Незадължително) Добавяне на прикачен файл"
+ created_in_meeting: Това предложение е резултат от среща
+ delete_attachment: Изтриване на прикачен файл
+ select_a_category: Изберете категория
+ select_a_meeting: Избор на среща
+ index:
+ actions: Активности
+ assign_to_valuator: Възлагане на оценител
+ assign_to_valuator_button: Възлагане
+ cancel: Отказ
+ change_category: Промяна на категория
+ change_scope: Промяна на обхвата
+ merge: Сливане в едно ново
+ merge_button: Сливане
+ publish: Публикувай
+ publish_answers: Публикуване на отговори
+ select_component: Избери компонент
+ selected: избрани
+ split: Разделяне на предложения
+ split_button: Разделяне
+ title: Предложения
+ unassign_from_valuator: Отнемане възложеното на оценителя
+ unassign_from_valuator_button: Отнемане на възложеното
+ update: Актуализация
+ update_scope_button: Актуализиране на обхвата
+ new:
+ create: Създаване
+ title: Създаване на предложение
+ publish_answers:
+ number_of_proposals: Отговорите на %{number} предложения ще бъдат публикувани.
+ select_a_proposal: Моля, изберете предложение
show:
+ amendments_count: Брой изменения
+ assigned_valuators: Присъеденени оценители
+ authors: Автори
+ body: Основен текст
+ comments_count: Брой коментари
+ comments_negative_count: Против
+ comments_neutral_count: Неутрален
+ comments_positive_count: Подкрепям
+ created_at: Дата на създаване
+ documents: Документи
+ endorsements_count: Брой препоръки
+ endorsements_ranking: Класиране по препоръки
+ endorsers: Препоръчали
+ link: Връзка
+ n_more_endorsers:
+ one: и още 1
+ other: и още %{count}
+ photos: Снимки
proposals: Предложения
+ ranking: "%{ranking} от %{total}"
+ related_meetings: Свързани срещи
+ remove_assignment: Премахване на възлагане
+ remove_assignment_confirmation: Наистина ли искате да премахнете оценителя от това предложение?
+ valuators: Оценители
+ votes_count: Брой подкрепяния
+ votes_ranking: Класиране по подкрепяния
+ update_category:
+ invalid: 'Тези предложения вече имат категорията %{subject_name}: %{proposals}.'
+ select_a_category: Моля, изберете категория
+ select_a_proposal: Моля, изберете предложение
+ success: 'Предложенията бяха актуализирани успешно в категорията %{subject_name}: %{proposals}.'
+ update_scope:
+ invalid: 'Тези предложения вече имат обхват %{subject_name}: %{proposals}.'
+ select_a_proposal: Моля, изберете предложение
+ select_a_scope: Моля, изберете обхват
+ success: 'Предложенията бяха актуализирани успешно в обхвата %{subject_name}: %{proposals}.'
proposals_imports:
+ create:
+ invalid: Възникна проблем при импортирането на предложенията
+ success: "%{number} предложения бяха импортирани успешно"
new:
+ create: Импортиране на предложения
+ no_components: Няма други компоненти на предложения в това пространство за участие, от които да се импортират предложенията.
+ select_component: Моля, изберете компонент
+ select_states: Проверете състоянието на предложенията за импортиране
title: Копиране на предложения
+ proposals_merges:
+ create:
+ invalid: 'Възникна проблем при обединяването на избраните предложения, заради някои от тези:'
+ success: Предложенията бяха обединени успешно в ново предложение.
+ proposals_splits:
+ create:
+ invalid: 'Възникна проблем при сливането на избраните предложения, заради някои от тези:'
+ success: Предложенията бяха разделени успешно в нови предложения.
+ valuation_assignments:
+ create:
+ invalid: Възникна грешка при възлагането на предложенията на оценител
+ success: Предложенията бяха възложени успешно на оценител
+ delete:
+ invalid: Възникна грешка при отмяна на възлагането на предложения към оценител
+ success: Оценителят бе успешно премахнат от предложенията
+ admin_log:
+ proposal:
+ answer: "%{user_name} отговори на предложението %{resource_name} в пространството %{space_name}"
+ create: "%{user_name} създаде предложението %{resource_name} в пространството %{space_name} като официално предложение"
+ publish_answer: "%{user_name} публикува отговора на предложението %{resource_name} в пространството %{space_name}"
+ update: "%{user_name} актуализира официалното предложение %{resource_name} в пространството %{space_name}"
+ proposal_note:
+ create: "%{user_name} остави частна бележка в предложението %{resource_name} в пространството %{space_name}"
+ valuation_assignment:
+ create: "%{user_name} възложи предложението %{resource_name} на оценител"
+ delete: "%{user_name} премахна възлагането на предложението %{proposal_title} на оценител"
+ answers:
+ accepted: Прието
+ evaluating: Оценяване
+ not_answered: Не отговорено
+ rejected: Отхвърлено
+ withdrawn: Оттеглено
+ application_helper:
+ filter_category_values:
+ all: Всички
+ filter_origin_values:
+ all: Всички
+ meetings: Срещи
+ official: Официално
+ participants: Участници
+ user_groups: Групи
+ filter_scope_values:
+ all: Всички
+ filter_state_values:
+ accepted: Прието
+ all: Всички
+ evaluating: Оценяване
+ not_answered: Не отговорено
+ rejected: Отхвърлено
+ filter_type_values:
+ all: Всички
+ amendments: Изменения
+ proposals: Предложения
+ collaborative_drafts:
+ collaborative_draft:
+ publish:
+ error: Възникна проблем при публикуването на съвместната чернова.
+ irreversible_action_modal:
+ body: След като черновата бъде публикувана като предложение, тя повече няма да може да се редактира. За предложението няма да могат да се приемат нови автори или добавки.
+ cancel: Отказ
+ ok: Публикувай като предложение
+ title: Следното действие е необратимо
+ success: Съвместната чернова беше публикувана успешно като предложение.
+ view_collaborative_draft: Преглед на съвместна чернова
+ withdraw:
+ error: Възникна проблем при затварянето на съвместната чернова.
+ irreversible_action_modal:
+ body: След като черновата бъде затворена, тя повече няма да може да се редактира. За черновата няма да могат да се приемат нови автори или добавки.
+ cancel: Отказ
+ ok: Оттегляне на съвместната чернова
+ title: Следното действие е необратимо
+ success: Съвместната чернова беше оттеглена успешно.
+ count:
+ drafts_count:
+ one: "Съвместна чернова"
+ other: "Съвместни чернови"
+ create:
+ error: Възникна проблем при създаването на тази съвместна чернова.
+ success: Съвместната чернова беше създадена успешно.
+ edit:
+ attachment_legend: "(Незадължително) Добавяне на прикачен файл"
+ back: Назад
+ select_a_category: Моля, изберете категория
+ send: Изпрати
+ title: Редактиране на съвместната чернова
+ filters:
+ all: Всички
+ amendment: Изменения
+ category: Категория
+ open: Отворен
+ published: Публикувано
+ related_to: Свързано с
+ scope: Обхват
+ search: Търсене
+ state: Статус
+ withdrawn: Оттеглено
+ filters_small_view:
+ close_modal: Затвори прозореца
+ filter: Филтър
+ filter_by: Филтрирай по
+ unfold: Разгъване
+ new:
+ add_file: Добави файл
+ edit_file: Редактирай файл
+ send: Продължи
+ new_collaborative_draft_button:
+ new_collaborative_draft: Нова съвместна чернова
+ orders:
+ label: 'Подреждане на черновите по:'
+ most_contributed: Най-допринесли
+ random: Произволно
+ recent: Скорошни
+ requests:
+ accepted_request:
+ error: Неуспешно приемане като сътрудник, моля, опитайте отново по-късно.
+ success: "@%{user} беше приет(а) успешно като сътрудник"
+ access_requested:
+ error: Заявката Ви не беше изпълнена успешно, моля, опитайте отново по-късно.
+ success: Вашата заявка за сътрудничество беше изпратена успешно
+ collaboration_requests:
+ accept_request: Приеми
+ reject_request: Отхвърли
+ title: Заявки за сътрудничество
+ rejected_request:
+ error: Неуспешно отхвърляне като сътрудник, моля, опитайте отново по-късно.
+ success: "@%{user} беше отхвърлен(а) успешно като сътрудник"
+ show:
+ back: Назад
+ edit: Редактиране на съвместната чернова
+ final_proposal: окончателно предложение
+ final_proposal_help_text: Тази чернова е завършена. Вижте окончателното предложение
+ hidden_authors_count:
+ one: и още %{count}
+ other: и още %{count} души
+ info-message: Това е съвместна чернова за предложение. Това означава, че можете да помогнете на авторите да оформят предложението си, като използвате раздела за коментари по-долу, или да го подобрите директно, като поискате редакторски достъп. След като авторите Ви предоставят достъп, ще можете да извършвате промени в черновата.
+ publish: Публикувай
+ publish_info: Публикуване на тази версия на черновата или
+ published_proposal: публикувано предложение
+ request_access: Заявка за достъп
+ requested_access: Изпратена е заявка за достъп
+ version_history: вижте хронологията на версиите за това предложение
+ withdraw: оттеглете черновата
+ states:
+ open: Отвори
+ published: Публикувано
+ withdrawn: Оттеглено
+ update:
+ error: Възникна проблем при запазването на съвместната чернова.
+ success: Съвместната чернова беше актуализирана успешно.
+ wizard_aside:
+ back_from_collaborative_draft: Назад към съвместните чернови
+ info: Създавате съвместна чернова.
+ wizard_header:
+ title: Създайте своята съвместна чернова
content_blocks:
highlighted_proposals:
proposals: Предложения
+ create:
+ error: Възникна проблем при запазването на предложението.
+ success: Предложението беше създадено успешно. Запазено като чернова.
+ last_activity:
+ new_proposal_at_html: "Ново предложение на адрес: %{link}"
+ proposal_updated_at_html: "Предложение беше актуализирано на: %{link}"
+ models:
+ collaborative_draft:
+ fields:
+ authors: Автори
+ contributions: Добавки
+ new:
+ limit_reached: Не можете да създавате нови предложения, докато сте надхвърлили ограничението.
+ proposals:
+ compare:
+ continue: Продължи
+ complete:
+ send: Изпрати
+ count:
+ proposals_count:
+ one: "%{count} предложение"
+ other: "%{count} предложения"
+ edit:
+ add_image: Добавяне на изображение
+ edit_image: Редактиране на изображение
+ gallery_legend: "(Незадължително) Добавете изображение към картата с предложението"
+ filters_small_view:
+ close_modal: Затвори прозореца
+ filter: Филтър
+ filter_by: Филтрирай по
+ unfold: Разгъване
+ index:
+ click_here: Виж всички предложения
+ collaborative_drafts_list: Достъп до съвместни чернови
+ new_proposal: Ново предложение
+ see_all: Виж всички предложения
+ see_all_withdrawn: Вижте всички оттеглени предложения
+ text_banner: Разглеждате списъка с предложения, оттеглени от своите автори. %{go_back_link}.
+ view_proposal: Преглед на предложението
+ linked_proposals:
+ proposal_votes:
+ one: поддръжка
+ other: поддръжки
+ new:
+ send: Продължи
+ title: Създайте Ваше предложение
+ orders:
+ label: 'Подреждане на предложенията по:'
+ most_commented: Най-коментирани
+ most_endorsed: Най-препоръчвани
+ most_followed: Най-следвани
+ most_voted: Най-подкрепяни
+ random: Произволно
+ recent: Скорошни
+ with_more_authors: С повече автори
+ participatory_texts:
+ index:
+ document_index: Индекс на документ
+ view_index:
+ see_index: Вижте индекса
+ placeholder:
+ address: 37 Homewood Drive Brownsburg, IN 46112
+ preview:
+ announcement_body: Вашето предложение е запазено като чернова. Трябва да се публикува, за да се появи на сайта.
+ announcement_title: Вашето предложение все още не е публикувано
+ proposal:
+ creation_date: 'Създадено на:'
+ view_proposal: Преглед на предложението
+ proposals:
+ empty: Все още няма предложение
+ empty_filters: Няма предложение, което да отговаря на тези критерии
+ show:
+ back_to: Назад към
+ back_to_list: Назад към списъка
+ endorsements_list: Списък с одобрения
+ read_less: Виж по-малко
+ read_more: Прочетете повече
+ report: Отчет
+ tags:
+ changed_from: "(променено от предишното %{previous_name} от администратор)"
+ votes_count:
+ most_popular_proposal: Най-популярно предложение
+ need_more_votes: Има нужда от повече подкрепяния
+ voting_rules:
+ minimum_votes_per_user:
+ given_enough_votes: Предоставили сте достатъчно подкрепяния.
+ threshold_per_proposal:
+ description: За да бъдат валидирани, предложенията трябва да съберат %{limit} подкрепяния
+ vote_limit:
+ left: Оставащи
+ votes: Подкрепа
+ wizard_aside:
+ info: Вие създавате предложение.
+ wizard_steps:
+ see_steps: вижте стъпките
+ step_of: Стъпка %{current_step_num} от общо %{total_steps}
+ proposals_picker:
+ close: Затвори
+ more_proposals: Има още %{number} предложения. Прецизирайте търсенето си, за да ги намерите.
+ no_proposals: Няма предложения, които да съответстват на критериите Ви за търсене, или няма никакви предложения.
versions:
collaborative_drafts:
back_to_resource: Обратно към съвместната чернова
diff --git a/decidim-proposals/config/locales/ca.yml b/decidim-proposals/config/locales/ca.yml
index eb4a670733b30..64da725ca1c87 100644
--- a/decidim-proposals/config/locales/ca.yml
+++ b/decidim-proposals/config/locales/ca.yml
@@ -111,7 +111,7 @@ ca:
state_eq:
label: Estat
values:
- accepted: Acceptada
+ accepted: Acceptades
evaluating: En avaluació
published: Publicades
rejected: Rebutjada
@@ -231,48 +231,48 @@ ca:
notification_title: Algú ha deixat una nota a la proposta %{resource_title}. Revisa-la ara a través del taulell d'admistració
collaborative_draft_access_accepted:
email_intro: 'S''ha acceptat %{requester_name} per accedir com a contribuidora de l''esborrany col·laboratiu %{resource_title}.'
- email_outro: Has rebut aquesta notificació perquè ets una contribuïdora de %{resource_title}.
+ email_outro: Has rebut aquesta notificació perquè vas contribuir a la proposta "%{resource_title}".
email_subject: "S'ha acceptat %{requester_name} per accedir com a contribuidora del %{resource_title}."
notification_title: %{requester_name} %{requester_nickname} ha estat acceptat per accedir com a contribuidora de l'esborrany col·laboratiu %{resource_title}.
collaborative_draft_access_rejected:
email_intro: 'S''ha rebutjat que %{requester_name} accedeixi com a contribuidora de l''esborrany col·laboratiu %{resource_title}.'
- email_outro: Has rebut aquesta notificació perquè ets una contribuïdora de %{resource_title}.
+ email_outro: Has rebut aquesta notificació perquè vas contribuir a la proposta "%{resource_title}".
email_subject: "S'ha rebutjat %{requester_name} per accedir com a contribuïdora de l'esborrany col·laboratiu %{resource_title}."
notification_title: %{requester_name} %{requester_nickname} ha estat rebutjat per accedir com a contribuïdora de l'esborrany col·laboratiu %{resource_title}.
collaborative_draft_access_requested:
email_intro: '%{requester_name} ha sol·licitat accés com a contribuïdora. Pots acceptar o rebutjar la sol·licitud de l''esborrany col·laboratiu %{resource_title}.'
- email_outro: Has rebut aquesta notificació perquè ets contribuïdora de %{resource_title}.
+ email_outro: Has rebut aquesta notificació perquè vas contribuir a la proposta "%{resource_title}".
email_subject: "%{requester_name} ha demanat accés per contribuir a %{resource_title}."
notification_title: %{requester_name} %{requester_nickname} ha sol·licitat accés per contribuir a l'esborrany col·laboratiu de %{resource_title}. Si us plau, accepta o rebutja la sol·licitud.
collaborative_draft_access_requester_accepted:
email_intro: Has estat acceptada com a contribuïdora de l'esborrany col·laboratiu %{resource_title}.
- email_outro: Has rebut aquesta notificació perquè has sol·licitat ser contribuïdora de %{resource_title}.
+ email_outro: Has rebut aquesta notificació perquè has sol·licitat poder contribuïr a la proposta "%{resource_title}".
email_subject: Has estat acceptada com a contribuïdora de %{resource_title}.
notification_title: Has estat acceptada com a contribuïdora de l'esborrany col·laboratiu %{resource_title}.
collaborative_draft_access_requester_rejected:
email_intro: Has estat rebutjada per accedir com a contribuïdora de l'esborrany col·laboratiu %{resource_title}.
- email_outro: Has rebut aquesta notificació perquè has sol·licitat ser contribuïdora de %{resource_title}.
+ email_outro: Has rebut aquesta notificació perquè has sol·licitat poder contribuïr a la proposta "%{resource_title}".
email_subject: Has estat rebutjada com a contribuïdora de %{resource_title}.
notification_title: Has estat rebutjada per accedir com a contribuïdora de l'esborrany col·laboratiu %{resource_title}.
collaborative_draft_withdrawn:
email_intro: %{author_name} %{author_nickname} ha retirat l'esborrany col·laboratiu %{resource_title}.
- email_outro: Has rebut aquesta notificació perquè ets contribuïdora de %{resource_title}.
+ email_outro: Has rebut aquesta notificació perquè vas contribuir a la proposta "%{resource_title}".
email_subject: "%{author_name} %{author_nickname} ha retirat l'esborrany col·laboratiu %{resource_title}."
notification_title: %{author_name} %{author_nickname} ha retirat l'esborrany col·laboratiu %{resource_title}.
creation_enabled:
email_intro: 'Ara pots crear noves propostes a %{participatory_space_title}! Comença a participar a aquesta pàgina:'
- email_outro: Has rebut aquesta notificació perquè estàs seguint %{participatory_space_title}. Pots deixar de rebre notificacions seguint l'enllaç anterior.
+ email_outro: Has rebut aquesta notificació perquè estàs seguint l'espai "%{participatory_space_title}". Pots deixar de rebre notificacions seguint l'enllaç anterior.
email_subject: Les propostes ja estan disponibles a %{participatory_space_title}
notification_title: Ara pots presentar noves propostes a %{participatory_space_title}
endorsing_enabled:
email_intro: 'Pots adherir-te a les propostes a %{participatory_space_title}. Comença a participar en aquesta pàgina:'
- email_outro: Has rebut aquesta notificació perquè estàs seguint %{participatory_space_title}. Pots deixar de rebre notificacions seguint l'enllaç anterior.
+ email_outro: Has rebut aquesta notificació perquè estàs seguint l'espai "%{participatory_space_title}". Pots deixar de rebre notificacions seguint l'enllaç anterior.
email_subject: L'adhesió a les propostes de %{participatory_space_title} ha començat
notification_title: Ara ja pots començar a adherir-te a propostes a %{participatory_space_title}
proposal_accepted:
affected_user:
email_intro: 'S''ha acceptat la teva proposta "%{resource_title}". Pots llegir la resposta en aquesta pàgina:'
- email_outro: Has rebut aquesta notificació perquè ets autora de "%{resource_title}".
+ email_outro: Has rebut aquesta notificació perquè vas presentar aquesta proposta "%{resource_title}".
email_subject: S'ha acceptat la teva proposta
notification_title: S'ha acceptat la teva proposta %{resource_title}.
follower:
@@ -283,7 +283,7 @@ ca:
proposal_evaluating:
affected_user:
email_intro: 'La teva proposta "%{resource_title}" s''està avaluant. Pots consultar la resposta en aquesta pàgina:'
- email_outro: Has rebut aquesta notificació perquè ets autora de "%{resource_title}".
+ email_outro: Has rebut aquesta notificació perquè vas presentar aquesta proposta "%{resource_title}".
email_subject: S'està avaluant la teva proposta
notification_title: S'està avaluant la teva proposta %{resource_title}.
follower:
@@ -293,24 +293,24 @@ ca:
notification_title: S'ha avaluat la proposta %{resource_title}.
proposal_mentioned:
email_intro: La teva proposta "%{mentioned_proposal_title}" ha estat esmentada als comentaris en aquest espai.
- email_outro: Has rebut aquesta notificació perquè ets autora de "%{resource_title}".
+ email_outro: Has rebut aquesta notificació perquè vas presentar aquesta proposta "%{resource_title}".
email_subject: S'ha mencionat la teva proposta "%{mentioned_proposal_title}"
notification_title: La teva proposta "%{mentioned_proposal_title}" ha estat esmentada en aquest espai als comentaris.
proposal_published:
email_intro: '%{author_name} %{author_nickname}, a qui segueixes, ha publicat una nova proposta anomenada "%{resource_title}". Consulta i contribueix:'
- email_outro: Has rebut aquesta notificació perquè estàs seguint %{author_nickname}. Pots deixar de rebre notificacions seguint l'enllaç anterior.
+ email_outro: Has rebut aquesta notificació perquè estàs seguint a "%{author_nickname}". Pots deixar de rebre notificacions seguint l'enllaç anterior.
email_subject: Nova proposta "%{resource_title}" de %{author_nickname}
notification_title: La proposta %{resource_title} ha estat publicada per %{author_name} %{author_nickname}.
proposal_published_for_space:
- email_intro: La proposta "%{resource_title}" s'ha afegit a "%{participatory_space_title}", que segueixes.
- email_outro: Has rebut aquesta notificació perquè estàs seguint "%{participatory_space_title}". Pots deixar de rebre notificacions seguint l'enllaç anterior.
+ email_intro: La proposta "%{resource_title}" s'ha afegit a l'espai "%{participatory_space_title}", que segueixes.
+ email_outro: Has rebut aquesta notificació perquè estàs seguint l'espai "%{participatory_space_title}". Pots deixar de rebre notificacions seguint l'enllaç anterior.
email_subject: Nova proposta "%{resource_title}" afegida a %{participatory_space_title}
notification_title: '%{author} ha afegit la proposta %{resource_title} a %{participatory_space_title}'
notification_title_official: S'ha afegit la proposta oficial %{resource_title} a %{participatory_space_title}
proposal_rejected:
affected_user:
email_intro: 'La teva proposta "%{resource_title}" ha estat rebutjada. Pots llegir la resposta en aquesta pàgina:'
- email_outro: Has rebut aquesta notificació perquè ets autora de "%{resource_title}".
+ email_outro: Has rebut aquesta notificació perquè vas presentar aquesta proposta "%{resource_title}".
email_subject: La teva proposta ha estat rebutjada
notification_title: La teva proposta %{resource_title} ha estat rebutjada.
follower:
@@ -320,18 +320,18 @@ ca:
notification_title: S'ha rebutjat la proposta %{resource_title}.
proposal_update_category:
email_intro: 'Una administradora ha actualitzat la categoria de la teva proposta "%{resource_title}", fes-hi una ullada:'
- email_outro: Has rebut aquesta notificació perquè ets autora de la proposta.
+ email_outro: Has rebut aquesta notificació perquè vas presentar aquesta proposta.
email_subject: S'ha actualitzat la categoria de la proposta %{resource_title}
notification_title: La categoria de la proposta %{resource_title} ha estat actualitzada per una administradora.
proposal_update_scope:
email_intro: 'Una administradora ha actualitzat l''àmbit de la teva proposta "%{resource_title}", fes-hi una ullada:'
- email_outro: Has rebut aquesta notificació perquè ets autora de la proposta.
+ email_outro: Has rebut aquesta notificació perquè vas presentar aquesta proposta.
email_subject: S'ha actualitzat l'àmbit de la proposta %{resource_title}
notification_title: L'àmbit de la proposta %{resource_title} ha estat actualitzat per una administradora.
voting_enabled:
email_intro: 'Pots començar a donar suports a les propostes de %{participatory_space_title}! Comença a participar en aquesta pàgina:'
- email_outro: Has rebut aquesta notificació perquè estàs seguint %{participatory_space_title}. Pots deixar de rebre notificacions seguint l'enllaç anterior.
- email_subject: El recolzament a propostes ha començat per a %{participatory_space_title}
+ email_outro: Has rebut aquesta notificació perquè estàs seguint l'espai "%{participatory_space_title}". Pots deixar de rebre notificacions seguint l'enllaç anterior.
+ email_subject: El recolzament a propostes ha començat per a l'espai "%{participatory_space_title}"
notification_title: Ja pots començar a donar suports a propostes a %{participatory_space_title}
gamification:
badges:
@@ -387,7 +387,7 @@ ca:
title: Suports
participatory_spaces:
highlighted_proposals:
- see_all: Veure tots (%{count})
+ see_all: Veure totes (%{count})
proposals:
actions:
answer_proposal: Respondre a la proposta
@@ -471,7 +471,7 @@ ca:
success: El text participatiu s'ha actualitzat correctament.
proposal_answers:
form:
- accepted: Acceptades
+ accepted: Acceptada
answer_proposal: Resposta
evaluating: En avaluació
not_answered: No resposta
@@ -602,7 +602,7 @@ ca:
create: "%{user_name} ha assignat la proposta %{resource_name} a una avaluadora"
delete: "%{user_name} ha desfet l'assignació a una avaluadora de la proposta %{proposal_title}"
answers:
- accepted: Acceptades
+ accepted: Acceptada
evaluating: En avaluació
not_answered: No resposta
rejected: Rebutjada
@@ -619,7 +619,7 @@ ca:
filter_scope_values:
all: Totes
filter_state_values:
- accepted: Acceptades
+ accepted: Acceptada
all: Totes
evaluating: En avaluació
not_answered: No resposta
@@ -779,7 +779,7 @@ ca:
no_similars_found: Ben fet! No s'han trobat propostes semblants
title: Propostes similars
complete:
- send: Enviar
+ send: Envia
title: Completa la teva proposta
count:
proposals_count:
diff --git a/decidim-proposals/config/locales/cs.yml b/decidim-proposals/config/locales/cs.yml
index acbcf3e4dca65..256cf5a960a24 100644
--- a/decidim-proposals/config/locales/cs.yml
+++ b/decidim-proposals/config/locales/cs.yml
@@ -12,6 +12,8 @@ cs:
state: Stav
title: Titul
user_group_id: Vytvořit návrh spolupráce jako
+ import_participatory_text:
+ document: Textový dokument k participaci
proposal:
address: Adresa
answer: Odpovědět
@@ -183,7 +185,6 @@ cs:
proposal_wizard_step_1_help_text: Text průvodce kroku nápovědy "Vytvořit" Návrh
proposal_wizard_step_2_help_text: Text průvodce kroku nápovědy "Porovnat" návrhy
proposal_wizard_step_3_help_text: Text průvodce kroku nápovědy „Dokončit“ Návrh
- proposal_wizard_step_4_help_text: Text průvodce kroku nápovědy "Publikovat" Návrh
resources_permissions_enabled: Pro každý návrh lze nastavit oprávnění akce
scope_id: Oblast působnosti
scopes_enabled: Oblasti působnosti povoleny
@@ -283,6 +284,7 @@ cs:
notification_title: Váš návrh %{resource_title} byl přijat.
follower:
email_intro: 'Návrh "%{resource_title}" byl přijat. Odpověď můžete číst na této stránce:'
+ email_outro: Toto oznámení jste obdrželi, protože sledujete "%{resource_title}". Můžete sledování odhlásit na předchozím odkazu.
email_subject: Návrh, který sledujete, byl přijat
notification_title: Návrh %{resource_title} byl přijat.
proposal_evaluating:
@@ -293,6 +295,7 @@ cs:
notification_title: Váš návrh %{resource_title} je hodnocen.
follower:
email_intro: 'V současné době se hodnotí návrh "%{resource_title}". V této stránce můžete zkontrolovat odpověď:'
+ email_outro: Toto oznámení jste obdrželi, protože sledujete "%{resource_title}". Můžete sledování odhlásit na předchozím odkazu.
email_subject: Návrh, který sledujete, se hodnotí
notification_title: Návrh %{resource_title} se hodnotí.
proposal_mentioned:
@@ -319,6 +322,7 @@ cs:
notification_title: Váš návrh %{resource_title} byl zamítnut.
follower:
email_intro: 'Návrh "%{resource_title}" byl zamítnut. Odpověď můžete číst na této stránce:'
+ email_outro: Toto oznámení jste obdrželi, protože sledujete "%{resource_title}". Můžete sledování odhlásit na předchozím odkazu.
email_subject: Návrh, který sledujete, byl zamítnut
notification_title: Návrh %{resource_title} byl zamítnut.
proposal_update_category:
diff --git a/decidim-proposals/config/locales/de.yml b/decidim-proposals/config/locales/de.yml
index b44d81a0f5c25..718f201f04a47 100644
--- a/decidim-proposals/config/locales/de.yml
+++ b/decidim-proposals/config/locales/de.yml
@@ -779,7 +779,7 @@ de:
no_similars_found: Gut gemacht! Keine ähnlichen Vorschläge gefunden
title: Ähnliche Vorschläge
complete:
- send: Senden
+ send: Abschicken
title: Vorschlag vervollständigen
count:
proposals_count:
diff --git a/decidim-proposals/config/locales/el.yml b/decidim-proposals/config/locales/el.yml
index 30951ef5d6559..501a174b9d5f7 100644
--- a/decidim-proposals/config/locales/el.yml
+++ b/decidim-proposals/config/locales/el.yml
@@ -175,7 +175,6 @@ el:
proposal_wizard_step_1_help_text: Κείμενο βοήθειας βήματος «Δημιουργίας» του οδηγού πρότασης
proposal_wizard_step_2_help_text: Κείμενο βοήθειας βήματος «Σύγκρισης» του οδηγού πρότασης
proposal_wizard_step_3_help_text: Κείμενο βοήθειας βήματος «Ολοκλήρωσης» του οδηγού πρότασης
- proposal_wizard_step_4_help_text: Κείμενο βοήθειας βήματος «Δημοσίευσης» του οδηγού πρότασης
resources_permissions_enabled: Μπορούν να οριστούν δικαιώματα ενεργειών για κάθε πρόταση
scope_id: Πεδίο εφαρμογής
scopes_enabled: Τα πεδία εφαρμογής ενεργοποιήθηκαν
diff --git a/decidim-proposals/config/locales/es-MX.yml b/decidim-proposals/config/locales/es-MX.yml
index 11e7650d9cbce..8f36d7b6cea3f 100644
--- a/decidim-proposals/config/locales/es-MX.yml
+++ b/decidim-proposals/config/locales/es-MX.yml
@@ -177,7 +177,7 @@ es-MX:
proposal_wizard_step_1_help_text: Texto de ayuda para el paso "Crear" del asistente de propuesta
proposal_wizard_step_2_help_text: Texto de ayuda para el paso "Comparar" del asistente de propuesta
proposal_wizard_step_3_help_text: Texto de ayuda para el paso "Comparar" del asistente de propuesta
- proposal_wizard_step_4_help_text: 'Asistente de propuesta: texto de ayuda paso "Publicar"'
+ proposal_wizard_step_4_help_text: Texto de ayuda para el paso "Publicar" del asistente de propuestas
resources_permissions_enabled: Se pueden establecer permisos de acciones para cada propuesta
scope_id: Ámbito
scopes_enabled: Ámbitos habilitados
@@ -277,7 +277,7 @@ es-MX:
notification_title: Su propuesta %{resource_title} ha sido aceptada.
follower:
email_intro: 'La propuesta "%{resource_title}" ha sido aceptada. Puedes leer la respuesta en esta página:'
- email_outro: Has recibido esta notificación porque estás siguiendo "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
+ email_outro: Has recibido esta notificación porque estás siguiendo el espacio "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
email_subject: Una propuesta que estás siguiendo ha sido aceptada
notification_title: La propuesta %{resource_title} ha sido aceptada.
proposal_evaluating:
@@ -288,7 +288,7 @@ es-MX:
notification_title: Su propuesta %{resource_title} está siendo evaluada.
follower:
email_intro: 'La propuesta "%{resource_title}" se está evaluando actualmente. Puedes encontrar la respuesta en esta página:'
- email_outro: Has recibido esta notificación porque estás siguiendo "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
+ email_outro: Has recibido esta notificación porque estás siguiendo el espacio "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
email_subject: Una propuesta que estás siguiendo está siendo evaluada
notification_title: La propuesta %{resource_title} está siendo evaluada.
proposal_mentioned:
@@ -315,7 +315,7 @@ es-MX:
notification_title: Su propuesta %{resource_title} ha sido rechazada.
follower:
email_intro: 'La propuesta "%{resource_title}" ha sido rechazada. Puedes leer la respuesta en esta página:'
- email_outro: Has recibido esta notificación porque estás siguiendo "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
+ email_outro: Has recibido esta notificación porque estás siguiendo el espacio "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
email_subject: Una propuesta que estás siguiendo ha sido rechazada
notification_title: La propuesta %{resource_title} ha sido rechazada.
proposal_update_category:
@@ -941,7 +941,7 @@ es-MX:
step_1: Crear tu propuesta
step_2: Comparar
step_3: Completar
- step_4: Publicar tu propuesta
+ step_4: Publica tu propuesta
step_of: Paso %{current_step_num} de %{total_steps}
title: Pasos de creación de una propuesta
proposals_picker:
diff --git a/decidim-proposals/config/locales/es-PY.yml b/decidim-proposals/config/locales/es-PY.yml
index 24ef8b8ca9705..bb8c8cb2d4f97 100644
--- a/decidim-proposals/config/locales/es-PY.yml
+++ b/decidim-proposals/config/locales/es-PY.yml
@@ -177,7 +177,7 @@ es-PY:
proposal_wizard_step_1_help_text: Asistente de propuesta "Crear" paso texto de ayuda
proposal_wizard_step_2_help_text: Asistente de propuesta "Comparar" texto de ayuda paso
proposal_wizard_step_3_help_text: Texto de ayuda al paso "Completar" de propuestas
- proposal_wizard_step_4_help_text: Asistente de propuesta Texto de ayuda paso "Publicar"
+ proposal_wizard_step_4_help_text: Texto de ayuda para el paso "Publicar" del asistente de propuestas
resources_permissions_enabled: Los permisos sobre acciones pueden establecerse para cada propuesta
scope_id: Ámbito
scopes_enabled: Ámbitos habilitados
@@ -277,7 +277,7 @@ es-PY:
notification_title: Su propuesta %{resource_title} ha sido aceptada.
follower:
email_intro: 'La propuesta "%{resource_title}" ha sido aceptada. Puedes leer la respuesta en esta página:'
- email_outro: Has recibido esta notificación porque estás siguiendo "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
+ email_outro: Has recibido esta notificación porque estás siguiendo el espacio "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
email_subject: Una propuesta que estás siguiendo ha sido aceptada
notification_title: La propuesta %{resource_title} ha sido aceptada.
proposal_evaluating:
@@ -288,7 +288,7 @@ es-PY:
notification_title: Su propuesta %{resource_title} está siendo evaluada.
follower:
email_intro: 'La propuesta "%{resource_title}" se está evaluando actualmente. Puedes encontrar la respuesta en esta página:'
- email_outro: Has recibido esta notificación porque estás siguiendo "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
+ email_outro: Has recibido esta notificación porque estás siguiendo el espacio "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
email_subject: Una propuesta que estás siguiendo está siendo evaluada
notification_title: La propuesta %{resource_title} está siendo evaluada.
proposal_mentioned:
@@ -315,7 +315,7 @@ es-PY:
notification_title: Su propuesta %{resource_title} ha sido rechazada.
follower:
email_intro: 'La propuesta "%{resource_title}" ha sido rechazada. Puedes leer la respuesta en esta página:'
- email_outro: Has recibido esta notificación porque estás siguiendo "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
+ email_outro: Has recibido esta notificación porque estás siguiendo el espacio "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
email_subject: Una propuesta que estás siguiendo ha sido rechazada
notification_title: La propuesta %{resource_title} ha sido rechazada.
proposal_update_category:
diff --git a/decidim-proposals/config/locales/es.yml b/decidim-proposals/config/locales/es.yml
index 09720c0917e76..f341ce476681e 100644
--- a/decidim-proposals/config/locales/es.yml
+++ b/decidim-proposals/config/locales/es.yml
@@ -111,7 +111,7 @@ es:
state_eq:
label: Estado
values:
- accepted: Aceptada
+ accepted: Aceptadas
evaluating: En evaluación
published: Publicada
rejected: Rechazada
@@ -236,22 +236,22 @@ es:
notification_title: %{requester_name} %{requester_nickname} ha sido aceptada para acceder como contribuidora del borrador colaborativo %{resource_title}.
collaborative_draft_access_rejected:
email_intro: 'Se ha denegado que %{requester_name} acceda como contribuidora del borrador colaborativo %{resource_title}.'
- email_outro: Has recibido esta notificación porque eres una contribuidora de %{resource_title}.
+ email_outro: Has recibido esta notificación porque has contribuido en la propuesta "%{resource_title}".
email_subject: "%{requester_name} ha sido rechazado para acceder como contribuidora del borrador colaborativo %{resource_title}."
notification_title: %{requester_name} %{requester_nickname} ha sido rechazado para acceder como contribuidora del borrador colaborativo %{resource_title}.
collaborative_draft_access_requested:
email_intro: '%{requester_name} ha solicitado acceso como contribuidora. Puede aceptar o rechazar la solicitud de la página de borrador colaborativo de %{resource_title}.'
- email_outro: Has recibido esta notificación porque eres contribuidora de %{resource_title}.
+ email_outro: Has recibido esta notificación porque has contribuido en la propuesta "%{resource_title}".
email_subject: "%{requester_name} ha solicitado acceso para contribuir a %{resource_title}."
notification_title: %{requester_name} %{requester_nickname} solicitó acceso para contribuir al borrador colaborativo %{resource_title}. Por favor, acepta o rechaza la solicitud.
collaborative_draft_access_requester_accepted:
email_intro: Has sido aceptada para acceder como contribuidora del borrador colaborativo %{resource_title}.
- email_outro: Has recibido esta notificación porque has solicitado ser contribuidora de %{resource_title}.
+ email_outro: Has recibido esta notificación porque has solicitado contribuir en la propuesta "%{resource_title}".
email_subject: Has sido aceptada como contribuidora de %{resource_title}.
notification_title: Has sido aceptada acceder como contribuidora del borrador colaborativo %{resource_title}.
collaborative_draft_access_requester_rejected:
email_intro: Ha sido rechazada para acceder como contribuidora del borrador colaborativo %{resource_title}.
- email_outro: Has recibido esta notificación porque has solicitado ser contribuidora de %{resource_title}.
+ email_outro: Has recibido esta notificación porque has solicitado contribuir en la propuesta "%{resource_title}".
email_subject: Has sido rechazada como contribuidora de %{resource_title}.
notification_title: Has sido rechazada como contribuidora del borrador colaborativo %{resource_title}.
collaborative_draft_withdrawn:
@@ -272,28 +272,28 @@ es:
proposal_accepted:
affected_user:
email_intro: 'Tu propuesta "%{resource_title}" ha sido aceptada. Puedes leer la respuesta en esta página:'
- email_outro: Has recibido esta notificación porque eres autora de "%{resource_title}".
+ email_outro: Has recibido esta notificación porque presentaste la propuesta "%{resource_title}".
email_subject: Tu propuesta ha sido aceptada
notification_title: Tu propuesta %{resource_title} ha sido aceptada.
follower:
email_intro: 'La propuesta "%{resource_title}" ha sido aceptada. Puedes leer la respuesta en esta página:'
- email_outro: Has recibido esta notificación porque estás siguiendo "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
+ email_outro: Has recibido esta notificación porque estás siguiendo el espacio "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
email_subject: Una propuesta que estás siguiendo ha sido aceptada
notification_title: La propuesta %{resource_title} ha sido aceptada.
proposal_evaluating:
affected_user:
email_intro: 'Tu propuesta "%{resource_title}" está siendo evaluada. Puedes consultar la respuesta en esta página:'
- email_outro: Has recibido esta notificación porque eres autora de "%{resource_title}".
+ email_outro: Has recibido esta notificación porque presentaste la propuesta "%{resource_title}".
email_subject: Tu propuesta está siendo evaluada
notification_title: Tu propuesta %{resource_title} está siendo evaluada.
follower:
email_intro: 'La propuesta "%{resource_title}" se está evaluando actualmente. Puedes encontrar la respuesta en esta página:'
- email_outro: Has recibido esta notificación porque estás siguiendo "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
+ email_outro: Has recibido esta notificación porque estás siguiendo el espacio "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
email_subject: Una propuesta que estás siguiendo está siendo evaluada
notification_title: La propuesta %{resource_title} está siendo evaluada.
proposal_mentioned:
email_intro: Tu propuesta "%{mentioned_proposal_title}" se ha mencionado en este espacio en los comentarios.
- email_outro: Has recibido esta notificación porque eres autora de "%{resource_title}".
+ email_outro: Has recibido esta notificación porque presentaste la propuesta "%{resource_title}".
email_subject: Tu propuesta "%{mentioned_proposal_title}" ha sido mencionada
notification_title: Tu propuesta "%{mentioned_proposal_title}" se ha mencionado en este espacio en los comentarios.
proposal_published:
@@ -302,20 +302,20 @@ es:
email_subject: Nueva propuesta "%{resource_title}" de %{author_nickname}
notification_title: La propuesta %{resource_title} ha sido publicada por %{author_name} %{author_nickname}.
proposal_published_for_space:
- email_intro: La propuesta "%{resource_title}" se ha añadido en "%{participatory_space_title}", que estás siguiendo.
- email_outro: Recibiste esta notificación porque estás siguiendo "%{participatory_space_title}". Puedes dejar de recibir notificaciones siguiendo el enlace anterior.
+ email_intro: La propuesta "%{resource_title}" se ha añadido en el espacio "%{participatory_space_title}", que estás siguiendo.
+ email_outro: Recibiste esta notificación porque estás siguiendo el espacio "%{participatory_space_title}". Puedes dejar de recibir notificaciones siguiendo el enlace anterior.
email_subject: Nueva propuesta "%{resource_title}" añadida a %{participatory_space_title}
notification_title: La propuesta %{resource_title} ha sido añadida a %{participatory_space_title} por %{author}
notification_title_official: Se ha añadido la propuesta oficial %{resource_title} en %{participatory_space_title}
proposal_rejected:
affected_user:
email_intro: 'Tu propuesta "%{resource_title}" ha sido rechazada. Puedes leer la respuesta en esta página:'
- email_outro: Has recibido esta notificación porque eres autora de "%{resource_title}".
+ email_outro: Has recibido esta notificación porque presentaste la propuesta "%{resource_title}".
email_subject: Tu propuesta ha sido rechazada
notification_title: Tu propuesta %{resource_title} ha sido rechazada.
follower:
email_intro: 'La propuesta "%{resource_title}" ha sido rechazada. Puedes leer la respuesta en esta página:'
- email_outro: Has recibido esta notificación porque estás siguiendo "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
+ email_outro: Has recibido esta notificación porque estás siguiendo el espacio "%{resource_title}". Puedes dejar de seguirlo desde el enlace anterior.
email_subject: Una propuesta que estás siguiendo ha sido rechazada
notification_title: La propuesta %{resource_title} ha sido rechazada.
proposal_update_category:
@@ -471,7 +471,7 @@ es:
success: Texto participativo actualizado correctamente.
proposal_answers:
form:
- accepted: Aceptadas
+ accepted: Aceptada
answer_proposal: Respuesta
evaluating: En evaluación
not_answered: No contestada
@@ -602,7 +602,7 @@ es:
create: "%{user_name} asignó la propuesta %{resource_name} a una evaluadora"
delete: "%{user_name} desasignó una evaluadora de la propuesta %{proposal_title}"
answers:
- accepted: Aceptadas
+ accepted: Aceptada
evaluating: En evaluación
not_answered: No contestada
rejected: Rechazada
@@ -619,7 +619,7 @@ es:
filter_scope_values:
all: Todas
filter_state_values:
- accepted: Aceptadas
+ accepted: Aceptada
all: Todas
evaluating: En evaluación
not_answered: No contestada
diff --git a/decidim-proposals/config/locales/eu.yml b/decidim-proposals/config/locales/eu.yml
index ca62d0ebce38a..ddb32d7cc29ff 100644
--- a/decidim-proposals/config/locales/eu.yml
+++ b/decidim-proposals/config/locales/eu.yml
@@ -177,7 +177,7 @@ eu:
proposal_wizard_step_1_help_text: Proposamen laguntzailea "Sortu" urrats laguntza testua
proposal_wizard_step_2_help_text: Proposamen laguntzailea "Konparatu" urrats laguntza testua
proposal_wizard_step_3_help_text: Proposamen laguntzailea "Bete" urrats laguntza testua
- proposal_wizard_step_4_help_text: Proposamen laguntzailea "Argitaratu" urrats laguntza testua
+ proposal_wizard_step_4_help_text: Proposamen laguntzailea "Argitaratu" urrats-laguntza testua
resources_permissions_enabled: Ekintza-baimenak proposamen bakoitzerako ezarri daitezke
scope_id: Esparrua
scopes_enabled: Esparruak gaituta
diff --git a/decidim-proposals/config/locales/fr-CA.yml b/decidim-proposals/config/locales/fr-CA.yml
index 6e435fcb89cee..f482dde12ccbb 100644
--- a/decidim-proposals/config/locales/fr-CA.yml
+++ b/decidim-proposals/config/locales/fr-CA.yml
@@ -177,7 +177,7 @@ fr-CA:
proposal_wizard_step_1_help_text: Texte d'aide à l'étape "Créer" de la création de proposition
proposal_wizard_step_2_help_text: Texte d'aide à l'étape "Comparer" de la création de proposition
proposal_wizard_step_3_help_text: Texte d'aide à l'étape "Compléter" de la création de proposition
- proposal_wizard_step_4_help_text: Texte d'aide à l'étape "Publier" de la création de proposition
+ proposal_wizard_step_4_help_text: Texte d'aide à l'étape "Publier" de l'assistant de proposition
resources_permissions_enabled: Les autorisations d'actions peuvent être définies pour chaque proposition
scope_id: Secteur
scopes_enabled: Secteurs activés
@@ -941,7 +941,7 @@ fr-CA:
step_1: Créer une proposition
step_2: Comparer aux autres propositions
step_3: Compléter votre proposition
- step_4: Publier votre proposition
+ step_4: Publier la proposition
step_of: Étape %{current_step_num} sur %{total_steps}
title: Étapes de création de proposition
proposals_picker:
diff --git a/decidim-proposals/config/locales/fr.yml b/decidim-proposals/config/locales/fr.yml
index ebe8c7f83413d..304494022decd 100644
--- a/decidim-proposals/config/locales/fr.yml
+++ b/decidim-proposals/config/locales/fr.yml
@@ -177,7 +177,7 @@ fr:
proposal_wizard_step_1_help_text: Texte d'aide à l'étape "Créer" de la création de proposition
proposal_wizard_step_2_help_text: Texte d'aide à l'étape "Comparer" de la création de proposition
proposal_wizard_step_3_help_text: Texte d'aide à l'étape "Compléter" de la création de proposition
- proposal_wizard_step_4_help_text: Texte d'aide à l'étape "Publier" de la création de proposition
+ proposal_wizard_step_4_help_text: Texte d'aide à l'étape "Publier" de l'assistant de proposition
resources_permissions_enabled: Les autorisations d'actions peuvent être définies pour chaque proposition
scope_id: Secteur
scopes_enabled: Secteurs activés
@@ -941,7 +941,7 @@ fr:
step_1: Créer une proposition
step_2: Comparer aux autres propositions
step_3: Compléter votre proposition
- step_4: Publier votre proposition
+ step_4: Publier la proposition
step_of: Étape %{current_step_num} sur %{total_steps}
title: Étapes de création de proposition
proposals_picker:
diff --git a/decidim-proposals/config/locales/gl.yml b/decidim-proposals/config/locales/gl.yml
index 35bc4e48c0ba7..56bcaf6de216a 100644
--- a/decidim-proposals/config/locales/gl.yml
+++ b/decidim-proposals/config/locales/gl.yml
@@ -157,7 +157,6 @@ gl:
proposal_wizard_step_1_help_text: Asistente de propostas "Crear" texto de axuda paso a paso
proposal_wizard_step_2_help_text: Asistente de propostas "Comparar" texto de axuda paso a paso
proposal_wizard_step_3_help_text: Asistente de propostas Texto de axuda de paso "Completo"
- proposal_wizard_step_4_help_text: Asistente de propostas "Publica" o texto de axuda paso a paso
resources_permissions_enabled: Os permisos de acción pódense establecer para cada proposta
scope_id: Ámbito
scopes_enabled: Ámbitos habilitados
@@ -663,7 +662,7 @@ gl:
error: Houbo erros ao votar a proposta.
proposals:
compare:
- continue: Continúe
+ continue: Continuar
no_similars_found: Ben feito! Non se atoparon propostas similares
title: Propostas similares
complete:
diff --git a/decidim-proposals/config/locales/he-IL.yml b/decidim-proposals/config/locales/he-IL.yml
new file mode 100644
index 0000000000000..af6fa60a73f2c
--- /dev/null
+++ b/decidim-proposals/config/locales/he-IL.yml
@@ -0,0 +1 @@
+he:
diff --git a/decidim-proposals/config/locales/hu.yml b/decidim-proposals/config/locales/hu.yml
index 8a7892918868e..e2df13699af96 100644
--- a/decidim-proposals/config/locales/hu.yml
+++ b/decidim-proposals/config/locales/hu.yml
@@ -22,6 +22,7 @@ hu:
category_id: Kategória
decidim_scope_id: Hatáskör
has_address: Van lakcíme
+ scope_id: Hatáskör
state: Állapot
suggested_hashtags: Javasolt hashtagek
title: Cím
@@ -147,7 +148,6 @@ hu:
proposal_wizard_step_1_help_text: Javaslat varázsló "Létrehozás" gomb súgójának szövege
proposal_wizard_step_2_help_text: Javaslat varázsló "Összehasonlítás" gomb súgójának szövege
proposal_wizard_step_3_help_text: Javaslat varázsló "Teljesítés" gomb súgójának szövege
- proposal_wizard_step_4_help_text: Javaslat varázsló "Közzététel" gomb súgójának szövege
resources_permissions_enabled: Egyes javaslatokhoz műveleti engedélyeket állíthatsz be
threshold_per_proposal: Küszöbérték javaslatonként
vote_limit: Támogatási limit felhasználónként
@@ -704,7 +704,7 @@ hu:
error: Hiba történt a javaslatra való szavazás során.
proposals:
compare:
- continue: Folytatás
+ continue: Tovább
no_similars_found: Szép munka! Nincsen hasonló javaslat
title: Hasonló javaslatok
complete:
diff --git a/decidim-proposals/config/locales/id-ID.yml b/decidim-proposals/config/locales/id-ID.yml
index 4a8ff4422a5d0..9a9004eadfd9c 100644
--- a/decidim-proposals/config/locales/id-ID.yml
+++ b/decidim-proposals/config/locales/id-ID.yml
@@ -99,7 +99,6 @@ id:
proposal_wizard_step_1_help_text: Panduan proposal "Buat" teks bantuan langkah
proposal_wizard_step_2_help_text: Proposal wizard "Bandingkan" langkah bantuan teks
proposal_wizard_step_3_help_text: Panduan proposal, selesaikan langkah bantuan teks
- proposal_wizard_step_4_help_text: Panduan proposal "Publikasikan" langkah bantuan teks
resources_permissions_enabled: Izin tindakan dapat diatur untuk setiap proposal
threshold_per_proposal: Ambang batas per proposal
vote_limit: Batas suara per pengguna
diff --git a/decidim-proposals/config/locales/is-IS.yml b/decidim-proposals/config/locales/is-IS.yml
index 251e4a8ea2c5f..bd211ccd5b69f 100644
--- a/decidim-proposals/config/locales/is-IS.yml
+++ b/decidim-proposals/config/locales/is-IS.yml
@@ -45,7 +45,6 @@ is:
proposal_wizard_step_1_help_text: Tillaga töframaður "Búa til" skref hjálpartexta
proposal_wizard_step_2_help_text: Tillaga töframaður "Bera saman" skref hjálpartexta
proposal_wizard_step_3_help_text: Tillaga töframaður "Complete" skref hjálpartexta
- proposal_wizard_step_4_help_text: Tillaga "Birta" skref hjálpartexti
threshold_per_proposal: Gildi fyrir hverja tillögu
step:
announcement: Tilkynning
@@ -206,7 +205,6 @@ is:
no_similars_found: Vel gert! Engar svipaðar tillögur fundust
title: Svipaðar tillögur
complete:
- send: Senda
title: Ljúka tillögu þinni
edit:
back: Til baka
diff --git a/decidim-proposals/config/locales/it.yml b/decidim-proposals/config/locales/it.yml
index 3d3aa745bc15a..093518ab2e9c0 100644
--- a/decidim-proposals/config/locales/it.yml
+++ b/decidim-proposals/config/locales/it.yml
@@ -161,7 +161,6 @@ it:
proposal_wizard_step_1_help_text: Procedura guidata proposta "Crea" testo guida passo
proposal_wizard_step_2_help_text: Procedura guidata di proposta "Confronta" il testo della guida del passo
proposal_wizard_step_3_help_text: Procedura guidata "Completa" del testo della guida guidata della proposta
- proposal_wizard_step_4_help_text: Procedura guidata "Pubblica" del testo della guida per la procedura guidata
resources_permissions_enabled: Le autorizzazioni delle azioni possono essere impostate per ogni proposta
scope_id: Ambito
scopes_enabled: Ambiti abilitati
@@ -697,7 +696,7 @@ it:
error: Ci sono stati errori durante la votazione della proposta.
proposals:
compare:
- continue: Prosegui
+ continue: Continua
no_similars_found: Molto bene! Non sono state trovate proposte simili
title: Proposte simili
complete:
diff --git a/decidim-proposals/config/locales/lt.yml b/decidim-proposals/config/locales/lt.yml
index 58f993d50a86e..683c206ef815f 100644
--- a/decidim-proposals/config/locales/lt.yml
+++ b/decidim-proposals/config/locales/lt.yml
@@ -183,7 +183,6 @@ lt:
proposal_wizard_step_1_help_text: Pasiūlymo vedlio etapo „Sukurti“ pagalbos tekstas
proposal_wizard_step_2_help_text: Pasiūlymo vedlio etapo „Palyginti“ pagalbos tekstas
proposal_wizard_step_3_help_text: Pasiūlymo vedlio etapo „Užbaigti“ pagalbos tekstas
- proposal_wizard_step_4_help_text: Pasiūlymo vedlio etapo „Paskelbti“ pagalbos tekstas
resources_permissions_enabled: Kiekvienam pasiūlymui galima nustatyti leistinus veiksmus
scope_id: Apimtis
scopes_enabled: Sritys įjungtos
diff --git a/decidim-proposals/config/locales/lv.yml b/decidim-proposals/config/locales/lv.yml
index ec78715de33f8..a26d19e3b72c4 100644
--- a/decidim-proposals/config/locales/lv.yml
+++ b/decidim-proposals/config/locales/lv.yml
@@ -123,7 +123,6 @@ lv:
proposal_wizard_step_1_help_text: Priekšlikumu vedņa „Izveidot” soļa palīdzības teksts
proposal_wizard_step_2_help_text: Priekšlikumu vedņa "Salīdzināt" soļa palīdzības teksts
proposal_wizard_step_3_help_text: Priekšlikuma vedņa „Pabeigt” soļa palīdzības teksts
- proposal_wizard_step_4_help_text: Priekšlikumu vedņa „Publicēt” soļa palīdzības teksts
resources_permissions_enabled: Katram priekšlikumam var iestatīt darbības atļaujas
threshold_per_proposal: Slieksnis vienam priekšlikumam
vote_limit: Atbalsta limits vienam dalībniekam
diff --git a/decidim-proposals/config/locales/nl.yml b/decidim-proposals/config/locales/nl.yml
index 2fcfcb3450e3a..a7f0681b9d3d9 100644
--- a/decidim-proposals/config/locales/nl.yml
+++ b/decidim-proposals/config/locales/nl.yml
@@ -153,7 +153,6 @@ nl:
proposal_wizard_step_1_help_text: Helptekst "Maak" bij het maken van een nieuw voorstel
proposal_wizard_step_2_help_text: Helptekst "Vergelijk" bij het maken van een nieuw voorstel
proposal_wizard_step_3_help_text: Voorstel wizard "Complete" stap helptekst
- proposal_wizard_step_4_help_text: Helptekst "Publiceren" bij het maken van een nieuw voorstel
resources_permissions_enabled: Actiemachtigingen kunnen voor elk voorstel worden ingesteld
scope_id: Scope
scopes_enabled: Scopes ingeschakeld
@@ -870,7 +869,7 @@ nl:
step_1: Maak je voorstel
step_2: Vergelijk
step_3: Compleet
- step_4: Publiceer uw voorstel
+ step_4: Publiceer je voorstel
step_of: Stap %{current_step_num} van %{total_steps}
title: Voorstel creatie stappen
proposals_picker:
diff --git a/decidim-proposals/config/locales/no.yml b/decidim-proposals/config/locales/no.yml
index 9a5d907abc0b3..091c4cca225a5 100644
--- a/decidim-proposals/config/locales/no.yml
+++ b/decidim-proposals/config/locales/no.yml
@@ -166,7 +166,6 @@
proposal_wizard_step_1_help_text: Forslags veiviseren "Opprett" trinn-hjelpeteksten
proposal_wizard_step_2_help_text: Forslags veiviseren "Sammenlign" trinn-hjelpeteksten
proposal_wizard_step_3_help_text: Forslags veiviseren "Fullfør " trinn-hjelpeteksten
- proposal_wizard_step_4_help_text: Forslags veiviseren "Publiser" trinn-hjelpeteksten
resources_permissions_enabled: Handlings tillatelser kan settes for hvert forslag
scope_id: Tema
scopes_enabled: Aktiverte temaer
diff --git a/decidim-proposals/config/locales/pl.yml b/decidim-proposals/config/locales/pl.yml
index 8e10889d7add3..6c07b601825cd 100644
--- a/decidim-proposals/config/locales/pl.yml
+++ b/decidim-proposals/config/locales/pl.yml
@@ -38,12 +38,17 @@ pl:
origin_component_id: Komponent z którego kopiuję propozycję
proposals_import:
import_proposals: Importuj propozycje
+ keep_answers: Zachowaj stan i odpowiedzi
keep_authors: Zachowaj oryginalnych autorów
valuation_assignment:
admin_log:
valuator_role_id: Imię weryfikatora
errors:
models:
+ participatory_text:
+ attributes:
+ document:
+ allowed_file_content_types: 'Nieprawidłowy typ dokumentu. Dozwolone są tylko pliki z następującymi rozszerzeniami: %{types}'
proposal:
attributes:
add_documents:
@@ -59,9 +64,11 @@ pl:
attributes:
base:
not_official: Nieoficjalne
+ supported: Otrzymano wsparcie lub poparcie
proposals_split:
attributes:
base:
+ not_official: Nie są oficjalne
supported: Otrzymano wsparcie lub potwierdzenia
models:
decidim/proposals/accepted_proposal_event: Wniosek został przyjęty
@@ -148,6 +155,17 @@ pl:
collaborative_drafts_enabled: Zezwalaj na wspólne szkice
comments_enabled: Komentarze włączone
comments_max_length: Maksymalna długość komentarzy (Pozostaw 0 dla wartości domyślnej)
+ default_sort_order: Domyślne sortowanie propozycji
+ default_sort_order_help: Domyślnie oznacza, że jeśli wsparcie jest włączone, propozycje będą wyświetlane w kolejności losowej, a jeśli wsparcie jest zablokowane, zostaną posortowane według najbardziej popieranych.
+ default_sort_order_options:
+ default: Domyślne
+ most_commented: Najczęściej komentowane
+ most_endorsed: Najbardziej popierane
+ most_followed: Najczęściej obserwowane
+ most_voted: Najbardziej wspierane
+ random: Losowo
+ recent: Ostatnie
+ with_more_authors: Z większą liczbą autorów
geocoding_enabled: Włączono geokodowanie
minimum_votes_per_user: Minimalna liczba wsparć na użytkownika
new_proposal_body_template: Szablon treści nowej propozycji
@@ -167,7 +185,7 @@ pl:
proposal_wizard_step_1_help_text: 'Tekst pomocy Kreatora - krok: "Utwórz"'
proposal_wizard_step_2_help_text: 'Tekst pomocy Kreatora - krok: "Porównaj"'
proposal_wizard_step_3_help_text: 'Tekst pomocy Kreatora - krok: "Dokończ"'
- proposal_wizard_step_4_help_text: 'Tekst pomocy Kreatora - krok: "Publikuj"'
+ proposal_wizard_step_4_help_text: Tekst pomocy kroku „Opublikuj” kreatora propozycji
resources_permissions_enabled: Uprawnienia działań można ustawić dla każdej propozycji
scope_id: Zakres
scopes_enabled: Zakresy włączone
@@ -189,12 +207,16 @@ pl:
answers_with_costs: Zezwalaj na koszty w odpowiedziach na propozycje
automatic_hashtags: Hashtagi dodane do wszystkich propozycji
comments_blocked: Komentarze zablokowane
+ creation_enabled: Uczestnicy mogą tworzyć propozycje
+ creation_enabled_readonly: To ustawienie jest wyłączone, gdy aktywujesz funkcjonalność tekstów partycypacyjnych. Aby przesłać propozycje jako tekst partycypacyjny, kliknij przycisk "Tekst partycypacyjny" i postępuj zgodnie z instrukcjami.
+ default_sort_order: Domyślne sortowanie propozycji
default_sort_order_options:
most_voted: Najwiecej wsparć
endorsements_blocked: Rekomendacje zostały zablokowane
endorsements_enabled: Rekomendacje włączone
proposal_answering_enabled: Włączono odpowiadanie na propozycję
publish_answers_immediately: Natychmiast publikuj odpowiedzi na propozycje
+ publish_answers_immediately_help_html: 'Pamiętaj, że jeśli odpowiesz na dowolną propozycję bez włączonej tej opcji, musisz ją opublikować ręcznie, wybierając ją i korzystając z akcji do publikacji. Aby uzyskać więcej informacji na temat tego, jak to działa, zobacz stronę z dokumentacją odpowiedzi na propozycje.'
suggested_hashtags: Hashtagi sugerowane użytkownikom dodającym nowe propozycje
votes_blocked: Wspieranie zablokowane
votes_enabled: Wspieranie włączone
@@ -271,6 +293,8 @@ pl:
email_intro: Propozycja "%{resource_title}" została dodana do przestrzeni "%{participatory_space_title}", którą obserwujesz.
email_outro: Otrzymałeś to powiadomienie, ponieważ obserwujesz "%{participatory_space_title}". Aby przestać otrzymywać powiadomienia kliknij w powyższy link, a następnie na stronie kliknij w przycisk obserwowania.
email_subject: Nowa propozycja "%{resource_title}" została dodana do %{participatory_space_title}
+ notification_title: Propozycja %{resource_title} została dodana do %{participatory_space_title} przez %{author}
+ notification_title_official: Oficjalna propozycja %{resource_title} została dodana do %{participatory_space_title}
proposal_rejected:
affected_user:
email_intro: 'Twoja propozycja "%{resource_title}" została odrzucona. Możesz przeczytać odpowiedź na tej stronie:'
@@ -394,6 +418,7 @@ pl:
many: odpowiedzi na propozycję
other: odpowiedzi na propozycję
title:
+ answers: Importuj odpowiedzi do propozycji
proposals: Importuj propozycje
models:
proposal:
@@ -751,10 +776,15 @@ pl:
few: "%{count} propozycji"
many: "%{count} propozycji"
other: "%{count} propozycji"
+ dynamic_map_instructions:
+ description: Współrzędne zostaną zaktualizowane po kliknięciu przycisku 'podgląd'. Jednakże adres nie ulegnie zmianie.
+ instructions: Możesz przenieść punkt na mapie.
edit:
+ add_documents: Dodaj dokumenty
add_image: Dodaj obraz
attachment_legend: "(Opcjonalnie) Dodaj załącznik"
back: Wróć
+ edit_documents: Edytuj dokumenty
edit_image: Edytuj obraz
gallery_legend: "(Opcjonalnie) Dodaj obraz do karty propozycji"
select_a_category: Wybierz kategorię
@@ -784,9 +814,12 @@ pl:
filter_by: Filtruj według
unfold: Rozwiń
index:
+ click_here: Zobacz wszystkie propozycje
collaborative_drafts_list: Wspólne szkice
new_proposal: Nowa propozycja
+ see_all: Zobacz wszystkie propozycje
see_all_withdrawn: Zobacz wszystkie wycofane propozycje
+ text_banner: Oglądasz listę propozycji wycofanych przez ich autorów. %{go_back_link}.
view_proposal: Zobacz propozycję
linked_proposals:
proposal_votes:
@@ -796,6 +829,7 @@ pl:
other: wsparcia
new:
send: Dalej
+ title: Utwórz swoją propozycję
orders:
label: 'Sortuj propozycje według:'
most_commented: Najczęściej komentowane
@@ -806,6 +840,8 @@ pl:
recent: Najnowsze
with_more_authors: Z większą liczbą autorów
participatory_texts:
+ index:
+ document_index: Indeks dokumentu
view_index:
see_index: Zobacz indeks
placeholder:
@@ -944,3 +980,4 @@ pl:
statistics:
proposals_accepted: Przyjęte propozycje
proposals_count: Propozycje
+ supports_count: Głosy poparcia
diff --git a/decidim-proposals/config/locales/pt-BR.yml b/decidim-proposals/config/locales/pt-BR.yml
index d5fed22024ab3..8379f2d808e07 100644
--- a/decidim-proposals/config/locales/pt-BR.yml
+++ b/decidim-proposals/config/locales/pt-BR.yml
@@ -156,7 +156,6 @@ pt-BR:
proposal_wizard_step_1_help_text: Assistente de propostas "Criar" passo ajuda texto
proposal_wizard_step_2_help_text: Assistente de proposta "Comparar" passo ajuda texto
proposal_wizard_step_3_help_text: Texto de ajuda da etapa "Completa" do assistente de proposta
- proposal_wizard_step_4_help_text: Assistente de propostas "Publicar" passo ajuda texto
resources_permissions_enabled: Permissões de ações podem ser definidas para cada proposta
scope_id: Escopo
scopes_enabled: Escopos habilitados
diff --git a/decidim-proposals/config/locales/pt.yml b/decidim-proposals/config/locales/pt.yml
index 57c86f7c206ee..ab4cf2b770fd3 100644
--- a/decidim-proposals/config/locales/pt.yml
+++ b/decidim-proposals/config/locales/pt.yml
@@ -171,7 +171,6 @@ pt:
proposal_wizard_step_1_help_text: Texto de ajuda do passo "Criar" do Assistente de Propostas
proposal_wizard_step_2_help_text: Texto de ajuda do passo "Comparar" do Assistente de Propostas
proposal_wizard_step_3_help_text: Texto de ajuda do passo "Concluir" do Assistente de Propostas
- proposal_wizard_step_4_help_text: Texto de ajuda do passo "Publicar" do Assistente de Propostas
resources_permissions_enabled: As permissões de ações podem ser definidas para cada proposta
scope_id: Âmbito
scopes_enabled: Âmbitos activados
diff --git a/decidim-proposals/config/locales/ru.yml b/decidim-proposals/config/locales/ru.yml
index 8e000504b41db..d1b6e981b6f30 100644
--- a/decidim-proposals/config/locales/ru.yml
+++ b/decidim-proposals/config/locales/ru.yml
@@ -8,6 +8,7 @@ ru:
body: Основной текст
category_id: Категория
has_address: Имеет адрес
+ scope_id: Охват
state: Cостояние
title: Заголовок
user_group_id: Создать предложение в качестве
@@ -82,7 +83,6 @@ ru:
proposal_wizard_step_1_help_text: Справка мастера предложений о шаге "Создать"
proposal_wizard_step_2_help_text: Справка мастера предложений о шаге "Сравнить"
proposal_wizard_step_3_help_text: Справка мастера предложений о шаге "Завершить"
- proposal_wizard_step_4_help_text: Справка мастера предложений о шаге "Обнародовать"
resources_permissions_enabled: Для каждого предложения можно задать те или иные разрешения на действия
threshold_per_proposal: Порог для каждого предложения
vote_limit: Предельное количество голосов для одного участника
@@ -270,7 +270,6 @@ ru:
no_similars_found: Хорошая работа! Подобных предложений не найдено
title: Похожие предложения
complete:
- send: Отправить
title: Завершите свое предложение
edit:
attachment_legend: "(Необязательно) Добавить вложение"
@@ -284,6 +283,7 @@ ru:
send: Предпросмотр
title: Редактировать черновик предложения
filters:
+ all: Все
category: Категория
origin: Источник
related_to: Связано с
diff --git a/decidim-proposals/config/locales/sk.yml b/decidim-proposals/config/locales/sk.yml
index e024423eddc52..865f47da337b9 100644
--- a/decidim-proposals/config/locales/sk.yml
+++ b/decidim-proposals/config/locales/sk.yml
@@ -130,7 +130,6 @@ sk:
proposal_wizard_step_1_help_text: Pomocný text Sprievodcu "Vytvoriť" návrh
proposal_wizard_step_2_help_text: Pomocný text Sprievodcu "Porovnať" návrhu
proposal_wizard_step_3_help_text: Pomocný text Sprievodcu "Dokončiť" návrh
- proposal_wizard_step_4_help_text: Pomocný text Sprievodcu "Publikovať" návrh
resources_permissions_enabled: Pre každý návrh možno nastaviť povolenia akcie
threshold_per_proposal: Maximálny limit na návrh
vote_limit: Počet hlasov na užívateľa
diff --git a/decidim-proposals/config/locales/sv.yml b/decidim-proposals/config/locales/sv.yml
index 30a8e75da7a4b..448ebdc5438da 100644
--- a/decidim-proposals/config/locales/sv.yml
+++ b/decidim-proposals/config/locales/sv.yml
@@ -171,7 +171,6 @@ sv:
proposal_wizard_step_1_help_text: Hjälptext till steget "Skapa" i förslagsguiden
proposal_wizard_step_2_help_text: Hjälptext till steget "Jämför" i förslagsguiden
proposal_wizard_step_3_help_text: Hjälptext till steget "Komplettera" i förslagsguiden
- proposal_wizard_step_4_help_text: Förslagsguidens hjälptext för steg "Publicera"
resources_permissions_enabled: Åtgärdsbehörigheter kan ställas in för varje förslag
scope_id: Omfång
scopes_enabled: Omfång aktiverade
diff --git a/decidim-proposals/config/locales/tr-TR.yml b/decidim-proposals/config/locales/tr-TR.yml
index d7df8b6d4eeaa..fac609ae32a2c 100644
--- a/decidim-proposals/config/locales/tr-TR.yml
+++ b/decidim-proposals/config/locales/tr-TR.yml
@@ -143,7 +143,6 @@ tr:
proposal_wizard_step_1_help_text: Teklif sihirbazı "Oluştur" adımı yardım metni
proposal_wizard_step_2_help_text: Teklif sihirbazı "Karşılaştır" adımı yardım metni
proposal_wizard_step_3_help_text: Teklif sihirbazı "Tamamlandı" adımı yardım metni
- proposal_wizard_step_4_help_text: Teklif sihirbazı "Yayınla" adımı yardım metni
resources_permissions_enabled: Her teklif için işlem izinleri ayarlanabilir
scope_id: Kapsam
scopes_enabled: Kapsamlar etkinleştirildi
@@ -818,7 +817,7 @@ tr:
wizard_aside:
back: Geri
back_from_step_1: Teklifte geri dön
- back_from_step_2: Tekliflere geri dön
+ back_from_step_2: Teklifte geri dön
back_from_step_3: Teklifleri karşılaştırmaya geri dön
back_from_step_4: Taslağı düzenlemeye dön
info: teklif.
diff --git a/decidim-proposals/config/locales/uk.yml b/decidim-proposals/config/locales/uk.yml
index 7dec909722c6f..5c902a31d0367 100644
--- a/decidim-proposals/config/locales/uk.yml
+++ b/decidim-proposals/config/locales/uk.yml
@@ -8,6 +8,7 @@ uk:
body: Основний текст
category_id: Категорія
has_address: Має адресу
+ scope_id: Обсяг
state: Стан
title: Назва
user_group_id: Створити пропозицію як
@@ -82,7 +83,6 @@ uk:
proposal_wizard_step_1_help_text: Довідка майстра пропозицій щодо кроку "Створити"
proposal_wizard_step_2_help_text: Довідка майстра пропозицій щодо кроку "Порівняти"
proposal_wizard_step_3_help_text: Довідка майстра пропозицій щодо кроку "Завершити"
- proposal_wizard_step_4_help_text: Довідка майстра пропозицій щодо кроку "Оприлюднити"
resources_permissions_enabled: Для кожної пропозиції можна встановити ті чи інші дозволи на дії
threshold_per_proposal: Поріг на кожну пропозицію
vote_limit: Гранична кількість голосів від одного учасника
@@ -270,7 +270,6 @@ uk:
no_similars_found: Гарна робота! Не знайдено схожий пропозицій
title: Подібні пропозиції
complete:
- send: Надіслати
title: Завершіть свою пропозицію
edit:
attachment_legend: "(Необов'язково) Додати вкладений файл"
@@ -284,6 +283,7 @@ uk:
send: Попередній перегляд
title: Редагувати чернетку пропозиції
filters:
+ all: Усі
category: Категорія
origin: Джерело
related_to: Пов'язане з
diff --git a/decidim-proposals/config/locales/zh-CN.yml b/decidim-proposals/config/locales/zh-CN.yml
index 39c125b08106b..1105e7d9e4c2c 100644
--- a/decidim-proposals/config/locales/zh-CN.yml
+++ b/decidim-proposals/config/locales/zh-CN.yml
@@ -136,7 +136,6 @@ zh-CN:
proposal_wizard_step_1_help_text: 建议向导“创建”步骤帮助文本
proposal_wizard_step_2_help_text: 建议向导“Compare”步骤帮助文本
proposal_wizard_step_3_help_text: 建议向导“完成”步骤帮助文本
- proposal_wizard_step_4_help_text: 建议向导"发布"步骤帮助文本
resources_permissions_enabled: 每个提案都可以设置动作权限
scope_id: 范围
scopes_enabled: 范围已启用
diff --git a/decidim-proposals/config/locales/zh-TW.yml b/decidim-proposals/config/locales/zh-TW.yml
index 7ea2b862ef8b5..e96d58b33dec8 100644
--- a/decidim-proposals/config/locales/zh-TW.yml
+++ b/decidim-proposals/config/locales/zh-TW.yml
@@ -171,7 +171,6 @@ zh-TW:
proposal_wizard_step_1_help_text: 提案向導「創建」步驟說明文字
proposal_wizard_step_2_help_text: 提案向導「比較」步驟說明文字
proposal_wizard_step_3_help_text: 提案向導「完成」步驟說明文字
- proposal_wizard_step_4_help_text: 提案向導「發佈」步驟說明文字
resources_permissions_enabled: 每個提案都可以設定行動權限
scope_id: 範圍
scopes_enabled: 啟用範圍
diff --git a/decidim-proposals/db/migrate/20240404202756_add_valuation_assignments_count_to_decidim_proposals_proposals.rb b/decidim-proposals/db/migrate/20240404202756_add_valuation_assignments_count_to_decidim_proposals_proposals.rb
new file mode 100644
index 0000000000000..89c51425156da
--- /dev/null
+++ b/decidim-proposals/db/migrate/20240404202756_add_valuation_assignments_count_to_decidim_proposals_proposals.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddValuationAssignmentsCountToDecidimProposalsProposals < ActiveRecord::Migration[6.1]
+ def change
+ add_column :decidim_proposals_proposals, :valuation_assignments_count, :integer, default: 0
+
+ reversible do |dir|
+ dir.up do
+ Decidim::Proposals::Proposal.reset_column_information
+ Decidim::Proposals::Proposal.find_each do |record|
+ Decidim::Proposals::Proposal.reset_counters(record.id, :valuation_assignments)
+ end
+ end
+ end
+ end
+end
diff --git a/decidim-proposals/lib/decidim/proposals/test/factories.rb b/decidim-proposals/lib/decidim/proposals/test/factories.rb
index 50d9f6b07de1b..22d157105777f 100644
--- a/decidim-proposals/lib/decidim/proposals/test/factories.rb
+++ b/decidim-proposals/lib/decidim/proposals/test/factories.rb
@@ -6,10 +6,12 @@
FactoryBot.define do
factory :proposal_component, parent: :component do
- name { Decidim::Components::Namer.new(participatory_space.organization.available_locales, :proposals).i18n_name }
+ transient do
+ skip_injection { false }
+ end
+ name { generate_component_name(participatory_space.organization.available_locales, :proposals) }
manifest_name { :proposals }
- participatory_space { create(:participatory_process, :with_steps, organization: organization) }
-
+ participatory_space { create(:participatory_process, :with_steps, organization: organization, skip_injection: skip_injection) }
trait :with_endorsements_enabled do
step_settings do
{
@@ -250,28 +252,16 @@
skip_injection { false }
end
- title do
- if skip_injection
- Decidim::Faker::Localized.localized { generate(:title) }
- else
- Decidim::Faker::Localized.localized { " #{generate(:title)}" }
- end
- end
- body do
- if skip_injection
- Decidim::Faker::Localized.localized { Faker::Lorem.sentences(number: 3).join("\n") }
- else
- Decidim::Faker::Localized.localized { " #{Faker::Lorem.sentences(number: 3).join("\n")}" }
- end
- end
- component { create(:proposal_component) }
+ title { generate_localized_title(:proposal_title, skip_injection: skip_injection) }
+ body { generate_localized_description(:proposal_body, skip_injection: skip_injection) }
+ component { create(:proposal_component, skip_injection: skip_injection) }
published_at { Time.current }
address { "#{Faker::Address.street_name}, #{Faker::Address.city}" }
latitude { Faker::Address.latitude }
longitude { Faker::Address.longitude }
cost { 20_000 }
- cost_report { { en: "My cost report" } }
- execution_period { { en: "My execution period" } }
+ cost_report { generate_localized_title(:proposal_cost_report, skip_injection: skip_injection) }
+ execution_period { generate_localized_title(:proposal_execution_period, skip_injection: skip_injection) }
after(:build) do |proposal, evaluator|
proposal.title = if evaluator.title.is_a?(String)
@@ -289,7 +279,7 @@
proposal.body = Decidim::ContentProcessor.parse_with_processor(:hashtag, proposal.body, current_organization: proposal.organization).rewrite
if proposal.component
- users = evaluator.users || [create(:user, :confirmed, organization: proposal.component.participatory_space.organization)]
+ users = evaluator.users || [create(:user, :confirmed, organization: proposal.component.participatory_space.organization, skip_injection: evaluator.skip_injection)]
users.each_with_index do |user, idx|
user_group = evaluator.user_groups[idx]
proposal.coauthorships.build(author: user, user_group: user_group)
@@ -306,18 +296,18 @@
end
trait :participant_author do
- after :build do |proposal|
+ after :build do |proposal, evaluator|
proposal.coauthorships.clear
- user = build(:user, organization: proposal.component.participatory_space.organization)
+ user = build(:user, organization: proposal.component.participatory_space.organization, skip_injection: evaluator.skip_injection)
proposal.coauthorships.build(author: user)
end
end
trait :user_group_author do
- after :build do |proposal|
+ after :build do |proposal, evaluator|
proposal.coauthorships.clear
- user = create(:user, organization: proposal.component.participatory_space.organization)
- user_group = create(:user_group, :verified, organization: user.organization, users: [user])
+ user = create(:user, organization: proposal.component.participatory_space.organization, skip_injection: evaluator.skip_injection)
+ user_group = create(:user_group, :verified, organization: user.organization, users: [user], skip_injection: evaluator.skip_injection)
proposal.coauthorships.build(author: user, user_group: user_group)
end
end
@@ -330,10 +320,10 @@
end
trait :official_meeting do
- after :build do |proposal|
+ after :build do |proposal, evaluator|
proposal.coauthorships.clear
- component = build(:meeting_component, participatory_space: proposal.component.participatory_space)
- proposal.coauthorships.build(author: build(:meeting, component: component))
+ component = build(:meeting_component, participatory_space: proposal.component.participatory_space, skip_injection: evaluator.skip_injection)
+ proposal.coauthorships.build(author: build(:meeting, component: component, skip_injection: evaluator.skip_injection))
end
end
@@ -382,78 +372,89 @@
end
trait :hidden do
- after :create do |proposal|
- create(:moderation, hidden_at: Time.current, reportable: proposal)
+ after :create do |proposal, evaluator|
+ create(:moderation, hidden_at: Time.current, reportable: proposal, skip_injection: evaluator.skip_injection)
end
end
trait :with_votes do
- after :create do |proposal|
- create_list(:proposal_vote, 5, proposal: proposal)
+ after :create do |proposal, evaluator|
+ create_list(:proposal_vote, 5, proposal: proposal, skip_injection: evaluator.skip_injection)
end
end
trait :with_endorsements do
- after :create do |proposal|
+ after :create do |proposal, evaluator|
5.times.collect do
- create(:endorsement, resource: proposal, author: build(:user, organization: proposal.participatory_space.organization))
+ create(:endorsement, resource: proposal, skip_injection: evaluator.skip_injection,
+ author: build(:user, organization: proposal.participatory_space.organization, skip_injection: evaluator.skip_injection))
end
end
end
trait :with_amendments do
- after :create do |proposal|
- create_list(:proposal_amendment, 5, amendable: proposal)
+ after :create do |proposal, evaluator|
+ create_list(:proposal_amendment, 5, amendable: proposal, skip_injection: evaluator.skip_injection)
end
end
trait :with_photo do
- after :create do |proposal|
- proposal.attachments << create(:attachment, :with_image, attached_to: proposal)
+ after :create do |proposal, evaluator|
+ proposal.attachments << create(:attachment, :with_image, attached_to: proposal, skip_injection: evaluator.skip_injection)
end
end
trait :with_document do
- after :create do |proposal|
- proposal.attachments << create(:attachment, :with_pdf, attached_to: proposal)
+ after :create do |proposal, evaluator|
+ proposal.attachments << create(:attachment, :with_pdf, attached_to: proposal, skip_injection: evaluator.skip_injection)
end
end
end
factory :proposal_vote, class: "Decidim::Proposals::ProposalVote" do
- proposal { build(:proposal) }
- author { build(:user, organization: proposal.organization) }
+ transient do
+ skip_injection { false }
+ end
+ proposal { build(:proposal, skip_injection: skip_injection) }
+ author { build(:user, organization: proposal.organization, skip_injection: skip_injection) }
end
factory :proposal_amendment, class: "Decidim::Amendment" do
- amendable { build(:proposal) }
- emendation { build(:proposal, component: amendable.component) }
- amender { build(:user, organization: amendable.component.participatory_space.organization) }
+ transient do
+ skip_injection { false }
+ end
+ amendable { build(:proposal, skip_injection: skip_injection) }
+ emendation { build(:proposal, component: amendable.component, skip_injection: skip_injection) }
+ amender { build(:user, organization: amendable.component.participatory_space.organization, skip_injection: skip_injection) }
state { Decidim::Amendment::STATES.sample }
end
factory :proposal_note, class: "Decidim::Proposals::ProposalNote" do
+ transient do
+ skip_injection { false }
+ end
body { Faker::Lorem.sentences(number: 3).join("\n") }
- proposal { build(:proposal) }
- author { build(:user, organization: proposal.organization) }
+ proposal { build(:proposal, skip_injection: skip_injection) }
+ author { build(:user, organization: proposal.organization, skip_injection: skip_injection) }
end
factory :collaborative_draft, class: "Decidim::Proposals::CollaborativeDraft" do
transient do
users { nil }
+ skip_injection { false }
# user_groups correspondence to users is by sorting order
user_groups { [] }
end
- title { " #{generate(:title)}" }
- body { "\n#{Faker::Lorem.sentences(number: 3).join("\n")}" }
- component { create(:proposal_component) }
+ title { generate_localized_title(:collaborative_draft_title, skip_injection: skip_injection)["en"] }
+ body { generate_localized_description(:collaborative_draft_body, skip_injection: skip_injection)["en"] }
+ component { create(:proposal_component, skip_injection: skip_injection) }
address { "#{Faker::Address.street_name}, #{Faker::Address.city}" }
state { "open" }
after(:build) do |collaborative_draft, evaluator|
if collaborative_draft.component
- users = evaluator.users || [create(:user, organization: collaborative_draft.component.participatory_space.organization)]
+ users = evaluator.users || [create(:user, organization: collaborative_draft.component.participatory_space.organization, skip_injection: evaluator.skip_injection)]
users.each_with_index do |user, idx|
user_group = evaluator.user_groups[idx]
collaborative_draft.coauthorships.build(author: user, user_group: user_group)
@@ -476,17 +477,23 @@
end
factory :participatory_text, class: "Decidim::Proposals::ParticipatoryText" do
- title { { en: " #{generate(:title)}" } }
- description { { en: "\n#{Faker::Lorem.sentences(number: 3).join("\n")}" } }
- component { create(:proposal_component) }
+ transient do
+ skip_injection { false }
+ end
+ title { generate_localized_title(:participatory_text_title, skip_injection: skip_injection) }
+ description { generate_localized_description(:participatory_text_description, skip_injection: skip_injection) }
+ component { create(:proposal_component, skip_injection: skip_injection) }
end
factory :valuation_assignment, class: "Decidim::Proposals::ValuationAssignment" do
+ transient do
+ skip_injection { false }
+ end
proposal
valuator_role do
space = proposal.component.participatory_space
organization = space.organization
- build :participatory_process_user_role, role: :valuator, user: build(:user, organization: organization)
+ build :participatory_process_user_role, role: :valuator, skip_injection: skip_injection, user: build(:user, organization: organization, skip_injection: skip_injection)
end
end
end
diff --git a/decidim-proposals/lib/decidim/proposals/valuatable.rb b/decidim-proposals/lib/decidim/proposals/valuatable.rb
index 7471e3af2bf64..d1143621e4de4 100644
--- a/decidim-proposals/lib/decidim/proposals/valuatable.rb
+++ b/decidim-proposals/lib/decidim/proposals/valuatable.rb
@@ -8,7 +8,8 @@ module Valuatable
include Decidim::Comments::Commentable
included do
- has_many :valuation_assignments, foreign_key: "decidim_proposal_id", dependent: :destroy
+ has_many :valuation_assignments, foreign_key: "decidim_proposal_id", dependent: :destroy,
+ counter_cache: :valuation_assignments_count, class_name: "Decidim::Proposals::ValuationAssignment"
def valuators
valuator_role_ids = valuation_assignments.where(proposal: self).pluck(:valuator_role_id)
diff --git a/decidim-proposals/lib/decidim/proposals/version.rb b/decidim-proposals/lib/decidim/proposals/version.rb
index 44009dfd7a2f8..6ea553fee5dcd 100644
--- a/decidim-proposals/lib/decidim/proposals/version.rb
+++ b/decidim-proposals/lib/decidim/proposals/version.rb
@@ -4,7 +4,7 @@ module Decidim
# This holds decidim-proposals version.
module Proposals
def self.version
- "0.27.5"
+ "0.27.6"
end
end
end
diff --git a/decidim-proposals/spec/events/decidim/proposals/admin/update_proposal_category_event_spec.rb b/decidim-proposals/spec/events/decidim/proposals/admin/update_proposal_category_event_spec.rb
index 9a6d73ea84226..6c6e8215100e1 100644
--- a/decidim-proposals/spec/events/decidim/proposals/admin/update_proposal_category_event_spec.rb
+++ b/decidim-proposals/spec/events/decidim/proposals/admin/update_proposal_category_event_spec.rb
@@ -3,12 +3,12 @@
require "spec_helper"
describe Decidim::Proposals::Admin::UpdateProposalCategoryEvent do
- let(:resource) { create :proposal, title: "It's my super proposal" }
+ let(:resource) { create :proposal, title: "It is my super proposal" }
let(:event_name) { "decidim.events.proposals.proposal_update_category" }
let(:email_subject) { "The #{translated(resource.title)} proposal category has been updated" }
- let(:email_intro) { "An admin has updated the category of your proposal \"#{decidim_html_escape(translated(resource.title))}\", check it out in this page:" }
+ let(:email_intro) { "An admin has updated the category of your proposal \"#{resource_title}\", check it out in this page:" }
let(:email_outro) { "You have received this notification because you are the author of the proposal." }
- let(:notification_title) { "The #{decidim_html_escape(translated(resource.title))} proposal category has been updated by an admin." }
+ let(:notification_title) { "The #{resource_title} proposal category has been updated by an admin." }
include_context "when a simple event"
it_behaves_like "a simple event"
diff --git a/decidim-proposals/spec/events/decidim/proposals/admin/update_proposal_scope_event_spec.rb b/decidim-proposals/spec/events/decidim/proposals/admin/update_proposal_scope_event_spec.rb
index 82b6750c7a793..1249dfa9ec658 100644
--- a/decidim-proposals/spec/events/decidim/proposals/admin/update_proposal_scope_event_spec.rb
+++ b/decidim-proposals/spec/events/decidim/proposals/admin/update_proposal_scope_event_spec.rb
@@ -3,13 +3,12 @@
require "spec_helper"
describe Decidim::Proposals::Admin::UpdateProposalScopeEvent do
- let(:resource) { create :proposal, title: "It's my super proposal" }
- let(:resource_title) { translated(resource.title) }
+ let(:resource) { create :proposal, title: "It is my super proposal" }
let(:event_name) { "decidim.events.proposals.proposal_update_scope" }
- let(:email_subject) { "The #{decidim_sanitize(resource_title)} proposal scope has been updated" }
- let(:email_intro) { "An admin has updated the scope of your proposal \"#{decidim_html_escape(resource_title)}\", check it out in this page:" }
+ let(:email_subject) { "The #{resource_title} proposal scope has been updated" }
+ let(:email_intro) { "An admin has updated the scope of your proposal \"#{resource_title}\", check it out in this page:" }
let(:email_outro) { "You have received this notification because you are the author of the proposal." }
- let(:notification_title) { "The #{decidim_html_escape(resource_title)} proposal scope has been updated by an admin." }
+ let(:notification_title) { "The #{resource_title} proposal scope has been updated by an admin." }
include_context "when a simple event"
it_behaves_like "a simple event"
diff --git a/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_access_accepted_event_spec.rb b/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_access_accepted_event_spec.rb
index 1cc2e492aa27a..ec4692765ea34 100644
--- a/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_access_accepted_event_spec.rb
+++ b/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_access_accepted_event_spec.rb
@@ -6,7 +6,7 @@
include_context "when a simple event"
let(:event_name) { "decidim.events.proposals.collaborative_draft_access_accepted" }
- let(:resource) { create :collaborative_draft, title: "It's my collaborative draft" }
+ let(:resource) { create :collaborative_draft, title: "It is my collaborative draft" }
let(:resource_path) { Decidim::ResourceLocatorPresenter.new(resource).path }
let(:resource_title) { resource.title }
let(:author) { resource.authors.first }
@@ -25,9 +25,9 @@
context "when the notification is for coauthor users" do
let(:email_subject) { "#{requester_name} has been accepted to access as a contributor of the #{resource_title}." }
- let(:email_intro) { %(#{requester_name} has been accepted to access as a contributor of the #{decidim_html_escape(resource_title)} collaborative draft.) }
- let(:email_outro) { %(You have received this notification because you are a collaborator of #{decidim_html_escape(resource_title)}.) }
- let(:notification_title) { %(#{requester_name} #{requester_nickname} has been accepted to access as a contributor of the #{decidim_html_escape(resource_title)} collaborative draft.) }
+ let(:email_intro) { %(#{requester_name} has been accepted to access as a contributor of the #{resource_title} collaborative draft.) }
+ let(:email_outro) { %(You have received this notification because you are a collaborator of #{resource_title}.) }
+ let(:notification_title) { %(#{requester_name} #{requester_nickname} has been accepted to access as a contributor of the #{resource_title} collaborative draft.) }
it_behaves_like "a simple event"
it_behaves_like "a simple event email"
@@ -37,9 +37,9 @@
context "when the notification is for the requester" do
let(:event_name) { "decidim.events.proposals.collaborative_draft_access_requester_accepted" }
let(:email_subject) { "You have been accepted as a contributor of #{resource_title}." }
- let(:email_intro) { %(You have been accepted to access as a contributor of the #{decidim_html_escape(resource_title)} collaborative draft.) }
- let(:email_outro) { %(You have received this notification because you requested to become a collaborator of #{decidim_html_escape(resource_title)}.) }
- let(:notification_title) { %(You have been accepted to access as a contributor of the #{decidim_html_escape(resource_title)} collaborative draft.) }
+ let(:email_intro) { %(You have been accepted to access as a contributor of the #{resource_title} collaborative draft.) }
+ let(:email_outro) { %(You have received this notification because you requested to become a collaborator of #{resource_title}.) }
+ let(:notification_title) { %(You have been accepted to access as a contributor of the #{resource_title} collaborative draft.) }
it_behaves_like "a simple event"
it_behaves_like "a simple event email"
diff --git a/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_access_rejected_event_spec.rb b/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_access_rejected_event_spec.rb
index 3eaed1d779adb..ded9da11f5795 100644
--- a/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_access_rejected_event_spec.rb
+++ b/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_access_rejected_event_spec.rb
@@ -6,9 +6,8 @@
include_context "when a simple event"
let(:event_name) { "decidim.events.proposals.collaborative_draft_access_rejected" }
- let(:resource) { create :collaborative_draft, title: "It's my collaborative draft" }
+ let(:resource) { create :collaborative_draft, title: "It is my collaborative draft" }
let(:resource_path) { Decidim::ResourceLocatorPresenter.new(resource).path }
- let(:resource_title) { decidim_html_escape(resource.title) }
let(:author) { resource.authors.first }
let(:author_id) { author.id }
let(:author_presenter) { Decidim::UserPresenter.new(author) }
@@ -24,7 +23,7 @@
let(:extra) { { requester_id: requester_id } }
context "when the notification is for coauthor users" do
- let(:email_subject) { "#{requester_name} has been rejected to access as a contributor of the #{translated(resource.title)} collaborative draft." }
+ let(:email_subject) { "#{requester_name} has been rejected to access as a contributor of the #{resource_title} collaborative draft." }
let(:email_intro) { %(#{requester_name} has been rejected to access as a contributor of the #{resource_title} collaborative draft.) }
let(:email_outro) { %(You have received this notification because you are a collaborator of #{resource_title}.) }
let(:notification_title) { %(#{requester_name} #{requester_nickname} has been rejected to access as a contributor of the #{resource_title} collaborative draft.) }
@@ -36,7 +35,7 @@
context "when the notification is for the requester" do
let(:event_name) { "decidim.events.proposals.collaborative_draft_access_requester_rejected" }
- let(:email_subject) { "You have been rejected as a contributor of #{translated(resource.title)}." }
+ let(:email_subject) { "You have been rejected as a contributor of #{resource_title}." }
let(:email_intro) { %(You have been rejected to access as a contributor of the #{resource_title} collaborative draft.) }
let(:email_outro) { %(You have received this notification because you requested to become a collaborator of #{resource_title}.) }
let(:notification_title) { %(You have been rejected to access as a contributor of the #{resource_title} collaborative draft.) }
diff --git a/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_access_requested_event_spec.rb b/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_access_requested_event_spec.rb
index 2227a8c374733..9c4cf31899f19 100644
--- a/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_access_requested_event_spec.rb
+++ b/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_access_requested_event_spec.rb
@@ -6,7 +6,7 @@
include_context "when a simple event"
let(:event_name) { "decidim.events.proposals.collaborative_draft_access_requested" }
- let(:resource) { create :collaborative_draft, title: "It's my collaborative draft" }
+ let(:resource) { create :collaborative_draft, title: "It is my collaborative draft" }
let(:resource_path) { Decidim::ResourceLocatorPresenter.new(resource).path }
let(:resource_title) { resource.title }
let(:author) { resource.authors.first }
@@ -24,9 +24,9 @@
let(:extra) { { requester_id: requester_id } }
context "when the notification is for coauthor users" do
- let(:notification_title) { %(#{requester_name} #{requester_nickname} requested access to contribute to the #{decidim_html_escape(resource_title)} collaborative draft. Please accept or reject the request.) }
- let(:email_outro) { %(You have received this notification because you are a collaborator of #{decidim_html_escape(resource_title)}.) }
- let(:email_intro) { %(#{requester_name} requested access as a contributor. You can accept or reject the request from the #{decidim_html_escape(resource_title)} collaborative draft page.) }
+ let(:notification_title) { %(#{requester_name} #{requester_nickname} requested access to contribute to the #{resource_title} collaborative draft. Please accept or reject the request.) }
+ let(:email_outro) { %(You have received this notification because you are a collaborator of #{resource_title}.) }
+ let(:email_intro) { %(#{requester_name} requested access as a contributor. You can accept or reject the request from the #{resource_title} collaborative draft page.) }
let(:email_subject) { "#{requester_name} requested access to contribute to #{resource_title}." }
it_behaves_like "a simple event"
diff --git a/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_withdrawn_event_spec.rb b/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_withdrawn_event_spec.rb
index 5cf781a1442df..f20d879392abe 100644
--- a/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_withdrawn_event_spec.rb
+++ b/decidim-proposals/spec/events/decidim/proposals/collaborative_draft_withdrawn_event_spec.rb
@@ -6,9 +6,8 @@
include_context "when a simple event"
let(:event_name) { "decidim.events.proposals.collaborative_draft_withdrawn" }
- let(:resource) { create :collaborative_draft, title: "It's my collaborative draft" }
+ let(:resource) { create :collaborative_draft, title: "It is my collaborative draft" }
let(:resource_path) { Decidim::ResourceLocatorPresenter.new(resource).path }
- let(:resource_title) { decidim_html_escape(resource.title) }
let(:author) { resource.authors.first }
let(:author_id) { author.id }
let(:author_presenter) { Decidim::UserPresenter.new(author) }
@@ -22,7 +21,7 @@
let(:notification_title) { %(#{author_name} #{author_nickname} withdrawn the #{resource_title} collaborative draft.) }
let(:email_outro) { %(You have received this notification because you are a collaborator of #{resource_title}.) }
let(:email_intro) { %(#{author_name} #{author_nickname} withdrawn the #{resource_title} collaborative draft.) }
- let(:email_subject) { "#{author_name} #{author_nickname} withdrawn the #{decidim_sanitize(resource_title)} collaborative draft." }
+ let(:email_subject) { "#{author_name} #{author_nickname} withdrawn the #{resource_title} collaborative draft." }
it_behaves_like "a simple event"
it_behaves_like "a simple event email"
diff --git a/decidim-proposals/spec/events/decidim/proposals/creation_enabled_event_spec.rb b/decidim-proposals/spec/events/decidim/proposals/creation_enabled_event_spec.rb
index 3218dbaca7157..e6b2f98ae9b51 100644
--- a/decidim-proposals/spec/events/decidim/proposals/creation_enabled_event_spec.rb
+++ b/decidim-proposals/spec/events/decidim/proposals/creation_enabled_event_spec.rb
@@ -11,12 +11,11 @@ module Proposals
let(:event_name) { "decidim.events.proposals.creation_enabled" }
let(:resource) { create(:proposal_component) }
- let(:participatory_space) { resource.participatory_space }
let(:resource_path) { main_component_path(resource) }
- let(:email_subject) { "Proposals now available in #{participatory_space.title["en"]}" }
+ let(:email_subject) { "Proposals now available in #{participatory_space_title}" }
let(:email_intro) { "You can now create new proposals in #{participatory_space_title}! Start participating in this page:" }
- let(:email_outro) { "You have received this notification because you are following #{participatory_space.title["en"]}. You can stop receiving notifications following the previous link." }
- let(:notification_title) { "You can now put forward new proposals in #{participatory_space.title["en"]}" }
+ let(:email_outro) { "You have received this notification because you are following #{participatory_space_title}. You can stop receiving notifications following the previous link." }
+ let(:notification_title) { "You can now put forward new proposals in #{participatory_space_title}" }
it_behaves_like "a simple event"
it_behaves_like "a simple event email"
diff --git a/decidim-proposals/spec/events/decidim/proposals/endorsing_enabled_event_spec.rb b/decidim-proposals/spec/events/decidim/proposals/endorsing_enabled_event_spec.rb
index eef00726375bf..9465e4fb279e6 100644
--- a/decidim-proposals/spec/events/decidim/proposals/endorsing_enabled_event_spec.rb
+++ b/decidim-proposals/spec/events/decidim/proposals/endorsing_enabled_event_spec.rb
@@ -13,10 +13,10 @@ module Proposals
let(:resource) { create(:proposal_component) }
let(:participatory_space) { resource.participatory_space }
let(:resource_path) { main_component_path(resource) }
- let(:email_subject) { "Proposals endorsing has started for #{participatory_space.title["en"]}" }
+ let(:email_subject) { "Proposals endorsing has started for #{participatory_space_title}" }
let(:email_intro) { "You can endorse proposals in #{participatory_space_title}! Start participating in this page:" }
- let(:email_outro) { "You have received this notification because you are following #{participatory_space.title["en"]}. You can stop receiving notifications following the previous link." }
- let(:notification_title) { "You can now start endorsing proposals in #{participatory_space.title["en"]}" }
+ let(:email_outro) { "You have received this notification because you are following #{participatory_space_title}. You can stop receiving notifications following the previous link." }
+ let(:notification_title) { "You can now start endorsing proposals in #{participatory_space_title}" }
it_behaves_like "a simple event"
it_behaves_like "a simple event email"
diff --git a/decidim-proposals/spec/events/decidim/proposals/proposal_mentioned_event_spec.rb b/decidim-proposals/spec/events/decidim/proposals/proposal_mentioned_event_spec.rb
index 956b682ea2f40..21742a006be1e 100644
--- a/decidim-proposals/spec/events/decidim/proposals/proposal_mentioned_event_spec.rb
+++ b/decidim-proposals/spec/events/decidim/proposals/proposal_mentioned_event_spec.rb
@@ -34,13 +34,13 @@
describe "email_subject" do
it "is generated correctly" do
- expect(subject.email_subject).to eq("Your proposal \"#{decidim_sanitize(translated(mentioned_proposal.title))}\" has been mentioned")
+ expect(subject.email_subject).to eq("Your proposal \"#{decidim_sanitize_translated(mentioned_proposal.title)}\" has been mentioned")
end
end
context "with content" do
let(:content) do
- "Your proposal \"#{decidim_html_escape(translated(mentioned_proposal.title))}\" has been mentioned " \
+ "Your proposal \"#{decidim_sanitize_translated(mentioned_proposal.title)}\" has been mentioned " \
"in this space in the comments."
end
diff --git a/decidim-proposals/spec/events/decidim/proposals/publish_proposal_event_spec.rb b/decidim-proposals/spec/events/decidim/proposals/publish_proposal_event_spec.rb
index cd49a7fe6d62f..de56606b01273 100644
--- a/decidim-proposals/spec/events/decidim/proposals/publish_proposal_event_spec.rb
+++ b/decidim-proposals/spec/events/decidim/proposals/publish_proposal_event_spec.rb
@@ -5,10 +5,10 @@
module Decidim
module Proposals
describe PublishProposalEvent do
- let(:resource) { create :proposal, title: "A nice proposal" }
+ let(:resource) { create :proposal }
let(:participatory_process) { create :participatory_process, organization: organization }
let(:proposal_component) { create(:proposal_component, participatory_space: participatory_process) }
- let(:resource_title) { translated(resource.title) }
+ let(:resource_title) { decidim_sanitize_translated(resource.title) }
let(:event_name) { "decidim.events.proposals.proposal_published" }
include_context "when a simple event"
@@ -23,7 +23,7 @@ module Proposals
describe "email_subject" do
context "when resource title contains apostrophes" do
- let(:resource) { create :proposal, title: "It's a nice proposal" }
+ let(:resource) { create :proposal }
it "is generated correctly" do
expect(subject.email_subject).to eq("New proposal \"#{resource_title}\" by @#{author.nickname}")
@@ -60,7 +60,7 @@ module Proposals
end
context "when the proposal is official" do
- let(:resource) { create :proposal, :official, title: "A nice proposal" }
+ let(:resource) { create :proposal, :official }
let(:extra) { { participatory_space: resource.participatory_space } }
describe "notification_title" do
@@ -72,14 +72,15 @@ module Proposals
end
context "when the target are the participatory space followers" do
+ include_context "when a simple event"
+
let(:event_name) { "decidim.events.proposals.proposal_published_for_space" }
- let(:notification_title) { "The proposal A nice proposal has been added to #{participatory_space_title} by #{author.name} @#{author.nickname}" }
+ let(:notification_title) { "The proposal #{resource_title} has been added to #{participatory_space_title} by #{author.name} @#{author.nickname}" }
let(:email_outro) { "You have received this notification because you are following \"#{participatory_space_title}\". You can stop receiving notifications following the previous link." }
- let(:email_intro) { "The proposal \"A nice proposal\" has been added to \"#{participatory_space_title}\" that you are following." }
+ let(:email_intro) { "The proposal \"#{resource_title}\" has been added to \"#{participatory_space_title}\" that you are following." }
let(:email_subject) { "New proposal \"#{resource_title}\" added to #{participatory_space_title}" }
let(:extra) { { participatory_space: true } }
- include_context "when a simple event"
it_behaves_like "a simple event"
it_behaves_like "a simple event email"
it_behaves_like "a simple event notification"
diff --git a/decidim-proposals/spec/events/decidim/proposals/rejected_proposal_event_spec.rb b/decidim-proposals/spec/events/decidim/proposals/rejected_proposal_event_spec.rb
index 38628bdb0e41b..32f9c2280e5eb 100644
--- a/decidim-proposals/spec/events/decidim/proposals/rejected_proposal_event_spec.rb
+++ b/decidim-proposals/spec/events/decidim/proposals/rejected_proposal_event_spec.rb
@@ -4,12 +4,11 @@
describe Decidim::Proposals::RejectedProposalEvent do
let(:resource) { create :proposal, :with_answer, title: "It's my super proposal" }
- let(:resource_title) { translated(resource.title) }
let(:event_name) { "decidim.events.proposals.proposal_rejected" }
let(:email_subject) { "A proposal you're following has been rejected" }
- let(:email_intro) { "The proposal \"#{decidim_html_escape(resource_title)}\" has been rejected. You can read the answer in this page:" }
- let(:email_outro) { "You have received this notification because you are following \"#{decidim_html_escape(resource_title)}\". You can unfollow it from the previous link." }
- let(:notification_title) { "The #{decidim_html_escape(resource_title)} proposal has been rejected." }
+ let(:email_intro) { "The proposal \"#{resource_title}\" has been rejected. You can read the answer in this page:" }
+ let(:email_outro) { "You have received this notification because you are following \"#{resource_title}\". You can unfollow it from the previous link." }
+ let(:notification_title) { "The #{resource_title} proposal has been rejected." }
let(:resource_text) { translated(resource.answer) }
include_context "when a simple event"
diff --git a/decidim-proposals/spec/events/decidim/proposals/voting_enabled_event_spec.rb b/decidim-proposals/spec/events/decidim/proposals/voting_enabled_event_spec.rb
index 528191a1e40ee..8684308b6ee80 100644
--- a/decidim-proposals/spec/events/decidim/proposals/voting_enabled_event_spec.rb
+++ b/decidim-proposals/spec/events/decidim/proposals/voting_enabled_event_spec.rb
@@ -10,10 +10,10 @@ module Proposals
include_context "when a simple event"
let(:event_name) { "decidim.events.proposals.voting_enabled" }
- let(:email_subject) { "Proposal support has started for #{participatory_space.title["en"]}" }
+ let(:email_subject) { "Proposal support has started for #{participatory_space_title}" }
let(:email_intro) { "You can support proposals in #{participatory_space_title}! Start participating in this page:" }
- let(:email_outro) { "You have received this notification because you are following #{participatory_space.title["en"]}. You can stop receiving notifications following the previous link." }
- let(:notification_title) { "You can now start supporting proposals in #{participatory_space.title["en"]}" }
+ let(:email_outro) { "You have received this notification because you are following #{participatory_space_title}. You can stop receiving notifications following the previous link." }
+ let(:notification_title) { "You can now start supporting proposals in #{participatory_space_title}" }
let(:resource) { create(:proposal_component) }
let(:participatory_space) { resource.participatory_space }
let(:resource_path) { main_component_path(resource) }
diff --git a/decidim-proposals/spec/shared/manage_proposals_examples.rb b/decidim-proposals/spec/shared/manage_proposals_examples.rb
index f480563d31858..c8933e190f65a 100644
--- a/decidim-proposals/spec/shared/manage_proposals_examples.rb
+++ b/decidim-proposals/spec/shared/manage_proposals_examples.rb
@@ -354,8 +354,8 @@
end
proposal.reload
- expect(proposal.answered_at).to be_within(2.seconds).of Time.zone.now
- expect(proposal.state_published_at).to be_within(2.seconds).of Time.zone.now
+ expect(proposal.answered_at).to be_within(5.seconds).of Time.zone.now
+ expect(proposal.state_published_at).to be_within(5.seconds).of Time.zone.now
end
it "can accept a proposal" do
@@ -373,8 +373,8 @@
end
proposal.reload
- expect(proposal.answered_at).to be_within(2.seconds).of Time.zone.now
- expect(proposal.state_published_at).to be_within(2.seconds).of Time.zone.now
+ expect(proposal.answered_at).to be_within(5.seconds).of Time.zone.now
+ expect(proposal.state_published_at).to be_within(5.seconds).of Time.zone.now
end
it "can mark a proposal as evaluating" do
@@ -392,8 +392,8 @@
end
proposal.reload
- expect(proposal.answered_at).to be_within(2.seconds).of Time.zone.now
- expect(proposal.state_published_at).to be_within(2.seconds).of Time.zone.now
+ expect(proposal.answered_at).to be_within(5.seconds).of Time.zone.now
+ expect(proposal.state_published_at).to be_within(5.seconds).of Time.zone.now
end
it "can mark a proposal as 'not answered'" do
@@ -452,7 +452,7 @@
end
proposal.reload
- expect(proposal.answered_at).to be_within(2.seconds).of Time.zone.now
+ expect(proposal.answered_at).to be_within(5.seconds).of Time.zone.now
end
end
diff --git a/decidim-proposals/spec/system/amendable/amend_proposal_spec.rb b/decidim-proposals/spec/system/amendable/amend_proposal_spec.rb
index 7d46d2ac3f48f..9fe0637c5cf4f 100644
--- a/decidim-proposals/spec/system/amendable/amend_proposal_spec.rb
+++ b/decidim-proposals/spec/system/amendable/amend_proposal_spec.rb
@@ -245,6 +245,10 @@
context "when the form is filled correctly" do
before do
+ login_as user, scope: :user
+ visit proposal_path
+ expect(page).to have_content(proposal_title)
+ click_link "Amend Proposal"
within ".new_amendment" do
fill_in "amendment[emendation_params][title]", with: "More sidewalks and less roads"
fill_in "amendment[emendation_params][body]", with: "Cities need more people, not more cars"
@@ -260,6 +264,10 @@
context "when the form is filled incorrectly" do
before do
+ login_as user, scope: :user
+ visit proposal_path
+ expect(page).to have_content(proposal_title)
+ click_link "Amend Proposal"
within ".new_amendment" do
fill_in "amendment[emendation_params][title]", with: "INVALID TITLE"
end
diff --git a/decidim-proposals/spec/system/collaborative_drafts_spec.rb b/decidim-proposals/spec/system/collaborative_drafts_spec.rb
index 325f7094a0542..f46fbbe7c9d45 100644
--- a/decidim-proposals/spec/system/collaborative_drafts_spec.rb
+++ b/decidim-proposals/spec/system/collaborative_drafts_spec.rb
@@ -91,7 +91,7 @@
end
let(:html_body) { strip_tags(collaborative_draft.body).gsub(/\n/, " ").strip }
- let(:stripped_body) { %(alert("BODY"); #{html_body}) }
+ let(:stripped_body) { %(alert("collaborative_draft_body"); #{html_body}) }
it "shows the title" do
expect(page).to have_content(collaborative_draft.title)
diff --git a/decidim-proposals/spec/system/proposals_spec.rb b/decidim-proposals/spec/system/proposals_spec.rb
index be910b1e9adde..fa43fd163a701 100644
--- a/decidim-proposals/spec/system/proposals_spec.rb
+++ b/decidim-proposals/spec/system/proposals_spec.rb
@@ -154,7 +154,7 @@
end
it "shows the author as meeting" do
- expect(page).to have_content(translated(proposal.authors.first.title))
+ expect(page).to have_content(decidim_sanitize_translated(proposal.authors.first.title))
end
it_behaves_like "rendering safe content", ".columns.mediumlarge-8.large-9"
@@ -494,6 +494,7 @@
let!(:component) do
create(:proposal_component,
:with_votes_disabled,
+ :with_proposal_limit,
manifest: manifest,
participatory_space: participatory_process)
end
diff --git a/decidim-proposals/spec/system/vote_proposal_spec.rb b/decidim-proposals/spec/system/vote_proposal_spec.rb
index 706eb61487a77..59b3b30a29f72 100644
--- a/decidim-proposals/spec/system/vote_proposal_spec.rb
+++ b/decidim-proposals/spec/system/vote_proposal_spec.rb
@@ -140,6 +140,9 @@ def expect_page_not_to_include_votes
end
describe "vote counter" do
+ let(:proposals) { create_list(:proposal, 2, component: component) }
+ let(:proposal_title) { translated(proposals.first.title) }
+
context "when votes are blocked" do
let!(:component) do
create(:proposal_component,
@@ -153,7 +156,12 @@ def expect_page_not_to_include_votes
it "doesn't show the remaining votes counter" do
visit_component
- expect(page).to have_css(".voting-rules")
+ expect(page).to have_no_css(".voting-rules")
+ expect(page).to have_no_css(".remaining-votes-counter")
+
+ click_on proposal_title
+
+ expect(page).to have_no_css(".voting-rules")
expect(page).to have_no_css(".remaining-votes-counter")
end
end
@@ -173,6 +181,34 @@ def expect_page_not_to_include_votes
expect(page).to have_css(".voting-rules")
expect(page).to have_css(".remaining-votes-counter")
+
+ click_on proposal_title
+
+ expect(page).to have_css(".voting-rules")
+ expect(page).to have_css(".remaining-votes-counter")
+ end
+ end
+
+ context "when votes are disabled" do
+ let!(:component) do
+ create(:proposal_component,
+ :with_votes_disabled,
+ :with_vote_limit,
+ vote_limit: vote_limit,
+ manifest: manifest,
+ participatory_space: participatory_process)
+ end
+
+ it "does not show the remaining votes counter" do
+ visit_component
+
+ expect(page).to have_no_css(".voting-rules")
+ expect(page).to have_no_css(".remaining-votes-counter")
+
+ click_on proposal_title
+
+ expect(page).to have_no_css(".voting-rules")
+ expect(page).to have_no_css(".remaining-votes-counter")
end
end
end
diff --git a/decidim-sortitions/config/locales/bg.yml b/decidim-sortitions/config/locales/bg.yml
index 0185d5de17008..ef7ef0a7a7edd 100644
--- a/decidim-sortitions/config/locales/bg.yml
+++ b/decidim-sortitions/config/locales/bg.yml
@@ -3,6 +3,149 @@ bg:
activemodel:
attributes:
sortition:
- additional_info: Сортиране на информация
+ additional_info: Информация за сортировката
decidim_category_id: Категории от набора от предложения, в които искате да приложите жребий
decidim_proposals_component_id: Предложенията са зададени
+ dice: Резултат от хвърлянето на зара. Хвърлете 6-странен зар или потърсете друг произволен начин за генериране на число от 1 до 6 и въведете тук полученото число пред няколко свидетели. Това допринася за качеството и гаранции за случайността на резултата
+ target_items: Брой на предложенията, които да бъдат избрани (указва броя на предложенията, които искате да бъдат избрани чрез хвърляне на жребий от групата предложения, които сте избрали по-рано)
+ title: Заглавие
+ witnesses: Свидетели
+ models:
+ decidim/sortitions/create_sortition_event: Сортиране
+ activerecord:
+ models:
+ decidim/sortitions/sortition:
+ one: Сортиране
+ other: Сортирания
+ decidim:
+ components:
+ sortitions:
+ actions:
+ comment: Коментар
+ name: Сортирания
+ settings:
+ global:
+ comments_enabled: Коментарите са разрешени
+ comments_max_length: Максимална дължина на коментарите (Оставете 0 за стойност по подразбиране)
+ events:
+ sortitions:
+ sortition_created:
+ email_intro: Сортировката „%{resource_title}“ беше добавена към пространството за участие „%{participatory_space_title}“, което следвате.
+ email_outro: Получавате това известие, защото следвате "%{participatory_space_title}". Може да премахнете следването чрез предходния линк.
+ email_subject: Беше добавена нова сортировка в(ъв) %{participatory_space_title}
+ notification_title: Сортировката %{resource_title} беше добавена в(ъв) %{participatory_space_title}
+ sortitions:
+ admin:
+ actions:
+ destroy: Отмяна на сортировката
+ edit: Редактирай
+ new: Нова сортировка
+ show: Детайли за сортировката
+ models:
+ sortition:
+ fields:
+ category: Категория
+ created_at: Дата на създаване
+ decidim_proposals_component: Компонент Предложения
+ dice: Зар
+ reference: Препоръка
+ request_timestamp: Време за теглене на жребий
+ seed: Seed
+ target_items: Елементи за селектиране
+ title: Заглавие
+ name:
+ one: Сортиране
+ other: Сортирания
+ sortitions:
+ confirm_destroy:
+ confirm_destroy: Наистина ли искате да отмените тази сортировка?
+ destroy: Отмяна на сортировка
+ title: Отменяне на сортировката
+ create:
+ error: Възникна проблем при създаването на нова сортировка.
+ success: Жребият беше създаден успешно
+ destroy:
+ error: Жребият не може да се отмени.
+ success: Жребият беше отменен успешно
+ edit:
+ title: Актуализирайте информацията за сортировката
+ update: Актуализация
+ form:
+ all_categories: Всички категории
+ select_proposal_component: Изберете набора от предложения
+ title: Нов жребий за предложения
+ index:
+ title: Сортировки
+ new:
+ confirm: Когато натиснете бутона „Напред“, системата ще запише датата и часа (с точност до секунди) и заедно с хвърлянето на зара тази информация ще се използва за генериране на избор на случаен принцип. Действието няма да може да бъде отменено — когато щракнете върху бутона, резултатът от жребия ще бъде публикуван заедно с въведените в този формуляр данни и няма да подлежи на промяна. Моля, прегледайте съдържанието внимателно
+ create: Създаване
+ title: Нова сортировка
+ show:
+ selected_proposals: Избрани предложения за жребия
+ update:
+ error: Възникна проблем при актуализирането на сортировката.
+ success: Жребият беше актуализиран успешно
+ admin_log:
+ sortition:
+ create: "%{user_name} създаде сортировка %{resource_name} в пространството %{space_name}"
+ delete: "%{user_name} отмени сортировката %{resource_name} в пространството %{space_name}"
+ update: "%{user_name} актуализира сортировката %{resource_name} в пространството %{space_name}"
+ sortitions:
+ count:
+ proposals_count:
+ one: 1 предложение
+ other: "%{count} предложения"
+ filters:
+ active: Активно
+ all: Всички
+ cancelled: Отменено
+ category: Категория
+ category_prompt: Изберете категория
+ search: Търсене
+ state: Статус
+ filters_small_view:
+ close_modal: Затвори прозореца
+ filter: Филтър
+ filter_by: Филтрирай по
+ unfold: Разгъване
+ linked_sortitions:
+ selected_proposals: Избрани предложения
+ orders:
+ label: 'Подреждане на сортировките по:'
+ random: Случаен
+ recent: Скорошни
+ results_count:
+ count:
+ one: избрано предложение
+ other: избрани предложения
+ show:
+ algorithm: Код на алгоритъма за жребия в сортировката
+ any_category: от всички категории
+ back: Назад към списъка
+ cancelled: Отменена сортировка
+ candidate_proposal_ids: Ред и ID номерата на предложенията в сортировката
+ candidate_proposals_info: 'Сортирането беше извършено сред следните предложения (%{category_label}), със следните идентификатори (с удебелен шрифт избраните предложения) '
+ category: от категорията %{category}
+ dice_result: "(1) Резултат от жребия"
+ introduction: 'Тази страница съдържа резултатите от сортирането %{reference}. Чрез това сортиране, %{target_items} брой резултати са избрани на случаен принцип и с равно вероятностно разпределение от набора от предложения, показани по-долу. Заедно с резултатите, информацията, показана на тази страница, предоставя цялата информация, необходима за максимизиране на гаранциите и за възпроизвеждане на резултатите. Ключът към качеството на това сортиране е двойната случайност, осигурена от хвърлянето на зарове (потвърдено от свидетели) и точното време на сортирането, което осигурява вход за алгоритъм, който генерира случаен избор. Времето за начало за сортирането е толкова точно (секунди), че е невъзможно да се контролира от хора, като по този начин се осигурява двоен „неконтролируем“ вход, за да се гарантира справедлив резултат. '
+ mathematical_result: Резултат (1) x (2)
+ proposals_selected_by_sortition: Избрани чрез (жребий) сортировка предложения
+ sortition_reproducibility_details: Подробности за възпроизвеждане на жребия
+ time_seed: "(2) Време за зареждане"
+ witnesses: Свидетели
+ sortition:
+ random_seed: Случаен подбор
+ selected_proposals:
+ one: избрано предложение
+ other: избрани предложения
+ view: Изглед
+ sortition_author:
+ deleted: Изтрит участник
+ sortition_cancel_author:
+ deleted: Изтрит участник
+ sortitions_count:
+ count:
+ one: 1 сортировка
+ other: "%{count} сортировки"
+ statistics:
+ sortitions_count: Сортировки
diff --git a/decidim-sortitions/config/locales/ca.yml b/decidim-sortitions/config/locales/ca.yml
index 8053bc32561f0..172c9384e9540 100644
--- a/decidim-sortitions/config/locales/ca.yml
+++ b/decidim-sortitions/config/locales/ca.yml
@@ -31,7 +31,7 @@ ca:
sortitions:
sortition_created:
email_intro: El sorteig "%{resource_title}" s'ha afegit a "%{participatory_space_title}" que segueixes.
- email_outro: Has rebut aquesta notificació perquè estàs seguint "%{participatory_space_title}". Pots deixar de seguir-lo des de l'enllaç anterior.
+ email_outro: Has rebut aquesta notificació perquè estàs seguint l'espai "%{participatory_space_title}". Pots deixar de seguir-lo des de l'enllaç anterior.
email_subject: Nou sorteig afegit a %{participatory_space_title}
notification_title: El sorteig %{resource_title} s'ha afegit a %{participatory_space_title}
sortitions:
diff --git a/decidim-sortitions/config/locales/he-IL.yml b/decidim-sortitions/config/locales/he-IL.yml
new file mode 100644
index 0000000000000..af6fa60a73f2c
--- /dev/null
+++ b/decidim-sortitions/config/locales/he-IL.yml
@@ -0,0 +1 @@
+he:
diff --git a/decidim-sortitions/config/locales/pl.yml b/decidim-sortitions/config/locales/pl.yml
index 463636ccafbd5..fad5b0f93dd29 100644
--- a/decidim-sortitions/config/locales/pl.yml
+++ b/decidim-sortitions/config/locales/pl.yml
@@ -22,6 +22,8 @@ pl:
decidim:
components:
sortitions:
+ actions:
+ comment: Skomentuj
name: Wybory losowe
settings:
global:
@@ -157,3 +159,5 @@ pl:
few: "%{count} wyborów losowych"
many: "%{count} wybory losowe"
other: "%{count} wybory losowe"
+ statistics:
+ sortitions_count: Wybory przez losowanie
diff --git a/decidim-sortitions/lib/decidim/sortitions/test/factories.rb b/decidim-sortitions/lib/decidim/sortitions/test/factories.rb
index 49ec02cc43dd0..0e7a3b3fad88b 100644
--- a/decidim-sortitions/lib/decidim/sortitions/test/factories.rb
+++ b/decidim-sortitions/lib/decidim/sortitions/test/factories.rb
@@ -6,16 +6,22 @@
FactoryBot.define do
factory :sortition_component, parent: :component do
- name { Decidim::Components::Namer.new(participatory_space.organization.available_locales, :sortitions).i18n_name }
+ transient do
+ skip_injection { false }
+ end
+ name { generate_component_name(participatory_space.organization.available_locales, :sortitions, skip_injection: skip_injection) }
manifest_name { :sortitions }
- participatory_space { create(:participatory_process, :with_steps, organization: organization) }
+ participatory_space { create(:participatory_process, :with_steps, organization: organization, skip_injection: skip_injection) }
end
factory :sortition, class: "Decidim::Sortitions::Sortition" do
- component { create(:sortition_component) }
- decidim_proposals_component { create(:proposal_component, organization: component.organization) }
+ transient do
+ skip_injection { false }
+ end
+ component { create(:sortition_component, skip_injection: skip_injection) }
+ decidim_proposals_component { create(:proposal_component, organization: component.organization, skip_injection: skip_injection) }
- title { generate_localized_title }
+ title { generate_localized_title(:sortition_title, skip_injection: skip_injection) }
author do
create(:user, :admin, organization: component.organization) if component
end
@@ -23,15 +29,15 @@
dice { Faker::Number.between(from: 1, to: 6).to_i }
target_items { Faker::Number.between(from: 1, to: 5).to_i }
request_timestamp { Time.now.utc }
- witnesses { Decidim::Faker::Localized.wrapped("", " ") { generate_localized_title } }
- additional_info { Decidim::Faker::Localized.wrapped("", " ") { generate_localized_title } }
- selected_proposals { create_list(:proposal, target_items, component: decidim_proposals_component).pluck(:id) }
+ witnesses { generate_localized_description(:sortition_witnesses, skip_injection: skip_injection) }
+ additional_info { generate_localized_description(:sortition_additional_info, skip_injection: skip_injection) }
+ selected_proposals { create_list(:proposal, target_items, component: decidim_proposals_component, skip_injection: skip_injection).pluck(:id) }
candidate_proposals { selected_proposals }
trait :cancelled do
cancelled_on { Time.now.utc }
- cancel_reason { Decidim::Faker::Localized.wrapped("", " ") { generate_localized_title } }
- cancelled_by_user { create(:user, :admin, organization: component.organization) if component }
+ cancel_reason { generate_localized_description(:sortition_cancel_reason, skip_injection: skip_injection) }
+ cancelled_by_user { create(:user, :admin, organization: component.organization, skip_injection: skip_injection) if component }
end
end
end
diff --git a/decidim-sortitions/lib/decidim/sortitions/version.rb b/decidim-sortitions/lib/decidim/sortitions/version.rb
index 597a9adbc24e9..fc103a5353c33 100644
--- a/decidim-sortitions/lib/decidim/sortitions/version.rb
+++ b/decidim-sortitions/lib/decidim/sortitions/version.rb
@@ -3,7 +3,7 @@
module Decidim
module Sortitions
def self.version
- "0.27.5"
+ "0.27.6"
end
end
end
diff --git a/decidim-sortitions/spec/events/decidim/sortitions/create_sortition_event_spec.rb b/decidim-sortitions/spec/events/decidim/sortitions/create_sortition_event_spec.rb
index d1c12b68d9ab8..baaf06426e70b 100644
--- a/decidim-sortitions/spec/events/decidim/sortitions/create_sortition_event_spec.rb
+++ b/decidim-sortitions/spec/events/decidim/sortitions/create_sortition_event_spec.rb
@@ -7,7 +7,7 @@
let(:notification_title) { "The sortition #{resource_title} has been added to #{participatory_space_title}" }
let(:email_outro) { "You have received this notification because you are following \"#{participatory_space_title}\". You can unfollow it from the previous link." }
let(:email_intro) { "The sortition \"#{resource_title}\" has been added to \"#{participatory_space_title}\" that you are following." }
- let(:email_subject) { "New sortition added to #{participatory_space_title}" }
+ let(:email_subject) { "New sortition added to #{decidim_sanitize_translated(participatory_space.title)}" }
let(:event_name) { "decidim.events.sortitions.sortition_created" }
include_context "when a simple event"
diff --git a/decidim-sortitions/spec/requests/sortition_search_spec.rb b/decidim-sortitions/spec/requests/sortition_search_spec.rb
index 8aa31295205a8..891422caed2eb 100644
--- a/decidim-sortitions/spec/requests/sortition_search_spec.rb
+++ b/decidim-sortitions/spec/requests/sortition_search_spec.rb
@@ -32,22 +32,22 @@
it_behaves_like "a resource search with categories", :sortition, :single
it "displays all non-cancelled sortitions without any filters" do
- expect(subject).to include(translated(sortition1.title))
- expect(subject).to include(translated(sortition2.title))
- expect(subject).to include(translated(sortition3.title))
- expect(subject).to include(translated(sortition4.title))
- expect(subject).not_to include(translated(sortition5.title))
+ expect(subject).to include(decidim_escape_translated(sortition1.title))
+ expect(subject).to include(decidim_escape_translated(sortition2.title))
+ expect(subject).to include(decidim_escape_translated(sortition3.title))
+ expect(subject).to include(decidim_escape_translated(sortition4.title))
+ expect(subject).not_to include(decidim_escape_translated(sortition5.title))
end
context "when searching by text" do
let(:filter_params) { { search_text_cont: "doggo" } }
it "displays only the sortitions containing the search_text" do
- expect(subject).to include(translated(sortition1.title))
- expect(subject).to include(translated(sortition2.title))
- expect(subject).to include(translated(sortition3.title))
- expect(subject).not_to include(translated(sortition4.title))
- expect(subject).not_to include(translated(sortition5.title))
+ expect(subject).to include(decidim_escape_translated(sortition1.title))
+ expect(subject).to include(decidim_escape_translated(sortition2.title))
+ expect(subject).to include(decidim_escape_translated(sortition3.title))
+ expect(subject).not_to include(decidim_escape_translated(sortition4.title))
+ expect(subject).not_to include(decidim_escape_translated(sortition5.title))
end
end
@@ -58,11 +58,11 @@
let(:state) { "active" }
it "displays the active sortitions" do
- expect(subject).to include(translated(sortition1.title))
- expect(subject).to include(translated(sortition2.title))
- expect(subject).to include(translated(sortition3.title))
- expect(subject).to include(translated(sortition4.title))
- expect(subject).not_to include(translated(sortition5.title))
+ expect(subject).to include(decidim_escape_translated(sortition1.title))
+ expect(subject).to include(decidim_escape_translated(sortition2.title))
+ expect(subject).to include(decidim_escape_translated(sortition3.title))
+ expect(subject).to include(decidim_escape_translated(sortition4.title))
+ expect(subject).not_to include(decidim_escape_translated(sortition5.title))
end
end
@@ -70,11 +70,11 @@
let(:state) { "cancelled" }
it "displays only the cancelled sortition" do
- expect(subject).not_to include(translated(sortition1.title))
- expect(subject).not_to include(translated(sortition2.title))
- expect(subject).not_to include(translated(sortition3.title))
- expect(subject).not_to include(translated(sortition4.title))
- expect(subject).to include(translated(sortition5.title))
+ expect(subject).not_to include(decidim_escape_translated(sortition1.title))
+ expect(subject).not_to include(decidim_escape_translated(sortition2.title))
+ expect(subject).not_to include(decidim_escape_translated(sortition3.title))
+ expect(subject).not_to include(decidim_escape_translated(sortition4.title))
+ expect(subject).to include(decidim_escape_translated(sortition5.title))
end
end
@@ -82,11 +82,11 @@
let(:state) { "all" }
it "displays all the sortitions" do
- expect(subject).to include(translated(sortition1.title))
- expect(subject).to include(translated(sortition2.title))
- expect(subject).to include(translated(sortition3.title))
- expect(subject).to include(translated(sortition4.title))
- expect(subject).to include(translated(sortition5.title))
+ expect(subject).to include(decidim_escape_translated(sortition1.title))
+ expect(subject).to include(decidim_escape_translated(sortition2.title))
+ expect(subject).to include(decidim_escape_translated(sortition3.title))
+ expect(subject).to include(decidim_escape_translated(sortition4.title))
+ expect(subject).to include(decidim_escape_translated(sortition5.title))
end
end
end
diff --git a/decidim-sortitions/spec/types/integration_schema_spec.rb b/decidim-sortitions/spec/types/integration_schema_spec.rb
index dce02375b9db6..ab815c433046b 100644
--- a/decidim-sortitions/spec/types/integration_schema_spec.rb
+++ b/decidim-sortitions/spec/types/integration_schema_spec.rb
@@ -45,7 +45,7 @@
{
"__typename" => "Sortitions",
"id" => current_component.id.to_s,
- "name" => { "translation" => "Sortitions" },
+ "name" => { "translation" => translated(current_component.name) },
"sortitions" => {
"edges" => [
{
diff --git a/decidim-surveys/config/locales/bg.yml b/decidim-surveys/config/locales/bg.yml
index bb348535b1445..8d786cc66cc8f 100644
--- a/decidim-surveys/config/locales/bg.yml
+++ b/decidim-surveys/config/locales/bg.yml
@@ -2,10 +2,71 @@
bg:
activemodel:
models:
- decidim/surveys/closed_survey_event: Анкетата завърши
+ decidim/surveys/closed_survey_event: Анкетата приключи
decidim/surveys/opened_survey_event: Анкетата започна
activerecord:
models:
decidim/surveys/survey:
one: Анкета
other: Анкети
+ decidim/surveys/survey_answer:
+ one: Отговор
+ other: Отговори
+ decidim:
+ components:
+ surveys:
+ actions:
+ answer: Отговор
+ name: Анкета
+ settings:
+ global:
+ announcement: Съобщение
+ clean_after_publish: Изтриване на отговорите при публикуване на проучването
+ ends_at: Отговорите се приемат до
+ ends_at_help: Оставете празно при липса на конкретна дата
+ scope_id: Обхват
+ scopes_enabled: Обхватите са активирани
+ starts_at: Отговорите се приемат от
+ starts_at_help: Оставете празно при липса на конкретна дата
+ step:
+ allow_answers: Разрешаване на отговори
+ allow_unregistered: Разрешаване на нерегистрирани потребители да отговарят на въпросите в проучването
+ allow_unregistered_help: Ако е активно, няма да се изисква влизане, за да се отговори на анкетата. Това може да доведе до лоши или ненадеждни данни и ще e по-уязвимo на автоматизирани атаки. Използвайте с повишено внимание! Имайте предвид, че участник може да отговори на едно и също проучване няколко пъти, като използва различни браузъри или функцията за „частно сърфиране“ на своя уеб браузър.
+ announcement: Съобщение
+ events:
+ surveys:
+ survey_closed:
+ email_intro: Анкетата %{resource_title} в(ъв) %{participatory_space_title} беше затворена.
+ email_outro: Получавате това известие, защото следвате %{participatory_space_title}. Може да прекратите известията чрез предходния линк.
+ email_subject: Приключи анкетата в(ъв) %{participatory_space_title}
+ notification_title: Анкетата %{resource_title} в(ъв) %{participatory_space_title} приключи.
+ survey_opened:
+ email_intro: 'Анкетата %{resource_title} в(ъв) %{participatory_space_title} вече е отворена. Можете да участвате в нея от тази страница:'
+ email_outro: Получавате това известие, защото следвате %{participatory_space_title}. Може да прекратите известията чрез предходния линк.
+ email_subject: Нова анкета в(ъв) %{participatory_space_title}
+ notification_title: Анкетата %{resource_title} в(ъв) %{participatory_space_title} вече е отворена.
+ metrics:
+ survey_answers:
+ description: Брой на анкетите с отговори от участници
+ object: отговори на анкети
+ title: Отговори на анкети
+ statistics:
+ answers_count: Отговори
+ surveys:
+ admin:
+ component:
+ actions:
+ answers_alert: Ако публикувате компонента, всички резултати ще бъдат премахнати.
+ exports:
+ survey_user_answers: Отговори на участник в анкети
+ surveys:
+ update:
+ invalid: Възникна проблем при запазването на анкетата.
+ success: Анкетата беше запазена успешно.
+ last_activity:
+ new_survey_at_html: "Ново допитване на %{link}"
+ surveys:
+ answer:
+ invalid: Възникна проблем при попълването на отговорите на анкетата.
+ spam_detected: Възникна проблем при попълването на отговорите във формуляра. Навярно сте били твърде бързи, бихте ли опитали отново?
+ success: Отговорите на анкетата са попълнени успешно.
diff --git a/decidim-surveys/config/locales/ca.yml b/decidim-surveys/config/locales/ca.yml
index 3ed8c3c68fb7e..eeea31c7441c1 100644
--- a/decidim-surveys/config/locales/ca.yml
+++ b/decidim-surveys/config/locales/ca.yml
@@ -37,12 +37,12 @@ ca:
surveys:
survey_closed:
email_intro: L'enquesta %{resource_title} a %{participatory_space_title} ha estat tancada.
- email_outro: Has rebut aquesta notificació perquè estàs seguint %{participatory_space_title}. Pots deixar de rebre notificacions seguint l'enllaç anterior.
+ email_outro: Has rebut aquesta notificació perquè estàs seguint l'espai "%{participatory_space_title}". Pots deixar de rebre notificacions seguint l'enllaç anterior.
email_subject: S'ha acabat una enquesta a %{participatory_space_title}
notification_title: L'enquesta %{resource_title} a %{participatory_space_title} ha acabat.
survey_opened:
email_intro: 'L''enquesta %{resource_title} a %{participatory_space_title} ja està oberta. Pots participar-hi des d''aquesta pàgina:'
- email_outro: Has rebut aquesta notificació perquè estàs seguint %{participatory_space_title}. Pots deixar de rebre notificacions seguint l'enllaç anterior.
+ email_outro: Has rebut aquesta notificació perquè estàs seguint l'espai "%{participatory_space_title}". Pots deixar de rebre notificacions seguint l'enllaç anterior.
email_subject: Una nova enquesta a %{participatory_space_title}
notification_title: L'enquesta %{resource_title} en %{participatory_space_title} ja està oberta.
metrics:
diff --git a/decidim-surveys/config/locales/es.yml b/decidim-surveys/config/locales/es.yml
index 13626362ac785..d67dc9be02b4b 100644
--- a/decidim-surveys/config/locales/es.yml
+++ b/decidim-surveys/config/locales/es.yml
@@ -37,12 +37,12 @@ es:
surveys:
survey_closed:
email_intro: La encuesta %{resource_title} en %{participatory_space_title} se ha cerrado.
- email_outro: Has recibido esta notificación porqué estás siguiendo %{participatory_space_title}. Puedes dejar de recibir notificaciones siguiendo el enlace anterior.
+ email_outro: Has recibido esta notificación porqué estás siguiendo el espacio "%{participatory_space_title}". Puedes dejar de recibir notificaciones siguiendo el enlace anterior.
email_subject: Ha terminado una encuesta en %{participatory_space_title}
notification_title: La encuesta %{resource_title} en %{participatory_space_title} ha terminado.
survey_opened:
email_intro: 'Ya está abierta la encuesta %{resource_title} en %{participatory_space_title}. Puedes participar desde esta página:'
- email_outro: Has recibido esta notificación porque estás siguiendo %{participatory_space_title}. Puedes dejar de recibir notificaciones siguiendo el enlace anterior.
+ email_outro: Has recibido esta notificación porque estás siguiendo el espacio "%{participatory_space_title}". Puedes dejar de recibir notificaciones siguiendo el enlace anterior.
email_subject: Nueva encuesta en %{participatory_space_title}
notification_title: Ya está abierta la encuesta %{resource_title} en %{participatory_space_title}.
metrics:
diff --git a/decidim-surveys/config/locales/he-IL.yml b/decidim-surveys/config/locales/he-IL.yml
new file mode 100644
index 0000000000000..af6fa60a73f2c
--- /dev/null
+++ b/decidim-surveys/config/locales/he-IL.yml
@@ -0,0 +1 @@
+he:
diff --git a/decidim-surveys/lib/decidim/surveys/test/factories.rb b/decidim-surveys/lib/decidim/surveys/test/factories.rb
index d8dc88f5be56c..4103062040599 100644
--- a/decidim-surveys/lib/decidim/surveys/test/factories.rb
+++ b/decidim-surveys/lib/decidim/surveys/test/factories.rb
@@ -6,13 +6,19 @@
FactoryBot.define do
factory :surveys_component, parent: :component do
- name { Decidim::Components::Namer.new(participatory_space.organization.available_locales, :surveys).i18n_name }
+ transient do
+ skip_injection { false }
+ end
+ name { generate_component_name(participatory_space.organization.available_locales, :surveys, skip_injection: skip_injection) }
manifest_name { :surveys }
- participatory_space { create(:participatory_process, :with_steps) }
+ participatory_space { create(:participatory_process, :with_steps, skip_injection: skip_injection) }
end
factory :survey, class: "Decidim::Surveys::Survey" do
- questionnaire { build(:questionnaire, :with_questions) }
- component { build(:surveys_component) }
+ transient do
+ skip_injection { false }
+ end
+ questionnaire { build(:questionnaire, :with_questions, skip_injection: skip_injection) }
+ component { build(:surveys_component, skip_injection: skip_injection) }
end
end
diff --git a/decidim-surveys/lib/decidim/surveys/version.rb b/decidim-surveys/lib/decidim/surveys/version.rb
index faed65770bfdf..b876805034d29 100644
--- a/decidim-surveys/lib/decidim/surveys/version.rb
+++ b/decidim-surveys/lib/decidim/surveys/version.rb
@@ -4,7 +4,7 @@ module Decidim
# This holds the decidim-surveys version.
module Surveys
def self.version
- "0.27.5"
+ "0.27.6"
end
end
end
diff --git a/decidim-surveys/spec/events/decidim/surveys/closed_survey_event_spec.rb b/decidim-surveys/spec/events/decidim/surveys/closed_survey_event_spec.rb
index 7b35352c6b732..52f73e1bd5202 100644
--- a/decidim-surveys/spec/events/decidim/surveys/closed_survey_event_spec.rb
+++ b/decidim-surveys/spec/events/decidim/surveys/closed_survey_event_spec.rb
@@ -13,10 +13,11 @@ module Surveys
let(:resource) { create(:surveys_component) }
let(:participatory_space) { resource.participatory_space }
let(:resource_path) { main_component_path(resource) }
+ let(:resource_title) { decidim_sanitize_translated(resource.name) }
let(:email_subject) { "A survey has finished in #{participatory_space_title}" }
- let(:email_intro) { "The survey #{resource.name["en"]} in #{participatory_space_title} has been closed." }
+ let(:email_intro) { "The survey #{resource_title} in #{participatory_space_title} has been closed." }
let(:email_outro) { "You have received this notification because you are following #{participatory_space_title}. You can stop receiving notifications following the previous link." }
- let(:notification_title) { "The survey #{resource.name["en"]} in #{participatory_space_title} has finished." }
+ let(:notification_title) { "The survey #{resource_title} in #{participatory_space_title} has finished." }
it_behaves_like "a simple event"
it_behaves_like "a simple event email"
diff --git a/decidim-surveys/spec/events/decidim/surveys/opened_survey_event_spec.rb b/decidim-surveys/spec/events/decidim/surveys/opened_survey_event_spec.rb
index 9d2a3e5ecde84..bfcc44a60bf68 100644
--- a/decidim-surveys/spec/events/decidim/surveys/opened_survey_event_spec.rb
+++ b/decidim-surveys/spec/events/decidim/surveys/opened_survey_event_spec.rb
@@ -13,10 +13,11 @@ module Surveys
let(:resource) { create(:surveys_component) }
let(:participatory_space) { resource.participatory_space }
let(:resource_path) { main_component_path(resource) }
+ let(:resource_title) { decidim_sanitize_translated(resource.name) }
let(:email_subject) { "A new survey in #{participatory_space_title}" }
- let(:email_intro) { "The survey #{resource.name["en"]} in #{participatory_space_title} is now open. You can participate in it from this page:" }
+ let(:email_intro) { "The survey #{resource_title} in #{participatory_space_title} is now open. You can participate in it from this page:" }
let(:email_outro) { "You have received this notification because you are following #{participatory_space_title}. You can stop receiving notifications following the previous link." }
- let(:notification_title) { "The survey #{resource.name["en"]} in #{participatory_space_title} is now open." }
+ let(:notification_title) { "The survey #{resource_title} in #{participatory_space_title} is now open." }
it_behaves_like "a simple event"
it_behaves_like "a simple event email"
diff --git a/decidim-surveys/spec/types/integration_schema_spec.rb b/decidim-surveys/spec/types/integration_schema_spec.rb
index 799e0fd2caeb3..3c9732517dc80 100644
--- a/decidim-surveys/spec/types/integration_schema_spec.rb
+++ b/decidim-surveys/spec/types/integration_schema_spec.rb
@@ -54,7 +54,7 @@
{
"__typename" => "Surveys",
"id" => current_component.id.to_s,
- "name" => { "translation" => "Survey" },
+ "name" => { "translation" => translated(current_component.name) },
"surveys" => {
"edges" => [
{
diff --git a/decidim-system/app/commands/decidim/system/register_organization.rb b/decidim-system/app/commands/decidim/system/register_organization.rb
index 0654453770c68..e1dd8b4fd14c1 100644
--- a/decidim-system/app/commands/decidim/system/register_organization.rb
+++ b/decidim-system/app/commands/decidim/system/register_organization.rb
@@ -2,6 +2,9 @@
module Decidim
module System
+ class InvitationFailedError < ActiveRecord::RecordInvalid
+ end
+
# A command with all the business logic when creating a new organization in
# the system. It creates the organization and invites the admin to the
# system.
@@ -24,7 +27,6 @@ def call
@organization = nil
invite_form = nil
- invitation_failed = false
transaction do
@organization = create_organization
@@ -32,13 +34,14 @@ def call
PopulateHelp.call(@organization)
CreateDefaultContentBlocks.call(@organization)
invite_form = invite_user_form(@organization)
- invitation_failed = invite_form.invalid?
+ raise InvitationFailedError if invite_form.invalid?
end
- return broadcast(:invalid) if invitation_failed
Decidim::InviteUser.call(invite_form) if @organization && invite_form
broadcast(:ok)
+ rescue InvitationFailedError
+ broadcast(:invalid_invitation)
rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotUnique
broadcast(:invalid)
end
diff --git a/decidim-system/app/controllers/decidim/system/organizations_controller.rb b/decidim-system/app/controllers/decidim/system/organizations_controller.rb
index 088e8c53a5f6e..f9661d459d6e5 100644
--- a/decidim-system/app/controllers/decidim/system/organizations_controller.rb
+++ b/decidim-system/app/controllers/decidim/system/organizations_controller.rb
@@ -22,6 +22,11 @@ def create
redirect_to organizations_path
end
+ on(:invalid_invitation) do
+ flash.now[:alert] = t("organizations.create.error_invitation", scope: "decidim.system")
+ render :new
+ end
+
on(:invalid) do
flash.now[:alert] = t("organizations.create.error", scope: "decidim.system")
render :new
diff --git a/decidim-system/app/forms/decidim/system/update_organization_form.rb b/decidim-system/app/forms/decidim/system/update_organization_form.rb
index eb6e18645ecaa..d433296700282 100644
--- a/decidim-system/app/forms/decidim/system/update_organization_form.rb
+++ b/decidim-system/app/forms/decidim/system/update_organization_form.rb
@@ -46,6 +46,7 @@ class UpdateOrganizationForm < Form
validates :name, :host, :users_registration_mode, presence: true
validate :validate_organization_uniqueness
+ validate :validate_secret_key_base_for_encryption
validates :users_registration_mode, inclusion: { in: Decidim::Organization.users_registration_modes }
def map_model(model)
@@ -96,6 +97,14 @@ def validate_organization_uniqueness
errors.add(:name, :taken) if Decidim::Organization.where(name: name).where.not(id: id).exists?
errors.add(:host, :taken) if Decidim::Organization.where(host: host).where.not(id: id).exists?
end
+
+ # We need a valid secret key base for encrypting the SMTP password with it
+ # It is also necessary for other things in Rails (like Cookies encryption)
+ def validate_secret_key_base_for_encryption
+ return if Rails.application.secrets.secret_key_base&.length == 128
+
+ errors.add(:password, I18n.t("activemodel.errors.models.organization.attributes.password.secret_key"))
+ end
end
end
end
diff --git a/decidim-system/app/mailers/decidim/system/application_mailer.rb b/decidim-system/app/mailers/decidim/system/application_mailer.rb
deleted file mode 100644
index 5f92460e49102..0000000000000
--- a/decidim-system/app/mailers/decidim/system/application_mailer.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-# frozen_string_literal: true
-
-module Decidim
- module System
- # Custom application mailer, scoped to the system mailer.
- #
- class ApplicationMailer < ActionMailer::Base
- default from: Decidim.config.mailer_sender
- layout "mailer"
- end
- end
-end
diff --git a/decidim-system/config/locales/bg.yml b/decidim-system/config/locales/bg.yml
index 70c161a2c3b67..38d510adeebcc 100644
--- a/decidim-system/config/locales/bg.yml
+++ b/decidim-system/config/locales/bg.yml
@@ -1,5 +1,37 @@
---
bg:
+ activemodel:
+ attributes:
+ oauth_application:
+ name: Име на приложението за OAuth
+ organization_logo: Лого на организацията (квадратно)
+ organization_name: Организация
+ organization_url: URL адрес на организацията
+ redirect_uri: URI за пренасочване
+ organization:
+ address: Име на SMTP хост
+ from_email: Имейл адрес
+ from_label: Етикет
+ password: Парола
+ port: Порт
+ user_name: Потребителско име
+ organization_file_uploads:
+ allowed_content_types:
+ admin: Администраторски MIME типове
+ default: MIME типове по подразбиране
+ allowed_file_extensions:
+ admin: Административни файлови разширения
+ default: Файлови разширения по подразбиране
+ image: Разширения на файлове с изображения
+ maximum_file_size:
+ avatar: Размер на файла на аватара
+ default: Размер на файла по подразбиране
+ errors:
+ models:
+ oauth_application:
+ attributes:
+ redirect_uri:
+ must_be_ssl: URI адресът за пренасочване трябва да бъде SSL URI
decidim:
system:
actions:
@@ -7,6 +39,179 @@ bg:
destroy: Изтрий
edit: Редактирай
new: Нов
+ save: Запази
+ title: Действия
admins:
+ create:
+ error: Възникна проблем при създаването на нов администратор.
+ success: Администраторът беше създаден успешно
+ destroy:
+ success: Администраторът беше изтрит успешно
+ edit:
+ title: Редактиране на администратора
+ update: Обновяване
+ index:
+ title: Администратори
+ new:
+ create: Създаване
+ title: Нов администратор
show:
+ destroy: Унищожи
edit: Редактирай
+ update:
+ error: Възникна проблем при актуализирането на този администратор.
+ success: Администраторът беше актуализиран успешно
+ dashboard:
+ show:
+ current_organizations: Текущи организации
+ default_pages:
+ placeholders:
+ content: Моля, добавете важно съдържание на статичната страница %{page} в администраторското табло.
+ title: Заглавие по подразбиране за %{page}
+ devise:
+ passwords:
+ edit:
+ change_your_password: Промени паролата си
+ minimum_characters: "(%{minimum} символа минимум)"
+ new:
+ forgot_your_password: Забравили сте паролата си
+ send_me_reset_password_instructions: Изпратете ми инструкции за възстановяване на паролата
+ shared:
+ links:
+ did_not_receive_confirmation_instructions?: Не сте ли получили указания за потвърждение?
+ did_not_receive_unlock_instructions?: Не сте получили инструкции за отключване?
+ forgot_your_password?: Забравили сте паролата си?
+ log_in: Вход
+ sign_up: Регистрация
+ menu:
+ admins: Администратори
+ dashboard: Табло за управление
+ oauth_applications: Приложения за OAuth
+ organizations: Организации
+ models:
+ admin:
+ fields:
+ created_at: Създаден на
+ email: Имейл
+ name: Администратор
+ validations:
+ email_uniqueness: вече съществува друг администратор със същия имейл
+ oauth_application:
+ fields:
+ created_at: Създаден на
+ name: Име на приложението за OAuth
+ organization_name: Организация
+ name: Приложение за OAuth
+ organization:
+ actions:
+ save_and_invite: Създаване на организация и покана на администратор
+ fields:
+ created_at: Създадено на
+ file_upload_settings: Настройки за качване на файл
+ name: Име
+ omniauth_settings: Настройки за Omniauth
+ smtp_settings: SMTP Настройки
+ name: Организация
+ oauth_applications:
+ create:
+ error: Възникна проблем при създаването на това приложение.
+ success: Приложението беше създадено успешно.
+ destroy:
+ error: Възникна проблем при премахването на това приложение.
+ success: Приложението беше премахнато успешно.
+ edit:
+ save: Запази
+ title: Редактиране на приложението
+ form:
+ select_organization: Избор на организация
+ index:
+ confirm_delete: Сигурни ли сте, че искате да изтриете това приложение?
+ title: Приложения за OAuth
+ new:
+ save: Запази
+ title: Ново приложение
+ update:
+ error: Възникна проблем при актуализирането на това приложение.
+ success: Приложението беше актуализирано успешно.
+ organizations:
+ advanced_settings:
+ hide: Скрий разширените настройки
+ show: Показване на разширените настройки
+ create:
+ error: Възникна проблем при създаването на нова организация.
+ success: Организацията беше създадена успешно.
+ edit:
+ secondary_hosts_hint: Въведете всяка от тях на нов ред
+ title: Редактиране на организацията
+ file_upload_settings:
+ content_types:
+ admin_hint: Тези типове MIME са разрешени за качвания в администраторския раздел. Потребителите с администратори трябва да са наясно с рисковете при качването на някои формати на документи, така че можете да очаквате да бъдат по-предпазливи при качването на файлове.
+ default_hint: Тези типове MIME са разрешени за всички потребители по подразбиране.
+ intro_html: Добавяте заместващи символи със знака звездичка за MIME типовете, напр. изображение/* .
+ title: Разрешени MIME типове
+ file_extensions:
+ admin_hint: Тези файлови разширения са разрешени за качване в раздела за администриране. Администраторите трябва да са наясно с рисковете при качването на някои формати документи, така че можете да очаквате да бъдат по-предпазливи при качването на файлове.
+ default_hint: Тези файлови разширения са разрешени за всички потребители по подразбиране.
+ image_hint: Тези файлови разширения са разрешени за всякакъв вид качване на изображения.
+ title: Разрешени файлови разширения
+ file_sizes:
+ avatar_hint: Мегабайти (MB). Това ограничение за размера на файла се използва за качване на изображения на аватар.
+ default_hint: Мегабайти (MB). Това ограничение за размера на файла е по подразбиране, което се използва за всички качвания на файлове, освен ако не е посочено друго.
+ title: Максимална големина на файловете
+ intro: |
+ Моля, бъдете изключително внимателни, когато обмисляте да промените тези настройки. Колкото по-малко позволявате, толкова по-добре.
+ Разрешаването на конкретни файлови разширения или типове MIME може да изложи потребителите на системата на рискове за сигурността и може също да повлияе на достъпността на уебсайта.
+ index:
+ title: Организации
+ new:
+ default: По подразбиране?
+ enabled: Активно
+ locale: Локално
+ reference_prefix_hint: Референтният префикс се използва за уникално идентифициране на ресурсите в цялата организация.
+ secondary_hosts_hint: Въведете всеки един от тях на нов ред.
+ title: Нова организация
+ omniauth_settings:
+ decidim:
+ client_id: ID на клиента
+ client_secret: Тайна на клиента
+ site_url: Уебсайт URL
+ enabled: Активно
+ enabled_by_default: Този доставчик е активиран по подразбиране. Може да бъде редактиран, но не и деактивиран.
+ facebook:
+ app_id: Идентификатор (ID) на приложението
+ app_secret: Тайна на приложението
+ google_oauth2:
+ client_id: ID на клиента
+ client_secret: Тайна на клиента
+ icon: Икона
+ icon_path: Път до иконата
+ twitter:
+ api_key: API ключ
+ api_secret: Тайна на API
+ smtp_settings:
+ fieldsets:
+ sender: Подател
+ instructions:
+ from_label: 'Подателят на имейла ще бъде: „името-на-организацията-ви “. Оставете празно, за да използвате „имейл адресът“ като етикет'
+ placeholder:
+ from_email: your-organization@example.org
+ from_label: your-organization-name
+ update:
+ error: Възникна проблем при актуализирането на тази организация.
+ success: Организацията беше актуализирана успешно.
+ users_registration_mode:
+ disabled: Достъпът е възможен само с външни профили
+ enabled: Разрешете на участниците да се регистрират и да влизат в профилите си
+ existing: Не разрешавайте на участниците да се регистрират, но разрешете на съществуващите участници да влизат в профила си
+ shared:
+ notices:
+ no_organization_warning_html: Трябва да създадете организация, за да започнете. Уверете се, че сте прочели %{guide}, преди да продължите.
+ our_getting_started_guide: нашето стартово ръководство
+ titles:
+ dashboard: Табло за управление
+ decidim: Civil Power
+ layouts:
+ decidim:
+ system:
+ login_items:
+ logout: Изход
diff --git a/decidim-system/config/locales/en.yml b/decidim-system/config/locales/en.yml
index cd6fb45dc18a5..46395d2f98758 100644
--- a/decidim-system/config/locales/en.yml
+++ b/decidim-system/config/locales/en.yml
@@ -32,6 +32,10 @@ en:
attributes:
redirect_uri:
must_be_ssl: The redirect URI must be a SSL URI
+ organization:
+ attributes:
+ password:
+ secret_key: You need to define the SECRET_KEY_BASE environment variable to be able to save this field
decidim:
system:
actions:
@@ -139,6 +143,7 @@ en:
show: Show advanced settings
create:
error: There was a problem creating a new organization.
+ error_invitation: There was a problem creating a new organization. Review your organization admin name.
success: Organization successfully created.
edit:
secondary_hosts_hint: Enter each one of them in a new line
@@ -192,7 +197,7 @@ en:
fieldsets:
sender: Sender
instructions:
- from_label: 'Email sender will be: "your-organization-name ". Leave blank to use the ''Email address'' as label'
+ from_label: 'Email sender will be: "your-organization-name ". Leave blank to use the same name as the defined for the organization.'
placeholder:
from_email: your-organization@example.org
from_label: your-organization-name
diff --git a/decidim-system/config/locales/eo.yml b/decidim-system/config/locales/eo.yml
index 7599814048735..4323652d927d1 100644
--- a/decidim-system/config/locales/eo.yml
+++ b/decidim-system/config/locales/eo.yml
@@ -1 +1,8 @@
+---
eo:
+ activemodel:
+ attributes:
+ oauth_application:
+ organization_logo: Organizaĵa emblemo (kvadrata)
+ organization_url: Organizo URL
+ redirect_uri: Adresado URL
diff --git a/decidim-system/config/locales/he-IL.yml b/decidim-system/config/locales/he-IL.yml
new file mode 100644
index 0000000000000..af6fa60a73f2c
--- /dev/null
+++ b/decidim-system/config/locales/he-IL.yml
@@ -0,0 +1 @@
+he:
diff --git a/decidim-system/config/locales/hu.yml b/decidim-system/config/locales/hu.yml
index fe8b3ea94ce09..daf9861b0a18d 100644
--- a/decidim-system/config/locales/hu.yml
+++ b/decidim-system/config/locales/hu.yml
@@ -1,5 +1,22 @@
---
hu:
+ activemodel:
+ attributes:
+ oauth_application:
+ organization_logo: Szervezet logója (négyzet)
+ organization_url: Szervezet URL
+ redirect_uri: Redirect URI
+ organization:
+ address: SMTP host név
+ password: Jelszó
+ port: Port
+ user_name: Felhasználónév
+ errors:
+ models:
+ oauth_application:
+ attributes:
+ redirect_uri:
+ must_be_ssl: Az átirányítási URI-nak SSL URI-nak kell lennie
decidim:
system:
actions:
diff --git a/decidim-system/config/locales/is-IS.yml b/decidim-system/config/locales/is-IS.yml
index 8b3dcaaf008b7..f3863e10007f8 100644
--- a/decidim-system/config/locales/is-IS.yml
+++ b/decidim-system/config/locales/is-IS.yml
@@ -1,5 +1,11 @@
---
is:
+ activemodel:
+ attributes:
+ organization:
+ password: Lykilorð
+ port: Gátt
+ user_name: Notendanafn
decidim:
system:
actions:
diff --git a/decidim-system/config/locales/lv.yml b/decidim-system/config/locales/lv.yml
index fe66db21befd0..05fa13912074e 100644
--- a/decidim-system/config/locales/lv.yml
+++ b/decidim-system/config/locales/lv.yml
@@ -1,5 +1,22 @@
---
lv:
+ activemodel:
+ attributes:
+ oauth_application:
+ organization_logo: Organizācijas logotips (kvadrāts)
+ organization_url: Organizācijas URL
+ redirect_uri: Novirzīšanas URI
+ organization:
+ address: SMTP saimniekdatora nosaukums
+ password: Parole
+ port: Ports
+ user_name: Lietotājvārds
+ errors:
+ models:
+ oauth_application:
+ attributes:
+ redirect_uri:
+ must_be_ssl: Novirzīšanas URI jābūt SSL URI
decidim:
system:
actions:
diff --git a/decidim-system/config/locales/nl.yml b/decidim-system/config/locales/nl.yml
index 4408f41f0f8c3..15a83b6adb3fe 100644
--- a/decidim-system/config/locales/nl.yml
+++ b/decidim-system/config/locales/nl.yml
@@ -2,6 +2,10 @@
nl:
activemodel:
attributes:
+ oauth_application:
+ organization_logo: Logo organisatie (vierkant)
+ organization_url: URL van de organisatie
+ redirect_uri: URI doorsturen
organization:
address: SMTP hostname
from_email: E-mailadres
@@ -9,6 +13,12 @@ nl:
password: Wachtwoord
port: Poort
user_name: Gebruikersnaam
+ errors:
+ models:
+ oauth_application:
+ attributes:
+ redirect_uri:
+ must_be_ssl: De omleidings-URI moet een SSL-URI zijn
decidim:
system:
actions:
diff --git a/decidim-system/config/locales/pl.yml b/decidim-system/config/locales/pl.yml
index e08ab9714db87..643089da18840 100644
--- a/decidim-system/config/locales/pl.yml
+++ b/decidim-system/config/locales/pl.yml
@@ -56,14 +56,31 @@ pl:
create: Utwórz
title: Nowy administrator
show:
+ destroy: Zniszcz
edit: Edytuj
update:
error: Podczas aktualizowania tego administratora wystąpił błąd.
success: Administrator został zaktualizowany
+ dashboard:
+ show:
+ current_organizations: Bieżące organizacje
default_pages:
placeholders:
content: Proszę dodać istotne treści do strony statycznej %{page} w panelu administratora.
title: Domyślny tytuł dla %{page}
+ devise:
+ passwords:
+ edit:
+ change_your_password: Zmień swoje hasło
+ minimum_characters: "(Minimum %{minimum} znaków)"
+ new:
+ forgot_your_password: Zapomniałeś hasła
+ send_me_reset_password_instructions: Wyślij mi instrukcje resetowania hasła
+ shared:
+ links:
+ did_not_receive_confirmation_instructions?: Nie otrzymałeś(aś) instrukcji potwierdzenia?
+ did_not_receive_unlock_instructions?: Nie dotarła instrukcja odblokowania?
+ forgot_your_password?: Nie pamiętasz hasła?
menu:
admins: Administratorzy
dashboard: Panel
diff --git a/decidim-system/config/locales/ru.yml b/decidim-system/config/locales/ru.yml
index 1a615c296a5f9..df0e5d9959e17 100644
--- a/decidim-system/config/locales/ru.yml
+++ b/decidim-system/config/locales/ru.yml
@@ -1,5 +1,22 @@
---
ru:
+ activemodel:
+ attributes:
+ oauth_application:
+ organization_logo: Логотип организации (квадрат)
+ organization_url: Веб-адрес организации
+ redirect_uri: URI перенаправления
+ organization:
+ address: Имя хоста SMTP
+ password: Пароль
+ port: Порт
+ user_name: Имя пользователя
+ errors:
+ models:
+ oauth_application:
+ attributes:
+ redirect_uri:
+ must_be_ssl: URI перенаправления должен быть SSL URI
decidim:
system:
actions:
diff --git a/decidim-system/config/locales/sk.yml b/decidim-system/config/locales/sk.yml
index 05b81528007e7..29e4456a746f3 100644
--- a/decidim-system/config/locales/sk.yml
+++ b/decidim-system/config/locales/sk.yml
@@ -1,5 +1,22 @@
---
sk:
+ activemodel:
+ attributes:
+ oauth_application:
+ organization_logo: Logo organizácie (štvorec)
+ organization_url: Odkaz na stránku organizácie
+ redirect_uri: Presmerovať URI
+ organization:
+ address: SMTP hostname
+ password: Heslo
+ port: Port
+ user_name: Používateľské meno
+ errors:
+ models:
+ oauth_application:
+ attributes:
+ redirect_uri:
+ must_be_ssl: Presmerovacie URI musí byť SSL URI
decidim:
system:
actions:
diff --git a/decidim-system/config/locales/sl.yml b/decidim-system/config/locales/sl.yml
index 1bbecbe8ec4d2..9c5955bb61522 100644
--- a/decidim-system/config/locales/sl.yml
+++ b/decidim-system/config/locales/sl.yml
@@ -1,5 +1,22 @@
---
sl:
+ activemodel:
+ attributes:
+ oauth_application:
+ organization_logo: Logo organizacije (kvadratni)
+ organization_url: Domača stran organizacije
+ redirect_uri: Preusmeritev URI
+ organization:
+ address: SMTP Gostitelj
+ password: Geslo
+ port: Vrata
+ user_name: Uporabniško ime
+ errors:
+ models:
+ oauth_application:
+ attributes:
+ redirect_uri:
+ must_be_ssl: URL preusmeritev mora bit SSL
decidim:
system:
actions:
diff --git a/decidim-system/config/locales/sr-CS.yml b/decidim-system/config/locales/sr-CS.yml
index 25e8912f51d63..fa1b678387f1a 100644
--- a/decidim-system/config/locales/sr-CS.yml
+++ b/decidim-system/config/locales/sr-CS.yml
@@ -1,5 +1,22 @@
---
sr:
+ activemodel:
+ attributes:
+ oauth_application:
+ organization_logo: Logo organizacije (kvadrat)
+ organization_url: Link organizacije
+ redirect_uri: Preusmeren URL
+ organization:
+ address: SMTP domaćin
+ password: Šifra
+ port: Port
+ user_name: Korisničko ime
+ errors:
+ models:
+ oauth_application:
+ attributes:
+ redirect_uri:
+ must_be_ssl: URI za preusmeravanje mora biti SSL URI
decidim:
system:
models:
diff --git a/decidim-system/config/locales/uk.yml b/decidim-system/config/locales/uk.yml
index 80b988990ad1a..69a5e0df8eaf5 100644
--- a/decidim-system/config/locales/uk.yml
+++ b/decidim-system/config/locales/uk.yml
@@ -1,5 +1,17 @@
---
uk:
+ activemodel:
+ attributes:
+ oauth_application:
+ organization_logo: Логотип організації (квадрат)
+ organization_url: Адреса сайту організації
+ redirect_uri: URI перенаправлення
+ errors:
+ models:
+ oauth_application:
+ attributes:
+ redirect_uri:
+ must_be_ssl: URI перенаправлення має бути SSL URI
decidim:
system:
actions:
diff --git a/decidim-system/lib/decidim/system/version.rb b/decidim-system/lib/decidim/system/version.rb
index 83820294c3b0e..579f1863d3933 100644
--- a/decidim-system/lib/decidim/system/version.rb
+++ b/decidim-system/lib/decidim/system/version.rb
@@ -4,7 +4,7 @@ module Decidim
# This holds the decidim-system version.
module System
def self.version
- "0.27.5"
+ "0.27.6"
end
end
end
diff --git a/decidim-system/spec/commands/decidim/system/register_organization_spec.rb b/decidim-system/spec/commands/decidim/system/register_organization_spec.rb
index 7dc169d410058..b828449bc9f6a 100644
--- a/decidim-system/spec/commands/decidim/system/register_organization_spec.rb
+++ b/decidim-system/spec/commands/decidim/system/register_organization_spec.rb
@@ -17,21 +17,21 @@ module System
let(:params) do
{
name: "Gotham City",
- host: "decide.gotham.gov",
- secondary_hosts: "foo.gotham.gov\r\n\r\nbar.gotham.gov",
+ host: "decide.example.org",
+ secondary_hosts: "foo.example.org\r\n\r\nbar.example.org",
reference_prefix: "JKR",
organization_admin_name: "Fiorello Henry La Guardia",
- organization_admin_email: "f.laguardia@gotham.gov",
+ organization_admin_email: "f.laguardia@example.org",
available_locales: ["en"],
default_locale: "en",
users_registration_mode: "enabled",
force_users_to_authenticate_before_access_organization: "false",
smtp_settings: {
- "address" => "mail.gotham.gov",
+ "address" => "mail.example.org",
"port" => "25",
"user_name" => "f.laguardia",
"password" => Decidim::AttributeEncryptor.encrypt("password"),
- "from_email" => "decide@gotham.gov",
+ "from_email" => "decide@example.org",
"from_label" => from_label
},
omniauth_settings_facebook_enabled: true,
@@ -53,11 +53,11 @@ module System
organization = Organization.last
expect(organization.name).to eq("Gotham City")
- expect(organization.host).to eq("decide.gotham.gov")
- expect(organization.secondary_hosts).to match_array(["foo.gotham.gov", "bar.gotham.gov"])
- expect(organization.external_domain_whitelist).to match_array(["decidim.org", "github.com"])
- expect(organization.smtp_settings["from"]).to eq("Decide Gotham ")
- expect(organization.smtp_settings["from_email"]).to eq("decide@gotham.gov")
+ expect(organization.host).to eq("decide.example.org")
+ expect(organization.secondary_hosts).to contain_exactly("foo.example.org", "bar.example.org")
+ expect(organization.external_domain_whitelist).to contain_exactly("decidim.org", "github.com")
+ expect(organization.smtp_settings["from"]).to eq("Decide Gotham ")
+ expect(organization.smtp_settings["from_email"]).to eq("decide@example.org")
expect(organization.omniauth_settings["omniauth_settings_facebook_enabled"]).to be(true)
expect(organization.file_upload_settings).to eq(upload_settings)
expect(
@@ -72,7 +72,7 @@ module System
expect { command.call }.to change(User, :count).by(1)
admin = User.last
- expect(admin.email).to eq("f.laguardia@gotham.gov")
+ expect(admin.email).to eq("f.laguardia@example.org")
expect(admin.organization.name).to eq("Gotham City")
expect(admin).to be_admin
expect(admin).to be_created_by_invite
@@ -115,10 +115,10 @@ module System
organization = Organization.last
- expect(organization.smtp_settings["from"]).to eq("Decide Gotham ")
+ expect(organization.smtp_settings["from"]).to eq("Decide Gotham ")
expect(organization.smtp_settings["from_label"]).to eq("Decide Gotham")
- expect(organization.smtp_settings["from_email"]).to eq("decide@gotham.gov")
- expect(last_email.From.value).to eq("Decide Gotham ")
+ expect(organization.smtp_settings["from_email"]).to eq("decide@example.org")
+ expect(last_email.From.value).to eq("Decide Gotham ")
end
context "when from_label is empty" do
@@ -131,9 +131,9 @@ module System
organization = Organization.last
- expect(organization.smtp_settings["from"]).to eq("decide@gotham.gov")
- expect(organization.smtp_settings["from_email"]).to eq("decide@gotham.gov")
- expect(last_email.From.value).to eq("decide@gotham.gov")
+ expect(organization.smtp_settings["from"]).to eq("decide@example.org")
+ expect(organization.smtp_settings["from_email"]).to eq("decide@example.org")
+ expect(last_email.From.value).to eq("Gotham City ")
end
end
end
diff --git a/decidim-system/spec/commands/decidim/system/update_organization_spec.rb b/decidim-system/spec/commands/decidim/system/update_organization_spec.rb
index ed8b694acca0a..16ec181b82f55 100644
--- a/decidim-system/spec/commands/decidim/system/update_organization_spec.rb
+++ b/decidim-system/spec/commands/decidim/system/update_organization_spec.rb
@@ -18,16 +18,16 @@ module System
let(:params) do
{
name: "Gotham City",
- host: "decide.gotham.gov",
- secondary_hosts: "foo.gotham.gov\r\n\r\nbar.gotham.gov",
+ host: "decide.example.org",
+ secondary_hosts: "foo.example.org\r\n\r\nbar.example.org",
force_users_to_authenticate_before_access_organization: false,
users_registration_mode: "existing",
smtp_settings: {
- "address" => "mail.gotham.gov",
+ "address" => "mail.example.org",
"port" => "25",
"user_name" => "f.laguardia",
"password" => Decidim::AttributeEncryptor.encrypt("password"),
- "from_email" => "decide@gotham.gov",
+ "from_email" => "decide@example.org",
"from_label" => from_label
},
omniauth_settings_facebook_enabled: true,
@@ -49,11 +49,11 @@ module System
organization = Organization.last
expect(organization.name).to eq("Gotham City")
- expect(organization.host).to eq("decide.gotham.gov")
- expect(organization.secondary_hosts).to match_array(["foo.gotham.gov", "bar.gotham.gov"])
+ expect(organization.host).to eq("decide.example.org")
+ expect(organization.secondary_hosts).to contain_exactly("foo.example.org", "bar.example.org")
expect(organization.users_registration_mode).to eq("existing")
- expect(organization.smtp_settings["from"]).to eq("Decide Gotham ")
- expect(organization.smtp_settings["from_email"]).to eq("decide@gotham.gov")
+ expect(organization.smtp_settings["from"]).to eq("Decide Gotham ")
+ expect(organization.smtp_settings["from_email"]).to eq("decide@example.org")
expect(organization.omniauth_settings["omniauth_settings_facebook_enabled"]).to be(true)
expect(organization.file_upload_settings).to eq(upload_settings)
expect(
@@ -72,8 +72,8 @@ module System
command.call
organization = Organization.last
- expect(organization.smtp_settings["from"]).to eq("decide@gotham.gov")
- expect(organization.smtp_settings["from_email"]).to eq("decide@gotham.gov")
+ expect(organization.smtp_settings["from"]).to eq("decide@example.org")
+ expect(organization.smtp_settings["from_email"]).to eq("decide@example.org")
end
end
end
diff --git a/decidim-system/spec/forms/decidim/system/update_organization_form_spec.rb b/decidim-system/spec/forms/decidim/system/update_organization_form_spec.rb
index e2f7331207f72..76e731f2f24ef 100644
--- a/decidim-system/spec/forms/decidim/system/update_organization_form_spec.rb
+++ b/decidim-system/spec/forms/decidim/system/update_organization_form_spec.rb
@@ -7,11 +7,11 @@ module Decidim::System
subject do
described_class.new(
name: "Gotham City",
- host: "decide.gotham.gov",
- secondary_hosts: "foo.gotham.gov\r\n\r\nbar.gotham.gov",
+ host: "decide.example.org",
+ secondary_hosts: "foo.example.org\r\n\r\nbar.example.org",
reference_prefix: "JKR",
organization_admin_name: "Fiorello Henry La Guardia",
- organization_admin_email: "f.laguardia@gotham.gov",
+ organization_admin_email: "f.laguardia@example.org",
available_locales: ["en"],
default_locale: "en",
users_registration_mode: "enabled",
@@ -27,11 +27,11 @@ module Decidim::System
let(:smtp_settings) do
{
- "address" => "mail.gotham.gov",
+ "address" => "mail.example.org",
"port" => 25,
"user_name" => "f.laguardia",
"password" => password,
- "from_email" => "decide@gotham.gov",
+ "from_email" => "decide@example.org",
"from_label" => from_label
}
end
@@ -69,7 +69,7 @@ module Decidim::System
it "concatenates from_label and from_email" do
from = subject.set_from
- expect(from).to eq("Decide Gotham ")
+ expect(from).to eq("Decide Gotham ")
end
context "when from_label is empty" do
@@ -78,7 +78,7 @@ module Decidim::System
it "returns the email" do
from = subject.set_from
- expect(from).to eq("decide@gotham.gov")
+ expect(from).to eq("decide@example.org")
end
end
end
diff --git a/decidim-system/spec/system/organizations_spec.rb b/decidim-system/spec/system/organizations_spec.rb
index 5ce62a6f3c505..a1b1c674bcc23 100644
--- a/decidim-system/spec/system/organizations_spec.rb
+++ b/decidim-system/spec/system/organizations_spec.rb
@@ -53,6 +53,48 @@
expect(page).to have_content("There's an error in this field")
end
end
+
+ context "with an invalid organization admin name" do
+ before do
+ click_on "Organizations"
+ click_on "New"
+ end
+
+ it "does not create an organization" do
+ fill_in "Name", with: "Citizen Corp 2"
+ fill_in "Reference prefix", with: "CCORP"
+ fill_in "Host", with: "www.example.org"
+ fill_in "Organization admin name", with: "system@example.org"
+ fill_in "Organization admin email", with: "system@example.org"
+ check "organization_available_locales_en"
+ choose "organization_default_locale_en"
+ choose "Allow participants to register and login"
+
+ click_on "Create organization & invite admin"
+
+ within ".flash", match: :first do
+ expect(page).to have_content("There was a problem creating a new organization. Review your organization admin name.")
+ end
+ end
+ end
+
+ context "without the secret key defined" do
+ before do
+ allow(Rails.application.secrets).to receive(:secret_key_base).and_return(nil)
+ end
+
+ it "does not create an organization" do
+ fill_in "Name", with: "Citizen Corp"
+ fill_in "Host", with: "www.example.org"
+ fill_in "Reference prefix", with: "CCORP"
+ fill_in "Organization admin name", with: "City Mayor"
+ fill_in "Organization admin email", with: "mayor@example.org"
+ click_on "Create organization & invite admin"
+
+ click_on "Show advanced settings"
+ expect(page).to have_content("You need to define the SECRET_KEY_BASE environment variable to be able to save this field")
+ end
+ end
end
describe "showing an organization with different locale than user" do
@@ -102,6 +144,21 @@
expect(page).to have_css("div.flash.success")
expect(page).to have_content("Citizens Rule!")
end
+
+ context "without the secret key defined" do
+ before do
+ allow(Rails.application.secrets).to receive(:secret_key_base).and_return(nil)
+ end
+
+ it "shows the error message" do
+ fill_in "Name", with: "Citizens Rule!"
+ fill_in "Host", with: "www.example.org"
+ click_on "Save"
+
+ click_on "Show advanced settings"
+ expect(page).to have_content("You need to define the SECRET_KEY_BASE environment variable to be able to save this field")
+ end
+ end
end
describe "editing an organization with disabled OmniAuth provider" do
diff --git a/decidim-templates/app/views/decidim/templates/admin/questionnaire_templates/_preview.html.erb b/decidim-templates/app/views/decidim/templates/admin/questionnaire_templates/_preview.html.erb
index 0050cdb90bb79..c2cbe2b588b57 100644
--- a/decidim-templates/app/views/decidim/templates/admin/questionnaire_templates/_preview.html.erb
+++ b/decidim-templates/app/views/decidim/templates/admin/questionnaire_templates/_preview.html.erb
@@ -14,7 +14,7 @@
- <%= decidim_form_for(@preview_form, url: "", method: :post, html: { class: "form answer-questionnaire" }, data: { "safe-path" => "" }) do |form| %>
+ <%= decidim_form_for(@preview_form, url: "", method: :post, authenticity_token: !defined?(skip_authenticity_token), html: { class: "form answer-questionnaire" }, data: { "safe-path" => "" }) do |form| %>
<%= invisible_captcha %>
<% answer_idx = 0 %>
<% cleaned_answer_idx = 0 %>
diff --git a/decidim-templates/app/views/decidim/templates/admin/questionnaire_templates/preview.js.erb b/decidim-templates/app/views/decidim/templates/admin/questionnaire_templates/preview.js.erb
index da247b34be757..3b43cbb5e9d12 100644
--- a/decidim-templates/app/views/decidim/templates/admin/questionnaire_templates/preview.js.erb
+++ b/decidim-templates/app/views/decidim/templates/admin/questionnaire_templates/preview.js.erb
@@ -7,5 +7,5 @@
$templateName.html("<%= translated_attribute @template.name %>");
$templateDescription.html("<%= translated_attribute @template.description %>");
- $preview.html("<%= j(render partial: "preview", locals: { questionnaire: @questionnaire }) %>");
+ $preview.html("<%= j(render partial: "preview", locals: { skip_authenticity_token: true, questionnaire: @questionnaire }) %>");
}());
diff --git a/decidim-templates/config/locales/bg.yml b/decidim-templates/config/locales/bg.yml
index d0e375da96f10..86d148de4a43c 100644
--- a/decidim-templates/config/locales/bg.yml
+++ b/decidim-templates/config/locales/bg.yml
@@ -1 +1,74 @@
+---
bg:
+ activemodel:
+ attributes:
+ questionnaire:
+ title: Заглавие
+ template:
+ description: Описание
+ name: Име
+ decidim:
+ admin:
+ menu:
+ templates: Шаблони
+ templates:
+ apply:
+ error: Възникна проблем при прилагането на този шаблон.
+ success: Шаблонът е приложен успешно
+ copy:
+ error: Възникна проблем при копирането на този шаблон.
+ success: Шаблонът е копиран успешно
+ create:
+ error: Възникна проблем при създаването на този шаблон.
+ success: Шаблонът е създаден успешно
+ destroy:
+ success: Шаблонът е изтрит успешно
+ empty: Все още няма шаблони.
+ update:
+ error: Възникна проблем при обновяването на този шаблон.
+ success: Шаблонът е обновен успешно
+ titles:
+ template_types:
+ questionnaires: Шаблони за въпросници
+ templates: Шаблони
+ models:
+ questionnaire_template:
+ fields:
+ questions: Брой въпроси
+ title: Заглавие на въпросник
+ template:
+ fields:
+ created_at: Създаден на
+ name: Шаблон
+ templates:
+ admin:
+ questionnaire_templates:
+ choose:
+ create_from_template: Създайте от шаблон
+ description: На път сте да създадете нов въпросник. Можете да изберете предварително дефиниран шаблон и да го промените след това.
+ label: Избор на шаблон
+ placeholder: Избор на шаблон
+ skip_template: Пропусни
+ edit:
+ edit: Редактирай
+ empty: Все още няма въпроси
+ questionnaire: Въпросник
+ form:
+ save: Запази
+ template_title: Информация за шаблона
+ title: Шаблон за въпросник %{questionnaire_for}
+ index:
+ confirm_delete: Сигурни ли сте, че желаете да изтриете този шаблон?
+ title: Шаблони за въпросници
+ preview:
+ current_step: Стъпка %{step}
+ of_total_steps: от %{total_steps}
+ tos_agreement: С участието си приемате Условията на услугата
+ admin_log:
+ template:
+ create: "%{user_name} създаде шаблона на въпросника %{resource_name}"
+ delete: "%{user_name} изтри шаблона на въпросника %{resource_name}"
+ duplicate: "%{user_name} дублира шаблона на въпросника %{resource_name}"
+ update: "%{user_name} актуализира шаблона на въпросника %{resource_name}"
+ template_types:
+ questionnaires: Въпросници
diff --git a/decidim-templates/config/locales/he-IL.yml b/decidim-templates/config/locales/he-IL.yml
new file mode 100644
index 0000000000000..af6fa60a73f2c
--- /dev/null
+++ b/decidim-templates/config/locales/he-IL.yml
@@ -0,0 +1 @@
+he:
diff --git a/decidim-templates/config/locales/pl.yml b/decidim-templates/config/locales/pl.yml
index f154b3042b1ab..1e81d8e6ea1a1 100644
--- a/decidim-templates/config/locales/pl.yml
+++ b/decidim-templates/config/locales/pl.yml
@@ -1,5 +1,12 @@
---
pl:
+ activemodel:
+ attributes:
+ questionnaire:
+ title: Tytuł
+ template:
+ description: Opis
+ name: Nazwa
decidim:
admin:
menu:
diff --git a/decidim-templates/decidim-templates.gemspec b/decidim-templates/decidim-templates.gemspec
index 787b80097903a..ccd970ce2c093 100644
--- a/decidim-templates/decidim-templates.gemspec
+++ b/decidim-templates/decidim-templates.gemspec
@@ -28,4 +28,6 @@ Gem::Specification.new do |s|
s.add_development_dependency "decidim-admin", Decidim::Templates.version
s.add_development_dependency "decidim-dev", Decidim::Templates.version
+ s.add_development_dependency "decidim-participatory_processes", Decidim::Templates.version
+ s.add_development_dependency "decidim-surveys", Decidim::Templates.version
end
diff --git a/decidim-templates/lib/decidim/templates/test/factories.rb b/decidim-templates/lib/decidim/templates/test/factories.rb
index ed94c23d09fe2..acb384f268bd2 100644
--- a/decidim-templates/lib/decidim/templates/test/factories.rb
+++ b/decidim-templates/lib/decidim/templates/test/factories.rb
@@ -5,28 +5,35 @@
FactoryBot.define do
factory :template, class: "Decidim::Templates::Template" do
+ transient do
+ skip_injection { false }
+ end
organization
- templatable { build(:dummy_resource) }
- name { Decidim::Faker::Localized.sentence }
+ name { generate_localized_title(:template_name, skip_injection: skip_injection) }
+ description { generate_localized_title(:template_description, skip_injection: skip_injection) }
+ templatable { build(:dummy_resource, skip_injection: skip_injection) }
## Questionnaire templates
factory :questionnaire_template do
+ transient do
+ skip_injection { false }
+ end
trait :with_questions do
- after(:create) do |template|
- template.templatable = create(:questionnaire, :with_questions, questionnaire_for: template)
+ after(:create) do |template, evaluator|
+ template.templatable = create(:questionnaire, :with_questions, questionnaire_for: template, skip_injection: evaluator.skip_injection)
template.save!
end
end
trait :with_all_questions do
- after(:create) do |template|
- template.templatable = create(:questionnaire, :with_all_questions, questionnaire_for: template)
+ after(:create) do |template, evaluator|
+ template.templatable = create(:questionnaire, :with_all_questions, questionnaire_for: template, skip_injection: evaluator.skip_injection)
template.save!
end
end
- after(:create) do |template|
- template.templatable = create(:questionnaire, questionnaire_for: template)
+ after(:create) do |template, evaluator|
+ template.templatable = create(:questionnaire, questionnaire_for: template, skip_injection: evaluator.skip_injection)
template.save!
end
end
diff --git a/decidim-templates/lib/decidim/templates/test/shared_examples/uses_questionnaire_templates.rb b/decidim-templates/lib/decidim/templates/test/shared_examples/uses_questionnaire_templates.rb
index fa180e608c57b..979af6e3f75cf 100644
--- a/decidim-templates/lib/decidim/templates/test/shared_examples/uses_questionnaire_templates.rb
+++ b/decidim-templates/lib/decidim/templates/test/shared_examples/uses_questionnaire_templates.rb
@@ -20,7 +20,7 @@
end
context "when there are templates" do
- let!(:templates) { create_list(:questionnaire_template, 6, :with_questions, organization: questionnaire.questionnaire_for.organization) }
+ let!(:templates) { create_list(:questionnaire_template, 6, :with_questions, skip_injection: true, organization: questionnaire.questionnaire_for.organization) }
let(:template) { templates.first }
let(:question) { template.templatable.questions.first }
@@ -74,7 +74,7 @@
end
describe "apply a template" do
- let!(:templates) { create_list(:questionnaire_template, 6, :with_questions, organization: questionnaire.questionnaire_for.organization) }
+ let!(:templates) { create_list(:questionnaire_template, 6, :with_questions, skip_injection: true, organization: questionnaire.questionnaire_for.organization) }
let(:template) { templates.first }
let(:question) { template.templatable.questions.first }
let(:questionnaire_question) { questionnaire.questions.first }
diff --git a/decidim-templates/lib/decidim/templates/version.rb b/decidim-templates/lib/decidim/templates/version.rb
index 966f103ae7a30..8fb03be24eeb5 100644
--- a/decidim-templates/lib/decidim/templates/version.rb
+++ b/decidim-templates/lib/decidim/templates/version.rb
@@ -4,7 +4,7 @@ module Decidim
# This holds the decidim-templates version.
module Templates
def self.version
- "0.27.5"
+ "0.27.6"
end
end
end
diff --git a/decidim-templates/spec/factories.rb b/decidim-templates/spec/factories.rb
index 02f6849bb118b..e755d0639ccae 100644
--- a/decidim-templates/spec/factories.rb
+++ b/decidim-templates/spec/factories.rb
@@ -3,3 +3,4 @@
require "decidim/core/test/factories"
require "decidim/forms/test/factories"
require "decidim/templates/test/factories"
+require "decidim/participatory_processes/test/factories"
diff --git a/decidim-templates/spec/system/admin/admin_applies_questionnaire_template_to_component_spec.rb b/decidim-templates/spec/system/admin/admin_applies_questionnaire_template_to_component_spec.rb
new file mode 100644
index 0000000000000..17d215c798b16
--- /dev/null
+++ b/decidim-templates/spec/system/admin/admin_applies_questionnaire_template_to_component_spec.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+require "spec_helper"
+
+describe "Admin applies questionnaire templates", type: :system do
+ let!(:organization) { create(:organization) }
+ let!(:user) { create(:user, :admin, :confirmed, organization: organization) }
+ let!(:participatory_space) { create(:participatory_process, organization: organization) }
+ let!(:component) { create(:component, participatory_space: participatory_space) }
+ let!(:questionnaire_template) { create(:questionnaire_template, :with_all_questions, organization: organization, skip_injection: true) }
+
+ around do |example|
+ ActionController::Base.allow_forgery_protection = true
+ example.run
+ ActionController::Base.allow_forgery_protection = false
+ end
+
+ before do
+ switch_to_host(organization.host)
+ login_as user, scope: :user
+ visit decidim_admin_participatory_processes.components_path(participatory_space)
+ end
+
+ it "installs a survey component" do
+ find("button[data-toggle=add-component-dropdown]").click
+
+ within "#add-component-dropdown" do
+ find(".surveys").click
+ end
+
+ click_on "Add component"
+ click_on "Survey"
+
+ page.all("svg.icon--pencil")[1].click
+
+ select(translated_attribute(questionnaire_template.name), from: "select-template")
+ expect(page).to have_content("If you are human, ignore this field")
+ click_on "Create from template"
+
+ expect(page).to have_content("Template applied successfully")
+ end
+end
diff --git a/decidim-verifications/config/locales/bg.yml b/decidim-verifications/config/locales/bg.yml
index 88bcfe13feb4f..30c928daa02cb 100644
--- a/decidim-verifications/config/locales/bg.yml
+++ b/decidim-verifications/config/locales/bg.yml
@@ -3,17 +3,279 @@ bg:
activemodel:
attributes:
config:
- available_methods: Достъпни методи
- offline: Извън линия
- offline_explanation: Инструкции за проверка извън линия
- online: На линия
+ available_methods: Възможни методи
+ offline: Офлайн
+ offline_explanation: Инструкции за офлайн верификация
+ online: Онлайн
+ confirmation:
+ verification_code: Код за потвърждение
id_document_information:
document_number: Номер на документ (с буквите)
document_type: Тип на документа
+ id_document_upload:
+ document_number: Номер на документа (с буква)
+ document_type: Тип на Вашия документ
+ user: Участник
+ verification_attachment: Сканирано копие на Вашия документ
+ mobile_phone:
+ mobile_phone_number: Номер на мобилен телефон
+ offline_confirmation:
+ email: Имейл на участника
+ postal_letter_address:
+ full_address: Пълен адрес
+ postal_letter_confirmation:
+ verification_code: Код за потвърждение
+ postal_letter_postage:
+ full_address: Пълен адрес
+ verification_code: Код за потвърждение
+ errors:
+ models:
+ census_data:
+ attributes:
+ file:
+ malformed: Неправилен файл за импортиране, моля, прочетете внимателно инструкциите и се уверете, че файлът е UTF-8 кодиран.
decidim:
+ admin:
+ menu:
+ authorization_revocation:
+ before_date_info: Полезна функция, ако процесът вече е започнал и искате да анулирате разрешенията на предходния процес.
+ button: Отмени всичко
+ button_before: Отмени преди дата
+ destroy:
+ confirm: Отмяната на оторизациите преди определена дата е действие, което не може да бъде отменено. Сигурни ли сте, че искате да продължите?
+ confirm_all: Отмяната на всички оторизации е действие, което не може да бъде отменено. Сигурни ли сте, че искате да продължите?
+ destroy_nok: Възникна проблем при отмяната на оторизации.
+ destroy_ok: Всички съвпадащи оторизации бяха отменени успешно.
+ info: Има общо %{count} потвърдени участници.
+ no_data: Няма потвърдени участници
+ title: Оторизации за отмяна
+ authorization_workflows: Оторизации
+ admin_log:
+ organization:
+ update_id_documents_config: "%{user_name} актуализира конфигурацията за оторизация на документи за самоличност"
+ user:
+ grant_id_documents_offline_verification: "%{user_name} потвърди %{resource_name}, като използва офлайн проверка на документите за самоличност"
+ authorization_handlers:
+ admin:
+ csv_census:
+ help:
+ - Администраторите качват CSV с имейлите на приетите участници
+ - Само участници с имейл в този CSV файл могат да бъдат потвърдени
+ id_documents:
+ help:
+ - Потребителите попълват своята информация за самоличност и качват копие на своя документ.
+ - Попълнете информацията, присъстваща в каченото изображение.
+ - Информацията трябва да съответства на това, което е попълнил потребителят.
+ - Ако не можете да видите ясно информацията или не можете да я проверите, можете да отхвърлите заявката и потребителят ще има възможността да я коригира.
+ postal_letter:
+ help:
+ - Участниците искат да им бъде изпратен код за потвърждение на техния адрес.
+ - Изпращате писмото до техния адрес с кода за потвърждение.
+ - Маркирате писмото като "изпратено".
+ - След като маркирате писмото като изпратено, участникът ще може да въведе кода и да бъде потвърден.
+ csv_census:
+ explanation: Потвърждение чрез преброяването на участниците в организацията
+ name: Преброяване на участниците в организацията
+ direct: Директен
+ help: Помощ
+ id_documents:
+ explanation: Качете документите си за самоличност, за да можем да проверим самоличността Ви
+ name: Документи за самоличност
+ multistep: Много-стъпков
+ name: Име
+ postal_letter:
+ explanation: Ще Ви изпратим писмо по пощата с код, който ще трябва да въведете, за да потвърдим адреса Ви
+ name: Код с писмо по пощата
+ events:
+ verifications:
+ verify_with_managed_user:
+ email_intro: Участникът %{resource_title} се е опитал да се удостовери с данните на друг участник ( %{managed_user_name}).
+ email_outro: Проверете Списък с конфликти при верификация и се свържете с участника, за да потвърдите данните му и да разрешите проблема.
+ email_subject: Неуспешен опит за проверка към друг участник
+ notification_title: Участникът %{resource_title} се е опитал да се удостовери с данните на друг участник ( %{managed_user_name}).
verifications:
+ authorizations:
+ authorization_metadata:
+ info: 'Това са данните от текущото потвърждение:'
+ no_data_stored: Няма съхранени данни.
+ create:
+ error: Възникна проблем при създаването на оторизацията.
+ success: Успешно се удостоверихте.
+ unconfirmed: Трябва да потвърдите имейла си, с оглед на Вашата оторизация.
+ destroy:
+ error: Възникна проблем при изтриването на оторизацията.
+ success: Успешно изтрихте удостоверяването.
+ first_login:
+ actions:
+ another_dummy_authorization_handler: Проверка спрямо друг манипулатор на оторизации
+ csv_census: Проверка спрямо преброяването на участниците в организацията
+ dummy_authorization_handler: Проверка спрямо примерния инструмент за оторизация
+ dummy_authorization_workflow: Проверка спрямо примерния работен процес за оторизиране
+ id_documents: Потвърдете самоличността си, като качите документ за самоличност
+ postal_letter: Верифицирайте се, чрез получаване на оторизационен код по пощата
+ sms: Верифицирайте се, чрез получаване на оторизационен код с SMS
+ title: Потвърждение на Вашата самоличност
+ verify_with_these_options: 'Това са възможните опции, с които да потвърдите самоличността си:'
+ index:
+ expired_verification: Изтекло потвърждение
+ pending_verification: Очаква проверка
+ show_renew_info: Щракнете, за да подновите верификацията
+ unauthorized_verification: Ново потвърждение
+ new:
+ authorize: Изпрати
+ authorize_with: Потвърждение чрез %{authorizer}
+ renew_modal:
+ cancel: Отмяна
+ close: затваряне
+ continue: Продължи
+ info_renew: Ако искате да актуализирате данните, продължете с подновяването
+ title: Подновяване на верификацията
+ skip_verification: Можете да пропуснете това засега и %{link}
+ start_exploring: започнете да разглеждате
+ csv_census:
+ admin:
+ census:
+ create:
+ error: Възникна грешка при импортирането на преброяването.
+ success: Успешно бяха импортирани %{count} елемента (%{errors} грешки)
+ destroy_all:
+ success: Всички данни от преброяването бяха изтрити
+ destroy:
+ confirm: Изтриването на преброяването е действие, което не може да бъде отменено. Сигурни ли сте, че искате да продължите?
+ title: Изтриване на всички данни от преброяването
+ index:
+ data: Заредени са общо %{count} записа. Датата на последното качване е на %{due_date}
+ empty: Няма данни от преброяването. Използвайте формуляра по-долу, за да ги импортирате чрез файл във формат CSV.
+ title: Текущи данни от преброяването
+ instructions:
+ body: За тази цел трябва да влезете в администрацията на системата и да добавите оторизация за csv_census в организацията
+ title: Трябва да активирате преброяването чрез файл във формат CSV за тази организация
+ new:
+ file: "файл във формат .csv с данни за електронните пощи"
+ info: 'Трябва да бъде файл във формат CSV, съдържащ само една колона с електронната поща:'
+ submit: Качване на файл
+ title: Качване на ново преброяване
+ authorizations:
+ new:
+ error: Не можахме да потвърдим вашия акаунт или не сте в преброяването на организацията.
+ success: Профилът Ви беше потвърден успешно.
dummy_authorization:
extra_explanation:
postal_codes:
one: Участието е ограничено до участници с пощенски код %{postal_codes}.
other: 'Участието е ограничено до участници с пощенски кодове %{postal_codes}.'
+ scope: Участието е ограничено до участници в обхвата %{scope_name}.
+ user_postal_codes:
+ one: Участието е ограничено до участници с пощенски код %{postal_codes}, а вашият пощенски код е %{user_postal_code}.
+ other: 'Участието е ограничено до участници с някой от следните пощенски кодове: %{postal_codes}. Вашият пощенски код е %{user_postal_code}.'
+ user_scope: Участието е ограничено до участници с обхват %{scope_name}, а вашият обхват е %{user_scope_name}.
+ id_documents:
+ admin:
+ config:
+ edit:
+ title: Конфигурация на документите за самоличност
+ update: Обновяване
+ update:
+ error: Възникна проблем при актуализирането на конфигурацията.
+ success: Конфигурирането е успешно обновено
+ confirmations:
+ create:
+ error: Потвърждението не съвпада. Моля, опитайте отново или отхвърлете потвърждението, за да може участникът да го коригира.
+ success: Участникът беше потвърден успешно
+ new:
+ introduce_user_data: Въведете данните от изображението
+ reject: Откажи
+ verify: Провери
+ offline_confirmations:
+ create:
+ error: Потвърждението не съвпада. Моля, опитайте отново или кажете на участника да го коригира
+ success: Участникът беше потвърден успешно
+ new:
+ cancel: Отказ
+ introduce_user_data: Въведете електронната поща на участника и данните от документа
+ verify: Провери
+ pending_authorizations:
+ index:
+ config: Конфигуриране
+ offline_verification: Офлайн проверка
+ title: Изчакващи онлайн проверки
+ verification_number: 'Верификация #%{n}'
+ rejections:
+ create:
+ success: Потвърждението беше отхвърлено. Участниците ще получат напомняне да коригират документите си
+ authorizations:
+ choose:
+ choose_a_type: 'Моля, изберете как искате да бъдете проверен:'
+ offline: Офлайн
+ online: Онлайн
+ title: Потвърдете личноста си, чрез документ за самоличност
+ create:
+ error: Възникна грешка при качването на документа Ви
+ success: Документът беше качен успешно
+ edit:
+ being_reviewed: Преглеждаме документите Ви. Скоро ще потвърдим самоличността Ви.
+ offline: Използване на офлайн верификация
+ online: Използване на онлайн верификация
+ rejection_clarity: Уверете се, че информацията се вижда ясно в каченото изображение
+ rejection_correctness: Уверете се, че въведената информация е правилна
+ rejection_notice: Възникна проблем с потвърждението на самоличността Ви. Моля, опитайте отново
+ send: Заявете верификация отново
+ new:
+ send: Заявете верификация
+ title: Качете Вашия документ за самоличност
+ update:
+ error: Възникна грешка при повторното качване на документа Ви.
+ success: Документът беше успешно качен повторно.
+ identification_number: ЕГН
+ passport: Паспорт/лична карта
+ postal_letter:
+ admin:
+ pending_authorizations:
+ index:
+ address: Адрес
+ letter_sent_at: Писмо изпратено на
+ mark_as_sent: Маркирй като "изпратено"
+ not_yet_sent: Все още не е изпратено
+ title: Изходящи верификации
+ username: Псевдоним
+ verification_code: Код за потвърждение
+ postages:
+ create:
+ error: Грешка при обозначаването на писмото като "изпратено".
+ success: Писмото беше обозначено успешно като "изпратено".
+ authorizations:
+ create:
+ error: Възникна проблем със заявката Ви
+ success: Благодарим Ви! Ще изпратим код за потвърждение на Вашия адрес
+ edit:
+ send: Потвърди
+ title: Въведете кода за потвърждение, който получихте
+ waiting_for_letter: Скоро ще изпратим писмо с код за потвърждение на Вашия адрес
+ new:
+ send: Изпратете ми писмо
+ title: Заявете кода си за потвърждение
+ update:
+ error: Кодът Ви за потвърждение не съвпада с нашия. Моля, проверете отново писмото, което Ви изпратихме
+ success: Поздравления! Успешно потвърдихте самоличността си.
+ sms:
+ authorizations:
+ create:
+ error: Възникна проблем със заявката Ви
+ success: Благодарим Ви! Изпратихме SMS на Вашия телефон..
+ destroy:
+ success: Кодът за потвърждение беше успешно презареден. Моля, въведете повторно телефонния си номер.
+ edit:
+ confirm_destroy: Сигурни ли сте, че желаете да преиздадете кода за потвърждение?
+ destroy: Преиздаване на код за потвърждение
+ resend: Не получихте ли кода за потвърждение?
+ send: Потвърди
+ title: Въведете кода за потвърждение, който получихте
+ new:
+ send: Изпратете ми SMS
+ title: Заявете кода си за потвърждение
+ update:
+ error: Кодът Ви за потвърждение не съвпада с нашия. Моля, проверете отново съобщението, което Ви изпратихме със SMS.
+ success: Поздравления. Успешно потвърдихте самоличността си.
+ errors:
+ messages:
+ uppercase_only_letters_numbers: трябва да бъде само с главни букви и да съдържа само букви и/или цифри
diff --git a/decidim-verifications/config/locales/he-IL.yml b/decidim-verifications/config/locales/he-IL.yml
new file mode 100644
index 0000000000000..af6fa60a73f2c
--- /dev/null
+++ b/decidim-verifications/config/locales/he-IL.yml
@@ -0,0 +1 @@
+he:
diff --git a/decidim-verifications/config/locales/pl.yml b/decidim-verifications/config/locales/pl.yml
index 311549bcdbb12..18e4275bda73a 100644
--- a/decidim-verifications/config/locales/pl.yml
+++ b/decidim-verifications/config/locales/pl.yml
@@ -76,6 +76,13 @@ pl:
postal_letter:
explanation: Wyślemy Ci list pocztowy z kodem, który musisz wprowadzić, abyśmy mogli zweryfikować twój adres
name: Kod listem pocztowym
+ events:
+ verifications:
+ verify_with_managed_user:
+ email_intro: Uczestnik %{resource_title} próbował zweryfikować siebie z danymi innego uczestnika ( %{managed_user_name}).
+ email_outro: Sprawdź listę konfliktów weryfikacji i skontaktuj się z uczestnikiem, aby zweryfikować jego dane i rozwiązać problem.
+ email_subject: Nieudana próba weryfikacji względem innego uczestnika
+ notification_title: Uczestnik %{resource_title} próbował zweryfikować siebie z danymi innego uczestnika ( %{managed_user_name}).
verifications:
authorizations:
authorization_metadata:
@@ -210,6 +217,9 @@ pl:
new:
send: Poproś o weryfikację
title: Prześlij swój dokument tożsamości
+ update:
+ error: Podczas ponownego ładowania dokumentu wystąpił błąd.
+ success: Ponowne przesyłanie dokumentu się powiodło.
identification_number: Numer identyfikacyjny
passport: Paszport
postal_letter:
diff --git a/decidim-verifications/lib/decidim/verifications/test/factories.rb b/decidim-verifications/lib/decidim/verifications/test/factories.rb
index e0c2128f50ed3..b2d251fd348b9 100644
--- a/decidim-verifications/lib/decidim/verifications/test/factories.rb
+++ b/decidim-verifications/lib/decidim/verifications/test/factories.rb
@@ -5,13 +5,19 @@
FactoryBot.define do
factory :csv_datum, class: "Decidim::Verifications::CsvDatum" do
+ transient do
+ skip_injection { false }
+ end
email { generate(:email) }
organization
end
factory :conflict, class: "Decidim::Verifications::Conflict" do
- current_user { create(:user) }
- managed_user { create(:user, managed: true, organization: current_user.organization) }
+ transient do
+ skip_injection { false }
+ end
+ current_user { create(:user, skip_injection: skip_injection) }
+ managed_user { create(:user, managed: true, organization: current_user.organization, skip_injection: skip_injection) }
unique_id { "12345678X" }
times { 1 }
end
diff --git a/decidim-verifications/lib/decidim/verifications/version.rb b/decidim-verifications/lib/decidim/verifications/version.rb
index 687770f719ba7..4b06e62e62f42 100644
--- a/decidim-verifications/lib/decidim/verifications/version.rb
+++ b/decidim-verifications/lib/decidim/verifications/version.rb
@@ -4,7 +4,7 @@ module Decidim
# This holds the decidim-verifications version.
module Verifications
def self.version
- "0.27.5"
+ "0.27.6"
end
end
end
diff --git a/decidim_app-design/Gemfile.lock b/decidim_app-design/Gemfile.lock
index aea3d209b8151..1529531b5f5bf 100644
--- a/decidim_app-design/Gemfile.lock
+++ b/decidim_app-design/Gemfile.lock
@@ -1,63 +1,63 @@
PATH
remote: ..
specs:
- decidim (0.27.5)
- decidim-accountability (= 0.27.5)
- decidim-admin (= 0.27.5)
- decidim-api (= 0.27.5)
- decidim-assemblies (= 0.27.5)
- decidim-blogs (= 0.27.5)
- decidim-budgets (= 0.27.5)
- decidim-comments (= 0.27.5)
- decidim-core (= 0.27.5)
- decidim-debates (= 0.27.5)
- decidim-forms (= 0.27.5)
- decidim-generators (= 0.27.5)
- decidim-meetings (= 0.27.5)
- decidim-pages (= 0.27.5)
- decidim-participatory_processes (= 0.27.5)
- decidim-proposals (= 0.27.5)
- decidim-sortitions (= 0.27.5)
- decidim-surveys (= 0.27.5)
- decidim-system (= 0.27.5)
- decidim-templates (= 0.27.5)
- decidim-verifications (= 0.27.5)
- decidim-accountability (0.27.5)
- decidim-comments (= 0.27.5)
- decidim-core (= 0.27.5)
- decidim-admin (0.27.5)
+ decidim (0.27.6)
+ decidim-accountability (= 0.27.6)
+ decidim-admin (= 0.27.6)
+ decidim-api (= 0.27.6)
+ decidim-assemblies (= 0.27.6)
+ decidim-blogs (= 0.27.6)
+ decidim-budgets (= 0.27.6)
+ decidim-comments (= 0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-debates (= 0.27.6)
+ decidim-forms (= 0.27.6)
+ decidim-generators (= 0.27.6)
+ decidim-meetings (= 0.27.6)
+ decidim-pages (= 0.27.6)
+ decidim-participatory_processes (= 0.27.6)
+ decidim-proposals (= 0.27.6)
+ decidim-sortitions (= 0.27.6)
+ decidim-surveys (= 0.27.6)
+ decidim-system (= 0.27.6)
+ decidim-templates (= 0.27.6)
+ decidim-verifications (= 0.27.6)
+ decidim-accountability (0.27.6)
+ decidim-comments (= 0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-admin (0.27.6)
active_link_to (~> 1.0)
- decidim-core (= 0.27.5)
+ decidim-core (= 0.27.6)
devise (~> 4.7)
devise-i18n (~> 1.2)
devise_invitable (~> 2.0, >= 2.0.9)
- decidim-api (0.27.5)
- decidim-core (= 0.27.5)
+ decidim-api (0.27.6)
+ decidim-core (= 0.27.6)
graphql (~> 1.12, < 1.13)
graphql-docs (~> 2.1.0)
rack-cors (~> 1.0)
- decidim-assemblies (0.27.5)
- decidim-core (= 0.27.5)
- decidim-blogs (0.27.5)
- decidim-admin (= 0.27.5)
- decidim-comments (= 0.27.5)
- decidim-core (= 0.27.5)
- decidim-budgets (0.27.5)
- decidim-comments (= 0.27.5)
- decidim-core (= 0.27.5)
- decidim-comments (0.27.5)
- decidim-core (= 0.27.5)
+ decidim-assemblies (0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-blogs (0.27.6)
+ decidim-admin (= 0.27.6)
+ decidim-comments (= 0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-budgets (0.27.6)
+ decidim-comments (= 0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-comments (0.27.6)
+ decidim-core (= 0.27.6)
redcarpet (~> 3.5, >= 3.5.1)
- decidim-conferences (0.27.5)
- decidim-core (= 0.27.5)
- decidim-meetings (= 0.27.5)
+ decidim-conferences (0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-meetings (= 0.27.6)
wicked_pdf (~> 2.1)
wkhtmltopdf-binary (~> 0.12)
- decidim-consultations (0.27.5)
- decidim-admin (= 0.27.5)
- decidim-comments (= 0.27.5)
- decidim-core (= 0.27.5)
- decidim-core (0.27.5)
+ decidim-consultations (0.27.6)
+ decidim-admin (= 0.27.6)
+ decidim-comments (= 0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-core (0.27.6)
active_link_to (~> 1.0)
acts_as_list (~> 0.9)
batch-loader (~> 1.2)
@@ -82,7 +82,6 @@ PATH
loofah (~> 2.19.0)
mime-types (>= 1.16, < 4.0)
mini_magick (~> 4.9)
- mustache (~> 1.1.0)
omniauth (~> 2.0)
omniauth-facebook (~> 5.0)
omniauth-google-oauth2 (~> 1.0)
@@ -107,15 +106,15 @@ PATH
webpacker (= 6.0.0.rc.5)
webpush (~> 1.1)
wisper (~> 2.0)
- decidim-debates (0.27.5)
- decidim-comments (= 0.27.5)
- decidim-core (= 0.27.5)
- decidim-dev (0.27.5)
+ decidim-debates (0.27.6)
+ decidim-comments (= 0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-dev (0.27.6)
axe-core-rspec (~> 4.1.0)
byebug (~> 11.0)
capybara (~> 3.24)
db-query-matchers (~> 0.10.0)
- decidim (= 0.27.5)
+ decidim (= 0.27.6)
erb_lint (~> 0.0.35)
factory_bot_rails (~> 4.8)
i18n-tasks (~> 0.9.18)
@@ -138,62 +137,62 @@ PATH
w3c_rspec_validators (~> 0.3.0)
webmock (~> 3.6)
wisper-rspec (~> 1.0)
- decidim-elections (0.27.5)
+ decidim-elections (0.27.6)
decidim-bulletin_board (= 0.23)
- decidim-core (= 0.27.5)
- decidim-forms (= 0.27.5)
- decidim-proposals (= 0.27.5)
+ decidim-core (= 0.27.6)
+ decidim-forms (= 0.27.6)
+ decidim-proposals (= 0.27.6)
rack-attack (~> 6.0)
voting_schemes-dummy (= 0.23)
voting_schemes-electionguard (= 0.23)
- decidim-forms (0.27.5)
- decidim-core (= 0.27.5)
+ decidim-forms (0.27.6)
+ decidim-core (= 0.27.6)
wicked_pdf (~> 2.1)
wkhtmltopdf-binary (~> 0.12)
- decidim-generators (0.27.5)
- decidim-core (= 0.27.5)
- decidim-initiatives (0.27.5)
- decidim-admin (= 0.27.5)
- decidim-comments (= 0.27.5)
- decidim-core (= 0.27.5)
- decidim-verifications (= 0.27.5)
+ decidim-generators (0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-initiatives (0.27.6)
+ decidim-admin (= 0.27.6)
+ decidim-comments (= 0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-verifications (= 0.27.6)
origami (~> 2.1)
rexml (~> 3.2.5)
wicked (~> 1.3)
wicked_pdf (~> 2.1)
wkhtmltopdf-binary (~> 0.12)
- decidim-meetings (0.27.5)
- decidim-core (= 0.27.5)
- decidim-forms (= 0.27.5)
+ decidim-meetings (0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-forms (= 0.27.6)
icalendar (~> 2.5)
- decidim-pages (0.27.5)
- decidim-core (= 0.27.5)
- decidim-participatory_processes (0.27.5)
- decidim-core (= 0.27.5)
- decidim-proposals (0.27.5)
- decidim-comments (= 0.27.5)
- decidim-core (= 0.27.5)
+ decidim-pages (0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-participatory_processes (0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-proposals (0.27.6)
+ decidim-comments (= 0.27.6)
+ decidim-core (= 0.27.6)
doc2text (~> 0.4.5)
redcarpet (~> 3.5, >= 3.5.1)
- decidim-sortitions (0.27.5)
- decidim-admin (= 0.27.5)
- decidim-comments (= 0.27.5)
- decidim-core (= 0.27.5)
- decidim-proposals (= 0.27.5)
- decidim-surveys (0.27.5)
- decidim-core (= 0.27.5)
- decidim-forms (= 0.27.5)
- decidim-system (0.27.5)
+ decidim-sortitions (0.27.6)
+ decidim-admin (= 0.27.6)
+ decidim-comments (= 0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-proposals (= 0.27.6)
+ decidim-surveys (0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-forms (= 0.27.6)
+ decidim-system (0.27.6)
active_link_to (~> 1.0)
- decidim-core (= 0.27.5)
+ decidim-core (= 0.27.6)
devise (~> 4.7)
devise-i18n (~> 1.2)
devise_invitable (~> 2.0, >= 2.0.9)
- decidim-templates (0.27.5)
- decidim-core (= 0.27.5)
- decidim-forms (= 0.27.5)
- decidim-verifications (0.27.5)
- decidim-core (= 0.27.5)
+ decidim-templates (0.27.6)
+ decidim-core (= 0.27.6)
+ decidim-forms (= 0.27.6)
+ decidim-verifications (0.27.6)
+ decidim-core (= 0.27.6)
GEM
remote: https://rubygems.org/
@@ -265,7 +264,7 @@ GEM
addressable (2.8.6)
public_suffix (>= 2.0.2, < 6.0)
ast (2.4.2)
- axe-core-api (4.8.0)
+ axe-core-api (4.9.0)
dumb_delegator
virtus
axe-core-rspec (4.1.0)
@@ -287,6 +286,7 @@ GEM
html_tokenizer (~> 0.0.6)
parser (>= 2.4)
smart_properties
+ bigdecimal (3.1.7)
bindex (0.8.1)
bootsnap (1.10.3)
msgpack (~> 1.2)
@@ -294,16 +294,16 @@ GEM
browser (2.7.1)
builder (3.2.4)
byebug (11.1.3)
- capybara (3.39.2)
+ capybara (3.40.0)
addressable
matrix
mini_mime (>= 0.1.3)
- nokogiri (~> 1.8)
+ nokogiri (~> 1.11)
rack (>= 1.6.0)
rack-test (>= 0.6.3)
regexp_parser (>= 1.5, < 3.0)
xpath (~> 3.2)
- carrierwave (2.2.5)
+ carrierwave (2.2.6)
activemodel (>= 5.0.0)
activesupport (>= 5.0.0)
addressable (~> 2.6)
@@ -323,7 +323,7 @@ GEM
actionpack (>= 5.0)
cells (>= 4.1.6, < 5.0.0)
charlock_holmes (0.7.7)
- chef-utils (18.3.0)
+ chef-utils (18.4.12)
concurrent-ruby
childprocess (4.1.0)
coercible (1.0.0)
@@ -338,10 +338,11 @@ GEM
colorize (0.8.1)
commonmarker (0.23.10)
concurrent-ruby (1.2.3)
- crack (0.4.5)
+ crack (1.0.0)
+ bigdecimal
rexml
crass (1.0.6)
- css_parser (1.16.0)
+ css_parser (1.17.1)
addressable
date (3.3.4)
date_validator (0.12.0)
@@ -361,7 +362,7 @@ GEM
declarative-option (0.1.0)
descendants_tracker (0.0.4)
thread_safe (~> 0.3, >= 0.3.1)
- devise (4.9.3)
+ devise (4.9.4)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 4.1.0)
@@ -372,13 +373,13 @@ GEM
devise_invitable (2.0.9)
actionmailer (>= 5.0)
devise (>= 4.6)
- diff-lcs (1.5.0)
+ diff-lcs (1.5.1)
diffy (3.4.2)
doc2text (0.4.7)
nokogiri (>= 1.13.2, < 1.17.0)
rubyzip (~> 2.3.0)
docile (1.4.0)
- doorkeeper (5.6.9)
+ doorkeeper (5.7.0)
railties (>= 5)
doorkeeper-i18n (4.0.1)
dumb_delegator (1.0.0)
@@ -394,7 +395,7 @@ GEM
temple
erubi (1.12.0)
escape_utils (1.3.0)
- excon (0.109.0)
+ excon (0.110.0)
execjs (2.9.1)
extended-markdown-filter (0.7.0)
html-pipeline (~> 2.9)
@@ -456,7 +457,7 @@ GEM
faraday_middleware
graphql-client
graphql (1.12.24)
- graphql-client (0.18.0)
+ graphql-client (0.19.0)
activesupport (>= 3.0)
graphql
graphql-docs (2.1.0)
@@ -469,12 +470,12 @@ GEM
sass (~> 3.4)
hashdiff (1.1.0)
hashie (5.0.0)
- highline (2.1.0)
+ highline (3.0.1)
hkdf (0.3.0)
html-pipeline (2.14.3)
activesupport (>= 2)
nokogiri (>= 1.4)
- html_tokenizer (0.0.7)
+ html_tokenizer (0.0.8)
htmlentities (4.3.4)
i18n (1.14.1)
concurrent-ruby (~> 1.0)
@@ -497,7 +498,7 @@ GEM
ruby-vips (>= 2.0.17, < 3)
invisible_captcha (0.13.0)
rails (>= 3.2.0)
- json (2.7.1)
+ json (2.7.2)
jwt (2.2.3)
kaminari (1.2.2)
activesupport (>= 4.1.0)
@@ -535,7 +536,7 @@ GEM
net-imap
net-pop
net-smtp
- marcel (1.0.2)
+ marcel (1.0.4)
matrix (0.4.2)
mdl (0.13.0)
kramdown (~> 2.3)
@@ -546,7 +547,7 @@ GEM
method_source (1.0.0)
mime-types (3.5.2)
mime-types-data (~> 3.2015)
- mime-types-data (3.2024.0206)
+ mime-types-data (3.2024.0305)
mini_magick (4.12.0)
mini_mime (1.1.5)
mini_portile2 (2.8.5)
@@ -559,7 +560,6 @@ GEM
msgpack (1.4.5)
multi_xml (0.6.0)
multipart-post (2.4.0)
- mustache (1.1.1)
net-imap (0.4.10)
date
net-protocol
@@ -592,11 +592,11 @@ GEM
rack-protection
omniauth-facebook (5.0.0)
omniauth-oauth2 (~> 1.2)
- omniauth-google-oauth2 (1.1.1)
+ omniauth-google-oauth2 (1.1.2)
jwt (>= 2.0)
- oauth2 (~> 2.0.6)
+ oauth2 (~> 2.0)
omniauth (~> 2.0)
- omniauth-oauth2 (~> 1.8.0)
+ omniauth-oauth2 (~> 1.8)
omniauth-oauth (1.2.0)
oauth
omniauth (>= 1.0, < 3)
@@ -624,7 +624,7 @@ GEM
pg_search (2.3.6)
activerecord (>= 5.2)
activesupport (>= 5.2)
- premailer (1.22.0)
+ premailer (1.23.0)
addressable
css_parser (>= 1.12.0)
htmlentities (>= 4.0.0)
@@ -700,24 +700,24 @@ GEM
actionpack (>= 5.2)
railties (>= 5.2)
rexml (3.2.5)
- rspec (3.12.0)
- rspec-core (~> 3.12.0)
- rspec-expectations (~> 3.12.0)
- rspec-mocks (~> 3.12.0)
+ rspec (3.13.0)
+ rspec-core (~> 3.13.0)
+ rspec-expectations (~> 3.13.0)
+ rspec-mocks (~> 3.13.0)
rspec-cells (0.3.9)
cells (>= 4.0.0, < 6.0.0)
rspec-rails (>= 3.0.0, < 6.2.0)
- rspec-core (3.12.2)
- rspec-support (~> 3.12.0)
- rspec-expectations (3.12.3)
+ rspec-core (3.13.0)
+ rspec-support (~> 3.13.0)
+ rspec-expectations (3.13.0)
diff-lcs (>= 1.2.0, < 2.0)
- rspec-support (~> 3.12.0)
+ rspec-support (~> 3.13.0)
rspec-html-matchers (0.9.4)
nokogiri (~> 1)
rspec (>= 3.0.0.a, < 4)
- rspec-mocks (3.12.6)
+ rspec-mocks (3.13.0)
diff-lcs (>= 1.2.0, < 2.0)
- rspec-support (~> 3.12.0)
+ rspec-support (~> 3.13.0)
rspec-rails (4.1.2)
actionpack (>= 4.2)
activesupport (>= 4.2)
@@ -728,7 +728,7 @@ GEM
rspec-support (~> 3.10)
rspec-retry (0.6.2)
rspec-core (> 3.3)
- rspec-support (3.12.1)
+ rspec-support (3.13.1)
rspec_junit_formatter (0.3.0)
rspec-core (>= 2, < 4, != 2.12.0)
rubocop (1.28.2)
@@ -752,10 +752,10 @@ GEM
rubocop-rspec (2.11.1)
rubocop (~> 1.19)
ruby-progressbar (1.11.0)
- ruby-vips (2.2.0)
+ ruby-vips (2.2.1)
ffi (~> 1.12)
ruby2_keywords (0.0.5)
- rubyXL (3.4.25)
+ rubyXL (3.4.27)
nokogiri (>= 1.10.8)
rubyzip (>= 1.3.0)
rubyzip (2.3.2)
@@ -812,7 +812,7 @@ GEM
valid_email2 (2.3.1)
activemodel (>= 3.2)
mail (~> 2.5)
- version_gem (1.1.3)
+ version_gem (1.1.4)
virtus (2.0.0)
axiom-types (~> 0.1)
coercible (~> 1.0)
@@ -836,7 +836,7 @@ GEM
activemodel (>= 6.0.0)
bindex (>= 0.4.0)
railties (>= 6.0.0)
- webmock (3.19.1)
+ webmock (3.23.0)
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
@@ -853,7 +853,7 @@ GEM
websocket-extensions (0.1.5)
wicked (1.4.0)
railties (>= 3.0.7)
- wicked_pdf (2.7.0)
+ wicked_pdf (2.8.0)
activesupport
wisper (2.0.1)
wisper-rspec (1.1.0)
diff --git a/decidim_app-design/package-lock.json b/decidim_app-design/package-lock.json
index 258ffc6db0061..b69344dfbe5e2 100644
--- a/decidim_app-design/package-lock.json
+++ b/decidim_app-design/package-lock.json
@@ -11073,18 +11073,21 @@
}
},
"node_modules/leaflet": {
- "version": "1.3.1",
- "integrity": "sha512-adQOIzh+bfdridLM1xIgJ9VnJbAUY3wqs/ueF+ITla+PLQ1z47USdBKUf+iD9FuUA8RtlT6j6hZBfZoA6mW+XQ=="
+ "version": "1.9.4",
+ "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz",
+ "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA=="
},
"node_modules/leaflet-tilelayer-here": {
- "version": "1.0.2",
- "integrity": "sha512-PQytY0goCZLANGabPCPQJDhCrXrwdVP6F5NEgw/zjunrfFhQ1XwnBUNCWi0irUWQsETNntcwfkomikhlQ7uCRQ=="
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/leaflet-tilelayer-here/-/leaflet-tilelayer-here-2.0.1.tgz",
+ "integrity": "sha512-lujfnFt7TuEk3bHGsWt/w01XBfrU9zy7B6C8fzJDr8txhNmVNA00kRRrEJPaLaFyVeSwwA5vWS6zDg2W13DCIA=="
},
"node_modules/leaflet.markercluster": {
- "version": "1.4.1",
- "integrity": "sha512-ZSEpE/EFApR0bJ1w/dUGwTSUvWlpalKqIzkaYdYB7jaftQA/Y2Jav+eT4CMtEYFj+ZK4mswP13Q2acnPBnhGOw==",
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz",
+ "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==",
"peerDependencies": {
- "leaflet": "~1.3.1"
+ "leaflet": "^1.3.1"
}
},
"node_modules/leven": {
@@ -17407,12 +17410,12 @@
},
"packages/browserslist-config": {
"name": "@decidim/browserslist-config",
- "version": "0.27.5",
+ "version": "0.27.6",
"license": "AGPL-3.0"
},
"packages/core": {
"name": "@decidim/core",
- "version": "0.27.5",
+ "version": "0.27.6",
"license": "AGPL-3.0",
"dependencies": {
"@joeattardi/emoji-button": "^4.6.2",
@@ -17433,9 +17436,9 @@
"jquery": "^3.2.1",
"jquery-serializejson": "2.9.0",
"js-cookie": "^3.0.1",
- "leaflet": "1.3.1",
- "leaflet-tilelayer-here": "1.0.2",
- "leaflet.markercluster": "1.4.1",
+ "leaflet": "^1.9.4",
+ "leaflet-tilelayer-here": "^2.0.1",
+ "leaflet.markercluster": "^1.5.3",
"morphdom": "2.6.1",
"prop-types": "^15.7.2",
"quill": "1.3.7",
@@ -17467,7 +17470,7 @@
},
"packages/dev": {
"name": "@decidim/dev",
- "version": "0.27.5",
+ "version": "0.27.6",
"dev": true,
"license": "AGPL-3.0",
"dependencies": {
@@ -17476,7 +17479,7 @@
},
"packages/elections": {
"name": "@decidim/elections",
- "version": "0.27.5",
+ "version": "0.27.6",
"license": "AGPL-3.0",
"dependencies": {
"@decidim/decidim-bulletin_board": "0.23.0",
@@ -17486,7 +17489,7 @@
},
"packages/eslint-config": {
"name": "@decidim/eslint-config",
- "version": "0.27.5",
+ "version": "0.27.6",
"dev": true,
"license": "AGPL-3.0",
"peerDependencies": {
@@ -17503,7 +17506,7 @@
},
"packages/stylelint-config": {
"name": "@decidim/stylelint-config",
- "version": "0.27.5",
+ "version": "0.27.6",
"dev": true,
"license": "AGPL-3.0",
"peerDependencies": {
@@ -17512,7 +17515,7 @@
},
"packages/webpacker": {
"name": "@decidim/webpacker",
- "version": "0.27.5",
+ "version": "0.27.6",
"license": "AGPL-3.0",
"dependencies": {
"@babel/core": "^7.15.5",
@@ -20067,9 +20070,9 @@
"jquery": "^3.2.1",
"jquery-serializejson": "2.9.0",
"js-cookie": "^3.0.1",
- "leaflet": "1.3.1",
- "leaflet-tilelayer-here": "1.0.2",
- "leaflet.markercluster": "1.4.1",
+ "leaflet": "^1.9.4",
+ "leaflet-tilelayer-here": "^2.0.1",
+ "leaflet.markercluster": "^1.5.3",
"morphdom": "2.6.1",
"prop-types": "^15.7.2",
"quill": "1.3.7",
@@ -28016,16 +28019,19 @@
}
},
"leaflet": {
- "version": "1.3.1",
- "integrity": "sha512-adQOIzh+bfdridLM1xIgJ9VnJbAUY3wqs/ueF+ITla+PLQ1z47USdBKUf+iD9FuUA8RtlT6j6hZBfZoA6mW+XQ=="
+ "version": "1.9.4",
+ "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz",
+ "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA=="
},
"leaflet-tilelayer-here": {
- "version": "1.0.2",
- "integrity": "sha512-PQytY0goCZLANGabPCPQJDhCrXrwdVP6F5NEgw/zjunrfFhQ1XwnBUNCWi0irUWQsETNntcwfkomikhlQ7uCRQ=="
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/leaflet-tilelayer-here/-/leaflet-tilelayer-here-2.0.1.tgz",
+ "integrity": "sha512-lujfnFt7TuEk3bHGsWt/w01XBfrU9zy7B6C8fzJDr8txhNmVNA00kRRrEJPaLaFyVeSwwA5vWS6zDg2W13DCIA=="
},
"leaflet.markercluster": {
- "version": "1.4.1",
- "integrity": "sha512-ZSEpE/EFApR0bJ1w/dUGwTSUvWlpalKqIzkaYdYB7jaftQA/Y2Jav+eT4CMtEYFj+ZK4mswP13Q2acnPBnhGOw==",
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz",
+ "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==",
"requires": {}
},
"leven": {
diff --git a/decidim_app-design/packages/browserslist-config/package.json b/decidim_app-design/packages/browserslist-config/package.json
index 277db1c27cd3e..0b5480a8c2c30 100644
--- a/decidim_app-design/packages/browserslist-config/package.json
+++ b/decidim_app-design/packages/browserslist-config/package.json
@@ -1,7 +1,7 @@
{
"name": "@decidim/browserslist-config",
"description": "The Browserslist configuration for Decidim",
- "version": "0.27.5",
+ "version": "0.27.6",
"repository": {
"url": "git@github.com:decidim/decidim.git",
"type": "git",
diff --git a/decidim_app-design/packages/core/package.json b/decidim_app-design/packages/core/package.json
index 424c520705cc4..4f90f50dd4238 100644
--- a/decidim_app-design/packages/core/package.json
+++ b/decidim_app-design/packages/core/package.json
@@ -1,7 +1,7 @@
{
"name": "@decidim/core",
"description": "The core dependencies for Decidim",
- "version": "0.27.5",
+ "version": "0.27.6",
"repository": {
"url": "git@github.com:decidim/decidim.git",
"type": "git",
@@ -28,9 +28,9 @@
"jquery": "^3.2.1",
"jquery-serializejson": "2.9.0",
"js-cookie": "^3.0.1",
- "leaflet": "1.3.1",
- "leaflet-tilelayer-here": "1.0.2",
- "leaflet.markercluster": "1.4.1",
+ "leaflet": "^1.9.4",
+ "leaflet-tilelayer-here": "^2.0.1",
+ "leaflet.markercluster": "^1.5.3",
"morphdom": "2.6.1",
"prop-types": "^15.7.2",
"quill": "1.3.7",
diff --git a/decidim_app-design/packages/dev/package.json b/decidim_app-design/packages/dev/package.json
index 5091e66b32c4c..1d31808bf7191 100644
--- a/decidim_app-design/packages/dev/package.json
+++ b/decidim_app-design/packages/dev/package.json
@@ -1,7 +1,7 @@
{
"name": "@decidim/dev",
"description": "The dev dependencies for Decidim",
- "version": "0.27.5",
+ "version": "0.27.6",
"repository": {
"url": "git@github.com:decidim/decidim.git",
"type": "git",
diff --git a/decidim_app-design/packages/elections/package.json b/decidim_app-design/packages/elections/package.json
index 2c16f548377e0..c2d8e2f070ebc 100644
--- a/decidim_app-design/packages/elections/package.json
+++ b/decidim_app-design/packages/elections/package.json
@@ -1,7 +1,7 @@
{
"name": "@decidim/elections",
"description": "The elections and votings dependencies for Decidim",
- "version": "0.27.5",
+ "version": "0.27.6",
"repository": {
"url": "git@github.com:decidim/decidim.git",
"type": "git",
diff --git a/decidim_app-design/packages/eslint-config/package.json b/decidim_app-design/packages/eslint-config/package.json
index 470f44cfb5989..ad1e3ff5e6f2e 100644
--- a/decidim_app-design/packages/eslint-config/package.json
+++ b/decidim_app-design/packages/eslint-config/package.json
@@ -1,7 +1,7 @@
{
"name": "@decidim/eslint-config",
"description": "The eslint configuration for Decidim",
- "version": "0.27.5",
+ "version": "0.27.6",
"repository": {
"url": "git@github.com:decidim/decidim.git",
"type": "git",
diff --git a/decidim_app-design/packages/stylelint-config/package.json b/decidim_app-design/packages/stylelint-config/package.json
index 98d2b578553d2..2588384b6a274 100644
--- a/decidim_app-design/packages/stylelint-config/package.json
+++ b/decidim_app-design/packages/stylelint-config/package.json
@@ -1,7 +1,7 @@
{
"name": "@decidim/stylelint-config",
"description": "The stylelint configuration for Decidim",
- "version": "0.27.5",
+ "version": "0.27.6",
"repository": {
"url": "git@github.com:decidim/decidim.git",
"type": "git",
diff --git a/decidim_app-design/packages/webpacker/package.json b/decidim_app-design/packages/webpacker/package.json
index 093f691ff94d8..5da61013352b3 100644
--- a/decidim_app-design/packages/webpacker/package.json
+++ b/decidim_app-design/packages/webpacker/package.json
@@ -1,7 +1,7 @@
{
"name": "@decidim/webpacker",
"description": "The webpacker dependencies for Decidim",
- "version": "0.27.5",
+ "version": "0.27.6",
"repository": {
"url": "git@github.com:decidim/decidim.git",
"type": "git",
diff --git a/docs/modules/develop/pages/releases.adoc b/docs/modules/develop/pages/releases.adoc
index 820ea6a709f40..7fd5f525574ec 100644
--- a/docs/modules/develop/pages/releases.adoc
+++ b/docs/modules/develop/pages/releases.adoc
@@ -16,6 +16,7 @@ Mark `develop` as the reference to the next release:
. Turn develop into the `dev` branch for the next release:
.. Update `.decidim-version` to the new `dev` development version: `x.y.z.dev`, where `x.y.z` is the new semver number for the next version
.. Run `bin/rake update_versions`, this will update all references to the new version.
+ .. Run `bin/rake patch_generators`, this will update the Gemfile for the generators to the new version.
.. Run `bin/rake bundle`, this will update all the `Gemfile.lock` files
.. Run `bin/rake webpack`, this will update the JavaScript bundle.
. Update `SECURITY.md` and change the supported version to the new version.
@@ -90,6 +91,7 @@ If this is a *Release Candidate version* release, the steps to follow are:
. Checkout the release stable branch `git checkout release/x.y-stable`.
. Update `.decidim-version` to the new version `x.y.z.rc1`
. Run `bin/rake update_versions`, this will update all references to the new version.
+. Run `bin/rake patch_generators`, this will update the Gemfile for the generators to the new version.
. Run `bin/rake bundle`, this will update all the `Gemfile.lock` files
. Run `bin/rake webpack`, this will update the JavaScript bundle.
. Run `bin/rspec`, this will check things like if all the officially supported languages translations are OK.
@@ -110,6 +112,7 @@ Release Candidates will be tested in a production server (usually Metadecidim) d
. Checkout the release stable branch `git checkout release/x.y-stable`.
. Update `.decidim-version` by removing the `.rcN` suffix, leaving a clean version number like `x.y.z`
. Run `bin/rake update_versions`, this will update all references to the new version.
+. Run `bin/rake patch_generators`, this will update the Gemfile for the generators to the new version.
. Run `bin/rake bundle`, this will update all the `Gemfile.lock` files
. Run `bin/rake webpack`, this will update the JavaScript bundle.
. Update `CHANGELOG.MD`.
@@ -136,6 +139,7 @@ The process is very similar from releasing a new Decidim version:
. Checkout the branch you want to release: `git checkout -b release/x.y-stable`
. Update `.decidim-version` to the new version number.
. Run `bin/rake update_versions`, this will update all references to the new version.
+. Run `bin/rake patch_generators`, this will update the Gemfile for the generators to the new version.
. Run `bin/rake bundle`, this will update all the `Gemfile.lock` files
. Run `bin/rake webpack`, this will update the JavaScript bundle.
. Update `CHANGELOG.MD`.
diff --git a/docs/modules/install/pages/manual.adoc b/docs/modules/install/pages/manual.adoc
index c18c8c230d17d..d93b753d4e099 100644
--- a/docs/modules/install/pages/manual.adoc
+++ b/docs/modules/install/pages/manual.adoc
@@ -12,6 +12,10 @@ In order to develop on decidim, you'll need:
We're starting with an Ubuntu 22.04.1 LTS. This is an opinionated guide, so you're free to use the technology that you are most comfortable. If you have any doubts and you're blocked you can go and ask on https://matrix.to/#/#decidimdevs:matrix.org[our Matrix.org chat room for developers].
+The compatibility between the different versions of the components is the following:
+
+include::install:partial$version_matrix.adoc[]
+
We recommend to have at least some basic proficiency in GNU/Linux (i.e. how to use the command-line, packages, etc), networking knowledge, server administration, development in general, and some basic knowledge about software package managers. It would be great to have Ruby on Rails development basics (a good starting point is http://guides.rubyonrails.org/getting_started.html[Getting Started with Ruby on Rails]) and have some knowledge on how package libraries are working (we use `bundler` for handling ruby packages, and `npm`/`yarn` for handling javascript).
In this guide, we'll see how to install rbenv, PostgreSQL, Node.js and, Decidim, and how to configure everything together for a development environment. Mind that if you want to make a production deployment with real users this guide isn't enough, you should configure a web server (like nginx), backups, monitoring, etc. This is out of the scope of this guide, but you can follow the https://platoniq.github.io/decidim-install/[Platoniq guide].
diff --git a/docs/modules/install/pages/update.adoc b/docs/modules/install/pages/update.adoc
index d344dc9400a61..746e1c3362768 100644
--- a/docs/modules/install/pages/update.adoc
+++ b/docs/modules/install/pages/update.adoc
@@ -85,6 +85,11 @@ gem "decidim-initiatives", DECIDIM_VERSION
gem "decidim-dev", DECIDIM_VERSION
----
+== Compatiblity versions matrix
+
+There are different versions of Decidim that are compatible with different versions of Ruby and Node. You can check the following table to see which versions are compatible with each other:
+
+include::install:partial$version_matrix.adoc[]
[discrete]
== Recommendations
diff --git a/docs/modules/install/partials/version_matrix.adoc b/docs/modules/install/partials/version_matrix.adoc
new file mode 100644
index 0000000000000..0e478d7e8353e
--- /dev/null
+++ b/docs/modules/install/partials/version_matrix.adoc
@@ -0,0 +1,13 @@
+
+|===
+|Decidim version |Ruby version |Node version | Status
+
+|develop | 3.2.2 | 18.17.x | Unreleased
+
+|v0.28 | 3.1.1 | 18.17.x | Bug fixes and security updates
+
+|v0.27 | 3.0.2 | 16.18.x | Bug fixes and security updates
+
+|v0.26 | 2.7.5+ | 16.9.x | Not maintained
+
+|===
diff --git a/lib/decidim/version.rb b/lib/decidim/version.rb
index 411688aa6cd2f..33312e17e28b8 100644
--- a/lib/decidim/version.rb
+++ b/lib/decidim/version.rb
@@ -3,6 +3,6 @@
# This holds the decidim version and the faker version it uses.
module Decidim
def self.version
- "0.27.5"
+ "0.27.6"
end
end
diff --git a/package-lock.json b/package-lock.json
index 258ffc6db0061..b69344dfbe5e2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11073,18 +11073,21 @@
}
},
"node_modules/leaflet": {
- "version": "1.3.1",
- "integrity": "sha512-adQOIzh+bfdridLM1xIgJ9VnJbAUY3wqs/ueF+ITla+PLQ1z47USdBKUf+iD9FuUA8RtlT6j6hZBfZoA6mW+XQ=="
+ "version": "1.9.4",
+ "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz",
+ "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA=="
},
"node_modules/leaflet-tilelayer-here": {
- "version": "1.0.2",
- "integrity": "sha512-PQytY0goCZLANGabPCPQJDhCrXrwdVP6F5NEgw/zjunrfFhQ1XwnBUNCWi0irUWQsETNntcwfkomikhlQ7uCRQ=="
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/leaflet-tilelayer-here/-/leaflet-tilelayer-here-2.0.1.tgz",
+ "integrity": "sha512-lujfnFt7TuEk3bHGsWt/w01XBfrU9zy7B6C8fzJDr8txhNmVNA00kRRrEJPaLaFyVeSwwA5vWS6zDg2W13DCIA=="
},
"node_modules/leaflet.markercluster": {
- "version": "1.4.1",
- "integrity": "sha512-ZSEpE/EFApR0bJ1w/dUGwTSUvWlpalKqIzkaYdYB7jaftQA/Y2Jav+eT4CMtEYFj+ZK4mswP13Q2acnPBnhGOw==",
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz",
+ "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==",
"peerDependencies": {
- "leaflet": "~1.3.1"
+ "leaflet": "^1.3.1"
}
},
"node_modules/leven": {
@@ -17407,12 +17410,12 @@
},
"packages/browserslist-config": {
"name": "@decidim/browserslist-config",
- "version": "0.27.5",
+ "version": "0.27.6",
"license": "AGPL-3.0"
},
"packages/core": {
"name": "@decidim/core",
- "version": "0.27.5",
+ "version": "0.27.6",
"license": "AGPL-3.0",
"dependencies": {
"@joeattardi/emoji-button": "^4.6.2",
@@ -17433,9 +17436,9 @@
"jquery": "^3.2.1",
"jquery-serializejson": "2.9.0",
"js-cookie": "^3.0.1",
- "leaflet": "1.3.1",
- "leaflet-tilelayer-here": "1.0.2",
- "leaflet.markercluster": "1.4.1",
+ "leaflet": "^1.9.4",
+ "leaflet-tilelayer-here": "^2.0.1",
+ "leaflet.markercluster": "^1.5.3",
"morphdom": "2.6.1",
"prop-types": "^15.7.2",
"quill": "1.3.7",
@@ -17467,7 +17470,7 @@
},
"packages/dev": {
"name": "@decidim/dev",
- "version": "0.27.5",
+ "version": "0.27.6",
"dev": true,
"license": "AGPL-3.0",
"dependencies": {
@@ -17476,7 +17479,7 @@
},
"packages/elections": {
"name": "@decidim/elections",
- "version": "0.27.5",
+ "version": "0.27.6",
"license": "AGPL-3.0",
"dependencies": {
"@decidim/decidim-bulletin_board": "0.23.0",
@@ -17486,7 +17489,7 @@
},
"packages/eslint-config": {
"name": "@decidim/eslint-config",
- "version": "0.27.5",
+ "version": "0.27.6",
"dev": true,
"license": "AGPL-3.0",
"peerDependencies": {
@@ -17503,7 +17506,7 @@
},
"packages/stylelint-config": {
"name": "@decidim/stylelint-config",
- "version": "0.27.5",
+ "version": "0.27.6",
"dev": true,
"license": "AGPL-3.0",
"peerDependencies": {
@@ -17512,7 +17515,7 @@
},
"packages/webpacker": {
"name": "@decidim/webpacker",
- "version": "0.27.5",
+ "version": "0.27.6",
"license": "AGPL-3.0",
"dependencies": {
"@babel/core": "^7.15.5",
@@ -20067,9 +20070,9 @@
"jquery": "^3.2.1",
"jquery-serializejson": "2.9.0",
"js-cookie": "^3.0.1",
- "leaflet": "1.3.1",
- "leaflet-tilelayer-here": "1.0.2",
- "leaflet.markercluster": "1.4.1",
+ "leaflet": "^1.9.4",
+ "leaflet-tilelayer-here": "^2.0.1",
+ "leaflet.markercluster": "^1.5.3",
"morphdom": "2.6.1",
"prop-types": "^15.7.2",
"quill": "1.3.7",
@@ -28016,16 +28019,19 @@
}
},
"leaflet": {
- "version": "1.3.1",
- "integrity": "sha512-adQOIzh+bfdridLM1xIgJ9VnJbAUY3wqs/ueF+ITla+PLQ1z47USdBKUf+iD9FuUA8RtlT6j6hZBfZoA6mW+XQ=="
+ "version": "1.9.4",
+ "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz",
+ "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA=="
},
"leaflet-tilelayer-here": {
- "version": "1.0.2",
- "integrity": "sha512-PQytY0goCZLANGabPCPQJDhCrXrwdVP6F5NEgw/zjunrfFhQ1XwnBUNCWi0irUWQsETNntcwfkomikhlQ7uCRQ=="
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/leaflet-tilelayer-here/-/leaflet-tilelayer-here-2.0.1.tgz",
+ "integrity": "sha512-lujfnFt7TuEk3bHGsWt/w01XBfrU9zy7B6C8fzJDr8txhNmVNA00kRRrEJPaLaFyVeSwwA5vWS6zDg2W13DCIA=="
},
"leaflet.markercluster": {
- "version": "1.4.1",
- "integrity": "sha512-ZSEpE/EFApR0bJ1w/dUGwTSUvWlpalKqIzkaYdYB7jaftQA/Y2Jav+eT4CMtEYFj+ZK4mswP13Q2acnPBnhGOw==",
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz",
+ "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==",
"requires": {}
},
"leven": {
diff --git a/packages/browserslist-config/package.json b/packages/browserslist-config/package.json
index 277db1c27cd3e..0b5480a8c2c30 100644
--- a/packages/browserslist-config/package.json
+++ b/packages/browserslist-config/package.json
@@ -1,7 +1,7 @@
{
"name": "@decidim/browserslist-config",
"description": "The Browserslist configuration for Decidim",
- "version": "0.27.5",
+ "version": "0.27.6",
"repository": {
"url": "git@github.com:decidim/decidim.git",
"type": "git",
diff --git a/packages/core/package.json b/packages/core/package.json
index 424c520705cc4..4f90f50dd4238 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,7 +1,7 @@
{
"name": "@decidim/core",
"description": "The core dependencies for Decidim",
- "version": "0.27.5",
+ "version": "0.27.6",
"repository": {
"url": "git@github.com:decidim/decidim.git",
"type": "git",
@@ -28,9 +28,9 @@
"jquery": "^3.2.1",
"jquery-serializejson": "2.9.0",
"js-cookie": "^3.0.1",
- "leaflet": "1.3.1",
- "leaflet-tilelayer-here": "1.0.2",
- "leaflet.markercluster": "1.4.1",
+ "leaflet": "^1.9.4",
+ "leaflet-tilelayer-here": "^2.0.1",
+ "leaflet.markercluster": "^1.5.3",
"morphdom": "2.6.1",
"prop-types": "^15.7.2",
"quill": "1.3.7",
diff --git a/packages/dev/package.json b/packages/dev/package.json
index 5091e66b32c4c..1d31808bf7191 100644
--- a/packages/dev/package.json
+++ b/packages/dev/package.json
@@ -1,7 +1,7 @@
{
"name": "@decidim/dev",
"description": "The dev dependencies for Decidim",
- "version": "0.27.5",
+ "version": "0.27.6",
"repository": {
"url": "git@github.com:decidim/decidim.git",
"type": "git",
diff --git a/packages/elections/package.json b/packages/elections/package.json
index 2c16f548377e0..c2d8e2f070ebc 100644
--- a/packages/elections/package.json
+++ b/packages/elections/package.json
@@ -1,7 +1,7 @@
{
"name": "@decidim/elections",
"description": "The elections and votings dependencies for Decidim",
- "version": "0.27.5",
+ "version": "0.27.6",
"repository": {
"url": "git@github.com:decidim/decidim.git",
"type": "git",
diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json
index 470f44cfb5989..ad1e3ff5e6f2e 100644
--- a/packages/eslint-config/package.json
+++ b/packages/eslint-config/package.json
@@ -1,7 +1,7 @@
{
"name": "@decidim/eslint-config",
"description": "The eslint configuration for Decidim",
- "version": "0.27.5",
+ "version": "0.27.6",
"repository": {
"url": "git@github.com:decidim/decidim.git",
"type": "git",
diff --git a/packages/stylelint-config/package.json b/packages/stylelint-config/package.json
index 98d2b578553d2..2588384b6a274 100644
--- a/packages/stylelint-config/package.json
+++ b/packages/stylelint-config/package.json
@@ -1,7 +1,7 @@
{
"name": "@decidim/stylelint-config",
"description": "The stylelint configuration for Decidim",
- "version": "0.27.5",
+ "version": "0.27.6",
"repository": {
"url": "git@github.com:decidim/decidim.git",
"type": "git",
diff --git a/packages/webpacker/package.json b/packages/webpacker/package.json
index 093f691ff94d8..5da61013352b3 100644
--- a/packages/webpacker/package.json
+++ b/packages/webpacker/package.json
@@ -1,7 +1,7 @@
{
"name": "@decidim/webpacker",
"description": "The webpacker dependencies for Decidim",
- "version": "0.27.5",
+ "version": "0.27.6",
"repository": {
"url": "git@github.com:decidim/decidim.git",
"type": "git",
|