decidim-core 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (194) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/decidim_core_manifest.js +1 -0
  3. data/app/assets/javascripts/decidim/notifications.js.es6 +33 -0
  4. data/app/assets/stylesheets/decidim/extras/_meeting-registrations.scss +11 -0
  5. data/app/assets/stylesheets/decidim/modules/_extra.scss +4 -0
  6. data/app/assets/stylesheets/decidim/modules/_process-nav.scss +14 -0
  7. data/app/commands/decidim/create_follow.rb +40 -0
  8. data/app/commands/decidim/create_omniauth_registration.rb +0 -2
  9. data/app/commands/decidim/create_registration.rb +1 -3
  10. data/app/commands/decidim/create_report.rb +7 -7
  11. data/app/commands/decidim/delete_follow.rb +37 -0
  12. data/app/commands/decidim/invite_user.rb +1 -3
  13. data/app/commands/decidim/update_notifications_settings.rb +1 -2
  14. data/app/constraints/decidim/current_feature.rb +3 -4
  15. data/app/controllers/concerns/decidim/settings.rb +1 -1
  16. data/app/controllers/decidim/features/base_controller.rb +5 -6
  17. data/app/controllers/decidim/follows_controller.rb +45 -0
  18. data/app/controllers/decidim/notifications_controller.rb +39 -0
  19. data/app/controllers/decidim/pages_controller.rb +2 -2
  20. data/app/controllers/decidim/scopes_controller.rb +2 -0
  21. data/app/controllers/decidim/widgets_controller.rb +3 -3
  22. data/app/forms/decidim/follow_form.rb +20 -0
  23. data/app/forms/decidim/invite_user_form.rb +1 -1
  24. data/app/forms/decidim/notifications_settings_form.rb +2 -4
  25. data/app/helpers/decidim/action_authorization_helper.rb +2 -1
  26. data/app/helpers/decidim/decidim_form_helper.rb +4 -0
  27. data/app/helpers/decidim/feature_path_helper.rb +2 -13
  28. data/app/helpers/decidim/icon_helper.rb +26 -8
  29. data/app/helpers/decidim/paginate_helper.rb +1 -1
  30. data/app/helpers/decidim/scopes_helper.rb +1 -1
  31. data/app/jobs/decidim/email_notification_generator_job.rb +12 -0
  32. data/app/jobs/decidim/export_job.rb +1 -3
  33. data/app/jobs/decidim/notification_generator_for_recipient_job.rb +14 -0
  34. data/app/jobs/decidim/notification_generator_job.rb +12 -0
  35. data/app/mailers/decidim/export_mailer.rb +6 -7
  36. data/app/mailers/decidim/notification_mailer.rb +20 -0
  37. data/app/mailers/decidim/reported_mailer.rb +3 -3
  38. data/app/models/decidim/abilities/admin_ability.rb +0 -1
  39. data/app/models/decidim/abilities/base_ability.rb +8 -0
  40. data/app/models/decidim/abilities/everyone_ability.rb +0 -2
  41. data/app/models/decidim/abilities/participatory_process_admin_ability.rb +1 -1
  42. data/app/models/decidim/abilities/participatory_process_collaborator_ability.rb +1 -1
  43. data/app/models/decidim/category.rb +4 -4
  44. data/app/models/decidim/feature.rb +29 -4
  45. data/app/models/decidim/follow.rb +10 -0
  46. data/app/models/decidim/moderation.rb +1 -1
  47. data/app/models/decidim/notification.rb +12 -0
  48. data/app/models/decidim/scope.rb +8 -8
  49. data/app/models/decidim/user.rb +11 -1
  50. data/app/presenters/decidim/home_stats_presenter.rb +1 -1
  51. data/app/presenters/decidim/resource_locator_presenter.rb +3 -18
  52. data/app/queries/decidim/participatory_processes_with_user_role.rb +1 -1
  53. data/app/services/decidim/email_notification_generator.rb +63 -0
  54. data/app/services/decidim/events_manager.rb +41 -0
  55. data/app/services/decidim/notification_generator.rb +51 -0
  56. data/app/services/decidim/notification_generator_for_recipient.rb +50 -0
  57. data/app/uploaders/decidim/attachment_uploader.rb +1 -1
  58. data/app/views/decidim/authorizations/first_login.html.erb +2 -2
  59. data/app/views/decidim/follows/update_button.js.erb +3 -0
  60. data/app/views/decidim/notification_mailer/event_received.html.erb +9 -0
  61. data/app/views/decidim/notifications/_notification.html.erb +18 -0
  62. data/app/views/decidim/notifications/index.html.erb +32 -0
  63. data/app/views/decidim/notifications_settings/show.html.erb +3 -10
  64. data/app/views/decidim/shared/_follow_button.html.erb +19 -0
  65. data/app/views/layouts/decidim/_head.html.erb +1 -0
  66. data/app/views/layouts/decidim/_head_extra.html.erb +7 -0
  67. data/app/views/layouts/decidim/_user_menu.html.erb +1 -0
  68. data/app/views/layouts/decidim/_wrapper.html.erb +3 -0
  69. data/app/views/layouts/decidim/widget.html.erb +3 -3
  70. data/app/views/pages/home/_hero.html.erb +1 -1
  71. data/app/views/pages/home/_highlighted_processes.html.erb +3 -3
  72. data/config/locales/ca.yml +29 -74
  73. data/config/locales/en.yml +23 -71
  74. data/config/locales/es.yml +31 -78
  75. data/config/locales/eu.yml +61 -65
  76. data/config/locales/fi.yml +91 -51
  77. data/config/locales/fr.yml +40 -83
  78. data/config/locales/it.yml +129 -54
  79. data/config/locales/nl.yml +90 -51
  80. data/config/locales/pl.yml +319 -10
  81. data/config/locales/uk.yml +400 -0
  82. data/config/routes.rb +8 -14
  83. data/db/migrate/20170720120231_make_moderations_polymorphic.rb +29 -0
  84. data/db/migrate/20170726145242_make_categories_polymorphic.rb +27 -0
  85. data/db/migrate/20170807123535_create_decidim_follows.rb +20 -0
  86. data/db/migrate/20170808071019_create_decidim_notifications.rb +13 -0
  87. data/db/migrate/20170906091718_add_extra_to_notifications.rb +7 -0
  88. data/db/migrate/20170912082054_add_emails_on_notifications_flag_to_user.rb +7 -0
  89. data/db/migrate/20170913092351_add_header_snippets_to_organizations.rb +7 -0
  90. data/db/migrate/20170914075721_remove_followable_index_from_follows.rb +7 -0
  91. data/db/migrate/20170914092116_remove_comment_and_replies_notifications_from_users.rb +8 -0
  92. data/db/seeds.rb +2 -108
  93. data/lib/decidim/core.rb +46 -8
  94. data/lib/decidim/core/engine.rb +20 -6
  95. data/lib/decidim/core/test.rb +3 -0
  96. data/lib/decidim/core/test/factories.rb +37 -75
  97. data/lib/decidim/core/test/shared_examples/comments_examples.rb +0 -26
  98. data/lib/decidim/core/test/shared_examples/follows_examples.rb +37 -0
  99. data/lib/decidim/core/test/shared_examples/manage_moderations_examples.rb +1 -1
  100. data/lib/decidim/core/test/shared_examples/process_announcements_examples.rb +1 -1
  101. data/lib/decidim/core/test/shared_examples/reportable.rb +4 -4
  102. data/lib/decidim/core/test/shared_examples/reports_examples.rb +1 -1
  103. data/lib/decidim/core/test/shared_examples/scope_helper_examples.rb +41 -0
  104. data/lib/decidim/core/test/shared_examples/user_localised_email_examples.rb +25 -0
  105. data/lib/decidim/core/version.rb +1 -1
  106. data/lib/decidim/engine_router.rb +54 -0
  107. data/lib/decidim/events.rb +9 -0
  108. data/lib/decidim/events/base_event.rb +70 -0
  109. data/lib/decidim/events/email_event.rb +39 -0
  110. data/lib/decidim/events/notification_event.rb +32 -0
  111. data/lib/decidim/exporters.rb +7 -0
  112. data/lib/decidim/exporters/export_data.rb +14 -0
  113. data/lib/decidim/feature_manifest.rb +2 -2
  114. data/lib/decidim/features/namer.rb +1 -1
  115. data/lib/decidim/followable.rb +13 -0
  116. data/lib/decidim/form_builder.rb +1 -1
  117. data/lib/decidim/has_feature.rb +1 -1
  118. data/lib/decidim/has_settings.rb +19 -15
  119. data/lib/decidim/manifest_registry.rb +1 -3
  120. data/lib/decidim/participable.rb +80 -0
  121. data/lib/decidim/participatory_space_manifest.rb +40 -0
  122. data/lib/decidim/query_extensions.rb +1 -1
  123. data/lib/decidim/resource_manifest.rb +1 -1
  124. data/lib/decidim/settings_manifest.rb +0 -4
  125. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.uk.js +14 -0
  126. data/vendor/assets/javascripts/morphdom.js +14 -5
  127. metadata +70 -79
  128. data/app/assets/images/decidim/process.svg +0 -10
  129. data/app/constraints/decidim/current_participatory_process.rb +0 -35
  130. data/app/controllers/concerns/decidim/needs_participatory_process.rb +0 -46
  131. data/app/controllers/decidim/participatory_process_groups_controller.rb +0 -26
  132. data/app/controllers/decidim/participatory_process_steps_controller.rb +0 -18
  133. data/app/controllers/decidim/participatory_process_widgets_controller.rb +0 -19
  134. data/app/controllers/decidim/participatory_processes_controller.rb +0 -49
  135. data/app/helpers/decidim/participatory_process_helper.rb +0 -17
  136. data/app/helpers/decidim/participatory_process_steps_helper.rb +0 -18
  137. data/app/models/decidim/participatory_process.rb +0 -61
  138. data/app/models/decidim/participatory_process_group.rb +0 -15
  139. data/app/models/decidim/participatory_process_step.rb +0 -39
  140. data/app/presenters/decidim/participatory_process_stats_presenter.rb +0 -50
  141. data/app/queries/decidim/highlighted_participatory_processes.rb +0 -10
  142. data/app/queries/decidim/organization_participatory_process_groups.rb +0 -14
  143. data/app/queries/decidim/organization_participatory_processes.rb +0 -14
  144. data/app/queries/decidim/organization_prioritized_participatory_processes.rb +0 -18
  145. data/app/queries/decidim/organization_published_participatory_processes.rb +0 -17
  146. data/app/queries/decidim/prioritized_participatory_processes.rb +0 -11
  147. data/app/queries/decidim/promoted_participatory_processes.rb +0 -10
  148. data/app/queries/decidim/published_participatory_processes.rb +0 -10
  149. data/app/views/decidim/participatory_process_groups/_participatory_process_group.html.erb +0 -22
  150. data/app/views/decidim/participatory_process_groups/show.html.erb +0 -11
  151. data/app/views/decidim/participatory_process_steps/_participatory_process_step.html.erb +0 -16
  152. data/app/views/decidim/participatory_process_steps/_timeline.html.erb +0 -7
  153. data/app/views/decidim/participatory_process_steps/index.html.erb +0 -14
  154. data/app/views/decidim/participatory_process_widgets/show.html.erb +0 -17
  155. data/app/views/decidim/participatory_processes/_no_processes_yet.html.erb +0 -3
  156. data/app/views/decidim/participatory_processes/_order_by_processes.html.erb +0 -3
  157. data/app/views/decidim/participatory_processes/_participatory_process.html.erb +0 -28
  158. data/app/views/decidim/participatory_processes/_promoted_process.html.erb +0 -32
  159. data/app/views/decidim/participatory_processes/_statistics.html.erb +0 -10
  160. data/app/views/decidim/participatory_processes/index.html.erb +0 -17
  161. data/app/views/decidim/participatory_processes/show.html.erb +0 -85
  162. data/app/views/layouts/decidim/_process_header.html.erb +0 -65
  163. data/app/views/layouts/decidim/_process_header_steps.html.erb +0 -27
  164. data/app/views/layouts/decidim/participatory_process.html.erb +0 -30
  165. data/config/i18n-tasks.yml +0 -138
  166. data/db/migrate/20161005130108_add_participatory_processes.rb +0 -19
  167. data/db/migrate/20161010102356_translate_processes.rb +0 -17
  168. data/db/migrate/20161011125616_add_hero_image_to_processes.rb +0 -7
  169. data/db/migrate/20161011141033_add_banner_image_to_processes.rb +0 -7
  170. data/db/migrate/20161013134732_add_promoted_flag_to_processes.rb +0 -7
  171. data/db/migrate/20161017085822_add_participatory_process_steps.rb +0 -18
  172. data/db/migrate/20161019072016_add_active_flag_to_step.rb +0 -13
  173. data/db/migrate/20161020080756_add_position_to_steps.rb +0 -9
  174. data/db/migrate/20161025125300_add_published_at_to_processes.rb +0 -7
  175. data/db/migrate/20161107152228_remove_not_null_on_step_position.rb +0 -7
  176. data/db/migrate/20161110092735_add_index_for_process_slug_organization.rb +0 -10
  177. data/db/migrate/20161116115156_create_attachments.rb +0 -18
  178. data/db/migrate/20170116135237_loosen_step_requirements.rb +0 -8
  179. data/db/migrate/20170123134023_make_attachments_polymorphic.rb +0 -20
  180. data/db/migrate/20170125135937_rename_attachable_to_attached_to.rb +0 -13
  181. data/db/migrate/20170126151123_add_extra_info_to_processes.rb +0 -10
  182. data/db/migrate/20170206083118_rename_extra_info_on_processes.rb +0 -14
  183. data/db/migrate/20170220110740_remove_steps_short_description.rb +0 -23
  184. data/db/migrate/20170221094835_add_scopes_to_processes.rb +0 -8
  185. data/db/migrate/20170228142440_add_participatory_process_groups.rb +0 -17
  186. data/db/migrate/20170404132616_change_steps_end_and_start_date_to_date.rb +0 -8
  187. data/db/migrate/20170725085104_add_show_statistics_to_participatory_processes.rb +0 -7
  188. data/db/migrate/20170804125402_attachment_description_nullable.rb +0 -7
  189. data/db/migrate/20170808080905_add_announcement_to_participatory_processes.rb +0 -7
  190. data/db/migrate/20170809084005_add_scopes_enabled_to_participatory_processes.rb +0 -7
  191. data/db/seeds/Exampledocument.pdf +0 -0
  192. data/db/seeds/city.jpeg +0 -0
  193. data/db/seeds/city2.jpeg +0 -0
  194. data/lib/decidim/notifiable.rb +0 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e3c9e52c7bfc50e66ce2edd41f4a7566f2e1f098
4
- data.tar.gz: 32dbce6e9ef9691e0da24e4522f982828daf270b
3
+ metadata.gz: a774be89f3656a65dcf358c853dce78b47bf583c
4
+ data.tar.gz: 2e9e91cc41497ccdad3c58f4786921d053888a0d
5
5
  SHA512:
6
- metadata.gz: d9b03de16fa59d421c80c5d6c452ecd009b434017b01304bb4f060e65c2dfca589bc8d4f7f75bd30beaf29b426938aa9b74a95e120051aa985bf1f4b293af787
7
- data.tar.gz: a31f6a85ac6b40528969dc49dca39aefa711c486197e1383f32707159e30af241d3d641ff88a8aa4e4b215331ecf821fb79a58ac37032bb3d9f2727a2916c290
6
+ metadata.gz: 4def8591405abaa854afb048f841c35ced6f6fea5e35e8c77f5c9de0ecae2c1bd4fbc5c599e5cc07f5d0747b8686247955c98b21be47f422239642d0f08ad2f6
7
+ data.tar.gz: 1ba2f7fef1c8d850f0732765e7199dff180d6ea78bd62c6edb4a392c3f01f5d82ecd9e4633205ec9bee2afd5661e5484b47b43b00e5917f034d1bdd48c704b60
@@ -5,6 +5,7 @@
5
5
  //= link decidim/orders
6
6
  //= link decidim/map.js
7
7
  //= link decidim/map.css
8
+ //= link decidim/notifications.js
8
9
  //= link_directory ../../../vendor/assets/javascripts/datepicker-locales
9
10
  //= link decidim/widget.js
10
11
  //= link decidim/impersonation.js
@@ -0,0 +1,33 @@
1
+ $(() => {
2
+ const $wrapper = $('#notifications');
3
+ const $section = $wrapper.find('section#notifications-list');
4
+ const $noNotificationsText = $wrapper.find('.empty-notifications');
5
+ const $pagination = $wrapper.find('ul.pagination');
6
+ const FADEOUT_TIME = 500;
7
+
8
+ const anyNotifications = () => $wrapper.find('.card--list__item').length > 0;
9
+ const emptyNotifications = () => {
10
+ if (!anyNotifications()) {
11
+ $section.remove();
12
+ $noNotificationsText.removeClass('hide');
13
+ }
14
+ };
15
+
16
+ $section.on('click', '.mark-as-read-button', (event) => {
17
+ const $item = $(event.target).parents('.card--list__item');
18
+ $item.fadeOut(FADEOUT_TIME, () => {
19
+ $item.remove();
20
+ emptyNotifications();
21
+ });
22
+ });
23
+
24
+ $wrapper.on('click', '.mark-all-as-read-button', () => {
25
+ $section.fadeOut(FADEOUT_TIME, () => {
26
+ $pagination.remove();
27
+ $wrapper.find('.card--list__item').remove();
28
+ emptyNotifications();
29
+ });
30
+ });
31
+
32
+ emptyNotifications();
33
+ });
@@ -0,0 +1,11 @@
1
+ #meeting-registration-confirm {
2
+ .help-text {
3
+ border: 1px solid #eee;
4
+ background: #fff;
5
+ padding: 0.5em;
6
+ overflow-y: scroll;
7
+ margin-bottom: 1em;
8
+ margin-top: 0.5em;
9
+ height: 20em;
10
+ }
11
+ }
@@ -5,6 +5,10 @@
5
5
  .button:last-of-type{
6
6
  margin-bottom: 0;
7
7
  }
8
+
9
+ .follow-button {
10
+ margin-top: 1rem;
11
+ }
8
12
  }
9
13
 
10
14
  .extra__suport-number{
@@ -83,6 +83,16 @@
83
83
  width: 25px;
84
84
  height: 25px;
85
85
  fill: $muted;
86
+
87
+ .stroked-shape{
88
+ fill: none;
89
+ fill-opacity: 1;
90
+ stroke-width: 2.01957917;
91
+ stroke-miterlimit: 4;
92
+ stroke-dasharray: none;
93
+ stroke-dashoffset: 0;
94
+ stroke: $muted;
95
+ }
86
96
  }
87
97
  }
88
98
 
@@ -92,6 +102,10 @@
92
102
  color: $primary;
93
103
  svg{
94
104
  fill: $primary;
105
+
106
+ .stroked-shape{
107
+ stroke: $primary;
108
+ }
95
109
  }
96
110
  }
97
111
  }
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # A command with all the business logic for when a user starts following a resource.
5
+ class CreateFollow < Rectify::Command
6
+ # Public: Initializes the command.
7
+ #
8
+ # form - A form object with the params.
9
+ # current_user - The current user.
10
+ def initialize(form, current_user)
11
+ @form = form
12
+ @current_user = current_user
13
+ end
14
+
15
+ # Executes the command. Broadcasts these events:
16
+ #
17
+ # - :ok when everything is valid, together with the follow.
18
+ # - :invalid if the form wasn't valid and we couldn't proceed.
19
+ #
20
+ # Returns nothing.
21
+ def call
22
+ return broadcast(:invalid) if form.invalid?
23
+
24
+ create_follow!
25
+
26
+ broadcast(:ok, follow)
27
+ end
28
+
29
+ private
30
+
31
+ attr_reader :follow, :form, :current_user
32
+
33
+ def create_follow!
34
+ @follow = Follow.create!(
35
+ followable: form.followable,
36
+ user: current_user
37
+ )
38
+ end
39
+ end
40
+ end
@@ -53,8 +53,6 @@ module Decidim
53
53
  @user.password = generated_password
54
54
  @user.password_confirmation = generated_password
55
55
  @user.skip_confirmation! if verified_email
56
- @user.comments_notifications = true
57
- @user.replies_notifications = true
58
56
  end
59
57
 
60
58
  @user.tos_agreement = "1"
@@ -39,9 +39,7 @@ module Decidim
39
39
  password_confirmation: form.password_confirmation,
40
40
  organization: form.current_organization,
41
41
  tos_agreement: form.tos_agreement,
42
- newsletter_notifications: form.newsletter_notifications,
43
- comments_notifications: true,
44
- replies_notifications: true)
42
+ newsletter_notifications: form.newsletter_notifications)
45
43
  end
46
44
 
47
45
  def create_user_group
@@ -44,7 +44,7 @@ module Decidim
44
44
  attr_reader :form, :report
45
45
 
46
46
  def find_or_create_moderation!
47
- @moderation = Moderation.find_or_create_by!(reportable: @reportable, participatory_process: participatory_process)
47
+ @moderation = Moderation.find_or_create_by!(reportable: @reportable, participatory_space: participatory_space)
48
48
  end
49
49
 
50
50
  def create_report!
@@ -60,12 +60,12 @@ module Decidim
60
60
  @moderation.update_attributes!(report_count: @moderation.report_count + 1)
61
61
  end
62
62
 
63
- def participatory_process_admins
64
- @participatory_process_admins ||= Decidim::Admin::ProcessAdmins.for(participatory_process)
63
+ def participatory_space_admins
64
+ @participatory_space_admins ||= participatory_space.admins
65
65
  end
66
66
 
67
67
  def send_report_notification_to_admins
68
- participatory_process_admins.each do |admin|
68
+ participatory_space_admins.each do |admin|
69
69
  ReportedMailer.report(admin, @report).deliver_later
70
70
  end
71
71
  end
@@ -79,13 +79,13 @@ module Decidim
79
79
  end
80
80
 
81
81
  def send_hide_notification_to_admins
82
- participatory_process_admins.each do |admin|
82
+ participatory_space_admins.each do |admin|
83
83
  ReportedMailer.hide(admin, @report).deliver_later
84
84
  end
85
85
  end
86
86
 
87
- def participatory_process
88
- @participatory_process ||= @reportable.feature.participatory_process
87
+ def participatory_space
88
+ @participatory_space ||= @reportable.feature.participatory_space
89
89
  end
90
90
  end
91
91
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # A command with all the business logic for when a user stops following a resource.
5
+ class DeleteFollow < Rectify::Command
6
+ # Public: Initializes the command.
7
+ #
8
+ # form - A form object with the params.
9
+ # current_user - The current user.
10
+ def initialize(form, current_user)
11
+ @form = form
12
+ @current_user = current_user
13
+ end
14
+
15
+ # Executes the command. Broadcasts these events:
16
+ #
17
+ # - :ok when everything is valid, together with the follow.
18
+ # - :invalid if the form wasn't valid and we couldn't proceed.
19
+ #
20
+ # Returns nothing.
21
+ def call
22
+ return broadcast(:invalid) if form.invalid?
23
+
24
+ delete_follow!
25
+
26
+ broadcast(:ok)
27
+ end
28
+
29
+ private
30
+
31
+ attr_reader :form, :current_user
32
+
33
+ def delete_follow!
34
+ form.follow.destroy!
35
+ end
36
+ end
37
+ end
@@ -43,9 +43,7 @@ module Decidim
43
43
  email: form.email.downcase,
44
44
  organization: form.organization,
45
45
  admin: form.role == "admin",
46
- roles: form.role == "admin" ? [] : [form.role],
47
- comments_notifications: true,
48
- replies_notifications: true
46
+ roles: form.role == "admin" ? [] : [form.role]
49
47
  )
50
48
  @user.invite!(
51
49
  form.invited_by,
@@ -24,8 +24,7 @@ module Decidim
24
24
  private
25
25
 
26
26
  def update_notifications_settings
27
- @user.comments_notifications = @form.comments_notifications
28
- @user.replies_notifications = @form.replies_notifications
27
+ @user.email_on_notification = @form.email_on_notification
29
28
  @user.newsletter_notifications = @form.newsletter_notifications
30
29
  end
31
30
  end
@@ -20,9 +20,8 @@ module Decidim
20
20
  def matches?(request)
21
21
  env = request.env
22
22
 
23
- return false unless CurrentParticipatoryProcess.new.matches?(request)
24
-
25
- @participatory_process = env["decidim.current_participatory_process"]
23
+ @participatory_space = env["decidim.current_participatory_space"]
24
+ return false unless @participatory_space
26
25
 
27
26
  current_feature(env, request.params) ? true : false
28
27
  end
@@ -34,7 +33,7 @@ module Decidim
34
33
  end
35
34
 
36
35
  def detect_current_feature(params)
37
- @participatory_process.features.find do |feature|
36
+ @participatory_space.features.find do |feature|
38
37
  params["feature_id"] == feature.id.to_s && feature.manifest_name == @manifest.name.to_s
39
38
  end
40
39
  end
@@ -16,7 +16,7 @@ module Decidim
16
16
  end
17
17
 
18
18
  def current_settings
19
- @current_settings ||= current_feature.active_step_settings
19
+ @current_settings ||= current_feature.current_settings
20
20
  end
21
21
  end
22
22
  end
@@ -6,8 +6,6 @@ module Decidim
6
6
  # setting the appropiate layout, including necessary helpers, and overall
7
7
  # fooling the engine into thinking it's isolated.
8
8
  class BaseController < Decidim::ApplicationController
9
- layout "layouts/decidim/participatory_process"
10
- include NeedsParticipatoryProcess
11
9
  include Settings
12
10
  include ActionAuthorization
13
11
 
@@ -15,7 +13,6 @@ module Decidim
15
13
  helper Decidim::OrdersHelper
16
14
  helper Decidim::FeatureReferenceHelper
17
15
  helper Decidim::TranslationsHelper
18
- helper Decidim::ParticipatoryProcessHelper
19
16
  helper Decidim::IconHelper
20
17
  helper Decidim::ResourceHelper
21
18
  helper Decidim::ScopesHelper
@@ -23,12 +20,14 @@ module Decidim
23
20
  helper Decidim::AttachmentsHelper
24
21
 
25
22
  helper_method :current_feature,
23
+ :current_participatory_space,
26
24
  :current_manifest
27
25
 
28
26
  skip_authorize_resource
29
27
 
30
28
  before_action do
31
- authorize! :read, current_participatory_process
29
+ extend current_participatory_space.extension_module
30
+
32
31
  authorize! :read, current_feature
33
32
  end
34
33
 
@@ -40,8 +39,8 @@ module Decidim
40
39
  @current_manifest ||= current_feature.manifest
41
40
  end
42
41
 
43
- def current_participatory_process
44
- request.env["decidim.current_participatory_process"]
42
+ def current_participatory_space
43
+ current_feature.participatory_space
45
44
  end
46
45
 
47
46
  def ability_context
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ class FollowsController < Decidim::ApplicationController
5
+ include FormFactory
6
+ before_action :authenticate_user!
7
+ helper_method :resource
8
+
9
+ def destroy
10
+ @form = form(Decidim::FollowForm).from_params(params)
11
+ authorize! :delete, @form.follow
12
+
13
+ DeleteFollow.call(@form, current_user) do
14
+ on(:ok) do
15
+ render :update_button
16
+ end
17
+
18
+ on(:invalid) do
19
+ render json: { error: I18n.t("follows.destroy.error", scope: "decidim") }, status: 422
20
+ end
21
+ end
22
+ end
23
+
24
+ def create
25
+ @form = form(Decidim::FollowForm).from_params(params)
26
+ authorize! :create, Follow
27
+
28
+ CreateFollow.call(@form, current_user) do
29
+ on(:ok) do
30
+ render :update_button
31
+ end
32
+
33
+ on(:invalid) do
34
+ render json: { error: I18n.t("follows.create.error", scope: "decidim") }, status: 422
35
+ end
36
+ end
37
+ end
38
+
39
+ def resource
40
+ @resource ||= GlobalID::Locator.locate_signed(
41
+ params[:follow][:followable_gid]
42
+ )
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # The controller to handle the user's notifications dashboard.
5
+ class NotificationsController < Decidim::ApplicationController
6
+ helper Decidim::IconHelper
7
+ helper Decidim::PaginateHelper
8
+ include Paginable
9
+
10
+ helper_method :notifications
11
+
12
+ def index
13
+ authorize! :read, Notification
14
+ @notifications = paginate(notifications)
15
+ end
16
+
17
+ def destroy
18
+ notification = notifications.find(params[:id])
19
+ authorize! :destroy, notification
20
+ notification.destroy
21
+ end
22
+
23
+ def read_all
24
+ authorize! :destroy, notifications.first
25
+ notifications.destroy_all
26
+ end
27
+
28
+ private
29
+
30
+ def notifications
31
+ @notifications ||= current_user.notifications.order(created_at: :desc)
32
+ end
33
+
34
+ # Private: overwrites the amount of elements per page.
35
+ def per_page
36
+ 50
37
+ end
38
+ end
39
+ end
@@ -25,12 +25,12 @@ module Decidim
25
25
 
26
26
  def promoted_participatory_processes
27
27
  @promoted_participatory_processes ||=
28
- OrganizationPrioritizedParticipatoryProcesses.new(current_organization) | PromotedParticipatoryProcesses.new
28
+ ParticipatoryProcesses::OrganizationPrioritizedParticipatoryProcesses.new(current_organization) | ParticipatoryProcesses::PromotedParticipatoryProcesses.new
29
29
  end
30
30
 
31
31
  def highlighted_participatory_processes
32
32
  @highlighted_participatory_processes ||=
33
- OrganizationPublishedParticipatoryProcesses.new(current_organization) | HighlightedParticipatoryProcesses.new
33
+ ParticipatoryProcesses::OrganizationPublishedParticipatoryProcesses.new(current_organization) | ParticipatoryProcesses::HighlightedParticipatoryProcesses.new
34
34
  end
35
35
 
36
36
  private