decidim-initiatives 0.9.1 → 0.11.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (176) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -16
  3. data/Rakefile +1 -1
  4. data/app/assets/javascripts/decidim/initiatives/admin/invite_users.js +7 -8
  5. data/app/assets/javascripts/decidim/initiatives/application.js +1 -1
  6. data/app/assets/javascripts/decidim/initiatives/identity_selector_dialog.js +6 -9
  7. data/app/assets/javascripts/decidim/initiatives/scoped_type.js +8 -12
  8. data/app/assets/stylesheet/decidim/initiatives/admin.css.scss +10 -11
  9. data/app/assets/stylesheet/decidim/initiatives/application.css.scss +19 -19
  10. data/app/assets/stylesheet/decidim/initiatives/popularity_item.css.scss +40 -24
  11. data/app/assets/stylesheet/decidim/initiatives/print-initiative.css.scss +26 -26
  12. data/app/assets/stylesheet/decidim/initiatives/social_share.css.scss +5 -4
  13. data/app/assets/stylesheet/decidim/initiatives/statistics.css.scss +4 -4
  14. data/app/commands/decidim/initiatives/admin/create_initiative_type.rb +1 -4
  15. data/app/commands/decidim/initiatives/admin/publish_initiative.rb +44 -0
  16. data/app/commands/decidim/initiatives/admin/send_initiative_to_technical_validation.rb +42 -0
  17. data/app/commands/decidim/initiatives/admin/unpublish_initiative.rb +44 -0
  18. data/app/commands/decidim/initiatives/admin/update_initiative.rb +9 -7
  19. data/app/commands/decidim/initiatives/admin/update_initiative_type.rb +1 -4
  20. data/app/commands/decidim/initiatives/create_initiative.rb +23 -13
  21. data/app/commands/decidim/initiatives/spawn_committee_request.rb +1 -1
  22. data/app/constraints/decidim/initiatives/current_component.rb +28 -0
  23. data/app/constraints/decidim/initiatives/current_initiative.rb +2 -2
  24. data/app/controllers/concerns/decidim/initiatives/action_authorization.rb +1 -1
  25. data/app/controllers/concerns/decidim/initiatives/admin/initiative_admin.rb +1 -3
  26. data/app/controllers/concerns/decidim/initiatives/orderable.rb +6 -6
  27. data/app/controllers/concerns/decidim/initiatives/type_selector_options.rb +1 -1
  28. data/app/controllers/decidim/initiatives/admin/application_controller.rb +1 -1
  29. data/app/controllers/decidim/initiatives/admin/{feature_permissions_controller.rb → component_permissions_controller.rb} +2 -2
  30. data/app/controllers/decidim/initiatives/admin/components_controller.rb +15 -0
  31. data/app/controllers/decidim/initiatives/admin/initiatives_controller.rb +29 -18
  32. data/app/controllers/decidim/initiatives/admin/initiatives_type_scopes_controller.rb +6 -6
  33. data/app/controllers/decidim/initiatives/admin/initiatives_types_controller.rb +7 -7
  34. data/app/controllers/decidim/initiatives/committee_requests_controller.rb +2 -3
  35. data/app/controllers/decidim/initiatives/create_initiative_controller.rb +5 -9
  36. data/app/controllers/decidim/initiatives/initiative_votes_controller.rb +3 -3
  37. data/app/controllers/decidim/initiatives/initiatives_controller.rb +0 -1
  38. data/app/forms/decidim/initiatives/admin/initiative_form.rb +1 -1
  39. data/app/forms/decidim/initiatives/admin/initiative_type_scope_form.rb +3 -2
  40. data/app/helpers/decidim/initiatives/create_initiative_helper.rb +7 -7
  41. data/app/helpers/decidim/initiatives/initiative_helper.rb +36 -29
  42. data/app/helpers/decidim/initiatives/initiatives_helper.rb +1 -1
  43. data/app/mailers/decidim/initiatives/initiatives_mailer.rb +18 -16
  44. data/app/models/decidim/initiative.rb +15 -7
  45. data/app/models/decidim/initiatives/abilities/admin/attachments_ability.rb +1 -0
  46. data/app/models/decidim/initiatives/abilities/admin/{features_ability.rb → components_ability.rb} +2 -3
  47. data/app/models/decidim/initiatives_vote.rb +3 -3
  48. data/app/presenters/decidim/initiatives/admin_log/initiative_presenter.rb +49 -0
  49. data/app/presenters/decidim/initiatives/initiative_stats_presenter.rb +4 -4
  50. data/app/queries/decidim/initiatives/admin/manageable_initiatives.rb +8 -8
  51. data/app/queries/decidim/initiatives/freetext_initiative_types.rb +1 -1
  52. data/app/queries/decidim/initiatives/initiatives_created.rb +1 -1
  53. data/app/queries/decidim/initiatives/initiatives_promoted.rb +3 -3
  54. data/app/queries/decidim/initiatives/outdated_validating_initiatives.rb +3 -3
  55. data/app/queries/decidim/initiatives/support_period_finished_initiatives.rb +3 -3
  56. data/app/services/decidim/initiatives/initiative_search.rb +5 -5
  57. data/app/services/decidim/initiatives/progress_notifier.rb +1 -1
  58. data/app/services/decidim/initiatives/status_change_notifier.rb +3 -9
  59. data/app/views/decidim/initiatives/_initiative.html.erb +11 -11
  60. data/app/views/decidim/initiatives/admin/committee_requests/index.html.erb +14 -14
  61. data/app/views/decidim/initiatives/admin/initiatives/_form.html.erb +5 -5
  62. data/app/views/decidim/initiatives/admin/initiatives/edit.html.erb +25 -25
  63. data/app/views/decidim/initiatives/admin/initiatives/index.html.erb +31 -31
  64. data/app/views/decidim/initiatives/admin/initiatives/show.html.erb +7 -8
  65. data/app/views/decidim/initiatives/admin/initiatives_type_scopes/_form.html.erb +1 -3
  66. data/app/views/decidim/initiatives/admin/initiatives_type_scopes/edit.html.erb +8 -8
  67. data/app/views/decidim/initiatives/admin/initiatives_type_scopes/new.html.erb +5 -5
  68. data/app/views/decidim/initiatives/admin/initiatives_types/_form.html.erb +2 -2
  69. data/app/views/decidim/initiatives/admin/initiatives_types/_initiative_type_scopes.html.erb +9 -9
  70. data/app/views/decidim/initiatives/admin/initiatives_types/edit.html.erb +8 -8
  71. data/app/views/decidim/initiatives/admin/initiatives_types/index.html.erb +3 -3
  72. data/app/views/decidim/initiatives/admin/initiatives_types/new.html.erb +3 -3
  73. data/app/views/decidim/initiatives/committee_requests/new.html.erb +13 -13
  74. data/app/views/decidim/initiatives/create_initiative/_finish_help.html.erb +7 -0
  75. data/app/views/decidim/initiatives/create_initiative/_share_committee_link.html.erb +4 -4
  76. data/app/views/decidim/initiatives/create_initiative/fill_data.html.erb +8 -8
  77. data/app/views/decidim/initiatives/create_initiative/finish.html.erb +10 -10
  78. data/app/views/decidim/initiatives/create_initiative/previous_form.html.erb +9 -9
  79. data/app/views/decidim/initiatives/create_initiative/promotal_committee.html.erb +8 -8
  80. data/app/views/decidim/initiatives/create_initiative/select_initiative_type.html.erb +9 -10
  81. data/app/views/decidim/initiatives/create_initiative/show_similar_initiatives.html.erb +7 -7
  82. data/app/views/decidim/initiatives/initiative_votes/update_buttons_and_counters.js.erb +2 -2
  83. data/app/views/decidim/initiatives/initiative_widgets/show.html.erb +1 -1
  84. data/app/views/decidim/initiatives/initiatives/_author.html.erb +3 -3
  85. data/app/views/decidim/initiatives/initiatives/_count.html.erb +1 -1
  86. data/app/views/decidim/initiatives/initiatives/_filters.html.erb +11 -11
  87. data/app/views/decidim/initiatives/initiatives/_filters_small_view.html.erb +5 -5
  88. data/app/views/decidim/initiatives/initiatives/_index_header.html.erb +1 -1
  89. data/app/views/decidim/initiatives/initiatives/_initiative_badge.html.erb +1 -1
  90. data/app/views/decidim/initiatives/initiatives/_initiatives.html.erb +2 -2
  91. data/app/views/decidim/initiatives/initiatives/_result.html.erb +4 -4
  92. data/app/views/decidim/initiatives/initiatives/_statistics.html.erb +5 -5
  93. data/app/views/decidim/initiatives/initiatives/_supports.html.erb +1 -1
  94. data/app/views/decidim/initiatives/initiatives/_supports_count.html.erb +1 -2
  95. data/app/views/decidim/initiatives/initiatives/_tags.html.erb +2 -2
  96. data/app/views/decidim/initiatives/initiatives/_vote_button.html.erb +3 -3
  97. data/app/views/decidim/initiatives/initiatives/_vote_cabin.html.erb +3 -3
  98. data/app/views/decidim/initiatives/initiatives/_votes_count.html.erb +2 -2
  99. data/app/views/decidim/initiatives/initiatives/index.html.erb +8 -8
  100. data/app/views/decidim/initiatives/initiatives/index.js.erb +2 -2
  101. data/app/views/decidim/initiatives/initiatives/show.html.erb +21 -21
  102. data/app/views/decidim/initiatives/initiatives/signature_identities.html.erb +6 -6
  103. data/app/views/decidim/initiatives/initiatives_mailer/_initiative_link.html.erb +2 -2
  104. data/app/views/decidim/initiatives/initiatives_mailer/notify_creation.html.erb +6 -6
  105. data/app/views/decidim/initiatives/initiatives_mailer/notify_progress.html.erb +2 -2
  106. data/app/views/decidim/initiatives/initiatives_mailer/notify_state_change.html.erb +2 -2
  107. data/app/views/decidim/initiatives/initiatives_mailer/notify_validating_request.html.erb +2 -2
  108. data/app/views/decidim/initiatives/initiatives_type_scopes/search.html.erb +1 -1
  109. data/app/views/layouts/decidim/_initiative_creation_header.html.erb +3 -4
  110. data/app/views/layouts/decidim/_initiative_header.html.erb +21 -21
  111. data/app/views/layouts/decidim/_initiative_header_steps.html.erb +1 -1
  112. data/app/views/layouts/decidim/admin/initiative.html.erb +15 -15
  113. data/app/views/layouts/decidim/admin/initiatives.html.erb +4 -4
  114. data/app/views/layouts/decidim/initiative.html.erb +2 -2
  115. data/app/views/layouts/decidim/initiative_creation.html.erb +4 -6
  116. data/config/locales/ca.yml +243 -246
  117. data/config/locales/en.yml +218 -222
  118. data/config/locales/es.yml +243 -246
  119. data/config/locales/eu.yml +322 -0
  120. data/config/locales/fi.yml +322 -0
  121. data/config/locales/fr.yml +322 -0
  122. data/config/locales/gl.yml +322 -0
  123. data/config/locales/it.yml +322 -0
  124. data/config/locales/nl.yml +322 -0
  125. data/config/locales/pl.yml +328 -0
  126. data/config/locales/pt-BR.yml +322 -0
  127. data/config/locales/pt.yml +322 -0
  128. data/config/locales/ru.yml +5 -0
  129. data/config/locales/sv.yml +322 -0
  130. data/config/locales/uk.yml +5 -0
  131. data/db/migrate/20170906091626_create_decidim_initiatives_types.rb +1 -1
  132. data/db/migrate/20170906094044_create_decidim_initiatives.rb +3 -3
  133. data/db/migrate/20170922152432_create_decidim_initiatives_committee_members.rb +2 -2
  134. data/db/migrate/20170927153744_change_signature_interval_to_optional.rb +2 -0
  135. data/db/migrate/20170928160302_add_decidim_user_group_id_to_decidim_initiatives_votes.rb +2 -0
  136. data/db/migrate/20170928160912_remove_scope_from_decidim_initiatives_votes.rb +2 -0
  137. data/db/migrate/20171011110714_add_banner_image_to_initiative_type.rb +2 -0
  138. data/db/migrate/20171011152425_add_hashtag_to_initiatives.rb +2 -0
  139. data/db/migrate/20171013090432_add_initiative_supports_count_to_initiative.rb +7 -1
  140. data/db/migrate/20171017090551_create_decidim_initiatives_decidim_initiatives_type_scopes.rb +4 -2
  141. data/db/migrate/20171017091458_remove_supports_required_from_decidim_initiatives_types.rb +2 -0
  142. data/db/migrate/20171017091734_add_scopes_for_all_initiative_types.rb +29 -5
  143. data/db/migrate/20171017094911_add_scoped_type_to_initiative.rb +2 -0
  144. data/db/migrate/20171017095143_update_initiative_scoped_type.rb +47 -4
  145. data/db/migrate/20171017103029_remove_unused_attributes_from_initiative.rb +2 -0
  146. data/db/migrate/20171019103358_add_initiative_notification_dates.rb +2 -0
  147. data/db/migrate/20171023075942_create_initiative_extra_data.rb +2 -0
  148. data/db/migrate/20171023122747_create_static_pages.rb +15 -6
  149. data/db/migrate/20171023141639_optional_validation_support.rb +2 -0
  150. data/db/migrate/20171031183855_add_offline_votes_to_initiative.rb +2 -0
  151. data/db/migrate/20171102094250_drop_initiative_description_index.rb +2 -0
  152. data/db/migrate/20171102094556_create_initiative_description_index.rb +4 -2
  153. data/db/migrate/20171109132011_enable_pg_extensions.rb +5 -5
  154. data/db/migrate/20171204094639_drop_decidim_initiatives_extra_data.rb +2 -0
  155. data/db/migrate/20171204103119_remove_requires_validation_from_decidim_initiatives_type.rb +2 -0
  156. data/db/migrate/20171214161410_add_unique_on_votes.rb +10 -9
  157. data/lib/decidim/initiatives.rb +2 -2
  158. data/lib/decidim/initiatives/admin_engine.rb +26 -26
  159. data/lib/decidim/initiatives/current_locale.rb +1 -1
  160. data/lib/decidim/initiatives/engine.rb +5 -5
  161. data/lib/decidim/initiatives/initiative_slug.rb +2 -3
  162. data/lib/decidim/initiatives/participatory_space.rb +19 -17
  163. data/lib/decidim/initiatives/test/factories.rb +2 -7
  164. data/lib/decidim/initiatives/version.rb +3 -1
  165. data/lib/tasks/decidim_initiatives.rake +2 -0
  166. metadata +57 -90
  167. data/LICENSE-AGPLv3.txt +0 -661
  168. data/app/constraints/decidim/initiatives/current_feature.rb +0 -28
  169. data/app/controllers/decidim/initiatives/admin/features_controller.rb +0 -16
  170. data/app/helpers/decidim/initiatives/partial_translations_helper.rb +0 -28
  171. data/app/views/decidim/initiatives/create_initiative/_compare_help.ca.html.erb +0 -2
  172. data/app/views/decidim/initiatives/create_initiative/_compare_help.en.html.erb +0 -2
  173. data/app/views/decidim/initiatives/create_initiative/_compare_help.es.html.erb +0 -2
  174. data/app/views/decidim/initiatives/create_initiative/_finish_help.ca.html.erb +0 -19
  175. data/app/views/decidim/initiatives/create_initiative/_finish_help.en.html.erb +0 -20
  176. data/app/views/decidim/initiatives/create_initiative/_finish_help.es.html.erb +0 -19
@@ -1,15 +1,16 @@
1
- /*= require social-share-button */
1
+ //= require social-share-button
2
2
  $size: 45px;
3
3
 
4
- .share-link:hover {
4
+ .share-link:hover{
5
5
  text-decoration: underline;
6
6
  cursor: pointer;
7
7
  }
8
8
 
9
- .social-share-button {
9
+ .social-share-button{
10
10
  display: inline-block;
11
11
  vertical-align: top;
12
- .ssb-icon {
12
+
13
+ .ssb-icon{
13
14
  margin-right: 5px;
14
15
  background-size: $size $size;
15
16
  height: $size;
@@ -1,15 +1,15 @@
1
- .initiative-statistics {
1
+ .initiative-statistics{
2
2
  margin-top: 25px;
3
3
 
4
- .definition-data__item {
4
+ .definition-data__item{
5
5
  flex-basis: 50%;
6
6
  }
7
7
 
8
- .definition-data__item:nth-child(odd) {
8
+ .definition-data__item:nth-child(odd){
9
9
  border-right: 1px solid #e8e8e8;
10
10
  }
11
11
 
12
- .definition-data__item:nth-last-child(2) {
12
+ .definition-data__item:nth-last-child(2){
13
13
  border-bottom: none;
14
14
  }
15
15
  }
@@ -25,10 +25,7 @@ module Decidim
25
25
  if initiative_type.persisted?
26
26
  broadcast(:ok, initiative_type)
27
27
  else
28
- if initiative_type.errors.include? :banner_image
29
- form.errors.add(:banner_image, initiative_type.errors[:banner_image])
30
- end
31
-
28
+ form.errors.add(:banner_image, initiative_type.errors[:banner_image]) if initiative_type.errors.include? :banner_image
32
29
  broadcast(:invalid)
33
30
  end
34
31
  end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Initiatives
5
+ module Admin
6
+ # A command with all the business logic that publishes an
7
+ # existing initiative.
8
+ class PublishInitiative < Rectify::Command
9
+ # Public: Initializes the command.
10
+ #
11
+ # initiative - Decidim::Initiative
12
+ # current_user - the user performing the action
13
+ def initialize(initiative, current_user)
14
+ @initiative = initiative
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
+ return broadcast(:invalid) if initiative.published?
26
+
27
+ @initiative = Decidim.traceability.perform_action!(
28
+ :publish,
29
+ initiative,
30
+ current_user
31
+ ) do
32
+ initiative.publish!
33
+ initiative
34
+ end
35
+ broadcast(:ok, initiative)
36
+ end
37
+
38
+ private
39
+
40
+ attr_reader :initiative, :current_user
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Initiatives
5
+ module Admin
6
+ # A command with all the business logic that sends an
7
+ # existing initiative to technical validation.
8
+ class SendInitiativeToTechnicalValidation < Rectify::Command
9
+ # Public: Initializes the command.
10
+ #
11
+ # initiative - Decidim::Initiative
12
+ # current_user - the user performing the action
13
+ def initialize(initiative, current_user)
14
+ @initiative = initiative
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
+ @initiative = Decidim.traceability.perform_action!(
26
+ :send_to_technical_validation,
27
+ initiative,
28
+ current_user
29
+ ) do
30
+ initiative.validating!
31
+ initiative
32
+ end
33
+ broadcast(:ok, initiative)
34
+ end
35
+
36
+ private
37
+
38
+ attr_reader :initiative, :current_user
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Initiatives
5
+ module Admin
6
+ # A command with all the business logic that unpublishes an
7
+ # existing initiative.
8
+ class UnpublishInitiative < Rectify::Command
9
+ # Public: Initializes the command.
10
+ #
11
+ # initiative - Decidim::Initiative
12
+ # current_user - the user performing the action
13
+ def initialize(initiative, current_user)
14
+ @initiative = initiative
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
+ return broadcast(:invalid) unless initiative.published?
26
+
27
+ @initiative = Decidim.traceability.perform_action!(
28
+ :unpublish,
29
+ initiative,
30
+ current_user
31
+ ) do
32
+ initiative.unpublish!
33
+ initiative
34
+ end
35
+ broadcast(:ok, initiative)
36
+ end
37
+
38
+ private
39
+
40
+ attr_reader :initiative, :current_user
41
+ end
42
+ end
43
+ end
44
+ end
@@ -24,13 +24,15 @@ module Decidim
24
24
  # Returns nothing.
25
25
  def call
26
26
  return broadcast(:invalid) if form.invalid?
27
- initiative.update(attributes)
28
27
 
29
- if initiative.valid?
30
- broadcast(:ok, initiative)
31
- else
32
- broadcast(:invalid, initiative)
33
- end
28
+ @initiative = Decidim.traceability.update!(
29
+ initiative,
30
+ current_user,
31
+ attributes
32
+ )
33
+ broadcast(:ok, initiative)
34
+ rescue ActiveRecord::RecordInvalid
35
+ broadcast(:invalid, initiative)
34
36
  end
35
37
 
36
38
  private
@@ -47,7 +49,7 @@ module Decidim
47
49
  answer_url: form.answer_url
48
50
  }
49
51
 
50
- attrs[:answered_at] = DateTime.now unless form.answer.blank?
52
+ attrs[:answered_at] = DateTime.current if form.answer.present?
51
53
 
52
54
  if current_user.admin?
53
55
  attrs[:signature_start_time] = form.signature_start_time
@@ -42,10 +42,7 @@ module Decidim
42
42
  description: form.description
43
43
  }
44
44
 
45
- unless form.banner_image.nil?
46
- result[:banner_image] = form.banner_image
47
- end
48
-
45
+ result[:banner_image] = form.banner_image unless form.banner_image.nil?
49
46
  result
50
47
  end
51
48
  end
@@ -36,15 +36,16 @@ module Decidim
36
36
 
37
37
  attr_reader :form, :current_user
38
38
 
39
- # Creates the initiative and all default features
39
+ # Creates the initiative and all default components
40
40
  def create_initiative
41
41
  initiative = build_initiative
42
42
  return initiative unless initiative.valid?
43
43
 
44
44
  initiative.transaction do
45
45
  initiative.save!
46
- create_features_for(initiative)
46
+ create_components_for(initiative)
47
47
  send_notification(initiative)
48
+ add_author_as_follower(initiative)
48
49
  end
49
50
 
50
51
  initiative
@@ -59,7 +60,7 @@ module Decidim
59
60
  decidim_user_group_id: form.decidim_user_group_id,
60
61
  scoped_type: scoped_type,
61
62
  signature_type: form.signature_type,
62
- state: 'created'
63
+ state: "created"
63
64
  )
64
65
  end
65
66
 
@@ -70,23 +71,21 @@ module Decidim
70
71
  )
71
72
  end
72
73
 
73
- def create_features_for(initiative)
74
- Decidim::Initiatives.default_features.each do |feature_name|
75
- feature = Decidim::Feature.create!(
76
- name: Decidim::Features::Namer.new(
77
- initiative.organization.available_locales,
78
- feature_name).i18n_name,
79
- manifest_name: feature_name,
74
+ def create_components_for(initiative)
75
+ Decidim::Initiatives.default_components.each do |component_name|
76
+ component = Decidim::Component.create!(
77
+ name: Decidim::Components::Namer.new(initiative.organization.available_locales, component_name).i18n_name,
78
+ manifest_name: component_name,
80
79
  published_at: Time.current,
81
80
  participatory_space: initiative
82
81
  )
83
82
 
84
- initialize_pages(feature) if feature_name == :pages
83
+ initialize_pages(component) if component_name == :pages
85
84
  end
86
85
  end
87
86
 
88
- def initialize_pages(feature)
89
- Decidim::Pages::CreatePage.call(feature) do
87
+ def initialize_pages(component)
88
+ Decidim::Pages::CreatePage.call(component) do
90
89
  on(:invalid) { raise "Can't create page" }
91
90
  end
92
91
  end
@@ -99,6 +98,17 @@ module Decidim
99
98
  recipient_ids: initiative.author.followers.pluck(:id)
100
99
  )
101
100
  end
101
+
102
+ def add_author_as_follower(initiative)
103
+ form = Decidim::FollowForm
104
+ .from_params(followable_gid: initiative.to_signed_global_id.to_s)
105
+ .with_context(
106
+ current_organization: initiative.organization,
107
+ current_user: current_user
108
+ )
109
+
110
+ Decidim::CreateFollow.new(form, current_user).call
111
+ end
102
112
  end
103
113
  end
104
114
  end
@@ -38,7 +38,7 @@ module Decidim
38
38
  request = InitiativesCommitteeMember.new(
39
39
  decidim_initiatives_id: initiative&.id,
40
40
  decidim_users_id: current_user&.id,
41
- state: 'requested'
41
+ state: "requested"
42
42
  )
43
43
  return request unless request.valid?
44
44
 
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Initiatives
5
+ # This class infers the current component on an initiative context
6
+ # request parameters and injects it into the environment.
7
+ class CurrentComponent
8
+ # Public: Initializes the class.
9
+ #
10
+ # manifest - The manifest of the component to check against.
11
+ def initialize(manifest)
12
+ @manifest = manifest
13
+ end
14
+
15
+ # Public: Matches the request against a component and injects it into the
16
+ # environment.
17
+ #
18
+ # request - The request that holds the current component relevant information.
19
+ #
20
+ # Returns a true if the request matches an initiative and a
21
+ # component belonging to that initiative, false otherwise
22
+ def matches?(request)
23
+ CurrentInitiative.new.matches?(request) &&
24
+ Decidim::CurrentComponent.new(@manifest).matches?(request)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -18,7 +18,7 @@ module Decidim
18
18
  def matches?(request)
19
19
  env = request.env
20
20
 
21
- @organization = env['decidim.current_organization']
21
+ @organization = env["decidim.current_organization"]
22
22
  return false unless @organization
23
23
 
24
24
  current_initiative(env, request.params) ? true : false
@@ -27,7 +27,7 @@ module Decidim
27
27
  private
28
28
 
29
29
  def current_initiative(env, params)
30
- env['decidim.current_participatory_space'] ||= Initiative.find_by(id: id_from_slug(params[:initiative_slug]))
30
+ env["decidim.current_participatory_space"] ||= Initiative.find_by(id: id_from_slug(params[:initiative_slug]))
31
31
  end
32
32
  end
33
33
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/concern'
3
+ require "active_support/concern"
4
4
 
5
5
  module Decidim
6
6
  module Initiatives
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/concern'
3
+ require "active_support/concern"
4
4
 
5
5
  module Decidim
6
6
  module Initiatives
@@ -18,8 +18,6 @@ module Decidim
18
18
  include Decidim::Admin::ParticipatorySpaceAdminContext
19
19
  participatory_space_admin_layout
20
20
 
21
- helper Decidim::Initiatives::PartialTranslationsHelper
22
-
23
21
  alias_method :current_participatory_space, :current_initiative
24
22
  end
25
23
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/concern'
3
+ require "active_support/concern"
4
4
 
5
5
  module Decidim
6
6
  module Initiatives
@@ -26,22 +26,22 @@ module Decidim
26
26
  # Available orders based on enabled settings
27
27
  def available_orders
28
28
  @available_orders ||= begin
29
- available_orders = %w[random recent most_voted most_commented]
29
+ available_orders = %w(random recent most_voted most_commented)
30
30
  available_orders
31
31
  end
32
32
  end
33
33
 
34
34
  def default_order
35
- 'random'
35
+ "random"
36
36
  end
37
37
 
38
38
  def reorder(initiatives)
39
39
  case order
40
- when 'most_voted'
40
+ when "most_voted"
41
41
  initiatives.order_by_supports
42
- when 'most_commented'
42
+ when "most_commented"
43
43
  initiatives.order_by_most_commented
44
- when 'recent'
44
+ when "recent"
45
45
  initiatives.order_by_most_recent
46
46
  else
47
47
  initiatives.order_randomly(random_seed)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/concern'
3
+ require "active_support/concern"
4
4
 
5
5
  module Decidim
6
6
  module Initiatives
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # The main admin application controller for initiatives
7
7
  class ApplicationController < Decidim::Admin::ApplicationController
8
- layout 'decidim/admin/initiatives'
8
+ layout "decidim/admin/initiatives"
9
9
  end
10
10
  end
11
11
  end