decidim-assemblies 0.21.0 → 0.22.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/decidim/assemblies/assembly.svg +1 -3
  3. data/app/assets/javascripts/decidim/assemblies/orgchart.js.es6 +698 -0
  4. data/app/cells/decidim/assemblies/assembly_m/footer.erb +2 -2
  5. data/app/cells/decidim/assemblies/assembly_m_cell.rb +4 -0
  6. data/app/cells/decidim/assemblies/assembly_member/show.erb +4 -4
  7. data/app/cells/decidim/assemblies/content_blocks/highlighted_assemblies/show.erb +10 -11
  8. data/app/cells/decidim/assemblies/content_blocks/highlighted_assemblies_cell.rb +1 -0
  9. data/app/commands/decidim/assemblies/admin/create_assembly_admin.rb +2 -1
  10. data/app/commands/decidim/assemblies/admin/create_assembly_member.rb +12 -3
  11. data/app/commands/decidim/assemblies/admin/notify_role_assigned_to_assembly.rb +22 -0
  12. data/app/commands/decidim/assemblies/admin/update_assemblies_setting.rb +46 -0
  13. data/app/commands/decidim/assemblies/admin/update_assembly_admin.rb +2 -1
  14. data/app/controllers/decidim/assemblies/admin/assemblies_settings_controller.rb +49 -0
  15. data/app/controllers/decidim/assemblies/assemblies_controller.rb +5 -1
  16. data/app/events/decidim/assemblies/create_assembly_member_event.rb +17 -0
  17. data/app/events/decidim/role_assigned_to_assembly_event.rb +28 -0
  18. data/app/forms/decidim/assemblies/admin/assemblies_setting_form.rb +14 -0
  19. data/app/forms/decidim/assemblies/admin/assembly_form.rb +14 -4
  20. data/app/helpers/decidim/assemblies/assemblies_helper.rb +6 -3
  21. data/app/models/decidim/assemblies_setting.rb +17 -0
  22. data/app/permissions/decidim/assemblies/permissions.rb +30 -1
  23. data/app/presenters/decidim/assemblies/admin_log/assemblies_setting_presenter.rb +27 -0
  24. data/app/presenters/decidim/assemblies/assembly_stats_presenter.rb +1 -1
  25. data/app/queries/decidim/assemblies/parent_assemblies_for_select.rb +20 -1
  26. data/app/views/decidim/assemblies/_filter_by_type.html.erb +11 -9
  27. data/app/views/decidim/assemblies/admin/assemblies/index.html.erb +3 -2
  28. data/app/views/decidim/assemblies/admin/assemblies_settings/_form.html.erb +10 -0
  29. data/app/views/decidim/assemblies/admin/assemblies_settings/edit.html.erb +6 -0
  30. data/app/views/decidim/assemblies/admin/assembly_members/index.html.erb +2 -2
  31. data/app/views/decidim/assemblies/assemblies/_parent_assemblies.html.erb +2 -2
  32. data/app/views/decidim/assemblies/assemblies/_promoted_assembly.html.erb +3 -3
  33. data/app/views/decidim/assemblies/assemblies/index.html.erb +11 -8
  34. data/app/views/decidim/assemblies/assemblies/show.html.erb +9 -8
  35. data/app/views/decidim/assemblies/assembly_members/index.html.erb +1 -1
  36. data/app/views/layouts/decidim/admin/assemblies.html.erb +5 -0
  37. data/config/locales/bg-BG.yml +7 -0
  38. data/config/locales/ca.yml +46 -0
  39. data/config/locales/cs.yml +76 -30
  40. data/config/locales/da-DK.yml +1 -0
  41. data/config/locales/de.yml +69 -0
  42. data/config/locales/el.yml +455 -0
  43. data/config/locales/en.yml +46 -0
  44. data/config/locales/es-MX.yml +46 -0
  45. data/config/locales/es-PY.yml +46 -0
  46. data/config/locales/es.yml +46 -0
  47. data/config/locales/et-EE.yml +1 -0
  48. data/config/locales/fi-plain.yml +46 -0
  49. data/config/locales/fi.yml +47 -1
  50. data/config/locales/fr-CA.yml +456 -0
  51. data/config/locales/fr.yml +67 -0
  52. data/config/locales/ga-IE.yml +1 -0
  53. data/config/locales/hr-HR.yml +1 -0
  54. data/config/locales/hu.yml +35 -2
  55. data/config/locales/it.yml +134 -76
  56. data/config/locales/ja-JP.yml +452 -0
  57. data/config/locales/lt-LT.yml +1 -0
  58. data/config/locales/lv-LV.yml +454 -0
  59. data/config/locales/mt-MT.yml +1 -0
  60. data/config/locales/nl.yml +58 -0
  61. data/config/locales/no.yml +57 -10
  62. data/config/locales/pl.yml +212 -143
  63. data/config/locales/pt-BR.yml +1 -1
  64. data/config/locales/pt.yml +188 -119
  65. data/config/locales/ro-RO.yml +422 -0
  66. data/config/locales/sk-SK.yml +168 -0
  67. data/config/locales/sk.yml +172 -0
  68. data/config/locales/sl.yml +132 -0
  69. data/config/locales/sr-CS.yml +73 -0
  70. data/config/locales/sv.yml +156 -89
  71. data/db/migrate/20200320105906_index_foreign_keys_in_decidim_assemblies.rb +7 -0
  72. data/db/migrate/20200320105907_index_foreign_keys_in_decidim_assembly_user_roles.rb +7 -0
  73. data/db/migrate/20200416132109_remove_legacy_decidim_assembly_type.rb +8 -0
  74. data/db/migrate/20200430202456_create_decidim_assemblies_settings.rb +10 -0
  75. data/db/seeds/city.jpeg +0 -0
  76. data/db/seeds/city2.jpeg +0 -0
  77. data/lib/decidim/assemblies/admin_engine.rb +1 -0
  78. data/lib/decidim/assemblies/participatory_space.rb +6 -1
  79. data/lib/decidim/assemblies/test/factories.rb +5 -0
  80. data/lib/decidim/assemblies/version.rb +1 -1
  81. metadata +38 -8
@@ -30,8 +30,10 @@ module Decidim
30
30
  return permission_action unless permission_action.scope == :admin
31
31
 
32
32
  user_can_read_assembly_list?
33
+ user_can_list_assembly_list?
33
34
  user_can_read_current_assembly?
34
35
  user_can_create_assembly?
36
+ user_can_read_assemblies_setting?
35
37
 
36
38
  # org admins and space admins can do everything in the admin section
37
39
  org_admin_action?
@@ -165,6 +167,13 @@ module Decidim
165
167
  toggle_allow(user.admin?)
166
168
  end
167
169
 
170
+ def user_can_read_assemblies_setting?
171
+ return unless permission_action.action == :read &&
172
+ permission_action.subject == :assemblies_setting
173
+
174
+ toggle_allow(user.admin?)
175
+ end
176
+
168
177
  # Everyone can read the assembly list
169
178
  def user_can_read_assembly_list?
170
179
  return unless read_assembly_list_permission_action?
@@ -172,6 +181,25 @@ module Decidim
172
181
  toggle_allow(user.admin? || has_manageable_assemblies?)
173
182
  end
174
183
 
184
+ # Checks whether the user can list the current given assembly or not.
185
+ #
186
+ # In case of user being admin of child assembly even parent assembly
187
+ # should be listed to be able to navigate to child assembly
188
+ def user_can_list_assembly_list?
189
+ return unless permission_action.action == :list &&
190
+ permission_action.subject == :assembly
191
+
192
+ toggle_allow(user.admin? || allowed_list_of_assemblies?)
193
+ end
194
+
195
+ def allowed_list_of_assemblies?
196
+ assemblies = AssembliesWithUserRole.for(user)
197
+ parent_assemblies = assemblies.flat_map { |assembly| [assembly.id] + assembly.ancestors.pluck(:id) }
198
+
199
+ allowed_list_of_assemblies = Decidim::Assembly.where(id: assemblies + parent_assemblies)
200
+ allowed_list_of_assemblies.uniq.member?(assembly)
201
+ end
202
+
175
203
  def user_can_read_current_assembly?
176
204
  return unless read_assembly_list_permission_action?
177
205
  return if permission_action.subject == :assembly_list
@@ -239,7 +267,8 @@ module Decidim
239
267
  :assembly,
240
268
  :assembly_user_role,
241
269
  :assembly_member,
242
- :space_private_user
270
+ :space_private_user,
271
+ :assemblies_setting
243
272
  ].include?(permission_action.subject)
244
273
  allow! if is_allowed
245
274
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Assemblies
5
+ module AdminLog
6
+ # This class holds the logic to present a `Decidim::AssembliesSetting`
7
+ # for the `AdminLog` log.
8
+ #
9
+ # Usage should be automatic and you shouldn't need to call this class
10
+ # directly, but here's an example:
11
+ #
12
+ # action_log = Decidim::ActionLog.last
13
+ # view_helpers # => this comes from the views
14
+ # AssembliesSettingPresenter.new(action_log, view_helpers).present
15
+ class AssembliesSettingPresenter < Decidim::Log::BasePresenter
16
+ private
17
+
18
+ def action_string
19
+ case action
20
+ when "update"
21
+ "decidim.admin_log.assembly_setting.#{action}"
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -38,7 +38,7 @@ module Decidim
38
38
 
39
39
  def render_stats_data(component_manifest, name, data, index)
40
40
  safe_join([
41
- index.zero? ? manifest_icon(component_manifest) : " /&nbsp".html_safe,
41
+ index.zero? ? manifest_icon(component_manifest, role: "img", "aria-hidden": true) : " /&nbsp".html_safe,
42
42
  content_tag(:span, "#{number_with_delimiter(data)} " + I18n.t(name, scope: "decidim.assemblies.statistics"),
43
43
  class: "#{name} process_stats-text")
44
44
  ])
@@ -15,8 +15,27 @@ module Decidim
15
15
  @assembly = assembly
16
16
  end
17
17
 
18
+ # Finds the available assemblies
19
+ #
20
+ # Returns an ActiveRecord::Relation.
18
21
  def query
19
- Assembly.where(organization: @organization).where.not(id: @assembly)
22
+ available_assemblies = Assembly.where(organization: @organization).where.not(id: @assembly)
23
+
24
+ return available_assemblies if @assembly.blank?
25
+
26
+ available_assemblies.where.not(id: descendant_ids)
27
+ end
28
+
29
+ private
30
+
31
+ def descendant_ids
32
+ recursive_children(@assembly).flatten
33
+ end
34
+
35
+ def recursive_children(model)
36
+ model.children.map do |child|
37
+ [recursive_children(child), child.id]
38
+ end
20
39
  end
21
40
  end
22
41
  end
@@ -1,17 +1,19 @@
1
1
  <div id="assemblies-filter" class="inline-filters">
2
2
  <% if available_filters.any? %>
3
+ <div id="inline-filter-sort" class="dropdown-pane" data-position="bottom" data-alignment="right" data-dropdown data-auto-focus="true">
4
+ <ul class="list-reset">
5
+ <% available_filters.each do |title, id| %>
6
+ <li>
7
+ <%= link_to filter_link(id), remote: true do %>
8
+ <%= title %>
9
+ <% end %>
10
+ </li>
11
+ <% end %>
12
+ </ul>
13
+ </div>
3
14
  <label>
4
15
  <span><%= help_text %></span>
5
16
  <button id="button-text" data-toggle="inline-filter-sort"><%= current_filter_name %></button>
6
- <div id="inline-filter-sort" class="dropdown-pane" data-position="bottom" data-alignment="right" data-dropdown data-auto-focus="true">
7
- <ul class="list-reset">
8
- <% available_filters.each do |title, id| %>
9
- <%= link_to filter_link(id), remote: true do %>
10
- <li><%= title %></li>
11
- <% end %>
12
- <% end %>
13
- </ul>
14
- </div>
15
17
  </label>
16
18
  <% end %>
17
19
  </div>
@@ -38,11 +38,12 @@
38
38
  </thead>
39
39
  <tbody>
40
40
  <% @assemblies.each do |assembly| %>
41
+ <% next unless allowed_to? :list, :assembly, assembly: assembly %>
41
42
  <tr>
42
43
  <td>
43
44
  <% if assembly.promoted? %>
44
45
  <span data-tooltip class="icon-state icon-highlight" aria-haspopup="true" data-disable-hover="false" title="<%= t("models.assembly.fields.promoted", scope: "decidim.admin") %>">
45
- <%= icon "star" %>
46
+ <%= icon "star", role: "img", "aria-hidden": true %>
46
47
  </span>
47
48
  <% end %>
48
49
  <% if allowed_to? :update, :assembly, assembly: assembly %>
@@ -58,7 +59,7 @@
58
59
  <% end %>
59
60
  </td>
60
61
  <td>
61
- <%= l(assembly.created_at, format: :short) %>
62
+ <%= l(assembly.creation_date, format: :decidim_short) if assembly.creation_date %>
62
63
  </td>
63
64
  <td class="table-list__state">
64
65
  <% if assembly.private_space? %>
@@ -0,0 +1,10 @@
1
+ <div class="card">
2
+ <div class="card-divider">
3
+ <h2 class="card-title"><%= t(".title") %></h2>
4
+ </div>
5
+ <div class="card-section">
6
+ <div class="row column">
7
+ <%= form.check_box :enable_organization_chart %>
8
+ </div>
9
+ </div>
10
+ </div>
@@ -0,0 +1,6 @@
1
+ <%= decidim_form_for(@form, html: { class: "form edit_assemblies_settings" }, url: assemblies_settings_path, method: :put) do |f| %>
2
+ <%= render partial: "form", object: f %>
3
+ <div class="button--double form-general-submit">
4
+ <%= f.submit t(".update") %>
5
+ </div>
6
+ <% end %>
@@ -35,8 +35,8 @@
35
35
  <%= search_field_tag :q, @query,label: false, class: "input-group-field", placeholder: t(".search") %>
36
36
  <%= hidden_field_tag :status, @status %>
37
37
  <div class="input-group-button">
38
- <button type="submit" class="button button--muted">
39
- <%= icon "magnifying-glass", aria_label: t(".search") %>
38
+ <button type="submit" class="button">
39
+ <%= icon "magnifying-glass", aria_label: t(".search"), role: "img" %>
40
40
  </button>
41
41
  </div>
42
42
  </div>
@@ -1,9 +1,9 @@
1
1
  <section id="parent-assemblies" class="section row collapse">
2
2
  <div class="row column">
3
3
  <div class="flex--sbe">
4
- <h2 id="assemblies-count" class="section-heading collapse">
4
+ <h3 id="assemblies-count" class="section-heading collapse">
5
5
  <%= render partial: "count" %>
6
- </h2>
6
+ </h3>
7
7
  <%= render partial: "decidim/assemblies/filter_by_type" %>
8
8
  </div>
9
9
  <hr class="reset mt-s mb-s">
@@ -1,4 +1,4 @@
1
- <article class="card card--full card--process">
1
+ <div class="card card--full card--process">
2
2
  <div class="row collapse card--process__row">
3
3
  <div class="columns mediumlarge-8 large-6 card--process__column">
4
4
  <div class="card__content">
@@ -6,7 +6,7 @@
6
6
  <h2 class="card__title"><%= translated_attribute promoted_assembly.title %></h2>
7
7
  <% end %>
8
8
  <%= decidim_sanitize html_truncate(translated_attribute(promoted_assembly.short_description), length: 630, separator: "...") %>
9
- <%= link_to assembly_path(promoted_assembly), class: "button secondary small hollow card__button" do %>
9
+ <%= link_to assembly_path(promoted_assembly), class: "button small hollow card__button" do %>
10
10
  <%= t("assemblies.promoted_assembly.more_info", scope: "layouts.decidim") %>
11
11
  <% end %>
12
12
  </div>
@@ -24,4 +24,4 @@
24
24
  </div>
25
25
  </div>
26
26
  </div>
27
- </article>
27
+ </div>
@@ -18,13 +18,16 @@ edit_link(
18
18
 
19
19
  <%= render partial: "parent_assemblies" %>
20
20
 
21
- <section id="assemblies-chart" class="row column section">
22
- <div class="row column">
23
- <h2 class="section-heading"><%= t("assemblies.index.organizational_chart", scope: "layouts.decidim") %></h2>
24
- <article id="orgchart-<%= SecureRandom.hex(5) %>" class="card orgchart js-orgchart absolutes" data-url="<%= decidim_assemblies.assemblies_path(format: :json) %>">
25
- <button class="medium-1 m-s top left button small hollow invisible js-reset-orgchart"><%= t("assemblies.index.reset_chart", scope: "layouts.decidim") %></button>
26
- </article>
27
- </div>
28
- </section>
21
+ <% if current_assemblies_settings.enable_organization_chart %>
22
+ <section id="assemblies-chart" class="row column section">
23
+ <div class="row column">
24
+ <h3 class="section-heading"><%= t("assemblies.index.organizational_chart", scope: "layouts.decidim") %></h3>
25
+ <div id="orgchart-<%= SecureRandom.hex(5) %>" class="card orgchart js-orgchart absolutes" data-url="<%= decidim_assemblies.assemblies_path(format: :json) %>">
26
+ <button class="medium-1 m-s top left button small hollow invisible js-reset-orgchart"><%= t("assemblies.index.reset_chart", scope: "layouts.decidim") %></button>
27
+ </div>
28
+ </div>
29
+ </section>
30
+ <% end %>
29
31
  <% end %>
30
32
  <%= javascript_include_tag "decidim/filters" %>
33
+ <%= javascript_include_tag "decidim/assemblies/orgchart" %>
@@ -47,44 +47,45 @@ edit_link(
47
47
  translated_attribute(current_participatory_space.internal_organisation).present? ||
48
48
  translated_attribute(current_participatory_space.composition).present? %>
49
49
  <div class="show-more">
50
- <button class="button button--muted small"><%= t("read_more", scope: "decidim.assemblies.show") %></button>
50
+ <button class="button hollow small"><%= t("read_more", scope: "decidim.assemblies.show") %></button>
51
51
  </div>
52
52
 
53
53
  <div class="hide show-more-panel">
54
54
  <% if translated_attribute(current_participatory_space.purpose_of_action).present? %>
55
55
  <div class="section">
56
- <h4 class="section-heading"><%= t("purpose_of_action", scope: "decidim.assemblies.show") %></h4>
56
+ <h3 class="section-heading"><%= t("purpose_of_action", scope: "decidim.assemblies.show") %></h3>
57
57
  <%= decidim_sanitize translated_attribute(current_participatory_space.purpose_of_action) %>
58
58
  </div>
59
59
  <% end %>
60
60
 
61
61
  <% if translated_attribute(current_participatory_space.internal_organisation).present? %>
62
62
  <div class="section">
63
- <h4 class="section-heading"><%= t("internal_organisation", scope: "decidim.assemblies.show") %></h4>
63
+ <h3 class="section-heading"><%= t("internal_organisation", scope: "decidim.assemblies.show") %></h3>
64
64
  <%= decidim_sanitize translated_attribute(current_participatory_space.internal_organisation) %>
65
65
  </div>
66
66
  <% end %>
67
67
 
68
68
  <% if translated_attribute(current_participatory_space.composition).present? %>
69
69
  <div class="section">
70
- <h4 class="section-heading"><%= t("composition", scope: "decidim.assemblies.show") %></h4>
70
+ <h3 class="section-heading"><%= t("composition", scope: "decidim.assemblies.show") %></h3>
71
71
  <%= decidim_sanitize translated_attribute(current_participatory_space.composition) %>
72
72
  </div>
73
73
  <% end %>
74
74
  <div class="section text-center">
75
75
  <div class="hide-more">
76
- <button class="button button--muted small"><%= t("read_less", scope: "decidim.assemblies.show") %></button>
76
+ <button class="button hollow small"><%= t("read_less", scope: "decidim.assemblies.show") %></button>
77
77
  </div>
78
78
  </div>
79
79
  </div>
80
80
  <% end %>
81
81
 
82
- <%= render_hook(:current_participatory_space_meetings) %>
83
-
84
82
  <%= attachments_for current_participatory_space %>
83
+
84
+ <%= render_hook(:participatory_space_highlighted_elements) %>
85
+
85
86
  <% if current_participatory_space.children.visible_for(current_user).count.positive? %>
86
87
  <section id="assemblies-grid" class="section row collapse">
87
- <h4 class="section-heading"><%= t("children", scope: "decidim.assemblies.show") %></h4>
88
+ <h3 class="section-heading"><%= t("children", scope: "decidim.assemblies.show") %></h3>
88
89
  <div class="row small-up-1 medium-up-2 large-up-2 card-grid">
89
90
  <%= render partial: "decidim/assemblies/assembly", collection: current_participatory_space.children.visible_for(current_user).published %>
90
91
  </div>
@@ -2,7 +2,7 @@
2
2
 
3
3
  <div class="section row column">
4
4
  <div class="flex--sbe">
5
- <h2 class="section-heading"><%= t(".members") %> <span class="text-muted">(<%= collection.size %>)</span></h2>
5
+ <h3 class="section-heading"><%= t(".members") %> <span class="text-muted">(<%= collection.size %>)</span></h3>
6
6
  </div>
7
7
  <div id="assembly_members-grid" class="row small-up-1 medium-up-2 large-up-3 card-grid">
8
8
  <%= render(collection) %>
@@ -11,6 +11,11 @@
11
11
  <%= aria_selected_link_to I18n.t("menu.assemblies_types", scope: "decidim.admin"), decidim_admin_assemblies.assemblies_types_path %>
12
12
  </li>
13
13
  <% end %>
14
+ <% if allowed_to?(:read, :assemblies_setting) %>
15
+ <li <% if is_active_link?(decidim_admin_assemblies.edit_assemblies_settings_path) %> class="is-active" <% end %>>
16
+ <%= aria_selected_link_to I18n.t("menu.assemblies_settings", scope: "decidim.admin"), decidim_admin_assemblies.edit_assemblies_settings_path %>
17
+ </li>
18
+ <% end %>
14
19
  </ul>
15
20
  </div>
16
21
  <% end %>
@@ -0,0 +1,7 @@
1
+ bg:
2
+ activemodel:
3
+ attributes:
4
+ assembly:
5
+ area_id: Район
6
+ assembly_type: Тип събрание
7
+ assembly_type_other: Друг тип събрание
@@ -101,6 +101,10 @@ ca:
101
101
  create:
102
102
  error: S'ha produït un error en duplicar aquesta assemblea.
103
103
  success: L'assemblea s'ha duplicat correctament.
104
+ assemblies_settings:
105
+ update:
106
+ error: Hi ha hagut un problema actualitzant la configuració.
107
+ success: Configuració actualitzada amb èxit.
104
108
  assemblies_types:
105
109
  create:
106
110
  error: S'ha produït un error en crear una nova assemblea.
@@ -161,6 +165,7 @@ ca:
161
165
  success: L'administradora s'ha actualitzat correctament per a aquesta assemblea.
162
166
  menu:
163
167
  assemblies: Assemblees
168
+ assemblies_settings: Configuració
164
169
  assemblies_submenu:
165
170
  assembly_admins: Administradores de l'assemblea
166
171
  assembly_members: Membres
@@ -222,6 +227,8 @@ ca:
222
227
  create: "%{user_name} ha afegit el membre %{resource_name} a l'assemblea %{space_name}"
223
228
  delete: "%{user_name} esborrat el membre %{resource_name} de l'assemblea %{space_name}"
224
229
  update: "%{user_name} ha actualitzat el membre %{resource_name} de l'assemblea %{space_name}"
230
+ assembly_setting:
231
+ update: "%{user_name} ha actualitzat la configuració de les assemblees"
225
232
  assembly_type:
226
233
  create: "%{user_name} ha creat l'assemblea %{resource_name}"
227
234
  delete: "%{user_name} ha eliminat el component %{resource_name} de l'espai %{space_name}"
@@ -251,6 +258,11 @@ ca:
251
258
  social_handlers: Social
252
259
  title: Informació general
253
260
  visbility: Visibilitat
261
+ assemblies_settings:
262
+ edit:
263
+ update: Actualitzar
264
+ form:
265
+ title: Configuració de les assemblees
254
266
  assemblies_types:
255
267
  form:
256
268
  title: Títol
@@ -310,6 +322,7 @@ ca:
310
322
  home:
311
323
  highlighted_assemblies:
312
324
  active_assemblies: Assemblees actives
325
+ assemblies_button_title: Enllaç a la pàgina d'Assemblees mostrant totes les assemblees
313
326
  see_all_assemblies: Veure totes les assemblees
314
327
  user_profile:
315
328
  member_of:
@@ -340,6 +353,7 @@ ca:
340
353
  related_participatory_processes: Processos participatius relacionats
341
354
  scope: Àmbit
342
355
  social_networks: Xarxes socials
356
+ social_networks_title: Compartir aquesta assemblea a
343
357
  target: Qui participa
344
358
  statistics:
345
359
  answers_count: Respostes
@@ -351,6 +365,7 @@ ca:
351
365
  meetings_count: Trobades
352
366
  orders_count: Suports
353
367
  pages_count: Pàgines
368
+ posts_count: Publicacions
354
369
  projects_count: Projectes
355
370
  proposals_count: Propostes
356
371
  results_count: Resultats
@@ -362,6 +377,24 @@ ca:
362
377
  designated_on: Designat a
363
378
  index:
364
379
  title: Membres
380
+ conferences:
381
+ pages:
382
+ home:
383
+ highlighted_conferences:
384
+ conferences_button_title: Enllaç a la pàgina de Jornades mostrant totes les jornades
385
+ events:
386
+ assemblies:
387
+ create_assembly_member:
388
+ email_intro: Una administradora de la assemblea <a href="%{resource_url}">%{resource_name}</a> t'ha afegit com a un dels seus membres.
389
+ email_outro: Reps aquesta notificació perquè t'han convidat a una assemblea. Entra en <a href="%{resource_path}">assembly page</a> per a contribuir-hi!
390
+ email_subject: T'han convidat a ser membre de l'assemblea %{resource_name}!
391
+ notification_title: T'han registrat com a membre de l'assemblea <a href="%{resource_path}">%{resource_name}</a>. Entra a <a href="%{resource_path}">assembly page</a> per a contribuir-hi!
392
+ assembly:
393
+ role_assigned:
394
+ email_intro: T'han assignat el rol de %{role} a l'assemblea "%{resource_title}".
395
+ email_outro: Reps aquesta notificació perquè se t'ha assignat el rol de %{role} a l'assemblea "%{resource_title}".
396
+ email_subject: Se t'ha assignat el rol de %{role} a "%{resource_title}".
397
+ notification_title: Se t'ha assignat el rol de %{role} a l'assemblea <a href="%{resource_url}">%{resource_title}</a>.
365
398
  help:
366
399
  participatory_spaces:
367
400
  assemblies:
@@ -381,6 +414,19 @@ ca:
381
414
  description: Nombre d'assemblees creades
382
415
  object: assemblees
383
416
  title: Assemblees
417
+ pages:
418
+ home:
419
+ hero:
420
+ participate_title: Participa als processos de la plataforma
421
+ sub_hero:
422
+ register_title: Registra't per crear un compte a la plataforma
423
+ participatory_processes:
424
+ pages:
425
+ home:
426
+ highlighted_processes:
427
+ processes_button_title: Enllaç a la pàgina de Processos mostrant tots els processos
428
+ show:
429
+ related_assemblies: Assemblees relacionades
384
430
  errors:
385
431
  messages:
386
432
  cannot_be_blank: no es pot estar en blanc