decidim-assemblies 0.31.0 → 0.31.2

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/app/commands/decidim/assemblies/admin/import_assembly.rb +4 -2
  3. data/app/controllers/concerns/decidim/assemblies/assembly_breadcrumb.rb +2 -7
  4. data/app/controllers/decidim/assemblies/admin/assembly_imports_controller.rb +2 -1
  5. data/app/forms/decidim/assemblies/admin/assembly_import_form.rb +11 -0
  6. data/app/helpers/decidim/assemblies/assemblies_helper.rb +4 -1
  7. data/app/models/decidim/assembly.rb +1 -1
  8. data/app/packs/src/decidim/assemblies/controllers/assembly_admin/controller.js +0 -4
  9. data/app/presenters/decidim/assemblies/admin_log/assembly_presenter.rb +12 -1
  10. data/app/serializers/decidim/assemblies/assembly_importer.rb +74 -8
  11. data/app/views/decidim/assemblies/admin/assembly_imports/_form.html.erb +20 -16
  12. data/app/views/decidim/assemblies/admin/assembly_imports/new.html.erb +1 -0
  13. data/app/views/decidim/assemblies/assemblies/show.html.erb +1 -1
  14. data/config/locales/ar.yml +4 -0
  15. data/config/locales/bg.yml +2 -0
  16. data/config/locales/ca-IT.yml +10 -0
  17. data/config/locales/ca.yml +10 -0
  18. data/config/locales/cs.yml +8 -0
  19. data/config/locales/de.yml +3 -0
  20. data/config/locales/el.yml +4 -0
  21. data/config/locales/en.yml +10 -0
  22. data/config/locales/es-MX.yml +10 -0
  23. data/config/locales/es-PY.yml +10 -0
  24. data/config/locales/es.yml +10 -0
  25. data/config/locales/eu.yml +8 -0
  26. data/config/locales/fi-plain.yml +3 -0
  27. data/config/locales/fi.yml +3 -0
  28. data/config/locales/fr-CA.yml +25 -0
  29. data/config/locales/fr.yml +25 -0
  30. data/config/locales/ga-IE.yml +1 -0
  31. data/config/locales/gl.yml +4 -0
  32. data/config/locales/he-IL.yml +0 -1
  33. data/config/locales/hu.yml +4 -0
  34. data/config/locales/id-ID.yml +1 -0
  35. data/config/locales/is-IS.yml +1 -0
  36. data/config/locales/it.yml +2 -1
  37. data/config/locales/ja.yml +10 -2
  38. data/config/locales/ko.yml +1 -0
  39. data/config/locales/lb.yml +4 -0
  40. data/config/locales/lt.yml +4 -0
  41. data/config/locales/lv.yml +1 -0
  42. data/config/locales/nl.yml +4 -0
  43. data/config/locales/no.yml +4 -0
  44. data/config/locales/pl.yml +2 -0
  45. data/config/locales/pt-BR.yml +96 -0
  46. data/config/locales/pt.yml +1 -0
  47. data/config/locales/ro-RO.yml +17 -7
  48. data/config/locales/ru.yml +1 -0
  49. data/config/locales/sl.yml +4 -0
  50. data/config/locales/sq-AL.yml +1 -0
  51. data/config/locales/sv.yml +14 -3
  52. data/config/locales/tr-TR.yml +19 -0
  53. data/config/locales/uk.yml +1 -0
  54. data/config/locales/zh-CN.yml +4 -0
  55. data/config/locales/zh-TW.yml +4 -0
  56. data/lib/decidim/assemblies/engine.rb +7 -0
  57. data/lib/decidim/assemblies/participatory_space.rb +2 -2
  58. data/lib/decidim/assemblies/version.rb +1 -1
  59. metadata +12 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b766f3613457c6d9198a62ef67939ff8782b3f9c0e292def00611781462547a6
4
- data.tar.gz: 76534310e4128ca65152ad09fa30dfd80b5c3e8a90aa94e417516e5054bc2d66
3
+ metadata.gz: a1c49ec9e39f595bccb9274974ccafc6641ac4259058bb7695856ea6c5fef237
4
+ data.tar.gz: b26fba7ee40748c9b2b80a571b0932424423d9137aa0f4fd66bf52668f13c457
5
5
  SHA512:
6
- metadata.gz: 3e905240c92db25a0ade22a7d5b54647b51f56345b27b9884d5ea6ac1ae0b5b169fdefbc101ca750b8104b00a24bec47aa9f8384ebcd06789986cd6e615c3ba1
7
- data.tar.gz: 7ee78e72f7095d8b43184839d61372dbf34edfd538cb1383d15db4ed146fa86fe6c85925733ebcf4fdd6b15c80d3c2999610bc11ea3bdb12aec25bd7480d6bf0
6
+ metadata.gz: d60095b40c68a1d15ccc8eb30cb3cded1799f67fe26d728b20ba19d605abcede463d0a5559f89036c6cdacc1e9b5ada95cae866b94f8d7e56c457f5fb0990771
7
+ data.tar.gz: ba679178f6eb27a3dd206217903e46a9bdf1f2e58a09922bec3c2acf6f0773816ebf65fdba2c1b5917ddbf07abd704bf2659361052723a688f722f9de0015d32
@@ -29,7 +29,7 @@ module Decidim
29
29
  add_admins_as_followers(@imported_assembly)
30
30
  end
31
31
 
32
- broadcast(:ok, @imported_assembly)
32
+ broadcast(:ok, @imported_assembly, @warnings)
33
33
  end
34
34
 
35
35
  private
@@ -37,12 +37,14 @@ module Decidim
37
37
  attr_reader :form
38
38
 
39
39
  def import_assembly
40
- importer = Decidim::Assemblies::AssemblyImporter.new(form.current_organization, form.current_user)
40
+ @warnings = []
41
41
  assemblies.each do |original_assembly|
42
+ importer = Decidim::Assemblies::AssemblyImporter.new(form.current_organization, form.current_user)
42
43
  Decidim.traceability.perform_action!("import", Assembly, @user) do
43
44
  @imported_assembly = importer.import(original_assembly, form.current_user, title: form.title, slug: form.slug)
44
45
  importer.import_folders_and_attachments(original_assembly["attachments"]) if form.import_attachments?
45
46
  importer.import_components(original_assembly["components"]) if form.import_components?
47
+ @warnings.concat(importer.warnings)
46
48
  @imported_assembly
47
49
  end
48
50
  end
@@ -10,6 +10,7 @@ module Decidim
10
10
 
11
11
  def current_participatory_space_breadcrumb_item
12
12
  return {} if current_participatory_space.blank?
13
+ return super unless current_participatory_space.is_a?(Decidim::Assembly)
13
14
 
14
15
  dropdown_cell = current_participatory_space_manifest.breadcrumb_cell
15
16
 
@@ -23,13 +24,7 @@ module Decidim
23
24
  }
24
25
  end
25
26
 
26
- items << {
27
- label: current_participatory_space.title,
28
- url: Decidim::ResourceLocatorPresenter.new(current_participatory_space).path,
29
- active: true,
30
- dropdown_cell:,
31
- resource: current_participatory_space
32
- }
27
+ items << super
33
28
  end
34
29
  end
35
30
  end
@@ -16,8 +16,9 @@ module Decidim
16
16
  @form = form(AssemblyImportForm).from_params(params)
17
17
 
18
18
  ImportAssembly.call(@form, current_user) do
19
- on(:ok) do
19
+ on(:ok) do |_assembly, warnings|
20
20
  flash[:notice] = I18n.t("assembly_imports.create.success", scope: "decidim.admin")
21
+ flash[:warning] = warnings.join("<br>") if warnings.any?
21
22
  redirect_to assemblies_path
22
23
  end
23
24
 
@@ -31,12 +31,14 @@ module Decidim
31
31
  attribute :import_components, Boolean, default: true
32
32
  attribute :document, Decidim::Attributes::Blob
33
33
 
34
+ validates :document, presence: true
34
35
  validates :document, file_content_type: { allow: ACCEPTED_TYPES.values }
35
36
  validates :slug, presence: true, format: { with: Decidim::Assembly.slug_format }
36
37
  validates :title, translatable_presence: true
37
38
  validate :slug_uniqueness
38
39
 
39
40
  validate :document_type_must_be_valid, if: :document
41
+ validate :document_must_have_content, if: -> { document.present? && errors[:document].none? }
40
42
 
41
43
  def document_text
42
44
  @document_text ||= document&.download
@@ -76,6 +78,15 @@ module Decidim
76
78
 
77
79
  errors.add(:slug, :taken)
78
80
  end
81
+
82
+ def document_must_have_content
83
+ return if document_text.blank?
84
+
85
+ parsed = JSON.parse(document_text)
86
+ errors.add(:document, :empty) if parsed.is_a?(Array) && parsed.empty?
87
+ rescue JSON::ParserError
88
+ errors.add(:document, :invalid_json)
89
+ end
79
90
  end
80
91
  end
81
92
  end
@@ -14,7 +14,10 @@ module Decidim
14
14
 
15
15
  # Items to display in the navigation of an assembly
16
16
  def assembly_nav_items(participatory_space)
17
- components = participatory_space.components.published.or(Decidim::Component.where(id: try(:current_component)))
17
+ components = participatory_space
18
+ .components
19
+ .published.or(Decidim::Component.where(id: try(:current_component)))
20
+ .where(visible: true)
18
21
 
19
22
  [
20
23
  *(if participatory_space.members_public_page?
@@ -169,7 +169,7 @@ module Decidim
169
169
 
170
170
  return base unless auth_object&.admin?
171
171
 
172
- base + %w(published_at private_space parent_id)
172
+ base + %w(published_at created_at private_space parent_id)
173
173
  end
174
174
 
175
175
  def self.ransackable_associations(_auth_object = nil)
@@ -50,10 +50,6 @@ export default class extends Controller {
50
50
 
51
51
  if (isTransparentCheckbox) {
52
52
  isTransparentCheckbox.disabled = (enabledPrivateSpace === false);
53
-
54
- if (isTransparentCheckbox.checked) {
55
- isTransparentCheckbox.checked = false;
56
- }
57
53
  }
58
54
 
59
55
  if (specialFeatures) {
@@ -59,9 +59,20 @@ module Decidim
59
59
  "activemodel.attributes.assembly"
60
60
  end
61
61
 
62
+ # i18n-tasks-use t("decidim.admin_log.assembly.create")
63
+ # i18n-tasks-use t("decidim.admin_log.assembly.publish")
64
+ # i18n-tasks-use t("decidim.admin_log.assembly.unpublish")
65
+ # i18n-tasks-use t("decidim.admin_log.assembly.update")
66
+ # i18n-tasks-use t("decidim.admin_log.assembly.import")
67
+ # i18n-tasks-use t("decidim.admin_log.assembly.export")
68
+ # i18n-tasks-use t("decidim.admin_log.assembly.duplicate")
69
+ # i18n-tasks-use t("decidim.admin_log.assembly.soft_delete")
70
+ # i18n-tasks-use t("decidim.admin_log.assembly.restore")
71
+ # i18n-tasks-use t("decidim.admin_log.assembly.publish_all_members")
72
+ # i18n-tasks-use t("decidim.admin_log.assembly.unpublish_all_members")
62
73
  def action_string
63
74
  case action
64
- when "create", "publish", "unpublish", "update", "duplicate", "export", "import", "soft_delete", "restore"
75
+ when "create", "publish", "unpublish", "update", "duplicate", "export", "import", "soft_delete", "restore", "publish_all_members", "unpublish_all_members"
65
76
  "decidim.admin_log.assembly.#{action}"
66
77
  else
67
78
  super
@@ -4,9 +4,12 @@ module Decidim
4
4
  module Assemblies
5
5
  # A factory class to ensure we always create Assemblies the same way since it involves some logic.
6
6
  class AssemblyImporter < Decidim::Importers::Importer
7
+ attr_reader :warnings
8
+
7
9
  def initialize(organization, user)
8
10
  @organization = organization
9
11
  @user = user
12
+ @warnings = []
10
13
  end
11
14
 
12
15
  # Public: Creates a new Assembly.
@@ -57,8 +60,8 @@ module Decidim
57
60
  meta_scope: attributes["meta_scope"],
58
61
  announcement: attributes["announcement"]
59
62
  )
60
- @imported_assembly.attached_uploader(:hero_image).remote_url = attributes["remote_hero_image_url"] if attributes["remote_hero_image_url"].present?
61
- @imported_assembly.attached_uploader(:banner_image).remote_url = attributes["remote_banner_image_url"] if attributes["remote_banner_image_url"].present?
63
+ import_hero_image(attributes["remote_hero_image_url"])
64
+ import_banner_image(attributes["remote_banner_image_url"])
62
65
 
63
66
  @imported_assembly.save!
64
67
  @imported_assembly
@@ -69,9 +72,29 @@ module Decidim
69
72
  return if attachments["files"].nil?
70
73
 
71
74
  attachments["files"].map do |file|
72
- next unless remote_file_exists?(file["remote_file_url"])
75
+ url = file["remote_file_url"]
76
+ next if url.blank?
77
+
78
+ error = remote_file_error(url)
79
+ if error.present?
80
+ @warnings << I18n.t(
81
+ "decidim.assemblies.admin.imports.attachment_error",
82
+ title: attachment_title(file),
83
+ error:
84
+ )
85
+ next
86
+ end
73
87
 
74
- file_tmp = URI.parse(file["remote_file_url"]).open
88
+ begin
89
+ file_tmp = URI.parse(url).open
90
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
91
+ @warnings << I18n.t(
92
+ "decidim.assemblies.admin.imports.attachment_error",
93
+ title: attachment_title(file),
94
+ error: format_error(e)
95
+ )
96
+ next
97
+ end
75
98
 
76
99
  Decidim.traceability.perform_action!("create", Attachment, @user) do
77
100
  attachment = Attachment.new(
@@ -121,7 +144,7 @@ module Decidim
121
144
  attachment_collection
122
145
  end
123
146
 
124
- def remote_file_exists?(url)
147
+ def remote_file_error(url)
125
148
  return if url.nil?
126
149
 
127
150
  accepted = ["image", "application/pdf"]
@@ -129,10 +152,53 @@ module Decidim
129
152
  http_connection = Net::HTTP.new(url.host, url.port)
130
153
  http_connection.use_ssl = true if url.scheme == "https"
131
154
  http_connection.start do |http|
132
- return http.head(url.request_uri)["Content-Type"].start_with?(*accepted)
155
+ response = http.head(url.request_uri)
156
+ content_type = response["Content-Type"]
157
+ next if response.is_a?(Net::HTTPSuccess) && content_type&.start_with?(*accepted)
158
+
159
+ message = response.message.presence || Rack::Utils::HTTP_STATUS_CODES[response.code.to_i]
160
+ message = message.presence || "Error"
161
+ next "#{response.code} #{message}"
133
162
  end
134
- rescue StandardError
135
- nil
163
+ rescue StandardError => e
164
+ format_error(e)
165
+ end
166
+
167
+ def attachment_title(file)
168
+ title = file["title"]
169
+ return "" if title.blank?
170
+
171
+ return title unless title.is_a?(Hash)
172
+
173
+ title.values.find(&:present?) || ""
174
+ end
175
+
176
+ def import_hero_image(url)
177
+ return if url.blank?
178
+
179
+ @imported_assembly.attached_uploader(:hero_image).remote_url = url
180
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
181
+ @warnings << I18n.t("decidim.assemblies.admin.imports.hero_image_error", error: format_error(e))
182
+ end
183
+
184
+ def import_banner_image(url)
185
+ return if url.blank?
186
+
187
+ @imported_assembly.attached_uploader(:banner_image).remote_url = url
188
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
189
+ @warnings << I18n.t("decidim.assemblies.admin.imports.banner_image_error", error: format_error(e))
190
+ end
191
+
192
+ def format_error(error)
193
+ return error.message unless error.respond_to?(:io) && error.io.respond_to?(:status)
194
+
195
+ status = error.io.status
196
+ return error.message if status.blank? || status.first.blank?
197
+
198
+ code = status[0]
199
+ message = status[1].presence || Rack::Utils::HTTP_STATUS_CODES[code.to_i]
200
+ message = message.presence || error.message
201
+ "#{code} #{message}"
136
202
  end
137
203
  end
138
204
  end
@@ -1,34 +1,38 @@
1
- <%= append_javascript_pack_tag "decidim_assemblies_admin" %>
2
-
3
1
  <div class="form__wrapper">
4
2
  <div class="card pt-4" id="assemblies">
5
3
  <div class="card-section">
4
+ <div class="row column mb-4">
5
+ <%= cell("decidim/announcement", { body: t("decidim.assemblies.admin.new_import.help_html") }, callout_class: "info") %>
6
+ </div>
7
+
6
8
  <div class="row column">
7
9
  <%= form.translated :text_field, :title, autofocus: true, aria: { label: :title } %>
8
10
  </div>
11
+
9
12
  <div class="row column">
10
13
  <%= form.text_field :slug, help_text: t(".slug_help_html", url: decidim_form_slug_url(:assemblies, form.object.slug)) %>
11
14
  </div>
15
+
12
16
  <div class="row column">
13
- <%= form.upload :document, button_class: "button button__sm button__transparent-secondary" %>
17
+ <%= form.upload :document, label: t(".document_legend"), button_class: "button button__sm button__transparent-secondary", help_i18n_scope: "decidim.forms.file_help.import_file", help_i18n_messages: ["message_1"] %>
14
18
  </div>
15
- <div class="row column">
16
- <div class="card">
17
- <div class="card-divider">
18
- <legend><%= t("assembly_imports.new.select", scope: "decidim.admin") %></legend>
19
+
20
+ <div class="card-divider">
21
+ <div class="card-title">
22
+ <%= t("assembly_imports.new.select", scope: "decidim.admin") %>
23
+ </div>
24
+ </div>
25
+ <div class="card-section">
26
+ <div class="row">
27
+ <div class="columns">
28
+ <%= form.check_box :import_attachments %>
19
29
  </div>
20
- <div class="card-section">
21
- <div class="row">
22
- <div class="columns">
23
- <%= form.check_box :import_attachments %>
24
- </div>
25
- <div class="columns">
26
- <%= form.check_box :import_components %>
27
- </div>
28
- </div>
30
+ <div class="columns">
31
+ <%= form.check_box :import_components %>
29
32
  </div>
30
33
  </div>
31
34
  </div>
35
+
32
36
  </div>
33
37
  </div>
34
38
  </div>
@@ -1,4 +1,5 @@
1
1
  <% add_decidim_page_title(t("assembly_imports.new.title", scope: "decidim.admin")) %>
2
+
2
3
  <div class="item_show__header">
3
4
  <h1 class="item_show__header-title">
4
5
  <%= t("assembly_imports.new.title", scope: "decidim.admin") %>
@@ -34,6 +34,6 @@ edit_link(
34
34
  </div>
35
35
 
36
36
  <section class="participatory-space__block-reference">
37
- <%= resource_reference(current_participatory_space) %>
37
+ <p><%= resource_reference(current_participatory_space) %></p>
38
38
  </section>
39
39
  </main>
@@ -146,6 +146,7 @@ ar:
146
146
  attachments: المرفقات
147
147
  components: المكونات
148
148
  moderations: الإعتدال
149
+ private_users: الأعضاء
149
150
  models:
150
151
  assembly:
151
152
  fields:
@@ -216,6 +217,9 @@ ar:
216
217
  select_parent_assembly: حدد الجمعية الأصلية
217
218
  social_handlers: التواصل الاجتماعي
218
219
  title: معلومات عامة
220
+ assembly_imports:
221
+ form:
222
+ document_legend: إضافة وثيقة
219
223
  assembly_members:
220
224
  form:
221
225
  explanation: 'إرشادات للصورة:'
@@ -153,6 +153,7 @@ bg:
153
153
  components: Компоненти
154
154
  info: Относно това събрание
155
155
  moderations: Модерации
156
+ private_users: Членове
156
157
  see_assembly: Вижте събранието
157
158
  models:
158
159
  assembly:
@@ -228,6 +229,7 @@ bg:
228
229
  visibility: Видимост
229
230
  assembly_imports:
230
231
  form:
232
+ document_legend: Добавяне на документ
231
233
  slug_help_html: 'Използват се променливи полета в URL адреса, за да се генерират URL адреси, които водят към това събрание. Допуска се използването само на букви, цифри и тирета и адресът трябва да започва с буква. Пример: %{url}'
232
234
  assembly_members:
233
235
  form:
@@ -74,6 +74,8 @@ ca-IT:
74
74
  attributes:
75
75
  document:
76
76
  allowed_file_content_types: 'Tipus de document no vàlid. Només s''accepten arxius amb les següents extensions: %{types}.'
77
+ empty: El document està buit
78
+ invalid_json: El document no és un JSON vàlid
77
79
  activerecord:
78
80
  models:
79
81
  decidim/assembly:
@@ -219,9 +221,11 @@ ca-IT:
219
221
  export: "%{user_name} ha exportat l'assemblea %{resource_name}"
220
222
  import: "%{user_name} ha importat l'assemblea %{resource_name}"
221
223
  publish: "%{user_name} ha publicat l'assemblea %{resource_name}"
224
+ publish_all_members: "%{user_name} va publicar a totes les membres de l'assemblea %{resource_name}"
222
225
  restore: "%{user_name} ha restaurat l'assemblea %{resource_name}"
223
226
  soft_delete: "%{user_name} ha mogut a la paperera l'assemblea %{resource_name}"
224
227
  unpublish: "%{user_name} ha despublicat l'assemblea %{resource_name}"
228
+ unpublish_all_members: "%{user_name} va despublicar a totes les membres de l'assemblea %{resource_name}"
225
229
  update: "%{user_name} ha actualitzat l'assemblea %{resource_name}"
226
230
  assembly_member:
227
231
  create: "%{user_name} ha afegit el membre %{resource_name} a l'assemblea %{space_name}"
@@ -265,6 +269,7 @@ ca-IT:
265
269
  slug_help_html: 'Els noms curts d''URL s''utilitzen per generar les URL que apunten a aquesta assemblea. Només accepta lletres, números i guions, i ha de començar amb una lletra. Exemple: %{url}'
266
270
  assembly_imports:
267
271
  form:
272
+ document_legend: Afegir un document
268
273
  slug_help_html: 'Els noms curts d''URL s''utilitzen per generar les URL que apunten a aquesta assemblea. Només accepta lletres, números i guions, i ha de començar amb una lletra. Exemple: %{url}'
269
274
  assembly_members:
270
275
  form:
@@ -274,9 +279,14 @@ ca-IT:
274
279
  content_blocks:
275
280
  highlighted_assemblies:
276
281
  max_results: Quantitat màxima d'elements que es mostraran
282
+ imports:
283
+ attachment_error: No s'ha pogut importar l'arxiu adjunt "%{title}" (%{error}).
284
+ banner_image_error: No s'ha pogut importar la imatge del bàner (%{error}).
285
+ hero_image_error: No s'ha pogut importar la imatge principal (%{error}).
277
286
  new_import:
278
287
  accepted_types:
279
288
  json: JSON
289
+ help_html: Aquesta funció d'importació et permet crear una nova assemblea a partir d'un fitxer JSON exportat. Pots exportar una assemblea d'una altra organització o de la mateixa organització. L'assemblea importada inclourà la seva configuració, els components i els fitxers adjunts (si s'han seleccionat).
280
290
  assemblies:
281
291
  description:
282
292
  area_name: Àrea
@@ -74,6 +74,8 @@ ca:
74
74
  attributes:
75
75
  document:
76
76
  allowed_file_content_types: 'Tipus de document no vàlid. Només s''accepten arxius amb les següents extensions: %{types}.'
77
+ empty: El document està buit
78
+ invalid_json: El document no és un JSON vàlid
77
79
  activerecord:
78
80
  models:
79
81
  decidim/assembly:
@@ -219,9 +221,11 @@ ca:
219
221
  export: "%{user_name} ha exportat l'assemblea %{resource_name}"
220
222
  import: "%{user_name} ha importat l'assemblea %{resource_name}"
221
223
  publish: "%{user_name} ha publicat l'assemblea %{resource_name}"
224
+ publish_all_members: "%{user_name} va publicar a totes les membres de l'assemblea %{resource_name}"
222
225
  restore: "%{user_name} ha restaurat l'assemblea %{resource_name}"
223
226
  soft_delete: "%{user_name} ha mogut a la paperera l'assemblea %{resource_name}"
224
227
  unpublish: "%{user_name} ha despublicat l'assemblea %{resource_name}"
228
+ unpublish_all_members: "%{user_name} va despublicar a totes les membres de l'assemblea %{resource_name}"
225
229
  update: "%{user_name} ha actualitzat l'assemblea %{resource_name}"
226
230
  assembly_member:
227
231
  create: "%{user_name} ha afegit el membre %{resource_name} a l'assemblea %{space_name}"
@@ -265,6 +269,7 @@ ca:
265
269
  slug_help_html: 'Els noms curts d''URL s''utilitzen per generar les URL que apunten a aquesta assemblea. Només accepta lletres, números i guions, i ha de començar amb una lletra. Exemple: %{url}'
266
270
  assembly_imports:
267
271
  form:
272
+ document_legend: Afegir un document
268
273
  slug_help_html: 'Els noms curts d''URL s''utilitzen per generar les URL que apunten a aquesta assemblea. Només accepta lletres, números i guions, i ha de començar amb una lletra. Exemple: %{url}'
269
274
  assembly_members:
270
275
  form:
@@ -274,9 +279,14 @@ ca:
274
279
  content_blocks:
275
280
  highlighted_assemblies:
276
281
  max_results: Quantitat màxima d'elements que es mostraran
282
+ imports:
283
+ attachment_error: No s'ha pogut importar l'arxiu adjunt "%{title}" (%{error}).
284
+ banner_image_error: No s'ha pogut importar la imatge del bàner (%{error}).
285
+ hero_image_error: No s'ha pogut importar la imatge principal (%{error}).
277
286
  new_import:
278
287
  accepted_types:
279
288
  json: JSON
289
+ help_html: Aquesta funció d'importació et permet crear una nova assemblea a partir d'un fitxer JSON exportat. Pots exportar una assemblea d'una altra organització o de la mateixa organització. L'assemblea importada inclourà la seva configuració, els components i els fitxers adjunts (si s'han seleccionat).
280
290
  assemblies:
281
291
  description:
282
292
  area_name: Àrea
@@ -225,9 +225,11 @@ cs:
225
225
  export: "%{user_name} exportoval shromáždění %{resource_name}"
226
226
  import: "%{user_name} importoval shromáždění %{resource_name}"
227
227
  publish: "%{user_name} publikoval %{resource_name} shromáždění"
228
+ publish_all_members: "%{user_name} zveřejnil všechny členy shromáždění %{resource_name}"
228
229
  restore: "%{user_name} obnovil shromáždění %{resource_name}"
229
230
  soft_delete: "%{user_name} přesunul do koše shromáždění %{resource_name}"
230
231
  unpublish: "%{user_name} odebral %{resource_name} shromáždění"
232
+ unpublish_all_members: "%{user_name} zneveřejnil všechny členy shromáždění %{resource_name}"
231
233
  update: "%{user_name} aktualizoval shromáždění %{resource_name}"
232
234
  assembly_member:
233
235
  create: "%{user_name} vytvořil %{resource_name} člena ve shromáždění %{space_name}"
@@ -271,6 +273,7 @@ cs:
271
273
  slug_help_html: 'URL slugy se používají ke generování adres URL, které odkazují na toto shromáždění. Povolená jsou pouze písmena, číslice a pomlčky a musí začínat písmenem. Příklad: %{url}'
272
274
  assembly_imports:
273
275
  form:
276
+ document_legend: Přidat dokument
274
277
  slug_help_html: 'URL slugy se používají ke generování adres URL, které odkazují na toto shromáždění. Povolená jsou pouze písmena, číslice a pomlčky a musí začínat písmenem. Příklad: %{url}'
275
278
  assembly_members:
276
279
  form:
@@ -280,9 +283,14 @@ cs:
280
283
  content_blocks:
281
284
  highlighted_assemblies:
282
285
  max_results: Maximální množství prvků, které chcete zobrazit
286
+ imports:
287
+ attachment_error: Přílohu "%{title}" nelze importovat (%{error}).
288
+ banner_image_error: Obrázek banneru nelze importovat (%{error}).
289
+ hero_image_error: Obrázek hrdiny nelze importovat (%{error}).
283
290
  new_import:
284
291
  accepted_types:
285
292
  json: JSON
293
+ help_html: Tato funkce importu umožňuje vytvořit novou sestavu z exportovaného JSON souboru. Můžete exportovat sestavení z jiné organizace nebo ze stejné organizace. Importovaná sestava bude obsahovat jeho nastavení, součásti a přílohy (je-li vybrána).
286
294
  assemblies:
287
295
  description:
288
296
  area_name: Oblast
@@ -219,9 +219,11 @@ de:
219
219
  export: "%{user_name} hat das Gremium %{resource_name} exportiert"
220
220
  import: "%{user_name} hat das Gremium %{resource_name} importiert"
221
221
  publish: "%{user_name} hat das Gremium %{resource_name} veröffentlicht"
222
+ publish_all_members: "%{user_name} hat alle Mitglieder des Gremiums %{resource_name} veröffentlicht"
222
223
  restore: "%{user_name} hat das Gremium %{resource_name} wiederhergestellt"
223
224
  soft_delete: "%{user_name} hat das Gremium %{resource_name} in den Papierkorb verschoben"
224
225
  unpublish: "%{user_name} hat das Gremium %{resource_name} auf \"unveröffentlicht\" gesetzt"
226
+ unpublish_all_members: "%{user_name} hat die Veröffentlichung aller Mitglieder des Gremiums %{resource_name} aufgehoben"
225
227
  update: "%{user_name} hat das Gremium %{resource_name} aktualisiert"
226
228
  assembly_member:
227
229
  create: "%{user_name} hat das Mitglied %{resource_name} im Gremium %{space_name} erstellt"
@@ -265,6 +267,7 @@ de:
265
267
  slug_help_html: 'URL-Slugs werden zum Generieren der URLs verwendet, die auf dieses Gremium verweisen. Akzeptiert werden nur Buchstaben, Zahlen und Bindestriche und sie müssen mit einem Buchstaben beginnen. Beispiel: %{url}'
266
268
  assembly_imports:
267
269
  form:
270
+ document_legend: Dokument hinzufügen
268
271
  slug_help_html: 'URL-Slugs werden zum Generieren der URLs verwendet, die auf dieses Gremium verweisen. Akzeptiert werden nur Buchstaben, Zahlen und Bindestriche und es muss mit einem Buchstaben beginnen. Beispiel: %{url}'
269
272
  assembly_members:
270
273
  form:
@@ -139,6 +139,7 @@ el:
139
139
  attachments: Συνημμένα
140
140
  components: Στοιχεία
141
141
  moderations: Εποπτεύσεις
142
+ private_users: Μέλη
142
143
  models:
143
144
  assembly:
144
145
  fields:
@@ -208,6 +209,9 @@ el:
208
209
  select_parent_assembly: Επιλέξτε «Γονική συνέλευση»
209
210
  social_handlers: Μέσα κοινωνικής δικτύωσης
210
211
  title: Γενικές πληροφορίες
212
+ assembly_imports:
213
+ form:
214
+ document_legend: Προσθήκη εγγράφου
211
215
  assembly_members:
212
216
  form:
213
217
  explanation: 'Οδηγίες για την εικόνα:'
@@ -74,6 +74,8 @@ en:
74
74
  attributes:
75
75
  document:
76
76
  allowed_file_content_types: 'Invalid document type. Only files with the following extensions are allowed: %{types}.'
77
+ empty: The document is empty
78
+ invalid_json: The document is not valid JSON
77
79
  activerecord:
78
80
  models:
79
81
  decidim/assembly:
@@ -219,9 +221,11 @@ en:
219
221
  export: "%{user_name} exported the %{resource_name} assembly"
220
222
  import: "%{user_name} imported the %{resource_name} assembly"
221
223
  publish: "%{user_name} published the %{resource_name} assembly"
224
+ publish_all_members: "%{user_name} published all members of the %{resource_name} assembly"
222
225
  restore: "%{user_name} restored the %{resource_name} assembly"
223
226
  soft_delete: "%{user_name} moved to trash the %{resource_name} assembly"
224
227
  unpublish: "%{user_name} unpublished the %{resource_name} assembly"
228
+ unpublish_all_members: "%{user_name} unpublished all members of the %{resource_name} assembly"
225
229
  update: "%{user_name} updated the %{resource_name} assembly"
226
230
  assembly_member:
227
231
  create: "%{user_name} created the %{resource_name} member in the %{space_name} assembly"
@@ -265,6 +269,7 @@ en:
265
269
  slug_help_html: 'URL slugs are used to generate the URLs that point to this assembly. Only accepts letters, numbers and dashes, and must start with a letter. Example: %{url}'
266
270
  assembly_imports:
267
271
  form:
272
+ document_legend: Add a document
268
273
  slug_help_html: 'URL slugs are used to generate the URLs that point to this assembly. Only accepts letters, numbers and dashes, and must start with a letter. Example: %{url}'
269
274
  assembly_members:
270
275
  form:
@@ -274,9 +279,14 @@ en:
274
279
  content_blocks:
275
280
  highlighted_assemblies:
276
281
  max_results: Maximum amount of elements to show
282
+ imports:
283
+ attachment_error: The attachment "%{title}" could not be imported (%{error}).
284
+ banner_image_error: The banner image could not be imported (%{error}).
285
+ hero_image_error: The hero image could not be imported (%{error}).
277
286
  new_import:
278
287
  accepted_types:
279
288
  json: JSON
289
+ help_html: This import feature allows you to create a new assembly from an exported JSON file. You can export an assembly from another organization or from this same organization. The imported assembly will include its settings, components, and attachments (if selected).
280
290
  assemblies:
281
291
  description:
282
292
  area_name: Area
@@ -74,6 +74,8 @@ es-MX:
74
74
  attributes:
75
75
  document:
76
76
  allowed_file_content_types: 'Tipo de documento no válido. Sólo se permiten archivos con las siguientes extensiones: %{types}.'
77
+ empty: El documento está vacío
78
+ invalid_json: El documento no es JSON válido
77
79
  activerecord:
78
80
  models:
79
81
  decidim/assembly:
@@ -219,9 +221,11 @@ es-MX:
219
221
  export: "%{user_name} exportó la asamblea %{resource_name}"
220
222
  import: "%{user_name} importó la asamblea %{resource_name}"
221
223
  publish: "%{user_name} publicó la asamblea %{resource_name}"
224
+ publish_all_members: "%{user_name} publicó todas las miembros de la asamblea %{resource_name}"
222
225
  restore: "%{user_name} ha restaurado la asamblea %{resource_name}"
223
226
  soft_delete: "%{user_name} ha movido a la papelera la asamblea %{resource_name}"
224
227
  unpublish: "%{user_name} despublicó la asamblea %{resource_name}"
228
+ unpublish_all_members: "%{user_name} despublicó a todas las miembros de la asamblea %{resource_name}"
225
229
  update: "%{user_name} actualizó la asamblea %{resource_name}"
226
230
  assembly_member:
227
231
  create: "%{user_name} creó el miembro %{resource_name} en la asamblea %{space_name}"
@@ -265,6 +269,7 @@ es-MX:
265
269
  slug_help_html: 'Los textos cortos de URL se utilizan para generar las URL que apuntan a esta asamblea. Solo acepta letras, números y guiones, y debe comenzar con una letra. Ejemplo: %{url}'
266
270
  assembly_imports:
267
271
  form:
272
+ document_legend: Añadir un documento
268
273
  slug_help_html: 'Los textos cortos de URL se utilizan para generar las URL que apuntan a esta asamblea. Sólo acepta letras, números y guiones, y debe comenzar con una letra. Ejemplo: %{url}'
269
274
  assembly_members:
270
275
  form:
@@ -274,9 +279,14 @@ es-MX:
274
279
  content_blocks:
275
280
  highlighted_assemblies:
276
281
  max_results: Cantidad máxima de elementos para mostrar
282
+ imports:
283
+ attachment_error: No se ha podido importar el archivo adjunto "%{title}" (%{error}).
284
+ banner_image_error: No se ha podido importar la imagen del banner (%{error}).
285
+ hero_image_error: No se ha podrido importar la imagen principal (%{error}).
277
286
  new_import:
278
287
  accepted_types:
279
288
  json: JSON
289
+ help_html: Esta función de importación te permite crear una nueva asamblea a partir de un archivo JSON exportado. Puedes exportar una asamblea desde otra organización o desde esta misma organización. La asamblea importada incluirá sus ajustes, componentes y archivos adjuntos (si se seleccionan).
280
290
  assemblies:
281
291
  description:
282
292
  area_name: Área