decidim-core 0.18.1 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of decidim-core might be problematic. Click here for more details.

Files changed (275) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/decidim_core_manifest.js +3 -0
  3. data/app/assets/javascripts/decidim/social_share.js +2 -0
  4. data/app/assets/stylesheets/decidim/extras/_social_share.css.scss +36 -0
  5. data/app/assets/stylesheets/decidim/modules/_input-gallery.scss +24 -0
  6. data/app/assets/stylesheets/decidim/modules/_navbar.scss +1 -1
  7. data/app/cells/decidim/activities_cell.rb +13 -8
  8. data/app/cells/decidim/activity_cell.rb +19 -5
  9. data/app/cells/decidim/address/details.erb +2 -2
  10. data/app/cells/decidim/amendable/amenders_list/show.erb +1 -1
  11. data/app/cells/decidim/amendable/amenders_list_cell.rb +5 -1
  12. data/app/cells/decidim/amendable/announcement_cell.rb +22 -9
  13. data/app/cells/decidim/amendable/wizard_step_form_cell.rb +121 -0
  14. data/app/cells/decidim/announcement_cell.rb +1 -0
  15. data/app/cells/decidim/author_cell.rb +7 -0
  16. data/app/cells/decidim/card_m_cell.rb +3 -1
  17. data/app/cells/decidim/coauthorships_cell.rb +3 -1
  18. data/app/cells/decidim/collapsible_authors_cell.rb +1 -0
  19. data/app/cells/decidim/collapsible_list_cell.rb +1 -0
  20. data/app/cells/decidim/content_blocks/highlighted_content_banner_cell.rb +1 -0
  21. data/app/cells/decidim/content_blocks/last_activity_cell.rb +3 -2
  22. data/app/cells/decidim/content_blocks/metrics_cell.rb +1 -0
  23. data/app/cells/decidim/content_blocks/stats_cell.rb +1 -0
  24. data/app/cells/decidim/content_blocks/sub_hero_cell.rb +1 -0
  25. data/app/cells/decidim/diff_cell.rb +1 -1
  26. data/app/cells/decidim/fingerprint/show.erb +1 -1
  27. data/app/cells/decidim/follow_button_cell.rb +3 -0
  28. data/app/cells/decidim/members_cell.rb +1 -0
  29. data/app/cells/decidim/notifications/show.erb +1 -1
  30. data/app/cells/decidim/profile_cell.rb +1 -0
  31. data/app/cells/decidim/profile_sidebar_cell.rb +4 -0
  32. data/app/cells/decidim/search_results_cell.rb +1 -0
  33. data/app/cells/decidim/search_results_section/show.erb +1 -1
  34. data/app/cells/decidim/tos_page_cell.rb +1 -0
  35. data/app/cells/decidim/user_group_pending_invitations_list_cell.rb +1 -0
  36. data/app/cells/decidim/user_group_pending_requests_list_cell.rb +1 -0
  37. data/app/cells/decidim/wizard_step_form/wizard_aside.erb +14 -0
  38. data/app/cells/decidim/wizard_step_form/wizard_header.erb +18 -0
  39. data/app/cells/decidim/wizard_step_form_cell.rb +112 -0
  40. data/app/commands/decidim/amendable/accept.rb +1 -1
  41. data/app/commands/decidim/amendable/create_draft.rb +70 -0
  42. data/app/commands/decidim/amendable/destroy_draft.rb +40 -0
  43. data/app/commands/decidim/amendable/promote.rb +13 -11
  44. data/app/commands/decidim/amendable/publish_draft.rb +76 -0
  45. data/app/commands/decidim/amendable/update_draft.rb +54 -0
  46. data/app/commands/decidim/amendable/withdraw.rb +31 -15
  47. data/app/commands/decidim/create_follow.rb +1 -0
  48. data/app/commands/decidim/create_omniauth_registration.rb +22 -4
  49. data/app/commands/decidim/create_registration.rb +5 -0
  50. data/app/commands/decidim/delete_follow.rb +1 -0
  51. data/app/commands/decidim/search.rb +1 -0
  52. data/app/controllers/concerns/decidim/action_authorization.rb +2 -0
  53. data/app/controllers/concerns/decidim/amendments_controller.rb +148 -28
  54. data/app/controllers/concerns/decidim/devise_controllers.rb +3 -2
  55. data/app/controllers/concerns/decidim/force_authentication.rb +38 -0
  56. data/app/controllers/concerns/decidim/impersonate_users.rb +1 -0
  57. data/app/controllers/concerns/decidim/locale_switcher.rb +44 -17
  58. data/app/controllers/concerns/decidim/needs_tos_accepted.rb +8 -0
  59. data/app/controllers/concerns/decidim/orderable.rb +36 -0
  60. data/app/controllers/concerns/decidim/participatory_space_context.rb +2 -0
  61. data/app/controllers/concerns/decidim/safe_redirect.rb +24 -0
  62. data/app/controllers/decidim/application_controller.rb +19 -2
  63. data/app/controllers/decidim/devise/confirmations_controller.rb +6 -0
  64. data/app/controllers/decidim/devise/invitations_controller.rb +8 -4
  65. data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +4 -1
  66. data/app/controllers/decidim/errors_controller.rb +3 -0
  67. data/app/controllers/decidim/follows_controller.rb +2 -2
  68. data/app/controllers/decidim/messaging/conversations_controller.rb +2 -2
  69. data/app/controllers/decidim/profiles_controller.rb +4 -1
  70. data/app/controllers/decidim/scopes_controller.rb +16 -4
  71. data/app/events/decidim/amendable/amendment_base_event.rb +4 -0
  72. data/app/forms/decidim/account_form.rb +1 -1
  73. data/app/forms/decidim/amendable/create_form.rb +3 -19
  74. data/app/forms/decidim/amendable/edit_form.rb +22 -0
  75. data/app/forms/decidim/amendable/form.rb +42 -20
  76. data/app/forms/decidim/amendable/promote_form.rb +4 -7
  77. data/app/forms/decidim/amendable/publish_form.rb +21 -0
  78. data/app/forms/decidim/amendable/reject_form.rb +1 -1
  79. data/app/forms/decidim/amendable/review_form.rb +9 -4
  80. data/app/forms/decidim/invite_user_form.rb +1 -0
  81. data/app/forms/decidim/notifications_settings_form.rb +1 -0
  82. data/app/forms/decidim/registration_form.rb +4 -3
  83. data/app/forms/decidim/user_group_form.rb +1 -0
  84. data/app/forms/decidim/user_interests_form.rb +1 -0
  85. data/app/helpers/decidim/amendments_helper.rb +33 -19
  86. data/app/helpers/decidim/cells_helper.rb +2 -0
  87. data/app/helpers/decidim/layout_helper.rb +1 -0
  88. data/app/helpers/decidim/map_helper.rb +1 -1
  89. data/app/helpers/decidim/meta_tags_helper.rb +1 -0
  90. data/app/helpers/decidim/resource_reference_helper.rb +1 -0
  91. data/app/jobs/decidim/event_publisher_job.rb +60 -0
  92. data/app/jobs/decidim/metric_job.rb +1 -0
  93. data/app/models/decidim/action_log.rb +12 -0
  94. data/app/models/decidim/amendment.rb +31 -2
  95. data/app/models/decidim/attachment.rb +2 -0
  96. data/app/models/decidim/authorization.rb +1 -0
  97. data/app/models/decidim/category.rb +1 -0
  98. data/app/models/decidim/component.rb +7 -0
  99. data/app/models/decidim/content_block.rb +1 -0
  100. data/app/models/decidim/follow.rb +3 -0
  101. data/app/models/decidim/identity.rb +1 -0
  102. data/app/models/decidim/impersonation_log.rb +2 -0
  103. data/app/models/decidim/newsletter.rb +1 -0
  104. data/app/models/decidim/participatory_process_user_role.rb +1 -0
  105. data/app/models/decidim/participatory_space_private_user.rb +1 -0
  106. data/app/models/decidim/permission_action.rb +2 -0
  107. data/app/models/decidim/report.rb +1 -0
  108. data/app/models/decidim/scope.rb +1 -0
  109. data/app/models/decidim/searchable_resource.rb +1 -1
  110. data/app/models/decidim/static_page.rb +1 -0
  111. data/app/models/decidim/user.rb +2 -0
  112. data/app/permissions/decidim/permissions.rb +18 -14
  113. data/app/permissions/decidim/user_manager_permissions.rb +9 -2
  114. data/app/presenters/decidim/admin_log/organization_presenter.rb +1 -0
  115. data/app/presenters/decidim/admin_log/participatory_space_private_user_presenter.rb +1 -1
  116. data/app/presenters/decidim/admin_log/user_presenter.rb +1 -1
  117. data/app/presenters/decidim/hashtag_presenter.rb +1 -1
  118. data/app/presenters/decidim/log/base_presenter.rb +1 -0
  119. data/app/presenters/decidim/log/diff_presenter.rb +1 -1
  120. data/app/presenters/decidim/log/value_types/area_presenter.rb +1 -0
  121. data/app/presenters/decidim/log/value_types/area_type_presenter.rb +1 -0
  122. data/app/presenters/decidim/log/value_types/currency_presenter.rb +1 -0
  123. data/app/presenters/decidim/log/value_types/date_presenter.rb +1 -0
  124. data/app/presenters/decidim/log/value_types/locale_presenter.rb +1 -0
  125. data/app/presenters/decidim/log/value_types/percentage_presenter.rb +1 -0
  126. data/app/presenters/decidim/log/value_types/scope_presenter.rb +1 -0
  127. data/app/presenters/decidim/log/value_types/scope_type_presenter.rb +1 -0
  128. data/app/presenters/decidim/metric_charts_presenter.rb +1 -0
  129. data/app/presenters/decidim/metric_object_presenter.rb +4 -0
  130. data/app/queries/decidim/metric_manage.rb +3 -0
  131. data/app/queries/decidim/metric_measure.rb +1 -0
  132. data/app/queries/decidim/metrics/followers_metric_manage.rb +3 -0
  133. data/app/queries/decidim/metrics/participants_metric_manage.rb +4 -0
  134. data/app/queries/decidim/similar_emendations.rb +56 -0
  135. data/app/resolvers/decidim/core/metric_resolver.rb +1 -0
  136. data/app/services/decidim/action_authorizer.rb +1 -0
  137. data/app/services/decidim/action_logger.rb +1 -0
  138. data/app/services/decidim/activity_search.rb +1 -0
  139. data/app/services/decidim/email_notification_generator.rb +4 -0
  140. data/app/services/decidim/notification_generator.rb +2 -0
  141. data/app/services/decidim/notification_generator_for_recipient.rb +0 -1
  142. data/app/services/decidim/resource_search.rb +1 -1
  143. data/app/services/decidim/traceability.rb +1 -0
  144. data/app/uploaders/decidim/application_uploader.rb +1 -0
  145. data/app/uploaders/decidim/attachment_uploader.rb +16 -0
  146. data/app/uploaders/decidim/avatar_uploader.rb +0 -2
  147. data/app/uploaders/decidim/data_portability_uploader.rb +1 -0
  148. data/app/uploaders/decidim/homepage_image_uploader.rb +0 -2
  149. data/app/uploaders/decidim/image_uploader.rb +15 -1
  150. data/app/uploaders/decidim/oauth_application_logo_uploader.rb +0 -1
  151. data/app/uploaders/decidim/official_image_footer_uploader.rb +0 -1
  152. data/app/uploaders/decidim/official_image_header_uploader.rb +0 -1
  153. data/app/uploaders/decidim/open_data_uploader.rb +1 -0
  154. data/app/validators/etiquette_validator.rb +5 -0
  155. data/app/views/decidim/account/delete.html.erb +2 -2
  156. data/app/views/decidim/account/show.html.erb +1 -1
  157. data/app/views/decidim/amendments/_edit_form_fields.html.erb +16 -13
  158. data/app/views/decidim/amendments/_similar_emendation.html.erb +24 -0
  159. data/app/views/decidim/amendments/compare_draft.html.erb +21 -0
  160. data/app/views/decidim/amendments/edit_draft.html.erb +31 -0
  161. data/app/views/decidim/amendments/new.html.erb +5 -17
  162. data/app/views/decidim/amendments/preview_draft.html.erb +32 -0
  163. data/app/views/decidim/amendments/review.html.erb +5 -3
  164. data/app/views/decidim/application/_document.html.erb +1 -1
  165. data/app/views/decidim/application/_photos.html.erb +1 -1
  166. data/app/views/decidim/data_portability/show.html.erb +1 -1
  167. data/app/views/decidim/devise/invitations/edit.html.erb +2 -2
  168. data/app/views/decidim/devise/sessions/new.html.erb +1 -1
  169. data/app/views/decidim/doorkeeper/authorizations/new.html.erb +3 -3
  170. data/app/views/decidim/export_mailer/data_portability_export.html.erb +1 -1
  171. data/app/views/decidim/searches/index.js.erb +6 -0
  172. data/app/views/decidim/shared/_address_details.html.erb +2 -2
  173. data/app/views/decidim/shared/_embed_modal.html.erb +1 -1
  174. data/app/views/decidim/shared/_share_modal.html.erb +7 -4
  175. data/app/views/layouts/decidim/_application.html.erb +0 -1
  176. data/app/views/layouts/decidim/_head.html.erb +13 -12
  177. data/app/views/layouts/decidim/_logo.html.erb +1 -1
  178. data/app/views/layouts/decidim/_social_media_links.html.erb +5 -5
  179. data/app/views/layouts/decidim/_user_menu.html.erb +1 -1
  180. data/app/views/layouts/decidim/_wrapper.html.erb +2 -2
  181. data/app/views/layouts/decidim/mailer.html.erb +2 -2
  182. data/config/locales/ar.yml +27 -17
  183. data/config/locales/ca.yml +79 -15
  184. data/config/locales/cs.yml +73 -14
  185. data/config/locales/de.yml +62 -12
  186. data/config/locales/en.yml +80 -16
  187. data/config/locales/eo-UY.yml +16 -0
  188. data/config/locales/es-MX.yml +73 -11
  189. data/config/locales/es-PY.yml +73 -11
  190. data/config/locales/es.yml +79 -15
  191. data/config/locales/eu.yml +6 -13
  192. data/config/locales/fi-plain.yml +75 -11
  193. data/config/locales/fi.yml +80 -16
  194. data/config/locales/fr.yml +70 -16
  195. data/config/locales/gl.yml +6 -13
  196. data/config/locales/hu.yml +80 -17
  197. data/config/locales/id-ID.yml +6 -12
  198. data/config/locales/it.yml +56 -14
  199. data/config/locales/nl.yml +76 -12
  200. data/config/locales/no.yml +11 -2
  201. data/config/locales/pl.yml +6 -15
  202. data/config/locales/pt-BR.yml +6 -13
  203. data/config/locales/pt.yml +6 -13
  204. data/config/locales/ru.yml +7 -2
  205. data/config/locales/sv.yml +34 -18
  206. data/config/locales/tr-TR.yml +15 -12
  207. data/config/locales/uk.yml +7 -2
  208. data/config/routes.rb +7 -0
  209. data/db/migrate/20180226140756_add_version_to_action_logs.rb +1 -0
  210. data/db/migrate/20180305132906_rename_features_to_components.rb +1 -0
  211. data/db/migrate/20190412131728_fix_user_names.rb +1 -1
  212. data/db/migrate/20190610093742_add_force_users_to_authenticate_before_access_organization.rb +10 -0
  213. data/db/migrate/20190618075906_add_confidential_to_doorkeeper_application.rb +13 -0
  214. data/db/migrate/{20190925091507_add_uniq_index_to_decidim_metrics.rb → 20190829092826_add_uniq_index_to_decidim_metrics.rb} +0 -0
  215. data/lib/decidim/amendable.rb +87 -13
  216. data/lib/decidim/attributes/localized_date.rb +5 -0
  217. data/lib/decidim/attributes/time_with_zone.rb +5 -0
  218. data/lib/decidim/authorable.rb +3 -0
  219. data/lib/decidim/authorization_form_builder.rb +2 -2
  220. data/lib/decidim/component_manifest.rb +2 -0
  221. data/lib/decidim/content_parsers.rb +2 -0
  222. data/lib/decidim/content_parsers/hashtag_parser.rb +1 -1
  223. data/lib/decidim/content_parsers/link_parser.rb +10 -0
  224. data/lib/decidim/content_parsers/newline_parser.rb +20 -0
  225. data/lib/decidim/content_parsers/user_parser.rb +1 -1
  226. data/lib/decidim/content_processor.rb +2 -0
  227. data/lib/decidim/content_renderers.rb +1 -0
  228. data/lib/decidim/content_renderers/hashtag_renderer.rb +1 -1
  229. data/lib/decidim/content_renderers/link_renderer.rb +24 -0
  230. data/lib/decidim/content_renderers/user_renderer.rb +2 -2
  231. data/lib/decidim/core.rb +11 -0
  232. data/lib/decidim/core/engine.rb +2 -28
  233. data/lib/decidim/core/test.rb +4 -1
  234. data/lib/decidim/core/test/factories.rb +35 -8
  235. data/lib/decidim/core/test/shared_examples/amendable/create_amendment_draft_examples.rb +50 -0
  236. data/lib/decidim/core/test/shared_examples/amendable/destroy_amendment_draft_examples.rb +39 -0
  237. data/lib/decidim/core/test/shared_examples/amendable/promote_amendment_examples.rb +27 -3
  238. data/lib/decidim/core/test/shared_examples/amendable/{create_amendment_examples.rb → publish_amendment_draft_examples.rb} +26 -17
  239. data/lib/decidim/core/test/shared_examples/amendable/update_amendment_draft_examples.rb +42 -0
  240. data/lib/decidim/core/test/shared_examples/amendable/withdraw_amendment_examples.rb +19 -11
  241. data/lib/decidim/core/test/shared_examples/has_attachment_collections.rb +1 -1
  242. data/lib/decidim/core/test/shared_examples/has_attachments.rb +1 -1
  243. data/lib/decidim/core/test/shared_examples/simple_event.rb +4 -0
  244. data/lib/decidim/core/version.rb +1 -1
  245. data/lib/decidim/data_portability_file_zipper.rb +3 -0
  246. data/lib/decidim/events/author_event.rb +1 -0
  247. data/lib/decidim/events/base_event.rb +12 -22
  248. data/lib/decidim/events/coauthor_event.rb +1 -0
  249. data/lib/decidim/events/simple_event.rb +3 -0
  250. data/lib/decidim/exporters/csv.rb +1 -0
  251. data/lib/decidim/fingerprintable.rb +1 -0
  252. data/lib/decidim/followable.rb +8 -0
  253. data/lib/decidim/form_builder.rb +24 -3
  254. data/lib/decidim/gamification.rb +4 -0
  255. data/lib/decidim/gamification/badge_status.rb +1 -0
  256. data/lib/decidim/has_category.rb +2 -0
  257. data/lib/decidim/has_component.rb +2 -7
  258. data/lib/decidim/has_private_users.rb +8 -1
  259. data/lib/decidim/has_settings.rb +12 -8
  260. data/lib/decidim/hashtaggable.rb +4 -0
  261. data/lib/decidim/metric_operation_manifest.rb +1 -0
  262. data/lib/decidim/nicknamizable.rb +1 -0
  263. data/lib/decidim/participable.rb +1 -0
  264. data/lib/decidim/participatory_space_resourceable.rb +1 -0
  265. data/lib/decidim/randomable.rb +20 -0
  266. data/lib/decidim/search_resource_fields_mapper.rb +2 -0
  267. data/lib/decidim/searchable.rb +2 -0
  268. data/lib/decidim/settings_manifest.rb +10 -1
  269. data/lib/decidim/stats_registry.rb +1 -0
  270. data/lib/decidim/view_model.rb +1 -1
  271. data/lib/tasks/decidim_data_portability_tasks.rake +1 -0
  272. data/lib/tasks/decidim_metrics_tasks.rake +2 -0
  273. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.no.js +12 -12
  274. metadata +140 -82
  275. data/app/commands/decidim/amendable/create.rb +0 -80
@@ -55,8 +55,10 @@ module Decidim
55
55
  "#{model.class.parent}::OfficialAuthorPresenter".constantize.new
56
56
  elsif authorable.user_group
57
57
  Decidim::UserGroupPresenter.new(authorable.user_group)
58
- else
58
+ elsif authorable.author.is_a?(Decidim::User)
59
59
  Decidim::UserPresenter.new(authorable.author)
60
+ elsif authorable.author.is_a?(Decidim::Meeting)
61
+ Decidim::MeetingPresenter.new(authorable.author)
60
62
  end
61
63
  end
62
64
 
@@ -26,6 +26,7 @@ module Decidim
26
26
 
27
27
  def actionable?
28
28
  return false if options[:has_actions] == false
29
+
29
30
  true if withdrawable? || flagable?
30
31
  end
31
32
  end
@@ -54,6 +54,7 @@ module Decidim
54
54
 
55
55
  def hidden_elements_count
56
56
  return 0 unless collapsible?
57
+
57
58
  list.size - size
58
59
  end
59
60
 
@@ -7,6 +7,7 @@ module Decidim
7
7
 
8
8
  def show
9
9
  return unless current_organization.highlighted_content_banner_enabled
10
+
10
11
  render
11
12
  end
12
13
  end
@@ -8,7 +8,8 @@ module Decidim
8
8
  include Decidim::Core::Engine.routes.url_helpers
9
9
 
10
10
  def show
11
- return if activities.empty?
11
+ return if valid_activities.empty?
12
+
12
13
  render
13
14
  end
14
15
 
@@ -32,7 +33,7 @@ module Decidim
32
33
  activities.each do |activity|
33
34
  break if valid_activities_count == activities_to_show
34
35
 
35
- if activity.resource_lazy.present? && activity.participatory_space_lazy.present?
36
+ if activity.visible_for?(current_user)
36
37
  @valid_activities << activity
37
38
  valid_activities_count += 1
38
39
  end
@@ -5,6 +5,7 @@ module Decidim
5
5
  class MetricsCell < Decidim::ViewModel
6
6
  def show
7
7
  return unless current_organization.show_statistics?
8
+
8
9
  render
9
10
  end
10
11
 
@@ -5,6 +5,7 @@ module Decidim
5
5
  class StatsCell < Decidim::ViewModel
6
6
  def show
7
7
  return unless current_organization.show_statistics?
8
+
8
9
  render
9
10
  end
10
11
 
@@ -8,6 +8,7 @@ module Decidim
8
8
 
9
9
  def show
10
10
  return if translated_attribute(current_organization.description).blank?
11
+
11
12
  render
12
13
  end
13
14
  end
@@ -54,7 +54,7 @@ module Decidim
54
54
  return unless data && data[:new_value].present?
55
55
 
56
56
  Diffy::Diff.new(
57
- data[:old_value],
57
+ data[:old_value].to_s,
58
58
  data[:new_value],
59
59
  allow_empty_diff: false,
60
60
  include_plus_and_minus_in_html: true
@@ -14,7 +14,7 @@
14
14
  <code class="fingerprint-source"><%= decidim_html_escape model.fingerprint.source %></code>
15
15
  </p>
16
16
 
17
- <p><%= t "decidim.fingerprint.replicate_help", online_calculator_link: link_to(t("decidim.fingerprint.online_calculator_name"), "http://www.md5calc.com/sha256", target: "_blank") %>
17
+ <p><%= t "decidim.fingerprint.replicate_help", online_calculator_link: link_to(t("decidim.fingerprint.online_calculator_name"), "http://www.md5calc.com/sha256", target: "_blank", rel: "noopener") %>
18
18
 
19
19
  <button class="close-button" data-close type="button">
20
20
  <span aria-hidden="true">&times;</span>
@@ -7,6 +7,7 @@ module Decidim
7
7
 
8
8
  def show
9
9
  return if model == current_user
10
+
10
11
  render
11
12
  end
12
13
 
@@ -15,11 +16,13 @@ module Decidim
15
16
  def button_classes
16
17
  return "card__button secondary text-uppercase follow-button mb-none" if inline?
17
18
  return "button secondary hollow expanded button--icon button--sc" if large?
19
+
18
20
  "button secondary hollow expanded small button--icon follow-button"
19
21
  end
20
22
 
21
23
  def icon_options
22
24
  return { class: "icon--small" } if inline?
25
+
23
26
  {}
24
27
  end
25
28
 
@@ -15,6 +15,7 @@ module Decidim
15
15
 
16
16
  def membership_cell_name
17
17
  return "decidim/user_group_admin_membership_profile" if options[:from_admin].presence
18
+
18
19
  "decidim/user_group_membership_profile"
19
20
  end
20
21
 
@@ -28,7 +28,7 @@
28
28
  <li class="card-data__item card-data__item--expand absolutes">
29
29
  <div class="mr-s">
30
30
  <span class="text-small"><%= notification.event_class.constantize.model_name.human %></span>
31
- <br />
31
+ <br>
32
32
  <span>
33
33
  <%= notification.event_class_instance.notification_title %>
34
34
  </span>
@@ -32,6 +32,7 @@ module Decidim
32
32
 
33
33
  def profile_tabs
34
34
  return render :user_group_tabs if profile_holder.is_a?(Decidim::UserGroup)
35
+
35
36
  render :user_tabs
36
37
  end
37
38
  end
@@ -36,6 +36,7 @@ module Decidim
36
36
  def can_edit_user_group_profile?
37
37
  return false unless current_user
38
38
  return false if model.is_a?(Decidim::User)
39
+
39
40
  Decidim::UserGroups::ManageableUserGroups.for(current_user).include?(model)
40
41
  end
41
42
 
@@ -53,18 +54,21 @@ module Decidim
53
54
  def can_join_user_group?
54
55
  return false unless current_user
55
56
  return false if model.is_a?(Decidim::User)
57
+
56
58
  Decidim::UserGroupMembership.where(user: current_user, user_group: model).empty?
57
59
  end
58
60
 
59
61
  def can_leave_group?
60
62
  return false unless current_user
61
63
  return false if model.is_a?(Decidim::User)
64
+
62
65
  Decidim::UserGroupMembership.where(user: current_user, user_group: model).where.not(role: :creator).any?
63
66
  end
64
67
 
65
68
  def user_group_email_to_be_confirmed?
66
69
  return false unless current_user
67
70
  return false if model.is_a?(Decidim::User)
71
+
68
72
  !model.confirmed?
69
73
  end
70
74
  end
@@ -20,6 +20,7 @@ module Decidim
20
20
 
21
21
  def sections_to_render
22
22
  return non_empty_sections.slice(selected_resource_type) if has_selected_resource_type?
23
+
23
24
  non_empty_sections
24
25
  end
25
26
 
@@ -20,5 +20,5 @@
20
20
  <% end %>
21
21
 
22
22
  <% if last_section? %>
23
- <hr class="reset mb-m mt-sm" />
23
+ <hr class="reset mb-m mt-sm">
24
24
  <% end %>
@@ -16,6 +16,7 @@ module Decidim
16
16
  return if model.nil?
17
17
  return unless current_user
18
18
  return if current_user.tos_accepted?
19
+
19
20
  render model
20
21
  end
21
22
 
@@ -12,6 +12,7 @@ module Decidim
12
12
  def show
13
13
  return if invitations.empty?
14
14
  return unless own_profile?
15
+
15
16
  render :show
16
17
  end
17
18
 
@@ -12,6 +12,7 @@ module Decidim
12
12
  def show
13
13
  return if requests.empty?
14
14
  return unless current_user_is_manager?
15
+
15
16
  render :show
16
17
  end
17
18
 
@@ -0,0 +1,14 @@
1
+ <div class="columns large-3">
2
+ <% if wizard_aside_back_url %>
3
+ <div class="m-bottom">
4
+ <%= link_to wizard_aside_back_url do %>
5
+ <%= icon "chevron-left", class: "icon--small" %>
6
+ <%= i18n_wizard_aside_back %>
7
+ <% end %>
8
+ </div>
9
+ <% end %>
10
+
11
+ <div class="show-for-large">
12
+ <%= wizard_stepper %>
13
+ </div>
14
+ </div>
@@ -0,0 +1,18 @@
1
+ <%= cell("decidim/announcement", wizard_header_announcement) %>
2
+
3
+ <div class="proposal_wizard_help_text">
4
+ <%= cell("decidim/announcement", wizard_header_help_text) %>
5
+ </div>
6
+
7
+ <h2 class="section-heading">
8
+ <%= wizard_header_title %>
9
+ <%= wizard_header_similar_resources_count %>
10
+ </h2>
11
+
12
+ <div class="hide-for-large m-bottom">
13
+ <%= wizard_header_see_steps %>
14
+
15
+ <ol id="steps" class="wizard__steps steps-toggle is-hidden" data-toggler=".is-hidden">
16
+ <%= wizard_stepper %>
17
+ </ol>
18
+ </div>
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # This cell renders the wizard step form :wizard_aside or :wizard_header view.
5
+ # Is designed to be used by different models and so it does not try to compute
6
+ # the information likely to change. Expects a Hash with all necessary data.
7
+ class WizardStepFormCell < Decidim::ViewModel
8
+ include Decidim::LayoutHelper
9
+
10
+ def show
11
+ render view
12
+ end
13
+
14
+ private
15
+
16
+ # A Hash with all necessary data to render the view.
17
+ def view_options
18
+ model
19
+ end
20
+
21
+ # Returns the name of the view we want to render, as Symbol.
22
+ def view
23
+ view_options[:view]
24
+ end
25
+
26
+ # Returns the current step as Integer.
27
+ def current_step
28
+ view_options[:current_step]
29
+ end
30
+
31
+ # Returns the total number of steps to build the #wizard_stepper, as Integer.
32
+ def total_steps
33
+ view_options[:total_steps]
34
+ end
35
+
36
+ # Returns the list with all the steps, in HTML.
37
+ def wizard_stepper
38
+ content_tag :ol, class: "wizard__steps" do
39
+ (1..total_steps).map { |step| wizard_stepper_step(step) }.join
40
+ end
41
+ end
42
+
43
+ # Returns the list item of the given step, in HTML.
44
+ def wizard_stepper_step(step)
45
+ content_tag(:li, wizard_step_name(step), class: wizard_step_classes(step))
46
+ end
47
+
48
+ # Returns the name of the step, translated
49
+ def wizard_step_name(step)
50
+ view_options[:steps][step.to_s.to_sym]
51
+ end
52
+
53
+ # Returns the CSS classes used for the wizard for the given step.
54
+ def wizard_step_classes(step)
55
+ if step == current_step
56
+ %(step--active step_#{step})
57
+ elsif step < current_step
58
+ %(step--past step_#{step})
59
+ else
60
+ %()
61
+ end
62
+ end
63
+
64
+ # Returns the url of the back button.
65
+ def wizard_aside_back_url
66
+ view_options[:wizard_aside_back_url]
67
+ end
68
+
69
+ # Returns the translation of the back button.
70
+ def i18n_wizard_aside_back
71
+ t(".wizard_aside.back")
72
+ end
73
+
74
+ # Returns a Hash to be passed to Decidim::AnnouncementCell.
75
+ def wizard_header_announcement
76
+ view_options[:wizard_header_announcement] || {}
77
+ end
78
+
79
+ # Returns a Hash to be passed to Decidim::AnnouncementCell.
80
+ def wizard_header_help_text
81
+ view_options[:wizard_header_help_text] || {}
82
+ end
83
+
84
+ # Returns the translation of the header title.
85
+ def wizard_header_title
86
+ view_options[:wizard_header_title]
87
+ end
88
+
89
+ # Returns the similar resources count for the compare step.
90
+ def wizard_header_similar_resources_count
91
+ count = view_options[:wizard_header_similar_resources_count]
92
+ "(#{count})" if count
93
+ end
94
+
95
+ # Returns the header see steps information, only visible for small screens.
96
+ def wizard_header_see_steps
97
+ content_tag(:span, class: "text-small") do
98
+ i18n_wizard_header_step_of + " (#{wizard_header_see_steps_link})"
99
+ end
100
+ end
101
+
102
+ # Returns a translation with the current step number and the total steps number.
103
+ def i18n_wizard_header_step_of
104
+ t(".wizard_header.step_of", current_step: current_step, total_steps: total_steps)
105
+ end
106
+
107
+ # Returns a link that toggles the steps in the mobile view.
108
+ def wizard_header_see_steps_link
109
+ content_tag(:a, t(".wizard_header.see_steps"), "data-toggle": "steps")
110
+ end
111
+ end
112
+ end
@@ -32,7 +32,7 @@ module Decidim
32
32
  notify_amendable_and_emendation_authors_and_followers
33
33
  end
34
34
 
35
- broadcast(:ok, @amendable)
35
+ broadcast(:ok, @emendation)
36
36
  end
37
37
 
38
38
  private
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Amendable
5
+ # A command with all the business logic when a user starts amending a resource.
6
+ class CreateDraft < Rectify::Command
7
+ # Public: Initializes the command.
8
+ #
9
+ # form - A form object with the params.
10
+ def initialize(form)
11
+ @form = form
12
+ @amendable = form.amendable
13
+ @current_user = form.current_user
14
+ @user_group = Decidim::UserGroup.find_by(id: form.user_group_id)
15
+ end
16
+
17
+ # Executes the command. Broadcasts these events:
18
+ #
19
+ # - :ok when everything is valid, together with the amend.
20
+ # - :invalid if the form wasn't valid and we couldn't proceed.
21
+ #
22
+ # Returns nothing.
23
+ def call
24
+ return broadcast(:invalid) if form.invalid?
25
+
26
+ transaction do
27
+ create_emendation!
28
+ create_amendment!
29
+ end
30
+
31
+ broadcast(:ok, @amendment)
32
+ end
33
+
34
+ private
35
+
36
+ attr_reader :form, :amendable, :current_user, :user_group
37
+
38
+ # Prevent PaperTrail from creating an additional version
39
+ # in the amendment multi-step creation process (step 1: create)
40
+ #
41
+ # A first version will be created in step 4: publish
42
+ # for diff rendering in the amendment control version
43
+ def create_emendation!
44
+ PaperTrail.request(enabled: false) do
45
+ @emendation = Decidim.traceability.perform_action!(
46
+ :create,
47
+ amendable.class,
48
+ current_user,
49
+ visibility: "public-only"
50
+ ) do
51
+ emendation = amendable.class.new(form.emendation_params)
52
+ emendation.component = amendable.component
53
+ emendation.add_author(current_user, user_group)
54
+ emendation.save!
55
+ emendation
56
+ end
57
+ end
58
+ end
59
+
60
+ def create_amendment!
61
+ @amendment = Decidim::Amendment.create!(
62
+ amender: current_user,
63
+ amendable: amendable,
64
+ emendation: @emendation,
65
+ state: "draft"
66
+ )
67
+ end
68
+ end
69
+ end
70
+ end