decidim-assemblies 0.31.1 → 0.31.3

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 (54) 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/packs/src/decidim/assemblies/controllers/assembly_admin/controller.js +0 -4
  7. data/app/serializers/decidim/assemblies/assembly_importer.rb +75 -12
  8. data/app/views/decidim/assemblies/admin/assemblies/index.js.erb +1 -1
  9. data/app/views/decidim/assemblies/admin/assembly_imports/_form.html.erb +20 -16
  10. data/app/views/decidim/assemblies/admin/assembly_imports/new.html.erb +1 -0
  11. data/app/views/decidim/assemblies/assemblies/show.html.erb +1 -1
  12. data/config/locales/ar.yml +3 -1
  13. data/config/locales/bg.yml +2 -3
  14. data/config/locales/ca-IT.yml +9 -1
  15. data/config/locales/ca.yml +9 -1
  16. data/config/locales/cs.yml +10 -0
  17. data/config/locales/de.yml +2 -7
  18. data/config/locales/el.yml +3 -1
  19. data/config/locales/en.yml +8 -0
  20. data/config/locales/es-MX.yml +11 -3
  21. data/config/locales/es-PY.yml +11 -3
  22. data/config/locales/es.yml +10 -2
  23. data/config/locales/eu.yml +9 -1
  24. data/config/locales/fi-plain.yml +8 -6
  25. data/config/locales/fi.yml +8 -6
  26. data/config/locales/fr-CA.yml +25 -2
  27. data/config/locales/fr.yml +25 -2
  28. data/config/locales/gl.yml +3 -1
  29. data/config/locales/he-IL.yml +0 -6
  30. data/config/locales/hu.yml +3 -2
  31. data/config/locales/is-IS.yml +1 -9
  32. data/config/locales/it.yml +1 -5
  33. data/config/locales/ja.yml +11 -3
  34. data/config/locales/ko.yml +3 -0
  35. data/config/locales/lb.yml +5 -1
  36. data/config/locales/lt.yml +3 -1
  37. data/config/locales/nl.yml +4 -2
  38. data/config/locales/no.yml +3 -1
  39. data/config/locales/pl.yml +1 -2
  40. data/config/locales/pt-BR.yml +3 -6
  41. data/config/locales/pt.yml +3 -7
  42. data/config/locales/ro-RO.yml +14 -11
  43. data/config/locales/ru.yml +1 -8
  44. data/config/locales/sk.yml +0 -1
  45. data/config/locales/sl.yml +6 -5
  46. data/config/locales/sq-AL.yml +2 -11
  47. data/config/locales/sv.yml +17 -14
  48. data/config/locales/tr-TR.yml +7 -2
  49. data/config/locales/uk.yml +1 -8
  50. data/config/locales/zh-CN.yml +3 -1
  51. data/config/locales/zh-TW.yml +4 -2
  52. data/lib/decidim/assemblies/participatory_space.rb +2 -2
  53. data/lib/decidim/assemblies/version.rb +1 -1
  54. metadata +12 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b320fa7b91823f714b240b0de5bf9f3dac31293b149ea2e31574797429d79ca6
4
- data.tar.gz: c4ba0946ea40ff93812c61a09e4e4c2b6449808df7508b0822e441f149c9c53c
3
+ metadata.gz: b390ecc1992cc0c80979a2dd3009efae463a452f3c051190409abb098ed060a9
4
+ data.tar.gz: 2f68bbb23efa90ea3bd940c7d8f28d4468703e699c406ddcb32eb2c3d64896ae
5
5
  SHA512:
6
- metadata.gz: ed4af03c00abc10f30b77b1764a7fab7fed3a719596e16796ff26c63f354b48c4562deec39f42e198fe7e2d292cf4326eebda9f5db1cb3c0f5edb53d637a8f98
7
- data.tar.gz: 56efcc236293b34b5f7ea79a87b6c3b23abb5d46e184bd8da5fdf587fd90b5ea3e4deba740a3685f807d971b2854d72cf41df98a72355d5d2ea80fe06f5226c2
6
+ metadata.gz: ab090584ef6a4dc05849df9c88daff436857b44241f712bc319fcc7e8a4eb77f7c3003f1524fe9495a8a9607bdcdf6a1fdaf3f82c80da9d51d516527ca1a553c
7
+ data.tar.gz: 7836b2a30013e7e032f8271d6c3935b43732c65aecbca6e3ff8f01f7dd3376769c4feac7620389bbed10e44ac99109da03ab479bb0c3afd283d968fa2aa897a2
@@ -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?
@@ -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) {
@@ -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,20 +72,37 @@ 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?
73
77
 
74
- file_tmp = URI.parse(file["remote_file_url"]).open
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
75
87
 
76
88
  Decidim.traceability.perform_action!("create", Attachment, @user) do
77
89
  attachment = Attachment.new(
78
90
  title: file["title"],
79
91
  description: file["description"],
80
- content_type: file_tmp.content_type,
81
92
  attached_to: @imported_assembly,
82
- weight: file["weight"],
83
- file: file_tmp, # Define attached_to before this
84
- file_size: file_tmp.size
93
+ weight: file["weight"]
85
94
  )
95
+ begin
96
+ attachment.attached_uploader(:file).remote_url = url
97
+ attachment.set_content_type_and_size
98
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
99
+ @warnings << I18n.t(
100
+ "decidim.assemblies.admin.imports.attachment_error",
101
+ title: attachment_title(file),
102
+ error: format_error(e)
103
+ )
104
+ next
105
+ end
86
106
  attachment.create_attachment_collection(file["attachment_collection"])
87
107
  attachment.save!
88
108
  attachment
@@ -121,7 +141,7 @@ module Decidim
121
141
  attachment_collection
122
142
  end
123
143
 
124
- def remote_file_exists?(url)
144
+ def remote_file_error(url)
125
145
  return if url.nil?
126
146
 
127
147
  accepted = ["image", "application/pdf"]
@@ -129,10 +149,53 @@ module Decidim
129
149
  http_connection = Net::HTTP.new(url.host, url.port)
130
150
  http_connection.use_ssl = true if url.scheme == "https"
131
151
  http_connection.start do |http|
132
- return http.head(url.request_uri)["Content-Type"].start_with?(*accepted)
152
+ response = http.head(url.request_uri)
153
+ content_type = response["Content-Type"]
154
+ next if response.is_a?(Net::HTTPSuccess) && content_type&.start_with?(*accepted)
155
+
156
+ message = response.message.presence || Rack::Utils::HTTP_STATUS_CODES[response.code.to_i]
157
+ message = message.presence || "Error"
158
+ next "#{response.code} #{message}"
133
159
  end
134
- rescue StandardError
135
- nil
160
+ rescue StandardError => e
161
+ format_error(e)
162
+ end
163
+
164
+ def attachment_title(file)
165
+ title = file["title"]
166
+ return "" if title.blank?
167
+
168
+ return title unless title.is_a?(Hash)
169
+
170
+ title.values.find(&:present?) || ""
171
+ end
172
+
173
+ def import_hero_image(url)
174
+ return if url.blank?
175
+
176
+ @imported_assembly.attached_uploader(:hero_image).remote_url = url
177
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
178
+ @warnings << I18n.t("decidim.assemblies.admin.imports.hero_image_error", error: format_error(e))
179
+ end
180
+
181
+ def import_banner_image(url)
182
+ return if url.blank?
183
+
184
+ @imported_assembly.attached_uploader(:banner_image).remote_url = url
185
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
186
+ @warnings << I18n.t("decidim.assemblies.admin.imports.banner_image_error", error: format_error(e))
187
+ end
188
+
189
+ def format_error(error)
190
+ return error.message unless error.respond_to?(:io) && error.io.respond_to?(:status)
191
+
192
+ status = error.io.status
193
+ return error.message if status.blank? || status.first.blank?
194
+
195
+ code = status[0]
196
+ message = status[1].presence || Rack::Utils::HTTP_STATUS_CODES[code.to_i]
197
+ message = message.presence || error.message
198
+ "#{code} #{message}"
136
199
  end
137
200
  end
138
201
  end
@@ -6,7 +6,7 @@ $('[data-assembly-id="<%= parent_assembly_id %>"]').after(
6
6
  );
7
7
 
8
8
  // Dispatch the `ajax:loaded` event with the newly inserted element
9
- const insertedElement = $('[data-assembly-id="<%= parent_assembly_id %>"]').next()[0];
9
+ var insertedElement = $('[data-assembly-id="<%= parent_assembly_id %>"]').next()[0];
10
10
  document.dispatchEvent(new CustomEvent("ajax:loaded", { detail: insertedElement }));
11
11
 
12
12
  var component = new window.Decidim.AdminAssembliesListComponent();
@@ -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>
@@ -114,7 +114,6 @@ ar:
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 @@ ar:
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: 'إرشادات للصورة:'
@@ -94,7 +94,7 @@ bg:
94
94
  update: Актуализация
95
95
  index:
96
96
  private: Частни
97
- public: Публични
97
+ public: Публично
98
98
  published: Публикувано
99
99
  unpublished: Непубликувано
100
100
  new:
@@ -110,7 +110,6 @@ bg:
110
110
  new:
111
111
  import: Импортиране
112
112
  select: Изберете кои данни искате да импортирате
113
- title: Импортиране на събрание
114
113
  assembly_publications:
115
114
  create:
116
115
  error: Възникна проблем при публикуването на това събрание.
@@ -125,7 +124,6 @@ bg:
125
124
  destroy:
126
125
  success: Администраторът беше премахнат успешно от това събрание.
127
126
  edit:
128
- title: Актуализиране на администратора на събранието
129
127
  update: Актуализация
130
128
  index:
131
129
  assembly_admins_title: Администратори на събранието
@@ -229,6 +227,7 @@ bg:
229
227
  visibility: Видимост
230
228
  assembly_imports:
231
229
  form:
230
+ document_legend: Добавяне на документ
232
231
  slug_help_html: 'Използват се променливи полета в URL адреса, за да се генерират URL адреси, които водят към това събрание. Допуска се използването само на букви, цифри и тирета и адресът трябва да започва с буква. Пример: %{url}'
233
232
  assembly_members:
234
233
  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:
@@ -120,7 +122,7 @@ ca-IT:
120
122
  new:
121
123
  duplicate: Duplicar
122
124
  select: Selecciona quines dades vols duplicar
123
- title: Assemblea duplicada
125
+ title: Duplicar assemblea
124
126
  assembly_imports:
125
127
  create:
126
128
  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
@@ -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:
@@ -120,7 +122,7 @@ ca:
120
122
  new:
121
123
  duplicate: Duplicar
122
124
  select: Selecciona quines dades vols duplicar
123
- title: Assemblea duplicada
125
+ title: Duplicar assemblea
124
126
  assembly_imports:
125
127
  create:
126
128
  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
@@ -74,6 +74,8 @@ cs:
74
74
  attributes:
75
75
  document:
76
76
  allowed_file_content_types: 'Neplatný typ dokumentu. Jsou povoleny pouze soubory s následujícími příponami: %{types}.'
77
+ empty: Dokument je prázdný
78
+ invalid_json: Dokument není platný JSON
77
79
  activerecord:
78
80
  models:
79
81
  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
@@ -104,8 +104,6 @@ de:
104
104
  public: Öffentlich
105
105
  published: Veröffentlicht
106
106
  unpublished: Nicht veröffentlicht
107
- manage_trash:
108
- title: Gelöschte Gremien
109
107
  new:
110
108
  create: Erstellen
111
109
  title: Neues Gremium
@@ -120,7 +118,6 @@ de:
120
118
  new:
121
119
  duplicate: Duplizieren
122
120
  select: Wählen Sie, welche Daten Sie duplizieren möchten
123
- title: Dupliziertes Gremium
124
121
  assembly_imports:
125
122
  create:
126
123
  error: Beim Importieren dieses Gremiums ist ein Fehler aufgetreten.
@@ -128,7 +125,6 @@ de:
128
125
  new:
129
126
  import: Importieren
130
127
  select: Wählen Sie aus, welche Daten Sie importieren möchten
131
- title: Gremium importieren
132
128
  assembly_publications:
133
129
  create:
134
130
  error: Beim Veröffentlichen dieses Gremiums ist ein Fehler aufgetreten.
@@ -143,13 +139,12 @@ de:
143
139
  destroy:
144
140
  success: Benutzer wurde erfolgreich von dieser Assembly entfernt.
145
141
  edit:
146
- title: Gremienadmin aktualisieren
147
142
  update: Aktualisieren
148
143
  index:
149
144
  assembly_admins_title: Assembly Benutzer
150
145
  new:
151
146
  create: Erstellen
152
- title: Neuer Gremienadmin
147
+ title: Neuer Gremium-Admin
153
148
  update:
154
149
  error: Bei einem Fehler ist ein Benutzer für diese Assembly aktualisiert worden.
155
150
  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 sie müssen 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:
@@ -107,7 +107,6 @@ el:
107
107
  new:
108
108
  import: Εισαγωγή
109
109
  select: Επιλέξετε ποιά δεδομένα θα θέλατε να εισάγετε
110
- title: Εισαγωγή συνέλευσης
111
110
  assembly_publications:
112
111
  create:
113
112
  error: Υπήρξε ένα πρόβλημα κατά τη δημοσίευση αυτής της συνέλευσης.
@@ -209,6 +208,9 @@ el:
209
208
  select_parent_assembly: Επιλέξτε «Γονική συνέλευση»
210
209
  social_handlers: Μέσα κοινωνικής δικτύωσης
211
210
  title: Γενικές πληροφορίες
211
+ assembly_imports:
212
+ form:
213
+ document_legend: Προσθήκη εγγράφου
212
214
  assembly_members:
213
215
  form:
214
216
  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:
@@ -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
@@ -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:
@@ -146,10 +148,10 @@ es-MX:
146
148
  title: Actualizar administradora de la asamblea
147
149
  update: Actualizar
148
150
  index:
149
- assembly_admins_title: Usuarios de la Asamblea
151
+ assembly_admins_title: Usuarios de la asamblea
150
152
  new:
151
153
  create: Crear
152
- title: Nueva administradora de la asamblea
154
+ title: Añadir administradora
153
155
  update:
154
156
  error: Ha habido un error al actualizar un usuario para esta asamblea.
155
157
  success: Usuario actualizado con éxito para esta asamblea.
@@ -170,7 +172,7 @@ es-MX:
170
172
  attachments: Archivos adjuntos
171
173
  components: Componentes
172
174
  info: Acerca de esta asamblea
173
- landing_page: Disposición de la página de aterrizaje
175
+ landing_page: Disposición de la página de inicio
174
176
  moderations: Moderaciones
175
177
  private_users: Miembros
176
178
  see_assembly: Ver la 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. Solo 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