decidim-participatory_processes 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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/app/commands/decidim/participatory_processes/admin/import_participatory_process.rb +4 -2
  3. data/app/controllers/decidim/participatory_processes/admin/participatory_process_imports_controller.rb +2 -1
  4. data/app/forms/decidim/participatory_processes/admin/participatory_process_import_form.rb +11 -0
  5. data/app/models/decidim/participatory_process_step.rb +3 -1
  6. data/app/serializers/decidim/participatory_processes/participatory_process_importer.rb +76 -13
  7. data/app/views/decidim/participatory_processes/admin/participatory_process_imports/_form.html.erb +6 -3
  8. data/app/views/decidim/participatory_processes/admin/participatory_process_steps/index.html.erb +1 -1
  9. data/app/views/decidim/participatory_processes/participatory_processes/show.html.erb +1 -1
  10. data/app/views/layouts/decidim/admin/participatory_process_group.html.erb +2 -11
  11. data/config/locales/ar.yml +0 -7
  12. data/config/locales/bg.yml +1 -13
  13. data/config/locales/bs-BA.yml +0 -5
  14. data/config/locales/ca-IT.yml +13 -7
  15. data/config/locales/ca.yml +13 -7
  16. data/config/locales/cs.yml +12 -16
  17. data/config/locales/de.yml +1 -15
  18. data/config/locales/el.yml +1 -12
  19. data/config/locales/en.yml +8 -2
  20. data/config/locales/es-MX.yml +14 -8
  21. data/config/locales/es-PY.yml +14 -8
  22. data/config/locales/es.yml +12 -6
  23. data/config/locales/eu.yml +22 -16
  24. data/config/locales/fi-plain.yml +8 -15
  25. data/config/locales/fi.yml +8 -15
  26. data/config/locales/fr-CA.yml +13 -11
  27. data/config/locales/fr.yml +13 -11
  28. data/config/locales/ga-IE.yml +1 -2
  29. data/config/locales/gl.yml +1 -10
  30. data/config/locales/hu.yml +1 -12
  31. data/config/locales/id-ID.yml +0 -6
  32. data/config/locales/is-IS.yml +0 -3
  33. data/config/locales/it.yml +2 -13
  34. data/config/locales/ja.yml +10 -4
  35. data/config/locales/lb.yml +0 -10
  36. data/config/locales/lt.yml +1 -12
  37. data/config/locales/lv.yml +0 -9
  38. data/config/locales/nl.yml +3 -15
  39. data/config/locales/no.yml +0 -12
  40. data/config/locales/pl.yml +1 -13
  41. data/config/locales/pt-BR.yml +8 -9
  42. data/config/locales/pt.yml +1 -13
  43. data/config/locales/ro-RO.yml +2 -12
  44. data/config/locales/ru.yml +0 -6
  45. data/config/locales/sk.yml +1 -10
  46. data/config/locales/sr-CS.yml +0 -5
  47. data/config/locales/sv.yml +25 -22
  48. data/config/locales/tr-TR.yml +0 -13
  49. data/config/locales/uk.yml +0 -6
  50. data/config/locales/zh-CN.yml +0 -9
  51. data/config/locales/zh-TW.yml +3 -14
  52. data/lib/decidim/participatory_processes/participatory_space.rb +2 -2
  53. data/lib/decidim/participatory_processes/version.rb +1 -1
  54. metadata +10 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5ef2f1d575ae3f68eb98e375aff853fe3a3ff425659ecfa6db1cf7195b4d01eb
4
- data.tar.gz: bb6dbf5f4e1b3f4665cd715f1c1967427957cbb9faa3e4056bd1d310b01132ba
3
+ metadata.gz: 2e25c6f3710e646dd7b8c1c2723dec0b2fbd8fb8e62bbff8c3ec039084bdb773
4
+ data.tar.gz: 916fb8389e4cc47bfa1ef0e961eea14a62c0c13e681b4b9432197d6c6218f6be
5
5
  SHA512:
6
- metadata.gz: 329f1129454a5ac7aecbd68c5eb77e784a5432171e1e15c24ad3e59e3285a0e3fdca57044688c299d7935f621a069e84a763600bc835532d047d4f8cb5f06132
7
- data.tar.gz: 90ef65756c4a38598f405fbff9325d6f13c95b5d0b5403b4ddcfd4fb8b1e65317b468d6c4a9cdcc993d908411d879f3b0a0106e9cd4fa238a39b0f841e99ec57
6
+ metadata.gz: ca80251f05fd2029ebd4823751332fed0b33b28b4ad310fd28a2496acd10029568e3bc29dad380df3e919bb5cff7cbaed6e956d3a99d1b354fa2342eb5f86453
7
+ data.tar.gz: 74044fa25f48455e692bf5f1e5276f49b109ffa78c93419be6c5a0c6d6e11d58064d2aa8e760d07a2044b7531293471278e1d74fc74a2ecddfbeec9d15ce9f0f
@@ -29,7 +29,7 @@ module Decidim
29
29
  add_admins_as_followers(@imported_process)
30
30
  end
31
31
 
32
- broadcast(:ok, @imported_process)
32
+ broadcast(:ok, @imported_process, @warnings)
33
33
  end
34
34
 
35
35
  private
@@ -37,13 +37,15 @@ module Decidim
37
37
  attr_reader :form
38
38
 
39
39
  def import_participatory_process
40
- importer = Decidim::ParticipatoryProcesses::ParticipatoryProcessImporter.new(form.current_organization, current_user)
40
+ @warnings = []
41
41
  participatory_processes.each do |original_process|
42
+ importer = Decidim::ParticipatoryProcesses::ParticipatoryProcessImporter.new(form.current_organization, current_user)
42
43
  Decidim.traceability.perform_action!("import", Decidim::ParticipatoryProcess, current_user) do
43
44
  @imported_process = importer.import(original_process, current_user, title: form.title, slug: form.slug)
44
45
  importer.import_participatory_process_steps(original_process["participatory_process_steps"]) if form.import_steps?
45
46
  importer.import_folders_and_attachments(original_process["attachments"]) if form.import_attachments?
46
47
  importer.import_components(original_process["components"]) if form.import_components?
48
+ @warnings.concat(importer.warnings)
47
49
  @imported_process
48
50
  end
49
51
  end
@@ -18,8 +18,9 @@ module Decidim
18
18
  @form = form(ParticipatoryProcessImportForm).from_params(params)
19
19
 
20
20
  ImportParticipatoryProcess.call(@form) do
21
- on(:ok) do
21
+ on(:ok) do |_process, warnings|
22
22
  flash[:notice] = I18n.t("participatory_process_imports.create.success", scope: "decidim.admin")
23
+ flash[:warning] = warnings.join("<br>") if warnings.any?
23
24
  redirect_to participatory_processes_path
24
25
  end
25
26
 
@@ -30,12 +30,14 @@ module Decidim
30
30
  attribute :import_components, Boolean, default: true
31
31
  attribute :document, Decidim::Attributes::Blob
32
32
 
33
+ validates :document, presence: true
33
34
  validates :document, file_content_type: { allow: ACCEPTED_TYPES.values }
34
35
  validates :slug, presence: true, format: { with: Decidim::ParticipatoryProcess.slug_format }
35
36
  validates :title, translatable_presence: true
36
37
  validate :slug_uniqueness
37
38
 
38
39
  validate :document_type_must_be_valid, if: :document
40
+ validate :document_must_have_content, if: -> { document.present? && errors[:document].none? }
39
41
 
40
42
  def document_text
41
43
  @document_text ||= document&.download
@@ -75,6 +77,15 @@ module Decidim
75
77
 
76
78
  errors.add(:slug, :taken)
77
79
  end
80
+
81
+ def document_must_have_content
82
+ return if document_text.blank?
83
+
84
+ parsed = JSON.parse(document_text)
85
+ errors.add(:document, :empty) if parsed.is_a?(Array) && parsed.empty?
86
+ rescue JSON::ParserError
87
+ errors.add(:document, :invalid_json)
88
+ end
78
89
  end
79
90
  end
80
91
  end
@@ -9,9 +9,11 @@ module Decidim
9
9
  include Traceable
10
10
  include Loggable
11
11
 
12
+ delegate :can_participate?, to: :participatory_process
13
+
12
14
  translatable_fields :title, :description, :cta_text
13
15
 
14
- belongs_to :participatory_process, foreign_key: "decidim_participatory_process_id", class_name: "Decidim::ParticipatoryProcess"
16
+ belongs_to :participatory_process, foreign_key: "decidim_participatory_process_id", class_name: "Decidim::ParticipatoryProcess", touch: true
15
17
  has_one :organization, through: :participatory_process
16
18
 
17
19
  alias participatory_space participatory_process
@@ -4,9 +4,12 @@ module Decidim
4
4
  module ParticipatoryProcesses
5
5
  # A factory class to ensure we always create ParticipatoryProcesses the same way since it involves some logic.
6
6
  class ParticipatoryProcessImporter < 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 ParticipatoryProcess.
@@ -44,7 +47,7 @@ module Decidim
44
47
  private_space: attributes["private_space"],
45
48
  participatory_process_group: process_group
46
49
  )
47
- @imported_process.attached_uploader(:hero_image).remote_url = attributes["remote_hero_image_url"] if attributes["remote_hero_image_url"].present?
50
+ import_hero_image(attributes["remote_hero_image_url"])
48
51
 
49
52
  @imported_process.save!
50
53
  @imported_process
@@ -64,7 +67,7 @@ module Decidim
64
67
  organization: @organization
65
68
  )
66
69
 
67
- group.remote_hero_image_url = attributes["remote_hero_image_url"] if remote_file_exists?(attributes["remote_hero_image_url"])
70
+ import_group_hero_image(group, attributes["remote_hero_image_url"])
68
71
  group.save!
69
72
  group
70
73
  end
@@ -92,20 +95,37 @@ module Decidim
92
95
  return if attachments["files"].nil?
93
96
 
94
97
  attachments["files"].map do |file|
95
- next unless remote_file_exists?(file["remote_file_url"])
96
-
97
- file_tmp = URI.parse(file["remote_file_url"]).open
98
+ url = file["remote_file_url"]
99
+ next if url.blank?
100
+
101
+ error = remote_file_error(url)
102
+ if error.present?
103
+ @warnings << I18n.t(
104
+ "decidim.participatory_processes.admin.imports.attachment_error",
105
+ title: attachment_title(file),
106
+ error:
107
+ )
108
+ next
109
+ end
98
110
 
99
111
  Decidim.traceability.perform_action!("create", Attachment, @user) do
100
112
  attachment = Attachment.new(
101
113
  title: file["title"],
102
114
  description: file["description"],
103
- content_type: file_tmp.content_type,
104
115
  attached_to: @imported_process,
105
- weight: file["weight"],
106
- file: file_tmp, # Define attached_to before this
107
- file_size: file_tmp.size
116
+ weight: file["weight"]
108
117
  )
118
+ begin
119
+ attachment.attached_uploader(:file).remote_url = url
120
+ attachment.set_content_type_and_size
121
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
122
+ @warnings << I18n.t(
123
+ "decidim.participatory_processes.admin.imports.attachment_error",
124
+ title: attachment_title(file),
125
+ error: format_error(e)
126
+ )
127
+ next
128
+ end
109
129
  attachment.create_attachment_collection(file["attachment_collection"])
110
130
  attachment.save!
111
131
  attachment
@@ -149,7 +169,7 @@ module Decidim
149
169
  attachment_collection
150
170
  end
151
171
 
152
- def remote_file_exists?(url)
172
+ def remote_file_error(url)
153
173
  return if url.nil?
154
174
 
155
175
  accepted = ["image", "application/pdf"]
@@ -157,10 +177,53 @@ module Decidim
157
177
  http_connection = Net::HTTP.new(url.host, url.port)
158
178
  http_connection.use_ssl = true if url.scheme == "https"
159
179
  http_connection.start do |http|
160
- return http.head(url.request_uri)["Content-Type"].start_with?(*accepted)
180
+ response = http.head(url.request_uri)
181
+ content_type = response["Content-Type"]
182
+ next if response.is_a?(Net::HTTPSuccess) && content_type&.start_with?(*accepted)
183
+
184
+ message = response.message.presence || Rack::Utils::HTTP_STATUS_CODES[response.code.to_i]
185
+ message = message.presence || "Error"
186
+ next "#{response.code} #{message}"
161
187
  end
162
- rescue StandardError
163
- nil
188
+ rescue StandardError => e
189
+ format_error(e)
190
+ end
191
+
192
+ def attachment_title(file)
193
+ title = file["title"]
194
+ return "" if title.blank?
195
+
196
+ return title unless title.is_a?(Hash)
197
+
198
+ title.values.find(&:present?) || ""
199
+ end
200
+
201
+ def import_hero_image(url)
202
+ return if url.blank?
203
+
204
+ @imported_process.attached_uploader(:hero_image).remote_url = url
205
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
206
+ @warnings << I18n.t("decidim.participatory_processes.admin.imports.hero_image_error", error: format_error(e))
207
+ end
208
+
209
+ def import_group_hero_image(group, url)
210
+ return if url.blank?
211
+
212
+ group.attached_uploader(:hero_image).remote_url = url
213
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
214
+ @warnings << I18n.t("decidim.participatory_processes.admin.imports.hero_image_error", error: format_error(e))
215
+ end
216
+
217
+ def format_error(error)
218
+ return error.message unless error.respond_to?(:io) && error.io.respond_to?(:status)
219
+
220
+ status = error.io.status
221
+ return error.message if status.blank? || status.first.blank?
222
+
223
+ code = status[0]
224
+ message = status[1].presence || Rack::Utils::HTTP_STATUS_CODES[code.to_i]
225
+ message = message.presence || error.message
226
+ "#{code} #{message}"
164
227
  end
165
228
  end
166
229
  end
@@ -1,8 +1,12 @@
1
1
  <div class="form__wrapper">
2
2
  <div class="card pt-4" id="processes">
3
3
  <div class="card-section">
4
+ <div class="row column mb-4">
5
+ <%= cell("decidim/announcement", { body: t("decidim.participatory_processes.admin.new_import.help_html") }, callout_class: "info") %>
6
+ </div>
7
+
4
8
  <div class="row column">
5
- <%= form.translated :text_field, :title, autofocus: true %>
9
+ <%= form.translated :text_field, :title, autofocus: true, aria: { label: :title } %>
6
10
  </div>
7
11
 
8
12
  <div class="row column">
@@ -10,7 +14,7 @@
10
14
  </div>
11
15
 
12
16
  <div class="row column">
13
- <%= form.upload :document, required: true, label: t(".document_legend"), 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
19
 
16
20
  <div class="card-divider">
@@ -32,7 +36,6 @@
32
36
  </div>
33
37
  </div>
34
38
 
35
- </div>
36
39
  </div>
37
40
  </div>
38
41
  </div>
@@ -24,7 +24,7 @@
24
24
  <tr data-id="<%= step.id %>">
25
25
  <td>
26
26
  <div class="flex items-center gap-x-2">
27
- <%= icon "drag-move-2-line" %>
27
+ <%= icon("draggable", class: "dragger hover:cursor-grab") %>
28
28
  <% if step.active? %>
29
29
  <span class="icon-active"></span>
30
30
  <% end %>
@@ -38,6 +38,6 @@
38
38
  </div>
39
39
 
40
40
  <section class="participatory-space__block-reference">
41
- <%= resource_reference(current_participatory_space) %>
41
+ <p><%= resource_reference(current_participatory_space) %></p>
42
42
  </section>
43
43
  </main>
@@ -1,3 +1,5 @@
1
+ <% add_secondary_root_menu(:admin_participatory_process_group_menu) %>
2
+
1
3
  <% content_for :breadcrumb_context_menu do %>
2
4
  <div class="process-title-content-breadcrumb-container-right">
3
5
  <% if allowed_to? :create, :process_group %>
@@ -8,17 +10,6 @@
8
10
  </span>
9
11
  <% end %>
10
12
  <% end %>
11
- <div class="inline-block relative">
12
- <%= button_tag id: "processes-menu-trigger", data: { component: "dropdown", target: "processes-dropdown-menu-settings" }, class: "dropdown__trigger button button__transparent" do %>
13
- <span>
14
- <%= t("menu.manage", scope: "decidim.admin") %>
15
- </span>
16
- <%= icon "arrow-down-s-line" %>
17
- <% end %>
18
- <div id="processes-dropdown-menu-settings" class="process-title-content-dropdown">
19
- <%= dropdown_menu(:admin_participatory_process_group_menu).render %>
20
- </div>
21
- </div>
22
13
  </div>
23
14
  <% end %>
24
15
 
@@ -138,7 +138,6 @@ ar:
138
138
  destroy:
139
139
  success: تم حذف مجموعة العملية التشاركية بنجاح.
140
140
  edit:
141
- title: تحرير مجموعة العملية
142
141
  update: تحديث
143
142
  new:
144
143
  create: إنشاء
@@ -149,7 +148,6 @@ ar:
149
148
  participatory_process_imports:
150
149
  new:
151
150
  import: استيراد
152
- title: استيراد مسار تشاركي
153
151
  participatory_process_publications:
154
152
  create:
155
153
  error: كانت هناك مشكلة في نشر هذه العملية التشاركية.
@@ -169,13 +167,11 @@ ar:
169
167
  destroy:
170
168
  success: تم حذف مرحلة العملية التشاركية بنجاح.
171
169
  edit:
172
- title: تحرير مرحلة العملية التشاركية
173
170
  update: تحديث
174
171
  index:
175
172
  steps_title: المراحل
176
173
  new:
177
174
  create: إنشاء
178
- title: مرحلة عملية تشاركية جديدة
179
175
  ordering:
180
176
  error: كانت هناك مشكلة في إعادة ترتيب هذه المراحل من العملية التشاركية.
181
177
  update:
@@ -189,8 +185,6 @@ ar:
189
185
  success: تمت إزالة المشرف بنجاح من هذه العملية التشاركية.
190
186
  edit:
191
187
  update: تحديث
192
- index:
193
- process_admins_title: مدراء العملية التشاركية
194
188
  new:
195
189
  create: إنشاء
196
190
  update:
@@ -208,7 +202,6 @@ ar:
208
202
  published: نشرت
209
203
  new:
210
204
  create: إنشاء
211
- title: عملية تشاركية جديدة
212
205
  update:
213
206
  error: حدثت مشكلة أثناء تحديث هذه العملية التشاركية.
214
207
  success: عملية المشاركة تم تحديثها بنجاح.
@@ -106,9 +106,6 @@ bg:
106
106
  label: По група на процеса
107
107
  menu:
108
108
  participatory_process_groups: Групи процеси
109
- participatory_process_groups_submenu:
110
- info: Информация
111
- landing_page: Целева страница
112
109
  participatory_processes: Процеси
113
110
  participatory_processes_submenu:
114
111
  attachment_collections: Папки
@@ -161,7 +158,6 @@ bg:
161
158
  destroy:
162
159
  success: Групата на процеса на участие беше изтрита успешно.
163
160
  edit:
164
- title: Редактиране на групата на процеса
165
161
  update: Актуализация
166
162
  new:
167
163
  create: Създаване
@@ -176,7 +172,6 @@ bg:
176
172
  new:
177
173
  import: Импортиране
178
174
  select: Изберете кои данни искате да импортирате
179
- title: Импортиране на процес на участие
180
175
  participatory_process_publications:
181
176
  create:
182
177
  error: Възникна проблем при публикуването на този процес на участие.
@@ -206,13 +201,11 @@ bg:
206
201
  Оставихме го тук, за да можете да мигрирате CTA, от които се нуждаете. Полетата <i>Call to action path</i> и
207
202
  <i>Текстът на подканващата фраза</i> ще бъде премахнат в следващата версия.
208
203
  title: CTA е остарял
209
- title: Редактиране на етап на процес на участие
210
204
  update: Актуализация
211
205
  index:
212
- steps_title: Етапи
206
+ steps_title: Фази
213
207
  new:
214
208
  create: Създаване
215
- title: Нов етап на процес на участие
216
209
  ordering:
217
210
  error: Възникна проблем при промяната на реда на тези етапи на процеса на участие.
218
211
  update:
@@ -225,13 +218,9 @@ bg:
225
218
  destroy:
226
219
  success: Администраторът успешно премахнат от този процес на участие.
227
220
  edit:
228
- title: Актуализиране на администратора на процеса на участие
229
221
  update: Актуализация
230
- index:
231
- process_admins_title: Администратори на процес на участие
232
222
  new:
233
223
  create: Създаване
234
- title: Нов администратор на процес на участие
235
224
  update:
236
225
  error: Възникна проблем при актуализирането на администратор за този процес на участие.
237
226
  success: Администраторът беше актуализиран успешно за този процес на участие.
@@ -248,7 +237,6 @@ bg:
248
237
  unpublished: Непубликувано
249
238
  new:
250
239
  create: Създаване
251
- title: Нов процес на участие
252
240
  update:
253
241
  error: Възникна проблем при актуализирането на този процес на участие.
254
242
  success: Процесът на участие беше актуализиран успешно.
@@ -6,11 +6,6 @@ bs:
6
6
  participatory_process_user_role:
7
7
  roles:
8
8
  valuator: Procenjivač
9
- participatory_process_user_roles:
10
- edit:
11
- title: Ažuriraj administratora participatornog procesa
12
- new:
13
- title: Novi administrator participatornog prostora
14
9
  events:
15
10
  participatory_process:
16
11
  role_assigned:
@@ -68,6 +68,8 @@ ca-IT:
68
68
  attributes:
69
69
  document:
70
70
  allowed_file_content_types: 'Tipus de document no vàlid. Només s''accepten arxius amb les següents extensions: %{types}'
71
+ empty: El document està buit
72
+ invalid_json: El document no és un JSON vàlid
71
73
  models:
72
74
  decidim/participatory_process_step_activated_event: Fase activada
73
75
  decidim/participatory_process_step_changed_event: Fase modificada
@@ -111,8 +113,8 @@ ca-IT:
111
113
  menu:
112
114
  participatory_process_groups: Grups de processos
113
115
  participatory_process_groups_submenu:
114
- info: Informació
115
- landing_page: Pàgina d'inici
116
+ info: Quant a aquest grup de processos
117
+ landing_page: Disposició de la pàgina de destinació
116
118
  participatory_processes: Processos
117
119
  participatory_processes_submenu:
118
120
  attachment_collections: Carpetes
@@ -170,7 +172,7 @@ ca-IT:
170
172
  error: Hi ha hagut un error en eliminar el grup de processos participatius.
171
173
  success: El grup de processos participatius s'ha eliminat correctament.
172
174
  edit:
173
- title: Edita grup de procés
175
+ title: Editar el grup de procés
174
176
  update: Actualitza
175
177
  new:
176
178
  create: Crea
@@ -185,7 +187,7 @@ ca-IT:
185
187
  new:
186
188
  import: Importar
187
189
  select: Selecciona quines dades vols importar.
188
- title: Importar el procés participatiu
190
+ title: Importar un procés participatiu
189
191
  participatory_process_publications:
190
192
  create:
191
193
  error: S'ha produït un error en publicar aquest procés participatiu.
@@ -214,13 +216,13 @@ ca-IT:
214
216
  Ara això es fa a la <b>Página d'inici</b>, fent servir el bloc de contingut <b>Imatges principal i botó d'acció</b>.
215
217
  L'hem deixar aquí per a que migris els CTAs que necessitis. Els camps <i>Ruta del botó d'acció</i> i <i>Text del botó d'acció</i> s'eliminaran a la propera versió.
216
218
  title: CTA obsolet
217
- title: Edita fase de procés participatiu
219
+ title: Editar la fase de procés participatiu
218
220
  update: Actualitza
219
221
  index:
220
222
  steps_title: Fases del procés
221
223
  new:
222
224
  create: Crea
223
- title: Nova fase de procés participatiu
225
+ title: Nova fase del procés participatiu
224
226
  ordering:
225
227
  error: S'ha produït un error en la reordenació de les fases d'aquest procés participatiu.
226
228
  update:
@@ -233,7 +235,7 @@ ca-IT:
233
235
  destroy:
234
236
  success: L'administradora s'ha eliminat correctament d'aquest procés participatiu.
235
237
  edit:
236
- title: Actualitzar administradora de procés participatiu
238
+ title: Actualitzar l'administradora del procés participatiu
237
239
  update: Actualitza
238
240
  index:
239
241
  process_admins_title: Administradores del procés participatiu
@@ -426,9 +428,13 @@ ca-IT:
426
428
  all: Tots
427
429
  max_results: Quantitat màxima d'elements que es mostraran
428
430
  selection_criteria: Criteris de selecció
431
+ imports:
432
+ attachment_error: No s'ha pogut importar l'arxiu adjunt "%{title}" (%{error}).
433
+ hero_image_error: No s'ha pogut importar la imatge principal (%{error}).
429
434
  new_import:
430
435
  accepted_types:
431
436
  json: JSON
437
+ help_html: Aquesta funció d'importació et permet crear un nou procés participatiu a partir d'un fitxer JSON exportat. Pots exportar un procés participatiu d'una altra organització o de la mateixa organització. El procés participatiu importat inclourà la seva configuració, els components i els fitxers adjunts (si s'han seleccionat).
432
438
  participatory_process_copies:
433
439
  form:
434
440
  slug_help_html: 'Els noms curts d''URL s''utilitzen per generar les URL que apunten a aquest procés. Només accepta lletres, números i guions, i ha de començar amb una lletra. Exemple: %{url}'
@@ -68,6 +68,8 @@ ca:
68
68
  attributes:
69
69
  document:
70
70
  allowed_file_content_types: 'Tipus de document no vàlid. Només s''accepten arxius amb les següents extensions: %{types}'
71
+ empty: El document està buit
72
+ invalid_json: El document no és un JSON vàlid
71
73
  models:
72
74
  decidim/participatory_process_step_activated_event: Fase activada
73
75
  decidim/participatory_process_step_changed_event: Fase modificada
@@ -111,8 +113,8 @@ ca:
111
113
  menu:
112
114
  participatory_process_groups: Grups de processos
113
115
  participatory_process_groups_submenu:
114
- info: Informació
115
- landing_page: Pàgina d'inici
116
+ info: Quant a aquest grup de processos
117
+ landing_page: Disposició de la pàgina de destinació
116
118
  participatory_processes: Processos
117
119
  participatory_processes_submenu:
118
120
  attachment_collections: Carpetes
@@ -170,7 +172,7 @@ ca:
170
172
  error: Hi ha hagut un error en eliminar el grup de processos participatius.
171
173
  success: El grup de processos participatius s'ha eliminat correctament.
172
174
  edit:
173
- title: Edita grup de procés
175
+ title: Editar el grup de procés
174
176
  update: Actualitza
175
177
  new:
176
178
  create: Crea
@@ -185,7 +187,7 @@ ca:
185
187
  new:
186
188
  import: Importar
187
189
  select: Selecciona quines dades vols importar.
188
- title: Importar el procés participatiu
190
+ title: Importar un procés participatiu
189
191
  participatory_process_publications:
190
192
  create:
191
193
  error: S'ha produït un error en publicar aquest procés participatiu.
@@ -214,13 +216,13 @@ ca:
214
216
  Ara això es fa a la <b>Página d'inici</b>, fent servir el bloc de contingut <b>Imatges principal i botó d'acció</b>.
215
217
  L'hem deixar aquí per a que migris els CTAs que necessitis. Els camps <i>Ruta del botó d'acció</i> i <i>Text del botó d'acció</i> s'eliminaran a la propera versió.
216
218
  title: CTA obsolet
217
- title: Edita fase de procés participatiu
219
+ title: Editar la fase de procés participatiu
218
220
  update: Actualitza
219
221
  index:
220
222
  steps_title: Fases del procés
221
223
  new:
222
224
  create: Crea
223
- title: Nova fase de procés participatiu
225
+ title: Nova fase del procés participatiu
224
226
  ordering:
225
227
  error: S'ha produït un error en la reordenació de les fases d'aquest procés participatiu.
226
228
  update:
@@ -233,7 +235,7 @@ ca:
233
235
  destroy:
234
236
  success: L'administradora s'ha eliminat correctament d'aquest procés participatiu.
235
237
  edit:
236
- title: Actualitzar administradora de procés participatiu
238
+ title: Actualitzar l'administradora del procés participatiu
237
239
  update: Actualitza
238
240
  index:
239
241
  process_admins_title: Administradores del procés participatiu
@@ -426,9 +428,13 @@ ca:
426
428
  all: Tots
427
429
  max_results: Quantitat màxima d'elements que es mostraran
428
430
  selection_criteria: Criteris de selecció
431
+ imports:
432
+ attachment_error: No s'ha pogut importar l'arxiu adjunt "%{title}" (%{error}).
433
+ hero_image_error: No s'ha pogut importar la imatge principal (%{error}).
429
434
  new_import:
430
435
  accepted_types:
431
436
  json: JSON
437
+ help_html: Aquesta funció d'importació et permet crear un nou procés participatiu a partir d'un fitxer JSON exportat. Pots exportar un procés participatiu d'una altra organització o de la mateixa organització. El procés participatiu importat inclourà la seva configuració, els components i els fitxers adjunts (si s'han seleccionat).
432
438
  participatory_process_copies:
433
439
  form:
434
440
  slug_help_html: 'Els noms curts d''URL s''utilitzen per generar les URL que apunten a aquest procés. Només accepta lletres, números i guions, i ha de començar amb una lletra. Exemple: %{url}'