decidim-core 0.30.4 → 0.30.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/cells/decidim/card_g/show.erb +1 -1
- data/app/cells/decidim/notification/deleted.erb +12 -0
- data/app/cells/decidim/notification/not_available.erb +12 -0
- data/app/cells/decidim/notification_cell.rb +5 -1
- data/app/cells/decidim/share_widget/modal.erb +2 -1
- data/app/commands/decidim/destroy_account.rb +49 -4
- data/app/events/decidim/welcome_notification_event.rb +1 -1
- data/app/jobs/decidim/remove_search_indexes_job.rb +18 -0
- data/app/mailers/decidim/notifications_digest_mailer.rb +18 -1
- data/app/models/decidim/component.rb +3 -0
- data/app/models/decidim/notification.rb +10 -0
- data/app/models/decidim/user.rb +4 -0
- data/app/models/decidim/user_base_entity.rb +1 -1
- data/app/packs/src/decidim/editor/extensions/link/index.js +0 -1
- data/app/packs/src/decidim/editor/index.js +5 -1
- data/app/packs/src/decidim/editor/test/extensions/link.test.js +2 -2
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_link.js +1 -1
- data/app/packs/stylesheets/decidim/_modal.scss +5 -1
- data/app/packs/stylesheets/decidim/_modal_fingerprint.scss +1 -1
- data/app/presenters/decidim/log/user_presenter.rb +2 -1
- data/app/presenters/decidim/user_presenter.rb +6 -1
- data/app/views/decidim/pages/_tabbed.html.erb +1 -1
- data/app/views/decidim/shared/_orders.html.erb +1 -1
- data/app/views/layouts/decidim/header/_main_links_mobile_account.html.erb +15 -1
- data/config/locales/ar.yml +0 -4
- data/config/locales/bg.yml +0 -8
- data/config/locales/ca-IT.yml +13 -11
- data/config/locales/ca.yml +13 -11
- data/config/locales/cs.yml +9 -19
- data/config/locales/de.yml +4 -20
- data/config/locales/el.yml +0 -3
- data/config/locales/en.yml +19 -17
- data/config/locales/es-MX.yml +12 -10
- data/config/locales/es-PY.yml +12 -10
- data/config/locales/es.yml +11 -9
- data/config/locales/eu.yml +42 -41
- data/config/locales/fa-IR.yml +3 -0
- data/config/locales/fi-plain.yml +11 -8
- data/config/locales/fi.yml +11 -8
- data/config/locales/fr-CA.yml +20 -11
- data/config/locales/fr.yml +20 -11
- data/config/locales/ga-IE.yml +0 -4
- data/config/locales/gl.yml +0 -3
- data/config/locales/hu.yml +0 -6
- data/config/locales/id-ID.yml +0 -3
- data/config/locales/it.yml +1 -4
- data/config/locales/ja.yml +24 -22
- data/config/locales/ko.yml +3 -0
- data/config/locales/lb.yml +0 -3
- data/config/locales/lt.yml +0 -5
- data/config/locales/lv.yml +0 -3
- data/config/locales/mt.yml +3 -0
- data/config/locales/nl.yml +0 -3
- data/config/locales/no.yml +0 -3
- data/config/locales/pl.yml +11 -7
- data/config/locales/pt-BR.yml +552 -5
- data/config/locales/pt.yml +0 -3
- data/config/locales/ro-RO.yml +453 -126
- data/config/locales/ru.yml +0 -3
- data/config/locales/sk.yml +0 -3
- data/config/locales/sv.yml +28 -13
- data/config/locales/tr-TR.yml +0 -5
- data/config/locales/uk.yml +0 -3
- data/config/locales/vi.yml +3 -0
- data/config/locales/zh-CN.yml +0 -3
- data/config/locales/zh-TW.yml +0 -5
- data/decidim-core.gemspec +1 -0
- data/lib/decidim/core/seeds.rb +3 -3
- data/lib/decidim/core/test/factories.rb +20 -0
- data/lib/decidim/core/test/shared_examples/comments_examples.rb +35 -5
- data/lib/decidim/core/test/shared_examples/fingerprint_examples.rb +13 -0
- data/lib/decidim/core/test/shared_examples/process_announcements_examples.rb +35 -1
- data/lib/decidim/core/version.rb +1 -1
- data/lib/decidim/events/base_event.rb +4 -0
- data/lib/decidim/has_private_users.rb +1 -0
- data/lib/decidim/seeds.rb +1 -1
- data/lib/tasks/upgrade/decidim_remove_deleted_users_left_data_tasks.rake +30 -0
- data/lib/tasks/upgrade/fix_deleted_private_follows.rake +26 -0
- metadata +25 -6
data/config/locales/ru.yml
CHANGED
|
@@ -480,14 +480,11 @@ ru:
|
|
|
480
480
|
proposals_explanation: Вносите новые предложения, поддерживайте уже внесенные и способствуйте изменениям, которые вы хотите видеть.
|
|
481
481
|
footer_sub_hero:
|
|
482
482
|
footer_sub_hero_headline: Добро пожаловать на площадку соучастия %{organization}!
|
|
483
|
-
register: Зарегистрироваться
|
|
484
483
|
hero:
|
|
485
484
|
participate: Принять участие
|
|
486
485
|
welcome: Добро пожаловать в %{organization}!
|
|
487
486
|
statistics:
|
|
488
487
|
headline: Текущее состояние %{organization}
|
|
489
|
-
sub_hero:
|
|
490
|
-
register: Зарегистрироваться
|
|
491
488
|
profile:
|
|
492
489
|
deleted: Удаленный участник
|
|
493
490
|
profiles:
|
data/config/locales/sk.yml
CHANGED
|
@@ -746,14 +746,11 @@ sk:
|
|
|
746
746
|
proposals_explanation: Urobiť návrhy, podporiť existujúce a podporovať zmeny, ktoré chcete vidieť.
|
|
747
747
|
footer_sub_hero:
|
|
748
748
|
footer_sub_hero_headline: Vitajte na%{organization} participatívnej platforme.
|
|
749
|
-
register: Registrovať
|
|
750
749
|
hero:
|
|
751
750
|
participate: zúčastniť sa
|
|
752
751
|
welcome: Vitajte na%{organization}!
|
|
753
752
|
statistics:
|
|
754
753
|
headline: Aktuálny stav %{organization}
|
|
755
|
-
sub_hero:
|
|
756
|
-
register: Registrovať
|
|
757
754
|
index:
|
|
758
755
|
standalone_pages: Stránky
|
|
759
756
|
subheading: Prechádzajte stránky pomocníka%{name}
|
data/config/locales/sv.yml
CHANGED
|
@@ -649,7 +649,7 @@ sv:
|
|
|
649
649
|
email_already_exists: Ett annat konto använder samma e-postadress.
|
|
650
650
|
new:
|
|
651
651
|
complete_profile: Komplettera profil
|
|
652
|
-
nickname_help: Ditt användarnamn i %{organization}. Kan bara innehålla bokstäver, siffror, '-' och '_'.
|
|
652
|
+
nickname_help: Ditt användarnamn i %{organization}. Kan bara innehålla små bokstäver a-z, siffror, '-' och '_'.
|
|
653
653
|
sign_up: Var god slutför din profil
|
|
654
654
|
subtitle: Slutför registreringen genom att fylla i följande formulär
|
|
655
655
|
username_help: Offentligt namn som visas i dina inlägg. Du kan ange ett annat namn än ditt eget, om du vill vara anonym.
|
|
@@ -734,6 +734,8 @@ sv:
|
|
|
734
734
|
created_at: Datum och tid då identiteten skapades
|
|
735
735
|
id: Unikt id för identiteten
|
|
736
736
|
provider: Leverantören av identiteten
|
|
737
|
+
messaging_conversations:
|
|
738
|
+
updated_at: Datum när denna konversation senast uppdaterades
|
|
737
739
|
participatory_space_private_users:
|
|
738
740
|
created_at: Datum och tid när den privata användaren skapades
|
|
739
741
|
id: Unikt id för den privata användaren
|
|
@@ -756,7 +758,7 @@ sv:
|
|
|
756
758
|
phone: Telefonnummer till användargruppen
|
|
757
759
|
verified_at: Datum och tid för när användargruppen verifierades
|
|
758
760
|
users:
|
|
759
|
-
about:
|
|
761
|
+
about: Profilbeskrivningen för denna deltagare
|
|
760
762
|
accepted_tos_version: Det datum då användarvillkoren godkändes av användaren
|
|
761
763
|
admin: Om användaren är administratör
|
|
762
764
|
confirmation_sent_at: Datum och tid då bekräftelsen skickades
|
|
@@ -776,8 +778,9 @@ sv:
|
|
|
776
778
|
locale: Användarens valda språk
|
|
777
779
|
managed: Om användare hanteras av en annan användare
|
|
778
780
|
name: Namnet på användaren
|
|
779
|
-
newsletter_notifications_at: Datum och tid när
|
|
781
|
+
newsletter_notifications_at: Datum och tid när denna deltagare prenumererade på att få ett nyhetsbrev
|
|
780
782
|
nickname: Användarens användarnamn
|
|
783
|
+
officialized_as: Officiantens titel (kommunalråd, borgmästare, etc)
|
|
781
784
|
editor_images:
|
|
782
785
|
create:
|
|
783
786
|
error: Fel vid uppladdning av bild.
|
|
@@ -801,7 +804,7 @@ sv:
|
|
|
801
804
|
files:
|
|
802
805
|
file_cannot_be_processed: Filen kan inte bearbetas
|
|
803
806
|
file_resolution_too_large: Filupplösningen är för stor
|
|
804
|
-
not_inside_organization: Filen är inte kopplad till någon organisation
|
|
807
|
+
not_inside_organization: Filen är inte kopplad till någon organisation.
|
|
805
808
|
internal_server_error:
|
|
806
809
|
copied: Texten har kopierats!
|
|
807
810
|
copy_error_message_clarification: Kopiera felmeddelandet till urklipp
|
|
@@ -947,7 +950,7 @@ sv:
|
|
|
947
950
|
email_intro: |-
|
|
948
951
|
Din %{resource_type} är inte längre synlig.<br>
|
|
949
952
|
Detta hände därför att förslaget, mötet, debatten eller kommentaren du svarade på har modererats. Om den blir tillgänglig igen, kommer din kommentar automatiskt att återställas.
|
|
950
|
-
email_outro: Du har fått det här meddelandet eftersom du är
|
|
953
|
+
email_outro: Du har fått det här meddelandet eftersom du är författare till %{resource_type}.
|
|
951
954
|
email_subject: Din %{resource_type} är inte längre synlig
|
|
952
955
|
notification_title: |-
|
|
953
956
|
Din %{resource_type} är inte längre synlig.<br>
|
|
@@ -1035,6 +1038,7 @@ sv:
|
|
|
1035
1038
|
file:
|
|
1036
1039
|
explanation: 'Instruktioner för fil:'
|
|
1037
1040
|
message_1: Måste vara en bild eller ett dokument.
|
|
1041
|
+
message_2: Om det är en bild så använd helst en landskapsbild som inte har någon text. Plattformen beskär bilden.
|
|
1038
1042
|
icon:
|
|
1039
1043
|
explanation: 'Instruktioner för ikon:'
|
|
1040
1044
|
message_1: Måste vara en kvadratisk bild.
|
|
@@ -1065,6 +1069,7 @@ sv:
|
|
|
1065
1069
|
title_required: Titel måste fyllas i!
|
|
1066
1070
|
uploaded: Uppladdad
|
|
1067
1071
|
validating: Validerar...
|
|
1072
|
+
validation_error: Valideringsfel! Kontrollera att filen har en tillåten filtyp eller storlek.
|
|
1068
1073
|
select_file: Välj fil
|
|
1069
1074
|
upload_help:
|
|
1070
1075
|
dropzone: Släpp filer här eller klicka på knappen för att ladda upp
|
|
@@ -1394,8 +1399,10 @@ sv:
|
|
|
1394
1399
|
action_error: Det gick inte att uppdatera inställningen för meddelanden.
|
|
1395
1400
|
no_notifications: Inga meddelanden ännu.
|
|
1396
1401
|
show:
|
|
1402
|
+
deleted: Innehållet har tagits bort av författaren.
|
|
1397
1403
|
missing_event: Hoppsan, det här meddelandet tillhör ett objekt som inte längre är tillgängligt. Du kan kasta det.
|
|
1398
|
-
moderated:
|
|
1404
|
+
moderated: Innehållet har dolts av moderator.
|
|
1405
|
+
not_available: Hoppsan, det här meddelandet tillhör ett objekt som inte längre är tillgängligt. Du kan kasta det.
|
|
1399
1406
|
notifications_digest_mailer:
|
|
1400
1407
|
header:
|
|
1401
1408
|
daily: Dagligt sammandrag
|
|
@@ -1403,6 +1410,7 @@ sv:
|
|
|
1403
1410
|
hello: Hej %{name},
|
|
1404
1411
|
intro:
|
|
1405
1412
|
daily: 'Det här är meddelandena från senaste dagen baserat på aktiviteterna du följer:'
|
|
1413
|
+
real_time: 'Detta är en notis om aktiviteten du följer:'
|
|
1406
1414
|
weekly: 'Det här är meddelandena från senaste veckan baserat på aktiviteterna du följer:'
|
|
1407
1415
|
outro: Du har fått de här meddelandena eftersom du följer det här innehållet eller dess författare. Du kan sluta följa dem från deras respektive sidor.
|
|
1408
1416
|
see_more: Visa fler meddelanden
|
|
@@ -1442,11 +1450,15 @@ sv:
|
|
|
1442
1450
|
message_2: Vänligen försök igen senare.
|
|
1443
1451
|
retry: Försök igen
|
|
1444
1452
|
open_data:
|
|
1453
|
+
index:
|
|
1454
|
+
license:
|
|
1455
|
+
license_contents_link: https://opendatacommons.org/licenses/dbcl/1.0/
|
|
1456
|
+
license_database_link: https://opendatacommons.org/licenses/odbl/1.0/
|
|
1445
1457
|
not_available_yet: De öppna datafilerna är ännu inte tillgängliga, var vänlig försök igen om några minuter.
|
|
1446
1458
|
pad_iframe:
|
|
1447
1459
|
disclaimer: Innehållet i anteckningarna är skrivet av registrerade användare och uttrycker deras åsikter. %{organization} kan inte hållas ansvarig för innehållet.
|
|
1448
1460
|
explanation: Använd den här anteckningsytan för att gemensamt ta anteckningar under mötet så att det går lättare att skriva protokollet efteråt.
|
|
1449
|
-
pad:
|
|
1461
|
+
pad: Anteckningar
|
|
1450
1462
|
pages:
|
|
1451
1463
|
home:
|
|
1452
1464
|
extended:
|
|
@@ -1461,7 +1473,7 @@ sv:
|
|
|
1461
1473
|
footer_sub_hero:
|
|
1462
1474
|
footer_sub_hero_body_html: Låt oss skapa ett mer öppet, transparent och deltagande samhälle.<br /> Gå med, delta och fatta beslut.
|
|
1463
1475
|
footer_sub_hero_headline: Välkommen till %{organization} deltagarplattform.
|
|
1464
|
-
register:
|
|
1476
|
+
register: Skapa ett konto
|
|
1465
1477
|
hero:
|
|
1466
1478
|
participate: Delta
|
|
1467
1479
|
participate_title: Delta i plattformens processer
|
|
@@ -1469,7 +1481,7 @@ sv:
|
|
|
1469
1481
|
statistics:
|
|
1470
1482
|
headline: Aktuellt läge för %{organization}
|
|
1471
1483
|
sub_hero:
|
|
1472
|
-
register:
|
|
1484
|
+
register: Skapa ett konto
|
|
1473
1485
|
register_title: Skapa ett konto
|
|
1474
1486
|
index:
|
|
1475
1487
|
standalone_pages: Sidor
|
|
@@ -1675,7 +1687,10 @@ sv:
|
|
|
1675
1687
|
no_stats: Det finns ingen statistik ännu.
|
|
1676
1688
|
pages_count: Sidor
|
|
1677
1689
|
participants_count: Deltagare
|
|
1690
|
+
surveys_count: Enkäter
|
|
1678
1691
|
users_count: Deltagare
|
|
1692
|
+
tags:
|
|
1693
|
+
filter_results_for_taxonomy: 'Filtrera resultat: %{resource}'
|
|
1679
1694
|
translation_bar:
|
|
1680
1695
|
help_text: "<strong>Obs:</strong> Innehåll kan ha översatts automatiskt och inte vara 100% korrekt."
|
|
1681
1696
|
show_original: Visa originaltexten
|
|
@@ -1715,7 +1730,7 @@ sv:
|
|
|
1715
1730
|
version:
|
|
1716
1731
|
show:
|
|
1717
1732
|
back_to_resource: Gå tillbaka
|
|
1718
|
-
changes_at_title: Ändringar
|
|
1733
|
+
changes_at_title: Ändringar av "%{title}"
|
|
1719
1734
|
number_of_versions: Versioner
|
|
1720
1735
|
version_created_at: Version skapad
|
|
1721
1736
|
versions:
|
|
@@ -1755,7 +1770,7 @@ sv:
|
|
|
1755
1770
|
invitations:
|
|
1756
1771
|
edit:
|
|
1757
1772
|
header: Slutför skapandet av ditt konto
|
|
1758
|
-
nickname_help: Ditt användarnamn
|
|
1773
|
+
nickname_help: Ditt användarnamn i %{organization}. Kan bara innehålla små bokstäver a-z, siffror, '-' och '_'.
|
|
1759
1774
|
submit_button: Spara
|
|
1760
1775
|
subtitle: Om du godkänner inbjudan väljer du ditt användarnamn och lösenord.
|
|
1761
1776
|
invitation_removed: Din inbjudan har tagits bort.
|
|
@@ -1795,8 +1810,6 @@ sv:
|
|
|
1795
1810
|
subject: Du har blivit inbjuden att hantera %{organization}
|
|
1796
1811
|
invite_collaborator:
|
|
1797
1812
|
subject: Du har blivit inbjuden att samarbeta på %{organization}
|
|
1798
|
-
invite_private_user:
|
|
1799
|
-
subject: Du har blivit inbjuden till en privat deltagarprocess på %{organization}
|
|
1800
1813
|
organization_admin_invitation_instructions:
|
|
1801
1814
|
subject: Du har blivit inbjuden att hantera %{organization}
|
|
1802
1815
|
password_change:
|
|
@@ -2074,6 +2087,8 @@ sv:
|
|
|
2074
2087
|
expire_time_html: Din session kommer löpa ut om <b><span class="minutes">%{minutes}</span> minuter</b>.
|
|
2075
2088
|
language_chooser:
|
|
2076
2089
|
choose_language: Välj språk
|
|
2090
|
+
navigation:
|
|
2091
|
+
aria_label: 'Navigation menu: %{title}'
|
|
2077
2092
|
notifications_dashboard:
|
|
2078
2093
|
mark_all_as_read: Markera allt som läst
|
|
2079
2094
|
mark_as_read: Markera som läst
|
data/config/locales/tr-TR.yml
CHANGED
|
@@ -828,8 +828,6 @@ tr:
|
|
|
828
828
|
subject: '%{organization_name} ile ilgili bilgileri almaya devam etmek istiyor musunuz?'
|
|
829
829
|
notifications:
|
|
830
830
|
no_notifications: Henüz bildirim yok.
|
|
831
|
-
show:
|
|
832
|
-
moderated: İçerik Denetlendi
|
|
833
831
|
notifications_settings:
|
|
834
832
|
show:
|
|
835
833
|
direct_messages: Herkesten doğrudan mesaj alın
|
|
@@ -860,14 +858,11 @@ tr:
|
|
|
860
858
|
proposals_explanation: Öneriler yapın, mevcut olanları destekleyin ve görmek istediğiniz değişiklikleri tanıtın.
|
|
861
859
|
footer_sub_hero:
|
|
862
860
|
footer_sub_hero_headline: '%{organization} katılımcı platformuna hoş geldiniz.'
|
|
863
|
-
register: Kayıt Ol
|
|
864
861
|
hero:
|
|
865
862
|
participate: Katıl
|
|
866
863
|
welcome: '%{organization} hoşgeldin!'
|
|
867
864
|
statistics:
|
|
868
865
|
headline: Mevcut durum %{organization}
|
|
869
|
-
sub_hero:
|
|
870
|
-
register: Kayıt Ol
|
|
871
866
|
index:
|
|
872
867
|
standalone_pages: Sayfalar
|
|
873
868
|
subheading: '%{name} yardım sayfalarını ziyaret edin'
|
data/config/locales/uk.yml
CHANGED
|
@@ -375,14 +375,11 @@ uk:
|
|
|
375
375
|
proposals_explanation: Вносьте нові пропозиції, підтримуйте існуючі та сприяйте змінам, які ви хочете бачити.
|
|
376
376
|
footer_sub_hero:
|
|
377
377
|
footer_sub_hero_headline: Ласкаво просимо до майданчику співучасті %{organization}!
|
|
378
|
-
register: Зареєструватися
|
|
379
378
|
hero:
|
|
380
379
|
participate: Взяти участь
|
|
381
380
|
welcome: Ласкаво просимо до %{organization}!
|
|
382
381
|
statistics:
|
|
383
382
|
headline: Поточний стан %{organization}
|
|
384
|
-
sub_hero:
|
|
385
|
-
register: Зареєструватися
|
|
386
383
|
profile:
|
|
387
384
|
deleted: Видалений учасник
|
|
388
385
|
profiles:
|
data/config/locales/vi.yml
CHANGED
data/config/locales/zh-CN.yml
CHANGED
|
@@ -769,14 +769,11 @@ zh-CN:
|
|
|
769
769
|
proposals_explanation: 提出建议、支持现有建议并促进你想要看到的更改。
|
|
770
770
|
footer_sub_hero:
|
|
771
771
|
footer_sub_hero_headline: 欢迎使用 %{organization} 参与式平台。
|
|
772
|
-
register: 注册
|
|
773
772
|
hero:
|
|
774
773
|
participate: 参与
|
|
775
774
|
welcome: 欢迎使用 %{organization}!
|
|
776
775
|
statistics:
|
|
777
776
|
headline: 当前状态 %{organization}
|
|
778
|
-
sub_hero:
|
|
779
|
-
register: 注册
|
|
780
777
|
index:
|
|
781
778
|
standalone_pages: 页 次
|
|
782
779
|
subheading: 浏览 %{name} 的帮助页面
|
data/config/locales/zh-TW.yml
CHANGED
|
@@ -1138,15 +1138,12 @@ zh-TW:
|
|
|
1138
1138
|
proposals_explanation: 提出建議、支持現有建議並推動您希望看到的變化。
|
|
1139
1139
|
footer_sub_hero:
|
|
1140
1140
|
footer_sub_hero_headline: 歡迎來到 %{organization} 的參與平台。
|
|
1141
|
-
register: 註冊
|
|
1142
1141
|
hero:
|
|
1143
1142
|
participate: 參與
|
|
1144
1143
|
participate_title: 參與平台的流程
|
|
1145
1144
|
welcome: 歡迎來到 %{organization}!
|
|
1146
1145
|
statistics:
|
|
1147
1146
|
headline: '%{organization} 的目前狀態'
|
|
1148
|
-
sub_hero:
|
|
1149
|
-
register: 註冊
|
|
1150
1147
|
index:
|
|
1151
1148
|
standalone_pages: 頁
|
|
1152
1149
|
subheading: 瀏覽 %{name} 的幫助頁面
|
|
@@ -1426,8 +1423,6 @@ zh-TW:
|
|
|
1426
1423
|
subject: 你已經被邀請成為 %{organization} 的管理者
|
|
1427
1424
|
invite_collaborator:
|
|
1428
1425
|
subject: 你已獲邀成為 %{organization} 的協作者
|
|
1429
|
-
invite_private_user:
|
|
1430
|
-
subject: 您已被邀請參加 %{organization} 的私密參與過程。
|
|
1431
1426
|
organization_admin_invitation_instructions:
|
|
1432
1427
|
subject: 你已經被邀請成為 %{organization} 的管理者
|
|
1433
1428
|
password_change:
|
data/decidim-core.gemspec
CHANGED
|
@@ -42,6 +42,7 @@ Gem::Specification.new do |s|
|
|
|
42
42
|
s.add_dependency "cells-rails", "~> 0.1.3"
|
|
43
43
|
s.add_dependency "charlock_holmes", "~> 0.7"
|
|
44
44
|
s.add_dependency "chartkick", "~> 5.1.2"
|
|
45
|
+
s.add_dependency "connection_pool", "< 3"
|
|
45
46
|
s.add_dependency "date_validator", "~> 0.12.0"
|
|
46
47
|
s.add_dependency "devise", "~> 4.7"
|
|
47
48
|
s.add_dependency "devise-i18n", "~> 1.2"
|
data/lib/decidim/core/seeds.rb
CHANGED
|
@@ -146,7 +146,7 @@ module Decidim
|
|
|
146
146
|
end
|
|
147
147
|
|
|
148
148
|
def create_organization!
|
|
149
|
-
smtp_label = ENV.fetch("SMTP_FROM_LABEL", ::Faker::
|
|
149
|
+
smtp_label = ENV.fetch("SMTP_FROM_LABEL", ::Faker::X.unique.screen_name)
|
|
150
150
|
smtp_email = ENV.fetch("SMTP_FROM_EMAIL", ::Faker::Internet.email)
|
|
151
151
|
|
|
152
152
|
primary_color, secondary_color, tertiary_color = [
|
|
@@ -174,7 +174,7 @@ module Decidim
|
|
|
174
174
|
from: "#{smtp_label} <#{smtp_email}>",
|
|
175
175
|
from_email: smtp_email,
|
|
176
176
|
from_label: smtp_label,
|
|
177
|
-
user_name: ENV.fetch("SMTP_USERNAME", ::Faker::
|
|
177
|
+
user_name: ENV.fetch("SMTP_USERNAME", ::Faker::X.unique.screen_name),
|
|
178
178
|
encrypted_password: Decidim::AttributeEncryptor.encrypt(ENV.fetch("SMTP_PASSWORD", ::Faker::Internet.password(min_length: 8))),
|
|
179
179
|
address: ENV.fetch("SMTP_ADDRESS", nil) || ENV.fetch("DECIDIM_HOST", "localhost"),
|
|
180
180
|
port: ENV.fetch("SMTP_PORT", nil) || ENV.fetch("DECIDIM_SMTP_PORT", "25")
|
|
@@ -242,7 +242,7 @@ module Decidim
|
|
|
242
242
|
def create_user_group!(user:, verified_at:)
|
|
243
243
|
user_group = Decidim::UserGroup.create!(
|
|
244
244
|
name: ::Faker::Company.unique.name,
|
|
245
|
-
nickname: ::Faker::
|
|
245
|
+
nickname: ::Faker::X.unique.screen_name,
|
|
246
246
|
email: ::Faker::Internet.email,
|
|
247
247
|
confirmed_at: Time.current,
|
|
248
248
|
extended_data: {
|
|
@@ -207,6 +207,14 @@ FactoryBot.define do
|
|
|
207
207
|
previous_passwords { [] }
|
|
208
208
|
extended_data { {} }
|
|
209
209
|
|
|
210
|
+
trait :malicious do
|
|
211
|
+
after :create do |user|
|
|
212
|
+
# rubocop:disable Rails/SkipsModelValidations
|
|
213
|
+
user.update_column(:name, "user_#{user.id}\n<script>alert('name')</script>")
|
|
214
|
+
# rubocop:enable Rails/SkipsModelValidations
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
210
218
|
trait :confirmed do
|
|
211
219
|
confirmed_at { Time.current }
|
|
212
220
|
end
|
|
@@ -932,6 +940,18 @@ FactoryBot.define do
|
|
|
932
940
|
scopes { "public" }
|
|
933
941
|
end
|
|
934
942
|
|
|
943
|
+
factory :oauth_access_grant, class: "Doorkeeper::AccessGrant" do
|
|
944
|
+
transient do
|
|
945
|
+
skip_injection { false }
|
|
946
|
+
organization { create(:organization) }
|
|
947
|
+
end
|
|
948
|
+
resource_owner_id { create(:user, organization: application.organization, skip_injection:).id }
|
|
949
|
+
application { create(:oauth_application, organization:, skip_injection:) }
|
|
950
|
+
redirect_uri { "https://app.com/callback" }
|
|
951
|
+
expires_in { 100 }
|
|
952
|
+
scopes { "public write" }
|
|
953
|
+
end
|
|
954
|
+
|
|
935
955
|
factory :private_export, class: "Decidim::PrivateExport" do
|
|
936
956
|
transient do
|
|
937
957
|
skip_injection { false }
|
|
@@ -13,6 +13,34 @@ shared_examples "comments" do
|
|
|
13
13
|
expect_no_js_errors
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
+
context "when user name is improperly formatted" do
|
|
17
|
+
let!(:user) { create(:user, :malicious, :confirmed, organization:) }
|
|
18
|
+
let(:user_group) { create(:user_group, :verified, organization:) }
|
|
19
|
+
let!(:user_group_membership) { create(:user_group_membership, user:, user_group:) }
|
|
20
|
+
|
|
21
|
+
before do
|
|
22
|
+
# rubocop:disable Rails/SkipsModelValidations
|
|
23
|
+
comments.each do |comment|
|
|
24
|
+
comment.author.update_column(:name, "user_#{comment.author.id}\n<script>alert('name')</script>") if comment.author.is_a?(Decidim::UserBaseEntity)
|
|
25
|
+
end
|
|
26
|
+
# rubocop:enable Rails/SkipsModelValidations
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "properly displays the user name" do
|
|
30
|
+
login_as user, scope: :user
|
|
31
|
+
visit resource_path
|
|
32
|
+
|
|
33
|
+
within "#add-comment-anchor" do
|
|
34
|
+
within "form#new_comment_for_#{commentable.commentable_type.demodulize}_#{commentable.id}" do
|
|
35
|
+
expect(page).to have_css("p.comment__as-author-name")
|
|
36
|
+
within "p.comment__as-author-name" do
|
|
37
|
+
expect(page).to have_content("user_#{user.id} alert('name')")
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
16
44
|
it "shows the list of comments for the resource" do
|
|
17
45
|
visit resource_path
|
|
18
46
|
|
|
@@ -21,7 +49,7 @@ shared_examples "comments" do
|
|
|
21
49
|
|
|
22
50
|
within "#comments" do
|
|
23
51
|
comments.each do |comment|
|
|
24
|
-
expect(page).to have_content comment.author.name
|
|
52
|
+
expect(page).to have_content decidim_sanitize_translated(comment.author.name).gsub("\n", " ")
|
|
25
53
|
expect(page).to have_content comment.body.values.first
|
|
26
54
|
end
|
|
27
55
|
end
|
|
@@ -707,19 +735,21 @@ shared_examples "comments" do
|
|
|
707
735
|
|
|
708
736
|
context "when the user has verified organizations" do
|
|
709
737
|
let(:user_group) { create(:user_group, :verified, organization:) }
|
|
738
|
+
let!(:user_group_membership) { create(:user_group_membership, user:, user_group:) }
|
|
710
739
|
let(:content) { "This is a new comment" }
|
|
711
740
|
|
|
712
|
-
before do
|
|
713
|
-
create(:user_group_membership, user:, user_group:)
|
|
714
|
-
end
|
|
715
|
-
|
|
716
741
|
it "adds new comment as a user group" do
|
|
742
|
+
organization.update!(user_groups_enabled: true)
|
|
717
743
|
visit resource_path
|
|
718
744
|
|
|
719
745
|
within "form#new_comment_for_#{commentable.commentable_type.demodulize}_#{commentable.id}" do
|
|
746
|
+
click_on "Your profile"
|
|
747
|
+
choose "comment[user_group_id]"
|
|
748
|
+
|
|
720
749
|
field = find("#add-comment-#{commentable.commentable_type.demodulize}-#{commentable.id}")
|
|
721
750
|
field.set " "
|
|
722
751
|
field.native.send_keys content
|
|
752
|
+
|
|
723
753
|
click_on "Publish comment"
|
|
724
754
|
end
|
|
725
755
|
|
|
@@ -13,3 +13,16 @@ shared_examples "fingerprint" do
|
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
|
+
|
|
17
|
+
shared_examples "consistent fingerprint" do
|
|
18
|
+
include_context("with a component")
|
|
19
|
+
|
|
20
|
+
it "shows the fingerprint source with correct spacing" do
|
|
21
|
+
visit(resource_locator(fingerprintable).path)
|
|
22
|
+
click_on("Check fingerprint")
|
|
23
|
+
|
|
24
|
+
within ".fingerprint-modal" do
|
|
25
|
+
expect(page).to(have_content(fingerprintable.body.to_json))
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
shared_examples "manage processes announcements" do
|
|
4
|
-
let!(:participatory_process) { create(:participatory_process, :with_content_blocks, organization:, blocks_manifests: [:announcement]) }
|
|
4
|
+
let!(:participatory_process) { create(:participatory_process, :with_content_blocks, organization:, blocks_manifests: [:announcement], announcement: {}) }
|
|
5
5
|
|
|
6
6
|
it "can customize a general announcement for the process" do
|
|
7
7
|
within "tr", text: translated(participatory_process.title) do
|
|
@@ -34,4 +34,38 @@ shared_examples "manage processes announcements" do
|
|
|
34
34
|
expect(page).to have_content("An important announcement")
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
|
+
|
|
38
|
+
it "remove announcement element if announcement body is empty" do
|
|
39
|
+
within "tr", text: translated(participatory_process.title) do
|
|
40
|
+
click_on translated(participatory_process.title)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
within_admin_sidebar_menu do
|
|
44
|
+
click_on "About this process"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
find_by_id("participatory_process-announcement-tabs").click
|
|
48
|
+
send_keys("T")
|
|
49
|
+
send_keys(:backspace)
|
|
50
|
+
|
|
51
|
+
within ".edit_participatory_process" do
|
|
52
|
+
find("*[type=submit]").click
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
expect(page).to have_admin_callout("successfully")
|
|
56
|
+
|
|
57
|
+
visit decidim_admin_participatory_processes.participatory_processes_path
|
|
58
|
+
|
|
59
|
+
new_window = window_opened_by do
|
|
60
|
+
within("tr", text: translated(participatory_process.title)) do
|
|
61
|
+
click_on "Preview"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
page.within_window(new_window) do
|
|
66
|
+
expect(page).to have_no_css(".flash")
|
|
67
|
+
expect(page).to have_no_css(".flash__message")
|
|
68
|
+
expect(page).to have_no_css(".announcement")
|
|
69
|
+
end
|
|
70
|
+
end
|
|
37
71
|
end
|
data/lib/decidim/core/version.rb
CHANGED
data/lib/decidim/seeds.rb
CHANGED
|
@@ -21,7 +21,7 @@ module Decidim
|
|
|
21
21
|
user = Decidim::User.find_or_initialize_by(email:)
|
|
22
22
|
user.update!(
|
|
23
23
|
name: ::Faker::Name.name,
|
|
24
|
-
nickname: "#{::Faker::
|
|
24
|
+
nickname: "#{::Faker::X.unique.screen_name}-#{rand(10_000)}"[0...20],
|
|
25
25
|
password: "decidim123456789",
|
|
26
26
|
organization:,
|
|
27
27
|
confirmed_at: Time.current,
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
namespace :decidim do
|
|
4
|
+
namespace :upgrade do
|
|
5
|
+
desc "Removes deleted users left behind data"
|
|
6
|
+
task remove_deleted_users_left_data: :environment do
|
|
7
|
+
logger.info("=== Removing left behind data by 'Decidim::DestroyAccount'")
|
|
8
|
+
Decidim::User.where.not(deleted_at: nil).find_each do |deleted_user|
|
|
9
|
+
Decidim::Follow.where(followable: deleted_user).find_each(&:destroy)
|
|
10
|
+
Decidim::Follow.where(user: deleted_user).find_each(&:destroy)
|
|
11
|
+
Decidim::ParticipatorySpacePrivateUser.where(user: deleted_user).find_each(&:destroy)
|
|
12
|
+
Decidim::Gamification::BadgeScore.where(user: deleted_user).find_each(&:destroy)
|
|
13
|
+
Decidim::UserModeration.where(user: deleted_user).find_each(&:destroy)
|
|
14
|
+
Decidim::Endorsement.where(author: deleted_user).find_each(&:destroy)
|
|
15
|
+
|
|
16
|
+
Decidim.participatory_space_manifests.each do |space_manifest|
|
|
17
|
+
space_manifest.invoke_on_destroy_account(deleted_user)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
deleted_user.identities.find_each(&:destroy)
|
|
21
|
+
deleted_user.versions.find_each(&:destroy)
|
|
22
|
+
deleted_user.private_exports.find_each(&:destroy)
|
|
23
|
+
deleted_user.access_grants.find_each(&:destroy)
|
|
24
|
+
deleted_user.access_tokens.find_each(&:destroy)
|
|
25
|
+
deleted_user.reminders.find_each(&:destroy)
|
|
26
|
+
deleted_user.notifications.find_each(&:destroy)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
namespace :decidim do
|
|
4
|
+
namespace :upgrade do
|
|
5
|
+
desc "Delete follows of private users deleted from a private space"
|
|
6
|
+
task fix_deleted_private_follows: :environment do
|
|
7
|
+
Decidim::Organization.all.each do |organization|
|
|
8
|
+
spaces = organization.participatory_spaces.collect { |space| space if space.respond_to?(:private_space?) && space.private_space? }.compact_blank
|
|
9
|
+
|
|
10
|
+
next if spaces.blank?
|
|
11
|
+
|
|
12
|
+
spaces = spaces.map { |space| space.respond_to?(:is_transparent?) ? (space unless space.is_transparent?) : space }.compact_blank
|
|
13
|
+
|
|
14
|
+
next if spaces.blank?
|
|
15
|
+
|
|
16
|
+
organization.users.find_each do |user|
|
|
17
|
+
next unless user.following_follows.count.positive?
|
|
18
|
+
|
|
19
|
+
spaces.each do |space|
|
|
20
|
+
Decidim::Admin::DestroyPrivateUsersFollowsJob.perform_later(user, space)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|