decidim-initiatives 0.11.2 → 0.12.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -6
  3. data/app/assets/config/decidim_initiatives_manifest.css +4 -0
  4. data/app/assets/config/decidim_initiatives_manifest.js +0 -2
  5. data/app/assets/stylesheet/decidim/initiatives/{application.css.scss → initiatives.scss} +0 -1
  6. data/app/cells/decidim/initiatives/initiative_cell.rb +19 -0
  7. data/app/cells/decidim/initiatives/initiative_m/author.erb +10 -0
  8. data/app/cells/decidim/initiatives/initiative_m/footer.erb +28 -0
  9. data/app/cells/decidim/initiatives/initiative_m/tags.erb +9 -0
  10. data/app/cells/decidim/initiatives/initiative_m_cell.rb +45 -0
  11. data/app/commands/decidim/initiatives/vote_initiative.rb +22 -0
  12. data/app/controllers/concerns/decidim/initiatives/admin/initiative_admin.rb +0 -4
  13. data/app/controllers/concerns/decidim/initiatives/needs_initiative.rb +18 -23
  14. data/app/controllers/decidim/initiatives/admin/application_controller.rb +13 -0
  15. data/app/controllers/decidim/initiatives/admin/committee_requests_controller.rb +4 -4
  16. data/app/controllers/decidim/initiatives/admin/initiative_attachments_controller.rb +1 -1
  17. data/app/controllers/decidim/initiatives/admin/initiatives_controller.rb +11 -11
  18. data/app/controllers/decidim/initiatives/admin/initiatives_type_scopes_controller.rb +5 -5
  19. data/app/controllers/decidim/initiatives/admin/initiatives_types_controller.rb +7 -7
  20. data/app/controllers/decidim/initiatives/application_controller.rb +30 -0
  21. data/app/controllers/decidim/initiatives/committee_requests_controller.rb +4 -5
  22. data/app/controllers/decidim/initiatives/create_initiative_controller.rb +3 -3
  23. data/app/controllers/decidim/initiatives/initiative_types_controller.rb +2 -2
  24. data/app/controllers/decidim/initiatives/initiative_votes_controller.rb +3 -17
  25. data/app/controllers/decidim/initiatives/initiatives_controller.rb +3 -7
  26. data/app/controllers/decidim/initiatives/initiatives_type_scopes_controller.rb +2 -2
  27. data/app/events/decidim/initiatives/endorse_initiative_event.rb +4 -45
  28. data/app/events/decidim/initiatives/milestone_completed_event.rb +17 -0
  29. data/app/models/decidim/initiative.rb +5 -4
  30. data/app/models/decidim/initiatives_committee_member.rb +1 -0
  31. data/app/permissions/decidim/initiatives/admin/permissions.rb +188 -0
  32. data/app/permissions/decidim/initiatives/permissions.rb +139 -0
  33. data/app/presenters/decidim/initiative_presenter.rb +16 -0
  34. data/app/views/decidim/initiatives/_initiative.html.erb +1 -35
  35. data/app/views/decidim/initiatives/admin/committee_requests/index.html.erb +2 -3
  36. data/app/views/decidim/initiatives/admin/initiatives/_form.html.erb +3 -3
  37. data/app/views/decidim/initiatives/admin/initiatives/edit.html.erb +8 -8
  38. data/app/views/decidim/initiatives/admin/initiatives/index.html.erb +4 -4
  39. data/app/views/decidim/initiatives/admin/initiatives_type_scopes/edit.html.erb +1 -1
  40. data/app/views/decidim/initiatives/admin/initiatives_types/_form.html.erb +0 -2
  41. data/app/views/decidim/initiatives/admin/initiatives_types/_initiative_type_scopes.html.erb +2 -2
  42. data/app/views/decidim/initiatives/admin/initiatives_types/edit.html.erb +1 -1
  43. data/app/views/decidim/initiatives/admin/initiatives_types/index.html.erb +2 -2
  44. data/app/views/decidim/initiatives/committee_requests/new.html.erb +3 -5
  45. data/app/views/decidim/initiatives/initiatives/_index_header.html.erb +2 -2
  46. data/app/views/decidim/initiatives/initiatives/_vote_button.html.erb +17 -15
  47. data/app/views/decidim/initiatives/initiatives/_vote_cabin.html.erb +1 -1
  48. data/app/views/decidim/initiatives/initiatives/index.html.erb +0 -1
  49. data/app/views/decidim/initiatives/initiatives/show.html.erb +0 -1
  50. data/app/views/decidim/initiatives/initiatives/signature_identities.html.erb +15 -13
  51. data/app/views/layouts/decidim/admin/initiative.html.erb +9 -6
  52. data/app/views/layouts/decidim/admin/initiatives.html.erb +11 -3
  53. data/app/views/layouts/decidim/initiative_creation.html.erb +0 -1
  54. data/config/locales/ca.yml +31 -11
  55. data/config/locales/en.yml +32 -11
  56. data/config/locales/es.yml +33 -12
  57. data/config/locales/eu.yml +32 -11
  58. data/config/locales/fi.yml +32 -11
  59. data/config/locales/fr.yml +32 -11
  60. data/config/locales/gl.yml +32 -11
  61. data/config/locales/it.yml +32 -11
  62. data/config/locales/nl.yml +32 -11
  63. data/config/locales/pl.yml +42 -13
  64. data/config/locales/pt-BR.yml +32 -11
  65. data/config/locales/pt.yml +32 -11
  66. data/config/locales/sv.yml +32 -11
  67. data/config/locales/uk.yml +43 -14
  68. data/db/migrate/20171109132011_enable_pg_trgm_extension_for_initiatives.rb +18 -0
  69. data/lib/decidim/initiatives/admin_engine.rb +1 -15
  70. data/lib/decidim/initiatives/engine.rb +6 -11
  71. data/lib/decidim/initiatives/participatory_space.rb +12 -4
  72. data/lib/decidim/initiatives/test/factories.rb +17 -1
  73. data/lib/decidim/initiatives/version.rb +1 -1
  74. metadata +27 -29
  75. data/app/controllers/concerns/decidim/initiatives/action_authorization.rb +0 -38
  76. data/app/models/decidim/initiatives/abilities/admin/attachments_ability.rb +0 -55
  77. data/app/models/decidim/initiatives/abilities/admin/committee_admin_ability.rb +0 -36
  78. data/app/models/decidim/initiatives/abilities/admin/committee_user_ability.rb +0 -50
  79. data/app/models/decidim/initiatives/abilities/admin/components_ability.rb +0 -24
  80. data/app/models/decidim/initiatives/abilities/admin/initiative_admin_ability.rb +0 -65
  81. data/app/models/decidim/initiatives/abilities/admin/initiative_type_ability.rb +0 -42
  82. data/app/models/decidim/initiatives/abilities/admin/initiative_user_ability.rb +0 -68
  83. data/app/models/decidim/initiatives/abilities/current_user_ability.rb +0 -58
  84. data/app/models/decidim/initiatives/abilities/everyone_ability.rb +0 -22
  85. data/app/models/decidim/initiatives/abilities/non_logged_user_ability.rb +0 -33
  86. data/app/models/decidim/initiatives/abilities/vote_ability.rb +0 -57
  87. data/app/views/decidim/initiatives/initiatives/_supports_count.html.erb +0 -6
  88. data/db/migrate/20171109132011_enable_pg_extensions.rb +0 -9
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  Decidim.register_participatory_space(:initiatives) do |participatory_space|
4
+ participatory_space.stylesheet = "decidim/initiatives/initiatives"
5
+
4
6
  participatory_space.context(:public) do |context|
5
7
  context.engine = Decidim::Initiatives::Engine
6
8
  context.layout = "layouts/decidim/initiative"
@@ -15,7 +17,13 @@ Decidim.register_participatory_space(:initiatives) do |participatory_space|
15
17
  Decidim::Initiative.where(organization: organization)
16
18
  end
17
19
 
20
+ participatory_space.register_resource(:initiative) do |resource|
21
+ resource.model_class_name = "Decidim::Initiative"
22
+ resource.card = "decidim/initiatives/initiative"
23
+ end
24
+
18
25
  participatory_space.model_class_name = "Decidim::Initiative"
26
+ participatory_space.permissions_class_name = "Decidim::Initiatives::Permissions"
19
27
 
20
28
  participatory_space.seeds do
21
29
  seeds_root = File.join(__dir__, "..", "..", "..", "db", "seeds")
@@ -38,20 +46,20 @@ Decidim.register_participatory_space(:initiatives) do |participatory_space|
38
46
  end
39
47
  end
40
48
 
41
- 7.times do
49
+ Decidim::Initiative.states.keys.each do |state|
42
50
  Decidim::Initiative.skip_callback(:save, :after, :notify_state_change, raise: false)
43
51
  Decidim::Initiative.skip_callback(:create, :after, :notify_creation, raise: false)
44
52
 
45
53
  initiative = Decidim::Initiative.create!(
46
54
  title: Decidim::Faker::Localized.sentence(3),
47
55
  description: Decidim::Faker::Localized.sentence(25),
48
- scoped_type: Decidim::InitiativesTypeScope.reorder("RANDOM()").first,
49
- state: "published",
56
+ scoped_type: Decidim::InitiativesTypeScope.reorder(Arel.sql("RANDOM()")).first,
57
+ state: state,
50
58
  signature_type: "online",
51
59
  signature_start_time: DateTime.current - 7.days,
52
60
  signature_end_time: DateTime.current + 7.days,
53
61
  published_at: DateTime.current - 7.days,
54
- author: Decidim::User.reorder("RANDOM()").first,
62
+ author: Decidim::User.reorder(Arel.sql("RANDOM()")).first,
55
63
  organization: organization
56
64
  )
57
65
 
@@ -25,7 +25,7 @@ FactoryBot.define do
25
25
  published_at { Time.current }
26
26
  state "published"
27
27
  signature_type "online"
28
- signature_start_time { Time.now.utc }
28
+ signature_start_time { Time.now.utc - 1.hour }
29
29
  signature_end_time { Time.now.utc + 120.days }
30
30
 
31
31
  scoped_type do
@@ -52,6 +52,10 @@ FactoryBot.define do
52
52
  signature_end_time nil
53
53
  end
54
54
 
55
+ trait :published do
56
+ state "published"
57
+ end
58
+
55
59
  trait :accepted do
56
60
  state "accepted"
57
61
  end
@@ -64,6 +68,14 @@ FactoryBot.define do
64
68
  state "rejected"
65
69
  end
66
70
 
71
+ trait :online do
72
+ signature_type "online"
73
+ end
74
+
75
+ trait :offline do
76
+ signature_type "offline"
77
+ end
78
+
67
79
  trait :acceptable do
68
80
  signature_start_time { Time.now.utc - 3.months }
69
81
  signature_end_time { Time.now.utc - 2.months }
@@ -104,6 +116,10 @@ FactoryBot.define do
104
116
  user { create(:user, :confirmed, organization: initiative.organization) }
105
117
  state "accepted"
106
118
 
119
+ trait :accepted do
120
+ state "accepted"
121
+ end
122
+
107
123
  trait :requested do
108
124
  state "requested"
109
125
  end
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-initiatives version.
5
5
  module Initiatives
6
6
  def self.version
7
- "0.11.2"
7
+ "0.12.0.pre"
8
8
  end
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-initiatives
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.2
4
+ version: 0.12.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Salvador Perez Garcia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-13 00:00:00.000000000 Z
11
+ date: 2018-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: decidim-admin
@@ -16,56 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.11.2
19
+ version: 0.12.0.pre
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.11.2
26
+ version: 0.12.0.pre
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: decidim-comments
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.11.2
33
+ version: 0.12.0.pre
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.11.2
40
+ version: 0.12.0.pre
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: decidim-core
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 0.11.2
47
+ version: 0.12.0.pre
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 0.11.2
54
+ version: 0.12.0.pre
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: decidim-verifications
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 0.11.2
61
+ version: 0.12.0.pre
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 0.11.2
68
+ version: 0.12.0.pre
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: kaminari
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - '='
116
116
  - !ruby/object:Gem::Version
117
- version: 0.11.2
117
+ version: 0.12.0.pre
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - '='
123
123
  - !ruby/object:Gem::Version
124
- version: 0.11.2
124
+ version: 0.12.0.pre
125
125
  description: Citizen initiatives plugin for decidim.
126
126
  email:
127
127
  - jsperezg@gmail.com
@@ -132,6 +132,7 @@ files:
132
132
  - README.md
133
133
  - Rakefile
134
134
  - app/assets/config/admin_decidim_initiatives_manifest.js
135
+ - app/assets/config/decidim_initiatives_manifest.css
135
136
  - app/assets/config/decidim_initiatives_manifest.js
136
137
  - app/assets/javascripts/decidim/initiatives/admin/invite_users.js
137
138
  - app/assets/javascripts/decidim/initiatives/application.js
@@ -139,11 +140,16 @@ files:
139
140
  - app/assets/javascripts/decidim/initiatives/scoped_type.js
140
141
  - app/assets/javascripts/decidim/initiatives/social_share.js
141
142
  - app/assets/stylesheet/decidim/initiatives/admin.css.scss
142
- - app/assets/stylesheet/decidim/initiatives/application.css.scss
143
+ - app/assets/stylesheet/decidim/initiatives/initiatives.scss
143
144
  - app/assets/stylesheet/decidim/initiatives/popularity_item.css.scss
144
145
  - app/assets/stylesheet/decidim/initiatives/print-initiative.css.scss
145
146
  - app/assets/stylesheet/decidim/initiatives/social_share.css.scss
146
147
  - app/assets/stylesheet/decidim/initiatives/statistics.css.scss
148
+ - app/cells/decidim/initiatives/initiative_cell.rb
149
+ - app/cells/decidim/initiatives/initiative_m/author.erb
150
+ - app/cells/decidim/initiatives/initiative_m/footer.erb
151
+ - app/cells/decidim/initiatives/initiative_m/tags.erb
152
+ - app/cells/decidim/initiatives/initiative_m_cell.rb
147
153
  - app/commands/decidim/initiatives/admin/create_initiative_type.rb
148
154
  - app/commands/decidim/initiatives/admin/create_initiative_type_scope.rb
149
155
  - app/commands/decidim/initiatives/admin/publish_initiative.rb
@@ -158,7 +164,6 @@ files:
158
164
  - app/commands/decidim/initiatives/vote_initiative.rb
159
165
  - app/constraints/decidim/initiatives/current_component.rb
160
166
  - app/constraints/decidim/initiatives/current_initiative.rb
161
- - app/controllers/concerns/decidim/initiatives/action_authorization.rb
162
167
  - app/controllers/concerns/decidim/initiatives/admin/initiative_admin.rb
163
168
  - app/controllers/concerns/decidim/initiatives/needs_initiative.rb
164
169
  - app/controllers/concerns/decidim/initiatives/orderable.rb
@@ -171,6 +176,7 @@ files:
171
176
  - app/controllers/decidim/initiatives/admin/initiatives_controller.rb
172
177
  - app/controllers/decidim/initiatives/admin/initiatives_type_scopes_controller.rb
173
178
  - app/controllers/decidim/initiatives/admin/initiatives_types_controller.rb
179
+ - app/controllers/decidim/initiatives/application_controller.rb
174
180
  - app/controllers/decidim/initiatives/committee_requests_controller.rb
175
181
  - app/controllers/decidim/initiatives/create_initiative_controller.rb
176
182
  - app/controllers/decidim/initiatives/initiative_types_controller.rb
@@ -180,6 +186,7 @@ files:
180
186
  - app/controllers/decidim/initiatives/initiatives_type_scopes_controller.rb
181
187
  - app/events/decidim/initiatives/create_initiative_event.rb
182
188
  - app/events/decidim/initiatives/endorse_initiative_event.rb
189
+ - app/events/decidim/initiatives/milestone_completed_event.rb
183
190
  - app/forms/decidim/initiatives/admin/initiative_form.rb
184
191
  - app/forms/decidim/initiatives/admin/initiative_type_form.rb
185
192
  - app/forms/decidim/initiatives/admin/initiative_type_scope_form.rb
@@ -191,21 +198,13 @@ files:
191
198
  - app/helpers/decidim/initiatives/initiatives_helper.rb
192
199
  - app/mailers/decidim/initiatives/initiatives_mailer.rb
193
200
  - app/models/decidim/initiative.rb
194
- - app/models/decidim/initiatives/abilities/admin/attachments_ability.rb
195
- - app/models/decidim/initiatives/abilities/admin/committee_admin_ability.rb
196
- - app/models/decidim/initiatives/abilities/admin/committee_user_ability.rb
197
- - app/models/decidim/initiatives/abilities/admin/components_ability.rb
198
- - app/models/decidim/initiatives/abilities/admin/initiative_admin_ability.rb
199
- - app/models/decidim/initiatives/abilities/admin/initiative_type_ability.rb
200
- - app/models/decidim/initiatives/abilities/admin/initiative_user_ability.rb
201
- - app/models/decidim/initiatives/abilities/current_user_ability.rb
202
- - app/models/decidim/initiatives/abilities/everyone_ability.rb
203
- - app/models/decidim/initiatives/abilities/non_logged_user_ability.rb
204
- - app/models/decidim/initiatives/abilities/vote_ability.rb
205
201
  - app/models/decidim/initiatives_committee_member.rb
206
202
  - app/models/decidim/initiatives_type.rb
207
203
  - app/models/decidim/initiatives_type_scope.rb
208
204
  - app/models/decidim/initiatives_vote.rb
205
+ - app/permissions/decidim/initiatives/admin/permissions.rb
206
+ - app/permissions/decidim/initiatives/permissions.rb
207
+ - app/presenters/decidim/initiative_presenter.rb
209
208
  - app/presenters/decidim/initiatives/admin_log/initiative_presenter.rb
210
209
  - app/presenters/decidim/initiatives/initiative_stats_presenter.rb
211
210
  - app/queries/decidim/initiatives/admin/manageable_initiatives.rb
@@ -258,7 +257,6 @@ files:
258
257
  - app/views/decidim/initiatives/initiatives/_result.html.erb
259
258
  - app/views/decidim/initiatives/initiatives/_statistics.html.erb
260
259
  - app/views/decidim/initiatives/initiatives/_supports.html.erb
261
- - app/views/decidim/initiatives/initiatives/_supports_count.html.erb
262
260
  - app/views/decidim/initiatives/initiatives/_tags.html.erb
263
261
  - app/views/decidim/initiatives/initiatives/_vote_button.html.erb
264
262
  - app/views/decidim/initiatives/initiatives/_vote_cabin.html.erb
@@ -322,7 +320,7 @@ files:
322
320
  - db/migrate/20171031183855_add_offline_votes_to_initiative.rb
323
321
  - db/migrate/20171102094250_drop_initiative_description_index.rb
324
322
  - db/migrate/20171102094556_create_initiative_description_index.rb
325
- - db/migrate/20171109132011_enable_pg_extensions.rb
323
+ - db/migrate/20171109132011_enable_pg_trgm_extension_for_initiatives.rb
326
324
  - db/migrate/20171204094639_drop_decidim_initiatives_extra_data.rb
327
325
  - db/migrate/20171204103119_remove_requires_validation_from_decidim_initiatives_type.rb
328
326
  - db/migrate/20171214161410_add_unique_on_votes.rb
@@ -353,9 +351,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
353
351
  version: 2.3.1
354
352
  required_rubygems_version: !ruby/object:Gem::Requirement
355
353
  requirements:
356
- - - ">="
354
+ - - ">"
357
355
  - !ruby/object:Gem::Version
358
- version: '0'
356
+ version: 1.3.1
359
357
  requirements: []
360
358
  rubyforge_project:
361
359
  rubygems_version: 2.7.6
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "active_support/concern"
4
-
5
- module Decidim
6
- module Initiatives
7
- module ActionAuthorization
8
- extend ActiveSupport::Concern
9
-
10
- included do
11
- helper_method :action_authorization
12
- end
13
-
14
- # Public: Returns the authorization object for an authorization.
15
- #
16
- # action_name - The action to authorize against.
17
- #
18
- # Returns an AuthorizationStatus
19
- def action_authorization(action_name)
20
- return AuthorizationStatus.new(:ok) if can?(action_name.to_sym, Initiative)
21
-
22
- AuthorizationStatus.new(:denied)
23
- end
24
-
25
- class AuthorizationStatus
26
- attr_reader :code
27
-
28
- def initialize(code)
29
- @code = code.to_sym
30
- end
31
-
32
- def ok?
33
- @code == :ok
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,55 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Initiatives
5
- module Abilities
6
- module Admin
7
- # Defines the abilities related to user able to administer attachments
8
- # for an initiative.
9
- # Intended to be used with `cancancan`.
10
- class AttachmentsAbility
11
- include CanCan::Ability
12
-
13
- attr_reader :user, :context
14
-
15
- def initialize(user, context)
16
- return unless user
17
-
18
- @user = user
19
- @context = context
20
-
21
- define_abilities
22
- end
23
-
24
- private
25
-
26
- def define_abilities
27
- return if user.admin?
28
- return unless context[:current_participatory_space].is_a? Initiative
29
-
30
- can :read, Decidim::Attachment do |attachment|
31
- attachment.attached_to.is_a?(Decidim::Initiative) &&
32
- attachment.attached_to.has_authorship?(user)
33
- end
34
-
35
- can :create, Decidim::Attachment if has_initiatives?(user)
36
- can :update, Decidim::Attachment do |attachment|
37
- attachment.attached_to.is_a?(Decidim::Initiative) &&
38
- attachment.attached_to.has_authorship?(user)
39
- end
40
-
41
- can :destroy, Decidim::Attachment do |attachment|
42
- attachment.attached_to.is_a?(Decidim::Initiative) &&
43
- attachment.attached_to.has_authorship?(user)
44
- end
45
- end
46
-
47
- def has_initiatives?(user)
48
- initiatives = InitiativesCreated.by(user) | InitiativesPromoted.by(user)
49
- initiatives.any?
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Initiatives
5
- module Abilities
6
- module Admin
7
- # Defines the abilities related to admin users able to administer
8
- # promotal committee membership requests.
9
- # Intended to be used with `cancancan`.
10
- class CommitteeAdminAbility
11
- include CanCan::Ability
12
-
13
- attr_reader :user, :context
14
-
15
- def initialize(user, context)
16
- return unless user&.admin?
17
-
18
- @user = user
19
- @context = context
20
-
21
- can :manage_membership, Decidim::Initiative
22
- can :index, InitiativesCommitteeMember
23
-
24
- can :approve, InitiativesCommitteeMember do |request|
25
- !request.accepted?
26
- end
27
-
28
- can :revoke, InitiativesCommitteeMember do |request|
29
- !request.rejected?
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Initiatives
5
- module Abilities
6
- module Admin
7
- # Defines the abilities related to plain users able to administer
8
- # promotal committee membership requests.
9
- # Intended to be used with `cancancan`.
10
- class CommitteeUserAbility
11
- include CanCan::Ability
12
-
13
- attr_reader :user, :context
14
-
15
- def initialize(user, context)
16
- return unless user
17
- return if user&.admin?
18
-
19
- @user = user
20
- @context = context
21
-
22
- can :manage_membership, Decidim::Initiative do |initiative|
23
- initiative.has_authorship?(user)
24
- end
25
-
26
- can :index, InitiativesCommitteeMember if has_initiatives?(user)
27
- can :approve, InitiativesCommitteeMember do |request|
28
- request.initiative.has_authorship?(user) &&
29
- !request.initiative.published? &&
30
- !request.accepted?
31
- end
32
-
33
- can :revoke, InitiativesCommitteeMember do |request|
34
- request.initiative.has_authorship?(user) &&
35
- !request.initiative.published? &&
36
- !request.rejected?
37
- end
38
- end
39
-
40
- private
41
-
42
- def has_initiatives?(user)
43
- initiatives = InitiativesCreated.by(user) | InitiativesPromoted.by(user)
44
- initiatives.any?
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end