decidim-decidim_awesome 0.11.1 → 0.11.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 107f5d454725a66c2a3a7658d9c841616a4556f634a6615c5f124ad2815c94b2
4
- data.tar.gz: cc18503da6d79d49787f40a6a6da9fe659d64c05183c599a30800a25a874c5b9
3
+ metadata.gz: 7ab22e9b6e3f198f00701fe777b94bfb01acf39a7f88daa4a10e86907f1b30ec
4
+ data.tar.gz: f05e18e3bf8236948d901fd8a68c25a70ad2ed9f97afe3201c88914dfa2b773f
5
5
  SHA512:
6
- metadata.gz: 7da76c3a55fac5f16814946e9de813e7e30f2f56523a62143b20ad52bf16863abfd5da3a79ac44c7a0aedffc4e9ddec232bed2732153474ac586cecac0acb302
7
- data.tar.gz: d5c566fe5297b253b6004ad23007fc22d7a47c5aa9a0a310de319799c2fdfced27cf1b0c0861e8c9341d041eeb556571c0d65b8ae16d56fcb6b16eafe30a7d54
6
+ metadata.gz: 15f9481a81de5aa0374a6c56c673b4bb372cdb0ddd3169743ecf0b3abe931e1dd50f90e63c76c462ccdb756367f3dd02418436b831f85d8d3b4f74e87545e643
7
+ data.tar.gz: 1ae626439a52e64a6a84869781fafd6f1ca8c9a3a28a8b9d33a16086931abb0b71ea9eb53b6029a6692a800a638af3ae2b3fad640c098434f7db2a32e2b59890
data/CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
1
  CHANGELOG
2
2
  =========
3
3
 
4
+ v0.11.2
5
+ -------
6
+
7
+ Compatibility:
8
+ - Decidim v0.28.x
9
+
10
+ Features:
11
+ - SQL vulnerability fix for admin accountability
12
+ - Private fields proposal draft update fix
13
+
4
14
  v0.11.1
5
15
  ------
6
16
 
@@ -8,36 +8,16 @@ module Decidim
8
8
  included do
9
9
  private
10
10
 
11
+ alias_method :decidim_original_cache_hash, :cache_hash
12
+
11
13
  def metadata_cell
12
14
  awesome_voting_manifest_for(resource&.component)&.proposal_metadata_cell.presence || "decidim/proposals/proposal_metadata"
13
15
  end
14
16
 
15
- # rubocop:disable Metrics/CyclomaticComplexity
16
- # rubocop:disable Metrics/PerceivedComplexity
17
17
  def cache_hash
18
- hash = []
19
- hash << I18n.locale.to_s
20
- hash << model.cache_key_with_version
21
- hash << model.proposal_votes_count
22
- hash << model.extra_fields&.reload&.vote_weight_totals
23
- hash << model.endorsements_count
24
- hash << model.comments_count
25
- hash << Digest::MD5.hexdigest(model.component.cache_key_with_version)
26
- hash << Digest::MD5.hexdigest(resource_image_path) if resource_image_path
27
- hash << render_space? ? 1 : 0
28
- if current_user
29
- hash << current_user.cache_key_with_version
30
- hash << current_user.follows?(model) ? 1 : 0
31
- end
32
- hash << model.follows_count
33
- hash << Digest::MD5.hexdigest(model.authors.map(&:cache_key_with_version).to_s)
34
- hash << (model.must_render_translation?(model.organization) ? 1 : 0) if model.respond_to?(:must_render_translation?)
35
- hash << model.component.participatory_space.active_step.id if model.component.participatory_space.try(:active_step)
36
-
37
- hash.join(Decidim.cache_key_separator)
18
+ extra_hash = model.extra_fields&.reload&.vote_weight_totals
19
+ "#{decidim_original_cache_hash}#{Decidim.cache_key_separator}#{extra_hash}"
38
20
  end
39
- # rubocop:enable Metrics/CyclomaticComplexity
40
- # rubocop:enable Metrics/PerceivedComplexity
41
21
  end
42
22
  end
43
23
  end
@@ -15,8 +15,8 @@ module Decidim
15
15
 
16
16
  alias_method :decidim_original_update_draft, :update_draft
17
17
 
18
- def update_proposal
19
- decidim_original_update_proposal
18
+ def update_draft
19
+ decidim_original_update_draft
20
20
  update_private_field!
21
21
  end
22
22
  end
@@ -13,10 +13,11 @@ module Decidim
13
13
  end
14
14
 
15
15
  def applied_filters_tags(i18n_ctx)
16
- if global? && params[:admin_role_type].present?
16
+ admin_role_type = PaperTrailVersion.safe_admin_role_type(params[:admin_role_type])
17
+ if global? && admin_role_type.present?
17
18
  content_tag(:span, class: "label secondary") do
18
19
  concat "#{i18n_filter_label(:admin_role_type, filterable_i18n_scope_from_ctx(i18n_ctx))}: "
19
- concat t("decidim.decidim_awesome.admin.admin_accountability.admin_roles.#{params[:admin_role_type]}", default: params[:admin_role_type])
20
+ concat t("decidim.decidim_awesome.admin.admin_accountability.admin_roles.#{admin_role_type}", default: admin_role_type)
20
21
  concat icon_link_to(
21
22
  "close-circle-line",
22
23
  url_for(export_params.except(:admin_role_type)),
@@ -14,6 +14,8 @@ module Decidim
14
14
 
15
15
  private
16
16
 
17
+ alias_method :decidim_original_reorder, :reorder
18
+
17
19
  # read order from session if available
18
20
  def order
19
21
  @order ||= detect_order(session[:order]) || default_order
@@ -31,38 +33,23 @@ module Decidim
31
33
  end
32
34
  end
33
35
 
34
- # rubocop:disable Metrics/CyclomaticComplexity
35
36
  def reorder(proposals)
37
+ title_by_locale = Arel.sql(proposals.sanitize_sql(["decidim_proposals_proposals.title->>? #{collation}", locale]))
38
+ title_by_machine_translation = Arel.sql(proposals.sanitize_sql(["decidim_proposals_proposals.title->'machine_translations'->>? #{collation}", locale]))
39
+ title_by_default_locale = Arel.sql(proposals.sanitize_sql(["decidim_proposals_proposals.title->>? #{collation}", default_locale]))
36
40
  case order
37
41
  when "az"
38
- proposals.order(Arel.sql("CONCAT(decidim_proposals_proposals.title->>'#{locale}',
39
- decidim_proposals_proposals.title->'machine_translations'->>'#{locale}',
40
- decidim_proposals_proposals.title->>'#{default_locale}') #{collation} ASC"))
42
+ proposals.order(title_by_locale => :asc, title_by_machine_translation => :asc, title_by_default_locale => :asc)
41
43
  when "za"
42
- proposals.order(Arel.sql("CONCAT(decidim_proposals_proposals.title->>'#{locale}',
43
- decidim_proposals_proposals.title->'machine_translations'->>'#{locale}',
44
- decidim_proposals_proposals.title->>'#{default_locale}') #{collation} DESC"))
44
+ proposals.order(title_by_locale => :desc, title_by_machine_translation => :desc, title_by_default_locale => :desc)
45
45
  when "supported_first"
46
46
  proposals.joins(my_votes_join).group(:id).order(Arel.sql("COUNT(decidim_proposals_proposal_votes.id) DESC"))
47
47
  when "supported_last"
48
48
  proposals.joins(my_votes_join).group(:id).order(Arel.sql("COUNT(decidim_proposals_proposal_votes.id) ASC"))
49
- when "most_commented"
50
- proposals.left_joins(:comments).group(:id).order(Arel.sql("COUNT(decidim_comments_comments.id) DESC"))
51
- when "most_endorsed"
52
- proposals.order(endorsements_count: :desc)
53
- when "most_followed"
54
- proposals.left_joins(:follows).group(:id).order(Arel.sql("COUNT(decidim_follows.id) DESC"))
55
- when "most_voted"
56
- proposals.order(proposal_votes_count: :desc)
57
- when "random"
58
- proposals.order_randomly(random_seed)
59
- when "recent"
60
- proposals.order(published_at: :desc)
61
- when "with_more_authors"
62
- proposals.order(coauthorships_count: :desc)
49
+ else
50
+ decidim_original_reorder(proposals)
63
51
  end
64
52
  end
65
- # rubocop:enable Metrics/CyclomaticComplexity
66
53
 
67
54
  def collation
68
55
  @collation ||= begin
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  class AdminAccountabilityController < DecidimAwesome::Admin::ApplicationController
7
7
  include NeedsAwesomeConfig
8
- include Decidim::DecidimAwesome::AdminAccountability::Admin::Filterable
8
+ include AdminAccountability::Admin::Filterable
9
9
 
10
10
  helper_method :admin_actions, :collection, :export_params, :global?, :global_users_missing_date
11
11
 
@@ -20,9 +20,9 @@ module Decidim
20
20
  def export
21
21
  filters = export_params[:q]
22
22
 
23
- Decidim::DecidimAwesome::ExportAdminActionsJob.perform_later(current_user,
24
- params[:format].to_s,
25
- admin_actions.ransack(filters).result.ids)
23
+ ExportAdminActionsJob.perform_later(current_user,
24
+ params[:format].to_s,
25
+ admin_actions.ransack(filters).result.ids)
26
26
 
27
27
  redirect_back fallback_location: decidim_admin_decidim_awesome.admin_accountability_path,
28
28
  notice: t("decidim.decidim_awesome.admin.admin_accountability.exports.notice")
@@ -39,11 +39,11 @@ module Decidim
39
39
  end
40
40
 
41
41
  def space_role_actions
42
- @space_role_actions ||= Decidim::DecidimAwesome::PaperTrailVersion.space_role_actions(current_organization)
42
+ @space_role_actions ||= PaperTrailVersion.space_role_actions(current_organization)
43
43
  end
44
44
 
45
45
  def admin_role_actions
46
- @admin_role_actions ||= Decidim::DecidimAwesome::PaperTrailVersion.in_organization(current_organization).admin_role_actions(params[:admin_role_type])
46
+ @admin_role_actions ||= PaperTrailVersion.in_organization(current_organization).admin_role_actions(PaperTrailVersion.safe_admin_role_type(params[:admin_role_type]))
47
47
  end
48
48
 
49
49
  def export_params
@@ -61,7 +61,7 @@ module Decidim
61
61
  return unless global?
62
62
 
63
63
  @global_users_missing_date ||= begin
64
- first_version = Decidim::DecidimAwesome::PaperTrailVersion.where(item_type: "Decidim::UserBaseEntity").last
64
+ first_version = PaperTrailVersion.where(item_type: "Decidim::UserBaseEntity").last
65
65
  first_user = Decidim::User.first
66
66
  first_version.created_at if first_user && first_version && (first_version.created_at > first_user.created_at + 1.second)
67
67
  end
@@ -64,7 +64,7 @@ module Decidim
64
64
  end
65
65
 
66
66
  def private_data_finder
67
- @private_data ||= PrivateDataFinder.new
67
+ @private_data_finder ||= PrivateDataFinder.new
68
68
  end
69
69
 
70
70
  def time_ago
@@ -9,6 +9,10 @@ module Decidim
9
9
  DecidimAwesome.participatory_space_roles.filter(&:safe_constantize)
10
10
  end
11
11
 
12
+ def self.safe_admin_role_type(admin_role)
13
+ Decidim.user_roles.find { |role| role == admin_role }
14
+ end
15
+
12
16
  scope :space_role_actions, lambda { |organization|
13
17
  role_changes = where(item_type: PaperTrailVersion.safe_user_roles, event: "create")
14
18
  user_ids_from_object_changes = role_changes.pluck(:object_changes).map { |change| change.match(/decidim_user_id:\n- ?\n- (\d+)/)[1].to_i }
@@ -33,7 +37,7 @@ module Decidim
33
37
  when "admin"
34
38
  base.where("object_changes LIKE '%\nadmin:\n- false\n- true%'")
35
39
  else
36
- base.where(Arel.sql("object_changes LIKE '%\nroles:\n- []\n- - #{filter}\n%'"))
40
+ base.where("object_changes LIKE ?", "%\nroles:\n- []\n- - #{filter}\n%")
37
41
  end
38
42
  end
39
43
 
@@ -1,4 +1,3 @@
1
- ---
2
1
  ca:
3
2
  activemodel:
4
3
  attributes:
@@ -19,6 +18,7 @@ ca:
19
18
  intergram_title_open: Títol del xat quan està obert
20
19
  intergram_use_floating_button: Si està marcat, el xat tancat és sempre un botó en lloc d'un text
21
20
  proposal_custom_fields: 'Camps personalitzats #%{id}'
21
+ proposal_private_custom_fields: 'Camps personalitzats #%{id}'
22
22
  scoped_admins: 'Grup d''administradores acotades #%{id}'
23
23
  scoped_styles: 'Personalització d''estils #%{id}'
24
24
  validate_body_max_caps_percent: Percentatge màxim de majúscules en el cos de la proposta
@@ -46,8 +46,6 @@ ca:
46
46
  target: Obre a
47
47
  url: URL
48
48
  visibility: Visibilitat
49
- proposal:
50
- proposal_custom_fields: Camps personalitzats
51
49
  decidim:
52
50
  admin:
53
51
  actions:
@@ -117,7 +115,7 @@ ca:
117
115
  default_sort_order_options:
118
116
  az: A-Z (Alfabètic)
119
117
  supported_first: Votades per mi primer
120
- supported_last: Votades últimes per mi
118
+ supported_last: Votades per mi últimes
121
119
  za: Z-A (ordre alfabètic invers)
122
120
  limit_pending_amendments: Permetre només una esmena pendent a cada proposta.
123
121
  sort_orders_enabled: Opcions d'ordenació actives
@@ -135,6 +133,7 @@ ca:
135
133
  za: Z-A (ordre alfabètic invers)
136
134
  decidim_awesome:
137
135
  admin:
136
+ actions: Accions
138
137
  admin_accountability:
139
138
  admin_roles:
140
139
  admin: Administradora de plataforma
@@ -189,7 +188,6 @@ ca:
189
188
  Sembla que aquesta instal·lació requereix migrar <strong>%{total}</strong> imatges al nou sistema.<br>
190
189
  Pots iniciar el procés ara i es durà a terme en segon pla.
191
190
  start_image_migrations: "\U0001F449 Iniciar el procés de migració ara"
192
- title: Anàlisi de compatibilitat amb el sistema
193
191
  config:
194
192
  caution: 'NOTA: Aquesta funció modifica en gran mesura alguns comportaments predeterminats que podrien provocar resultats inesperats. Utilitzeu-lo amb precaució!'
195
193
  constraints:
@@ -238,6 +236,12 @@ ca:
238
236
  proposal_custom_fields: Crea camps personalitzats per a propostes que només s'apliquin a determinades parts de la web pública (per fer-ho, utilitza l'editor de restriccions)
239
237
  proposal_custom_fields_example: Les dades son desades en un objecte XML fent servir atributs compatibles amb HTML (elements DL, DT, DD) que reemplacen el "cos" de la proposat normal.
240
238
  proposal_custom_fields_translations: "Les etiquetes, el text d'ajuda, els \"placeholders\" i els valors predeterminats poden utilitzar les traduccions personalitzades de l'aplicació.\nPer això, en comptes d'utilitzar un text literal, utilitzeu la clau i18n (ha de contenir almenys un punt).\nPer exemple:\n- \"activemodel.attributes.proposal.title\" en lloc de \"Títol\"\n- \"activemodel.attributes.proposal.address\" en lloc de \"Address\"\nO utilitzeu les vostres pròpies claus en combinació amb altres eines per definir traduccions (p. ex.: utilitzant el mòdul Term Customizer):\n - \"myapp.custom_fields.bio\" en lloc de \"Biografia\""
239
+ proposal_private_custom_fields: Similar als camps públics, però aquesta informació no es revelarà públicament (només hi tindran accés els administradors).
240
+ proposal_private_custom_fields_translations: |
241
+ Els camps personalitzats privats es mostren en un quadre diferent amb aquest text d'informació:
242
+ %{warning}
243
+ Aquest text es pot personalitzar amb una traducció personalitzada utilitzant la clau:
244
+ %{key}
241
245
  scoped_admins: Promou usuaries normals a administradores amb accés limitat a certes parts de la web pública (feu servir l'editor de restriccions per això). Noteu que afegir usuaries que ja tenen permisos d'administració no té cap efecte.
242
246
  scoped_styles: Crea CSS personalitzats que només s'apliquin a determinades parts de la web pública (per fer-ho, utilitza l'editor de restriccions)
243
247
  scoped_styles_variables: 'Pots fer servir les següents variables CSS pels colors personalitzats de l''organització:'
@@ -251,14 +255,22 @@ ca:
251
255
  body: Validacions d'entrada per l'usuari en el camp cos de la proposta
252
256
  title: Validacions d'entrada per l'usuari en el camp títol de la proposta
253
257
  form_proposal_custom_fields:
258
+ delete: Esborra
254
259
  new: Afegeix una nova caixa de "camps personalitzats"
255
260
  remove: Elimina aquesta caixa de "camps personalitzats"
256
261
  sure_to_remove: Estàs segura que vols eliminar aquesta caixa de camps personalitzats?
262
+ form_proposal_private_custom_fields:
263
+ delete: Esborra
264
+ new: Afegiu una nova caixa de "camps personalitzats privats"
265
+ remove: Elimina aquesta caixa de "camps personalitzats"
266
+ sure_to_remove: Segur que vols eliminar aquesta caixa de camps personalitzats?
257
267
  form_scoped_admins:
268
+ delete: Esborra
258
269
  new: Afegir un nou grup "d'Administradores acotades"
259
270
  remove: Elimineu aquest grup "d'Administradores acotades"
260
271
  sure_to_remove: Estàs segura que vols eliminar aquest grup "d'Administradores acotades"?
261
272
  form_scoped_styles:
273
+ delete: Esborra
262
274
  new: Afegeix una nova caixa CSS
263
275
  remove: Elimina aquesta caixa CSS
264
276
  sure_to_remove: Estàs segura que vols eliminar aquesta caixa CSS?
@@ -268,6 +280,15 @@ ca:
268
280
  title: Modificacions per %{setting}
269
281
  update: Actualitza la configuració
270
282
  system: A tot arreu excepte espais participatius
283
+ title:
284
+ admins: Administradores acotades
285
+ editors: Modificacions als editors
286
+ livechat: Xat en directe
287
+ proposal_custom_fields: 'Camps personalitzats per propostes: Camps públics'
288
+ proposal_private_custom_fields: 'Camps personalitzats per propostes: Camps privats'
289
+ proposals: Modificacions a propostes
290
+ styles: Estils personalitzats
291
+ surveys: Formularis i enquestes
271
292
  update:
272
293
  error: Error actualitzant la configuració! %{error}
273
294
  success: Configuració actualitzada correctament
@@ -327,12 +348,46 @@ ca:
327
348
  update:
328
349
  error: 'Error en actualitzar la redirecció: %{error}'
329
350
  success: Redirecció actualitzada correctament
351
+ maintenance:
352
+ private_data:
353
+ component: Espai / Component
354
+ confirm_delete: Segur que voleu suprimir totes les dades privades d'aquest recurs? Aquesta acció no es pot desfer.
355
+ delete: Esborrar-ho tot
356
+ destroying_private_data: Les dades privades de %{title} s'han programat per ser destruïdes. Si us plau, torneu a comprovar d'aquí a uns minuts.
357
+ done: Fet
358
+ help_html: |
359
+ Aquesta eina permet esborrar totes les dades privades d'un espai o component participatiu concret. Aquesta acció és irreversible i eliminarà totes les dades privades de la base de dades.
360
+ <br><br>
361
+ <strong>Què es consideren dades privades?</strong>
362
+ <br>
363
+ Les dades privades són qualsevol informació que no està disponible públicament i només és accessible per als administradors. Això, de moment, inclou la informació del camps personalitzats privats.
364
+ <br><br>
365
+ <strong>Què passa quan suprimeixo dades privades?</strong>
366
+ <br>
367
+ Quan suprimiu les dades privades, tota la informació privada de l'espai o component participatiu seleccionat s'eliminarà permanentment de la base de dades. Un registre d'aquesta acció s'emmagatzemarà al sistema amb finalitats d'auditoria (pero no les dades en si).
368
+ <br><br>
369
+ <strong>Què passa amb les dades públiques?</strong>
370
+ <br>
371
+ Les dades públiques no es veuran afectades per aquesta acció. Només s'eliminaran les dades privades.
372
+ <br><br>
373
+ <strong>Hi ha un temps mínim d'espera abans de suprimir les dades privades?</strong>
374
+ <br>
375
+ Sí, no podeu suprimir dades privades si l'última actualització va ser fa menys de %{time_ago}. Podeu canviar aquesta configuració al fitxer inicialitzador.
376
+ items_count: Total afectats
377
+ last_date: Última actualització
378
+ no_data: No s'han trobat dades privades més antigues que fa %{time_ago}
379
+ not_destroyable: Aquest recurs encara no es pot destruir
380
+ removing: Eliminant...
381
+ time_ago: "fa %{time}"
330
382
  menu:
331
383
  admins: Administradores acotades
332
- checks: Compatibilitat de sistema
333
384
  custom_redirects: Redireccions personalitzades
334
385
  editors: Modificacions als editors
335
386
  livechat: Xat en directe
387
+ maintenance:
388
+ checks: Compatibilitat de sistema
389
+ maintenance: Manteniment
390
+ private_data: Dades privades
336
391
  menu_hacks: Retocs al menú
337
392
  proposal_custom_fields: Camps personalitzats per propostes
338
393
  proposals: Modificacions a propostes
@@ -376,6 +431,17 @@ ca:
376
431
  error: 'Error en actualitzar l''ítem de menú: %{error}'
377
432
  success: Ítem de menú actualitzat correctament
378
433
  url_exists: Aquesta URL ha estat configurada en un altre ítem de menú, si us plau edita'l en comptes de crear-ne un de nou.
434
+ proposal_custom_fields:
435
+ menu:
436
+ title: Camps públics
437
+ private_body: Cos privat
438
+ private_data_last_remove: Aquestes dades es van destruir fa %{time_ago}.
439
+ private_data_last_update: Aquestes dades es van actualitzar per última vegada fa %{time_ago}.
440
+ proposal_private_custom_fields: Camps privats
441
+ remove_private_data: "👉 És possible que vulgueu eliminar-lo"
442
+ admin_log:
443
+ component:
444
+ destroy_private_data: "%{user_name} ha destruït %{count} elements de dades privades per a %{resource_name} a %{space_name}"
379
445
  amendments:
380
446
  modal:
381
447
  amendment_exists: Una esmena ja existeix
@@ -439,6 +505,7 @@ ca:
439
505
  show:
440
506
  view_meeting: Veure trobada
441
507
  view_proposal: Veure proposta
508
+ proposal_private_custom_fields_disclosure: Aquesta informació no es publicarà
442
509
  validators:
443
510
  too_much_caps: Fa servir massa lletres majúscules (més %{percent}% del text)
444
511
  voting:
@@ -468,6 +535,9 @@ ca:
468
535
  meetings_map:
469
536
  view_meeting: Veure trobada
470
537
  proposals:
538
+ admin:
539
+ exports:
540
+ awesome_private_proposals: Propostes amb dades privades
471
541
  proposals:
472
542
  orders:
473
543
  az: A-Z (Alfabètic)
@@ -479,6 +549,12 @@ ca:
479
549
  layouts:
480
550
  decidim:
481
551
  decidim_awesome:
552
+ admin:
553
+ maintenance:
554
+ title: 'Eines de manteniment: %{title}'
555
+ titles:
556
+ checks: Anàlisi de compatibilitat amb el sistema
557
+ private_data: Neteja de dades privades
482
558
  awesome_config:
483
559
  amendments: Esmenes
484
560
  autosaved_error: L'emmagatzematge local no està disponible al teu navegador, el formulari no es podrà desar automàticament.
@@ -1,4 +1,3 @@
1
- ---
2
1
  cs:
3
2
  activemodel:
4
3
  attributes:
@@ -19,6 +18,7 @@ cs:
19
18
  intergram_title_open: Titulek otevřeného chatu
20
19
  intergram_use_floating_button: Je-li zaškrtnuto, uzavřený chat je vždy tlačítko místo textu
21
20
  proposal_custom_fields: 'Uživatelská pole #%{id}'
21
+ proposal_private_custom_fields: Soukromá vlastní pole %{id}
22
22
  scoped_admins: 'Skupina Škálovaní administrátoři #%{id}'
23
23
  scoped_styles: Vlastní styly číslo %{id}
24
24
  validate_body_max_caps_percent: Maximální povolený procentní podíl velkých písmen pro tělo zprávy
@@ -46,8 +46,6 @@ cs:
46
46
  target: Otevře se v
47
47
  url: URL
48
48
  visibility: Viditelnost
49
- proposal:
50
- proposal_custom_fields: Vlastní pole
51
49
  decidim:
52
50
  admin:
53
51
  actions:
@@ -135,6 +133,7 @@ cs:
135
133
  za: Z-A (obrácená abeceda)
136
134
  decidim_awesome:
137
135
  admin:
136
+ actions: Akce
138
137
  admin_accountability:
139
138
  admin_roles:
140
139
  admin: Super správce
@@ -189,7 +188,6 @@ cs:
189
188
  Zdá se, že tato instalace potřebuje přesunout <strong>%{total}</strong> starých obrázků do nového systému.<br>
190
189
  Můžete zahájit proces nyní a bude probíhat na pozadí.
191
190
  start_image_migrations: "\U0001F449 Zahájit proces migrace"
192
- title: Kontroly kompatibility systému
193
191
  config:
194
192
  caution: 'POZNÁMKA: Tato funkce silně mění některé výchozí chování, které by mohlo vést k neočekávaným výsledkům. Používejte ji s opatrností!'
195
193
  constraints:
@@ -238,6 +236,12 @@ cs:
238
236
  proposal_custom_fields: Vytvoření vlastních polí návrhu, která se použijí pouze v určitých částech veřejného webu (použijte k tomu editor omezení)
239
237
  proposal_custom_fields_example: Data jsou uložena v objektu XML pomocí kompatibilních atributů HTML (prvky dl,dt,dd), které v běžném návrhu nahrazují "tělo".
240
238
  proposal_custom_fields_translations: "Štítky, nápověda, zástupné symboly a výchozí hodnoty mohou používat vlastní překlady aplikace. \nPro to použijte klíč i18n (musí obsahovat alespoň jednu tečku), místo použití textového literálu.\nNapříklad:\n- \"activemodel.attributes.proposal.title\" namísto \"Title\"\n- \"activemodel.attributes.proposal.address\" namísto \"Adresa\"\nNebo použijte vlastní klíče v kombinaci s jinými nástroji pro definování překladů (např. pomocí úpravy termínu modulu):\n - \"myapp.custom_fields.bio\" namísto „Životopis“"
239
+ proposal_private_custom_fields: Podobné jako veřejná pole, ale tyto informace nebudou zveřejněny (k nim budou mít přístup pouze administrátoři).
240
+ proposal_private_custom_fields_translations: |
241
+ Soukromá vlastní pole jsou zobrazena v jiném poli s tímto informačním textem:
242
+ %{warning}
243
+ Tento text lze přizpůsobit vlastním překladem pomocí klíče:
244
+ %{key}
241
245
  scoped_admins: Povýšení běžného uživatele na administrátora, který může spravovat pouze určité části veřejného webu (k tomu použijte editor omezení). Všimněte si, že uživatelé, kteří již mají oprávnění běžného správce, budou ignorováni.
242
246
  scoped_styles: Vytvořte vlastní CSS aplikovaný pouze na určitých částech veřejného webu (použijte pro to editor omezení)
243
247
  scoped_styles_variables: 'Můžete použít následující CSS proměnné pro nastavené barvy organizace:'
@@ -251,14 +255,22 @@ cs:
251
255
  body: Ověření vstupu uživatele pro pole "tělo"
252
256
  title: Ověření uživatelem pro pole "Název"
253
257
  form_proposal_custom_fields:
258
+ delete: Smazat
254
259
  new: Přidat nové pole "vlastní pole"
255
260
  remove: Odstranit toto "vlastní pole"
256
261
  sure_to_remove: Opravdu chcete zničit toto pole?
262
+ form_proposal_private_custom_fields:
263
+ delete: Smazat
264
+ new: Přidat nové "soukromé vlastní pole"
265
+ remove: Odstranit toto "ssoukromé vlastní pole"
266
+ sure_to_remove: Opravdu chcete zničit toto soukromé pole?
257
267
  form_scoped_admins:
268
+ delete: Smazat
258
269
  new: Přidání nové skupiny "Škálovaní administrátoři"
259
270
  remove: Odstranit tuto skupinu "Škálovaní administrátoři""
260
271
  sure_to_remove: Opravdu chcete zničit tuto skupinu "Škálovaní administrátoři"?
261
272
  form_scoped_styles:
273
+ delete: Smazat
262
274
  new: Přidat nový CSS box
263
275
  remove: Odstranit tento CSS box
264
276
  sure_to_remove: Opravdu chcete zničit tento CSS box?
@@ -268,6 +280,15 @@ cs:
268
280
  title: Vylepšení pro %{setting}
269
281
  update: Aktualizace konfigurace
270
282
  system: Všude kromě participačních prostor
283
+ title:
284
+ admins: Škálovaní administrátoři
285
+ editors: Hack editoru
286
+ livechat: Živý chat
287
+ proposal_custom_fields: 'Vlastní pole návrhů: veřejná pole'
288
+ proposal_private_custom_fields: 'Vlastní pole návrhů: Soukromá pole'
289
+ proposals: Návrhy hacků
290
+ styles: Vlastní styly
291
+ surveys: Průzkumy a formuláře
271
292
  update:
272
293
  error: Chyba při aktualizaci konfigurace! %{error}
273
294
  success: Konfigurace byla úspěšně aktualizována
@@ -327,12 +348,46 @@ cs:
327
348
  update:
328
349
  error: Chyba aktualizace přesměrování! %{error}
329
350
  success: Přesměrování úspěšně aktualizováno
351
+ maintenance:
352
+ private_data:
353
+ component: Prostor / komponenta
354
+ confirm_delete: Opravdu chcete odstranit všechna soukromá data tohoto zdroje? Tuto akci nelze vrátit zpět.
355
+ delete: Odstranit vše
356
+ destroying_private_data: Soukromá data pro %{title} jsou nastavena na zničení. Zkontrolujte prosím znovu za několik minut.
357
+ done: Hotovo
358
+ help_html: |
359
+ Tento nástroj umožňuje odstranit všechna soukromá data pro konkrétní participační prostor nebo komponentu. Tato akce je nevratná a odstraní všechna soukromá data z databáze.
360
+ <br><br>
361
+ <strong>Co je považováno za soukromá data?</strong>
362
+ <br>
363
+ Soukromá data jsou jakékoliv informace, které nejsou veřejně dostupné a jsou přístupné pouze správcům. To v současné době zahrnuje informace o soukromých vlastních polích.
364
+ <br><br>
365
+ <strong>Co se stane, když smažu soukromá data?</strong>
366
+ <br>
367
+ Když smažete soukromá data, všechny soukromé informace pro vybraný participační prostor nebo součást budou trvale odstraněny z databáze. Protokol této akce bude uložen v systému pro účely auditu.
368
+ <br><br>
369
+ <strong>Co se stane s veřejnými daty?</strong>
370
+ <br>
371
+ Veřejná data nebudou touto akcí dotčena. Budou odstraněna pouze soukromá data.
372
+ <br><br>
373
+ <strong>Je minimální čas počkat před odstraněním soukromých dat?</strong>
374
+ <br>
375
+ Ano, nemůžete smazat soukromá data, pokud byla poslední aktualizace menší než před %{time_ago}. Tuto konfiguraci můžete změnit v souboru inicializátoru.
376
+ items_count: Dotčené celkem
377
+ last_date: Poslední aktualizace
378
+ no_data: Nejsou nalezena žádná soukromá data starší než před %{time_ago}
379
+ not_destroyable: Tento zdroj zatím nelze zničit
380
+ removing: Odstraňování...
381
+ time_ago: "Před %{time}"
330
382
  menu:
331
383
  admins: Škálovaní administrátoři
332
- checks: Systémová kompatibilita
333
384
  custom_redirects: Vlastní přesměrování
334
385
  editors: Hack editoru
335
386
  livechat: Live Chat
387
+ maintenance:
388
+ checks: Systémová kompatibilita
389
+ maintenance: Údržba
390
+ private_data: Soukromá data
336
391
  menu_hacks: Vylepšení menu
337
392
  proposal_custom_fields: Vlastní pole pro návrhy
338
393
  proposals: Návrhy hacků
@@ -376,8 +431,20 @@ cs:
376
431
  error: Chyba při aktualizaci položky menu! %{error}
377
432
  success: Položka menu byla úspěšne aktualizována
378
433
  url_exists: Stejná adresa URL je již nakonfigurována, prosím upravte ji místo jejího vytvoření.
434
+ proposal_custom_fields:
435
+ menu:
436
+ title: Veřejná pole
437
+ private_body: Tělo soukroméhho pole
438
+ private_data_last_remove: Tato data byla zničena před %{time_ago}.
439
+ private_data_last_update: Tato data byla naposledy aktualizována před %{time_ago}.
440
+ proposal_private_custom_fields: Soukromá pole
441
+ remove_private_data: "👉 Možná jej chcete odstranit"
442
+ admin_log:
443
+ component:
444
+ destroy_private_data: "%{user_name} zničil %{count} položky soukromých dat pro %{resource_name} v %{space_name}"
379
445
  amendments:
380
446
  modal:
447
+ amendment_exists: Pozměňovací návrh již existuje
381
448
  current_amendment_html: <p>Můžete <a href="%{amendment_link}">přistupovat k aktuálnímu pozměňovacímu návrhu zde</a>.</p>
382
449
  dismiss: Ok, rozumím
383
450
  explanation_html: |
@@ -438,6 +505,7 @@ cs:
438
505
  show:
439
506
  view_meeting: Zobrazit schůzku
440
507
  view_proposal: Zobrazit návrh
508
+ proposal_private_custom_fields_disclosure: Tyto informace nebudou publikovány
441
509
  validators:
442
510
  too_much_caps: Používá příliš mnoho velkých písmen (více než %{percent}% textu)
443
511
  voting:
@@ -445,7 +513,7 @@ cs:
445
513
  abstained: "✔️ Zdržel se hlasování"
446
514
  change_vote: Změnit můj hlas
447
515
  default_box_title: Hlasovat o tomto návrhu
448
- default_instructions_html: "<p>Přečtěte si pečlivě pravidla voleb, abyste pochopili, jak bude vaše hlasování použito v %{organization}</p>"
516
+ default_instructions_html: "<p>Přečtěte si pečlivě pravidla voleb, abyste pochopili, jak bude vaše hlasování použito v %{organization}\"</p>"
449
517
  modal:
450
518
  cancel: Zrušit
451
519
  message: Váš hlas bude považován za konečný v %{date}. Do té doby jej můžete změnit,
@@ -467,6 +535,9 @@ cs:
467
535
  meetings_map:
468
536
  view_meeting: Zobrazit schůzku
469
537
  proposals:
538
+ admin:
539
+ exports:
540
+ awesome_private_proposals: Návrhy se soukromými údaji
470
541
  proposals:
471
542
  orders:
472
543
  az: A-Z (abecední)
@@ -478,6 +549,12 @@ cs:
478
549
  layouts:
479
550
  decidim:
480
551
  decidim_awesome:
552
+ admin:
553
+ maintenance:
554
+ title: 'Nástroj údržby: %{title}'
555
+ titles:
556
+ checks: Kontroly kompatibility systému
557
+ private_data: Vymazání soukromých údajů
481
558
  awesome_config:
482
559
  amendments: Pozměňovací návrhy
483
560
  autosaved_error: Místní úložiště není ve vašem prohlížeči podporováno, formulář nelze uložit automaticky.