decidim-participatory_processes 0.22.0 → 0.23.0

Sign up to get free protection for your applications and to get access to all the features.
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}'