decidim-participatory_processes 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/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 -12
  13. data/config/locales/bs-BA.yml +0 -6
  14. data/config/locales/ca-IT.yml +12 -6
  15. data/config/locales/ca.yml +12 -6
  16. data/config/locales/cs.yml +18 -15
  17. data/config/locales/de.yml +0 -14
  18. data/config/locales/el.yml +1 -11
  19. data/config/locales/en.yml +7 -1
  20. data/config/locales/es-MX.yml +15 -9
  21. data/config/locales/es-PY.yml +15 -9
  22. data/config/locales/es.yml +13 -7
  23. data/config/locales/eu.yml +21 -15
  24. data/config/locales/fi-plain.yml +7 -14
  25. data/config/locales/fi.yml +7 -14
  26. data/config/locales/fr-CA.yml +12 -10
  27. data/config/locales/fr.yml +12 -10
  28. data/config/locales/ga-IE.yml +1 -2
  29. data/config/locales/gl.yml +1 -9
  30. data/config/locales/hu.yml +1 -11
  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 -12
  34. data/config/locales/ja.yml +9 -3
  35. data/config/locales/lb.yml +0 -9
  36. data/config/locales/lt.yml +1 -11
  37. data/config/locales/lv.yml +0 -9
  38. data/config/locales/nl.yml +2 -13
  39. data/config/locales/no.yml +0 -11
  40. data/config/locales/pl.yml +1 -12
  41. data/config/locales/pt-BR.yml +7 -8
  42. data/config/locales/pt.yml +1 -12
  43. data/config/locales/ro-RO.yml +2 -11
  44. data/config/locales/ru.yml +0 -6
  45. data/config/locales/sk.yml +1 -10
  46. data/config/locales/sr-CS.yml +0 -6
  47. data/config/locales/sv.yml +234 -44
  48. data/config/locales/tr-TR.yml +0 -12
  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 -13
  52. data/lib/decidim/participatory_processes/participatory_space.rb +2 -2
  53. data/lib/decidim/participatory_processes/version.rb +1 -1
  54. metadata +16 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9f77c394790a10232a3e5f8bc7f033a711933f6e316a35313f190d9de3435d28
4
- data.tar.gz: 69891e0aca851db40a8bf558a2327d5567a89ca984594d237698c9e700ed1956
3
+ metadata.gz: 3a7aad4fa28b53aa35cfe06f58dfd59052a1e6a9474d7c39c3a1a658fe7c1483
4
+ data.tar.gz: 2180d0923275741be1c04255971c82d33f0e5e387dd1bfe75b9f0fd82a9d899f
5
5
  SHA512:
6
- metadata.gz: 49f5edb0088e0b504ee21a8ff96801340b3d98c8d8bfb7ea695547848dcebbef408a7c5dea688b2a3f82407459bf2d4363318a541aac160f33453d88a37d1425
7
- data.tar.gz: f7d23748d5e79ddd81368fd2f54b2b26a14f249fa02e687c474b04c3700df45c483282c890fab1d180cfda15d58d91f160f7ff1262771a014af3dc4473150b4b
6
+ metadata.gz: 7cb3f501e500106bdbf4d7ae41f95829a312c763cae7f16930f9acb1a6142ac4128b4ce9bbcb41016e94d9d9a64428dda74448a2766cda1c0c9a0b65cac4c3bc
7
+ data.tar.gz: 7a7b206aaf34f6083530414c20eb3fc8cbe43bf06b6c18b8cb40ccc0ca6f7e49b78cf20fae20be08425d4f0c7cafec73b89bdaf73f52970533e1d5954ba5cc05
@@ -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.
@@ -43,7 +46,7 @@ module Decidim
43
46
  private_space: attributes["private_space"],
44
47
  participatory_process_group: process_group
45
48
  )
46
- @imported_process.attached_uploader(:hero_image).remote_url = attributes["remote_hero_image_url"] if attributes["remote_hero_image_url"].present?
49
+ import_hero_image(attributes["remote_hero_image_url"])
47
50
 
48
51
  @imported_process.save!
49
52
  @imported_process
@@ -63,7 +66,7 @@ module Decidim
63
66
  organization: @organization
64
67
  )
65
68
 
66
- group.remote_hero_image_url = attributes["remote_hero_image_url"] if remote_file_exists?(attributes["remote_hero_image_url"])
69
+ import_group_hero_image(group, attributes["remote_hero_image_url"])
67
70
  group.save!
68
71
  group
69
72
  end
@@ -91,20 +94,37 @@ module Decidim
91
94
  return if attachments["files"].nil?
92
95
 
93
96
  attachments["files"].map do |file|
94
- next unless remote_file_exists?(file["remote_file_url"])
95
-
96
- file_tmp = URI.parse(file["remote_file_url"]).open
97
+ url = file["remote_file_url"]
98
+ next if url.blank?
99
+
100
+ error = remote_file_error(url)
101
+ if error.present?
102
+ @warnings << I18n.t(
103
+ "decidim.participatory_processes.admin.imports.attachment_error",
104
+ title: attachment_title(file),
105
+ error:
106
+ )
107
+ next
108
+ end
97
109
 
98
110
  Decidim.traceability.perform_action!("create", Attachment, @user) do
99
111
  attachment = Attachment.new(
100
112
  title: file["title"],
101
113
  description: file["description"],
102
- content_type: file_tmp.content_type,
103
114
  attached_to: @imported_process,
104
- weight: file["weight"],
105
- file: file_tmp, # Define attached_to before this
106
- file_size: file_tmp.size
115
+ weight: file["weight"]
107
116
  )
117
+ begin
118
+ attachment.attached_uploader(:file).remote_url = url
119
+ attachment.set_content_type_and_size
120
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
121
+ @warnings << I18n.t(
122
+ "decidim.participatory_processes.admin.imports.attachment_error",
123
+ title: attachment_title(file),
124
+ error: format_error(e)
125
+ )
126
+ next
127
+ end
108
128
  attachment.create_attachment_collection(file["attachment_collection"])
109
129
  attachment.save!
110
130
  attachment
@@ -148,7 +168,7 @@ module Decidim
148
168
  attachment_collection
149
169
  end
150
170
 
151
- def remote_file_exists?(url)
171
+ def remote_file_error(url)
152
172
  return if url.nil?
153
173
 
154
174
  accepted = ["image", "application/pdf"]
@@ -156,10 +176,53 @@ module Decidim
156
176
  http_connection = Net::HTTP.new(url.host, url.port)
157
177
  http_connection.use_ssl = true if url.scheme == "https"
158
178
  http_connection.start do |http|
159
- return http.head(url.request_uri)["Content-Type"].start_with?(*accepted)
179
+ response = http.head(url.request_uri)
180
+ content_type = response["Content-Type"]
181
+ next if response.is_a?(Net::HTTPSuccess) && content_type&.start_with?(*accepted)
182
+
183
+ message = response.message.presence || Rack::Utils::HTTP_STATUS_CODES[response.code.to_i]
184
+ message = message.presence || "Error"
185
+ next "#{response.code} #{message}"
160
186
  end
161
- rescue StandardError
162
- nil
187
+ rescue StandardError => e
188
+ format_error(e)
189
+ end
190
+
191
+ def attachment_title(file)
192
+ title = file["title"]
193
+ return "" if title.blank?
194
+
195
+ return title unless title.is_a?(Hash)
196
+
197
+ title.values.find(&:present?) || ""
198
+ end
199
+
200
+ def import_hero_image(url)
201
+ return if url.blank?
202
+
203
+ @imported_process.attached_uploader(:hero_image).remote_url = url
204
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
205
+ @warnings << I18n.t("decidim.participatory_processes.admin.imports.hero_image_error", error: format_error(e))
206
+ end
207
+
208
+ def import_group_hero_image(group, url)
209
+ return if url.blank?
210
+
211
+ group.attached_uploader(:hero_image).remote_url = url
212
+ rescue OpenURI::HTTPError, Errno::ENOENT, Errno::ECONNREFUSED, SocketError, Net::OpenTimeout, Net::ReadTimeout => e
213
+ @warnings << I18n.t("decidim.participatory_processes.admin.imports.hero_image_error", error: format_error(e))
214
+ end
215
+
216
+ def format_error(error)
217
+ return error.message unless error.respond_to?(:io) && error.io.respond_to?(:status)
218
+
219
+ status = error.io.status
220
+ return error.message if status.blank? || status.first.blank?
221
+
222
+ code = status[0]
223
+ message = status[1].presence || Rack::Utils::HTTP_STATUS_CODES[code.to_i]
224
+ message = message.presence || error.message
225
+ "#{code} #{message}"
163
226
  end
164
227
  end
165
228
  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 data-label="<%= t("models.participatory_process_step.fields.title", scope: "decidim.admin") %>">
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: { controller: "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
 
@@ -130,7 +130,6 @@ ar:
130
130
  destroy:
131
131
  success: تم حذف مجموعة العملية التشاركية بنجاح.
132
132
  edit:
133
- title: تحرير مجموعة العملية
134
133
  update: تحديث
135
134
  new:
136
135
  create: إنشاء
@@ -141,7 +140,6 @@ ar:
141
140
  participatory_process_imports:
142
141
  new:
143
142
  import: استيراد
144
- title: استيراد مسار تشاركي
145
143
  participatory_process_publications:
146
144
  create:
147
145
  error: كانت هناك مشكلة في نشر هذه العملية التشاركية.
@@ -161,13 +159,11 @@ ar:
161
159
  destroy:
162
160
  success: تم حذف مرحلة العملية التشاركية بنجاح.
163
161
  edit:
164
- title: تحرير مرحلة العملية التشاركية
165
162
  update: تحديث
166
163
  index:
167
164
  steps_title: المراحل
168
165
  new:
169
166
  create: إنشاء
170
- title: مرحلة عملية تشاركية جديدة
171
167
  ordering:
172
168
  error: كانت هناك مشكلة في إعادة ترتيب هذه المراحل من العملية التشاركية.
173
169
  update:
@@ -181,8 +177,6 @@ ar:
181
177
  success: تمت إزالة المشرف بنجاح من هذه العملية التشاركية.
182
178
  edit:
183
179
  update: تحديث
184
- index:
185
- process_admins_title: مدراء العملية التشاركية
186
180
  new:
187
181
  create: إنشاء
188
182
  update:
@@ -200,7 +194,6 @@ ar:
200
194
  published: نشرت
201
195
  new:
202
196
  create: إنشاء
203
- title: عملية تشاركية جديدة
204
197
  update:
205
198
  error: حدثت مشكلة أثناء تحديث هذه العملية التشاركية.
206
199
  success: عملية المشاركة تم تحديثها بنجاح.
@@ -99,8 +99,6 @@ bg:
99
99
  label: По група на процеса
100
100
  menu:
101
101
  participatory_process_groups: Групи процеси
102
- participatory_process_groups_submenu:
103
- info: Информация
104
102
  participatory_processes: Процеси
105
103
  participatory_processes_submenu:
106
104
  attachment_collections: Папки
@@ -148,7 +146,6 @@ bg:
148
146
  destroy:
149
147
  success: Групата на процеса на участие беше изтрита успешно.
150
148
  edit:
151
- title: Редактиране на групата на процеса
152
149
  update: Актуализация
153
150
  new:
154
151
  create: Създаване
@@ -163,7 +160,6 @@ bg:
163
160
  new:
164
161
  import: Импортиране
165
162
  select: Изберете кои данни искате да импортирате
166
- title: Импортиране на процес на участие
167
163
  participatory_process_publications:
168
164
  create:
169
165
  error: Възникна проблем при публикуването на този процес на участие.
@@ -193,13 +189,11 @@ bg:
193
189
  Оставихме го тук, за да можете да мигрирате CTA, от които се нуждаете. Полетата <i>Call to action path</i> и
194
190
  <i>Текстът на подканващата фраза</i> ще бъде премахнат в следващата версия.
195
191
  title: CTA е остарял
196
- title: Редактиране на етап на процес на участие
197
192
  update: Актуализация
198
193
  index:
199
- steps_title: Етапи
194
+ steps_title: Фази
200
195
  new:
201
196
  create: Създаване
202
- title: Нов етап на процес на участие
203
197
  ordering:
204
198
  error: Възникна проблем при промяната на реда на тези етапи на процеса на участие.
205
199
  update:
@@ -212,13 +206,9 @@ bg:
212
206
  destroy:
213
207
  success: Администраторът успешно премахнат от този процес на участие.
214
208
  edit:
215
- title: Актуализиране на администратора на процеса на участие
216
209
  update: Актуализация
217
- index:
218
- process_admins_title: Администратори на процес на участие
219
210
  new:
220
211
  create: Създаване
221
- title: Нов администратор на процес на участие
222
212
  update:
223
213
  error: Възникна проблем при актуализирането на администратор за този процес на участие.
224
214
  success: Администраторът беше актуализиран успешно за този процес на участие.
@@ -235,7 +225,6 @@ bg:
235
225
  unpublished: Непубликувано
236
226
  new:
237
227
  create: Създаване
238
- title: Нов процес на участие
239
228
  update:
240
229
  error: Възникна проблем при актуализирането на този процес на участие.
241
230
  success: Процесът на участие беше актуализиран успешно.
@@ -1,12 +1,6 @@
1
1
  ---
2
2
  bs:
3
3
  decidim:
4
- admin:
5
- participatory_process_user_roles:
6
- edit:
7
- title: Ažuriraj administratora participatornog procesa
8
- new:
9
- title: Novi administrator participatornog prostora
10
4
  events:
11
5
  participatory_process:
12
6
  role_assigned:
@@ -66,6 +66,8 @@ ca-IT:
66
66
  attributes:
67
67
  document:
68
68
  allowed_file_content_types: 'Tipus de document no vàlid. Només s''accepten arxius amb les següents extensions: %{types}'
69
+ empty: El document està buit
70
+ invalid_json: El document no és un JSON vàlid
69
71
  models:
70
72
  decidim/participatory_process_step_activated_event: Fase activada
71
73
  decidim/participatory_process_step_changed_event: Fase modificada
@@ -106,7 +108,7 @@ ca-IT:
106
108
  menu:
107
109
  participatory_process_groups: Grups de processos
108
110
  participatory_process_groups_submenu:
109
- info: Informació
111
+ info: Quant a aquest grup de processos
110
112
  landing_page: Disposició de la pàgina de destinació
111
113
  participatory_processes: Processos
112
114
  participatory_processes_submenu:
@@ -168,7 +170,7 @@ ca-IT:
168
170
  error: Hi ha hagut un error en eliminar el grup de processos participatius.
169
171
  success: El grup de processos participatius s'ha eliminat correctament.
170
172
  edit:
171
- title: Edita grup de procés
173
+ title: Editar el grup de procés
172
174
  update: Actualitza
173
175
  new:
174
176
  create: Crea
@@ -183,7 +185,7 @@ ca-IT:
183
185
  new:
184
186
  import: Importar
185
187
  select: Selecciona quines dades vols importar.
186
- title: Importar el procés participatiu
188
+ title: Importar un procés participatiu
187
189
  participatory_process_publications:
188
190
  create:
189
191
  error: S'ha produït un error en publicar aquest procés participatiu.
@@ -212,13 +214,13 @@ ca-IT:
212
214
  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>.
213
215
  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ó.
214
216
  title: CTA obsolet
215
- title: Edita fase de procés participatiu
217
+ title: Editar la fase de procés participatiu
216
218
  update: Actualitza
217
219
  index:
218
220
  steps_title: Fases del procés
219
221
  new:
220
222
  create: Crea
221
- title: Nova fase de procés participatiu
223
+ title: Nova fase del procés participatiu
222
224
  ordering:
223
225
  error: S'ha produït un error en la reordenació de les fases d'aquest procés participatiu.
224
226
  update:
@@ -231,7 +233,7 @@ ca-IT:
231
233
  destroy:
232
234
  success: L'administradora s'ha eliminat correctament d'aquest procés participatiu.
233
235
  edit:
234
- title: Actualitzar administradora de procés participatiu
236
+ title: Actualitzar l'administradora del procés participatiu
235
237
  update: Actualitza
236
238
  index:
237
239
  process_admins_title: Administradores del procés participatiu
@@ -494,9 +496,13 @@ ca-IT:
494
496
  all: Tots
495
497
  max_results: Quantitat màxima d'elements que es mostraran
496
498
  selection_criteria: Criteris de selecció
499
+ imports:
500
+ attachment_error: No s'ha pogut importar l'arxiu adjunt "%{title}" (%{error}).
501
+ hero_image_error: No s'ha pogut importar la imatge principal (%{error}).
497
502
  new_import:
498
503
  accepted_types:
499
504
  json: JSON
505
+ 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).
500
506
  participatory_process_duplicates:
501
507
  form:
502
508
  slug_help_html: 'Els segments 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}'
@@ -66,6 +66,8 @@ ca:
66
66
  attributes:
67
67
  document:
68
68
  allowed_file_content_types: 'Tipus de document no vàlid. Només s''accepten arxius amb les següents extensions: %{types}'
69
+ empty: El document està buit
70
+ invalid_json: El document no és un JSON vàlid
69
71
  models:
70
72
  decidim/participatory_process_step_activated_event: Fase activada
71
73
  decidim/participatory_process_step_changed_event: Fase modificada
@@ -106,7 +108,7 @@ ca:
106
108
  menu:
107
109
  participatory_process_groups: Grups de processos
108
110
  participatory_process_groups_submenu:
109
- info: Informació
111
+ info: Quant a aquest grup de processos
110
112
  landing_page: Disposició de la pàgina de destinació
111
113
  participatory_processes: Processos
112
114
  participatory_processes_submenu:
@@ -168,7 +170,7 @@ ca:
168
170
  error: Hi ha hagut un error en eliminar el grup de processos participatius.
169
171
  success: El grup de processos participatius s'ha eliminat correctament.
170
172
  edit:
171
- title: Edita grup de procés
173
+ title: Editar el grup de procés
172
174
  update: Actualitza
173
175
  new:
174
176
  create: Crea
@@ -183,7 +185,7 @@ ca:
183
185
  new:
184
186
  import: Importar
185
187
  select: Selecciona quines dades vols importar.
186
- title: Importar el procés participatiu
188
+ title: Importar un procés participatiu
187
189
  participatory_process_publications:
188
190
  create:
189
191
  error: S'ha produït un error en publicar aquest procés participatiu.
@@ -212,13 +214,13 @@ ca:
212
214
  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>.
213
215
  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ó.
214
216
  title: CTA obsolet
215
- title: Edita fase de procés participatiu
217
+ title: Editar la fase de procés participatiu
216
218
  update: Actualitza
217
219
  index:
218
220
  steps_title: Fases del procés
219
221
  new:
220
222
  create: Crea
221
- title: Nova fase de procés participatiu
223
+ title: Nova fase del procés participatiu
222
224
  ordering:
223
225
  error: S'ha produït un error en la reordenació de les fases d'aquest procés participatiu.
224
226
  update:
@@ -231,7 +233,7 @@ ca:
231
233
  destroy:
232
234
  success: L'administradora s'ha eliminat correctament d'aquest procés participatiu.
233
235
  edit:
234
- title: Actualitzar administradora de procés participatiu
236
+ title: Actualitzar l'administradora del procés participatiu
235
237
  update: Actualitza
236
238
  index:
237
239
  process_admins_title: Administradores del procés participatiu
@@ -494,9 +496,13 @@ ca:
494
496
  all: Tots
495
497
  max_results: Quantitat màxima d'elements que es mostraran
496
498
  selection_criteria: Criteris de selecció
499
+ imports:
500
+ attachment_error: No s'ha pogut importar l'arxiu adjunt "%{title}" (%{error}).
501
+ hero_image_error: No s'ha pogut importar la imatge principal (%{error}).
497
502
  new_import:
498
503
  accepted_types:
499
504
  json: JSON
505
+ 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).
500
506
  participatory_process_duplicates:
501
507
  form:
502
508
  slug_help_html: 'Els segments 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}'