decidim-core 0.31.0.rc1 → 0.31.0.rc2

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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/author/avatar.erb +1 -7
  3. data/app/cells/decidim/author/badge.erb +6 -0
  4. data/app/cells/decidim/author/name.erb +1 -5
  5. data/app/cells/decidim/author/show.erb +47 -15
  6. data/app/cells/decidim/author_cell.rb +10 -0
  7. data/app/cells/decidim/profile/avatar.erb +0 -2
  8. data/app/cells/decidim/profile/badge.erb +3 -3
  9. data/app/cells/decidim/profile/details.erb +2 -1
  10. data/app/cells/decidim/user_activity_cell.rb +6 -1
  11. data/app/helpers/decidim/map_helper.rb +1 -1
  12. data/app/helpers/decidim/menu_helper.rb +8 -2
  13. data/app/mailers/decidim/user_group_mailer.rb +21 -0
  14. data/app/models/decidim/user.rb +2 -2
  15. data/app/packs/src/decidim/controllers/editor/controller.js +4 -1
  16. data/app/packs/src/decidim/controllers/form_filter/controller.js +6 -0
  17. data/app/packs/src/decidim/refactor/moved/check_boxes_tree.js +1 -0
  18. data/app/packs/stylesheets/decidim/_accordion.scss +4 -4
  19. data/app/packs/stylesheets/decidim/_author.scss +15 -1
  20. data/app/packs/stylesheets/decidim/_cards.scss +5 -1
  21. data/app/packs/stylesheets/decidim/_profile.scss +6 -6
  22. data/app/packs/stylesheets/decidim/editor.scss +3 -1
  23. data/app/validators/etiquette_validator.rb +2 -2
  24. data/app/validators/password_validator.rb +3 -1
  25. data/app/views/decidim/application/_document.html.erb +2 -2
  26. data/app/views/decidim/shared/_filters.html.erb +1 -1
  27. data/app/views/decidim/user_group_mailer/notify_deprecation_to_member.html.erb +4 -1
  28. data/app/views/decidim/user_group_mailer/notify_deprecation_to_owner.html.erb +1 -4
  29. data/app/views/decidim/user_group_mailer/notify_user_group_patched.html.erb +21 -0
  30. data/app/views/layouts/decidim/_application.html.erb +1 -1
  31. data/config/locales/ca-IT.yml +26 -16
  32. data/config/locales/ca.yml +26 -16
  33. data/config/locales/cs.yml +6 -7
  34. data/config/locales/de.yml +1 -10
  35. data/config/locales/en.yml +20 -10
  36. data/config/locales/es-MX.yml +18 -8
  37. data/config/locales/es-PY.yml +18 -8
  38. data/config/locales/es.yml +18 -8
  39. data/config/locales/eu.yml +36 -35
  40. data/config/locales/fi-plain.yml +9 -9
  41. data/config/locales/fi.yml +9 -9
  42. data/config/locales/fr-CA.yml +9 -9
  43. data/config/locales/fr.yml +9 -9
  44. data/config/locales/ja.yml +0 -10
  45. data/config/locales/ro-RO.yml +1 -1
  46. data/db/migrate/20250217192438_convert_user_groups_into_users.rb +19 -1
  47. data/lib/decidim/asset_router/storage.rb +8 -8
  48. data/lib/decidim/core/version.rb +1 -1
  49. data/lib/decidim/form_builder.rb +1 -1
  50. data/lib/tasks/upgrade/user_groups_migration.rake +33 -0
  51. metadata +8 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48ac792c6ae7948c567414610e5822df045b3f9f6c4dc638a8e5813a6043c6aa
4
- data.tar.gz: 4b19fd5477f45a51b816eeabdb81961c181ef8d4a46d1fbe920c9fbe0a5cef25
3
+ metadata.gz: 20b25b4c72d8bdd6dc49a4de6ef5c9668d93ee906c40e9ca1147883682b22a32
4
+ data.tar.gz: aa75ba1beac71b39a10ac9dc539be1c8390aaa6ac61d253f16b02889a58933a9
5
5
  SHA512:
6
- metadata.gz: a44f376207a878d0ac6d250dc82d82e0c9c6ae06ca51f97140fe65e01eecc01780bbfe49c9434bf4dde2631141912d765e6052897ab07ae360ee57848f9e28a3
7
- data.tar.gz: ac20b49d78c501a49757a3483e483e60b47ba4de6652ffbafbe6d97d535ab8a25aa6b1d21b8a93870116eff87c8f6489e2171238265393c3976e8ce22dd704aa
6
+ metadata.gz: 108a66dff2b65eb213285e9335ae7c4e365f541fb49460973c07e4a372ebbf5673514113cfc5e3fb451ee867ad6a0de40a520f7953da10d95c5ad05ed97e98cb
7
+ data.tar.gz: fd774c108044e92d3181a8d3fb57d5b2c6cfa42bd411485765bb53e302dc3bf480022f9bda4fa4bbec7050c8a898db5ba7c267a68ec58ecccd1324c8d7554a07
@@ -1,9 +1,3 @@
1
1
  <%= content_tag :span, class: "author__avatar-container" do %>
2
- <% if profile_path? %>
3
- <%= link_to profile_path do %>
4
- <%= render :avatar_image %>
5
- <% end %>
6
- <% else %>
7
- <%= render :avatar_image %>
8
- <% end %>
2
+ <%= render :avatar_image %>
9
3
  <% end %>
@@ -0,0 +1,6 @@
1
+ <% if show_badge? %>
2
+ <span class="author__badge">
3
+ <%= icon "star-s-fill" %>
4
+ <span class="sr-only"><%= officialization_text %></span>
5
+ </span>
6
+ <% end %>
@@ -1,5 +1 @@
1
- <% if profile_path? %>
2
- <%= link_to display_name, profile_path, class: "author__name underline" %>
3
- <% else %>
4
- <%= content_tag :span, display_name, class: "author__name" %>
5
- <% end %>
1
+ <%= content_tag :span, display_name, class: "author__name" %>
@@ -1,26 +1,58 @@
1
1
  <%= content_tag(:p, class: :author, data: ) do %>
2
- <%= content_tag :span, class: "author__container#{" is-compact" if layout == :compact}" do %>
3
- <% if layout == :compact %>
4
- <%= render :avatar %>
2
+ <% if layout == :compact %>
5
3
 
6
- <span>
7
- <%= render :name %>
4
+ <% if profile_path? %>
5
+ <%= link_to profile_path, class: "author__container is-compact" do %>
6
+ <%= render :avatar %>
7
+
8
+ <span>
9
+ <span class="flex gap-2">
10
+ <%= render :name %>
11
+ <%= render :badge %>
12
+ </span>
8
13
 
9
- <% context_actions.each do |action| %>
10
- <%= render action %>
11
- <% end %>
12
- </span>
13
- <% elsif layout == :avatar %>
14
- <%= render :avatar %>
14
+ <% context_actions.each do |action| %>
15
+ <%= render action %>
16
+ <% end %>
17
+ </span>
18
+ <% end %>
15
19
  <% else %>
16
- <%= render :avatar %>
17
- <%= render :name %>
20
+ <%= content_tag :span, class: "author__container is-compact" do %>
21
+ <%= render :avatar %>
22
+
23
+ <span>
24
+ <%= render :name %>
25
+
26
+ <% context_actions.each do |action| %>
27
+ <%= render action %>
28
+ <% end %>
29
+ </span>
30
+ <% end %>
31
+ <% end %>
32
+ <% elsif layout == :avatar %>
33
+ <%= render :avatar %>
34
+ <% else %>
35
+ <% if profile_path? %>
36
+ <%= link_to profile_path, class: "author__container" do %>
37
+ <%= render :avatar %>
38
+
39
+ <%= render :name %>
40
+ <%= render :badge %>
41
+ <% end %>
42
+ <% else %>
43
+ <%= content_tag :span, class: "author__container" do %>
44
+ <%= render :avatar %>
45
+ <%= render :name %>
46
+ <%= render :badge %>
47
+ <% end %>
18
48
  <% end %>
19
49
  <% end %>
20
50
 
21
51
  <% if layout == :default %>
22
- <% context_actions.each do |action| %>
23
- <%= render action %>
52
+ <%= content_tag :span, class: "author__container" do %>
53
+ <% context_actions.each do |action| %>
54
+ <%= render action %>
55
+ <% end %>
24
56
  <% end %>
25
57
  <% end %>
26
58
  <% end %>
@@ -163,5 +163,15 @@ module Decidim
163
163
  def resource_name
164
164
  @resource_name ||= from_context.class.name.demodulize.underscore
165
165
  end
166
+
167
+ def show_badge?
168
+ return false unless model.respond_to? :officialized?
169
+
170
+ model.officialized?
171
+ end
172
+
173
+ def officialization_text
174
+ translated_attribute(model.officialized_as).presence || t("decidim.profiles.show.officialized")
175
+ end
166
176
  end
167
177
  end
@@ -2,6 +2,4 @@
2
2
  <div class="profile__avatar">
3
3
  <%= image_tag avatar_url, alt: t("decidim.author.avatar", name: decidim_sanitize(presented_profile.name)) %>
4
4
  </div>
5
-
6
- <%= render :badge if show_badge? %>
7
5
  </div>
@@ -1,4 +1,4 @@
1
- <div class="profile__avatar-badge">
1
+ <span class="profile__details-badge">
2
2
  <%= icon "star-s-fill" %>
3
- <span class="sr-only"><%= officialization_text %></span>
4
- </div>
3
+ <%= officialization_text %>
4
+ </span>
@@ -1,7 +1,8 @@
1
1
  <div class="profile__details">
2
- <h1 class="h3">
2
+ <h1 class="h3 flex gap-2">
3
3
  <%= presented_profile.name %>
4
4
  <span class="sr-only"><%= user_tabs.find { |tab_item| is_active_link?(tab_item[:path]) }&.dig(:text) %> (<%= presented_profile.name %>)</span>
5
+ <%= render :badge if show_badge? %>
5
6
  </h1>
6
7
  <div class="profile__details-data">
7
8
  <% details_items.each do |detail| %>
@@ -11,7 +11,12 @@ module Decidim
11
11
  end
12
12
 
13
13
  def activities
14
- context[:activities]
14
+ resource_ids_to_filter = context[:activities].select { |log| log[:action] == "delete" && log[:resource_type] == "Decidim::Comments::Comment" }.map(&:resource_id)
15
+ if resource_ids_to_filter.any?
16
+ context[:activities].where.not("resource_id in (?) AND resource_type = ?", resource_ids_to_filter, "Decidim::Comments::Comment")
17
+ else
18
+ context[:activities]
19
+ end
15
20
  end
16
21
 
17
22
  def resource_types
@@ -81,7 +81,7 @@ module Decidim
81
81
 
82
82
  help = content_tag(:div, class: "map__skip-container") do
83
83
  sr_content = content_tag(:p, t("screen_reader_explanation", scope: "decidim.map.dynamic"), class: "sr-only")
84
- link = link_to(t("skip_button", scope: "decidim.map.dynamic"), "##{bottom_id}", class: "map__skip")
84
+ link = link_to(t("skip_button", scope: "decidim.map.dynamic"), "##{bottom_id}", class: "map__skip", "data-skip-to-content": true)
85
85
 
86
86
  sr_content + link
87
87
  end
@@ -68,8 +68,14 @@ module Decidim
68
68
  @menu_highlighted_participatory_process ||= (
69
69
  # The queries already include the order by weight
70
70
  Decidim::ParticipatoryProcesses::OrganizationParticipatoryProcesses.new(current_organization) |
71
- Decidim::ParticipatoryProcesses::PromotedParticipatoryProcesses.new
72
- ).first
71
+ Decidim::ParticipatoryProcesses::PromotedParticipatoryProcesses.new
72
+ ).select(&:published?).map { |process| remove_private_space_if_not_private_user(process) }&.compact&.first
73
+ end
74
+
75
+ def remove_private_space_if_not_private_user(process)
76
+ return nil if process.private_space == true && !process.can_participate?(current_user)
77
+
78
+ process
73
79
  end
74
80
 
75
81
  def home_content_block_menu
@@ -2,6 +2,9 @@
2
2
 
3
3
  module Decidim
4
4
  class UserGroupMailer < ApplicationMailer
5
+ # This is a mailer that aids migration from the old user_groups to the new user group system
6
+ # This should be used only in the scope of the migration process
7
+ # @deprecated This mailer will be removed in decidim v0.32.0
5
8
  def notify_deprecation_to_owner(group)
6
9
  with_user(group) do
7
10
  @group_name = group.name
@@ -13,6 +16,9 @@ module Decidim
13
16
  end
14
17
  end
15
18
 
19
+ # This is a mailer that aids migration from the old user_groups to the new user group system
20
+ # This should be used only in the scope of the migration process
21
+ # @deprecated This mailer will be removed in decidim v0.32.0
16
22
  def notify_deprecation_to_member(user, group_name, group_email)
17
23
  with_user(user) do
18
24
  @user = user
@@ -24,5 +30,20 @@ module Decidim
24
30
  mail(to: user.email, subject:)
25
31
  end
26
32
  end
33
+
34
+ # This is a mailer that aids migration from the old user_groups to the new user group system
35
+ # This should be used only in the scope of the migration process
36
+ # @deprecated This mailer will be removed in decidim v0.32.0
37
+ def notify_user_group_patched(group, user, password)
38
+ with_user(user) do
39
+ @group = group
40
+ @user = user
41
+ @password = password
42
+ @organization = user.organization
43
+
44
+ subject = I18n.t("notify_user_group_patched.subject", scope: "decidim.user_group_mailer")
45
+ mail(to: user.email, subject:)
46
+ end
47
+ end
27
48
  end
28
49
  end
@@ -66,8 +66,8 @@ module Decidim
66
66
  scope :active_after_notification, lambda {
67
67
  where("current_sign_in_at > (extended_data->'inactivity_notification'->>'sent_at')::timestamp")
68
68
  }
69
- scope :user_group, -> { where("#{arel_table.name}.extended_data @> ?", Arel.sql({ group: true }.to_json)) }
70
- scope :not_user_group, -> { where.not("#{arel_table.name}.extended_data @> ?", Arel.sql({ group: true }.to_json)) }
69
+ scope :user_group, -> { where("#{arel_table.name}.extended_data @> ?", { group: true }.to_json) }
70
+ scope :not_user_group, -> { where.not("#{arel_table.name}.extended_data @> ?", { group: true }.to_json) }
71
71
 
72
72
  attr_accessor :newsletter_notifications
73
73
 
@@ -3,6 +3,9 @@ import createEditor from "src/decidim/editor";
3
3
 
4
4
  export default class extends Controller {
5
5
  connect() {
6
- this.editor = createEditor(this.element)
6
+ if (!this.element.dataset.editorInitialized) {
7
+ this.editor = createEditor(this.element);
8
+ this.element.dataset.editorInitialized = true;
9
+ }
7
10
  }
8
11
  }
@@ -213,6 +213,12 @@ export default class extends Controller {
213
213
  this.changeEvents = false;
214
214
  this._clearForm();
215
215
 
216
+ // Prevent filtering again on anchor link "Skip to main content", "Skip map", or "Skip to results"
217
+ const filterSkipValues = [...document.querySelectorAll("[data-skip-to-content]")].map((el) => el.hash);
218
+ if (filterSkipValues.includes(window.location.hash)) {
219
+ return;
220
+ }
221
+
216
222
  const filterParams = this._parseLocationFilterValues();
217
223
  const currentOrder = this._parseLocationOrderValue();
218
224
 
@@ -116,6 +116,7 @@ export default class CheckBoxesTree {
116
116
  const indeterminateSiblings = totalCheckSiblings.filter((checkbox) => checkbox.indeterminate)
117
117
 
118
118
  if (checkedSiblings.length === 0 && indeterminateSiblings.length === 0) {
119
+ parentCheck.checked = false;
119
120
  parentCheck.indeterminate = false;
120
121
  } else if (checkedSiblings.length === totalCheckSiblings.length && indeterminateSiblings.length === 0) {
121
122
  parentCheck.checked = true;
@@ -1,13 +1,13 @@
1
- [data-controller="accordion"] [id*="panel"][aria-hidden="true"] {
1
+ [data-controller*="accordion"] [id*="panel"][aria-hidden="true"] {
2
2
  display: none;
3
3
  }
4
4
 
5
- [data-controller="accordion"]
5
+ [data-controller*="accordion"]
6
6
  [id*="comment"][class="comment-reply"][aria-hidden="true"] {
7
7
  display: none;
8
8
  }
9
9
 
10
- [data-controller="accordion"]
10
+ [data-controller*="accordion"]
11
11
  [id*="comment"][class="comment-reply"][aria-hidden="false"] {
12
12
  display: block;
13
13
  }
@@ -57,7 +57,7 @@
57
57
  @apply mr-4;
58
58
  }
59
59
 
60
- &-section.content-block__description[data-controller="accordion"] {
60
+ &-section.content-block__description[data-controller*="accordion"] {
61
61
  @apply pb-4 mb-4 text-md;
62
62
 
63
63
  padding-left: 1.85rem;
@@ -1,5 +1,11 @@
1
1
  .author {
2
- @apply flex items-center [&>*:not(:first-child)]:pl-5 [&>*:not(:last-child)]:pr-6 divide-gray-3 divide-x text-sm text-gray-2;
2
+ @apply flex items-center divide-gray-3 divide-x text-sm text-gray-2;
3
+
4
+ a.author__container {
5
+ .author__name {
6
+ @apply underline text-secondary font-bold;
7
+ }
8
+ }
3
9
 
4
10
  &__container {
5
11
  @apply flex items-center gap-2.5 first:[&>*]:flex-none;
@@ -14,6 +20,10 @@
14
20
 
15
21
  &-container {
16
22
  @apply rounded-full overflow-hidden inline-block w-6 h-6 align-top;
23
+
24
+ &:focus-within {
25
+ @apply ring-2 ring-primary;
26
+ }
17
27
  }
18
28
 
19
29
  &-counter {
@@ -29,6 +39,10 @@
29
39
  @apply text-secondary font-semibold;
30
40
  }
31
41
 
42
+ &__badge svg {
43
+ @apply grid overflow-hidden place-items-center bg-primary rounded-full w-4 h-4 text-white fill-current;
44
+ }
45
+
32
46
  &__metadata {
33
47
  @apply flex items-center gap-1 text-gray-2 text-sm;
34
48
 
@@ -59,7 +59,11 @@
59
59
  }
60
60
 
61
61
  &-title {
62
- @apply h4 text-secondary;
62
+ @apply h4;
63
+ }
64
+
65
+ a &-title {
66
+ @apply text-secondary;
63
67
 
64
68
  overflow: hidden;
65
69
  display: -webkit-box;
@@ -9,18 +9,18 @@
9
9
  &-container {
10
10
  @apply w-24 h-24 relative;
11
11
  }
12
+ }
13
+
14
+ &__details {
15
+ @apply pb-3 space-y-2;
12
16
 
13
17
  &-badge {
14
- @apply absolute top-full right-0 -translate-y-full grid place-items-center w-6 h-6 rounded-full overflow-hidden bg-primary border border-white;
18
+ @apply flex items-center gap-1 text-sm text-gray-2;
15
19
 
16
20
  svg {
17
- @apply w-4 h-4 text-white fill-current;
21
+ @apply w-4 h-4 inline-block bg-primary rounded-full text-white fill-current;
18
22
  }
19
23
  }
20
- }
21
-
22
- &__details {
23
- @apply pb-3 space-y-2;
24
24
 
25
25
  &-data {
26
26
  @apply flex flex-wrap gap-x-6 gap-y-4;
@@ -84,7 +84,9 @@
84
84
  }
85
85
 
86
86
  .ProseMirror {
87
- @apply relative p-2.5 outline-0 min-h-full prose max-w-none prose-headings:first:mt-0 prose-p:first:mt-0 prose-ul:first:mt-0 prose-ol:first:mt-0 prose-blockquote:first:mt-0 prose-pre:first:mt-0;
87
+ @apply relative p-2.5 outline-0 resize-y overflow-hidden prose max-w-none prose-headings:first:mt-0 prose-p:first:mt-0 prose-ul:first:mt-0 prose-ol:first:mt-0 prose-blockquote:first:mt-0 prose-pre:first:mt-0;
88
+
89
+ min-height: inherit;
88
90
 
89
91
  &.ProseMirror-focused,
90
92
  &.dialog-open {
@@ -31,7 +31,7 @@ class EtiquetteValidator < ActiveModel::EachValidator
31
31
  end
32
32
 
33
33
  def validate_caps(record, attribute, value)
34
- number_of_caps = value.scan(/[A-Z]/).length
34
+ number_of_caps = value.scan(/[[:upper:]]/).length
35
35
  return if number_of_caps.zero? || number_of_caps < value.length / 2 # 50%
36
36
 
37
37
  record.errors.add(attribute, options[:message] || :too_much_caps)
@@ -44,7 +44,7 @@ class EtiquetteValidator < ActiveModel::EachValidator
44
44
  end
45
45
 
46
46
  def validate_caps_first(record, attribute, value)
47
- return if value.scan(/\A[a-z]{1}/).empty?
47
+ return if value.scan(/\A[[:lower:]]{1}/).empty?
48
48
 
49
49
  record.errors.add(attribute, options[:message] || :must_start_with_caps)
50
50
  end
@@ -55,7 +55,9 @@ class PasswordValidator < ActiveModel::EachValidator
55
55
  attr_reader :record, :attribute, :value
56
56
 
57
57
  def get_message(reason)
58
- I18n.t "password_validator.#{reason}"
58
+ I18n.t! "password_validator.#{reason}"
59
+ rescue I18n::MissingTranslationData
60
+ I18n.t "password_validator.fallback"
59
61
  end
60
62
 
61
63
  def organization
@@ -1,8 +1,8 @@
1
1
  <div id="<%= dom_id(document) %>">
2
2
  <div class="card__list-content">
3
- <%= link_to document.url, target: "_blank", rel: "noopener noreferrer", class: "card__list-title", title: t("decidim.application.document.download") do %>
3
+ <span class="card__list-title">
4
4
  <%= h attachment_title(document) %>
5
- <% end %>
5
+ </span>
6
6
  <% if document.description.present? %>
7
7
  <div class="card__list-text"><%= decidim_escape_translated(document.description) %></div>
8
8
  <% end %>
@@ -14,7 +14,7 @@
14
14
 
15
15
  <div id="dropdown-menu-filters">
16
16
  <% if local_assigns.has_key?(:skip_to_id) %>
17
- <%= link_to t("skip", scope: "decidim.shared.filter_form_help"), "##{skip_to_id}", class: "filter-skip", role: "menuitem" %>
17
+ <%= link_to t("skip", scope: "decidim.shared.filter_form_help"), "##{skip_to_id}", class: "filter-skip", role: "menuitem", "data-skip-to-content": true %>
18
18
  <% end %>
19
19
 
20
20
  <p id="filter-help-text" class="filter-help" role="menuitem" aria-disabled="true"><%= t("help", scope: "decidim.shared.filter_form_help") %></p>
@@ -6,10 +6,13 @@
6
6
 
7
7
  <p class="email-instructions"><%= t(".instructions_title").html_safe %></p>
8
8
 
9
- <p class="email-instructions"><%= t(".instructions_intro") %></p>
9
+ <p class="email-instructions"><%= t(".instructions_intro", email: @group_email) %></p>
10
10
 
11
11
  <ul class="list-decimal">
12
12
  <li>
13
13
  <%= t(".instructions_1") %>
14
14
  </li>
15
+ <li>
16
+ <%= t(".instructions_2") %>
17
+ </li>
15
18
  </ul>
@@ -14,9 +14,6 @@
14
14
  <p class="email-button email-button__cta"><%= link_to t(".set_password"), new_password_url(:user, host: @organization.host) %></p>
15
15
  </li>
16
16
  <li>
17
- <%= t(".instructions_2") %>
18
- </li>
19
- <li>
20
- <%= t(".instructions_3") %>
17
+ <%= t(".instructions_2", email: @group_email) %>
21
18
  </li>
22
19
  </ol>
@@ -0,0 +1,21 @@
1
+ <p class="email-greeting"><%= t(".greeting", name: @user.name) %></p>
2
+
3
+ <p class="email-instructions"><%= t(".body_1_html", organization_name: organization_name(@organization)) %></p>
4
+
5
+ <p class="email-instructions"><%= t(".body_2_html", name: @group.name) %></p>
6
+
7
+ <p class="email-instructions"><%= t(".body_3_html") %></p>
8
+
9
+ <p class="email-instructions"><%= t(".instructions_title_html") %></p>
10
+
11
+ <ul class="list-decimal">
12
+ <li>
13
+ <%= t(".instructions_1_html", email: @group.email, password: @password) %>
14
+ </li>
15
+ <li>
16
+ <%= t(".instructions_2_html") %>
17
+ </li>
18
+ <li>
19
+ <%= t(".instructions_3_html") %>
20
+ </li>
21
+ </ul>
@@ -8,7 +8,7 @@
8
8
 
9
9
  <body class="text-black text-md form-defaults<%= yield (:body_class) %>">
10
10
  <!--noindex--><!--googleoff: all-->
11
- <%= link_to t("skip_button", scope: "decidim.accessibility"), "#content", class: "layout-container__skip" %>
11
+ <%= link_to t("skip_button", scope: "decidim.accessibility"), "#content", class: "layout-container__skip", "data-skip-to-content": true %>
12
12
  <%= cell("decidim/data_consent", current_organization) %>
13
13
  <!--googleon: all--><!--/noindex-->
14
14
 
@@ -64,7 +64,7 @@ ca-IT:
64
64
  decidim/attachment_created_event: Arxiu adjunt
65
65
  decidim/component_published_event: Component actiu
66
66
  decidim/demoted_membership: Ja no ets una administradora del grup
67
- decidim/gamification/badge_earned_event: Insígnia obtinguda
67
+ decidim/gamification/badge_earned_event: Ensenya obtinguda
68
68
  decidim/gamification/level_up_event: Has pujat de nivell
69
69
  decidim/invited_to_group_event: Convidada al grup
70
70
  decidim/join_request_accepted_event: Sol·licitud d'incorporació acceptada
@@ -1084,7 +1084,7 @@ ca-IT:
1084
1084
  dropzone: Arrossega-hi els arxius o fes clic per a pujar-los
1085
1085
  explanation: Guia per a %{attribute}
1086
1086
  gamification:
1087
- all_badges_link: Veure totes les insígnies disponibles.
1087
+ all_badges_link: Veure totes les ensenyes disponibles.
1088
1088
  badges:
1089
1089
  followers:
1090
1090
  conditions:
@@ -1097,11 +1097,11 @@ ca-IT:
1097
1097
  unearned_another: Aquesta participant encara no té seguidores.
1098
1098
  unearned_own: Encara no et segueix ningú.
1099
1099
  index:
1100
- badge_title: "Insígnia %{name}"
1100
+ badge_title: "Ensenya %{name}"
1101
1101
  how: Com pots aconseguir-la
1102
- page_description: Les insígnies són reconeixements de les accions de les participants i del progrés en la plataforma. A mesura que comencis a descobrir, participar i interactuar amb la plataforma, n'obtindràs de diferents tipus. Aquí tens la llista d'insígnies i algunes formes d'aconseguir-les.
1103
- title: Insígnies
1104
- description: Les insígnies són reconeixements de les accions de les participants i del progrés en la plataforma. A mesura que comencis a descobrir, participar i interactuar amb la plataforma, n'obtindràs de diferents tipus.
1102
+ page_description: Les ensenyes són reconeixements de les accions de les participants i del progrés en la plataforma. A mesura que comencis a descobrir, participar i interactuar amb la plataforma, n'obtindràs de diferents tipus. Aquí tens la llista d'ensenyes i algunes formes d'aconseguir-les.
1103
+ title: Ensenyes
1104
+ description: Les ensenyes són reconeixements de les accions de les participants i del progrés en la plataforma. A mesura que comencis a descobrir, participar i interactuar amb la plataforma, n'obtindràs de diferents tipus.
1105
1105
  level: Nivell %{level}
1106
1106
  reached_top: Has arribat al màxim nivell d'aquesta ensenya.
1107
1107
  title: Què són les ensenyes?
@@ -1534,7 +1534,7 @@ ca-IT:
1534
1534
  default_officialization_text_for_users: Aquesta participant està verificada públicament. S'ha verificat que el seu nom o la seva funció es correspon amb el seu nom i funció reals.
1535
1535
  show:
1536
1536
  activity: Activitat
1537
- badges: Insígnies
1537
+ badges: Ensenyes
1538
1538
  conversations: Converses
1539
1539
  followers: Seguidores
1540
1540
  following: Seguint
@@ -1724,20 +1724,30 @@ ca-IT:
1724
1724
  body_2: Com a part dels nostres esforços per simplificar l'experiència de les organitzacions, la funció "Grups d'usuàries" tal com la coneixem fins ara quedarà obsoleta. El perfil del Grup d'Usuàries ha esdevingut un perfil de participant en ús.
1725
1725
  greeting: Benvolgut/da %{name},
1726
1726
  instructions_1: Si tens accés a aquest compte de correu electrònic, si us plau, revisa la safata d'entrada per veure les instruccions.
1727
- instructions_intro: Hem enviat instruccions per establir una nova contrasenya pel perfil, al correu electrònic associat al compte.
1727
+ instructions_2: Si no, algun membre del grup amb accés al correu haurà d'establir la contrasenya i compartir les credencials d'inici de sessió amb tu.
1728
+ instructions_intro: Els membres del grup ara compartiran l'accés a aquest perfil usant credencials d'accés compartides (email i contrasenya). Hem enviat instruccions a %{email} per establir una contrasenya nova per al perfil.
1728
1729
  instructions_title: "<strong>Què vol dir això per a tu?</strong>"
1729
- subject: Actualització important sobre un grup d'usuaris del que formeu part
1730
+ subject: Actualització important respecte al perfil del teu grup d'usuàries
1730
1731
  notify_deprecation_to_owner:
1731
1732
  body_1: Ens posem en contacte amb tu per informar-te sobre una important actualització respecte al Grup d'usuaris %{organization_name} del qual formes part.
1732
1733
  body_2: 'Com a part dels nostres esforços per simplificar l''experiència de les organitzacions com la vostra, la funció "Grups d''Usuàries" tal com la coneixem fins ara quedarà obsoleta. El perfil del Grup: <strong>%{name}</strong> s''ha convertit en un perfil de participant a l''ús.'
1733
- body_3: Per poder seguir accedint al teu compte, necessitem que estableixis una contrasenya.
1734
+ body_3: Per continuar accedint al grup i compartir l'accés, cal que defineixis una contrasenya. Un cop configurada, pots compartir les credencials d'inici de sessió (email i contrasenya) amb qui consideris oportú. Aquesta/es persona/es podrà realitzar diferents accions a la plataforma amb el nom de l'organització.
1734
1735
  greeting: Benvolgut/da %{name},
1735
- instructions_1: 'Clica a l''enllaç que trobaràs a continuació per iniciar el procés per configurar la contrasenya:'
1736
- instructions_2: Al formulari, introdueix l'adreça de correu electrònic on vas rebre aquest missatge i envia la sol·licitud.
1737
- instructions_3: Revisa la teva safata d'entrada a la recerca d'un correu electrònic amb més instruccions per establir la contrasenya nova.
1736
+ instructions_1: 'Fes clic a l''enllaç següent per establir una contrasenya:'
1737
+ instructions_2: 'Comparteix les credencials d''inici de sessió (correu electrònic: %{email} i la nova contrasenya) amb qui consideris oportú. Recorda: aquesta/es persona/es podrà realitzar diferents accions a la plataforma amb el perfil de l''organització.'
1738
1738
  instructions_title: "<strong>Què cal que facis?</strong>"
1739
- set_password: Iniciar el procés de configuració de la contrasenya
1740
- subject: Actualització important del grup d'usuàries
1739
+ set_password: Estableix la teva contrasenya
1740
+ subject: Actualització important respecte al perfil del teu grup d'usuàries
1741
+ notify_user_group_patched:
1742
+ body_1_html: Ens posem en contacte amb tu per informar-te sobre una important actualització respecte al Grup d'usuàries %{organization_name} del qual formes part.
1743
+ body_2_html: 'Com a part dels nostres esforços per simplificar l''experiència de les organitzacions com la vostra, la funció "Grups d''Usuàries" tal com la coneixem fins ara quedarà obsoleta. El perfil del Grup: <strong>%{name}</strong> s''ha convertit en un perfil de participant a l''ús.'
1744
+ body_3_html: Per continuar accedint al vostre compte i compartir l'accés, necessitem que definiu un correu electrònic i una contrasenya nous. Tingueu en compte que cada membre del vostre grup rebrà aquest correu electrònic. Per garantir l'accés continuat, haureu d'acordar internament les credencials compartides (correu electrònic i contrasenya) que tothom utilitzarà.
1745
+ greeting: Benvolgut/da %{name},
1746
+ instructions_1_html: 'Fes servir les credencials temporals següents per iniciar la sessió: <br><br> Nom d''usuari: <strong>%{email}</strong> <br> Contrasenya: <strong>%{password}</strong><br><br>'
1747
+ instructions_2_html: Estableix una nova adreça de correu electrònic i una contrasenya.
1748
+ instructions_3_html: Comparteix les credencials d'inici de sessió escollides amb les teves companyes perquè tot el grup pugui continuar accedint al compte.
1749
+ instructions_title_html: "<strong>Què cal que facis?</strong>"
1750
+ subject: Actualització important respecte al perfil del teu grup d'usuàries
1741
1751
  user_report_mailer:
1742
1752
  notify:
1743
1753
  body_1: La usuària %{user} ha estat reportada per %{token}
@@ -1770,7 +1780,7 @@ ca-IT:
1770
1780
  show:
1771
1781
  version_index: Versió %{index} de %{total}
1772
1782
  welcome_notification:
1773
- default_body: <p>Hola {{name}}, gràcies per unir-te a {{organization}} et donem la benvinguda!</p><ul><li>Si vole fer-te una idea ràpida de que pots fer-hi, fes una ullada a la <a href="{{help_url}}">Secció d'ajuda</a>.</li><li>Una vegada l'hagis llegit rebràs la teva primera ensenya. Aquí trobaràs un <a href="{{badges_url}}">llistat de totes les ensenyes</a>que pots aconsegui participant a {{organization}}</li><li>. Per acabar, però no per això menys important, uneix-te a d'altres persones, comparteix amb elles d'estar compromesa i de participar a {{organization}}. Fes propostes, comentaris, debat, pensa en com contribuir a un bé comú, aporta arguments per mirar de convèncer, escolta i llegeix per convèncer-te, expressa les teves idees de manera concreta i directa, respon amb paciència i decisió, defensa les teves idees i resta oberta de ment per a col·laborar i unir-te a les idees d'altra gent.</li></ul>
1783
+ default_body: <p>Hola {{name}}, gràcies per unir-te a {{organization}} i benvinguda!</p><ul><li>Si vols fer-te una idea ràpida del que pots fer aquí, fes un cop d'ull a la secció d'<a href="{{help_url}}">Ajuda</a>.</li><li>Un cop l'hagis llegit obtindràs la teva primera ensenya. Aquí tens la <a href="{{badges_url}}">llista</a> de totes les ensenyes que pots anar aconseguint a mesura que participis a {{organization}}</li><li>Finalment, però no per això menys important, uneix-te a altres persones, comparteix amb elles l'experiència d'implicar-se i participar a {{organization}}. Fes propostes, comenta, debat, pensa en com contribuir al bé comú, aporta arguments per convèncer, escolta i llegeix per convèncer-te, expressa les teves idees de manera concreta i directa, respon amb paciència i decisió, defensa les teves idees i manté la ment oberta a col·laborar i sumar-te a les idees d'altres persones.</li></ul>
1774
1784
  default_subject: Gràcies per unir-te a {{organization}}!
1775
1785
  wizard_step_form:
1776
1786
  wizard_aside: