decidim-assemblies 0.26.2 → 0.27.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/assemblies/content_blocks/highlighted_assemblies/show.erb +2 -2
  3. data/app/cells/decidim/assemblies/content_blocks/highlighted_assemblies_cell.rb +2 -4
  4. data/app/commands/decidim/assemblies/admin/copy_assembly.rb +10 -7
  5. data/app/commands/decidim/assemblies/admin/create_assemblies_type.rb +1 -1
  6. data/app/commands/decidim/assemblies/admin/create_assembly.rb +1 -1
  7. data/app/commands/decidim/assemblies/admin/create_assembly_member.rb +12 -12
  8. data/app/commands/decidim/assemblies/admin/destroy_assemblies_type.rb +1 -1
  9. data/app/commands/decidim/assemblies/admin/destroy_assembly_admin.rb +1 -1
  10. data/app/commands/decidim/assemblies/admin/destroy_assembly_member.rb +1 -1
  11. data/app/commands/decidim/assemblies/admin/import_assembly.rb +11 -7
  12. data/app/commands/decidim/assemblies/admin/notify_role_assigned_to_assembly.rb +1 -1
  13. data/app/commands/decidim/assemblies/admin/publish_assembly.rb +1 -1
  14. data/app/commands/decidim/assemblies/admin/unpublish_assembly.rb +1 -1
  15. data/app/commands/decidim/assemblies/admin/update_assemblies_setting.rb +1 -1
  16. data/app/commands/decidim/assemblies/admin/update_assemblies_type.rb +1 -1
  17. data/app/commands/decidim/assemblies/admin/update_assembly.rb +1 -1
  18. data/app/commands/decidim/assemblies/admin/update_assembly_member.rb +11 -11
  19. data/app/controllers/decidim/assemblies/admin/assembly_copies_controller.rb +1 -1
  20. data/app/controllers/decidim/assemblies/admin/assembly_imports_controller.rb +1 -1
  21. data/app/controllers/decidim/assemblies/admin/reminders_controller.rb +14 -0
  22. data/app/controllers/decidim/assemblies/assemblies_controller.rb +6 -6
  23. data/app/events/decidim/role_assigned_to_assembly_event.rb +1 -1
  24. data/app/forms/decidim/assemblies/admin/assembly_import_form.rb +5 -6
  25. data/app/helpers/decidim/assemblies/filter_assemblies_helper.rb +10 -6
  26. data/app/models/decidim/assembly.rb +10 -4
  27. data/app/packs/src/decidim/assemblies/orgchart.js +52 -46
  28. data/app/permissions/decidim/assemblies/permissions.rb +45 -11
  29. data/app/presenters/decidim/assemblies/admin_log/assembly_presenter.rb +1 -1
  30. data/app/presenters/decidim/assemblies/assembly_stats_presenter.rb +4 -1
  31. data/app/presenters/decidim/assembly_member_presenter.rb +3 -5
  32. data/app/queries/decidim/assemblies/admin/admin_users.rb +1 -1
  33. data/app/queries/decidim/assemblies/admin/assembly_members.rb +1 -1
  34. data/app/queries/decidim/assemblies/assemblies_with_user_role.rb +1 -1
  35. data/app/queries/decidim/assemblies/filtered_assemblies.rb +1 -1
  36. data/app/queries/decidim/assemblies/organization_assemblies.rb +1 -1
  37. data/app/queries/decidim/assemblies/organization_prioritized_assemblies.rb +2 -2
  38. data/app/queries/decidim/assemblies/organization_published_assemblies.rb +2 -2
  39. data/app/queries/decidim/assemblies/parent_assemblies.rb +1 -1
  40. data/app/queries/decidim/assemblies/parent_assemblies_for_select.rb +1 -1
  41. data/app/queries/decidim/assemblies/prioritized_assemblies.rb +1 -1
  42. data/app/queries/decidim/assemblies/promoted_assemblies.rb +1 -1
  43. data/app/queries/decidim/assemblies/published_assemblies.rb +1 -1
  44. data/app/queries/decidim/assemblies/visible_assemblies.rb +1 -1
  45. data/app/serializers/decidim/assemblies/assembly_importer.rb +4 -3
  46. data/app/views/decidim/assemblies/_filter_by_type.html.erb +1 -1
  47. data/app/views/decidim/assemblies/admin/assemblies/index.html.erb +2 -2
  48. data/app/views/decidim/assemblies/assemblies/_promoted_assembly.html.erb +1 -1
  49. data/app/views/decidim/assemblies/assemblies/index.html.erb +3 -1
  50. data/app/views/decidim/assemblies/assemblies/show.html.erb +3 -1
  51. data/app/views/layouts/decidim/_assembly_header.html.erb +1 -1
  52. data/config/locales/ar.yml +1 -1
  53. data/config/locales/bg.yml +1 -0
  54. data/config/locales/ca.yml +6 -2
  55. data/config/locales/cs.yml +6 -2
  56. data/config/locales/de.yml +6 -2
  57. data/config/locales/el.yml +1 -7
  58. data/config/locales/en.yml +5 -2
  59. data/config/locales/es-MX.yml +6 -2
  60. data/config/locales/es-PY.yml +6 -2
  61. data/config/locales/es.yml +6 -2
  62. data/config/locales/eu.yml +1 -7
  63. data/config/locales/fi-plain.yml +6 -2
  64. data/config/locales/fi.yml +6 -2
  65. data/config/locales/fr-CA.yml +6 -2
  66. data/config/locales/fr.yml +11 -7
  67. data/config/locales/ga-IE.yml +1 -0
  68. data/config/locales/gl.yml +2 -7
  69. data/config/locales/hu.yml +43 -3
  70. data/config/locales/id-ID.yml +1 -1
  71. data/config/locales/is-IS.yml +4 -1
  72. data/config/locales/it.yml +1 -7
  73. data/config/locales/ja.yml +6 -2
  74. data/config/locales/lb.yml +1 -6
  75. data/config/locales/lt.yml +473 -0
  76. data/config/locales/lv.yml +1 -1
  77. data/config/locales/nl.yml +27 -18
  78. data/config/locales/no.yml +1 -7
  79. data/config/locales/pl.yml +3 -2
  80. data/config/locales/pt-BR.yml +1 -7
  81. data/config/locales/pt.yml +1 -7
  82. data/config/locales/ro-RO.yml +1 -7
  83. data/config/locales/ru.yml +3 -1
  84. data/config/locales/sk.yml +3 -0
  85. data/config/locales/sl.yml +3 -6
  86. data/config/locales/sr-CS.yml +1 -0
  87. data/config/locales/sv.yml +2 -7
  88. data/config/locales/tr-TR.yml +1 -7
  89. data/config/locales/uk.yml +3 -1
  90. data/config/locales/zh-CN.yml +1 -7
  91. data/lib/decidim/assemblies/admin_engine.rb +4 -1
  92. data/lib/decidim/assemblies/participatory_space.rb +9 -9
  93. data/lib/decidim/assemblies/version.rb +1 -1
  94. metadata +13 -13
  95. data/app/services/decidim/assemblies/assembly_search.rb +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b80bc78ad6c0ff19cd26e7553f1a767330eeb5f76551308dfbe2d6e61bf0698
4
- data.tar.gz: 8c05272109b2e6f20be8a61aac2d9a8bece8a07afd520a4992d40eb4d4e36c5d
3
+ metadata.gz: 31a016c68a9d41b155abf0a0721914f066f31fa0b595bd4ce373060232130704
4
+ data.tar.gz: efbe5019c838b198376dc38bb3ebe17be24f19d99898ca279848e6e22e299822
5
5
  SHA512:
6
- metadata.gz: b6e48cf27c36e5dbcef00e5c52b2331b690f63c2664070ec14d6dd51a545f07c7fe703eb4f6c22357f45133bfddb21361c19ec295707bf12bf84ac3bbb726fc7
7
- data.tar.gz: 01e8a48d80e946536950f71de483e672b78453de74afc564487cc9f336256ee9e1f8e01e63834bd406b7ed72136a2cc58482d818e06d160d4deb763c7a29c9b1
6
+ metadata.gz: 5c692fc2fdd10a237a7d9e3c5e2c31f2840d054e4838eb159a5df9566eb1475e6560d27401f00f288696737bd2bd96fbcf490bb901a3a5b3fabd33bc237e2386
7
+ data.tar.gz: 8f3f1d07319b8fa61f60e8c195c3ad0914d392d28836220800e51b2a8d623ce3cf0dd2a81005c6258f42bb0964e103c9341a89b305b58cb86a89e9cc5258e80a
@@ -1,4 +1,4 @@
1
- <section class="wrapper-home home-section" xmlns="http://www.w3.org/1999/xhtml">
1
+ <section id="highlighted_assemblies" class="wrapper-home home-section" xmlns="http://www.w3.org/1999/xhtml">
2
2
  <div class="row" id="highlighted-assemblies">
3
3
  <h3 class="section-heading"><%= t("active_assemblies", scope: i18n_scope) %></h3>
4
4
  <div class="row collapse">
@@ -8,7 +8,7 @@
8
8
  <div class="column">
9
9
  <%= link_to decidim_assemblies.assembly_path(assembly), class: "card card--assembly card--mini" do %>
10
10
  <div aria-hidden="true" class="card__image-top"
11
- style="background-image:url(<%= assembly.attached_uploader(:hero_image).path %>)"></div>
11
+ style="background-image:url('<%= assembly.attached_uploader(:hero_image).path %>')"></div>
12
12
  <div class="card__content">
13
13
  <span class="card__title card__link"><%= translated_attribute assembly.title %></span>
14
14
  </div>
@@ -6,10 +6,6 @@ module Decidim
6
6
  class HighlightedAssembliesCell < Decidim::ViewModel
7
7
  delegate :current_user, to: :controller
8
8
 
9
- cache :show, expires_in: 10.minutes, if: :perform_caching? do
10
- cache_hash
11
- end
12
-
13
9
  def show
14
10
  render if highlighted_assemblies.any?
15
11
  end
@@ -22,6 +18,7 @@ module Decidim
22
18
  @highlighted_assemblies ||= OrganizationPrioritizedAssemblies
23
19
  .new(current_organization, current_user)
24
20
  .query
21
+ .with_attached_hero_image
25
22
  .includes([:organization])
26
23
  .limit(max_results)
27
24
  end
@@ -39,6 +36,7 @@ module Decidim
39
36
  def cache_hash
40
37
  hash = []
41
38
  hash.push(I18n.locale)
39
+ hash.push(highlighted_assemblies.map(&:cache_key_with_version))
42
40
  hash.join(Decidim.cache_key_separator)
43
41
  end
44
42
  end
@@ -5,14 +5,15 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when copying a new participatory
7
7
  # assembly in the system.
8
- class CopyAssembly < Rectify::Command
8
+ class CopyAssembly < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # form - A form object with the params.
12
12
  # assembly - An assembly we want to duplicate
13
- def initialize(form, assembly)
13
+ def initialize(form, assembly, user)
14
14
  @form = form
15
15
  @assembly = assembly
16
+ @user = user
16
17
  end
17
18
 
18
19
  # Executes the command. Broadcasts these events:
@@ -24,11 +25,13 @@ module Decidim
24
25
  def call
25
26
  return broadcast(:invalid) if form.invalid?
26
27
 
27
- Assembly.transaction do
28
- copy_assembly
29
- copy_assembly_attachments
30
- copy_assembly_categories if @form.copy_categories?
31
- copy_assembly_components if @form.copy_components?
28
+ Decidim.traceability.perform_action!("duplicate", @assembly, @user) do
29
+ Assembly.transaction do
30
+ copy_assembly
31
+ copy_assembly_attachments
32
+ copy_assembly_categories if @form.copy_categories?
33
+ copy_assembly_components if @form.copy_components?
34
+ end
32
35
  end
33
36
 
34
37
  broadcast(:ok, @copied_assembly)
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when creating a new assembly
7
7
  # type in the system.
8
- class CreateAssembliesType < Rectify::Command
8
+ class CreateAssembliesType < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # form - A form object with the params.
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when creating a new participatory
7
7
  # assembly in the system.
8
- class CreateAssembly < Rectify::Command
8
+ class CreateAssembly < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # form - A form object with the params.
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when creating a new assembly
7
7
  # member in the system.
8
- class CreateAssemblyMember < Rectify::Command
8
+ class CreateAssemblyMember < Decidim::Command
9
9
  include ::Decidim::AttachmentAttributesMethods
10
10
 
11
11
  # Public: Initializes the command.
@@ -53,16 +53,16 @@ module Decidim
53
53
 
54
54
  def assembly_member_attributes
55
55
  form.attributes.slice(
56
- :full_name,
57
- :gender,
58
- :birthday,
59
- :birthplace,
60
- :ceased_date,
61
- :designation_date,
62
- :position,
63
- :position_other,
64
- :weight
65
- ).merge(
56
+ "full_name",
57
+ "gender",
58
+ "birthday",
59
+ "birthplace",
60
+ "ceased_date",
61
+ "designation_date",
62
+ "position",
63
+ "position_other",
64
+ "weight"
65
+ ).symbolize_keys.merge(
66
66
  assembly: assembly,
67
67
  user: form.user
68
68
  ).merge(
@@ -99,7 +99,7 @@ module Decidim
99
99
  resource: assembly,
100
100
  followers: followers
101
101
  }
102
- Decidim::EventsManager.publish(data)
102
+ Decidim::EventsManager.publish(**data)
103
103
  end
104
104
  end
105
105
  end
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when destroying an assembly
7
7
  # type in the system.
8
- class DestroyAssembliesType < Rectify::Command
8
+ class DestroyAssembliesType < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # assemblies_type - the AssemblyMember to destroy
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when destroying an assembly
7
7
  # admin in the system.
8
- class DestroyAssemblyAdmin < Rectify::Command
8
+ class DestroyAssemblyAdmin < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # role - the AssemblyUserRole to destroy
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when destroying an assembly
7
7
  # member in the system.
8
- class DestroyAssemblyMember < Rectify::Command
8
+ class DestroyAssemblyMember < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # assembly_member - the AssemblyMember to destroy
@@ -5,13 +5,14 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic to import a new assembly
7
7
  # in the system.
8
- class ImportAssembly < Rectify::Command
8
+ class ImportAssembly < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # form - A form object with the params.
12
12
  # assembly - An assembly we want to duplicate
13
- def initialize(form)
13
+ def initialize(form, user)
14
14
  @form = form
15
+ @user = user
15
16
  end
16
17
 
17
18
  # Executes the command. Broadcasts these events:
@@ -38,11 +39,14 @@ module Decidim
38
39
  def import_assembly
39
40
  importer = Decidim::Assemblies::AssemblyImporter.new(form.current_organization, form.current_user)
40
41
  assemblies.each do |original_assembly|
41
- @imported_assembly = importer.import(original_assembly, form.current_user, title: form.title, slug: form.slug)
42
- importer.import_assemblies_type(original_assembly["decidim_assemblies_type_id"])
43
- importer.import_categories(original_assembly["assembly_categories"]) if form.import_categories?
44
- importer.import_folders_and_attachments(original_assembly["attachments"]) if form.import_attachments?
45
- importer.import_components(original_assembly["components"]) if form.import_components?
42
+ Decidim.traceability.perform_action!("import", Assembly, @user) do
43
+ @imported_assembly = importer.import(original_assembly, form.current_user, title: form.title, slug: form.slug)
44
+ importer.import_assemblies_type(original_assembly["decidim_assemblies_type_id"])
45
+ importer.import_categories(original_assembly["assembly_categories"]) if form.import_categories?
46
+ importer.import_folders_and_attachments(original_assembly["attachments"]) if form.import_attachments?
47
+ importer.import_components(original_assembly["components"]) if form.import_components?
48
+ @imported_assembly
49
+ end
46
50
  end
47
51
  end
48
52
 
@@ -4,7 +4,7 @@ module Decidim
4
4
  module Assemblies
5
5
  module Admin
6
6
  # A command to notify users when a role is assigned for an assembly
7
- class NotifyRoleAssignedToAssembly < Rectify::Command
7
+ class NotifyRoleAssignedToAssembly < Decidim::Command
8
8
  def send_notification(user)
9
9
  Decidim::EventsManager.publish(
10
10
  event: "decidim.events.assembly.role_assigned",
@@ -4,7 +4,7 @@ module Decidim
4
4
  module Assemblies
5
5
  module Admin
6
6
  # A command that sets an assembly as published.
7
- class PublishAssembly < Rectify::Command
7
+ class PublishAssembly < Decidim::Command
8
8
  # Public: Initializes the command.
9
9
  #
10
10
  # assembly - A Assembly that will be published
@@ -4,7 +4,7 @@ module Decidim
4
4
  module Assemblies
5
5
  module Admin
6
6
  # A command that sets an assembly as unpublished.
7
- class UnpublishAssembly < Rectify::Command
7
+ class UnpublishAssembly < Decidim::Command
8
8
  # Public: Initializes the command.
9
9
  #
10
10
  # assembly - A Assembly that will be published
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when updating assemblies
7
7
  # settings in admin area.
8
- class UpdateAssembliesSetting < Rectify::Command
8
+ class UpdateAssembliesSetting < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # assemblies_setting - A assemblies_setting object to update.
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when updating a new assembly
7
7
  # type in the system.
8
- class UpdateAssembliesType < Rectify::Command
8
+ class UpdateAssembliesType < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # assemblies_type - A assemblies_type object to update.
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when creating a new participatory
7
7
  # assembly in the system.
8
- class UpdateAssembly < Rectify::Command
8
+ class UpdateAssembly < Decidim::Command
9
9
  include ::Decidim::AttachmentAttributesMethods
10
10
 
11
11
  # Public: Initializes the command.
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when updating an assembly
7
7
  # member in the system.
8
- class UpdateAssemblyMember < Rectify::Command
8
+ class UpdateAssemblyMember < Decidim::Command
9
9
  include ::Decidim::AttachmentAttributesMethods
10
10
 
11
11
  # Public: Initializes the command.
@@ -51,16 +51,16 @@ module Decidim
51
51
 
52
52
  def attributes
53
53
  form.attributes.slice(
54
- :full_name,
55
- :gender,
56
- :birthday,
57
- :birthplace,
58
- :ceased_date,
59
- :designation_date,
60
- :position,
61
- :position_other,
62
- :weight
63
- ).merge(
54
+ "full_name",
55
+ "gender",
56
+ "birthday",
57
+ "birthplace",
58
+ "ceased_date",
59
+ "designation_date",
60
+ "position",
61
+ "position_other",
62
+ "weight"
63
+ ).symbolize_keys.merge(
64
64
  user: form.user
65
65
  ).merge(
66
66
  attachment_attributes(:non_user_avatar)
@@ -17,7 +17,7 @@ module Decidim
17
17
  enforce_permission_to :create, :assembly
18
18
  @form = form(AssemblyCopyForm).from_params(params)
19
19
 
20
- CopyAssembly.call(@form, current_assembly) do
20
+ CopyAssembly.call(@form, current_assembly, current_user) do
21
21
  on(:ok) do
22
22
  flash[:notice] = I18n.t("assemblies_copies.create.success", scope: "decidim.admin")
23
23
  redirect_to assemblies_path(parent_id: current_assembly.parent_id)
@@ -13,7 +13,7 @@ module Decidim
13
13
  enforce_permission_to :import, :assembly
14
14
  @form = form(AssemblyImportForm).from_params(params)
15
15
 
16
- ImportAssembly.call(@form) do
16
+ ImportAssembly.call(@form, current_user) do
17
17
  on(:ok) do
18
18
  flash[:notice] = I18n.t("assembly_imports.create.success", scope: "decidim.admin")
19
19
  redirect_to assemblies_path
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Assemblies
5
+ module Admin
6
+ # This controller allows to send reminders.
7
+ # It is targeted for customizations for reminder things that lives under
8
+ # an assembly.
9
+ class RemindersController < Decidim::Admin::RemindersController
10
+ include Concerns::AssemblyAdmin
11
+ end
12
+ end
13
+ end
14
+ end
@@ -48,15 +48,15 @@ module Decidim
48
48
 
49
49
  private
50
50
 
51
- def search_klass
52
- AssemblySearch
51
+ def search_collection
52
+ Assembly.where(organization: current_organization).published.visible_for(current_user)
53
53
  end
54
54
 
55
55
  def default_filter_params
56
56
  {
57
- scope_id: nil,
58
- area_id: nil,
59
- type_id: nil
57
+ with_scope: nil,
58
+ with_area: nil,
59
+ type_id_eq: nil
60
60
  }
61
61
  end
62
62
 
@@ -77,7 +77,7 @@ module Decidim
77
77
  end
78
78
 
79
79
  def parent_assemblies
80
- search.results.parent_assemblies.order(weight: :asc, promoted: :desc)
80
+ search.result.parent_assemblies.order(weight: :asc, promoted: :desc)
81
81
  end
82
82
 
83
83
  def stats
@@ -6,7 +6,7 @@ module Decidim
6
6
  include Decidim::Events::AuthorEvent
7
7
 
8
8
  def notification_title
9
- I18n.t("notification_title", i18n_options).html_safe
9
+ I18n.t("notification_title", **i18n_options).html_safe
10
10
  end
11
11
 
12
12
  def i18n_role
@@ -30,10 +30,9 @@ module Decidim
30
30
  attribute :import_categories, Boolean, default: true
31
31
  attribute :import_attachments, Boolean, default: true
32
32
  attribute :import_components, Boolean, default: true
33
- attribute :document
34
-
35
- validates :document, presence: true
33
+ attribute :document, Decidim::Attributes::Blob
36
34
 
35
+ validates :document, file_content_type: { allow: ACCEPTED_TYPES.values }
37
36
  validates :slug, presence: true, format: { with: Decidim::Assembly.slug_format }
38
37
  validates :title, translatable_presence: true
39
38
  validate :slug_uniqueness
@@ -41,7 +40,7 @@ module Decidim
41
40
  validate :document_type_must_be_valid, if: :document
42
41
 
43
42
  def document_text
44
- @document_text ||= document&.read
43
+ @document_text ||= document&.download
45
44
  end
46
45
 
47
46
  def document_type_must_be_valid
@@ -60,9 +59,9 @@ module Decidim
60
59
  end
61
60
 
62
61
  def i18n_invalid_document_type_text
63
- I18n.t("invalid_document_type",
62
+ I18n.t("allowed_file_content_types",
64
63
  scope: "activemodel.errors.models.assembly.attributes.document",
65
- valid_mime_types: i18n_valid_mime_types_text)
64
+ types: i18n_valid_mime_types_text)
66
65
  end
67
66
 
68
67
  def i18n_valid_mime_types_text
@@ -7,7 +7,9 @@ module Decidim
7
7
  # `filter` returns a Filter object from Decidim::FilterResource
8
8
  module FilterAssembliesHelper
9
9
  def available_filters
10
- @available_filters ||= [t("all", scope: "decidim.assemblies.filter")] + organization_assembly_types
10
+ return if organization_assembly_types.blank?
11
+
12
+ [t("all", scope: "decidim.assemblies.filter")] + organization_assembly_types
11
13
  end
12
14
 
13
15
  def filter_link(type_id)
@@ -16,9 +18,9 @@ module Decidim
16
18
  .url_helpers
17
19
  .assemblies_path(
18
20
  filter: {
19
- scope_id: filter.scope_id,
20
- area_id: filter.area_id,
21
- type_id: type_id
21
+ with_scope: filter.with_scope,
22
+ with_area: filter.with_area,
23
+ type_id_eq: type_id
22
24
  }
23
25
  )
24
26
  end
@@ -28,14 +30,16 @@ module Decidim
28
30
  end
29
31
 
30
32
  def current_filter_name
31
- type = AssembliesType.find_by(id: filter.type_id)
33
+ type = AssembliesType.find_by(id: filter_params[:type_id_eq])
32
34
  return translated_attribute type.title if type
33
35
 
34
36
  t("all", scope: "decidim.assemblies.filter")
35
37
  end
36
38
 
37
39
  def organization_assembly_types
38
- AssembliesType.where(organization: current_organization)&.map { |type| [translated_attribute(type.title), type.id] }
40
+ @organization_assembly_types ||= AssembliesType.where(organization: current_organization).joins(:assemblies).where(
41
+ decidim_assemblies: { id: search.result.unscope(where: :decidim_assemblies_type_id).parent_assemblies }
42
+ ).distinct&.map { |type| [translated_attribute(type.title), type.id] }
39
43
  end
40
44
  end
41
45
  end
@@ -34,6 +34,8 @@ module Decidim
34
34
  include Decidim::Searchable
35
35
  include Decidim::HasUploadValidations
36
36
  include Decidim::TranslatableResource
37
+ include Decidim::HasArea
38
+ include Decidim::FilterableResource
37
39
 
38
40
  SOCIAL_HANDLERS = [:twitter, :facebook, :instagram, :youtube, :github].freeze
39
41
  CREATED_BY = %w(city_council public others).freeze
@@ -146,7 +148,7 @@ module Decidim
146
148
  end
147
149
 
148
150
  def user_roles(role_name = nil)
149
- roles = Decidim::AssemblyUserRole.where(assembly: self)
151
+ roles = Decidim::AssemblyUserRole.where(assembly: self_and_ancestors)
150
152
  return roles if role_name.blank?
151
153
 
152
154
  roles.where(role: role_name)
@@ -156,6 +158,10 @@ module Decidim
156
158
  :admin
157
159
  end
158
160
 
161
+ def self.ransackable_scopes(_auth_object = nil)
162
+ [:with_area, :with_scope]
163
+ end
164
+
159
165
  private
160
166
 
161
167
  # When an assembly changes their parent, we need to update the parents_path attribute
@@ -208,8 +214,8 @@ module Decidim
208
214
  # rubocop:enable Rails/SkipsModelValidations
209
215
 
210
216
  # Allow ransacker to search for a key in a hstore column (`title`.`en`)
211
- ransacker :title do |parent|
212
- Arel::Nodes::InfixOperation.new("->>", parent.table[:title], Arel::Nodes.build_quoted(I18n.locale.to_s))
213
- end
217
+ ransacker_i18n :title
218
+
219
+ ransack_alias :type_id, :decidim_assemblies_type_id
214
220
  end
215
221
  end