decidim-participatory_processes 0.22.0 → 0.23.0

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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/participatory_processes/process_m/footer.erb +3 -3
  3. data/app/cells/decidim/participatory_processes/process_m_cell.rb +19 -0
  4. data/app/commands/decidim/participatory_processes/admin/create_participatory_process_group.rb +3 -3
  5. data/app/commands/decidim/participatory_processes/admin/update_participatory_process.rb +10 -5
  6. data/app/controllers/decidim/participatory_processes/admin/participatory_process_exports_controller.rb +4 -0
  7. data/app/controllers/decidim/participatory_processes/admin/participatory_process_user_roles_controller.rb +2 -1
  8. data/app/controllers/decidim/participatory_processes/{participatory_process_widgets_controller.rb → widgets_controller.rb} +2 -2
  9. data/app/forms/decidim/participatory_processes/admin/participatory_process_form.rb +5 -6
  10. data/app/forms/decidim/participatory_processes/admin/participatory_process_group_form.rb +4 -1
  11. data/app/forms/decidim/participatory_processes/admin/participatory_process_import_form.rb +3 -0
  12. data/app/forms/decidim/participatory_processes/admin/participatory_process_user_role_form.rb +8 -2
  13. data/app/helpers/decidim/participatory_processes/participatory_process_helper.rb +11 -0
  14. data/app/models/decidim/participatory_process.rb +13 -1
  15. data/app/models/decidim/participatory_process_group.rb +5 -0
  16. data/app/models/decidim/participatory_process_step.rb +3 -0
  17. data/app/queries/decidim/participatory_processes/stats_participants_count.rb +6 -4
  18. data/app/serializers/decidim/participatory_processes/participatory_process_importer.rb +6 -4
  19. data/app/views/decidim/participatory_processes/participatory_processes/_promoted_process.html.erb +9 -4
  20. data/app/views/decidim/participatory_processes/participatory_processes/show.html.erb +1 -1
  21. data/app/views/layouts/decidim/participatory_process.html.erb +1 -0
  22. data/config/locales/am-ET.yml +1 -0
  23. data/config/locales/bg.yml +19 -0
  24. data/config/locales/ca.yml +4 -1
  25. data/config/locales/cs.yml +3 -0
  26. data/config/locales/da.yml +1 -0
  27. data/config/locales/en.yml +3 -0
  28. data/config/locales/eo.yml +1 -0
  29. data/config/locales/es-MX.yml +3 -0
  30. data/config/locales/es-PY.yml +3 -0
  31. data/config/locales/es.yml +5 -2
  32. data/config/locales/et.yml +1 -0
  33. data/config/locales/fr-CA.yml +3 -0
  34. data/config/locales/fr.yml +9 -6
  35. data/config/locales/hr.yml +1 -0
  36. data/config/locales/is.yml +215 -0
  37. data/config/locales/it.yml +2 -2
  38. data/config/locales/ja-JP.yml +122 -122
  39. data/config/locales/ja.yml +445 -0
  40. data/config/locales/ko-KR.yml +1 -0
  41. data/config/locales/ko.yml +1 -0
  42. data/config/locales/lt.yml +1 -0
  43. data/config/locales/{lv-LV.yml → lv.yml} +0 -0
  44. data/config/locales/mt.yml +1 -0
  45. data/config/locales/om-ET.yml +1 -0
  46. data/config/locales/pl.yml +152 -152
  47. data/config/locales/sl.yml +4 -0
  48. data/config/locales/so-SO.yml +1 -0
  49. data/config/locales/sv.yml +5 -2
  50. data/config/locales/ti-ER.yml +1 -0
  51. data/config/locales/vi-VN.yml +1 -0
  52. data/config/locales/vi.yml +1 -0
  53. data/config/locales/zh-CN.yml +445 -0
  54. data/config/locales/zh-TW.yml +1 -0
  55. data/db/migrate/20201006072346_fix_attachments_titles.rb +38 -0
  56. data/lib/decidim/participatory_processes/admin_engine.rb +1 -0
  57. data/lib/decidim/participatory_processes/engine.rb +1 -1
  58. data/lib/decidim/participatory_processes/participatory_space.rb +11 -11
  59. data/lib/decidim/participatory_processes/test/factories.rb +3 -3
  60. data/lib/decidim/participatory_processes/version.rb +1 -1
  61. metadata +32 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4c87d3748ed5ddda107431eccbde08c257a669a9b0b6b87010cfc6dd1f6f5450
4
- data.tar.gz: 5a984b08e37fb702a0f8cc425189782e7acc298fe0f933d02b68c2f171ec9106
3
+ metadata.gz: faabe7f59e3cc5a0625d6a45979797b88f4cc246636eb815c0a88128679a750d
4
+ data.tar.gz: ef172c49e6002b52e0c56e457c76c68243fffbbef389b65493dc2b6c59b8f84e
5
5
  SHA512:
6
- metadata.gz: 04cb2351dd62f27e32155fe620953c7524216925686bef5be09d6fe30bfdebcdc12d45a79e577f414438c06cee0bc0a7f8396976386058bc2f40a21e5e21baa5
7
- data.tar.gz: 30dbc6a09f4f3f5c5f417b0a1c9be50c4bca044b415aea17364dd9623bd86f4c188635528e87f74a9d4ed97a0cb8a0f8142eed1706415f3264118d9237585eb7
6
+ metadata.gz: 3897d23fe32bec47ff1e0fc9e7901b22b7c2ff9fda14261ede73b8b599f6f48e193fa5293108b7bee55137c9c7720a57808379586c5d1e37b6c06f5aaa7c56b9
7
+ data.tar.gz: 27e519bfd6047e7bd91c71a5b7e2c0ec077becaa0e38a8c607844126077c01d5c50334e996c973db0c66074368e03400581d4d29eee36c23d629b5dd612ba6b7
@@ -6,9 +6,9 @@
6
6
  <div class="text-ellipsis"><strong><%= step_title %></strong></div>
7
7
  </div>
8
8
  <% end %>
9
- <%= link_to(resource_path, class: "card__button button button--sc small") do %>
10
- <span class="show-for-sr"><%= t(model.cta_button_text_key_accessible, resource_name: title, scope: "layouts.decidim.participatory_processes.participatory_process") %></span>
11
- <%= t(model.cta_button_text_key, scope: "layouts.decidim.participatory_processes.participatory_process") %>
9
+ <%= link_to(step_cta_path, class: "card__button button button--sc small") do %>
10
+ <span class="show-for-sr"><%= step_cta_text %></span>
11
+ <%= step_cta_text %>
12
12
  <% end %>
13
13
  </div>
14
14
  </div>
@@ -6,6 +6,7 @@ module Decidim
6
6
  # for an given instance of a Process
7
7
  class ProcessMCell < Decidim::CardMCell
8
8
  include Decidim::SanitizeHelper
9
+ include Decidim::TranslationsHelper
9
10
 
10
11
  private
11
12
 
@@ -39,6 +40,24 @@ module Decidim
39
40
  model.hero_image.url
40
41
  end
41
42
 
43
+ def step_cta_text
44
+ if translated_in_current_locale?(model.active_step&.cta_text)
45
+ translated_attribute(model.active_step.cta_text)
46
+ else
47
+ t(model.cta_button_text_key_accessible, resource_name: title, scope: "layouts.decidim.participatory_processes.participatory_process")
48
+ end
49
+ end
50
+
51
+ def step_cta_path
52
+ if model.active_step&.cta_path.present?
53
+ path, params = resource_path.split("?")
54
+
55
+ "#{path}/#{model.active_step.cta_path}" + (params.present? ? "?#{params}" : "")
56
+ else
57
+ resource_path
58
+ end
59
+ end
60
+
42
61
  def step_title
43
62
  translated_attribute model.active_step.title
44
63
  end
@@ -45,11 +45,11 @@ module Decidim
45
45
  form.current_user
46
46
  ) do
47
47
  ParticipatoryProcessGroup.create(
48
+ organization: form.current_organization,
48
49
  name: form.name,
49
50
  description: form.description,
50
- hero_image: form.hero_image,
51
- participatory_processes: participatory_processes,
52
- organization: form.current_organization
51
+ hero_image: form.hero_image, # Keep after organization
52
+ participatory_processes: participatory_processes
53
53
  )
54
54
  end
55
55
  end
@@ -57,10 +57,6 @@ module Decidim
57
57
  subtitle: form.subtitle,
58
58
  slug: form.slug,
59
59
  hashtag: form.hashtag,
60
- hero_image: form.hero_image,
61
- remove_hero_image: form.remove_hero_image,
62
- banner_image: form.banner_image,
63
- remove_banner_image: form.remove_banner_image,
64
60
  promoted: form.promoted,
65
61
  description: form.description,
66
62
  short_description: form.short_description,
@@ -81,7 +77,16 @@ module Decidim
81
77
  show_metrics: form.show_metrics,
82
78
  show_statistics: form.show_statistics,
83
79
  announcement: form.announcement
84
- }
80
+ }.merge(uploader_attributes)
81
+ end
82
+
83
+ def uploader_attributes
84
+ {
85
+ hero_image: form.hero_image,
86
+ remove_hero_image: form.remove_hero_image,
87
+ banner_image: form.banner_image,
88
+ remove_banner_image: form.remove_banner_image
89
+ }.delete_if { |_k, val| val.is_a?(Decidim::ApplicationUploader) }
85
90
  end
86
91
 
87
92
  def related_processes
@@ -11,6 +11,10 @@ module Decidim
11
11
  current_participatory_process
12
12
  end
13
13
 
14
+ def manifest_name
15
+ current_participatory_process.manifest.name.to_s
16
+ end
17
+
14
18
  def after_export_path
15
19
  participatory_processes_path
16
20
  end
@@ -25,12 +25,13 @@ module Decidim
25
25
  CreateParticipatoryProcessAdmin.call(@form, current_user, current_participatory_process) do
26
26
  on(:ok) do
27
27
  flash[:notice] = I18n.t("participatory_process_user_roles.create.success", scope: "decidim.admin")
28
+ redirect_to participatory_process_user_roles_path(current_participatory_process)
28
29
  end
29
30
 
30
31
  on(:invalid) do
31
32
  flash[:alert] = I18n.t("participatory_process_user_roles.create.error", scope: "decidim.admin")
33
+ render :new
32
34
  end
33
- redirect_to participatory_process_user_roles_path(current_participatory_process)
34
35
  end
35
36
  end
36
37
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Decidim
4
4
  module ParticipatoryProcesses
5
- class ParticipatoryProcessWidgetsController < Decidim::WidgetsController
5
+ class WidgetsController < Decidim::WidgetsController
6
6
  helper Decidim::SanitizeHelper
7
7
 
8
8
  private
@@ -20,7 +20,7 @@ module Decidim
20
20
  end
21
21
 
22
22
  def iframe_url
23
- @iframe_url ||= participatory_process_participatory_process_widget_url(model)
23
+ @iframe_url ||= participatory_process_widget_url(model)
24
24
  end
25
25
  end
26
26
  end
@@ -8,6 +8,7 @@ module Decidim
8
8
  #
9
9
  class ParticipatoryProcessForm < Form
10
10
  include TranslatableAttributes
11
+ include Decidim::HasUploadValidations
11
12
 
12
13
  mimic :participatory_process
13
14
 
@@ -54,12 +55,10 @@ module Decidim
54
55
 
55
56
  validates :title, :subtitle, :description, :short_description, translatable_presence: true
56
57
 
57
- validates :banner_image,
58
- file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } },
59
- file_content_type: { allow: ["image/jpeg", "image/png"] }
60
- validates :hero_image,
61
- file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } },
62
- file_content_type: { allow: ["image/jpeg", "image/png"] }
58
+ validates :banner_image, passthru: { to: Decidim::ParticipatoryProcess }
59
+ validates :hero_image, passthru: { to: Decidim::ParticipatoryProcess }
60
+
61
+ alias organization current_organization
63
62
 
64
63
  def map_model(model)
65
64
  self.scope_id = model.decidim_scope_id
@@ -8,6 +8,7 @@ module Decidim
8
8
  #
9
9
  class ParticipatoryProcessGroupForm < Form
10
10
  include TranslatableAttributes
11
+ include Decidim::HasUploadValidations
11
12
 
12
13
  translatable_attribute :name, String
13
14
  translatable_attribute :description, String
@@ -20,7 +21,9 @@ module Decidim
20
21
 
21
22
  validates :name, :description, translatable_presence: true
22
23
 
23
- validates :hero_image, file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } }, file_content_type: { allow: ["image/jpeg", "image/png"] }
24
+ validates :hero_image, passthru: { to: Decidim::ParticipatoryProcessGroup }
25
+
26
+ alias organization current_organization
24
27
  end
25
28
  end
26
29
  end
@@ -13,6 +13,9 @@ module Decidim
13
13
  # Accepted mime types
14
14
  # keys: are used for dynamic help text on admin form.
15
15
  # values: are used to validate the file format of imported document.
16
+ #
17
+ # WARNING: consider adding/removing the relative translation key at
18
+ # decidim.participatory_processes.admin.new_import.accepted_types when modifying this hash
16
19
  ACCEPTED_TYPES = {
17
20
  json: JSON_MIME_TYPE
18
21
  }.freeze
@@ -13,10 +13,12 @@ module Decidim
13
13
  attribute :email, String
14
14
  attribute :role, String
15
15
 
16
- validates :email, :role, presence: true
17
- validates :name, presence: true
16
+ validates :name, :email, :role, presence: true
18
17
  validates :role, inclusion: { in: Decidim::ParticipatoryProcessUserRole::ROLES }
19
18
 
19
+ validates :name, format: { with: UserBaseEntity::REGEXP_NAME }
20
+ validate :admin_uniqueness
21
+
20
22
  def roles
21
23
  Decidim::ParticipatoryProcessUserRole::ROLES.map do |role|
22
24
  [
@@ -25,6 +27,10 @@ module Decidim
25
27
  ]
26
28
  end
27
29
  end
30
+
31
+ def admin_uniqueness
32
+ errors.add(:email, :taken) if context && context.current_organization && context.current_organization.admins.where(email: email).exists?
33
+ end
28
34
  end
29
35
  end
30
36
  end
@@ -21,6 +21,17 @@ module Decidim
21
21
  dates = [participatory_process_step.start_date, participatory_process_step.end_date]
22
22
  dates.map { |date| date ? localize(date.to_date, format: :default) : "?" }.join(" - ")
23
23
  end
24
+
25
+ # Public: Returns the path for the participatory process cta button
26
+ #
27
+ # Returns a String with path.
28
+ def participatory_process_cta_path(process)
29
+ return participatory_process_path(process) if process.active_step&.cta_path.blank?
30
+
31
+ path, params = participatory_process_path(process).split("?")
32
+
33
+ "#{path}/#{process.active_step.cta_path}" + (params.present? ? "?#{params}" : "")
34
+ end
24
35
  end
25
36
  end
26
37
  end
@@ -11,7 +11,7 @@ module Decidim
11
11
  include Decidim::HasAttachmentCollections
12
12
  include Decidim::Participable
13
13
  include Decidim::Publicable
14
- include Decidim::Scopable
14
+ include Decidim::ScopableParticipatorySpace
15
15
  include Decidim::Followable
16
16
  include Decidim::HasReference
17
17
  include Decidim::Traceable
@@ -19,6 +19,11 @@ module Decidim
19
19
  include Decidim::Loggable
20
20
  include Decidim::ParticipatorySpaceResourceable
21
21
  include Decidim::Searchable
22
+ include Decidim::HasUploadValidations
23
+ include Decidim::TranslatableResource
24
+
25
+ translatable_fields :title, :subtitle, :short_description, :description, :developer_group, :meta_scope, :local_area,
26
+ :target, :participatory_scope, :participatory_structure, :announcement
22
27
 
23
28
  belongs_to :organization,
24
29
  foreign_key: "decidim_organization_id",
@@ -61,7 +66,10 @@ module Decidim
61
66
  validates :slug, uniqueness: { scope: :organization }
62
67
  validates :slug, presence: true, format: { with: Decidim::ParticipatoryProcess.slug_format }
63
68
 
69
+ validates_upload :hero_image
64
70
  mount_uploader :hero_image, Decidim::HeroImageUploader
71
+
72
+ validates_upload :banner_image
65
73
  mount_uploader :banner_image, Decidim::BannerImageUploader
66
74
 
67
75
  scope :past, -> { where(arel_table[:end_date].lt(Date.current)) }
@@ -160,6 +168,10 @@ module Decidim
160
168
  roles.where(role: role_name)
161
169
  end
162
170
 
171
+ def attachment_context
172
+ :admin
173
+ end
174
+
163
175
  # Allow ransacker to search for a key in a hstore column (`title`.`en`)
164
176
  ransacker :title do |parent|
165
177
  Arel::Nodes::InfixOperation.new("->>", parent.table[:title], Arel::Nodes.build_quoted(I18n.locale.to_s))
@@ -4,6 +4,10 @@ module Decidim
4
4
  class ParticipatoryProcessGroup < ApplicationRecord
5
5
  include Decidim::Resourceable
6
6
  include Decidim::Traceable
7
+ include Decidim::HasUploadValidations
8
+ include Decidim::TranslatableResource
9
+
10
+ translatable_fields :name, :description
7
11
 
8
12
  has_many :participatory_processes,
9
13
  foreign_key: "decidim_participatory_process_group_id",
@@ -15,6 +19,7 @@ module Decidim
15
19
  foreign_key: "decidim_organization_id",
16
20
  class_name: "Decidim::Organization"
17
21
 
22
+ validates_upload :hero_image
18
23
  mount_uploader :hero_image, Decidim::HeroImageUploader
19
24
 
20
25
  def self.log_presenter_class_for(_log)
@@ -5,9 +5,12 @@ module Decidim
5
5
  # components that will show up in the depending on what step is currently
6
6
  # active.
7
7
  class ParticipatoryProcessStep < ApplicationRecord
8
+ include Decidim::TranslatableResource
8
9
  include Traceable
9
10
  include Loggable
10
11
 
12
+ translatable_fields :title, :description, :cta_text
13
+
11
14
  belongs_to :participatory_process, foreign_key: "decidim_participatory_process_id", class_name: "Decidim::ParticipatoryProcess"
12
15
  has_one :organization, through: :participatory_process
13
16
 
@@ -76,10 +76,12 @@ module Decidim
76
76
  end
77
77
 
78
78
  def project_supports_query
79
- Decidim::Budgets::Order
80
- .where(component: space_components)
81
- .pluck(:decidim_user_id)
82
- .uniq
79
+ Decidim::Budgets::Order.joins(budget: [:component])
80
+ .where(budget: {
81
+ decidim_components: { id: space_components.pluck(:id) }
82
+ })
83
+ .pluck(:decidim_user_id)
84
+ .uniq
83
85
  end
84
86
 
85
87
  def survey_answer_query
@@ -122,11 +122,11 @@ module Decidim
122
122
  attachment = Attachment.new(
123
123
  title: file["title"],
124
124
  description: file["description"],
125
- file: file_tmp,
126
- file_size: file_tmp.size,
127
125
  content_type: file_tmp.content_type,
128
126
  attached_to: @imported_process,
129
- weight: file["weight"]
127
+ weight: file["weight"],
128
+ file: file_tmp, # Define attached_to before this
129
+ file_size: file_tmp.size
130
130
  )
131
131
  attachment.create_attachment_collection(file["attachment_collection"])
132
132
  attachment.save!
@@ -169,7 +169,9 @@ module Decidim
169
169
 
170
170
  accepted = ["image", "application/pdf"]
171
171
  url = URI.parse(url)
172
- Net::HTTP.start(url.host, url.port) do |http|
172
+ http_connection = Net::HTTP.new(url.host, url.port)
173
+ http_connection.use_ssl = true if url.scheme == "https"
174
+ http_connection.start do |http|
173
175
  return http.head(url.request_uri)["Content-Type"].start_with?(*accepted)
174
176
  end
175
177
  rescue StandardError
@@ -3,7 +3,7 @@
3
3
  <div class="columns mediumlarge-8 large-6 card--process__column">
4
4
  <div class="card__content">
5
5
  <%= link_to participatory_process_path(promoted_process), class: "card__link" do %>
6
- <h2 class="card__title"><%= decidim_html_escape(translated_attribute(promoted_process.title)) %></h2>
6
+ <h2 class="card__title"><%= decidim_html_escape(translated_attribute(promoted_process.title)).html_safe %></h2>
7
7
  <% end %>
8
8
  <%= decidim_sanitize html_truncate(translated_attribute(promoted_process.short_description), length: 630, separator: "...") %>
9
9
  <%= link_to participatory_process_path(promoted_process), class: "button small hollow card__button" do %>
@@ -17,9 +17,14 @@
17
17
  style="background-image:url(<%= promoted_process.hero_image.url %>)">
18
18
  <div class="card__content row collapse">
19
19
  <div class="large-6 large-offset-6 columns">
20
- <%= link_to participatory_process_path(promoted_process), class: "button expanded button--sc" do %>
21
- <span class="show-for-sr"><%= t(promoted_process.cta_button_text_key_accessible, resource_name: translated_attribute(promoted_process.title), scope: "layouts.decidim.participatory_processes.promoted_process") %></span>
22
- <span aria-hidden="true"><%= t(promoted_process.cta_button_text_key, scope: "layouts.decidim.participatory_processes.promoted_process") %></span>
20
+ <%= link_to participatory_process_cta_path(promoted_process), class: "button expanded button--sc" do %>
21
+ <% if translated_in_current_locale?(promoted_process.active_step&.cta_text) %>
22
+ <span class="show-for-sr"><%= translated_attribute(promoted_process.active_step.cta_text) %></span>
23
+ <span aria-hidden="true"><%= translated_attribute(promoted_process.active_step.cta_text) %></span>
24
+ <% else %>
25
+ <span class="show-for-sr"><%= t(promoted_process.cta_button_text_key_accessible, resource_name: translated_attribute(promoted_process.title), scope: "layouts.decidim.participatory_processes.promoted_process") %></span>
26
+ <span aria-hidden="true"><%= t(promoted_process.cta_button_text_key, scope: "layouts.decidim.participatory_processes.promoted_process") %></span>
27
+ <% end %>
23
28
  <% if promoted_process.active_step %>
24
29
  <span class="button__info">
25
30
  <%= t("participatory_processes.promoted_process.active_step", scope: "layouts.decidim") %> <%= translated_attribute promoted_process.active_step.title %>
@@ -138,7 +138,7 @@
138
138
  </div>
139
139
  <%= resource_reference(current_participatory_space) %>
140
140
  <%= render partial: "decidim/shared/share_modal" %>
141
- <%= embed_modal_for participatory_process_participatory_process_widget_url(current_participatory_space, format: :js) %>
141
+ <%= embed_modal_for participatory_process_widget_url(current_participatory_space, format: :js) %>
142
142
  </div>
143
143
  </div>
144
144
 
@@ -7,6 +7,7 @@
7
7
 
8
8
  <%= render "layouts/decidim/application" do %>
9
9
  <%= render partial: "layouts/decidim/process_header" %>
10
+ <%= cell "decidim/translation_bar", current_organization %>
10
11
  <div class="wrapper">
11
12
  <%= yield %>
12
13
  </div>
@@ -0,0 +1 @@
1
+ am:
@@ -0,0 +1,19 @@
1
+ bg:
2
+ activemodel:
3
+ attributes:
4
+ participatory_process:
5
+ announcement: Обявление
6
+ area_id: Район
7
+ banner_image: Банер изображение
8
+ copy_categories: Копирай категории
9
+ copy_components: Копирай компоненти
10
+ copy_steps: Копирай стъпки
11
+ decidim_area_id: Район
12
+ description: Описание
13
+ developer_group: Група за популяризиране
14
+ domain: Домейн
15
+ end_date: Крайна дата
16
+ hashtag: Хаштаг
17
+ hero_image: Изображение за начална страница
18
+ local_area: Район на организацията
19
+ meta_scope: Метаданни сфера
@@ -270,7 +270,7 @@ ca:
270
270
  events:
271
271
  participatory_process:
272
272
  role_assigned:
273
- email_intro: T'han assignat el rol de %{role} a la procés participatiu "%{resource_title}".
273
+ email_intro: T'han assignat el rol de %{role} al procés participatiu "%{resource_title}".
274
274
  email_outro: Reps aquesta notificació perquè se t'ha assignat el rol de %{role} a l procés participatiu "%{resource_title}".
275
275
  email_subject: Se t'ha assignat el rol de %{role} a "%{resource_title}".
276
276
  notification_title: Se t'ha assignat el rol de %{role} al procés participatiu <a href="%{resource_url}">%{resource_title}</a>.
@@ -315,6 +315,9 @@ ca:
315
315
  content_blocks:
316
316
  highlighted_processes:
317
317
  max_results: Quantitat màxima d'elements que es mostraran
318
+ new_import:
319
+ accepted_types:
320
+ json: JSON
318
321
  participatory_process_copies:
319
322
  form:
320
323
  slug_help: 'Els noms curts d''URL s''utilitzen per generar els 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}'