decidim-core 0.21.0 → 0.22.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 (544) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/decidim_core_manifest.js +3 -0
  3. data/app/assets/fonts/decidim/Roboto-Regular.svg +1 -10520
  4. data/app/assets/fonts/decidim/Source_Sans_Pro_400.svg +1 -345
  5. data/app/assets/fonts/decidim/Source_Sans_Pro_600.svg +1 -339
  6. data/app/assets/fonts/decidim/Source_Sans_Pro_900.svg +1 -342
  7. data/app/assets/images/decidim/avatar-multiuser.png +0 -0
  8. data/app/assets/images/decidim/brands/google.svg +1 -1
  9. data/app/assets/images/decidim/decidim-logo.svg +1 -71
  10. data/app/assets/images/decidim/default-avatar.svg +1 -14
  11. data/app/assets/images/decidim/gamification/badges/followers.svg +1 -115
  12. data/app/assets/images/decidim/gamification/badges/invitations.svg +1 -117
  13. data/app/assets/images/decidim/icons.svg +1 -259
  14. data/app/assets/images/decidim/placeholder.jpg +0 -0
  15. data/app/assets/javascripts/decidim.js.es6 +23 -1
  16. data/app/assets/javascripts/decidim/ajax_modals.js.es6 +3 -0
  17. data/app/assets/javascripts/decidim/assets.js.erb +5 -0
  18. data/app/assets/javascripts/decidim/callout.js.es6 +18 -0
  19. data/app/assets/javascripts/decidim/configuration.js.es6 +23 -0
  20. data/app/assets/javascripts/decidim/confirm.js.es6 +178 -0
  21. data/app/assets/javascripts/decidim/conversations.js.es6 +17 -0
  22. data/app/assets/javascripts/decidim/core/bundle.js +1 -1
  23. data/app/assets/javascripts/decidim/core/bundle.js.map +1 -1
  24. data/app/assets/javascripts/decidim/core/extrapoly.js +6 -0
  25. data/app/assets/javascripts/decidim/data_picker.js.es6 +128 -50
  26. data/app/assets/javascripts/decidim/diff_mode_dropdown.js.es6 +5 -7
  27. data/app/assets/javascripts/decidim/dropdowns_menus.js.es6 +32 -0
  28. data/app/assets/javascripts/decidim/external_link.js.es6 +69 -0
  29. data/app/assets/javascripts/decidim/floating_help.js.es6 +7 -0
  30. data/app/assets/javascripts/decidim/form_filter.component.js.es6 +1 -1
  31. data/app/assets/javascripts/decidim/form_filter.component.test.js +4 -4
  32. data/app/assets/javascripts/decidim/form_validator.es6 +61 -0
  33. data/app/assets/javascripts/decidim/foundation.js.es6 +28 -28
  34. data/app/assets/javascripts/decidim/icon.js.es6 +42 -0
  35. data/app/assets/javascripts/decidim/identity_selector_dialog.js.es6 +61 -0
  36. data/app/assets/javascripts/decidim/input_character_counter.js.es6 +115 -0
  37. data/app/assets/javascripts/decidim/input_mentions.js.es6 +34 -9
  38. data/app/assets/javascripts/decidim/input_multiple_mentions.js.es6 +195 -0
  39. data/app/assets/javascripts/decidim/map.js.es6 +40 -3
  40. data/app/assets/javascripts/decidim/orders.js.es6 +9 -28
  41. data/app/assets/javascripts/decidim/responsive_horizontal_tabs.js.es6 +12 -0
  42. data/app/assets/javascripts/decidim/results_listing.js.es6 +44 -0
  43. data/app/assets/javascripts/decidim/start_conversation_dialog.js +13 -0
  44. data/app/assets/javascripts/decidim/vizzs.js.es6 +1 -0
  45. data/app/assets/stylesheets/decidim/_decidim-settings.scss +5 -0
  46. data/app/assets/stylesheets/decidim/_decidim.scss +13 -11
  47. data/app/assets/stylesheets/decidim/_properties.scss +25 -0
  48. data/app/assets/stylesheets/decidim/_variables.scss +6 -24
  49. data/app/assets/stylesheets/decidim/application.scss.erb +2 -2
  50. data/app/assets/stylesheets/decidim/editor.scss +2 -2
  51. data/app/assets/stylesheets/decidim/email.scss +1771 -0
  52. data/app/assets/stylesheets/decidim/extras/_external-links.scss +29 -0
  53. data/app/assets/stylesheets/decidim/extras/_extras.scss +17 -0
  54. data/app/assets/stylesheets/decidim/extras/_label-required.scss +9 -0
  55. data/app/assets/stylesheets/decidim/extras/_process_stats.scss +1 -1
  56. data/app/assets/stylesheets/decidim/extras/_quill.scss +5 -0
  57. data/app/assets/stylesheets/decidim/extras/_results-per-page.scss +8 -0
  58. data/app/assets/stylesheets/decidim/layouts/_home.scss +31 -7
  59. data/app/assets/stylesheets/decidim/layouts/_layouts.scss +5 -0
  60. data/app/assets/stylesheets/decidim/layouts/_logo.scss +26 -0
  61. data/app/assets/stylesheets/decidim/layouts/_user.scss +4 -0
  62. data/app/assets/stylesheets/decidim/modules/_author-avatar.scss +9 -13
  63. data/app/assets/stylesheets/decidim/modules/_buttons.scss +198 -26
  64. data/app/assets/stylesheets/decidim/modules/_cards.scss +174 -23
  65. data/app/assets/stylesheets/decidim/modules/_collapsible-list.scss +21 -0
  66. data/app/assets/stylesheets/decidim/modules/_comments.scss +25 -1
  67. data/app/assets/stylesheets/decidim/modules/_conference-programme.scss +0 -1
  68. data/app/assets/stylesheets/decidim/modules/_confirm.scss +5 -0
  69. data/app/assets/stylesheets/decidim/modules/_conversation.scss +50 -0
  70. data/app/assets/stylesheets/decidim/modules/_data-picker.scss +9 -11
  71. data/app/assets/stylesheets/decidim/modules/_definition-data.scss +6 -1
  72. data/app/assets/stylesheets/decidim/modules/_docs-manager.scss +0 -1
  73. data/app/assets/stylesheets/decidim/modules/_extra.scss +0 -2
  74. data/app/assets/stylesheets/decidim/modules/_filters.scss +25 -1
  75. data/app/assets/stylesheets/decidim/modules/_floating-helper.scss +20 -8
  76. data/app/assets/stylesheets/decidim/modules/_footer.scss +8 -4
  77. data/app/assets/stylesheets/decidim/modules/_forms.scss +63 -4
  78. data/app/assets/stylesheets/decidim/modules/_horizontal-tabs.scss +64 -1
  79. data/app/assets/stylesheets/decidim/modules/_inline-filters.scss +6 -3
  80. data/app/assets/stylesheets/decidim/modules/_input-gallery.scss +10 -0
  81. data/app/assets/stylesheets/decidim/modules/_input-mentions.scss +25 -7
  82. data/app/assets/stylesheets/decidim/modules/_input-multiple-mentions.scss +5 -0
  83. data/app/assets/stylesheets/decidim/modules/_map.scss +11 -0
  84. data/app/assets/stylesheets/decidim/modules/_margins.scss +8 -7
  85. data/app/assets/stylesheets/decidim/modules/_messages.scss +18 -18
  86. data/app/assets/stylesheets/decidim/modules/_modules.scss +75 -72
  87. data/app/assets/stylesheets/decidim/modules/_navbar.scss +176 -26
  88. data/app/assets/stylesheets/decidim/modules/_notification.scss +5 -0
  89. data/app/assets/stylesheets/decidim/modules/_order-by.scss +5 -0
  90. data/app/assets/stylesheets/decidim/modules/_process-nav.scss +5 -2
  91. data/app/assets/stylesheets/decidim/modules/_process-phase.scss +2 -4
  92. data/app/assets/stylesheets/decidim/modules/_process-stats.scss +2 -2
  93. data/app/assets/stylesheets/decidim/modules/_progress-bar.scss +1 -1
  94. data/app/assets/stylesheets/decidim/modules/_reveal.scss +6 -0
  95. data/app/assets/stylesheets/decidim/modules/_signup.scss +6 -5
  96. data/app/assets/stylesheets/decidim/modules/_static-pages.scss +0 -1
  97. data/app/assets/stylesheets/decidim/modules/_sticky.scss +5 -0
  98. data/app/assets/stylesheets/decidim/modules/_tags.scss +4 -0
  99. data/app/assets/stylesheets/decidim/modules/_timeline.scss +1 -2
  100. data/app/assets/stylesheets/decidim/modules/_typography.scss +47 -8
  101. data/app/assets/stylesheets/decidim/modules/_versions.scss +0 -1
  102. data/app/assets/stylesheets/decidim/utils/_helpers.scss +8 -0
  103. data/app/assets/stylesheets/decidim/utils/_mixins.scss +86 -7
  104. data/app/assets/stylesheets/decidim/utils/_settings.scss +81 -69
  105. data/app/assets/stylesheets/decidim/vizzs.scss +8 -0
  106. data/app/assets/stylesheets/decidim/vizzs/_areachart.scss +0 -1
  107. data/app/assets/stylesheets/decidim/vizzs/_linechart.scss +0 -1
  108. data/app/assets/stylesheets/decidim/vizzs/_rowchart.scss +0 -1
  109. data/app/assets/stylesheets/decidim/vizzs/_vizzs.scss +5 -0
  110. data/app/assets/stylesheets/foundation-overrides/components/_button-group.scss +319 -0
  111. data/app/cells/decidim/activity/show.erb +24 -21
  112. data/app/cells/decidim/activity_cell.rb +2 -0
  113. data/app/cells/decidim/address_cell.rb +1 -1
  114. data/app/cells/decidim/amendable/amend_button_card_cell.rb +1 -5
  115. data/app/cells/decidim/amendable/promote_button_card_cell.rb +1 -1
  116. data/app/cells/decidim/announcement/show.erb +1 -1
  117. data/app/cells/decidim/author/comments.erb +1 -1
  118. data/app/cells/decidim/author/endorsements.erb +6 -0
  119. data/app/cells/decidim/author/flag.erb +5 -2
  120. data/app/cells/decidim/author/profile_inline.erb +0 -1
  121. data/app/cells/decidim/author/show.erb +2 -0
  122. data/app/cells/decidim/author/withdraw.erb +2 -2
  123. data/app/cells/decidim/author_cell.rb +9 -13
  124. data/app/cells/decidim/badge/show.erb +6 -6
  125. data/app/cells/decidim/badge/small.erb +2 -1
  126. data/app/cells/decidim/card/show.erb +4 -4
  127. data/app/cells/decidim/card_m/comments_counter.erb +1 -1
  128. data/app/cells/decidim/card_m/header.erb +4 -4
  129. data/app/cells/decidim/card_m/image.erb +1 -1
  130. data/app/cells/decidim/card_m/show.erb +2 -2
  131. data/app/cells/decidim/card_m_cell.rb +3 -2
  132. data/app/cells/decidim/collapsible_list/show.erb +3 -3
  133. data/app/cells/decidim/content_blocks/footer_sub_hero/show.erb +4 -4
  134. data/app/cells/decidim/content_blocks/hero_settings_form/show.erb +2 -2
  135. data/app/cells/decidim/content_blocks/how_to_participate/show.erb +8 -8
  136. data/app/cells/decidim/content_blocks/last_activity_cell.rb +1 -1
  137. data/app/cells/decidim/content_blocks/stats/show.erb +1 -1
  138. data/app/cells/decidim/content_blocks/sub_hero/show.erb +3 -3
  139. data/app/cells/decidim/diff/attribute.erb +10 -10
  140. data/app/cells/decidim/diff_cell.rb +11 -1
  141. data/app/cells/decidim/endorsement_buttons/select_identity_button.erb +10 -0
  142. data/app/cells/decidim/endorsement_buttons/show.erb +4 -0
  143. data/app/cells/decidim/endorsement_buttons_cell.rb +208 -0
  144. data/app/cells/decidim/endorsers_list/show.erb +16 -0
  145. data/app/cells/decidim/endorsers_list_cell.rb +29 -0
  146. data/app/cells/decidim/fingerprint_cell.rb +1 -0
  147. data/app/cells/decidim/follow_button/show.erb +13 -5
  148. data/app/cells/decidim/follow_button_cell.rb +29 -5
  149. data/app/cells/decidim/navbar_admin_link/show.erb +1 -1
  150. data/app/cells/decidim/navbar_admin_link_cell.rb +6 -0
  151. data/app/cells/decidim/newsletter_templates/base_cell.rb +30 -0
  152. data/app/cells/decidim/newsletter_templates/base_settings_form_cell.rb +13 -0
  153. data/app/cells/decidim/newsletter_templates/basic_only_text/show.erb +86 -0
  154. data/app/cells/decidim/newsletter_templates/basic_only_text_cell.rb +21 -0
  155. data/app/cells/decidim/newsletter_templates/basic_only_text_settings_form/show.erb +7 -0
  156. data/app/cells/decidim/newsletter_templates/basic_only_text_settings_form_cell.rb +8 -0
  157. data/app/cells/decidim/newsletter_templates/image_text_cta/show.erb +125 -0
  158. data/app/cells/decidim/newsletter_templates/image_text_cta_cell.rb +61 -0
  159. data/app/cells/decidim/newsletter_templates/image_text_cta_settings_form/show.erb +17 -0
  160. data/app/cells/decidim/newsletter_templates/image_text_cta_settings_form_cell.rb +8 -0
  161. data/app/cells/decidim/notifications/show.erb +1 -1
  162. data/app/cells/decidim/profile/show.erb +2 -2
  163. data/app/cells/decidim/profile/user_group_tabs.erb +10 -5
  164. data/app/cells/decidim/profile/user_tabs.erb +16 -14
  165. data/app/cells/decidim/profile_cell.rb +18 -0
  166. data/app/cells/decidim/profile_sidebar/show.erb +16 -16
  167. data/app/cells/decidim/profile_sidebar_cell.rb +1 -0
  168. data/app/cells/decidim/search_results_section/show.erb +1 -1
  169. data/app/cells/decidim/tags_cell.rb +32 -2
  170. data/app/cells/decidim/user_activity/show.erb +19 -1
  171. data/app/cells/decidim/user_activity_cell.rb +6 -0
  172. data/app/cells/decidim/user_conversation/conversation_header.erb +14 -0
  173. data/app/cells/decidim/user_conversation/messages.erb +15 -0
  174. data/app/cells/decidim/user_conversation/new.erb +15 -0
  175. data/app/cells/decidim/user_conversation/reply.erb +17 -0
  176. data/app/cells/decidim/user_conversation/show.erb +20 -0
  177. data/app/cells/decidim/user_conversation_cell.rb +75 -0
  178. data/app/cells/decidim/user_conversations/add_conversation_users.erb +25 -0
  179. data/app/cells/decidim/user_conversations/conversation_item.erb +38 -0
  180. data/app/cells/decidim/user_conversations/show.erb +58 -0
  181. data/app/cells/decidim/user_conversations_cell.rb +40 -0
  182. data/app/cells/decidim/user_group_admin_membership_profile/footer.erb +3 -3
  183. data/app/cells/decidim/user_profile/footer.erb +1 -1
  184. data/app/cells/decidim/user_profile/unlinked_user_data.erb +16 -0
  185. data/app/cells/decidim/user_profile/user_data.erb +1 -1
  186. data/app/cells/decidim/user_profile_cell.rb +7 -1
  187. data/app/cells/decidim/user_timeline_cell.rb +4 -0
  188. data/app/cells/decidim/version/show.erb +31 -0
  189. data/app/{views/decidim/shared/_version_author.html.erb → cells/decidim/version_author/show.erb} +1 -1
  190. data/app/cells/decidim/version_author_cell.rb +9 -0
  191. data/app/cells/decidim/version_cell.rb +83 -0
  192. data/app/cells/decidim/versions_list/show.erb +32 -0
  193. data/app/cells/decidim/versions_list_cell.rb +64 -0
  194. data/app/cells/decidim/versions_list_item/show.erb +20 -0
  195. data/app/cells/decidim/versions_list_item_cell.rb +51 -0
  196. data/app/cells/decidim/wizard_step_form/wizard_aside.erb +1 -1
  197. data/app/cells/decidim/wizard_step_form/wizard_header.erb +2 -2
  198. data/app/cells/decidim/wizard_step_form_cell.rb +4 -1
  199. data/app/commands/decidim/attachment_methods.rb +40 -0
  200. data/app/commands/decidim/create_registration.rb +2 -1
  201. data/app/commands/decidim/create_user_group.rb +12 -0
  202. data/app/commands/decidim/destroy_account.rb +12 -0
  203. data/app/commands/decidim/endorse_resource.rb +64 -0
  204. data/app/commands/decidim/gallery_methods.rb +64 -0
  205. data/app/commands/decidim/invite_user_again.rb +2 -4
  206. data/app/commands/decidim/messaging/reply_to_conversation.rb +34 -3
  207. data/app/commands/decidim/messaging/start_conversation.rb +36 -5
  208. data/app/commands/decidim/unendorse_resource.rb +38 -0
  209. data/app/commands/decidim/update_notifications_settings.rb +1 -0
  210. data/app/commands/decidim/update_user_group.rb +14 -1
  211. data/app/controllers/concerns/decidim/impersonate_users.rb +13 -0
  212. data/app/controllers/concerns/decidim/resource_versions_concern.rb +28 -0
  213. data/app/controllers/decidim/devise/registrations_controller.rb +2 -4
  214. data/app/controllers/decidim/devise/sessions_controller.rb +5 -0
  215. data/app/controllers/decidim/endorsements_controller.rb +71 -0
  216. data/app/controllers/decidim/messaging/conversations_controller.rb +52 -12
  217. data/app/controllers/decidim/newsletters_controller.rb +2 -2
  218. data/app/controllers/decidim/profiles_controller.rb +6 -0
  219. data/app/controllers/decidim/scopes_controller.rb +1 -0
  220. data/app/controllers/decidim/user_activities_controller.rb +19 -2
  221. data/app/controllers/decidim/user_conversations_controller.rb +142 -0
  222. data/app/controllers/decidim/user_timeline_controller.rb +19 -2
  223. data/app/events/decidim/resource_endorsed_event.rb +35 -0
  224. data/app/events/decidim/user_group_admin_event.rb +37 -0
  225. data/app/events/decidim/user_group_created_event.rb +6 -0
  226. data/app/events/decidim/user_group_updated_event.rb +6 -0
  227. data/app/forms/decidim/attachment_form.rb +1 -0
  228. data/app/forms/decidim/messaging/conversation_form.rb +10 -4
  229. data/app/forms/decidim/notifications_settings_form.rb +6 -0
  230. data/app/forms/decidim/registration_form.rb +1 -0
  231. data/app/functions/decidim/core/component_finder_base.rb +10 -3
  232. data/app/functions/decidim/core/component_list_base.rb +8 -2
  233. data/app/functions/decidim/core/user_entity_finder.rb +33 -0
  234. data/app/functions/decidim/core/user_entity_list.rb +31 -0
  235. data/app/helpers/concerns/decidim/flash_helper_extensions.rb +47 -0
  236. data/app/helpers/decidim/action_authorization_helper.rb +24 -2
  237. data/app/helpers/decidim/amendments_helper.rb +5 -3
  238. data/app/helpers/decidim/application_helper.rb +7 -1
  239. data/app/helpers/decidim/check_boxes_tree_helper.rb +4 -5
  240. data/app/helpers/decidim/cta_button_helper.rb +1 -1
  241. data/app/helpers/decidim/decidim_form_helper.rb +23 -0
  242. data/app/helpers/decidim/endorsable_helper.rb +93 -0
  243. data/app/helpers/decidim/filters_helper.rb +15 -5
  244. data/app/helpers/decidim/followable_helper.rb +11 -0
  245. data/app/helpers/decidim/layout_helper.rb +23 -5
  246. data/app/helpers/decidim/map_helper.rb +15 -2
  247. data/app/helpers/decidim/markup_helper.rb +9 -0
  248. data/app/helpers/decidim/messaging/conversation_helper.rb +61 -7
  249. data/app/helpers/decidim/orders_helper.rb +10 -1
  250. data/app/helpers/decidim/participatory_space_helpers.rb +1 -1
  251. data/app/helpers/decidim/resource_versions_helper.rb +24 -7
  252. data/app/helpers/decidim/rich_text_editor_helper.rb +1 -0
  253. data/app/helpers/decidim/sanitize_helper.rb +10 -2
  254. data/app/helpers/decidim/tooltip_helper.rb +1 -1
  255. data/app/helpers/decidim/traceability_helper.rb +2 -8
  256. data/app/helpers/decidim/user_profile_helper.rb +1 -1
  257. data/app/helpers/decidim/widget_urls_helper.rb +4 -2
  258. data/app/jobs/decidim/event_publisher_job.rb +1 -1
  259. data/app/mailers/concerns/decidim/multitenant_asset_host.rb +33 -0
  260. data/app/mailers/decidim/application_mailer.rb +1 -0
  261. data/app/mailers/decidim/messaging/conversation_mailer.rb +53 -4
  262. data/app/mailers/decidim/newsletter_mailer.rb +22 -4
  263. data/app/middleware/decidim/strip_x_forwarded_host.rb +14 -0
  264. data/app/models/decidim/action_log.rb +1 -1
  265. data/app/models/decidim/amendment.rb +0 -18
  266. data/app/models/decidim/authorization.rb +24 -0
  267. data/app/models/decidim/component.rb +7 -0
  268. data/app/models/decidim/content_block.rb +5 -3
  269. data/app/models/decidim/endorsement.rb +30 -0
  270. data/app/models/decidim/messaging/conversation.rb +39 -11
  271. data/app/models/decidim/messaging/message.rb +31 -5
  272. data/app/models/decidim/messaging/participation.rb +1 -1
  273. data/app/models/decidim/messaging/receipt.rb +8 -0
  274. data/app/models/decidim/newsletter.rb +7 -1
  275. data/app/models/decidim/organization.rb +16 -7
  276. data/app/models/decidim/user.rb +32 -0
  277. data/app/models/decidim/user_group.rb +23 -0
  278. data/app/permissions/decidim/permissions.rb +19 -6
  279. data/app/presenters/decidim/admin_log/user_presenter.rb +1 -1
  280. data/app/presenters/decidim/metric_charts_presenter.rb +33 -13
  281. data/app/presenters/decidim/nil_presenter.rb +29 -0
  282. data/app/presenters/decidim/resource_locator_presenter.rb +2 -1
  283. data/app/presenters/decidim/user_group_presenter.rb +1 -1
  284. data/app/presenters/decidim/user_presenter.rb +6 -0
  285. data/app/queries/decidim/metric_manage.rb +5 -0
  286. data/app/queries/decidim/metrics/followers_metric_manage.rb +1 -6
  287. data/app/queries/decidim/user_groups/admin_memberships.rb +3 -3
  288. data/app/services/decidim/activity_search.rb +1 -0
  289. data/app/services/decidim/base_diff_renderer.rb +25 -3
  290. data/app/services/decidim/events_manager.rb +4 -1
  291. data/app/types/decidim/core/decidim_type.rb +0 -4
  292. data/app/types/decidim/core/has_endorsable_input_sort.rb +17 -0
  293. data/app/types/decidim/core/has_timestamp_input_filter.rb +52 -0
  294. data/app/types/decidim/core/has_timestamp_input_sort.rb +12 -0
  295. data/app/types/decidim/core/user_entity_input_filter.rb +81 -0
  296. data/app/types/decidim/core/user_entity_input_sort.rb +24 -0
  297. data/app/types/decidim/core/user_group_type.rb +17 -5
  298. data/app/types/decidim/core/user_type.rb +17 -6
  299. data/app/uploaders/decidim/attachment_uploader.rb +1 -1
  300. data/app/uploaders/decidim/avatar_uploader.rb +4 -0
  301. data/app/uploaders/decidim/image_uploader.rb +28 -4
  302. data/app/uploaders/decidim/newsletter_template_image_uploader.rb +36 -0
  303. data/app/views/decidim/account/delete.html.erb +6 -3
  304. data/app/views/decidim/account/show.html.erb +17 -10
  305. data/app/views/decidim/amendments/_edit_form_fields.html.erb +2 -0
  306. data/app/views/decidim/amendments/_similar_emendation.html.erb +4 -4
  307. data/app/views/decidim/amendments/compare_draft.html.erb +2 -2
  308. data/app/views/decidim/amendments/edit_draft.html.erb +2 -2
  309. data/app/views/decidim/amendments/new.html.erb +2 -2
  310. data/app/views/decidim/amendments/preview_draft.html.erb +2 -2
  311. data/app/views/decidim/amendments/review.html.erb +3 -3
  312. data/app/views/decidim/application/_collection.html.erb +2 -2
  313. data/app/views/decidim/application/_document.html.erb +4 -4
  314. data/app/views/decidim/application/_documents.html.erb +1 -1
  315. data/app/views/decidim/application/_photos.html.erb +1 -1
  316. data/app/views/decidim/authorization_modals/show.html.erb +1 -1
  317. data/app/views/decidim/data_portability/show.html.erb +3 -0
  318. data/app/views/decidim/devise/confirmations/new.html.erb +3 -3
  319. data/app/views/decidim/devise/invitations/edit.html.erb +13 -13
  320. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +5 -3
  321. data/app/views/decidim/devise/passwords/edit.html.erb +5 -3
  322. data/app/views/decidim/devise/passwords/new.html.erb +3 -3
  323. data/app/views/decidim/devise/registrations/edit.html.erb +2 -1
  324. data/app/views/decidim/devise/registrations/new.html.erb +7 -8
  325. data/app/views/decidim/devise/sessions/new.html.erb +4 -6
  326. data/app/views/decidim/devise/shared/_newsletter_modal.html.erb +3 -3
  327. data/app/views/decidim/devise/shared/_omniauth_buttons.html.erb +3 -1
  328. data/app/views/decidim/devise/shared/_omniauth_buttons_mini.html.erb +4 -1
  329. data/app/views/decidim/devise/unlocks/new.html.erb +3 -3
  330. data/app/views/decidim/doorkeeper/authorizations/new.html.erb +2 -2
  331. data/app/views/decidim/endorsements/_identity.html.erb +9 -0
  332. data/app/views/decidim/endorsements/identities.html.erb +12 -0
  333. data/app/views/decidim/endorsements/update_buttons_and_counters.js.erb +20 -0
  334. data/app/views/decidim/errors/internal_server_error.html.erb +2 -2
  335. data/app/views/decidim/errors/not_found.html.erb +2 -2
  336. data/app/views/decidim/gamification/badges/index.html.erb +4 -4
  337. data/app/views/decidim/group_admins/index.html.erb +6 -4
  338. data/app/views/decidim/group_invites/index.html.erb +5 -2
  339. data/app/views/decidim/group_members/index.html.erb +6 -4
  340. data/app/views/decidim/groups/_form.html.erb +2 -0
  341. data/app/views/decidim/groups/edit.html.erb +4 -2
  342. data/app/views/decidim/groups/new.html.erb +2 -2
  343. data/app/views/decidim/last_activities/index.html.erb +2 -0
  344. data/app/views/decidim/messaging/conversation_mailer/comanagers_new_conversation.html.erb +17 -0
  345. data/app/views/decidim/messaging/conversation_mailer/comanagers_new_message.html.erb +17 -0
  346. data/app/views/decidim/messaging/conversation_mailer/new_conversation.html.erb +2 -2
  347. data/app/views/decidim/messaging/conversation_mailer/new_group_conversation.html.erb +17 -0
  348. data/app/views/decidim/messaging/conversation_mailer/new_group_message.html.erb +17 -0
  349. data/app/views/decidim/messaging/conversation_mailer/new_message.html.erb +2 -2
  350. data/app/views/decidim/messaging/conversations/_add_conversation_users.html.erb +24 -0
  351. data/app/views/decidim/messaging/conversations/_conversation.html.erb +54 -0
  352. data/app/views/decidim/messaging/conversations/_messages.html.erb +15 -0
  353. data/app/views/decidim/messaging/conversations/_new_conversation_button.html.erb +33 -0
  354. data/app/views/decidim/messaging/conversations/_reply.html.erb +3 -3
  355. data/app/views/decidim/messaging/conversations/_show.html.erb +34 -15
  356. data/app/views/decidim/messaging/conversations/_start.html.erb +7 -1
  357. data/app/views/decidim/messaging/conversations/create.js.erb +1 -1
  358. data/app/views/decidim/messaging/conversations/index.html.erb +34 -29
  359. data/app/views/decidim/messaging/conversations/new.html.erb +1 -1
  360. data/app/views/decidim/messaging/conversations/show.html.erb +8 -4
  361. data/app/views/decidim/messaging/conversations/update.js.erb +1 -1
  362. data/app/views/decidim/newsletter_mailer/newsletter.html.erb +2 -2
  363. data/app/views/decidim/newsletters/show.html.erb +8 -1
  364. data/app/views/decidim/notifications/index.html.erb +4 -2
  365. data/app/views/decidim/notifications_settings/show.html.erb +14 -1
  366. data/app/views/decidim/own_user_groups/index.html.erb +4 -0
  367. data/app/views/decidim/pages/_standalone.html.erb +1 -1
  368. data/app/views/decidim/pages/_tabbed.html.erb +5 -5
  369. data/app/views/decidim/pages/index.html.erb +22 -13
  370. data/app/views/decidim/profiles/_user_follow.erb +3 -3
  371. data/app/views/decidim/profiles/show.html.erb +2 -0
  372. data/app/views/decidim/scopes/_scopes_picker_input.html.erb +11 -4
  373. data/app/views/decidim/scopes/picker.html.erb +26 -16
  374. data/app/views/decidim/searches/_count.html.erb +14 -11
  375. data/app/views/decidim/searches/_filters.html.erb +2 -2
  376. data/app/views/decidim/searches/index.html.erb +5 -3
  377. data/app/views/decidim/shared/_check_boxes_tree.html.erb +5 -3
  378. data/app/views/decidim/shared/_confirm_modal.html.erb +18 -0
  379. data/app/views/decidim/shared/_embed_modal.html.erb +4 -1
  380. data/app/views/decidim/shared/_extended_navigation_bar.html.erb +2 -2
  381. data/app/views/decidim/shared/_filter_form_help.erb +8 -0
  382. data/app/views/decidim/shared/_floating_help.html.erb +7 -7
  383. data/app/views/decidim/shared/_login_modal.html.erb +4 -4
  384. data/app/views/decidim/shared/_orders.html.erb +16 -5
  385. data/app/views/decidim/shared/_results_per_page.html.erb +16 -6
  386. data/app/views/decidim/shared/_share_modal.html.erb +8 -4
  387. data/app/views/decidim/shared/_static_map.html.erb +1 -1
  388. data/app/views/decidim/shared/participatory_space_filters/_filters.html.erb +1 -1
  389. data/app/views/decidim/user_activities/index.html.erb +4 -0
  390. data/app/views/decidim/user_activities/index.js.erb +14 -0
  391. data/app/views/decidim/user_conversations/index.html.erb +4 -0
  392. data/app/views/decidim/user_conversations/show.html.erb +4 -0
  393. data/app/views/decidim/user_conversations/update.js.erb +8 -0
  394. data/app/views/decidim/user_interests/_scopes.html.erb +12 -10
  395. data/app/views/decidim/user_interests/show.html.erb +4 -1
  396. data/app/views/decidim/user_timeline/index.html.erb +5 -1
  397. data/app/views/decidim/user_timeline/index.js.erb +14 -0
  398. data/app/views/kaminari/decidim/_first_page.html.erb +5 -1
  399. data/app/views/kaminari/decidim/_last_page.html.erb +5 -1
  400. data/app/views/kaminari/decidim/_next_page.html.erb +6 -1
  401. data/app/views/kaminari/decidim/_page.html.erb +2 -2
  402. data/app/views/kaminari/decidim/_paginator.html.erb +16 -14
  403. data/app/views/kaminari/decidim/_prev_page.html.erb +6 -1
  404. data/app/views/layouts/decidim/_application.html.erb +4 -2
  405. data/app/views/layouts/decidim/_cookie_warning.html.erb +1 -1
  406. data/app/views/layouts/decidim/_edit_link.html.erb +0 -0
  407. data/app/views/layouts/decidim/_head.html.erb +2 -0
  408. data/app/views/layouts/decidim/_js_configuration.html.erb +28 -0
  409. data/app/views/layouts/decidim/_language_chooser.html.erb +10 -5
  410. data/app/views/layouts/decidim/_logo.html.erb +2 -22
  411. data/app/views/layouts/decidim/_mailer_logo.html.erb +2 -22
  412. data/app/views/layouts/decidim/_main_footer.html.erb +3 -1
  413. data/app/views/layouts/decidim/_mini_footer.html.erb +7 -7
  414. data/app/views/layouts/decidim/_omnipresent_banner.html.erb +1 -1
  415. data/app/views/layouts/decidim/_organization_colors.html.erb +4 -3
  416. data/app/views/layouts/decidim/_social_media_links.html.erb +15 -10
  417. data/app/views/layouts/decidim/_topbar_search.html.erb +12 -2
  418. data/app/views/layouts/decidim/_user_menu.html.erb +6 -6
  419. data/app/views/layouts/decidim/_wrapper.html.erb +21 -16
  420. data/app/views/layouts/decidim/newsletter_base.html.erb +46 -0
  421. data/app/views/layouts/decidim/user_profile.html.erb +8 -3
  422. data/app/views/layouts/decidim/widget.html.erb +1 -0
  423. data/config/initializers/devise.rb +11 -3
  424. data/config/initializers/invisible_captcha.rb +1 -0
  425. data/config/initializers/omniauth.rb +7 -1
  426. data/config/initializers/rack_attack.rb +25 -16
  427. data/config/locales/ar.yml +7 -5
  428. data/config/locales/bg-BG.yml +1512 -0
  429. data/config/locales/ca.yml +258 -6
  430. data/config/locales/cs.yml +297 -37
  431. data/config/locales/da-DK.yml +9 -0
  432. data/config/locales/de.yml +279 -5
  433. data/config/locales/el.yml +1443 -5
  434. data/config/locales/en.yml +263 -11
  435. data/config/locales/es-MX.yml +257 -5
  436. data/config/locales/es-PY.yml +257 -5
  437. data/config/locales/es.yml +257 -5
  438. data/config/locales/et-EE.yml +9 -0
  439. data/config/locales/eu.yml +7 -2
  440. data/config/locales/fi-plain.yml +258 -6
  441. data/config/locales/fi.yml +319 -67
  442. data/config/locales/fr-CA.yml +1585 -0
  443. data/config/locales/fr.yml +263 -5
  444. data/config/locales/ga-IE.yml +9 -0
  445. data/config/locales/gl.yml +7 -2
  446. data/config/locales/hr-HR.yml +9 -0
  447. data/config/locales/hu.yml +87 -5
  448. data/config/locales/id-ID.yml +7 -2
  449. data/config/locales/is-IS.yml +1 -0
  450. data/config/locales/it.yml +279 -27
  451. data/config/locales/ja-JP.yml +1578 -0
  452. data/config/locales/lt-LT.yml +9 -0
  453. data/config/locales/lv-LV.yml +1485 -0
  454. data/config/locales/mt-MT.yml +9 -0
  455. data/config/locales/nl.yml +261 -6
  456. data/config/locales/no.yml +117 -41
  457. data/config/locales/pl.yml +755 -406
  458. data/config/locales/pt-BR.yml +8 -4
  459. data/config/locales/pt.yml +875 -536
  460. data/config/locales/ro-RO.yml +1603 -0
  461. data/config/locales/ru.yml +6 -1
  462. data/config/locales/sk-SK.yml +1426 -0
  463. data/config/locales/sk.yml +1441 -0
  464. data/config/locales/sl.yml +71 -0
  465. data/config/locales/sr-CS.yml +129 -0
  466. data/config/locales/sv.yml +323 -24
  467. data/config/locales/tr-TR.yml +7 -2
  468. data/config/locales/uk.yml +6 -1
  469. data/config/routes.rb +5 -0
  470. data/db/migrate/20180810092428_move_organization_fields_to_hero_content_block.rb +2 -2
  471. data/db/migrate/20191130151925_create_decidim_endorsements.rb +13 -0
  472. data/db/migrate/20191204075509_add_session_token_to_users.rb +7 -0
  473. data/db/migrate/20200211173227_add_direct_message_types_to_users.rb +12 -0
  474. data/db/migrate/20200320105904_index_foreign_keys_in_decidim_action_logs.rb +9 -0
  475. data/db/migrate/20200320105905_index_foreign_keys_in_decidim_amendments.rb +7 -0
  476. data/db/migrate/20200320105909_index_foreign_keys_in_decidim_authorizations.rb +7 -0
  477. data/db/migrate/20200320105917_index_foreign_keys_in_decidim_contextual_help_sections.rb +7 -0
  478. data/db/migrate/20200320105919_index_foreign_keys_in_decidim_endorsements.rb +7 -0
  479. data/db/migrate/20200320105923_index_foreign_keys_in_decidim_notifications.rb +7 -0
  480. data/db/migrate/20200320105927_index_foreign_keys_in_oauth_access_grants.rb +7 -0
  481. data/db/migrate/20200323094443_add_id_to_content_blocks_scope.rb +7 -0
  482. data/db/migrate/20200326102407_rename_scope_column.rb +7 -0
  483. data/db/migrate/20200327082257_migrate_newsletters_to_templates.rb +33 -0
  484. data/db/migrate/20200327082954_remove_newsletter_body.rb +7 -0
  485. data/db/migrate/20200401073419_add_index_on_content_block_scope_id.rb +11 -0
  486. data/db/seeds.rb +1 -1
  487. data/{app/controllers/concerns → lib}/decidim/action_authorization.rb +0 -0
  488. data/lib/decidim/api/author_interface.rb +4 -0
  489. data/lib/decidim/api/endorsable_interface.rb +22 -0
  490. data/lib/decidim/api/participatory_space_interface.rb +2 -0
  491. data/lib/decidim/api/timestamps_interface.rb +2 -2
  492. data/lib/decidim/coauthorable.rb +1 -1
  493. data/lib/decidim/component_manifest.rb +14 -0
  494. data/lib/decidim/content_parsers.rb +1 -0
  495. data/lib/decidim/content_parsers/user_group_parser.rb +61 -0
  496. data/lib/decidim/content_parsers/user_parser.rb +3 -5
  497. data/lib/decidim/content_renderers.rb +1 -0
  498. data/lib/decidim/content_renderers/user_group_renderer.rb +30 -0
  499. data/lib/decidim/core.rb +65 -21
  500. data/lib/decidim/core/api.rb +1 -0
  501. data/lib/decidim/core/engine.rb +88 -6
  502. data/lib/decidim/core/test.rb +8 -0
  503. data/lib/decidim/core/test/factories.rb +103 -3
  504. data/lib/decidim/core/test/shared_examples/admin_resource_gallery_examples.rb +79 -0
  505. data/lib/decidim/core/test/shared_examples/back_to_list_button_examples.rb +17 -0
  506. data/lib/decidim/core/test/shared_examples/comments_examples.rb +17 -2
  507. data/lib/decidim/core/test/shared_examples/edit_link_shared_examples.rb +5 -1
  508. data/lib/decidim/core/test/shared_examples/endorsable_interface_examples.rb +22 -0
  509. data/lib/decidim/core/test/shared_examples/endorsements_controller_shared_context.rb +22 -0
  510. data/lib/decidim/core/test/shared_examples/follows_examples.rb +1 -1
  511. data/lib/decidim/core/test/shared_examples/input_sort_examples.rb +21 -0
  512. data/lib/decidim/core/test/shared_examples/logo_email.rb +20 -0
  513. data/lib/decidim/core/test/shared_examples/metric_manage_shared_context.rb +9 -0
  514. data/lib/decidim/core/test/shared_examples/permissions.rb +143 -0
  515. data/lib/decidim/core/test/shared_examples/reports_examples.rb +4 -4
  516. data/lib/decidim/core/test/shared_examples/rich_text_editor_examples.rb +3 -3
  517. data/lib/decidim/core/test/shared_examples/simple_event.rb +1 -0
  518. data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +165 -0
  519. data/lib/decidim/core/test/shared_examples/traceable_interface_examples.rb +3 -3
  520. data/lib/decidim/core/test/shared_examples/with_endorsable_permissions_examples.rb +89 -0
  521. data/lib/decidim/core/version.rb +1 -1
  522. data/lib/decidim/endorsable.rb +25 -0
  523. data/lib/decidim/events.rb +1 -0
  524. data/lib/decidim/events/user_group_event.rb +45 -0
  525. data/lib/decidim/exporters/csv.rb +1 -1
  526. data/lib/decidim/filter_form_builder.rb +15 -6
  527. data/lib/decidim/form_builder.rb +209 -23
  528. data/lib/decidim/has_attachments.rb +1 -1
  529. data/lib/decidim/participable.rb +6 -0
  530. data/lib/decidim/participatory_space_manifest.rb +15 -0
  531. data/lib/decidim/query_extensions.rb +9 -15
  532. data/lib/decidim/settings_manifest.rb +15 -1
  533. data/lib/decidim/view_model.rb +4 -0
  534. data/lib/tasks/decidim_tasks.rake +1 -0
  535. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.ro.js +15 -0
  536. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.sk.js +14 -0
  537. data/vendor/assets/javascripts/svg4everybody.min.js +1 -2
  538. data/vendor/assets/javascripts/tribute.js +11 -4
  539. metadata +187 -31
  540. data/app/assets/javascripts/decidim/vizzs/orgchart.js.es6 +0 -699
  541. data/app/assets/stylesheets/decidim/email.css +0 -1403
  542. data/app/assets/stylesheets/decidim/modules/_input-hashtags.scss +0 -124
  543. data/app/resolvers/decidim/core/user_resolver.rb +0 -61
  544. data/app/views/decidim/messaging/conversations/_message.html.erb +0 -14
@@ -206,6 +206,7 @@ tr:
206
206
  explanation: '"A" ile başlayan bir pasaport numarası girerek doğrulanın.'
207
207
  fields:
208
208
  passport_number: Pasaport numarası
209
+ postal_code: Posta kodu
209
210
  name: Başka bir örnek yetkilendirme
210
211
  dummy_authorization_handler:
211
212
  explanation: '"X" ile biten bir belge numarası girerek doğrulanmış olsun'
@@ -384,6 +385,8 @@ tr:
384
385
  this_application_will_not_be_able_to: 'Bu uygulama mümkün olmayacaktır:'
385
386
  update_profile: profilinizi güncelleyin
386
387
  wants_to_use_your_account_html: "<strong>%{application_name}</strong> hesabınızı kullanmak istiyor"
388
+ endorsable:
389
+ endorsements: Cirolar
387
390
  errors:
388
391
  internal_server_error:
389
392
  title: Sunucumuzla ilgili bir sorun oluştu
@@ -725,6 +728,7 @@ tr:
725
728
  create:
726
729
  error: Konuşma başlamadı. Daha sonra tekrar deneyin
727
730
  index:
731
+ close: Yakın kalıcı
728
732
  no_conversations: Henüz konuşma yok
729
733
  title: Konuşmalar
730
734
  reply:
@@ -990,8 +994,6 @@ tr:
990
994
  close_window: Pencereyi kapat
991
995
  share: Pay
992
996
  share_link: Linki paylaş
993
- version_author:
994
- deleted: Silinmiş kullanıcı
995
997
  user_activity:
996
998
  index:
997
999
  no_activities_warning: Bu kullanıcının henüz herhangi bir etkinliği olmadı.
@@ -1004,6 +1006,9 @@ tr:
1004
1006
  update:
1005
1007
  error: İlgi alanlarınız güncellenirken bir hata oluştu.
1006
1008
  success: İlgi alanlarınız başarıyla güncellendi.
1009
+ version_author:
1010
+ show:
1011
+ deleted: Silinmiş kullanıcı
1007
1012
  welcome_notification:
1008
1013
  default_body: <p>Merhaba {{name}}, {{organization}} katıldığınız için teşekkürler ve hoş geldiniz!</p><ul><li>Burada neler yapabileceğiniz hakkında hızlı bir fikir edinmek istiyorsanız, <a href="{{help_url}}">Yardım</a> bölümüne bakın.</li><li>Okuduktan sonra ilk rozetinizi alacaksınız. İşte bu <a href="{{badges_url}}">tüm rozetlerle listesi</a> size katılmak olarak alabilirsiniz {{organization}}</li><li>onlarla Son ama en az, diğer insanları birleştirmek, paylaşmak yapan ve katılan olma deneyimi {{organization}}. Öneriler, yorumlar, tartışmalar yapın, ortak iyiliğe nasıl katkıda bulunacağınızı düşünün, ikna edeceğiniz argümanlar sunun, ikna olun, ikna olun, fikirlerinizi somut ve doğrudan bir şekilde ifade edin, sabır ve kararla karşılık verin, fikirlerinizi savunun ve saklayın. İşbirliği yapmak ve diğer insanların fikirlerine katılmak için açık bir zihin.</li></ul>
1009
1014
  default_subject: '{{organization}}katıldığınız için teşekkürler!'
@@ -138,6 +138,7 @@ uk:
138
138
  explanation: Підтвердьте свою особу, ввівши номер паспорта, що починається з "А"
139
139
  fields:
140
140
  passport_number: Номер паспорта
141
+ postal_code: Поштовий індекс
141
142
  name: Ще один приклад підтвердження особи
142
143
  dummy_authorization_handler:
143
144
  explanation: Підтвердьте особу, ввівши номер документа, що закінчується на "X"
@@ -278,6 +279,8 @@ uk:
278
279
  this_application_will_not_be_able_to: 'Цей додаток не зможе:'
279
280
  update_profile: Оновлювати ваш профіль
280
281
  wants_to_use_your_account_html: "<strong>%{application_name}</strong> бажає використовувати ваш обліковий запис"
282
+ endorsable:
283
+ endorsements: Проявів підтримки
281
284
  errors:
282
285
  internal_server_error:
283
286
  title: При з'єднанні з нашим сервером сталася помилка
@@ -392,6 +395,7 @@ uk:
392
395
  create:
393
396
  error: Бесіда не розпочата. Спробуйте ще раз пізніше
394
397
  index:
398
+ close: Закрити віконце
395
399
  no_conversations: У вас ще немає бесід
396
400
  reply:
397
401
  title: Відповісти
@@ -568,7 +572,8 @@ uk:
568
572
  close_window: Закрити вікно
569
573
  share: Поділитися
570
574
  share_link: Поділитись посиланням
571
- version_author:
575
+ version_author:
576
+ show:
572
577
  deleted: Видалений учасник
573
578
  devise:
574
579
  invitations:
@@ -48,6 +48,7 @@ Decidim::Core::Engine.routes.draw do
48
48
  end
49
49
  end
50
50
  resources :conversations, only: [:new, :create, :index, :show, :update], controller: "messaging/conversations"
51
+ post "/conversations/check_multiple", to: "messaging/conversations#check_multiple"
51
52
  resources :notifications, only: [:index, :destroy] do
52
53
  collection do
53
54
  delete :read_all
@@ -99,6 +100,7 @@ Decidim::Core::Engine.routes.draw do
99
100
  get "members", to: "profiles#members", as: "profile_members"
100
101
  get "activity", to: "user_activities#index", as: "profile_activity"
101
102
  get "timeline", to: "user_timeline#index", as: "profile_timeline"
103
+ resources :conversations, except: [:destroy], controller: "user_conversations", as: "profile_conversations"
102
104
  end
103
105
 
104
106
  resources :pages, only: [:index, :show], format: false
@@ -120,6 +122,9 @@ Decidim::Core::Engine.routes.draw do
120
122
 
121
123
  resource :follow, only: [:create, :destroy]
122
124
  resource :report, only: [:create]
125
+ resources :endorsements, only: [:create, :destroy] do
126
+ get :identities, on: :member
127
+ end
123
128
  resources :amends, only: [:new, :reject, :accept], controller: :amendments do
124
129
  collection do
125
130
  post :create
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class MoveOrganizationFieldsToHeroContentBlock < ActiveRecord::Migration[5.2]
4
- class ::Decidim::Organization < ApplicationRecord
4
+ class Organization < ApplicationRecord
5
5
  self.table_name = :decidim_organizations
6
6
 
7
7
  mount_uploader :homepage_image, ::Decidim::HomepageImageUploader
@@ -9,7 +9,7 @@ class MoveOrganizationFieldsToHeroContentBlock < ActiveRecord::Migration[5.2]
9
9
 
10
10
  def change
11
11
  Decidim::ContentBlock.reset_column_information
12
- Decidim::Organization.find_each do |organization|
12
+ Organization.find_each do |organization|
13
13
  content_block = Decidim::ContentBlock.find_by(organization: organization, scope: :homepage, manifest_name: :hero)
14
14
  settings = {}
15
15
  welcome_text = organization.welcome_text || {}
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateDecidimEndorsements < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :decidim_endorsements do |t|
6
+ t.references :resource, polymorphic: true
7
+ t.references :decidim_author, polymorphic: true, index: { name: "idx_endorsements_authors" }
8
+ t.integer :decidim_user_group_id, foreign_key: true
9
+ t.timestamps
10
+ t.index [:resource_type, :resource_id, :decidim_author_type, :decidim_author_id, :decidim_user_group_id], name: "idx_endorsements_rsrcs_and_authors", unique: true
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddSessionTokenToUsers < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_column :decidim_users, :session_token, :string
6
+ end
7
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddDirectMessageTypesToUsers < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_column :decidim_users, :direct_message_types, :string, default: "all"
6
+ # rubocop:disable Rails/SkipsModelValidations
7
+ Decidim::UserBaseEntity.update_all(direct_message_types: "all")
8
+ # rubocop:enable Rails/SkipsModelValidations
9
+
10
+ change_column_null :decidim_users, :direct_message_types, false
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class IndexForeignKeysInDecidimActionLogs < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_index :decidim_action_logs, :decidim_area_id
6
+ add_index :decidim_action_logs, :decidim_scope_id
7
+ add_index :decidim_action_logs, :version_id
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class IndexForeignKeysInDecidimAmendments < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_index :decidim_amendments, :decidim_emendation_id
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class IndexForeignKeysInDecidimAuthorizations < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_index :decidim_authorizations, :unique_id
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class IndexForeignKeysInDecidimContextualHelpSections < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_index :decidim_contextual_help_sections, :section_id
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class IndexForeignKeysInDecidimEndorsements < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_index :decidim_endorsements, :decidim_user_group_id
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class IndexForeignKeysInDecidimNotifications < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_index :decidim_notifications, :decidim_resource_id
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class IndexForeignKeysInOAuthAccessGrants < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_index :oauth_access_grants, :resource_owner_id
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddIdToContentBlocksScope < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_column :decidim_content_blocks, :scoped_resource_id, :integer
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RenameScopeColumn < ActiveRecord::Migration[5.2]
4
+ def change
5
+ rename_column :decidim_content_blocks, :scope, :scope_name
6
+ end
7
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ class MigrateNewslettersToTemplates < ActiveRecord::Migration[5.2]
4
+ class ContentBlock < ApplicationRecord
5
+ self.table_name = :decidim_content_blocks
6
+ end
7
+
8
+ class Newsletter < ApplicationRecord
9
+ self.table_name = :decidim_newsletters
10
+ end
11
+
12
+ def change
13
+ remove_index :decidim_content_blocks, name: "idx_dcdm_content_blocks_uniq_org_id_scope_manifest_name"
14
+
15
+ Newsletter.find_each do |newsletter|
16
+ existing_content_block = ContentBlock
17
+ .where(decidim_organization_id: newsletter.organization_id)
18
+ .where(scope_name: :newsletter_template)
19
+ .find_by(scoped_resource_id: newsletter.id)
20
+
21
+ next if existing_content_block
22
+
23
+ content_block = ContentBlock.new(
24
+ decidim_organization_id: newsletter.organization_id,
25
+ manifest_name: :basic_only_text,
26
+ scope_name: :newsletter_template,
27
+ scoped_resource_id: newsletter.id,
28
+ settings: newsletter.body.transform_keys { |key| "body_#{key}" }
29
+ )
30
+ content_block.save!
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RemoveNewsletterBody < ActiveRecord::Migration[5.2]
4
+ def change
5
+ remove_column :decidim_newsletters, :body
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddIndexOnContentBlockScopeId < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_index(
6
+ :decidim_content_blocks,
7
+ [:decidim_organization_id, :scope_name, :scoped_resource_id, :manifest_name],
8
+ name: "idx_decidim_content_blocks_org_id_scope_scope_id_manifest"
9
+ )
10
+ end
11
+ end
@@ -199,7 +199,7 @@ if !Rails.env.production? || ENV["SEED"]
199
199
 
200
200
  Decidim::System::CreateDefaultContentBlocks.call(organization)
201
201
 
202
- hero_content_block = Decidim::ContentBlock.find_by(organization: organization, manifest_name: :hero, scope: :homepage)
202
+ hero_content_block = Decidim::ContentBlock.find_by(organization: organization, manifest_name: :hero, scope_name: :homepage)
203
203
  hero_content_block.images_container.background_image = File.new(File.join(seeds_root, "homepage_image.jpg"))
204
204
  settings = {}
205
205
  welcome_text = Decidim::Faker::Localized.sentence(5)
@@ -7,12 +7,16 @@ module Decidim
7
7
  name "Author"
8
8
  description "An author"
9
9
 
10
+ field :id, !types.ID, "The author ID"
10
11
  field :name, !types.String, "The author's name"
11
12
  field :nickname, !types.String, "The author's nickname"
12
13
 
13
14
  field :avatarUrl, !types.String, "The author's avatar url"
14
15
  field :profilePath, !types.String, "The author's profile path"
15
16
  field :badge, !types.String, "The author's badge icon"
17
+ field :organizationName, !types.String, "The authors's organization name" do
18
+ resolve ->(obj, _args, _ctx) { obj.organization.name }
19
+ end
16
20
 
17
21
  field :deleted, !types.Boolean, "Whether the author's account has been deleted or not"
18
22
 
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Core
5
+ # This interface represents an object capable of endorsements.
6
+ EndorsableInterface = GraphQL::InterfaceType.define do
7
+ name "EndorsableInterface"
8
+ description "An interface that can be used in objects with endorsements"
9
+
10
+ field :endorsements, !types[Decidim::Core::AuthorInterface], "The endorsements of this object." do
11
+ resolve ->(object, _, _) {
12
+ object.endorsements.map(&:normalized_author)
13
+ }
14
+ end
15
+
16
+ field :endorsementsCount, types.Int do
17
+ description "The total amount of endorsements the object has received"
18
+ property :endorsements_count
19
+ end
20
+ end
21
+ end
22
+ end
@@ -24,6 +24,8 @@ module Decidim
24
24
 
25
25
  field :stats, types[Decidim::Core::StatisticType] do
26
26
  resolve ->(participatory_space, _args, _ctx) {
27
+ return if participatory_space.respond_to?(:show_statistics) && !participatory_space.show_statistics
28
+
27
29
  published_components = Component.where(participatory_space: participatory_space).published
28
30
 
29
31
  stats = Decidim.component_manifests.map do |component_manifest|
@@ -2,10 +2,10 @@
2
2
 
3
3
  module Decidim
4
4
  module Core
5
- # This interface represents a attachable object.
5
+ # This interface represents an object with standard create_at and updated_at timestamps.
6
6
  TimestampsInterface = GraphQL::InterfaceType.define do
7
7
  name "TimestampsInterface"
8
- description "An interface that can be used in objects created_at and updated_at attributes"
8
+ description "An interface that can be used in objects with created_at and updated_at attributes"
9
9
 
10
10
  field :createdAt, Decidim::Core::DateTimeType do
11
11
  description "The date and time this object was created"
@@ -76,7 +76,7 @@ module Decidim
76
76
  #
77
77
  # Returns an Array of User, UserGroups or any other entity capable object (such as Organization).
78
78
  def identities
79
- coauthorships.order(:created_at).collect(&:identity)
79
+ coauthorships.includes(:author, :user_group).order(:created_at).collect(&:identity)
80
80
  end
81
81
 
82
82
  # Returns the identities for the authors, only if they are user groups or users.
@@ -58,6 +58,11 @@ module Decidim
58
58
  # probably have the form of `Decidim::<MyComponent>::Permissions`.
59
59
  attribute :permissions_class_name, String, default: "Decidim::DefaultPermissions"
60
60
 
61
+ # The name of the class that handles extra logic on settings for this component.
62
+ # Optional class, that if present receives the settings and validates them.
63
+ # The suggested naming is `Decidim::<MyComponent>::Admin::ComponentForm`.
64
+ attribute :component_form_class_name, String, default: "Decidim::Admin::ComponentForm"
65
+
61
66
  # Does this component have specific data to serialize and import?
62
67
  # Beyond the attributes in decidim_component table.
63
68
  attribute :serializes_specific_data, Boolean, default: false
@@ -215,6 +220,15 @@ module Decidim
215
220
  permissions_class_name&.constantize
216
221
  end
217
222
 
223
+ # Public: Finds the form class from its component, using the
224
+ # `component_form_class_name` attribute. If the class does not exist,
225
+ # it raises an exception. If the class name is not set, it returns nil.
226
+ #
227
+ # Returns a Class.
228
+ def component_form_class
229
+ component_form_class_name&.constantize
230
+ end
231
+
218
232
  # Public: Finds the specific data serializer class from its name, using the
219
233
  # `specific_data_serializer_class_name` attribute. If the class does not exist,
220
234
  # it raises an exception. If the class name is not set, it returns nil.
@@ -4,6 +4,7 @@ module Decidim
4
4
  module ContentParsers
5
5
  autoload :BaseParser, "decidim/content_parsers/base_parser"
6
6
  autoload :UserParser, "decidim/content_parsers/user_parser"
7
+ autoload :UserGroupParser, "decidim/content_parsers/user_group_parser"
7
8
  autoload :HashtagParser, "decidim/content_parsers/hashtag_parser"
8
9
  autoload :NewlineParser, "decidim/content_parsers/newline_parser"
9
10
  autoload :LinkParser, "decidim/content_parsers/link_parser"
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ContentParsers
5
+ # A parser that searches user groups mentions in content.
6
+ #
7
+ # A word starting with `@` will be considered as a possible mention if
8
+ # they only contains letters, numbers or underscores.
9
+ #
10
+ # @see BaseParser Examples of how to use a content parser
11
+ class UserGroupParser < BaseParser
12
+ # Class used as a container for metadata
13
+ #
14
+ # @!attribute groups
15
+ # @return [Array] an array of Decidim::UserGroup mentioned in content
16
+ Metadata = Struct.new(:groups)
17
+
18
+ # Matches a nickname if contains letters, numbers or underscores.
19
+ MENTION_REGEX = /\B@(\w*)\b/.freeze
20
+
21
+ # Replaces found mentions matching a nickname of an existing
22
+ # group in the current organization with a global id. Other
23
+ # mentions found that doesn't match an existing group are
24
+ # returned as is.
25
+ #
26
+ # @return [String] the content with the valid mentions replaced by a global id
27
+ def rewrite
28
+ content.gsub(MENTION_REGEX) do |match|
29
+ groups[match[1..-1]]&.to_global_id&.to_s || match
30
+ end
31
+ end
32
+
33
+ # (see BaseParser#metadata)
34
+ def metadata
35
+ Metadata.new(existing_groups)
36
+ end
37
+
38
+ private
39
+
40
+ def groups
41
+ @groups ||= Hash[
42
+ existing_groups.map do |group|
43
+ [group.nickname, group]
44
+ end
45
+ ]
46
+ end
47
+
48
+ def existing_groups
49
+ @existing_groups ||= Decidim::UserGroup.where(organization: current_organization, nickname: content_nicknames)
50
+ end
51
+
52
+ def content_nicknames
53
+ @content_nicknames ||= content.scan(MENTION_REGEX).flatten.uniq
54
+ end
55
+
56
+ def current_organization
57
+ @current_organization ||= context[:current_organization]
58
+ end
59
+ end
60
+ end
61
+ end