decidim-core 0.31.0.rc1 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/cells/decidim/activity_cell.rb +6 -0
- data/app/cells/decidim/author/avatar.erb +1 -7
- data/app/cells/decidim/author/badge.erb +6 -0
- data/app/cells/decidim/author/name.erb +1 -5
- data/app/cells/decidim/author/show.erb +47 -15
- data/app/cells/decidim/author_cell.rb +10 -0
- data/app/cells/decidim/profile/avatar.erb +0 -2
- data/app/cells/decidim/profile/badge.erb +3 -3
- data/app/cells/decidim/profile/details.erb +2 -1
- data/app/cells/decidim/user_activity_cell.rb +6 -1
- data/app/controllers/decidim/download_your_data_controller.rb +5 -2
- data/app/helpers/decidim/map_helper.rb +1 -1
- data/app/helpers/decidim/menu_helper.rb +8 -2
- data/app/mailers/decidim/user_group_mailer.rb +21 -0
- data/app/models/decidim/private_export.rb +4 -0
- data/app/models/decidim/user.rb +2 -2
- data/app/packs/src/decidim/controllers/dropdown/controller.js +2 -2
- data/app/packs/src/decidim/controllers/editor/controller.js +4 -1
- data/app/packs/src/decidim/controllers/form_filter/controller.js +6 -0
- data/app/packs/src/decidim/datepicker/generate_datepicker.js +6 -0
- data/app/packs/src/decidim/datepicker/generate_timepicker.js +9 -0
- data/app/packs/src/decidim/index.js +10 -5
- data/app/packs/src/decidim/map/controller/markers.js +3 -1
- data/app/packs/src/decidim/refactor/moved/check_boxes_tree.js +1 -0
- data/app/packs/stylesheets/decidim/_accordion.scss +4 -4
- data/app/packs/stylesheets/decidim/_author.scss +15 -1
- data/app/packs/stylesheets/decidim/_cards.scss +5 -1
- data/app/packs/stylesheets/decidim/_dropdown.scss +22 -5
- data/app/packs/stylesheets/decidim/_filters.scss +1 -1
- data/app/packs/stylesheets/decidim/_footer.scss +5 -0
- data/app/packs/stylesheets/decidim/_profile.scss +6 -6
- data/app/packs/stylesheets/decidim/editor.scss +3 -1
- data/app/services/decidim/download_your_data_exporter.rb +15 -4
- data/app/services/decidim/open_data_exporter.rb +2 -1
- data/app/validators/etiquette_validator.rb +2 -2
- data/app/validators/password_validator.rb +3 -1
- data/app/views/decidim/application/_document.html.erb +2 -2
- data/app/views/decidim/download_your_data/_export.html.erb +1 -1
- data/app/views/decidim/export_mailer/download_your_data_export.html.erb +1 -1
- data/app/views/decidim/export_mailer/export.html.erb +1 -1
- data/app/views/decidim/shared/_filters.html.erb +1 -1
- data/app/views/decidim/user_group_mailer/notify_deprecation_to_member.html.erb +4 -1
- data/app/views/decidim/user_group_mailer/notify_deprecation_to_owner.html.erb +1 -4
- data/app/views/decidim/user_group_mailer/notify_user_group_patched.html.erb +21 -0
- data/app/views/layouts/decidim/_application.html.erb +1 -1
- data/config/locales/ca-IT.yml +30 -18
- data/config/locales/ca.yml +28 -16
- data/config/locales/cs.yml +6 -7
- data/config/locales/de.yml +2 -11
- data/config/locales/en.yml +22 -10
- data/config/locales/es-MX.yml +20 -8
- data/config/locales/es-PY.yml +20 -8
- data/config/locales/es.yml +20 -8
- data/config/locales/eu.yml +60 -48
- data/config/locales/fi-plain.yml +20 -9
- data/config/locales/fi.yml +20 -9
- data/config/locales/fr-CA.yml +22 -10
- data/config/locales/fr.yml +22 -10
- data/config/locales/it.yml +2 -0
- data/config/locales/ja.yml +22 -10
- data/config/locales/ro-RO.yml +1 -1
- data/config/locales/ru.yml +0 -1
- data/config/locales/sl.yml +0 -1
- data/db/data/20251108232118_add_dummy_migration.rb +11 -0
- data/db/migrate/20250217192438_convert_user_groups_into_users.rb +19 -1
- data/db/migrate/20250819110800_convert_private_exports_id_to_uuid.rb +55 -0
- data/decidim-core.gemspec +1 -0
- data/lib/decidim/asset_router/storage.rb +8 -8
- data/lib/decidim/core/engine.rb +9 -0
- data/lib/decidim/core/test/factories.rb +7 -2
- data/lib/decidim/core/test/shared_examples/comments_examples.rb +24 -0
- data/lib/decidim/core/version.rb +1 -1
- data/lib/decidim/form_builder.rb +1 -1
- data/lib/decidim/shakapacker/configuration.rb +5 -1
- data/lib/tasks/upgrade/clean.rake +11 -0
- data/lib/tasks/upgrade/decidim_fix_action_log.rake +28 -0
- data/lib/tasks/upgrade/user_groups_migration.rake +33 -0
- metadata +25 -6
data/config/locales/fi.yml
CHANGED
|
@@ -1151,6 +1151,7 @@ fi:
|
|
|
1151
1151
|
create_with_space: "%{user_name} loi %{resource_name} osallistumistilassa %{space_name}"
|
|
1152
1152
|
delete: "%{user_name} poisti %{resource_name}"
|
|
1153
1153
|
delete_with_space: "%{user_name} poisti %{resource_name} osallistumistilassa %{space_name}"
|
|
1154
|
+
publish: "%{user_name} julkaisi kohteen %{resource_name}"
|
|
1154
1155
|
publish_with_space: "%{user_name} julkaisi %{resource_name} osallistumistilassa %{space_name}"
|
|
1155
1156
|
unknown_action: "%{user_name} suoritti toimenpiteen koskien kohdetta %{resource_name}"
|
|
1156
1157
|
unknown_action_with_space: "%{user_name} suoritti toimenpiteen koskien kohdetta %{resource_name} osallistumistilassa %{space_name}"
|
|
@@ -1726,20 +1727,30 @@ fi:
|
|
|
1726
1727
|
body_2: Yksinkertaistaaksemme organisaatioiden kokemusta tällä alustalla, käyttäjäryhmät poistetaan alustalta. Käyttäjäryhmäsi profiili on nyt muutettu tavalliseksi osallistujaprofiiliksi.
|
|
1727
1728
|
greeting: Hei %{name},
|
|
1728
1729
|
instructions_1: Mikäli sinulla on pääsy kyseiselle sähköpostitilille, tarkasta kyseiseen sähköpostiin saapuneet ohjeet.
|
|
1729
|
-
|
|
1730
|
+
instructions_2: Mikäli sinulla ei ole pääsyä kyseiselle sähköpostitilille, pyydä kolleegaasi, jolla on pääsy kyseiselle tilille, asettamaan profiilille salasana ja jakamaan se kanssasi.
|
|
1731
|
+
instructions_intro: Ryhmän hallitsija voi kirjautua tälle tilille henkilökohtaisilla tunnuksillaan (sähköpostiosoite ja salasana). Näitä tunnuksia ei tule jakaa kenenkään kanssa. Olemme lähettäneet ohjeet uuden salasanan asettamiseen tälle tunnukselle sähköpostiosoitteeseen %{email}.
|
|
1730
1732
|
instructions_title: "<strong>Mitä tämä tarkoittaa sinulle?</strong>"
|
|
1731
|
-
subject: Tärkeä
|
|
1733
|
+
subject: Tärkeä ryhmäprofiilia koskeva päivitys
|
|
1732
1734
|
notify_deprecation_to_owner:
|
|
1733
1735
|
body_1: Tämä viesti koskee tärkeää päivitystä käyttäjäryhmät-toiminnossa palvelussa %{organization_name}.
|
|
1734
1736
|
body_2: Yksinkertaistaaksemme organisaatioiden kokemusta tällä alustalla, käyttäjäryhmät poistetaan alustalta. Käyttäjäryhmäsi <strong>%{name}</strong> profiili on nyt muutettu tavalliseksi osallistujaprofiiliksi.
|
|
1735
|
-
body_3: Mikäli haluat
|
|
1737
|
+
body_3: Mikäli haluat jatkaa ryhmäkäyttäjänä toimimista, ryhmän tilille tulee asettaa salasana. Salasanaa ei tule jakaa kenenkään kanssa.
|
|
1736
1738
|
greeting: Hei %{name},
|
|
1737
|
-
instructions_1: '
|
|
1738
|
-
instructions_2:
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1739
|
+
instructions_1: 'Määritä tilille salasana seuraavan linkin avulla:'
|
|
1740
|
+
instructions_2: 'Älä jaa näitä tunnuksia kenenkään kanssa.'
|
|
1741
|
+
instructions_title: "<strong>Mitä sinun tulee tehdä</strong>"
|
|
1742
|
+
set_password: Määritä salasana
|
|
1743
|
+
subject: Tärkeä ryhmäprofiilia koskeva päivitys
|
|
1744
|
+
notify_user_group_patched:
|
|
1745
|
+
body_1_html: Tämä viesti koskee tärkeää päivitystä käyttäjäryhmät-toiminnossa palvelussa %{organization_name}.
|
|
1746
|
+
body_2_html: Yksinkertaistaaksemme organisaatioiden kokemusta tällä alustalla, käyttäjäryhmät poistetaan alustalta. Käyttäjäryhmäsi <strong>%{name}</strong> profiili on nyt muutettu tavalliseksi osallistujaprofiiliksi.
|
|
1747
|
+
body_3_html: Jatkaaksesi ryhmätilisi käyttöä, sinun tulee asettaa sille sähköpostiosoite ja salasana. Huomioithan, että jokainen ryhmäsi jäsen saa tämän sähköpostiviestin. Mikäli haluat jatkaa tilin käyttöä, yhden ryhmän jäsenen tulee jatkossa hallinnoida tiliä ryhmän sähköpostiosoitteella ja hänen asettamallaan salasanalla.
|
|
1748
|
+
greeting: Hei %{name},
|
|
1749
|
+
instructions_1_html: 'Käytä seuraavia väliaikaisia tunnuksia kirjautuaksesi sisään: <br><br> Sähköpostiosoite: <strong>%{email}</strong> <br> Salasana <strong>%{password}</strong><br><br>'
|
|
1750
|
+
instructions_2_html: Aseta uusi sähköpostiosoite ja salasana.
|
|
1751
|
+
instructions_3_html: Älä jaa näitä tunnuksia kenenkään kanssa. Ainoastaan ryhmän hallinnoija voi jatkossa kirjautua palveluun tällä tilillä.
|
|
1752
|
+
instructions_title_html: "<strong>Mitä sinun täytyy tehdä?</strong>"
|
|
1753
|
+
subject: Tärkeä ryhmäprofiilia koskeva päivitys
|
|
1743
1754
|
user_report_mailer:
|
|
1744
1755
|
notify:
|
|
1745
1756
|
body_1: Käyttäjä %{user} on ilmoitettu käyttäjän %{token} toimesta
|
data/config/locales/fr-CA.yml
CHANGED
|
@@ -184,6 +184,7 @@ fr-CA:
|
|
|
184
184
|
success: Votre compte a été supprimé avec succès.
|
|
185
185
|
download_your_data_export:
|
|
186
186
|
export_expired: L'export a expiré. Essayez de générer un nouvel export.
|
|
187
|
+
export_not_found: L'export auquel vous avez tenté d'accéder n'existe pas, ou vous n'avez pas l'accès pour le télécharger
|
|
187
188
|
file_no_exists: Le fichier n'existe pas
|
|
188
189
|
notice: Le téléchargement de vos données est en cours. Vous recevrez un email lorsque celui-ci sera terminé.
|
|
189
190
|
email_change:
|
|
@@ -1024,6 +1025,7 @@ fr-CA:
|
|
|
1024
1025
|
create_with_space: "%{user_name} a créé %{resource_name} dans %{space_name}"
|
|
1025
1026
|
delete: "%{user_name} a supprimé %{resource_name}"
|
|
1026
1027
|
delete_with_space: "%{user_name} a supprimé %{resource_name} dans %{space_name}"
|
|
1028
|
+
publish: "%{user_name} a publié %{resource_name}"
|
|
1027
1029
|
publish_with_space: "%{user_name} a publié %{resource_name} dans %{space_name}"
|
|
1028
1030
|
unknown_action: "%{user_name} a effectué une action sur %{resource_name}"
|
|
1029
1031
|
unknown_action_with_space: "%{user_name} a effectué une action sur %{resource_name} dans %{space_name}"
|
|
@@ -1054,7 +1056,7 @@ fr-CA:
|
|
|
1054
1056
|
latlng_text: 'latitude : %{latitude}, longitude : %{longitude}'
|
|
1055
1057
|
map_service_brand: OpenStreetMap
|
|
1056
1058
|
menu:
|
|
1057
|
-
help:
|
|
1059
|
+
help: Aidez-moi
|
|
1058
1060
|
home: Accueil
|
|
1059
1061
|
messaging:
|
|
1060
1062
|
conversation_mailer:
|
|
@@ -1562,20 +1564,30 @@ fr-CA:
|
|
|
1562
1564
|
body_2: Dans le cadre de nos efforts pour simplifier l'expérience des organisations, la fonctionnalité "Groupes d'utilisateurs" est dépréciée. Votre profil de groupe d'utilisateurs a maintenant été converti en un profil de simple participant.
|
|
1563
1565
|
greeting: Cher(ère) %{name},
|
|
1564
1566
|
instructions_1: Si vous avez accès à ce compte de messagerie, veuillez vérifier votre boîte de réception pour les instructions.
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1567
|
+
instructions_2: Sinon, l'un de vos collègues qui a accès devra définir le mot de passe et partager les identifiants de connexion avec vous.
|
|
1568
|
+
instructions_intro: Les membres du groupe partageront désormais l'accès à ce profil en utilisant les identifiants de connexion partagés (email et mot de passe). Nous avons envoyé des instructions à %{email} pour définir un nouveau mot de passe pour le profil.
|
|
1569
|
+
instructions_title: "<strong>Ce que cela signifie pour vous</strong>"
|
|
1570
|
+
subject: Mise à jour importante concernant votre profil de groupe
|
|
1568
1571
|
notify_deprecation_to_owner:
|
|
1569
1572
|
body_1: Nous vous contactons pour vous informer d’une mise à jour importante concernant votre profil de groupe sur %{organization_name}.
|
|
1570
1573
|
body_2: Dans le cadre de nos efforts pour simplifier et améliorer l'expérience des organisations comme la vôtre, nous déprécions la fonctionnalité "Groupes d'utilisateurs". Votre groupe, <strong>%{name}</strong>a été converti en simple compte.
|
|
1571
|
-
body_3: Pour continuer à accéder à votre compte, nous avons besoin que vous définissiez un mot de passe.
|
|
1574
|
+
body_3: Pour continuer à accéder à votre compte et partager votre accès, nous avons besoin que vous définissiez un mot de passe. Une fois défini, vous pouvez partager les identifiants de connexion (e-mail et mot de passe) avec n'importe qui.
|
|
1572
1575
|
greeting: Cher(ère) %{name},
|
|
1573
|
-
instructions_1: 'Cliquez sur le lien ci-dessous pour
|
|
1574
|
-
instructions_2:
|
|
1575
|
-
instructions_3: Consultez votre boîte de réception afin d'obtenir des instructions supplémentaires pour définir votre nouveau mot de passe.
|
|
1576
|
+
instructions_1: 'Cliquez sur le lien ci-dessous pour définir votre mot de passe :'
|
|
1577
|
+
instructions_2: 'Partagez les identifiants de connexion (email: %{email} et le nouveau mot de passe) avec vos collègues.'
|
|
1576
1578
|
instructions_title: "<strong>Ce que vous devez faire</strong>"
|
|
1577
|
-
set_password:
|
|
1578
|
-
subject: Mise à jour importante
|
|
1579
|
+
set_password: Définissez votre mot de passe
|
|
1580
|
+
subject: Mise à jour importante concernant votre profil de groupe
|
|
1581
|
+
notify_user_group_patched:
|
|
1582
|
+
body_1_html: Nous vous contactons pour vous informer d’une mise à jour importante concernant votre profil de groupe sur %{organization_name}.
|
|
1583
|
+
body_2_html: Dans le cadre de nos efforts pour simplifier et améliorer l'expérience des organisations comme la vôtre, nous déprécions la fonctionnalité "Groupes d'utilisateurs". Votre groupe, <strong>%{name}</strong>a été converti en simple compte.
|
|
1584
|
+
body_3_html: Pour continuer à accéder à votre compte et partager votre accès, nous avons besoin que vous définissiez une nouvelle adresse e-mail et un nouveau mot de passe. Veuillez noter que chaque membre de votre groupe recevra ce courriel. Pour assurer la continuité de l'accès, vous devrez convenir en interne des identifiants partagés (adresse e-mail et mot de passe) que tout le monde utilisera.
|
|
1585
|
+
greeting: Cher(ère) %{name},
|
|
1586
|
+
instructions_1_html: 'Utilisez les identifiants temporaires suivants pour vous connecter : <br><br> Nom d''utilisateur : <strong>%{email}</strong> <br> Mot de passe : <strong>%{password}</strong><br><br>'
|
|
1587
|
+
instructions_2_html: Définir une nouvelle adresse e-mail et un nouveau mot de passe.
|
|
1588
|
+
instructions_3_html: Partagez les identifiants de connexion choisis avec vos collègues pour que l'ensemble du groupe puisse continuer à accéder au compte.
|
|
1589
|
+
instructions_title_html: "<strong>Ce que vous devez faire</strong>"
|
|
1590
|
+
subject: Mise à jour importante concernant votre profil de groupe
|
|
1579
1591
|
user_report_mailer:
|
|
1580
1592
|
notify:
|
|
1581
1593
|
body_1: L'utilisateur %{user} a été signalé par %{token}
|
data/config/locales/fr.yml
CHANGED
|
@@ -184,6 +184,7 @@ fr:
|
|
|
184
184
|
success: Votre compte a été supprimé avec succès.
|
|
185
185
|
download_your_data_export:
|
|
186
186
|
export_expired: L'export a expiré. Essayez de générer un nouvel export.
|
|
187
|
+
export_not_found: L'export auquel vous avez tenté d'accéder n'existe pas, ou vous n'avez pas l'accès pour le télécharger
|
|
187
188
|
file_no_exists: Le fichier n'existe pas
|
|
188
189
|
notice: Le téléchargement de vos données est en cours. Vous recevrez un email lorsque celui-ci sera terminé.
|
|
189
190
|
email_change:
|
|
@@ -1024,6 +1025,7 @@ fr:
|
|
|
1024
1025
|
create_with_space: "%{user_name} a créé %{resource_name} dans %{space_name}"
|
|
1025
1026
|
delete: "%{user_name} a supprimé %{resource_name}"
|
|
1026
1027
|
delete_with_space: "%{user_name} a supprimé %{resource_name} dans %{space_name}"
|
|
1028
|
+
publish: "%{user_name} a publié %{resource_name}"
|
|
1027
1029
|
publish_with_space: "%{user_name} a publié %{resource_name} dans %{space_name}"
|
|
1028
1030
|
unknown_action: "%{user_name} a effectué une action sur %{resource_name}"
|
|
1029
1031
|
unknown_action_with_space: "%{user_name} a effectué une action sur %{resource_name} dans %{space_name}"
|
|
@@ -1054,7 +1056,7 @@ fr:
|
|
|
1054
1056
|
latlng_text: 'latitude : %{latitude}, longitude : %{longitude}'
|
|
1055
1057
|
map_service_brand: OpenStreetMap
|
|
1056
1058
|
menu:
|
|
1057
|
-
help:
|
|
1059
|
+
help: Aidez-moi
|
|
1058
1060
|
home: Accueil
|
|
1059
1061
|
messaging:
|
|
1060
1062
|
conversation_mailer:
|
|
@@ -1562,20 +1564,30 @@ fr:
|
|
|
1562
1564
|
body_2: Dans le cadre de nos efforts pour simplifier l'expérience des organisations, la fonctionnalité "Groupes d'utilisateurs" est dépréciée. Votre profil de groupe d'utilisateurs a maintenant été converti en un profil de simple participant.
|
|
1563
1565
|
greeting: Cher(ère) %{name},
|
|
1564
1566
|
instructions_1: Si vous avez accès à ce compte de messagerie, veuillez vérifier votre boîte de réception pour les instructions.
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1567
|
+
instructions_2: Sinon, l'un de vos collègues qui a accès devra définir le mot de passe et partager les identifiants de connexion avec vous.
|
|
1568
|
+
instructions_intro: Les membres du groupe partageront désormais l'accès à ce profil en utilisant les identifiants de connexion partagés (email et mot de passe). Nous avons envoyé des instructions à %{email} pour définir un nouveau mot de passe pour le profil.
|
|
1569
|
+
instructions_title: "<strong>Ce que cela signifie pour vous</strong>"
|
|
1570
|
+
subject: Mise à jour importante concernant votre profil de groupe
|
|
1568
1571
|
notify_deprecation_to_owner:
|
|
1569
1572
|
body_1: Nous vous contactons pour vous informer d’une mise à jour importante concernant votre profil de groupe sur %{organization_name}.
|
|
1570
1573
|
body_2: Dans le cadre de nos efforts pour simplifier et améliorer l'expérience des organisations comme la vôtre, nous déprécions la fonctionnalité "Groupes d'utilisateurs". Votre groupe, <strong>%{name}</strong>a été converti en simple compte.
|
|
1571
|
-
body_3: Pour continuer à accéder à votre compte, nous avons besoin que vous définissiez un mot de passe.
|
|
1574
|
+
body_3: Pour continuer à accéder à votre compte et partager votre accès, nous avons besoin que vous définissiez un mot de passe. Une fois défini, vous pouvez partager les identifiants de connexion (e-mail et mot de passe) avec n'importe qui.
|
|
1572
1575
|
greeting: Cher(ère) %{name},
|
|
1573
|
-
instructions_1: 'Cliquez sur le lien ci-dessous pour
|
|
1574
|
-
instructions_2:
|
|
1575
|
-
instructions_3: Consultez votre boîte de réception afin d'obtenir des instructions supplémentaires pour définir votre nouveau mot de passe.
|
|
1576
|
+
instructions_1: 'Cliquez sur le lien ci-dessous pour définir votre mot de passe :'
|
|
1577
|
+
instructions_2: 'Partagez les identifiants de connexion (email: %{email} et le nouveau mot de passe) avec vos collègues.'
|
|
1576
1578
|
instructions_title: "<strong>Ce que vous devez faire</strong>"
|
|
1577
|
-
set_password:
|
|
1578
|
-
subject: Mise à jour importante
|
|
1579
|
+
set_password: Définissez votre mot de passe
|
|
1580
|
+
subject: Mise à jour importante concernant votre profil de groupe
|
|
1581
|
+
notify_user_group_patched:
|
|
1582
|
+
body_1_html: Nous vous contactons pour vous informer d’une mise à jour importante concernant votre profil de groupe sur %{organization_name}.
|
|
1583
|
+
body_2_html: Dans le cadre de nos efforts pour simplifier et améliorer l'expérience des organisations comme la vôtre, nous déprécions la fonctionnalité "Groupes d'utilisateurs". Votre groupe, <strong>%{name}</strong>a été converti en simple compte.
|
|
1584
|
+
body_3_html: Pour continuer à accéder à votre compte et partager votre accès, nous avons besoin que vous définissiez une nouvelle adresse e-mail et un nouveau mot de passe. Veuillez noter que chaque membre de votre groupe recevra ce courriel. Pour assurer la continuité de l'accès, vous devrez convenir en interne des identifiants partagés (adresse e-mail et mot de passe) que tout le monde utilisera.
|
|
1585
|
+
greeting: Cher(ère) %{name},
|
|
1586
|
+
instructions_1_html: 'Utilisez les identifiants temporaires suivants pour vous connecter : <br><br> Nom d''utilisateur : <strong>%{email}</strong> <br> Mot de passe : <strong>%{password}</strong><br><br>'
|
|
1587
|
+
instructions_2_html: Définir une nouvelle adresse e-mail et un nouveau mot de passe.
|
|
1588
|
+
instructions_3_html: Partagez les identifiants de connexion choisis avec vos collègues pour que l'ensemble du groupe puisse continuer à accéder au compte.
|
|
1589
|
+
instructions_title_html: "<strong>Ce que vous devez faire</strong>"
|
|
1590
|
+
subject: Mise à jour importante concernant votre profil de groupe
|
|
1579
1591
|
user_report_mailer:
|
|
1580
1592
|
notify:
|
|
1581
1593
|
body_1: L'utilisateur %{user} a été signalé par %{token}
|
data/config/locales/it.yml
CHANGED
data/config/locales/ja.yml
CHANGED
|
@@ -186,6 +186,7 @@ ja:
|
|
|
186
186
|
success: アカウントが正常に削除されました。
|
|
187
187
|
download_your_data_export:
|
|
188
188
|
export_expired: エクスポートの有効期限が切れています。新しいエクスポートを生成してください。
|
|
189
|
+
export_not_found: アクセスしたエクスポートが存在しないか、ダウンロードする権限がありません
|
|
189
190
|
file_no_exists: ファイルが存在しません
|
|
190
191
|
notice: データのダウンロードは現在進行中です。完了した際にはメールでお知らせします。
|
|
191
192
|
email_change:
|
|
@@ -1133,6 +1134,7 @@ ja:
|
|
|
1133
1134
|
create_with_space: "%{user_name} が %{resource_name} に %{space_name} を作成しました"
|
|
1134
1135
|
delete: "%{user_name} が %{resource_name} を削除しました"
|
|
1135
1136
|
delete_with_space: "%{user_name} が %{resource_name} で %{space_name} を削除しました"
|
|
1137
|
+
publish: "%{user_name} が %{resource_name}を公開しました"
|
|
1136
1138
|
publish_with_space: "%{user_name} が %{space_name} の %{resource_name} を公開しました"
|
|
1137
1139
|
unknown_action: "%{user_name} が %{resource_name} にいくつかのアクションを実行しました"
|
|
1138
1140
|
unknown_action_with_space: "%{user_name} が %{resource_name} で %{space_name} にアクションを実行しました"
|
|
@@ -1706,20 +1708,30 @@ ja:
|
|
|
1706
1708
|
body_2: 組織向けの利用体験を簡素化する取り組みの一環として、「ユーザーグループ」機能は廃止される予定です。あなたのユーザーグループのプロフィールは通常の参加者プロフィールに変更されました。
|
|
1707
1709
|
greeting: こんにちは %{name} さん、
|
|
1708
1710
|
instructions_1: そのメールアカウントにアクセスできる場合は、受信トレイに届いている案内をご確認ください。
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1711
|
+
instructions_2: そうでない場合は、アクセス権を持つ同僚の一人がパスワードを設定し、ログイン情報をあなたと共有する必要があります。
|
|
1712
|
+
instructions_intro: グループメンバーは、共有ログインクレデンシャル(メールアドレスとパスワード)を使用して、このプロファイルへのアクセスを共有するようになりました。 プロファイルの新しいパスワードを設定するための指示を %{email} に送信しました。
|
|
1713
|
+
instructions_title: "<strong>あなたへの影響</strong>"
|
|
1714
|
+
subject: グループプロフィールに関する重要な更新情報
|
|
1712
1715
|
notify_deprecation_to_owner:
|
|
1713
1716
|
body_1: '%{organization_name}でのグループプロフィールに関する重要なアップデートについてお知らせするためにご連絡しています。'
|
|
1714
1717
|
body_2: あなたのような組織向けの利用体験を簡素化・改善する取り組みの一環として、「ユーザーグループ」機能は廃止されます。あなたのグループ<strong>%{name}</strong>は通常のアカウントに変更されました。
|
|
1715
|
-
body_3:
|
|
1718
|
+
body_3: 引き続きアカウントへアクセスしてアクセス権限を共有するためには、パスワードを設定する必要があります。設定後、ログイン認証情報(メールアドレスとパスワード)を任意の相手と共有することが可能になります。
|
|
1716
1719
|
greeting: こんにちは %{name} さん、
|
|
1717
|
-
instructions_1: '
|
|
1718
|
-
instructions_2:
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1720
|
+
instructions_1: '以下のリンクをクリックしてパスワードを設定してください:'
|
|
1721
|
+
instructions_2: 'ログイン認証情報(メールアドレス:%{email}、新規パスワード)を同僚と共有してください。'
|
|
1722
|
+
instructions_title: "<strong>実施すべきこと</strong>"
|
|
1723
|
+
set_password: パスワードの設定
|
|
1724
|
+
subject: グループプロフィールに関する重要な更新事項
|
|
1725
|
+
notify_user_group_patched:
|
|
1726
|
+
body_1_html: '%{organization_name}におけるグループプロフィールに関する重要な更新についてお知らせします。'
|
|
1727
|
+
body_2_html: 組織の利便性向上とシステムの簡素化を図るため、「ユーザーグループ」機能の廃止を決定いたしました。あなたのグループ <strong>%{name}</strong> は、通常のアカウント形式に変更されています。
|
|
1728
|
+
body_3_html: 引き続きアカウントにアクセスしてアクセス権限を共有するためには、新しいメールアドレスとパスワードの設定が必要です。なお、グループの各メンバーにはこのメールが送信されます。継続的なアクセスを保証するため、共有する認証情報(メールアドレスとパスワード)について、グループ内で事前に合意していただく必要があります。
|
|
1729
|
+
greeting: こんにちは %{name} さん、
|
|
1730
|
+
instructions_1_html: '以下の仮認証情報を使用してログインしてください:<br><br> ユーザー名: <strong>%{email}</strong> <br> パスワード: <strong>%{password}</strong><br><br>'
|
|
1731
|
+
instructions_2_html: 新しいメールアドレスとパスワードを設定します。
|
|
1732
|
+
instructions_3_html: 選択したログイン認証情報を同僚の方々と共有し、グループ全体で引き続きアカウントにアクセスできるようにしてください。
|
|
1733
|
+
instructions_title_html: "<strong>実施が必要な事項</strong>"
|
|
1734
|
+
subject: グループプロフィールに関する重要なお知らせ
|
|
1723
1735
|
user_report_mailer:
|
|
1724
1736
|
notify:
|
|
1725
1737
|
body_1: ユーザー %{user} が %{token} によって報告されました
|
data/config/locales/ro-RO.yml
CHANGED
|
@@ -1381,7 +1381,7 @@ ro:
|
|
|
1381
1381
|
body_2: Ca parte a eforturilor noastre de a simplifica experiența organizațiilor, funcționalitatea "Grupuri de utilizatori" va fi înlăturată. Profilul dvs. de utilizator grup a fost acum convertit într-un profil de participant obișnuit.
|
|
1382
1382
|
greeting: Dragă %{name},
|
|
1383
1383
|
instructions_1: Dacă aveți acces la acest cont de e-mail, vă rugăm să verificați căsuța poștală pentru instrucțiuni.
|
|
1384
|
-
|
|
1384
|
+
instructions_2: În caz contrar, unul dintre colegii dvs. care are acces va trebui să seteze parola și să partajeze credențialele de conectare cu dvs.
|
|
1385
1385
|
user_report_mailer:
|
|
1386
1386
|
notify:
|
|
1387
1387
|
body_1: Utilizatorul %{user} a fost raportat de %{token}
|
data/config/locales/ru.yml
CHANGED
data/config/locales/sl.yml
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
class ConvertUserGroupsIntoUsers < ActiveRecord::Migration[7.0]
|
|
4
4
|
class User < ApplicationRecord
|
|
5
|
+
belongs_to :organization, foreign_key: "decidim_organization_id", class_name: "Decidim::Organization"
|
|
6
|
+
|
|
5
7
|
self.table_name = "decidim_users"
|
|
6
8
|
self.inheritance_column = nil
|
|
7
9
|
|
|
8
|
-
scope :new_group, -> { where("extended_data @> ?",
|
|
10
|
+
scope :new_group, -> { where("extended_data @> ?", { group: true }.to_json) }
|
|
9
11
|
scope :old_group, -> { where(type: "Decidim::UserGroup") }
|
|
10
12
|
|
|
11
13
|
def verified_at
|
|
@@ -14,13 +16,29 @@ class ConvertUserGroupsIntoUsers < ActiveRecord::Migration[7.0]
|
|
|
14
16
|
end
|
|
15
17
|
|
|
16
18
|
class UserGroup < ApplicationRecord
|
|
19
|
+
belongs_to :organization, foreign_key: "decidim_organization_id", class_name: "Decidim::Organization"
|
|
20
|
+
|
|
17
21
|
self.table_name = "decidim_users"
|
|
18
22
|
self.inheritance_column = nil
|
|
19
23
|
end
|
|
20
24
|
|
|
25
|
+
# Identify if there is another user with the same email in the same organization
|
|
26
|
+
# @param [User] group
|
|
27
|
+
# @return [Boolean]
|
|
28
|
+
def another_user_with_same_email_in_organization?(group)
|
|
29
|
+
User.where.not(id: group.id).exists?(decidim_organization_id: group.decidim_organization_id, email: group.email)
|
|
30
|
+
end
|
|
31
|
+
|
|
21
32
|
# rubocop:disable Rails/SkipsModelValidations
|
|
22
33
|
def up
|
|
23
34
|
User.old_group.find_each do |group|
|
|
35
|
+
if group.email.blank? || another_user_with_same_email_in_organization?(group)
|
|
36
|
+
group.update_attribute(:email, "user_group_#{group.id}@#{group.organization.host}.invalid")
|
|
37
|
+
group.update_attribute(:extended_data, (group.extended_data || {}).merge("patched" => true, "previous_email" => group.email))
|
|
38
|
+
|
|
39
|
+
group.reload
|
|
40
|
+
end
|
|
41
|
+
|
|
24
42
|
group.update_attribute(:extended_data, (group.extended_data || {}).merge("group" => true))
|
|
25
43
|
group.update_attribute(:type, "Decidim::User")
|
|
26
44
|
group.update_attribute(:officialized_at, group.verified_at) if group.verified_at.present?
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# This migration comes from decidim (originally 20250819110800)
|
|
4
|
+
class ConvertPrivateExportsIdToUuid < ActiveRecord::Migration[7.0]
|
|
5
|
+
def up
|
|
6
|
+
create_table :decidim_private_exports_new, force: :cascade do |t|
|
|
7
|
+
t.uuid :uuid, null: false
|
|
8
|
+
t.string :export_type, null: false
|
|
9
|
+
t.string :attached_to_type
|
|
10
|
+
t.integer :attached_to_id
|
|
11
|
+
t.string :file
|
|
12
|
+
t.string :content_type, null: false
|
|
13
|
+
t.string :file_size, null: false
|
|
14
|
+
t.datetime :expires_at
|
|
15
|
+
t.jsonb :metadata, default: {}
|
|
16
|
+
t.timestamps
|
|
17
|
+
|
|
18
|
+
t.index [:uuid], name: "index_decidim_private_exports_on_uuid", unique: true
|
|
19
|
+
end
|
|
20
|
+
# Copy data from old table to new table
|
|
21
|
+
execute <<-SQL.squish
|
|
22
|
+
INSERT INTO decidim_private_exports_new (uuid, export_type, attached_to_type, attached_to_id, file, content_type, file_size, expires_at, metadata, created_at, updated_at)
|
|
23
|
+
SELECT id, export_type, attached_to_type, attached_to_id, file, content_type, file_size, NOW(), metadata, created_at, updated_at
|
|
24
|
+
FROM decidim_private_exports
|
|
25
|
+
SQL
|
|
26
|
+
|
|
27
|
+
# Drop old table and rename new table
|
|
28
|
+
drop_table :decidim_private_exports
|
|
29
|
+
rename_table :decidim_private_exports_new, :decidim_private_exports
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def down
|
|
33
|
+
# Similar approach for rollback
|
|
34
|
+
create_table :decidim_private_exports_new, id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
|
|
35
|
+
t.string :export_type, null: false
|
|
36
|
+
t.string :attached_to_type
|
|
37
|
+
t.integer :attached_to_id
|
|
38
|
+
t.string :file
|
|
39
|
+
t.string :content_type, null: false
|
|
40
|
+
t.string :file_size, null: false
|
|
41
|
+
t.datetime :expires_at
|
|
42
|
+
t.jsonb :metadata, default: {}
|
|
43
|
+
t.timestamps
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
execute <<-SQL.squish
|
|
47
|
+
INSERT INTO decidim_private_exports_new (id, export_type, attached_to_type, attached_to_id, file, content_type, file_size, expires_at, metadata, created_at, updated_at)
|
|
48
|
+
SELECT uuid, export_type, attached_to_type, attached_to_id, file, content_type, file_size, expires_at, metadata, created_at, updated_at
|
|
49
|
+
FROM decidim_private_exports
|
|
50
|
+
SQL
|
|
51
|
+
|
|
52
|
+
drop_table :decidim_private_exports
|
|
53
|
+
rename_table :decidim_private_exports_new, :decidim_private_exports
|
|
54
|
+
end
|
|
55
|
+
end
|
data/decidim-core.gemspec
CHANGED
|
@@ -41,6 +41,7 @@ Gem::Specification.new do |s|
|
|
|
41
41
|
s.add_dependency "cells-rails", "~> 0.1.3"
|
|
42
42
|
s.add_dependency "charlock_holmes", "~> 0.7"
|
|
43
43
|
s.add_dependency "chartkick", "~> 5.1.2"
|
|
44
|
+
s.add_dependency "data_migrate", "~> 11.3"
|
|
44
45
|
s.add_dependency "date_validator", "~> 0.12.0"
|
|
45
46
|
s.add_dependency "devise", "~> 4.7"
|
|
46
47
|
s.add_dependency "devise-i18n", "~> 1.2"
|
|
@@ -44,20 +44,20 @@ module Decidim
|
|
|
44
44
|
# @param options The options for the URL that are the normal route options
|
|
45
45
|
# Rails route helpers accept
|
|
46
46
|
# @return [String] The URL of the asset
|
|
47
|
-
def url(**)
|
|
47
|
+
def url(**options)
|
|
48
48
|
case asset
|
|
49
49
|
when ActiveStorage::Attached
|
|
50
|
-
ensure_current_host(asset.record, **)
|
|
51
|
-
blob_url(**)
|
|
50
|
+
ensure_current_host(asset.record, **options)
|
|
51
|
+
blob_url(**options.except(:host))
|
|
52
52
|
when ActiveStorage::Blob
|
|
53
|
-
blob_url(**)
|
|
53
|
+
blob_url(**options)
|
|
54
54
|
else # ActiveStorage::VariantWithRecord, ActiveStorage::Variant
|
|
55
55
|
if blob && blob.attachments.any?
|
|
56
|
-
ensure_current_host(blob.attachments.first&.record, **)
|
|
57
|
-
representation_url(**)
|
|
56
|
+
ensure_current_host(blob.attachments.first&.record, **options)
|
|
57
|
+
representation_url(**options.except(:host))
|
|
58
58
|
else
|
|
59
|
-
ensure_current_host(nil, **)
|
|
60
|
-
representation_url(
|
|
59
|
+
ensure_current_host(nil, **options)
|
|
60
|
+
representation_url(**options.except(:host), only_path: true)
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
end
|
data/lib/decidim/core/engine.rb
CHANGED
|
@@ -38,6 +38,7 @@ require "ransack"
|
|
|
38
38
|
require "wisper"
|
|
39
39
|
require "chartkick"
|
|
40
40
|
require "shakapacker"
|
|
41
|
+
require "data_migrate"
|
|
41
42
|
|
|
42
43
|
require "decidim/api"
|
|
43
44
|
require "decidim/core/content_blocks/registry_manager"
|
|
@@ -229,6 +230,13 @@ module Decidim
|
|
|
229
230
|
Decidim.icons.register(name: "facebook-circle-line", icon: "facebook-circle-line", category: "social icon", description: "", engine: :core)
|
|
230
231
|
end
|
|
231
232
|
|
|
233
|
+
initializer "decidim_core.data_migrate" do |app|
|
|
234
|
+
DataMigrate.configure do |config|
|
|
235
|
+
config.data_migrations_path = [app.root.join("db/data").to_s]
|
|
236
|
+
config.data_migrations_path << root.join("db/data").to_s
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
|
|
232
240
|
initializer "decidim_core.patch_shakapacker", before: "shakapacker.version_checker" do
|
|
233
241
|
ENV["SHAKAPACKER_CONFIG"] = Decidim::Shakapacker.configuration.configuration_file
|
|
234
242
|
end
|
|
@@ -488,6 +496,7 @@ module Decidim
|
|
|
488
496
|
end
|
|
489
497
|
|
|
490
498
|
initializer "decidim_core.add_cells_view_paths" do
|
|
499
|
+
Cell::ViewModel.view_paths << Rails.root.join("app/views") # for partials
|
|
491
500
|
Cell::ViewModel.view_paths << File.expand_path("#{Decidim::Core::Engine.root}/app/cells")
|
|
492
501
|
Cell::ViewModel.view_paths << File.expand_path("#{Decidim::Core::Engine.root}/app/cells/amendable")
|
|
493
502
|
Cell::ViewModel.view_paths << File.expand_path("#{Decidim::Core::Engine.root}/app/views") # for partials
|
|
@@ -871,9 +871,14 @@ FactoryBot.define do
|
|
|
871
871
|
end
|
|
872
872
|
expires_at { 1.week.from_now }
|
|
873
873
|
attached_to { create(:user, organization:, skip_injection:) }
|
|
874
|
-
export_type { "
|
|
874
|
+
export_type { "download_your_data" }
|
|
875
875
|
content_type { "application/zip" }
|
|
876
|
-
file_size {
|
|
876
|
+
file_size { 208.bytes }
|
|
877
|
+
file { Decidim::Dev.test_file("dummy-export.zip", "application/zip") }
|
|
878
|
+
|
|
879
|
+
trait :expired do
|
|
880
|
+
expires_at { 1.week.ago }
|
|
881
|
+
end
|
|
877
882
|
end
|
|
878
883
|
|
|
879
884
|
factory :searchable_resource, class: "Decidim::SearchableResource" do
|
|
@@ -873,6 +873,30 @@ shared_examples "comments" do
|
|
|
873
873
|
expect(page.find("#comment-#{parent.id}-replies").text).to be_blank
|
|
874
874
|
end
|
|
875
875
|
end
|
|
876
|
+
|
|
877
|
+
context "when admin moderates the comment" do
|
|
878
|
+
let!(:user) { create(:user, :admin, :confirmed, organization:) }
|
|
879
|
+
|
|
880
|
+
before do
|
|
881
|
+
switch_to_host(organization.host)
|
|
882
|
+
login_as user, scope: :user
|
|
883
|
+
visit resource_path
|
|
884
|
+
end
|
|
885
|
+
|
|
886
|
+
it "hides the comment" do
|
|
887
|
+
within "#comment_#{comments.first.id}" do
|
|
888
|
+
page.find("[id^='dropdown-trigger']").click
|
|
889
|
+
click_on "Report"
|
|
890
|
+
end
|
|
891
|
+
|
|
892
|
+
within "#flagModalComment#{comments.first.id}" do
|
|
893
|
+
check "Hide this content"
|
|
894
|
+
click_on "Hide"
|
|
895
|
+
end
|
|
896
|
+
|
|
897
|
+
expect(page).to have_content("This resource has been hidden.")
|
|
898
|
+
end
|
|
899
|
+
end
|
|
876
900
|
end
|
|
877
901
|
|
|
878
902
|
describe "arguable option" do
|
data/lib/decidim/core/version.rb
CHANGED
data/lib/decidim/form_builder.rb
CHANGED
|
@@ -204,7 +204,7 @@ module Decidim
|
|
|
204
204
|
disabled: options[:disabled],
|
|
205
205
|
options: editor_options[:editor]
|
|
206
206
|
}
|
|
207
|
-
) { content_tag(:div, nil, class: "editor-input", style: "height: #{lines}rem") }
|
|
207
|
+
) { content_tag(:div, nil, class: "editor-input", style: "min-height: #{lines}rem") }
|
|
208
208
|
template += error_for(name, options) if error?(name)
|
|
209
209
|
template += editor_upload(editor_image, editor_options[:upload])
|
|
210
210
|
template.html_safe
|
|
@@ -64,7 +64,11 @@ module Decidim
|
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
def configuration_file_path
|
|
67
|
-
@configuration_file_path ||=
|
|
67
|
+
@configuration_file_path ||= if defined?(Rails) && Rails.env.test?
|
|
68
|
+
File.join(app_path, "tmp/shakapacker_runtime#{ENV.fetch("TEST_ENV_NUMBER", "")}.yml")
|
|
69
|
+
else
|
|
70
|
+
File.join(app_path, "tmp/shakapacker_runtime.yml")
|
|
71
|
+
end
|
|
68
72
|
end
|
|
69
73
|
|
|
70
74
|
def original_configuration_file_path
|
|
@@ -148,6 +148,17 @@ namespace :decidim do
|
|
|
148
148
|
invalid_private_exports.delete_all
|
|
149
149
|
end
|
|
150
150
|
|
|
151
|
+
desc "Remove invalid exports from ActiveStorage"
|
|
152
|
+
task remove_private_exports_attachments: :environment do
|
|
153
|
+
invalid = ActiveStorage::Attachment.where(record_type: "Decidim::PrivateExport", record_id: 0)
|
|
154
|
+
logger.info("=== Removing #{invalid.length} invalid PrivateExports attachments")
|
|
155
|
+
invalid.each(&:purge_later)
|
|
156
|
+
|
|
157
|
+
expired = Decidim::PrivateExport.where(expires_at: ..Time.zone.now).collect(&:file).compact_blank
|
|
158
|
+
logger.info("=== Removing #{expired.length} expired attachments from PrivateExports")
|
|
159
|
+
expired.each(&:purge_later) if expired.any?
|
|
160
|
+
end
|
|
161
|
+
|
|
151
162
|
def logger
|
|
152
163
|
@logger ||= Logger.new($stdout)
|
|
153
164
|
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
namespace :decidim do
|
|
4
|
+
namespace :upgrade do
|
|
5
|
+
desc "Fixes the visibility of menu_hidden action logs"
|
|
6
|
+
task :fix_action_log => :environment do
|
|
7
|
+
logger.info("Fixing action log menu_hidden actions...")
|
|
8
|
+
|
|
9
|
+
count = Decidim::ActionLog.where(action: "menu_hidden").where.not(visibility: "admin-only").count
|
|
10
|
+
logger.info "Found #{count} action logs to update."
|
|
11
|
+
if count.positive?
|
|
12
|
+
# ActionLog is a read-only model, so we need to use raw SQL to update the records
|
|
13
|
+
ActiveRecord::Base.connection.execute("UPDATE decidim_action_logs SET visibility = 'admin-only' WHERE action = 'menu_hidden'")
|
|
14
|
+
if Decidim::ActionLog.where(action: "menu_hidden").where.not(visibility: "admin-only").count.zero?
|
|
15
|
+
logger.info("Successfully updated #{count} action logs.")
|
|
16
|
+
else
|
|
17
|
+
logger.error("Failed to update all action logs. Please check the database.")
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def logger
|
|
25
|
+
@logger ||= Logger.new($stdout)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|