decidim-participatory_processes 0.17.2 → 0.18.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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/participatory_processes/process_filters/filter_tabs.erb +1 -2
  3. data/app/cells/decidim/participatory_processes/process_filters/show.erb +1 -1
  4. data/app/cells/decidim/participatory_processes/process_filters_cell.rb +42 -8
  5. data/app/cells/decidim/participatory_processes/process_group_m_cell.rb +1 -1
  6. data/app/cells/decidim/participatory_processes/process_m/footer.erb +1 -1
  7. data/app/commands/decidim/participatory_processes/admin/copy_participatory_process.rb +1 -0
  8. data/app/commands/decidim/participatory_processes/admin/create_participatory_process.rb +1 -0
  9. data/app/commands/decidim/participatory_processes/admin/update_participatory_process.rb +1 -0
  10. data/app/controllers/decidim/participatory_processes/admin/application_controller.rb +5 -4
  11. data/app/controllers/decidim/participatory_processes/admin/concerns/participatory_process_admin.rb +6 -4
  12. data/app/controllers/decidim/participatory_processes/admin/participatory_processes_controller.rb +21 -5
  13. data/app/controllers/decidim/participatory_processes/application_controller.rb +7 -6
  14. data/app/controllers/decidim/participatory_processes/participatory_process_groups_controller.rb +1 -1
  15. data/app/controllers/decidim/participatory_processes/participatory_processes_controller.rb +30 -46
  16. data/app/forms/decidim/participatory_processes/admin/participatory_process_form.rb +44 -22
  17. data/app/helpers/decidim/participatory_processes/participatory_process_helper.rb +7 -0
  18. data/app/models/decidim/participatory_process.rb +36 -2
  19. data/app/presenters/decidim/participatory_processes/admin_log/participatory_process_presenter.rb +1 -0
  20. data/app/queries/decidim/participatory_processes/admin/admin_users.rb +6 -5
  21. data/app/queries/decidim/participatory_processes/participatory_processes_by_group.rb +28 -0
  22. data/app/queries/decidim/participatory_processes/visible_participatory_processes.rb +1 -8
  23. data/app/services/decidim/participatory_processes/participatory_process_search.rb +26 -0
  24. data/app/views/decidim/participatory_processes/admin/participatory_processes/_form.html.erb +69 -23
  25. data/app/views/decidim/participatory_processes/admin/participatory_processes/index.html.erb +42 -6
  26. data/app/views/decidim/participatory_processes/participatory_processes/_order_by_processes.html.erb +1 -1
  27. data/app/views/decidim/participatory_processes/participatory_processes/_promoted_process.html.erb +1 -1
  28. data/app/views/decidim/participatory_processes/participatory_processes/index.html.erb +2 -0
  29. data/app/views/decidim/participatory_processes/participatory_processes/show.html.erb +29 -14
  30. data/app/views/layouts/decidim/_process_header_steps.html.erb +1 -1
  31. data/config/locales/ar-SA.yml +16 -4
  32. data/config/locales/ar.yml +432 -0
  33. data/config/locales/ca.yml +16 -4
  34. data/config/locales/cs.yml +16 -4
  35. data/config/locales/de.yml +16 -4
  36. data/config/locales/en.yml +16 -4
  37. data/config/locales/es-MX.yml +16 -4
  38. data/config/locales/es-PY.yml +16 -4
  39. data/config/locales/es.yml +16 -4
  40. data/config/locales/eu.yml +16 -4
  41. data/config/locales/fi-plain.yml +16 -4
  42. data/config/locales/fi.yml +16 -4
  43. data/config/locales/fr.yml +16 -4
  44. data/config/locales/gl.yml +16 -4
  45. data/config/locales/hu.yml +16 -4
  46. data/config/locales/id-ID.yml +16 -4
  47. data/config/locales/it.yml +16 -4
  48. data/config/locales/nl.yml +16 -4
  49. data/config/locales/pl.yml +16 -4
  50. data/config/locales/pt-BR.yml +16 -4
  51. data/config/locales/pt.yml +16 -4
  52. data/config/locales/ru.yml +1 -4
  53. data/config/locales/sv.yml +16 -4
  54. data/config/locales/tr-TR.yml +16 -4
  55. data/config/locales/uk.yml +1 -4
  56. data/db/migrate/20190322125517_add_area_to_participatory_processes.rb +7 -0
  57. data/lib/decidim/participatory_processes/test/factories.rb +1 -0
  58. data/lib/decidim/participatory_processes/version.rb +1 -1
  59. metadata +11 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 176a2a7a9be748ecb2217dde71303a1d67acd6929f2916acc390149d2338be24
4
- data.tar.gz: 8bb4f6bca9d356a18b2367520966dae3eb10246206ab65db74916667091bc587
3
+ metadata.gz: 7c5c49a8f6a410df4a057cd94c07274a98a89e743d0df6d91c46583b2ed30d67
4
+ data.tar.gz: 5dc3e790a54d79406f05d9c96c44e313f8263cd8f0594d3e41e3c61168609c8c
5
5
  SHA512:
6
- metadata.gz: 8136de315dcd89701dd19a07f4407c84c9bd69bc35f80554cb50ab51882c8a81c7d62ac1f50ae69bd8d02d1a063c506ecf11a5b45d33afcda2105649e648e2f6
7
- data.tar.gz: aae36e8063b004550a2296cd9f64a5a5a83506013a004854a0c722ac2c3ef2f3714e751bf088bca95813b78fc259fa6353762b1c188c602025369b18d6c4b23b
6
+ metadata.gz: 7b2fdd90b1932caac47fd07f21efedfe7e9f558b9bbbdbf5db5287ce79d347863274ec41724579dfed413c6703df50d62516474db9523942926cde7a4c9ed81f
7
+ data.tar.gz: '05823400ffb5cd78475d1f6ad90487a2ebdfd8e508bfd47c2802a794579c1a4e25182f967ce45484a4e6ee128fa822700b984ca8937132bd5b3046ef51dd341e'
@@ -1,5 +1,4 @@
1
1
  <span class="order-by__tabs ml-s">
2
- <%# <span class="muted mr-s ml-s">No hay procesos activos</span> %>
3
2
  <% if should_show_tabs? %>
4
3
  <%= explanation %>
5
4
  <span class="muted mr-xs"><%= t("decidim.participatory_processes.participatory_processes.filters.see") %></span>
@@ -7,7 +6,7 @@
7
6
  <%= link_to filter_link(filter), remote: true, class: "order-by__tab" do %>
8
7
  <strong>
9
8
  <%= filter_name(filter) %>
10
- </strong>&nbsp;<span>(<%= model[filter] %>)</span>
9
+ </strong>&nbsp;<span>(<%= process_count_by_filter[filter] %>)</span>
11
10
  <% end %>
12
11
  <% end %>
13
12
  <% else %>
@@ -4,7 +4,7 @@
4
4
  <%= render :filter_tabs %>
5
5
  </h2>
6
6
  </div>
7
- <% if model["active"] == 0 && model["upcoming"] == 0 %>
7
+ <% if process_count_by_filter["active"] == 0 && process_count_by_filter["upcoming"] == 0 %>
8
8
  <div class="row column">
9
9
  <div class="callout warning mb-sm">
10
10
  <p><%= t("decidim.participatory_processes.participatory_processes.filters.explanations.no_active_nor_upcoming_callout") %></p>
@@ -9,11 +9,46 @@ module Decidim
9
9
  Decidim::ParticipatoryProcesses::Engine
10
10
  .routes
11
11
  .url_helpers
12
- .participatory_processes_path(filter: filter)
12
+ .participatory_processes_path(
13
+ filter: {
14
+ scope_id: get_filter(:scope_id),
15
+ area_id: get_filter(:area_id),
16
+ date: filter
17
+ }
18
+ )
13
19
  end
14
20
 
15
21
  def current_filter
16
- options[:current_filter]
22
+ get_filter(:date, model[:default_filter])
23
+ end
24
+
25
+ def get_filter(filter_name, default = nil)
26
+ return default unless params[:filter].try(:[], filter_name)
27
+
28
+ params[:filter][filter_name]
29
+ end
30
+
31
+ def filtered_processes(date_filter)
32
+ ParticipatoryProcessSearch.new(
33
+ date: date_filter,
34
+ scope_id: get_filter(:scope_id),
35
+ area_id: get_filter(:area_id),
36
+ current_user: current_user,
37
+ organization: current_organization
38
+ )
39
+ end
40
+
41
+ def process_count_by_filter
42
+ return @process_count_by_filter if @process_count_by_filter
43
+
44
+ @process_count_by_filter = %w(active upcoming past).inject({}) do |collection_by_filter, filter_name|
45
+ filtered_processes = filtered_processes(filter_name).results
46
+ processes = filtered_processes.groupless
47
+ groups = Decidim::ParticipatoryProcessGroup.where(id: filtered_processes.grouped.group_ids)
48
+ collection_by_filter.merge(filter_name => processes.count + groups.count)
49
+ end
50
+ @process_count_by_filter["all"] = @process_count_by_filter.values.sum
51
+ @process_count_by_filter
17
52
  end
18
53
 
19
54
  def other_filters
@@ -22,17 +57,16 @@ module Decidim
22
57
 
23
58
  def other_filters_with_value
24
59
  @other_filters_with_value ||= other_filters.select do |filter|
25
- model[filter].positive?
60
+ process_count_by_filter[filter].positive?
26
61
  end
27
62
  end
28
63
 
29
64
  def should_show_tabs?
30
- other_filters_with_value.any?
31
- other_filters_with_value != ["all"]
65
+ other_filters_with_value.any? && other_filters_with_value != ["all"]
32
66
  end
33
67
 
34
68
  def title
35
- I18n.t(current_filter, scope: "decidim.participatory_processes.participatory_processes.filters.counters", count: model[current_filter])
69
+ I18n.t(current_filter, scope: "decidim.participatory_processes.participatory_processes.filters.counters", count: process_count_by_filter[current_filter])
36
70
  end
37
71
 
38
72
  def filter_name(filter)
@@ -40,7 +74,7 @@ module Decidim
40
74
  end
41
75
 
42
76
  def explanation
43
- return if model["active"].positive?
77
+ return if process_count_by_filter["active"].positive?
44
78
  content_tag(
45
79
  :span,
46
80
  I18n.t(explanation_text, scope: "decidim.participatory_processes.participatory_processes.filters.explanations"),
@@ -49,7 +83,7 @@ module Decidim
49
83
  end
50
84
 
51
85
  def explanation_text
52
- return "no_active" if model["upcoming"].positive?
86
+ return "no_active" if process_count_by_filter["upcoming"].positive?
53
87
  "no_active_nor_upcoming"
54
88
  end
55
89
  end
@@ -47,7 +47,7 @@ module Decidim
47
47
 
48
48
  if current_user
49
49
  return processes.count.to_s if current_user.admin
50
- processes.visible_for(current_user.id).count.to_s
50
+ processes.visible_for(current_user).count.to_s
51
51
  else
52
52
  processes.public_spaces.count.to_s
53
53
  end
@@ -7,7 +7,7 @@
7
7
  </div>
8
8
  <% end %>
9
9
  <%= link_to(
10
- t("layouts.decidim.participatory_processes.participatory_process.take_part"),
10
+ t(model.cta_button_text_key, scope: "layouts.decidim.participatory_processes.participatory_process"),
11
11
  resource_path,
12
12
  class: "card__button button button--sc secondary light small"
13
13
  ) %>
@@ -53,6 +53,7 @@ module Decidim
53
53
  scope: @participatory_process.scope,
54
54
  developer_group: @participatory_process.developer_group,
55
55
  local_area: @participatory_process.local_area,
56
+ area: @participatory_process.area,
56
57
  target: @participatory_process.target,
57
58
  participatory_scope: @participatory_process.participatory_scope,
58
59
  participatory_structure: @participatory_process.participatory_structure,
@@ -54,6 +54,7 @@ module Decidim
54
54
  private_space: form.private_space,
55
55
  developer_group: form.developer_group,
56
56
  local_area: form.local_area,
57
+ area: form.area,
57
58
  target: form.target,
58
59
  participatory_scope: form.participatory_scope,
59
60
  participatory_structure: form.participatory_structure,
@@ -67,6 +67,7 @@ module Decidim
67
67
  private_space: form.private_space,
68
68
  developer_group: form.developer_group,
69
69
  local_area: form.local_area,
70
+ area: form.area,
70
71
  target: form.target,
71
72
  participatory_scope: form.participatory_scope,
72
73
  participatory_structure: form.participatory_structure,
@@ -5,6 +5,10 @@ module Decidim
5
5
  module Admin
6
6
  # The main admin application controller for participatory processes
7
7
  class ApplicationController < Decidim::Admin::ApplicationController
8
+ register_permissions(::Decidim::ParticipatoryProcesses::Admin::ApplicationController,
9
+ ::Decidim::ParticipatoryProcesses::Permissions,
10
+ ::Decidim::Admin::Permissions)
11
+
8
12
  private
9
13
 
10
14
  def permissions_context
@@ -14,10 +18,7 @@ module Decidim
14
18
  end
15
19
 
16
20
  def permission_class_chain
17
- [
18
- Decidim::ParticipatoryProcesses::Permissions,
19
- Decidim::Admin::Permissions
20
- ]
21
+ ::Decidim.permissions_registry.chain_for(::Decidim::ParticipatoryProcesses::Admin::ApplicationController)
21
22
  end
22
23
  end
23
24
  end
@@ -12,6 +12,11 @@ module Decidim
12
12
  module ParticipatoryProcessAdmin
13
13
  extend ActiveSupport::Concern
14
14
 
15
+ RegistersPermissions
16
+ .register_permissions(::Decidim::ParticipatoryProcesses::Admin::Concerns::ParticipatoryProcessAdmin,
17
+ ::Decidim::ParticipatoryProcesses::Permissions,
18
+ ::Decidim::Admin::Permissions)
19
+
15
20
  included do
16
21
  include Decidim::Admin::ParticipatorySpaceAdminContext
17
22
  helper_method :current_participatory_process
@@ -33,10 +38,7 @@ module Decidim
33
38
  alias_method :current_participatory_process, :current_participatory_space
34
39
 
35
40
  def permission_class_chain
36
- [
37
- Decidim::ParticipatoryProcesses::Permissions,
38
- Decidim::Admin::Permissions
39
- ]
41
+ PermissionsRegistry.chain_for(ParticipatoryProcessAdmin)
40
42
  end
41
43
  end
42
44
  end
@@ -8,10 +8,11 @@ module Decidim
8
8
  class ParticipatoryProcessesController < Decidim::ParticipatoryProcesses::Admin::ApplicationController
9
9
  include Decidim::Admin::ParticipatorySpaceAdminContext
10
10
  participatory_space_admin_layout only: [:edit]
11
+ include Decidim::Paginable
11
12
 
12
13
  helper ProcessGroupsForSelectHelper
13
14
 
14
- helper_method :current_participatory_process, :current_participatory_space
15
+ helper_method :current_participatory_process, :current_participatory_space, :query
15
16
 
16
17
  layout "decidim/admin/participatory_processes"
17
18
 
@@ -74,6 +75,25 @@ module Decidim
74
75
 
75
76
  private
76
77
 
78
+ def process_group
79
+ @process_group ||= ParticipatoryProcessGroup.find_by(id: params[:group_id])
80
+ end
81
+
82
+ def participatory_processes
83
+ @participatory_processes ||= Rectify::Query.merge(
84
+ ParticipatoryProcessesWithUserRole.for(current_user),
85
+ ParticipatoryProcessesByGroup.for(process_group)
86
+ )
87
+ end
88
+
89
+ def query
90
+ @query ||= participatory_processes.ransack(params[:q])
91
+ end
92
+
93
+ def collection
94
+ @collection ||= paginate(query.result)
95
+ end
96
+
77
97
  def current_participatory_process
78
98
  @current_participatory_process ||= collection.where(slug: params[:slug]).or(
79
99
  collection.where(id: params[:slug])
@@ -82,10 +102,6 @@ module Decidim
82
102
 
83
103
  alias current_participatory_space current_participatory_process
84
104
 
85
- def collection
86
- @collection ||= Decidim::ParticipatoryProcessesWithUserRole.for(current_user)
87
- end
88
-
89
105
  def participatory_process_params
90
106
  {
91
107
  id: params[:slug],
@@ -6,17 +6,18 @@ module Decidim
6
6
  # this engine inherit.
7
7
  class ApplicationController < Decidim::ApplicationController
8
8
  helper Decidim::ParticipatoryProcesses::ApplicationHelper
9
-
9
+ helper ParticipatoryProcessHelper
10
10
  include NeedsPermission
11
11
 
12
+ register_permissions(Decidim::ParticipatoryProcesses::ApplicationController,
13
+ ::Decidim::ParticipatoryProcesses::Permissions,
14
+ ::Decidim::Admin::Permissions,
15
+ ::Decidim::Permissions)
16
+
12
17
  private
13
18
 
14
19
  def permission_class_chain
15
- [
16
- Decidim::ParticipatoryProcesses::Permissions,
17
- Decidim::Admin::Permissions,
18
- Decidim::Permissions
19
- ]
20
+ ::Decidim.permissions_registry.chain_for(::Decidim::ParticipatoryProcesses::ApplicationController)
20
21
  end
21
22
 
22
23
  def permission_scope
@@ -21,7 +21,7 @@ module Decidim
21
21
  def participatory_processes
22
22
  @participatory_processes ||= if current_user
23
23
  return group.participatory_processes.published if current_user.admin
24
- group.participatory_processes.visible_for(current_user.id).published
24
+ group.participatory_processes.visible_for(current_user).published
25
25
  else
26
26
  group.participatory_processes.published.public_spaces
27
27
  end
@@ -7,20 +7,12 @@ module Decidim
7
7
  class ParticipatoryProcessesController < Decidim::ParticipatoryProcesses::ApplicationController
8
8
  include ParticipatorySpaceContext
9
9
  participatory_space_layout only: [:show, :statistics]
10
+ include FilterResource
10
11
 
11
- helper Decidim::AttachmentsHelper
12
- helper Decidim::IconHelper
13
- helper Decidim::WidgetUrlsHelper
14
- helper Decidim::SanitizeHelper
15
- helper Decidim::ResourceReferenceHelper
16
-
17
- helper ParticipatoryProcessHelper
18
-
19
- helper_method :collection, :promoted_participatory_processes, :participatory_processes, :stats, :metrics, :filter
20
- helper_method :process_count_by_filter
12
+ helper_method :collection, :promoted_participatory_processes, :participatory_processes, :stats, :metrics, :default_date_filter
21
13
 
22
14
  def index
23
- redirect_to "/404" if published_processes.none?
15
+ raise ActionController::RoutingError, "Not Found" if published_processes.none?
24
16
 
25
17
  enforce_permission_to :list, :process
26
18
  enforce_permission_to :list, :process_group
@@ -36,6 +28,18 @@ module Decidim
36
28
 
37
29
  private
38
30
 
31
+ def search_klass
32
+ ParticipatoryProcessSearch
33
+ end
34
+
35
+ def default_filter_params
36
+ {
37
+ scope_id: nil,
38
+ area_id: nil,
39
+ date: default_date_filter
40
+ }
41
+ end
42
+
39
43
  def organization_participatory_processes
40
44
  @organization_participatory_processes ||= OrganizationParticipatoryProcesses.new(current_organization).query
41
45
  end
@@ -52,28 +56,25 @@ module Decidim
52
56
  @published_processes ||= OrganizationPublishedParticipatoryProcesses.new(current_organization, current_user)
53
57
  end
54
58
 
55
- def collection
56
- @collection ||= (participatory_processes.to_a + participatory_process_groups).flatten
57
- end
58
-
59
- def filtered_participatory_processes(filter_name = filter)
60
- OrganizationPrioritizedParticipatoryProcesses.new(current_organization, filter_name, current_user)
59
+ def promoted_participatory_processes
60
+ @promoted_participatory_processes ||= published_processes | PromotedParticipatoryProcesses.new
61
61
  end
62
62
 
63
- def participatory_processes
64
- @participatory_processes ||= filtered_participatory_processes(filter).query.where(decidim_participatory_process_group_id: nil)
63
+ def collection
64
+ @collection ||= participatory_processes + participatory_process_groups
65
65
  end
66
66
 
67
- def promoted_participatory_processes
68
- @promoted_participatory_processes ||= filtered_participatory_processes("all") | PromotedParticipatoryProcesses.new
67
+ def filtered_processes
68
+ search.results
69
69
  end
70
70
 
71
- def filtered_participatory_process_groups(filter_name = filter)
72
- OrganizationPrioritizedParticipatoryProcessGroups.new(current_organization, filter_name, current_user)
71
+ def participatory_processes
72
+ @participatory_processes ||= filtered_processes.groupless
73
73
  end
74
74
 
75
75
  def participatory_process_groups
76
- @participatory_process_groups ||= filtered_participatory_process_groups(filter)
76
+ @participatory_process_groups ||= Decidim::ParticipatoryProcessGroup
77
+ .where(id: filtered_processes.grouped.group_ids)
77
78
  end
78
79
 
79
80
  def stats
@@ -84,28 +85,11 @@ module Decidim
84
85
  @metrics ||= ParticipatoryProcessMetricChartsPresenter.new(participatory_process: current_participatory_space)
85
86
  end
86
87
 
87
- def filter
88
- return default_filter unless ProcessFiltersCell::ALL_FILTERS.include?(params[:filter])
89
- @filter ||= params[:filter] || default_filter
90
- end
91
-
92
- def default_filter
93
- return "active" if process_count_by_filter["active"].positive?
94
- return "upcoming" if process_count_by_filter["upcoming"].positive?
95
- return "past" if process_count_by_filter["past"].positive?
96
- "active"
97
- end
98
-
99
- def process_count_by_filter
100
- return @process_count_by_filter if @process_count_by_filter
101
-
102
- @process_count_by_filter = %w(active upcoming past).inject({}) do |collection_by_filter, filter_name|
103
- processes = filtered_participatory_processes(filter_name).query.where(decidim_participatory_process_group_id: nil)
104
- groups = filtered_participatory_process_groups(filter_name)
105
- collection_by_filter.merge(filter_name.to_s => processes.count + groups.count)
106
- end
107
- @process_count_by_filter["all"] = @process_count_by_filter.values.sum
108
- @process_count_by_filter
88
+ def default_date_filter
89
+ return "active" if published_processes.any?(&:active?)
90
+ return "upcoming" if published_processes.any?(&:upcoming?)
91
+ return "past" if published_processes.any?(&:past?)
92
+ "all"
109
93
  end
110
94
  end
111
95
  end
@@ -9,43 +9,54 @@ module Decidim
9
9
  class ParticipatoryProcessForm < Form
10
10
  include TranslatableAttributes
11
11
 
12
- translatable_attribute :title, String
13
- translatable_attribute :subtitle, String
12
+ mimic :participatory_process
13
+
14
+ translatable_attribute :announcement, String
14
15
  translatable_attribute :description, String
15
- translatable_attribute :short_description, String
16
- translatable_attribute :meta_scope, String
17
16
  translatable_attribute :developer_group, String
18
17
  translatable_attribute :local_area, String
19
- translatable_attribute :target, String
18
+ translatable_attribute :meta_scope, String
20
19
  translatable_attribute :participatory_scope, String
21
20
  translatable_attribute :participatory_structure, String
22
- translatable_attribute :announcement, String
23
-
24
- mimic :participatory_process
21
+ translatable_attribute :subtitle, String
22
+ translatable_attribute :short_description, String
23
+ translatable_attribute :title, String
24
+ translatable_attribute :target, String
25
25
 
26
- attribute :start_date, Decidim::Attributes::LocalizedDate
27
- attribute :end_date, Decidim::Attributes::LocalizedDate
28
- attribute :slug, String
29
26
  attribute :hashtag, String
27
+ attribute :slug, String
28
+
29
+ attribute :area_id, Integer
30
+ attribute :participatory_process_group_id, Integer
31
+ attribute :scope_id, Integer
32
+
33
+ attribute :private_space, Boolean
30
34
  attribute :promoted, Boolean
31
35
  attribute :scopes_enabled, Boolean
32
- attribute :scope_id, Integer
33
- attribute :hero_image
34
- attribute :remove_hero_image
36
+ attribute :show_statistics, Boolean
37
+
38
+ attribute :end_date, Decidim::Attributes::LocalizedDate
39
+ attribute :start_date, Decidim::Attributes::LocalizedDate
40
+
35
41
  attribute :banner_image
42
+ attribute :hero_image
36
43
  attribute :remove_banner_image
37
- attribute :participatory_process_group_id, Integer
38
- attribute :show_statistics, Boolean
39
- attribute :private_space, Boolean
44
+ attribute :remove_hero_image
40
45
 
41
- validates :slug, presence: true, format: { with: Decidim::ParticipatoryProcess.slug_format }
42
- validates :title, :subtitle, :description, :short_description, translatable_presence: true
46
+ validates :area, presence: true, if: proc { |object| object.area_id.present? }
43
47
  validates :scope, presence: true, if: proc { |object| object.scope_id.present? }
48
+ validates :slug, presence: true, format: { with: Decidim::ParticipatoryProcess.slug_format }
44
49
 
45
50
  validate :slug_uniqueness
46
51
 
47
- validates :hero_image, file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } }, file_content_type: { allow: ["image/jpeg", "image/png"] }
48
- validates :banner_image, file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } }, file_content_type: { allow: ["image/jpeg", "image/png"] }
52
+ validates :title, :subtitle, :description, :short_description, translatable_presence: true
53
+
54
+ validates :banner_image,
55
+ file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } },
56
+ file_content_type: { allow: ["image/jpeg", "image/png"] }
57
+ validates :hero_image,
58
+ file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } },
59
+ file_content_type: { allow: ["image/jpeg", "image/png"] }
49
60
 
50
61
  def map_model(model)
51
62
  self.scope_id = model.decidim_scope_id
@@ -56,14 +67,25 @@ module Decidim
56
67
  @scope ||= current_organization.scopes.find_by(id: scope_id)
57
68
  end
58
69
 
70
+ def area
71
+ @area ||= current_organization.areas.find_by(id: area_id)
72
+ end
73
+
59
74
  def participatory_process_group
60
75
  Decidim::ParticipatoryProcessGroup.find_by(id: participatory_process_group_id)
61
76
  end
62
77
 
63
78
  private
64
79
 
80
+ def organization_participatory_processes
81
+ OrganizationParticipatoryProcesses.new(current_organization).query
82
+ end
83
+
65
84
  def slug_uniqueness
66
- return unless OrganizationParticipatoryProcesses.new(current_organization).query.where(slug: slug).where.not(id: context[:process_id]).any?
85
+ return unless organization_participatory_processes
86
+ .where(slug: slug)
87
+ .where.not(id: context[:process_id])
88
+ .any?
67
89
 
68
90
  errors.add(:slug, :taken)
69
91
  end