decidim-participatory_processes 0.9.3 → 0.10.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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/app/commands/decidim/participatory_processes/admin/activate_participatory_process_step.rb +34 -4
  3. data/app/commands/decidim/participatory_processes/admin/create_participatory_process.rb +25 -0
  4. data/app/commands/decidim/participatory_processes/admin/create_participatory_process_admin.rb +36 -5
  5. data/app/commands/decidim/participatory_processes/admin/create_participatory_process_step.rb +3 -1
  6. data/app/commands/decidim/participatory_processes/admin/destroy_participatory_process_admin.rb +53 -0
  7. data/app/commands/decidim/participatory_processes/admin/destroy_participatory_process_step.rb +16 -5
  8. data/app/commands/decidim/participatory_processes/admin/publish_participatory_process.rb +9 -3
  9. data/app/commands/decidim/participatory_processes/admin/unpublish_participatory_process.rb +9 -3
  10. data/app/commands/decidim/participatory_processes/admin/update_participatory_process.rb +7 -1
  11. data/app/commands/decidim/participatory_processes/admin/update_participatory_process_admin.rb +12 -1
  12. data/app/commands/decidim/participatory_processes/admin/update_participatory_process_step.rb +23 -7
  13. data/app/controllers/decidim/participatory_processes/admin/participatory_process_attachment_collections_controller.rb +27 -0
  14. data/app/controllers/decidim/participatory_processes/admin/participatory_process_publications_controller.rb +2 -2
  15. data/app/controllers/decidim/participatory_processes/admin/participatory_process_step_activations_controller.rb +1 -1
  16. data/app/controllers/decidim/participatory_processes/admin/participatory_process_steps_controller.rb +1 -1
  17. data/app/controllers/decidim/participatory_processes/admin/participatory_process_user_roles_controller.rb +6 -4
  18. data/app/controllers/decidim/participatory_processes/application_controller.rb +11 -0
  19. data/app/controllers/decidim/participatory_processes/participatory_process_groups_controller.rb +1 -1
  20. data/app/controllers/decidim/participatory_processes/participatory_process_steps_controller.rb +1 -1
  21. data/app/controllers/decidim/participatory_processes/participatory_processes_controller.rb +4 -3
  22. data/app/helpers/decidim/participatory_processes/application_helper.rb +23 -0
  23. data/app/models/decidim/participatory_process.rb +8 -0
  24. data/app/models/decidim/participatory_process_step.rb +9 -0
  25. data/app/presenters/decidim/participatory_processes/admin_log/participatory_process_presenter.rb +56 -0
  26. data/app/presenters/decidim/participatory_processes/admin_log/participatory_process_user_role_presenter.rb +53 -0
  27. data/app/presenters/decidim/participatory_processes/admin_log/step_presenter.rb +40 -0
  28. data/app/presenters/decidim/participatory_processes/admin_log/value_types/role_presenter.rb +22 -0
  29. data/app/types/decidim/participatory_processes/participatory_process_step_type.rb +25 -0
  30. data/app/types/decidim/participatory_processes/participatory_process_type.rb +15 -0
  31. data/app/views/decidim/participatory_processes/participatory_process_groups/show.html.erb +1 -0
  32. data/app/views/decidim/participatory_processes/participatory_processes/show.html.erb +2 -0
  33. data/app/views/layouts/decidim/admin/participatory_process.html.erb +15 -3
  34. data/config/locales/ca.yml +31 -0
  35. data/config/locales/en.yml +31 -0
  36. data/config/locales/es.yml +32 -1
  37. data/config/locales/eu.yml +31 -0
  38. data/config/locales/fi.yml +31 -0
  39. data/config/locales/fr.yml +47 -16
  40. data/config/locales/gl.yml +31 -0
  41. data/config/locales/it.yml +31 -0
  42. data/config/locales/nl.yml +31 -0
  43. data/config/locales/pl.yml +31 -5
  44. data/config/locales/pt-BR.yml +31 -0
  45. data/config/locales/pt.yml +31 -0
  46. data/config/locales/sv.yml +31 -0
  47. data/config/locales/uk.yml +9 -5
  48. data/db/migrate/20170220110740_remove_steps_short_description.rb +1 -1
  49. data/db/migrate/20171215081244_add_weight_to_attachments.rb +7 -0
  50. data/db/migrate/20171215141722_add_attachment_collection_to_attachments.rb +9 -0
  51. data/db/migrate/20180125102537_add_reference_to_processes.rb +7 -0
  52. data/lib/decidim/participatory_processes.rb +4 -0
  53. data/lib/decidim/participatory_processes/admin_engine.rb +1 -0
  54. data/lib/decidim/participatory_processes/participatory_space.rb +16 -0
  55. data/lib/decidim/participatory_processes/test/factories.rb +6 -0
  56. data/lib/decidim/participatory_processes/version.rb +1 -1
  57. metadata +22 -10
  58. data/app/commands/decidim/participatory_processes/admin/deactivate_participatory_process_step.rb +0 -40
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 46c62ca7b6377810d86730844d4c8c29e2443f8adda9dac0a36d870a4d5910d3
4
- data.tar.gz: fbb8dfe9daec6d6088f20ff0f0bed5d6f54ecb24a017b408ff883e1f5d4e54ee
3
+ metadata.gz: 99cde756d7e4a5e205ebecf7eed66faf280be18f26f2cd66ae18980e4c0d895b
4
+ data.tar.gz: f005852ef82d47bd80fac02f71b077a2f8bef1ca682c52f7759da92cd928e066
5
5
  SHA512:
6
- metadata.gz: aab639ca26ac2d63534a5a3cc153fe220eb7ef20e716878346f357f41824ef657a2f3738831aebe7e0b3d87de17be1d8561e8e6066b0d0883173fe313642f04e
7
- data.tar.gz: b50de049736136775afcb9c5777f19d2d731e0d7379e6329c2ed249c7b7bcc31ab6aadd67c09253f7a846c128353c3db76911e1886e52bad539423d417cfb064
6
+ metadata.gz: 82a390448205bf7e1484c99990fb1984138468cc4e74e7f9637bf9ede151574629b4b68af461992b580f316c498b50e2feb2f73a6ce15a091a4f442ee74b08e7
7
+ data.tar.gz: 207c880ae75785e9128dc9afdf13fc396f39dfc10840643c84df4c1a2b4f743d7747c5d599ca1499471e380ef8f6908ce89ff1888efebf0c008f13bcb395147f
@@ -9,8 +9,10 @@ module Decidim
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # step - A ParticipatoryProcessStep that will be activated
12
- def initialize(step)
12
+ # current_user - the user performing the action
13
+ def initialize(step, current_user)
13
14
  @step = step
15
+ @current_user = current_user
14
16
  end
15
17
 
16
18
  # Executes the command. Broadcasts these events:
@@ -26,6 +28,7 @@ module Decidim
26
28
  deactivate_active_steps
27
29
  activate_step
28
30
  notify_followers
31
+ publish_step_settings_change
29
32
  end
30
33
 
31
34
  broadcast(:ok)
@@ -33,16 +36,23 @@ module Decidim
33
36
 
34
37
  private
35
38
 
36
- attr_reader :step
39
+ attr_reader :step, :current_user
37
40
 
38
41
  def deactivate_active_steps
39
42
  step.participatory_process.steps.where(active: true).each do |step|
40
- step.update_attributes!(active: false)
43
+ @previous_step = step if step.active?
44
+ step.update!(active: false)
41
45
  end
42
46
  end
43
47
 
44
48
  def activate_step
45
- step.update_attributes!(active: true)
49
+ Decidim.traceability.perform_action!(
50
+ :activate,
51
+ step,
52
+ current_user
53
+ ) do
54
+ step.update!(active: true)
55
+ end
46
56
  end
47
57
 
48
58
  def notify_followers
@@ -53,6 +63,26 @@ module Decidim
53
63
  recipient_ids: step.participatory_process.followers.pluck(:id)
54
64
  )
55
65
  end
66
+
67
+ def publish_step_settings_change
68
+ step.participatory_process.features.each do |feature|
69
+ Decidim::SettingsChange.publish(
70
+ feature,
71
+ previous_step_settings(feature).to_h,
72
+ current_step_settings(feature).to_h
73
+ )
74
+ end
75
+ end
76
+
77
+ def current_step_settings(feature)
78
+ feature.step_settings.fetch(step.id.to_s)
79
+ end
80
+
81
+ def previous_step_settings(feature)
82
+ return {} unless @previous_step
83
+
84
+ feature.step_settings.fetch(@previous_step.id.to_s)
85
+ end
56
86
  end
57
87
  end
58
88
  end
@@ -24,6 +24,7 @@ module Decidim
24
24
  process = create_participatory_process
25
25
 
26
26
  if process.persisted?
27
+ add_admins_as_followers(process)
27
28
  broadcast(:ok, process)
28
29
  else
29
30
  form.errors.add(:hero_image, process.errors[:hero_image]) if process.errors.include? :hero_image
@@ -65,6 +66,8 @@ module Decidim
65
66
  transaction do
66
67
  process.save!
67
68
 
69
+ log_process_creation(process)
70
+
68
71
  process.steps.create!(
69
72
  title: TranslationsHelper.multi_translation(
70
73
  "decidim.admin.participatory_process_steps.default_title",
@@ -76,6 +79,28 @@ module Decidim
76
79
  process
77
80
  end
78
81
  end
82
+
83
+ def log_process_creation(process)
84
+ Decidim::ActionLogger.log(
85
+ "create",
86
+ form.current_user,
87
+ process,
88
+ process.versions.last.id
89
+ )
90
+ end
91
+
92
+ def add_admins_as_followers(process)
93
+ process.organization.admins.each do |admin|
94
+ form = Decidim::FollowForm
95
+ .from_params(followable_gid: process.to_signed_global_id.to_s)
96
+ .with_context(
97
+ current_organization: process.organization,
98
+ current_user: admin
99
+ )
100
+
101
+ Decidim::CreateFollow.new(form, admin).call
102
+ end
103
+ end
79
104
  end
80
105
  end
81
106
  end
@@ -9,6 +9,7 @@ module Decidim
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # form - A form object with the params.
12
+ # current_user - the user performing this action
12
13
  # participatory_process - The ParticipatoryProcess that will hold the
13
14
  # user role
14
15
  def initialize(form, current_user, participatory_process)
@@ -27,8 +28,9 @@ module Decidim
27
28
  return broadcast(:invalid) if form.invalid?
28
29
 
29
30
  ActiveRecord::Base.transaction do
30
- create_or_invite_user
31
- create_role
31
+ @user = existing_user || new_user
32
+ existing_role || create_role
33
+ add_admin_as_follower
32
34
  end
33
35
 
34
36
  broadcast(:ok)
@@ -42,15 +44,31 @@ module Decidim
42
44
  attr_reader :form, :participatory_process, :current_user, :user
43
45
 
44
46
  def create_role
45
- Decidim::ParticipatoryProcessUserRole.find_or_create_by!(
47
+ extra_info = {
48
+ resource: {
49
+ title: user.name
50
+ }
51
+ }
52
+ role_params = {
46
53
  role: form.role.to_sym,
47
54
  user: user,
48
55
  participatory_process: @participatory_process
56
+ }
57
+
58
+ Decidim.traceability.create!(
59
+ Decidim::ParticipatoryProcessUserRole,
60
+ current_user,
61
+ role_params,
62
+ extra_info
49
63
  )
50
64
  end
51
65
 
52
- def create_or_invite_user
53
- @user ||= existing_user || new_user
66
+ def existing_role
67
+ Decidim::ParticipatoryProcessUserRole.where(
68
+ role: form.role.to_sym,
69
+ user: user,
70
+ participatory_process: @participatory_process
71
+ ).first
54
72
  end
55
73
 
56
74
  def existing_user
@@ -87,6 +105,19 @@ module Decidim
87
105
  return "invite_admin" if form.role == "admin"
88
106
  "invite_collaborator"
89
107
  end
108
+
109
+ def add_admin_as_follower
110
+ return if user.follows?(participatory_process)
111
+
112
+ form = Decidim::FollowForm
113
+ .from_params(followable_gid: participatory_process.to_signed_global_id.to_s)
114
+ .with_context(
115
+ current_organization: participatory_process.organization,
116
+ current_user: user
117
+ )
118
+
119
+ Decidim::CreateFollow.new(form, user).call
120
+ end
90
121
  end
91
122
  end
92
123
  end
@@ -34,7 +34,9 @@ module Decidim
34
34
  attr_reader :form
35
35
 
36
36
  def create_participatory_process_step
37
- ParticipatoryProcessStep.create!(
37
+ Decidim.traceability.create!(
38
+ ParticipatoryProcessStep,
39
+ @form.current_user,
38
40
  title: form.title,
39
41
  description: form.description,
40
42
  start_date: form.start_date,
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ParticipatoryProcesses
5
+ module Admin
6
+ # A command with all the business logic when destroying a participatory
7
+ # process admin in the system.
8
+ class DestroyParticipatoryProcessAdmin < Rectify::Command
9
+ # Public: Initializes the command.
10
+ #
11
+ # role - the ParticipatoryProcessUserRole to destroy
12
+ # current_user - the user performing this action
13
+ def initialize(role, current_user)
14
+ @role = role
15
+ @current_user = current_user
16
+ end
17
+
18
+ # Executes the command. Broadcasts these events:
19
+ #
20
+ # - :ok when everything is valid.
21
+ # - :invalid if the form wasn't valid and we couldn't proceed.
22
+ #
23
+ # Returns nothing.
24
+ def call
25
+ destroy_role!
26
+ broadcast(:ok)
27
+ end
28
+
29
+ private
30
+
31
+ attr_reader :role, :current_user
32
+
33
+ def destroy_role!
34
+ extra_info = {
35
+ resource: {
36
+ title: role.user.name
37
+ }
38
+ }
39
+
40
+ Decidim.traceability.perform_action!(
41
+ "delete",
42
+ role,
43
+ current_user,
44
+ extra_info
45
+ ) do
46
+ role.destroy!
47
+ role
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -8,9 +8,11 @@ module Decidim
8
8
  # Public: Initializes the command.
9
9
  #
10
10
  # step - A ParticipatoryProcessStep that will be deactivated
11
- def initialize(step)
11
+ # current_user - the user performing the action
12
+ def initialize(step, current_user)
12
13
  @step = step
13
14
  @participatory_process = step.participatory_process
15
+ @current_user = current_user
14
16
  end
15
17
 
16
18
  # Executes the command. Broadcasts these events:
@@ -22,19 +24,28 @@ module Decidim
22
24
  def call
23
25
  return broadcast(:invalid, :active_step) if active_step?
24
26
 
25
- @step.destroy!
26
- reorder_steps
27
+ transaction do
28
+ Decidim.traceability.perform_action!(:delete, step, current_user) do
29
+ step.destroy!
30
+ step
31
+ end
32
+
33
+ reorder_steps
34
+ end
35
+
27
36
  broadcast(:ok)
28
37
  end
29
38
 
30
39
  private
31
40
 
41
+ attr_reader :step, :participatory_process, :current_user
42
+
32
43
  def active_step?
33
- @participatory_process.steps.count > 1 && @step.active?
44
+ participatory_process.steps.count > 1 && step.active?
34
45
  end
35
46
 
36
47
  def reorder_steps
37
- steps = @participatory_process.steps.reload
48
+ steps = participatory_process.steps.reload
38
49
 
39
50
  ReorderParticipatoryProcessSteps
40
51
  .new(steps, steps.map(&:id))
@@ -8,8 +8,10 @@ module Decidim
8
8
  # Public: Initializes the command.
9
9
  #
10
10
  # process - A ParticipatoryProcess that will be published
11
- def initialize(process)
11
+ # current_user - the user performing this action
12
+ def initialize(process, current_user)
12
13
  @process = process
14
+ @current_user = current_user
13
15
  end
14
16
 
15
17
  # Executes the command. Broadcasts these events:
@@ -21,13 +23,17 @@ module Decidim
21
23
  def call
22
24
  return broadcast(:invalid) if process.nil? || process.published?
23
25
 
24
- process.publish!
26
+ transaction do
27
+ Decidim.traceability.perform_action!("publish", process, current_user) do
28
+ process.publish!
29
+ end
30
+ end
25
31
  broadcast(:ok)
26
32
  end
27
33
 
28
34
  private
29
35
 
30
- attr_reader :process
36
+ attr_reader :process, :current_user
31
37
  end
32
38
  end
33
39
  end
@@ -8,8 +8,10 @@ module Decidim
8
8
  # Public: Initializes the command.
9
9
  #
10
10
  # process - A ParticipatoryProcess that will be unpublished
11
- def initialize(process)
11
+ # current_user - the user performing this action
12
+ def initialize(process, current_user)
12
13
  @process = process
14
+ @current_user = current_user
13
15
  end
14
16
 
15
17
  # Executes the command. Broadcasts these events:
@@ -21,13 +23,17 @@ module Decidim
21
23
  def call
22
24
  return broadcast(:invalid) if process.nil? || !process.published?
23
25
 
24
- process.unpublish!
26
+ transaction do
27
+ Decidim.traceability.perform_action!("unpublish", process, current_user) do
28
+ process.unpublish!
29
+ end
30
+ end
25
31
  broadcast(:ok)
26
32
  end
27
33
 
28
34
  private
29
35
 
30
- attr_reader :process
36
+ attr_reader :process, :current_user
31
37
  end
32
38
  end
33
39
  end
@@ -40,7 +40,13 @@ module Decidim
40
40
 
41
41
  def update_participatory_process
42
42
  @participatory_process.assign_attributes(attributes)
43
- @participatory_process.save! if @participatory_process.valid?
43
+ if @participatory_process.valid?
44
+ @participatory_process.save!
45
+
46
+ Decidim.traceability.perform_action!(:update, @participatory_process, form.current_user) do
47
+ @participatory_process
48
+ end
49
+ end
44
50
  end
45
51
 
46
52
  def attributes
@@ -35,7 +35,18 @@ module Decidim
35
35
  attr_reader :form, :user_role
36
36
 
37
37
  def update_role!
38
- user_role.update_attributes!(role: form.role)
38
+ extra_info = {
39
+ resource: {
40
+ title: user_role.user.name
41
+ }
42
+ }
43
+
44
+ Decidim.traceability.update!(
45
+ user_role,
46
+ form.current_user,
47
+ { role: form.role },
48
+ extra_info
49
+ )
39
50
  end
40
51
  end
41
52
  end
@@ -6,13 +6,13 @@ module Decidim
6
6
  # A command with all the business logic when creating a new participatory
7
7
  # process in the system.
8
8
  class UpdateParticipatoryProcessStep < Rectify::Command
9
- attr_reader :participatory_process_step
9
+ attr_reader :step
10
10
  # Public: Initializes the command.
11
11
  #
12
- # participatory_process_step - the ParticipatoryProcessStep to update
12
+ # step - the ParticipatoryProcessStep to update
13
13
  # form - A form object with the params.
14
- def initialize(participatory_process_step, form)
15
- @participatory_process_step = participatory_process_step
14
+ def initialize(step, form)
15
+ @step = step
16
16
  @form = form
17
17
  end
18
18
 
@@ -25,7 +25,8 @@ module Decidim
25
25
  def call
26
26
  return broadcast(:invalid) if form.invalid?
27
27
 
28
- update_participatory_process_step
28
+ update_step
29
+ notify_followers
29
30
  broadcast(:ok)
30
31
  end
31
32
 
@@ -33,8 +34,12 @@ module Decidim
33
34
 
34
35
  attr_reader :form
35
36
 
36
- def update_participatory_process_step
37
- participatory_process_step.update_attributes!(attributes)
37
+ def update_step
38
+ Decidim.traceability.update!(
39
+ step,
40
+ form.current_user,
41
+ attributes
42
+ )
38
43
  end
39
44
 
40
45
  def attributes
@@ -45,6 +50,17 @@ module Decidim
45
50
  description: form.description
46
51
  }
47
52
  end
53
+
54
+ def notify_followers
55
+ return unless step.saved_change_to_start_date || step.saved_change_to_end_date
56
+
57
+ Decidim::EventsManager.publish(
58
+ event: "decidim.events.participatory_process.step_changed",
59
+ event_class: Decidim::ParticipatoryProcessStepChangedEvent,
60
+ resource: step,
61
+ recipient_ids: step.participatory_process.followers.pluck(:id)
62
+ )
63
+ end
48
64
  end
49
65
  end
50
66
  end