decidim-assemblies 0.30.5 → 0.30.7

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/app/commands/decidim/assemblies/admin/import_assembly.rb +4 -2
  3. data/app/controllers/decidim/assemblies/admin/assembly_imports_controller.rb +2 -1
  4. data/app/forms/decidim/assemblies/admin/assembly_import_form.rb +11 -0
  5. data/app/helpers/decidim/assemblies/assemblies_helper.rb +4 -1
  6. data/app/serializers/decidim/assemblies/assembly_importer.rb +75 -12
  7. data/app/views/decidim/assemblies/admin/assembly_imports/_form.html.erb +20 -16
  8. data/app/views/decidim/assemblies/admin/assembly_imports/new.html.erb +1 -0
  9. data/app/views/decidim/assemblies/assemblies/show.html.erb +1 -1
  10. data/config/locales/ar.yml +3 -1
  11. data/config/locales/bg.yml +2 -3
  12. data/config/locales/ca-IT.yml +9 -1
  13. data/config/locales/ca.yml +9 -1
  14. data/config/locales/cs.yml +10 -0
  15. data/config/locales/de.yml +2 -7
  16. data/config/locales/el.yml +3 -1
  17. data/config/locales/en.yml +8 -0
  18. data/config/locales/es-MX.yml +10 -2
  19. data/config/locales/es-PY.yml +10 -2
  20. data/config/locales/es.yml +9 -1
  21. data/config/locales/eu.yml +9 -1
  22. data/config/locales/fi-plain.yml +8 -6
  23. data/config/locales/fi.yml +8 -6
  24. data/config/locales/fr-CA.yml +25 -2
  25. data/config/locales/fr.yml +25 -2
  26. data/config/locales/gl.yml +3 -1
  27. data/config/locales/he-IL.yml +0 -6
  28. data/config/locales/hu.yml +3 -2
  29. data/config/locales/is-IS.yml +1 -9
  30. data/config/locales/it.yml +1 -5
  31. data/config/locales/ja.yml +11 -3
  32. data/config/locales/ko.yml +3 -0
  33. data/config/locales/lb.yml +5 -1
  34. data/config/locales/lt.yml +3 -1
  35. data/config/locales/nl.yml +4 -2
  36. data/config/locales/no.yml +3 -1
  37. data/config/locales/pl.yml +1 -2
  38. data/config/locales/pt-BR.yml +3 -6
  39. data/config/locales/pt.yml +3 -7
  40. data/config/locales/ro-RO.yml +13 -10
  41. data/config/locales/ru.yml +1 -8
  42. data/config/locales/sk.yml +0 -1
  43. data/config/locales/sl.yml +6 -5
  44. data/config/locales/sq-AL.yml +2 -11
  45. data/config/locales/sv.yml +15 -13
  46. data/config/locales/tr-TR.yml +5 -2
  47. data/config/locales/uk.yml +1 -8
  48. data/config/locales/zh-CN.yml +3 -1
  49. data/config/locales/zh-TW.yml +4 -2
  50. data/lib/decidim/assemblies/participatory_space.rb +2 -2
  51. data/lib/decidim/assemblies/version.rb +1 -1
  52. metadata +12 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 17105d17b96ff3f9e123184527c32ee832dd55ea4839f19429cee4a334950340
4
- data.tar.gz: 7eba5359544e6dee4695832f4cbeaf96e73d3a13d072475568a64cbc74e45ea5
3
+ metadata.gz: 1a2c5a5468b2300e4a33afe69e509dbe9e59c27f5e41fd6e55159e45f11950d8
4
+ data.tar.gz: aab89010bddbd48777231134b105acf7a142ab605922167c6b454a5d847a3e43
5
5
  SHA512:
6
- metadata.gz: 43e178dab04e73a571ce0bc4b4cff9a275127bcae08209a3ce70336366a02876394045a857e4d937dabe4dc0111f20bb28ac22c87f480476ab02b24b07704ec7
7
- data.tar.gz: 5dca1a69905e22ea05150330925ba1743c7c4e93fe312c924b0082e393895ea103e2f0b0557b54daa710e4d82f042c5394268d53582f460e520d326c6df249fc
6
+ metadata.gz: f829ad65c0ca0f39fe99a99926fa13b6b2a29a4c7d7cdfda2d4d8b2474b6db8c9bb4ff68c2bbaadb23b52ffad504c3c987399d11b644f54a41ccdcd4b4e0cfcc
7
+ data.tar.gz: 885f90af61d77ad149fa9fdbeef5520c1b8616470339bc4c197d184061441f840a5d2d161a57c27202673caf184d4cd5af349ed76bf60c1e84d5ff974e1efcda
@@ -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
@@ -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?
@@ -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.
@@ -58,8 +61,8 @@ module Decidim
58
61
  meta_scope: attributes["meta_scope"],
59
62
  announcement: attributes["announcement"]
60
63
  )
61
- @imported_assembly.attached_uploader(:hero_image).remote_url = attributes["remote_hero_image_url"] if attributes["remote_hero_image_url"].present?
62
- @imported_assembly.attached_uploader(:banner_image).remote_url = attributes["remote_banner_image_url"] if attributes["remote_banner_image_url"].present?
64
+ import_hero_image(attributes["remote_hero_image_url"])
65
+ import_banner_image(attributes["remote_banner_image_url"])
63
66
 
64
67
  @imported_assembly.save!
65
68
  @imported_assembly
@@ -70,20 +73,37 @@ module Decidim
70
73
  return if attachments["files"].nil?
71
74
 
72
75
  attachments["files"].map do |file|
73
- next unless remote_file_exists?(file["remote_file_url"])
76
+ url = file["remote_file_url"]
77
+ next if url.blank?
74
78
 
75
- file_tmp = URI.parse(file["remote_file_url"]).open
79
+ error = remote_file_error(url)
80
+ if error.present?
81
+ @warnings << I18n.t(
82
+ "decidim.assemblies.admin.imports.attachment_error",
83
+ title: attachment_title(file),
84
+ error:
85
+ )
86
+ next
87
+ end
76
88
 
77
89
  Decidim.traceability.perform_action!("create", Attachment, @user) do
78
90
  attachment = Attachment.new(
79
91
  title: file["title"],
80
92
  description: file["description"],
81
- content_type: file_tmp.content_type,
82
93
  attached_to: @imported_assembly,
83
- weight: file["weight"],
84
- file: file_tmp, # Define attached_to before this
85
- file_size: file_tmp.size
94
+ weight: file["weight"]
86
95
  )
96
+ begin
97
+ attachment.attached_uploader(:file).remote_url = url
98
+ attachment.set_content_type_and_size
99
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
100
+ @warnings << I18n.t(
101
+ "decidim.assemblies.admin.imports.attachment_error",
102
+ title: attachment_title(file),
103
+ error: format_error(e)
104
+ )
105
+ next
106
+ end
87
107
  attachment.create_attachment_collection(file["attachment_collection"])
88
108
  attachment.save!
89
109
  attachment
@@ -122,7 +142,7 @@ module Decidim
122
142
  attachment_collection
123
143
  end
124
144
 
125
- def remote_file_exists?(url)
145
+ def remote_file_error(url)
126
146
  return if url.nil?
127
147
 
128
148
  accepted = ["image", "application/pdf"]
@@ -130,10 +150,53 @@ module Decidim
130
150
  http_connection = Net::HTTP.new(url.host, url.port)
131
151
  http_connection.use_ssl = true if url.scheme == "https"
132
152
  http_connection.start do |http|
133
- return http.head(url.request_uri)["Content-Type"].start_with?(*accepted)
153
+ response = http.head(url.request_uri)
154
+ content_type = response["Content-Type"]
155
+ next if response.is_a?(Net::HTTPSuccess) && content_type&.start_with?(*accepted)
156
+
157
+ message = response.message.presence || Rack::Utils::HTTP_STATUS_CODES[response.code.to_i]
158
+ message = message.presence || "Error"
159
+ next "#{response.code} #{message}"
134
160
  end
135
- rescue StandardError
136
- nil
161
+ rescue StandardError => e
162
+ format_error(e)
163
+ end
164
+
165
+ def attachment_title(file)
166
+ title = file["title"]
167
+ return "" if title.blank?
168
+
169
+ return title unless title.is_a?(Hash)
170
+
171
+ title.values.find(&:present?) || ""
172
+ end
173
+
174
+ def import_hero_image(url)
175
+ return if url.blank?
176
+
177
+ @imported_assembly.attached_uploader(:hero_image).remote_url = url
178
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
179
+ @warnings << I18n.t("decidim.assemblies.admin.imports.hero_image_error", error: format_error(e))
180
+ end
181
+
182
+ def import_banner_image(url)
183
+ return if url.blank?
184
+
185
+ @imported_assembly.attached_uploader(:banner_image).remote_url = url
186
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
187
+ @warnings << I18n.t("decidim.assemblies.admin.imports.banner_image_error", error: format_error(e))
188
+ end
189
+
190
+ def format_error(error)
191
+ return error.message unless error.respond_to?(:io) && error.io.respond_to?(:status)
192
+
193
+ status = error.io.status
194
+ return error.message if status.blank? || status.first.blank?
195
+
196
+ code = status[0]
197
+ message = status[1].presence || Rack::Utils::HTTP_STATUS_CODES[code.to_i]
198
+ message = message.presence || error.message
199
+ "#{code} #{message}"
137
200
  end
138
201
  end
139
202
  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>
@@ -121,7 +121,6 @@ ar:
121
121
  new:
122
122
  import: استيراد
123
123
  select: اختر البيانات التي ترغب في استيرادها
124
- title: استيراد الجمعية
125
124
  assembly_publications:
126
125
  create:
127
126
  error: حدثت مشكلة في نشر هذا التجميع.
@@ -225,6 +224,9 @@ ar:
225
224
  select_parent_assembly: حدد الجمعية الأصلية
226
225
  social_handlers: التواصل الاجتماعي
227
226
  title: معلومات عامة
227
+ assembly_imports:
228
+ form:
229
+ document_legend: إضافة وثيقة
228
230
  assembly_members:
229
231
  form:
230
232
  explanation: 'إرشادات للصورة:'
@@ -98,7 +98,7 @@ bg:
98
98
  update: Актуализация
99
99
  index:
100
100
  private: Частни
101
- public: Публични
101
+ public: Публично
102
102
  published: Публикувано
103
103
  unpublished: Непубликувано
104
104
  new:
@@ -117,7 +117,6 @@ bg:
117
117
  new:
118
118
  import: Импортиране
119
119
  select: Изберете кои данни искате да импортирате
120
- title: Импортиране на събрание
121
120
  assembly_publications:
122
121
  create:
123
122
  error: Възникна проблем при публикуването на това събрание.
@@ -132,7 +131,6 @@ bg:
132
131
  destroy:
133
132
  success: Администраторът беше премахнат успешно от това събрание.
134
133
  edit:
135
- title: Актуализиране на администратора на събранието
136
134
  update: Актуализация
137
135
  index:
138
136
  assembly_admins_title: Администратори на събранието
@@ -241,6 +239,7 @@ bg:
241
239
  slug_help_html: 'Използват се променливи полета в URL адреса, за да се генерират URL адреси, които водят към това събрание. Допуска се използването само на букви, цифри и тирета и адресът трябва да започва с буква. Пример: %{url}'
242
240
  assembly_imports:
243
241
  form:
242
+ document_legend: Добавяне на документ
244
243
  slug_help_html: 'Използват се променливи полета в URL адреса, за да се генерират URL адреси, които водят към това събрание. Допуска се използването само на букви, цифри и тирета и адресът трябва да започва с буква. Пример: %{url}'
245
244
  assembly_members:
246
245
  form:
@@ -75,6 +75,8 @@ ca-IT:
75
75
  attributes:
76
76
  document:
77
77
  allowed_file_content_types: 'Tipus de document no vàlid. Només s''accepten arxius amb les següents extensions: %{types}.'
78
+ empty: El document està buit
79
+ invalid_json: El document no és un JSON vàlid
78
80
  activerecord:
79
81
  models:
80
82
  decidim/assembly:
@@ -121,7 +123,7 @@ ca-IT:
121
123
  new:
122
124
  copy: Còpia
123
125
  select: Selecciona quines dades vols duplicar
124
- title: Assemblea duplicada
126
+ title: Duplicar assemblea
125
127
  assembly_imports:
126
128
  create:
127
129
  error: Hi ha hagut un problema important aquesta assemblea.
@@ -267,6 +269,7 @@ ca-IT:
267
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}'
268
270
  assembly_imports:
269
271
  form:
272
+ document_legend: Afegir un document
270
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}'
271
274
  assembly_members:
272
275
  form:
@@ -276,9 +279,14 @@ ca-IT:
276
279
  content_blocks:
277
280
  highlighted_assemblies:
278
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}).
279
286
  new_import:
280
287
  accepted_types:
281
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).
282
290
  assemblies:
283
291
  description:
284
292
  area_name: Àrea
@@ -75,6 +75,8 @@ ca:
75
75
  attributes:
76
76
  document:
77
77
  allowed_file_content_types: 'Tipus de document no vàlid. Només s''accepten arxius amb les següents extensions: %{types}.'
78
+ empty: El document està buit
79
+ invalid_json: El document no és un JSON vàlid
78
80
  activerecord:
79
81
  models:
80
82
  decidim/assembly:
@@ -121,7 +123,7 @@ ca:
121
123
  new:
122
124
  copy: Còpia
123
125
  select: Selecciona quines dades vols duplicar
124
- title: Assemblea duplicada
126
+ title: Duplicar assemblea
125
127
  assembly_imports:
126
128
  create:
127
129
  error: Hi ha hagut un problema important aquesta assemblea.
@@ -267,6 +269,7 @@ ca:
267
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}'
268
270
  assembly_imports:
269
271
  form:
272
+ document_legend: Afegir un document
270
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}'
271
274
  assembly_members:
272
275
  form:
@@ -276,9 +279,14 @@ ca:
276
279
  content_blocks:
277
280
  highlighted_assemblies:
278
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}).
279
286
  new_import:
280
287
  accepted_types:
281
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).
282
290
  assemblies:
283
291
  description:
284
292
  area_name: Àrea
@@ -75,6 +75,8 @@ cs:
75
75
  attributes:
76
76
  document:
77
77
  allowed_file_content_types: 'Neplatný typ dokumentu. Jsou povoleny pouze soubory s následujícími příponami: %{types}.'
78
+ empty: Dokument je prázdný
79
+ invalid_json: Dokument není platný JSON
78
80
  activerecord:
79
81
  models:
80
82
  decidim/assembly:
@@ -225,9 +227,11 @@ cs:
225
227
  export: "%{user_name} exportoval shromáždění %{resource_name}"
226
228
  import: "%{user_name} importoval shromáždění %{resource_name}"
227
229
  publish: "%{user_name} publikoval %{resource_name} shromáždění"
230
+ publish_all_members: "%{user_name} zveřejnil všechny členy shromáždění %{resource_name}"
228
231
  restore: "%{user_name} obnovil shromáždění %{resource_name}"
229
232
  soft_delete: "%{user_name} přesunul do koše shromáždění %{resource_name}"
230
233
  unpublish: "%{user_name} odebral %{resource_name} shromáždění"
234
+ unpublish_all_members: "%{user_name} zneveřejnil všechny členy shromáždění %{resource_name}"
231
235
  update: "%{user_name} aktualizoval shromáždění %{resource_name}"
232
236
  assembly_member:
233
237
  create: "%{user_name} vytvořil %{resource_name} člena ve shromáždění %{space_name}"
@@ -271,6 +275,7 @@ cs:
271
275
  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
276
  assembly_imports:
273
277
  form:
278
+ document_legend: Přidat dokument
274
279
  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
280
  assembly_members:
276
281
  form:
@@ -280,9 +285,14 @@ cs:
280
285
  content_blocks:
281
286
  highlighted_assemblies:
282
287
  max_results: Maximální množství prvků, které chcete zobrazit
288
+ imports:
289
+ attachment_error: Přílohu "%{title}" nelze importovat (%{error}).
290
+ banner_image_error: Obrázek banneru nelze importovat (%{error}).
291
+ hero_image_error: Obrázek hrdiny nelze importovat (%{error}).
283
292
  new_import:
284
293
  accepted_types:
285
294
  json: JSON
295
+ 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
296
  assemblies:
287
297
  description:
288
298
  area_name: Oblast
@@ -105,8 +105,6 @@ de:
105
105
  public: Öffentlich
106
106
  published: Veröffentlicht
107
107
  unpublished: Nicht veröffentlicht
108
- manage_trash:
109
- title: Gelöschte Gremien
110
108
  new:
111
109
  create: Erstellen
112
110
  title: Neues Gremium
@@ -121,7 +119,6 @@ de:
121
119
  new:
122
120
  copy: Kopieren
123
121
  select: Wählen Sie, welche Daten Sie duplizieren möchten
124
- title: Dupliziertes Gremium
125
122
  assembly_imports:
126
123
  create:
127
124
  error: Beim Importieren dieses Gremiums ist ein Fehler aufgetreten.
@@ -129,7 +126,6 @@ de:
129
126
  new:
130
127
  import: Importieren
131
128
  select: Wählen Sie aus, welche Daten Sie importieren möchten
132
- title: Gremium importieren
133
129
  assembly_publications:
134
130
  create:
135
131
  error: Beim Veröffentlichen dieses Gremiums ist ein Fehler aufgetreten.
@@ -144,13 +140,12 @@ de:
144
140
  destroy:
145
141
  success: Benutzer wurde erfolgreich von dieser Assembly entfernt.
146
142
  edit:
147
- title: Gremienadmin aktualisieren
148
143
  update: Aktualisieren
149
144
  index:
150
145
  assembly_admins_title: Assembly Benutzer
151
146
  new:
152
147
  create: Erstellen
153
- title: Neuer Gremienadmin
148
+ title: Neuer Gremium-Admin
154
149
  update:
155
150
  error: Bei einem Fehler ist ein Benutzer für diese Assembly aktualisiert worden.
156
151
  success: Der Benutzer wurde für diese Assembly erfolgreich aktualisiert.
@@ -208,7 +203,6 @@ de:
208
203
  assemblies: Alle Gremien
209
204
  titles:
210
205
  assemblies: Gremien
211
- assemblies_deleted: Gelöschte Gremien
212
206
  assemblies_types: Versammlungstypen
213
207
  tooltips:
214
208
  deleted_assemblies_info: Ein Gremium kann nur gelöscht werden, wenn der Status "Nicht veröffentlicht" ist.
@@ -267,6 +261,7 @@ de:
267
261
  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}'
268
262
  assembly_imports:
269
263
  form:
264
+ document_legend: Dokument hinzufügen
270
265
  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}'
271
266
  assembly_members:
272
267
  form:
@@ -114,7 +114,6 @@ el:
114
114
  new:
115
115
  import: Εισαγωγή
116
116
  select: Επιλέξετε ποιά δεδομένα θα θέλατε να εισάγετε
117
- title: Εισαγωγή συνέλευσης
118
117
  assembly_publications:
119
118
  create:
120
119
  error: Υπήρξε ένα πρόβλημα κατά τη δημοσίευση αυτής της συνέλευσης.
@@ -217,6 +216,9 @@ el:
217
216
  select_parent_assembly: Επιλέξτε «Γονική συνέλευση»
218
217
  social_handlers: Μέσα κοινωνικής δικτύωσης
219
218
  title: Γενικές πληροφορίες
219
+ assembly_imports:
220
+ form:
221
+ document_legend: Προσθήκη εγγράφου
220
222
  assembly_members:
221
223
  form:
222
224
  explanation: 'Οδηγίες για την εικόνα:'
@@ -75,6 +75,8 @@ en:
75
75
  attributes:
76
76
  document:
77
77
  allowed_file_content_types: 'Invalid document type. Only files with the following extensions are allowed: %{types}.'
78
+ empty: The document is empty
79
+ invalid_json: The document is not valid JSON
78
80
  activerecord:
79
81
  models:
80
82
  decidim/assembly:
@@ -267,6 +269,7 @@ en:
267
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}'
268
270
  assembly_imports:
269
271
  form:
272
+ document_legend: Add a document
270
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}'
271
274
  assembly_members:
272
275
  form:
@@ -276,9 +279,14 @@ en:
276
279
  content_blocks:
277
280
  highlighted_assemblies:
278
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}).
279
286
  new_import:
280
287
  accepted_types:
281
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).
282
290
  assemblies:
283
291
  description:
284
292
  area_name: Area
@@ -75,6 +75,8 @@ es-MX:
75
75
  attributes:
76
76
  document:
77
77
  allowed_file_content_types: 'Tipo de documento no válido. Sólo se permiten archivos con las siguientes extensiones: %{types}.'
78
+ empty: El documento está vacío
79
+ invalid_json: El documento no es JSON válido
78
80
  activerecord:
79
81
  models:
80
82
  decidim/assembly:
@@ -147,10 +149,10 @@ es-MX:
147
149
  title: Actualizar administradora de la asamblea
148
150
  update: Actualizar
149
151
  index:
150
- assembly_admins_title: Usuarios de la Asamblea
152
+ assembly_admins_title: Usuarios de la asamblea
151
153
  new:
152
154
  create: Crear
153
- title: Nueva administradora de la asamblea
155
+ title: Añadir administradora
154
156
  update:
155
157
  error: Ha habido un error al actualizar un usuario para esta asamblea.
156
158
  success: Usuario actualizado con éxito para esta asamblea.
@@ -267,6 +269,7 @@ es-MX:
267
269
  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}'
268
270
  assembly_imports:
269
271
  form:
272
+ document_legend: Añadir un documento
270
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}'
271
274
  assembly_members:
272
275
  form:
@@ -276,9 +279,14 @@ es-MX:
276
279
  content_blocks:
277
280
  highlighted_assemblies:
278
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}).
279
286
  new_import:
280
287
  accepted_types:
281
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).
282
290
  assemblies:
283
291
  description:
284
292
  area_name: Área