decidim-core 0.27.0.rc2 → 0.27.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of decidim-core might be problematic. Click here for more details.

Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/amendable/announcement_cell.rb +1 -1
  3. data/app/cells/decidim/card_m_cell.rb +1 -1
  4. data/app/controllers/decidim/devise/invitations_controller.rb +9 -2
  5. data/app/controllers/decidim/last_activities_controller.rb +5 -2
  6. data/app/forms/decidim/account_form.rb +2 -2
  7. data/app/forms/decidim/amendable/form.rb +2 -1
  8. data/app/forms/decidim/registration_form.rb +2 -2
  9. data/app/forms/decidim/upload_validation_form.rb +51 -7
  10. data/app/helpers/decidim/layout_helper.rb +12 -4
  11. data/app/helpers/decidim/sanitize_helper.rb +1 -1
  12. data/app/mailers/decidim/notification_mailer.rb +1 -0
  13. data/app/mailers/decidim/notifications_digest_mailer.rb +1 -0
  14. data/app/packs/src/decidim/editor/clipboard_override.js +143 -0
  15. data/app/packs/src/decidim/editor/clipboard_utilities.js +119 -0
  16. data/app/packs/src/decidim/editor/linebreak_module.js +0 -8
  17. data/app/packs/src/decidim/editor.js +9 -2
  18. data/app/packs/stylesheets/decidim/_editor.scss +129 -0
  19. data/app/packs/stylesheets/decidim/extras/_quill.scss +0 -6
  20. data/app/presenters/decidim/home_stats_presenter.rb +11 -4
  21. data/app/presenters/decidim/stats_presenter.rb +7 -8
  22. data/app/presenters/decidim/user_presenter.rb +9 -4
  23. data/app/queries/decidim/public_activities.rb +1 -0
  24. data/app/validators/etiquette_validator.rb +7 -3
  25. data/app/validators/file_content_type_validator.rb +103 -0
  26. data/app/validators/passthru_validator.rb +11 -0
  27. data/app/validators/uploader_content_type_validator.rb +22 -0
  28. data/app/views/decidim/notification_mailer/event_received.html.erb +1 -1
  29. data/app/views/decidim/notifications_digest_mailer/_email_content.html.erb +1 -1
  30. data/config/locales/ar.yml +0 -15
  31. data/config/locales/bg.yml +1 -14
  32. data/config/locales/ca.yml +7 -15
  33. data/config/locales/cs.yml +14 -22
  34. data/config/locales/de.yml +1 -14
  35. data/config/locales/el.yml +0 -13
  36. data/config/locales/en.yml +5 -13
  37. data/config/locales/es-MX.yml +6 -14
  38. data/config/locales/es-PY.yml +6 -14
  39. data/config/locales/es.yml +11 -19
  40. data/config/locales/eu.yml +7 -16
  41. data/config/locales/fi-plain.yml +5 -13
  42. data/config/locales/fi.yml +5 -13
  43. data/config/locales/fr-CA.yml +6 -14
  44. data/config/locales/fr.yml +6 -14
  45. data/config/locales/ga-IE.yml +1 -3
  46. data/config/locales/gl.yml +0 -15
  47. data/config/locales/gn-PY.yml +1 -0
  48. data/config/locales/hu.yml +21 -14
  49. data/config/locales/id-ID.yml +0 -15
  50. data/config/locales/is-IS.yml +2 -1
  51. data/config/locales/it.yml +2 -15
  52. data/config/locales/ja.yml +6 -14
  53. data/config/locales/lb.yml +0 -13
  54. data/config/locales/lo-LA.yml +1 -0
  55. data/config/locales/lt.yml +0 -13
  56. data/config/locales/lv.yml +0 -13
  57. data/config/locales/nl.yml +2 -15
  58. data/config/locales/no.yml +0 -13
  59. data/config/locales/oc-FR.yml +1 -0
  60. data/config/locales/pl.yml +1 -14
  61. data/config/locales/pt-BR.yml +2 -15
  62. data/config/locales/pt.yml +1 -14
  63. data/config/locales/ro-RO.yml +0 -13
  64. data/config/locales/ru.yml +0 -4
  65. data/config/locales/sk.yml +0 -16
  66. data/config/locales/sv.yml +0 -13
  67. data/config/locales/tr-TR.yml +2 -15
  68. data/config/locales/uk.yml +1 -2
  69. data/config/locales/zh-CN.yml +0 -13
  70. data/lib/decidim/attributes/localized_date.rb +1 -1
  71. data/lib/decidim/attributes/time_with_zone.rb +5 -2
  72. data/lib/decidim/core/engine.rb +7 -5
  73. data/lib/decidim/core/test/shared_examples/comments_examples.rb +1 -1
  74. data/lib/decidim/core/test/shared_examples/editor_shared_examples.rb +30 -0
  75. data/lib/decidim/core/test/shared_examples/mcell_examples.rb +17 -0
  76. data/lib/decidim/core/test.rb +2 -0
  77. data/lib/decidim/core/version.rb +1 -1
  78. data/lib/decidim/file_validator_humanizer.rb +1 -1
  79. data/lib/decidim/form_builder.rb +10 -3
  80. data/lib/decidim/resourceable.rb +5 -4
  81. data/lib/decidim/settings_manifest.rb +1 -1
  82. metadata +16 -9
  83. data/app/packs/images/decidim/gamification/badges/decidim_gamification_badges_invitations.svg +0 -1
@@ -846,18 +846,6 @@ pl:
846
846
  how: Jak ją zdobyć
847
847
  page_description: Odznaki są wyrazem uznania dla działań użytkowników i ich rozwoju na platformie. Gdy zaczniesz odkrywać, uczestniczyć i wchodzić w interakcje na platformie, otrzymasz różne odznaki. Oto lista odznak i kilka sposobów na ich zdobycie.
848
848
  title: Odznaki
849
- invitations:
850
- conditions:
851
- - Użyj linku "zaproś znajomych" na swojej stronie użytkownika, aby zaprosić znajomych
852
- - Dostosuj, jeśli chcesz, wiadomość, którą wysyłasz
853
- - Możesz awansować na wyższy poziom, wysyłając zaproszenia i gdy zostaną one przyjęte.
854
- description: Ta odznaka jest przyznawana, gdy zapraszasz ludzi i gdy oni poświęcą trochę czasu, aby zarejestrować się w %{organization_name} i zostać użytkownikami. Dziękujemy za udostępnienie %{organization_name} innym osobom i pomoc w rozbudowywaniu społeczności!
855
- description_another: Ten użytkownik zaprosił %{score} osób.
856
- description_own: Zaprosiłeś %{score} osób.
857
- name: Zaproszenia
858
- next_level_in: Zaproś %{score} kolejnych użytkowników, aby przejść do następnego poziomu!
859
- unearned_another: Ten użytkownik jeszcze nikogo nie zaprosił.
860
- unearned_own: Jeszcze nikogo nie zaproszono.
861
849
  description: Odznaki są wyrazem uznania dla działań użytkowników i ich rozwoju na platformie. Gdy zaczniesz odkrywać, uczestniczyć i wchodzić w interakcje na platformie, otrzymasz różne odznaki.
862
850
  level: Poziom %{level}
863
851
  reached_top: Osiągnąłeś najwyższy poziom tej odznaki.
@@ -1069,7 +1057,7 @@ pl:
1069
1057
  title: Konwersacja z %{usernames}
1070
1058
  start:
1071
1059
  send: Wyślij
1072
- title: Zacznij konwersację
1060
+ title: Rozpocznij konwersację
1073
1061
  update:
1074
1062
  error: Wiadomość nie została wysłana z powodu błędu
1075
1063
  metrics:
@@ -1641,7 +1629,6 @@ pl:
1641
1629
  other: 'Podczas przetwarzania Twojego żądania wystąpiły błędy:'
1642
1630
  too_many_marks: używa zbyt wielu kolejnych znaków interpunkcyjnych (np.! i?)
1643
1631
  too_much_caps: używa zbyt dużej liczby wielkich liter (ponad 25% tekstu)
1644
- too_short: jest za krótkie
1645
1632
  forms:
1646
1633
  correct_errors: Wystąpiły błędy w formularzu, popraw je, aby kontynuować.
1647
1634
  length_validator:
@@ -740,18 +740,6 @@ pt-BR:
740
740
  how: Como você pode ganhar
741
741
  page_description: Crachás são reconhecimentos para ações dos participantes e progresso na plataforma. Ao começar a descobrir, participar e interagir na plataforma, você ganhará distintivos diferentes. Aqui está a lista de crachás e algumas maneiras de ganhá-los.
742
742
  title: Distintivos
743
- invitations:
744
- conditions:
745
- - Use o link "convidar amigos" na sua página de usuário para convidar seus amigos
746
- - Personalize, se quiser, a mensagem que você está enviando
747
- - Você vai subir de nível enviando convites e recebendo-os registrados.
748
- description: Esse selo é concedido quando você convidou algumas pessoas e elas gastaram um pouco de tempo para se inscrever em %{organization_name} e se tornarem participantes. Obrigado por fazer %{organization_name} a conhecer aos outros e ajudando a expandir a comunidade!
749
- description_another: Este usuário convidou %{score} usuários.
750
- description_own: Você convidou %{score} usuários.
751
- name: Convites
752
- next_level_in: Convide mais %{score} usuários para alcançar o próximo nível!
753
- unearned_another: Este usuário ainda não convidou nenhum usuário.
754
- unearned_own: Você não convidou nenhum usuário ainda.
755
743
  description: Crachás são reconhecimentos para ações dos participantes e progresso na plataforma. Ao começar a descobrir, participar e interagir na plataforma, você ganhará distintivos diferentes.
756
744
  level: Nível %{level}
757
745
  reached_top: Você atingiu o nível superior para este selo.
@@ -958,7 +946,7 @@ pt-BR:
958
946
  title: Conversas
959
947
  reply:
960
948
  placeholder: Sua resposta...
961
- send: Mandar
949
+ send: Enviar
962
950
  title: Resposta
963
951
  show:
964
952
  back: Voltar para todas as conversas
@@ -967,7 +955,7 @@ pt-BR:
967
955
  title: Conversa com %{usernames}
968
956
  start:
969
957
  send: Enviar
970
- title: Comece uma conversa
958
+ title: Iniciar uma conversa
971
959
  update:
972
960
  error: A mensagem não foi enviada devido a um erro
973
961
  metrics:
@@ -1533,7 +1521,6 @@ pt-BR:
1533
1521
  other: 'Houve erros múltiplos ao processar sua solicitação:'
1534
1522
  too_many_marks: está usando muitos sinais de pontuação consecutivos (por exemplo,! e?)
1535
1523
  too_much_caps: está usando muitas letras maiúsculas (mais de 25% do texto)
1536
- too_short: é muito curto (menos de 15 caracteres)
1537
1524
  forms:
1538
1525
  correct_errors: Há erros no formulário, por favor corrija-os para continuar.
1539
1526
  length_validator:
@@ -739,18 +739,6 @@ pt:
739
739
  how: Como pode ganhar
740
740
  page_description: Distintivos são reconhecimentos para ações dos participantes e progresso na plataforma. Ao começar a descobrir, participar e interagir na plataforma, ganhará distintivos diferentes. Aqui está a lista de distintivos e algumas maneiras de ganhá-los.
741
741
  title: Distintivos
742
- invitations:
743
- conditions:
744
- - Use a hiperligação "convidar amigos" na sua página de utilizador para convidar os seus amigos
745
- - Personalize, se quiser, a mensagem que está a enviar
746
- - Subirá de nível ao enviar convites e obtendo registos.
747
- description: Este distintivo é concedido quando convidou algumas pessoas e elas despenderam um pouco de tempo para se inscrever em %{organization_name} e se tornarem participantes. Obrigado por dar a conhecer %{organization_name} aos outros e ajudar a expandir a comunidade!
748
- description_another: Este participante convidou %{score} utilizadores.
749
- description_own: Convidou %{score} utilizadores.
750
- name: Convites
751
- next_level_in: Convide mais %{score} utilizadores para alcançar o próximo nível!
752
- unearned_another: Este participante ainda não convidou alguém.
753
- unearned_own: Ainda não convidou alguém.
754
742
  description: Distintivos são reconhecimentos para ações dos participantes e progresso na plataforma. Ao começar a descobrir, participar e interagir na plataforma, ganhará distintivos diferentes.
755
743
  level: Nível %{level}
756
744
  reached_top: Atingiu o nível superior para este distintivo.
@@ -957,7 +945,7 @@ pt:
957
945
  title: Conversas
958
946
  reply:
959
947
  placeholder: A sua resposta...
960
- send: Mandar
948
+ send: Enviar
961
949
  title: Responder
962
950
  show:
963
951
  back: Retroceder a todas as conversas
@@ -1532,7 +1520,6 @@ pt:
1532
1520
  other: 'Ocorreram diversos erros ao processar o seu pedido:'
1533
1521
  too_many_marks: está a usar muitos sinais de pontuação consecutivos (por exemplo, ! e ?)
1534
1522
  too_much_caps: está a usar muitas letras maiúsculas (acima de 25% do texto)
1535
- too_short: é muito curto (abaixo de 15 caracteres)
1536
1523
  forms:
1537
1524
  correct_errors: Existem erros no formulário, por favor corrija-os para continuar.
1538
1525
  length_validator:
@@ -761,18 +761,6 @@ ro:
761
761
  how: Cum poți să o câștigi
762
762
  page_description: Insignele sunt recunoașterea acțiunilor participanților și progresele înregistrate în cadrul platformei. Pe măsură ce începi să descoperi, să participi și să interacționezi în platformă, vei câștiga diferite insigne. Aici este lista de insigne și câteva modalități prin care le poți câștiga.
763
763
  title: Insigne
764
- invitations:
765
- conditions:
766
- - Folosește link-ul "invită prieteni" de pe pagina ta de utilizator pentru a-ți invita prietenii
767
- - Personalizează, dacă dorești, mesajul pe care îl trimiți
768
- - Vei crește în nivel trimițând invitații și primindu-le înregistrate.
769
- description: Această insignă este acordată atunci când ai invitat câțiva oameni și aceștia au petrecut puțin timp să se înregistreze în %{organization_name} și să devină participanți. Îți mulțumim că ai făcut %{organization_name} cunoscută și altora existența comunității și ai ajutat la extinderea ei!
770
- description_another: Acest participant a invitat %{score} persoane.
771
- description_own: Ai invitat %{score} persoane.
772
- name: Invitații
773
- next_level_in: Invită încă %{score} persoane să ajungă la următorul nivel!
774
- unearned_another: Acest participant nu a invitat încă pe nimeni.
775
- unearned_own: Nu ai invitat încă pe nimeni.
776
764
  description: Insignele sunt recunoașterea acțiunilor participanților și progresele înregistrate în cadrul platformei. Pe măsură ce începi să descoperi, să participi și să interacționezi în platformă, vei câștiga diferite insigne.
777
765
  level: Nivelul %{level}
778
766
  reached_top: Ai atins nivelul maxim pentru această insignă.
@@ -1570,7 +1558,6 @@ ro:
1570
1558
  other: 'Au existat mai multe erori la procesarea cererii dvs.:'
1571
1559
  too_many_marks: folosește prea multe semne consecutive de punctuație (de ex. ! și ?)
1572
1560
  too_much_caps: utilizează prea multe majuscule (peste 25% din text)
1573
- too_short: este prea scurt (sub 15 caractere)
1574
1561
  forms:
1575
1562
  correct_errors: Există erori în formular, vă rugăm să le corectaţi pentru a continua.
1576
1563
  length_validator:
@@ -427,8 +427,6 @@ ru:
427
427
  index:
428
428
  how: Как вы можете его получить
429
429
  title: Значки
430
- invitations:
431
- name: Приглашения
432
430
  level: Уровень %{level}
433
431
  group_admins:
434
432
  actions:
@@ -508,10 +506,8 @@ ru:
508
506
  no_conversations: У вас еще нет бесед
509
507
  reply:
510
508
  send: Отправить
511
- title: Ответить
512
509
  start:
513
510
  send: Отправить
514
- title: Начать беседу
515
511
  newsletter_mailer:
516
512
  newsletter:
517
513
  note: Вы получили это электронное письмо, потому что подписались на новостные рассылки %{organization_name}. Вы можете изменить свои настройки на своей <a href="%{link}">странице уведомлений</a>.
@@ -649,18 +649,6 @@ sk:
649
649
  how: Ako ho môžete získať
650
650
  page_description: Odznaky sú uznaním aktivity účastníkov a ich pokroku na platforme. Keď začnete objavovať platformu, zúčastňovať sa na nej a pracovať na nej, získate rôzne odznaky. Tu je zoznam odznakov a spôsoby, ako ich môžete získať.
651
651
  title: Odznaky
652
- invitations:
653
- conditions:
654
- - Použite odkaz "pozvať priateľov" na Vašej osobnej stránke pre pozvanie priateľov.
655
- - Upravte, ak chcete, správu, ktorú posielate.
656
- - Na ďalšiu úroveň sa dostanete rozosielaním a prijatím pozvánok.
657
- description: Tento odznak obdržíte, ak ste pozvali pár ľudí, ktorí strávili čas registráciou v %{organization_name} a stali sa účastníkmi. Ďakujeme, že ste ostatným ukázali %{organization_name} a pomohli rozšíriť komunitu!
658
- description_another: Tento účastník pozval %{score} ľudí.
659
- description_own: Pozvali ste %{score} ľudí.
660
- name: Pozvánky
661
- next_level_in: Pozvite o %{score} ľudí viac pre dosiahnutie ďalšej úrovne!
662
- unearned_another: Tento účastník zatiaľ nikoho nepozval.
663
- unearned_own: Zatial ste nikoho nepozvali.
664
652
  description: Odznaky sú uznanie akciou účastníkov a pokrok v platforme. Akonáhle začnete objavovať, zúčastniť sa a spolupracovať v platforme, získate rôzne odznaky.
665
653
  level: Úroveň%{level}
666
654
  reached_top: Dosiahli ste najvyššej úrovne tohto odznaku.
@@ -815,15 +803,12 @@ sk:
815
803
  no_conversations: Nemáte zatím žádné konverzace
816
804
  title: Konverzace
817
805
  reply:
818
- placeholder: Vaša odpoveď...
819
806
  send: Poslat
820
- title: Odpověď
821
807
  show:
822
808
  chat_with: Konverzácia s
823
809
  title: Konverzace s číslem %{usernames}
824
810
  start:
825
811
  send: Poslat
826
- title: Spusťte konverzaci
827
812
  metrics:
828
813
  followers:
829
814
  description: Počet účastníkov, ktorí sledujú tento participatívny priestor
@@ -1266,7 +1251,6 @@ sk:
1266
1251
  other: 'Pri spracovaní vašej požiadavky došlo k nejakým chybám:'
1267
1252
  too_many_marks: používa príliš veľa po sebe idúcich interpunkčných znamienok (napr.! a?)
1268
1253
  too_much_caps: používa príliš veľa veľkých písmen (viac ako 25% textu)
1269
- too_short: je príliš krátka (pod 15 znakov)
1270
1254
  forms:
1271
1255
  required: Povinný
1272
1256
  invisible_captcha:
@@ -805,18 +805,6 @@ sv:
805
805
  how: Hur kan du få det
806
806
  page_description: Märken visar att du varit aktiv som deltagare på plattformen och deltagit i behandlingen. Medan du upptäcker, deltar och samverkar på plattformen får du olika märken. Här är listan med märken och hur du kan få dem.
807
807
  title: Märken
808
- invitations:
809
- conditions:
810
- - Bjud in dina vänner med länken "bjud in vänner" på din användarsida
811
- - Om du vill kan du anpassa meddelandet som du skickar
812
- - Nå nästa nivå genom att skicka inbjudningar till andra och få dem att registrera sig.
813
- description: Du får detta märke när när du har bjudit in några personer, de har registrerat sig i %{organization_name} och blivit deltagare. Tack för att du gör %{organization_name} mer välkänt och gör vår gemenskap större!
814
- description_another: Den här deltagaren har bjudit in %{score} personer.
815
- description_own: Du har bjudit in %{score} personer.
816
- name: Inbjudningar
817
- next_level_in: Nå nästa nivå genom att bjuda in %{score} personer till!
818
- unearned_another: Denna deltagare har inte bjudit in någon användare än.
819
- unearned_own: Du har inte ännu bjudit in någon annan.
820
808
  description: Märken visar att du varit aktiv som deltagare på plattformen och deltagit i behandlingen. Medan du upptäcker, deltar och samverkar på plattformen får du olika märken.
821
809
  level: Nivå %{level}
822
810
  reached_top: Du har nått den högsta nivån för detta märke.
@@ -1619,7 +1607,6 @@ sv:
1619
1607
  other: 'Det finns flera fel i din begäran:'
1620
1608
  too_many_marks: använder för många på varandra följande skiljetecken (t.ex. ! och ?)
1621
1609
  too_much_caps: använder för många stora bokstäver (över 25% av texten)
1622
- too_short: är för kort (under 15 tecken)
1623
1610
  forms:
1624
1611
  correct_errors: Det finns fel på formuläret, vänligen korrigera dem för att fortsätta.
1625
1612
  length_validator:
@@ -725,18 +725,6 @@ tr:
725
725
  how: Nasıl kazanabilirsin
726
726
  page_description: Rozetler, katılımcı eylemleri ve platformdaki ilerlemeleri tanımaktadır. Platformda keşfetmeye, katılmaya ve etkileşim kurmaya başladığınızda farklı rozetler kazanacaksınız. İşte rozetlerin listesi ve bunları kazanmanın bazı yolları.
727
727
  title: Rozetler
728
- invitations:
729
- conditions:
730
- - Arkadaşlarınızı davet etmek için kullanıcı sayfanızdaki “arkadaşlarını davet et” bağlantısını kullanın.
731
- - İsterseniz, göndermek istediğiniz mesajı özelleştirin
732
- - Davetiyeler göndererek ve onları kayıt altına alarak seviye atlayacaksınız.
733
- description: Bu rozeti, bazı kişileri davet ettiğinizde ve %{organization_name} kaydolmak ve katılımcı olmak için biraz zaman ayırdıklarında verilir. Yaptığınız için teşekkür ederiz %{organization_name} başkalarına bilinen ve topluluğu genişletmek için yardımcı!
734
- description_another: Bu kullanıcı %{score} kullanıcı davet etti.
735
- description_own: '%{score} kullanıcıyı davet ettiniz.'
736
- name: Davetiyeler
737
- next_level_in: Bir sonraki seviyeye ulaşmak için %{score} kullanıcı daha davet edin!
738
- unearned_another: Bu kullanıcı henüz bir kullanıcıyı davet etmedi.
739
- unearned_own: Henüz hiç kullanıcı davet etmediniz.
740
728
  description: Rozetler, katılımcı eylemleri ve platformdaki ilerlemeleri tanımaktadır. Platformda keşfetmeye, katılmaya ve etkileşim kurmaya başladığınızda farklı rozetler kazanacaksınız.
741
729
  level: Seviye %{level}
742
730
  reached_top: Bu rozetin en üst seviyesine ulaştınız.
@@ -924,7 +912,7 @@ tr:
924
912
  ok: OK
925
913
  index:
926
914
  ago: önce
927
- close: Pencereyi kapat
915
+ close: Yakın kalıcı
928
916
  from: Gönderen
929
917
  groups: Gruplarım
930
918
  last_message: Son mesaj
@@ -942,7 +930,7 @@ tr:
942
930
  title: '%{usernames} ile görüşme'
943
931
  start:
944
932
  send: Gönder
945
- title: Bir görüşme başlat
933
+ title: Bir görüşme başlatın
946
934
  update:
947
935
  error: Bir hata nedeniyle mesaj gönderilemedi
948
936
  metrics:
@@ -1490,7 +1478,6 @@ tr:
1490
1478
  other: 'İsteğinizi işlerken birden çok hata oluştu:'
1491
1479
  too_many_marks: çok fazla ardışık noktalama işareti kullanıyor (örneğin! ve?)
1492
1480
  too_much_caps: çok fazla büyük harf kullanıyor (metnin% 25'inden fazlası)
1493
- too_short: çok kısa (15 karakterin altında)
1494
1481
  forms:
1495
1482
  correct_errors: Aşağıdaki formda hatalar oluştu, Devam etmek için lütfen bunları düzeltin.
1496
1483
  required: gereklidir
@@ -381,10 +381,9 @@ uk:
381
381
  close: Закрити віконце
382
382
  no_conversations: У вас ще немає бесід
383
383
  reply:
384
- title: Відповісти
384
+ send: Надіслати
385
385
  start:
386
386
  send: Надіслати
387
- title: Почати бесіду
388
387
  newsletter_mailer:
389
388
  newsletter:
390
389
  note: Ви отримали цього електронного листа, оскільки ви підписалися на новини щодо %{organization_name}. Ви можете змінити свої налаштування на <a href="%{link}">сторінці сповіщень</a>.
@@ -653,18 +653,6 @@ zh-CN:
653
653
  how: 你如何赚钱
654
654
  page_description: 徽章是对参与者行动和平台进展的承认。 当您开始发现、参与和互动平台时,您将获得不同的徽章。 这里是徽章列表和您可以赚取它们的某些方式。
655
655
  title: 徽章
656
- invitations:
657
- conditions:
658
- - 使用您用户页面上的“邀请好友”链接来邀请您的朋友
659
- - 自定义,如果您想要,您正在发送的消息
660
- - 您将通过发送邀请和注册来提高等级。
661
- description: 当您已经邀请了一些人并且他们花了一些时间在 %{organization_name} 注册并成为参与者时,这个徽章将被授予。 感谢您向其他人宣传了 %{organization_name} 并帮助扩展社区!
662
- description_another: 此参与者已邀请了 %{score} 人。
663
- description_own: 您已邀请了 %{score} 人。
664
- name: 邀请
665
- next_level_in: 邀请更多 %{score} 人到达下一个关卡!
666
- unearned_another: 此参与者尚未邀请任何人。
667
- unearned_own: 你还没有邀请任何人。
668
656
  description: 徽章是对参与者行动和平台进展的承认。 当您开始发现、参与和互动平台时,您将获得不同的徽章。
669
657
  level: 等级 %{level}
670
658
  reached_top: 你已经达到了这个徽章的顶级了。
@@ -1393,7 +1381,6 @@ zh-CN:
1393
1381
  other: '处理您的请求时发生多个错误:'
1394
1382
  too_many_marks: 正在使用太多连续标点符号(例如! 和 ?)
1395
1383
  too_much_caps: 正在使用太多大写字母(超过25%文本)
1396
- too_short: 太短(低于15个字符)
1397
1384
  forms:
1398
1385
  correct_errors: 表单上有错误,请更正以继续。
1399
1386
  required: 必填字段
@@ -16,7 +16,7 @@ module Decidim
16
16
 
17
17
  Date.strptime(value, I18n.t("date.formats.decidim_short"))
18
18
  rescue ArgumentError
19
- nil
19
+ super
20
20
  end
21
21
  end
22
22
  end
@@ -4,7 +4,7 @@ module Decidim
4
4
  module Attributes
5
5
  # Custom attributes value to parse a String representing a Time using
6
6
  # the app TimeZone.
7
- class TimeWithZone < ActiveModel::Type::Time
7
+ class TimeWithZone < ActiveModel::Type::DateTime
8
8
  def type
9
9
  :"decidim/attributes/time_with_zone"
10
10
  end
@@ -16,7 +16,10 @@ module Decidim
16
16
 
17
17
  Time.zone.strptime(value, I18n.t("time.formats.decidim_short"))
18
18
  rescue ArgumentError
19
- nil
19
+ fallback = super
20
+ return fallback unless fallback.is_a?(Time)
21
+
22
+ ActiveSupport::TimeWithZone.new(fallback, Time.zone)
20
23
  end
21
24
  end
22
25
  end
@@ -253,6 +253,13 @@ module Decidim
253
253
  end
254
254
  end
255
255
 
256
+ initializer "decidim.validators" do
257
+ config.to_prepare do
258
+ # Decidim overrides to the file content type validator
259
+ require "file_content_type_validator"
260
+ end
261
+ end
262
+
256
263
  initializer "decidim.content_processors" do |_app|
257
264
  Decidim.configure do |config|
258
265
  config.content_processors += [:user, :user_group, :hashtag, :link]
@@ -542,11 +549,6 @@ module Decidim
542
549
  end
543
550
 
544
551
  initializer "decidim.core.add_badges" do
545
- Decidim::Gamification.register_badge(:invitations) do |badge|
546
- badge.levels = [1, 5, 10, 30, 50]
547
- badge.reset = ->(user) { Decidim::User.where(invited_by: user.id).count }
548
- end
549
-
550
552
  Decidim::Gamification.register_badge(:followers) do |badge|
551
553
  badge.levels = [1, 15, 30, 60, 100]
552
554
  badge.reset = ->(user) { user.followers.count }
@@ -761,7 +761,7 @@ shared_examples "comments" do
761
761
 
762
762
  it "replaces the mention with a link to the user's profile" do
763
763
  expect(page).to have_comment_from(user, "A valid user mention: @#{mentioned_user.nickname}", wait: 20)
764
- expect(page).to have_link "@#{mentioned_user.nickname}", href: "http://#{mentioned_user.organization.host}/profiles/#{mentioned_user.nickname}"
764
+ expect(page).to have_link "@#{mentioned_user.nickname}", href: "http://#{mentioned_user.organization.host}:#{Capybara.server_port}/profiles/#{mentioned_user.nickname}"
765
765
  end
766
766
  end
767
767
 
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ shared_examples_for "has embedded video in description" do |description_attribute_name|
4
+ let(description_attribute_name) { { en: %(Description <iframe class="ql-video" allowfullscreen="true" src="#{iframe_src}" frameborder="0"></iframe>) } }
5
+ let(:iframe_src) { "http://www.example.org" }
6
+
7
+ context "when cookies are rejected" do
8
+ before do
9
+ click_link "Cookie settings"
10
+ click_button "Accept only essential"
11
+ end
12
+
13
+ it "disables iframe" do
14
+ expect(page).to have_content("You need to enable all cookies in order to see this content")
15
+ expect(page).not_to have_selector("iframe")
16
+ end
17
+ end
18
+
19
+ context "when cookies are accepted" do
20
+ before do
21
+ click_link "Cookie settings"
22
+ click_button "Accept all"
23
+ end
24
+
25
+ it "shows iframe" do
26
+ expect(page).not_to have_content("You need to enable all cookies in order to see this content")
27
+ expect(page).to have_selector("iframe", count: 1)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ shared_examples_for "m-cell" do |model_name|
6
+ context "with decorated title" do
7
+ let(:cell_model) { send(model_name) }
8
+
9
+ before do
10
+ cell_model.update!(title: { en: "Model <strong>decorated title</strong>" })
11
+ end
12
+
13
+ it "renders the escaped title correctly" do
14
+ expect(cell_html.to_s).to include("Model &lt;strong&gt;decorated title&lt;/strong&gt;")
15
+ end
16
+ end
17
+ end
@@ -4,6 +4,7 @@ require "decidim/core/test/shared_examples/acts_as_author_examples"
4
4
  require "decidim/core/test/shared_examples/admin_log_presenter_examples"
5
5
  require "decidim/core/test/shared_examples/authorable"
6
6
  require "decidim/core/test/shared_examples/coauthorable"
7
+ require "decidim/core/test/shared_examples/editor_shared_examples"
7
8
  require "decidim/core/test/shared_examples/endorsable"
8
9
  require "decidim/core/test/shared_examples/publicable"
9
10
  require "decidim/core/test/shared_examples/localised_email"
@@ -73,3 +74,4 @@ require "decidim/core/test/shared_examples/translated_event_examples"
73
74
  require "decidim/core/test/shared_examples/conversations_examples"
74
75
  require "decidim/core/test/shared_examples/resource_endorsed_event_examples"
75
76
  require "decidim/core/test/shared_examples/versions_controller_examples"
77
+ require "decidim/core/test/shared_examples/mcell_examples"
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-core version.
5
5
  module Core
6
6
  def self.version
7
- "0.27.0.rc2"
7
+ "0.27.1"
8
8
  end
9
9
  end
10
10
  end
@@ -49,7 +49,7 @@ module Decidim
49
49
  if (extensions = extension_allowlist)
50
50
  messages << I18n.t(
51
51
  "allowed_file_extensions",
52
- extensions: extensions.join(" "),
52
+ extensions: extensions.sort.join(" "),
53
53
  scope: "decidim.forms.file_validation"
54
54
  )
55
55
  end
@@ -387,7 +387,14 @@ module Decidim
387
387
  def datetime_field(attribute, options = {})
388
388
  value = object.send(attribute)
389
389
  data = { datepicker: "", timepicker: "" }
390
- data[:startdate] = I18n.l(value, format: :decidim_short) if value.present? && value.is_a?(ActiveSupport::TimeWithZone)
390
+ if value.present?
391
+ case value
392
+ when ActiveSupport::TimeWithZone
393
+ data[:startdate] = I18n.l(value, format: :decidim_short)
394
+ when Time, DateTime
395
+ data[:startdate] = I18n.l(value.in_time_zone(Time.zone), format: :decidim_short)
396
+ end
397
+ end
391
398
  datepicker_format = ruby_format_to_datepicker(I18n.t("time.formats.decidim_short"))
392
399
  data[:"date-format"] = datepicker_format
393
400
 
@@ -417,7 +424,7 @@ module Decidim
417
424
  max_file_size: max_file_size(record, :file),
418
425
  label: I18n.t("decidim.forms.upload.labels.add_attachment"),
419
426
  button_edit_label: I18n.t("decidim.forms.upload.labels.edit_image"),
420
- extension_allowlist: Decidim.organization_settings(Decidim::Attachment).upload_allowed_file_extensions
427
+ extension_allowlist: Decidim.organization_settings(record).upload_allowed_file_extensions
421
428
  }.merge(options)
422
429
 
423
430
  # Upload help uses extension allowlist from the options so we need to call this AFTER setting the defaults.
@@ -844,7 +851,7 @@ module Decidim
844
851
  end
845
852
 
846
853
  def extension_allowlist_help(extension_allowlist)
847
- ["#{I18n.t("extension_allowlist", scope: "decidim.forms.files")} #{extension_allowlist.map { |ext| ext }.join(", ")}"]
854
+ [I18n.t("extension_allowlist", scope: "decidim.forms.files", extensions: extension_allowlist.map { |ext| ext }.join(", "))]
848
855
  end
849
856
 
850
857
  def image_dimensions_help(dimensions_info)
@@ -36,8 +36,8 @@ module Decidim
36
36
  # link_name - The String name of the link between this model and the target resource.
37
37
  #
38
38
  # Returns an ActiveRecord::Relation.
39
- def linked_resources(resource_name, link_name)
40
- scope = sibling_scope(resource_name)
39
+ def linked_resources(resource_name, link_name, component_published: true)
40
+ scope = sibling_scope(resource_name, component_published: component_published)
41
41
 
42
42
  from = scope
43
43
  .joins(:resource_links_from)
@@ -56,14 +56,15 @@ module Decidim
56
56
  # resource_name - The String name of the resource manifest exposed by a component.
57
57
  #
58
58
  # Returns an ActiveRecord::Relation.
59
- def sibling_scope(resource_name)
59
+ def sibling_scope(resource_name, component_published: true)
60
60
  manifest = Decidim.find_resource_manifest(resource_name)
61
61
  return self.class.none unless manifest
62
62
 
63
63
  scope = manifest.resource_scope(component)
64
64
  scope = scope.where("#{self.class.table_name}.id != ?", id) if manifest.model_class == self.class
65
65
  scope = scope.not_hidden if manifest.model_class.respond_to?(:not_hidden)
66
- scope.includes(:component).where.not(decidim_components: { published_at: nil })
66
+ scope = scope.includes(:component).where.not(decidim_components: { published_at: nil }) if component_published
67
+ scope
67
68
  end
68
69
 
69
70
  # Links the given resources to this model, replaces any previous links with the same name.
@@ -97,7 +97,7 @@ module Decidim
97
97
  enum: { klass: String, default: nil },
98
98
  select: { klass: String, default: nil },
99
99
  scope: { klass: Integer, default: nil },
100
- time: { klass: DateTime, default: nil }
100
+ time: { klass: Decidim::Attributes::TimeWithZone, default: nil }
101
101
  }.freeze
102
102
 
103
103
  attribute :type, Symbol, default: :boolean