decidim-core 0.10.1 → 0.11.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (269) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -11
  3. data/app/assets/images/decidim/icons.svg +25 -6
  4. data/app/assets/javascripts/decidim/account_form.js.es6 +8 -8
  5. data/app/assets/javascripts/decidim/append_elements.js.es6 +1 -1
  6. data/app/assets/javascripts/decidim/append_redirect_url_to_modals.js.es6 +5 -5
  7. data/app/assets/javascripts/decidim/data_picker.js.es6 +10 -10
  8. data/app/assets/javascripts/decidim/editor.js.es6 +37 -22
  9. data/app/assets/javascripts/decidim/filters.js.es6 +1 -1
  10. data/app/assets/javascripts/decidim/form_filter.component.js.es6 +15 -15
  11. data/app/assets/javascripts/decidim/form_filter.component.test.js +29 -29
  12. data/app/assets/javascripts/decidim/impersonation.js.es6 +3 -3
  13. data/app/assets/javascripts/decidim/input_mentions.js.es6 +100 -0
  14. data/app/assets/javascripts/decidim/input_tags.js.es6 +12 -0
  15. data/app/assets/javascripts/decidim/{map.js.es6.erb → map.js.es6} +9 -9
  16. data/app/assets/javascripts/decidim/notifications.js.es6 +10 -10
  17. data/app/assets/javascripts/decidim/orders.js.es6 +5 -5
  18. data/app/assets/javascripts/decidim/user_registrations.js.es6 +4 -4
  19. data/app/assets/javascripts/decidim/widget.js.es6 +1 -1
  20. data/app/assets/javascripts/decidim.js.es6 +10 -0
  21. data/app/assets/stylesheets/decidim/application.scss.erb +1 -1
  22. data/app/assets/stylesheets/decidim/modules/_author-avatar.scss +39 -0
  23. data/app/assets/stylesheets/decidim/modules/_cards.scss +158 -3
  24. data/app/assets/stylesheets/decidim/modules/_definition-data.scss +6 -0
  25. data/app/assets/stylesheets/decidim/modules/_extra.scss +1 -3
  26. data/app/assets/stylesheets/decidim/modules/_icons.scss +14 -6
  27. data/app/assets/stylesheets/decidim/modules/_inline-filters.scss +61 -0
  28. data/app/assets/stylesheets/decidim/modules/_input-mentions.scss +124 -0
  29. data/app/assets/stylesheets/decidim/modules/_input-tags.scss +55 -0
  30. data/app/assets/stylesheets/decidim/modules/_modules.scss +3 -0
  31. data/app/assets/stylesheets/decidim/modules/_status-labels.scss +4 -0
  32. data/app/assets/stylesheets/decidim/modules/_typography.scss +16 -0
  33. data/app/assets/stylesheets/decidim/utils/_helpers.scss +29 -0
  34. data/app/assets/stylesheets/decidim/utils/_mixins.scss +6 -0
  35. data/app/cells/decidim/author_box/show.erb +10 -0
  36. data/app/cells/decidim/author_box_cell.rb +21 -0
  37. data/app/cells/decidim/card/show.erb +17 -0
  38. data/app/cells/decidim/card_cell.rb +29 -0
  39. data/app/cells/decidim/profile/profile_inline.erb +21 -0
  40. data/app/cells/decidim/profile/show.erb +13 -0
  41. data/app/cells/decidim/profile_cell.rb +17 -0
  42. data/app/commands/decidim/create_omniauth_registration.rb +3 -2
  43. data/app/commands/decidim/create_report.rb +1 -1
  44. data/app/commands/decidim/invite_user.rb +2 -0
  45. data/app/constraints/decidim/current_component.rb +41 -0
  46. data/app/controllers/concerns/decidim/action_authorization.rb +3 -3
  47. data/app/controllers/concerns/decidim/devise_controllers.rb +2 -1
  48. data/app/controllers/concerns/decidim/filter_resource.rb +1 -1
  49. data/app/controllers/concerns/decidim/form_factory.rb +1 -1
  50. data/app/controllers/concerns/decidim/impersonate_users.rb +6 -2
  51. data/app/controllers/concerns/decidim/needs_authorization.rb +2 -2
  52. data/app/controllers/concerns/decidim/participatory_space_context.rb +15 -0
  53. data/app/controllers/concerns/decidim/settings.rb +5 -5
  54. data/app/controllers/decidim/application_controller.rb +2 -1
  55. data/app/controllers/decidim/{features → components}/base_controller.rb +16 -8
  56. data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +3 -1
  57. data/app/controllers/decidim/devise/registrations_controller.rb +1 -3
  58. data/app/controllers/decidim/doorkeeper/authorizations_controller.rb +16 -0
  59. data/app/controllers/decidim/doorkeeper/credentials_controller.rb +46 -0
  60. data/app/controllers/decidim/doorkeeper/token_info_controller.rb +9 -0
  61. data/app/controllers/decidim/doorkeeper/tokens_controller.rb +9 -0
  62. data/app/controllers/decidim/widgets_controller.rb +1 -1
  63. data/app/forms/decidim/follow_form.rb +1 -1
  64. data/app/forms/decidim/form.rb +1 -1
  65. data/app/forms/decidim/omniauth_registration_form.rb +1 -0
  66. data/app/forms/decidim/registration_form.rb +5 -5
  67. data/app/helpers/decidim/card_helper.rb +16 -0
  68. data/app/helpers/decidim/component_path_helper.rb +36 -0
  69. data/app/helpers/decidim/icon_helper.rb +7 -7
  70. data/app/helpers/decidim/messaging/conversation_helper.rb +4 -3
  71. data/app/helpers/decidim/paginate_helper.rb +1 -1
  72. data/app/helpers/decidim/resource_helper.rb +2 -2
  73. data/app/jobs/decidim/export_job.rb +3 -3
  74. data/app/mailers/decidim/messaging/conversation_mailer.rb +0 -2
  75. data/app/middleware/decidim/current_organization.rb +2 -2
  76. data/app/models/decidim/abilities/admin_ability.rb +1 -1
  77. data/app/models/decidim/abilities/everyone_ability.rb +1 -1
  78. data/app/models/decidim/abilities/participatory_process_admin_ability.rb +2 -2
  79. data/app/models/decidim/abilities/participatory_process_collaborator_ability.rb +2 -2
  80. data/app/models/decidim/action_log.rb +7 -5
  81. data/app/models/decidim/area.rb +7 -0
  82. data/app/models/decidim/authorization.rb +14 -0
  83. data/app/models/decidim/{feature.rb → component.rb} +15 -15
  84. data/app/models/decidim/moderation.rb +1 -1
  85. data/app/models/decidim/oauth_application.rb +24 -0
  86. data/app/models/decidim/organization.rb +5 -0
  87. data/app/models/decidim/participatory_space_link.rb +20 -0
  88. data/app/models/decidim/participatory_space_private_user.rb +19 -0
  89. data/app/models/decidim/user.rb +7 -0
  90. data/app/presenters/decidim/admin_log/area_presenter.rb +38 -0
  91. data/app/presenters/decidim/admin_log/{feature_presenter.rb → component_presenter.rb} +5 -5
  92. data/app/presenters/decidim/admin_log/newsletter_resource_presenter.rb +1 -1
  93. data/app/presenters/decidim/admin_log/oauth_application_presenter.rb +50 -0
  94. data/app/presenters/decidim/admin_log/oauth_application_resource_presenter.rb +18 -0
  95. data/app/presenters/decidim/home_stats_presenter.rb +7 -7
  96. data/app/presenters/decidim/log/value_types/area_presenter.rb +1 -1
  97. data/app/presenters/decidim/log/value_types/area_type_presenter.rb +28 -0
  98. data/app/presenters/decidim/log/value_types/currency_presenter.rb +20 -0
  99. data/app/presenters/decidim/log/value_types/scope_presenter.rb +1 -1
  100. data/app/presenters/decidim/log/value_types/scope_type_presenter.rb +1 -1
  101. data/app/presenters/decidim/resource_locator_presenter.rb +3 -3
  102. data/app/services/decidim/action_authorizer.rb +9 -9
  103. data/app/services/decidim/action_logger.rb +9 -7
  104. data/app/services/decidim/email_notification_generator.rb +1 -1
  105. data/app/services/decidim/notification_generator_for_recipient.rb +1 -1
  106. data/app/services/decidim/resource_search.rb +8 -8
  107. data/app/services/decidim/settings_change.rb +5 -5
  108. data/app/services/decidim/static_map_generator.rb +1 -1
  109. data/app/types/decidim/core/attachment_type.rb +14 -0
  110. data/app/types/decidim/core/category_type.rb +16 -0
  111. data/app/types/decidim/core/coordinates_type.rb +19 -0
  112. data/app/types/decidim/core/scope_api_type.rb +16 -0
  113. data/app/uploaders/decidim/oauth_application_logo_uploader.rb +9 -0
  114. data/app/validators/geocoding_validator.rb +2 -2
  115. data/app/views/decidim/account/delete.html.erb +7 -7
  116. data/app/views/decidim/application/_collection.html.erb +1 -1
  117. data/app/views/decidim/application/_document.html.erb +1 -1
  118. data/app/views/decidim/application/_photos.html.erb +1 -1
  119. data/app/views/decidim/devise/invitations/edit.html.erb +1 -1
  120. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +1 -1
  121. data/app/views/decidim/devise/registrations/new.html.erb +1 -1
  122. data/app/views/decidim/devise/sessions/new.html.erb +2 -2
  123. data/app/views/decidim/devise/shared/_omniauth_buttons.html.erb +1 -1
  124. data/app/views/decidim/devise/shared/_omniauth_buttons_mini.html.erb +1 -1
  125. data/app/views/decidim/doorkeeper/authorizations/new.html.erb +58 -0
  126. data/app/views/decidim/messaging/conversations/_show.html.erb +1 -1
  127. data/app/views/decidim/messaging/conversations/index.html.erb +1 -1
  128. data/app/views/decidim/notifications/index.html.erb +1 -1
  129. data/app/views/decidim/notifications_settings/show.html.erb +2 -2
  130. data/app/views/decidim/own_user_groups/index.html.erb +3 -3
  131. data/app/views/decidim/scopes/_scopes_picker_input.html.erb +4 -4
  132. data/app/views/decidim/scopes/picker.html.erb +3 -3
  133. data/app/views/decidim/shared/_action_authorization_modal.html.erb +1 -1
  134. data/app/views/decidim/shared/_author.html.erb +1 -1
  135. data/app/views/decidim/shared/_author_reference.html.erb +1 -12
  136. data/app/views/decidim/shared/{_feature_announcement.html.erb → _component_announcement.html.erb} +2 -2
  137. data/app/views/decidim/shared/_embed_modal.html.erb +1 -1
  138. data/app/views/decidim/shared/_flag_modal.html.erb +5 -5
  139. data/app/views/decidim/shared/_login_modal.html.erb +3 -3
  140. data/app/views/decidim/shared/_private_participatory_space.html.erb +5 -0
  141. data/app/views/decidim/shared/_share_modal.html.erb +1 -1
  142. data/app/views/decidim/shared/_tags.html.erb +1 -1
  143. data/app/views/decidim/shared/_version_author.html.erb +1 -1
  144. data/app/views/decidim/widgets/_data_picker.html.erb +4 -4
  145. data/app/views/devise/mailer/confirmation_instructions.html.erb +3 -3
  146. data/app/views/devise/mailer/invite_private_user.html.erb +17 -0
  147. data/app/views/devise/mailer/invite_private_user.text.erb +15 -0
  148. data/app/views/devise/mailer/password_change.html.erb +2 -2
  149. data/app/views/devise/mailer/reset_password_instructions.html.erb +5 -5
  150. data/app/views/kaminari/decidim/_first_page.html.erb +2 -3
  151. data/app/views/kaminari/decidim/_gap.html.erb +2 -3
  152. data/app/views/kaminari/decidim/_last_page.html.erb +2 -3
  153. data/app/views/kaminari/decidim/_next_page.html.erb +2 -3
  154. data/app/views/kaminari/decidim/_page.html.erb +2 -3
  155. data/app/views/kaminari/decidim/_paginator.html.erb +1 -2
  156. data/app/views/kaminari/decidim/_prev_page.html.erb +2 -3
  157. data/app/views/layouts/decidim/_application.html.erb +4 -4
  158. data/app/views/layouts/decidim/_component_authorization_modals.html.erb +5 -0
  159. data/app/views/layouts/decidim/_cookie_warning.html.erb +2 -2
  160. data/app/views/layouts/decidim/_head.html.erb +4 -4
  161. data/app/views/layouts/decidim/_impersonation_warning.html.erb +4 -4
  162. data/app/views/layouts/decidim/_language_chooser.html.erb +1 -1
  163. data/app/views/layouts/decidim/_social_media_links.html.erb +5 -5
  164. data/app/views/layouts/decidim/_wrapper.html.erb +5 -5
  165. data/app/views/layouts/decidim/mailer.html.erb +1 -1
  166. data/app/views/layouts/decidim/widget.html.erb +5 -5
  167. data/app/views/pages/home/_hero.html.erb +1 -1
  168. data/app/views/pages/home.html.erb +6 -6
  169. data/config/locales/ca.yml +66 -27
  170. data/config/locales/en.yml +69 -30
  171. data/config/locales/es.yml +66 -27
  172. data/config/locales/eu.yml +69 -30
  173. data/config/locales/fi.yml +69 -30
  174. data/config/locales/fr.yml +85 -46
  175. data/config/locales/gl.yml +69 -30
  176. data/config/locales/it.yml +69 -30
  177. data/config/locales/nl.yml +122 -83
  178. data/config/locales/pl.yml +69 -30
  179. data/config/locales/pt-BR.yml +69 -30
  180. data/config/locales/pt.yml +69 -30
  181. data/config/locales/ru.yml +0 -7
  182. data/config/locales/sv.yml +69 -30
  183. data/config/locales/uk.yml +0 -13
  184. data/config/routes.rb +8 -0
  185. data/db/migrate/20180206183235_create_participatory_space_private_users.rb +15 -0
  186. data/db/migrate/20180221101934_fix_nickname_index.rb +5 -6
  187. data/db/migrate/20180226140756_add_version_to_action_logs.rb +5 -1
  188. data/db/migrate/20180227131727_create_participatory_space_links.rb +12 -0
  189. data/db/migrate/20180305132906_rename_features_to_components.rb +13 -0
  190. data/db/migrate/20180308113207_doorkeeper_models.rb +85 -0
  191. data/db/migrate/20180314085339_rename_maximum_votes_per_proposal_to_threshold_per_proposal.rb +2 -2
  192. data/db/migrate/{20180326075746_change_event_name_and_class_to_rename_to_publish_proposal_event.rb → 20180323102631_change_event_name_and_class_to_rename_to_publish_proposal_event.rb} +0 -0
  193. data/db/seeds.rb +12 -2
  194. data/lib/decidim/api/attachable_interface.rb +13 -0
  195. data/lib/decidim/api/authorable_interface.rb +13 -0
  196. data/lib/decidim/api/categorizable_interface.rb +13 -0
  197. data/lib/decidim/api/participatory_space_interface.rb +4 -4
  198. data/lib/decidim/api/scopable_interface.rb +13 -0
  199. data/lib/decidim/authorable.rb +8 -0
  200. data/lib/decidim/{feature_manifest.rb → component_manifest.rb} +24 -21
  201. data/lib/decidim/{feature_validator.rb → component_validator.rb} +6 -6
  202. data/lib/decidim/{features → components}/export_manifest.rb +4 -4
  203. data/lib/decidim/components/namer.rb +35 -0
  204. data/lib/decidim/components.rb +9 -0
  205. data/lib/decidim/content_parsers/user_parser.rb +1 -1
  206. data/lib/decidim/core/api.rb +13 -0
  207. data/lib/decidim/core/engine.rb +76 -3
  208. data/lib/decidim/core/test/factories.rb +43 -10
  209. data/lib/decidim/core/test/shared_examples/announcements_examples.rb +9 -9
  210. data/lib/decidim/core/test/shared_examples/attachable_interface_examples.rb +16 -0
  211. data/lib/decidim/core/test/shared_examples/authorable_interface_examples.rb +33 -0
  212. data/lib/decidim/core/test/shared_examples/categorizable_interface_examples.rb +19 -0
  213. data/lib/decidim/core/test/shared_examples/comments_examples.rb +3 -3
  214. data/lib/decidim/core/test/shared_examples/follows_examples.rb +1 -1
  215. data/lib/decidim/core/test/shared_examples/has_component.rb +21 -0
  216. data/lib/decidim/core/test/shared_examples/has_reference.rb +2 -2
  217. data/lib/decidim/core/test/shared_examples/localised_email.rb +1 -1
  218. data/lib/decidim/core/test/shared_examples/paginated_resource_examples.rb +1 -1
  219. data/lib/decidim/core/test/shared_examples/reportable.rb +8 -6
  220. data/lib/decidim/core/test/shared_examples/reports_examples.rb +1 -1
  221. data/lib/decidim/core/test/shared_examples/scopable_interface_examples.rb +19 -0
  222. data/lib/decidim/core/test/shared_examples/scope_helper_examples.rb +8 -3
  223. data/lib/decidim/core/test/shared_examples/simple_event.rb +1 -1
  224. data/lib/decidim/core/test/shared_examples/user_localised_email_examples.rb +1 -1
  225. data/lib/decidim/core/test.rb +1 -1
  226. data/lib/decidim/core/version.rb +1 -1
  227. data/lib/decidim/core.rb +35 -37
  228. data/lib/decidim/events/base_event.rb +5 -5
  229. data/lib/decidim/events/simple_event.rb +8 -8
  230. data/lib/decidim/form_builder.rb +48 -3
  231. data/lib/decidim/has_attachment_collections.rb +1 -1
  232. data/lib/decidim/has_attachments.rb +1 -1
  233. data/lib/decidim/has_category.rb +2 -2
  234. data/lib/decidim/has_component.rb +23 -0
  235. data/lib/decidim/has_private_users.rb +26 -0
  236. data/lib/decidim/has_reference.rb +3 -3
  237. data/lib/decidim/page_finder.rb +1 -1
  238. data/lib/decidim/participatory_space_manifest.rb +3 -3
  239. data/lib/decidim/participatory_space_resourceable.rb +80 -0
  240. data/lib/decidim/publicable.rb +2 -2
  241. data/lib/decidim/query_extensions.rb +2 -2
  242. data/lib/decidim/rectify_ext.rb +32 -0
  243. data/lib/decidim/reportable.rb +1 -1
  244. data/lib/decidim/resource_manifest.rb +13 -13
  245. data/lib/decidim/resourceable.rb +8 -8
  246. data/lib/decidim/scopable.rb +1 -1
  247. data/lib/decidim/{scopable_feature.rb → scopable_component.rb} +1 -1
  248. data/lib/decidim/settings_manifest.rb +1 -1
  249. data/lib/decidim/stats_registry.rb +1 -1
  250. data/lib/decidim/view_model.rb +9 -0
  251. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.fr.js +4 -1
  252. data/vendor/assets/javascripts/form_datepicker.js.es6 +10 -10
  253. data/vendor/assets/javascripts/quill.min.js +2 -2
  254. data/vendor/assets/javascripts/quill.min.js.map +1 -1
  255. data/vendor/assets/javascripts/tagsinput.js +683 -0
  256. data/vendor/assets/javascripts/tribute.js +1607 -0
  257. data/vendor/assets/stylesheets/quill.bubble.css +30 -16
  258. data/vendor/assets/stylesheets/quill.core.css +19 -9
  259. data/vendor/assets/stylesheets/quill.snow.css +30 -16
  260. data/vendor/assets/stylesheets/tagsinput.css +55 -0
  261. data/vendor/assets/stylesheets/tribute.css +27 -0
  262. metadata +164 -27
  263. data/app/constraints/decidim/current_feature.rb +0 -41
  264. data/app/helpers/decidim/feature_path_helper.rb +0 -36
  265. data/app/views/layouts/decidim/_feature_authorization_modals.html.erb +0 -5
  266. data/lib/decidim/core/test/shared_examples/has_feature.rb +0 -21
  267. data/lib/decidim/features/namer.rb +0 -35
  268. data/lib/decidim/features.rb +0 -9
  269. data/lib/decidim/has_feature.rb +0 -23
@@ -6,11 +6,13 @@ sv:
6
6
  report:
7
7
  details: Ytterligare kommentarer
8
8
  user:
9
+ about: Handla om
9
10
  email: Din e-post
10
11
  name: Ditt namn
11
- nickname: Din korta, unika identifierare i decidim
12
+ nickname: Din korta, unika identifierare
12
13
  password: Nytt lösenord
13
14
  password_confirmation: Bekräfta ditt nya lösenord
15
+ personal_url: Personlig URL
14
16
  remove_avatar: Ta bort avatar
15
17
  user_group_document_number: Organisationsdokumentnummer
16
18
  user_group_name: Organisationsnamn
@@ -54,11 +56,15 @@ sv:
54
56
  success: Ditt konto har uppdaterats.
55
57
  success_with_email_confirmation: Ditt konto har uppdaterats. Du får ett e-postmeddelande för att bekräfta din nya e-postadress.
56
58
  admin_log:
57
- feature:
58
- create: "%{user_name} lagt till %{resource_name} funktion till %{space_name} rymden"
59
- delete: "%{user_name} tog bort %{resource_name} funktion från %{space_name} rymden"
60
- publish: "%{user_name} publicerade %{resource_name} -funktionen i %{space_name} -utrymmet"
61
- unpublish: "%{user_name} opublicerade %{resource_name} -funktionen från %{space_name} -platsen"
59
+ area:
60
+ create: "%{user_name} skapade området %{resource_name}"
61
+ delete: "%{user_name} raderade området %{resource_name}"
62
+ update: "%{user_name} uppdaterade området %{resource_name}"
63
+ component:
64
+ create: "%{user_name} lade till %{resource_name} komponenten till %{space_name} utrymmet"
65
+ delete: "%{user_name} tog bort komponenten %{resource_name} från %{space_name} -utrymmet"
66
+ publish: "%{user_name} publicerade %{resource_name} -komponenten i %{space_name} -utrymmet"
67
+ unpublish: "%{user_name} opublicerade %{resource_name} -komponenten från %{space_name} -utrymmet"
62
68
  moderation:
63
69
  hide: "%{user_name} gömde en resurs av typ %{resource_type} i %{space_name} rymden"
64
70
  unreport: "%{user_name} unreported en resurs av typ %{resource_type} i %{space_name} rymden"
@@ -67,6 +73,10 @@ sv:
67
73
  delete: "%{user_name} raderade %{resource_name} nyhetsbrev"
68
74
  deliver: "%{user_name} levererade %{resource_name} nyhetsbrev"
69
75
  update: "%{user_name} uppdaterade %{resource_name} nyhetsbrev"
76
+ oauth_application:
77
+ create: "%{user_name} skapade OAuth-applikationen %{resource_name}"
78
+ delete: "%{user_name} raderade OAuth-applikationen %{resource_name}"
79
+ update: "%{user_name} uppdaterade OAuth-applikationen %{resource_name}"
70
80
  organization:
71
81
  update: "%{user_name} uppdaterade organisationsinställningarna"
72
82
  scope:
@@ -118,6 +128,21 @@ sv:
118
128
  name: Foo godkännande
119
129
  granted_at: Beviljas vid %{timestamp}
120
130
  started_at: Börjat vid %{timestamp}
131
+ components:
132
+ dummy:
133
+ actions:
134
+ bar: Bar
135
+ foo: foo
136
+ name: Dummy Komponent
137
+ settings:
138
+ global:
139
+ comments_enabled: Kommentarer aktiverade
140
+ dummy_global_attribute_1: Dummy Attribut 1
141
+ dummy_global_attribute_2: Dummy Attribut 2
142
+ step:
143
+ comments_blocked: Kommentarer blockerade
144
+ dummy_step_attribute_1: Dummy Step Attribut 1
145
+ dummy_step_attribute_2: Dummy Step Attribut 2
121
146
  contact: Kontakt
122
147
  core:
123
148
  actions:
@@ -128,7 +153,7 @@ sv:
128
153
  email_already_exists: Ett annat konto använder samma e-postadress
129
154
  new:
130
155
  complete_profile: Komplett profil
131
- nickname_help: Din korta, unika identifierare i decidim
156
+ nickname_help: Din korta, unika identifierare i %{organization}
132
157
  sign_up: Vänligen fyll i din profil
133
158
  subtitle: Vänligen fyll i följande formulär för att slutföra registreringen
134
159
  username_help: Offentligt namn som visas på dina inlägg. I syfte att garantera anonymitet kan det vara något namn.
@@ -136,7 +161,7 @@ sv:
136
161
  new:
137
162
  already_have_an_account?: Har du redan ett konto?
138
163
  newsletter: Få ett tillfälligt nyhetsbrev med relevant information
139
- nickname_help: Din korta, unika identifierare i decidim
164
+ nickname_help: Din korta, unika identifierare i %{organization}
140
165
  sign_in: Logga in
141
166
  sign_up: Registrera
142
167
  sign_up_as:
@@ -154,6 +179,21 @@ sv:
154
179
  shared:
155
180
  omniauth_buttons:
156
181
  or: Eller
182
+ doorkeeper:
183
+ authorizations:
184
+ new:
185
+ authorize: Godkänn ansökan
186
+ by_organization_link_html: <small class="heading-small">av %{link}</small>
187
+ cancel: Avbryt
188
+ connect_your_account_html: Anslut ditt konto genom att logga in på <strong>%{organization}</strong>
189
+ publish_content: Publicera innehåll för dig
190
+ see_email: Se din email
191
+ see_name: Se ditt namn
192
+ see_username: Se ditt användarnamn
193
+ this_application_will_be_able_to: 'Denna ansökan kommer att kunna:'
194
+ this_application_will_not_be_able_to: 'Den här applikationen kommer inte att kunna:'
195
+ update_profile: Uppdatera din profil
196
+ wants_to_use_your_account_html: "<strong>%{application_name}</strong> vill använda ditt konto"
157
197
  errors:
158
198
  internal_server_error:
159
199
  title: Det uppstod ett problem med vår server
@@ -169,17 +209,17 @@ sv:
169
209
  email_outro: Du har fått den här meddelandet eftersom du följer %{resource_title}. Du kan sluta ta emot meddelanden efter föregående länk.
170
210
  email_subject: En uppdatering till %{resource_title}
171
211
  notification_title: Ett <a href="%{resource_path}"> nytt dokument</a> har lagts till <a href="%{attached_to_url}">%{resource_title}</a>
212
+ components:
213
+ component_published:
214
+ email_intro: 'Komponenten %{resource_title} är nu aktiv för %{participatory_space_title}. Du kan se den från den här sidan:'
215
+ email_outro: Du har fått den här meddelandet eftersom du följer %{participatory_space_title}. Du kan sluta ta emot meddelanden efter föregående länk.
216
+ email_subject: En uppdatering till %{participatory_space_title}
217
+ notification_title: '%{resource_title} komponenten är nu aktiv för <a href="%{resource_path}">%{participatory_space_title}</a>'
172
218
  email_event:
173
219
  email_greeting: Hej %{user_name},
174
220
  email_intro: 'Det har skett en uppdatering till "%{resource_title}". Du kan se den från den här sidan:'
175
221
  email_outro: Du har fått den här meddelandet eftersom du följer "%{resource_title}". Du kan följa det från föregående länk.
176
222
  email_subject: En uppdatering till %{resource_title}
177
- features:
178
- feature_published:
179
- email_intro: 'Komponenten %{resource_title} är nu aktiv för %{participatory_space_title}. Du kan se den från den här sidan:'
180
- email_outro: Du har fått den här meddelandet eftersom du följer %{participatory_space_title}. Du kan sluta ta emot meddelanden efter föregående länk.
181
- email_subject: En uppdatering till %{participatory_space_title}
182
- notification_title: '%{resource_title} komponenten är nu aktiv för <a href="%{resource_path}">%{participatory_space_title}</a>'
183
223
  notification_event:
184
224
  notification_title: En händelse uppstod till <a href="%{resource_path}">%{resource_title}</a>.
185
225
  users:
@@ -192,21 +232,6 @@ sv:
192
232
  export:
193
233
  ready: Vänligen se bifogad en zippad version av din export.
194
234
  subject: Din export "%{name}" är klar
195
- features:
196
- dummy:
197
- actions:
198
- bar: Bar
199
- foo: foo
200
- name: Dummy-funktionen
201
- settings:
202
- global:
203
- comments_enabled: Kommentarer aktiverade
204
- dummy_global_attribute_1: Dummy Attribut 1
205
- dummy_global_attribute_2: Dummy Attribut 2
206
- step:
207
- comments_blocked: Kommentarer blockerade
208
- dummy_step_attribute_1: Dummy Step Attribut 1
209
- dummy_step_attribute_2: Dummy Step Attribut 2
210
235
  filters:
211
236
  linked_classes:
212
237
  all: Alla
@@ -242,6 +267,8 @@ sv:
242
267
  value_types:
243
268
  area_presenter:
244
269
  not_found: 'Området hittades inte i databasen (ID: %{id})'
270
+ area_type_presenter:
271
+ not_found: 'Områdetypen hittades inte i databasen (ID: %{id})'
245
272
  scope_presenter:
246
273
  not_found: 'Omfattningen hittades inte i databasen (ID: %{id})'
247
274
  scope_type_presenter:
@@ -307,6 +334,10 @@ sv:
307
334
  pages:
308
335
  index:
309
336
  title: Mer information
337
+ participatory_space_private_users:
338
+ not_allowed: Du får inte se det här innehållet
339
+ profile:
340
+ deleted: Ta bort användare
310
341
  profiles:
311
342
  default_officialization_text: Denna deltagare är offentligt verifierad, hans / hennes namn eller roll har verifierats för att motsvara hans / hennes riktiga namn och roll
312
343
  show:
@@ -394,7 +425,7 @@ sv:
394
425
  invitations:
395
426
  edit:
396
427
  header: Ange ditt lösenord
397
- nickname_help: Din unika identifierare i decidim.
428
+ nickname_help: Din unika identifierare i %{organization}.
398
429
  submit_button: Spara
399
430
  mailer:
400
431
  invitation_instructions:
@@ -404,18 +435,25 @@ sv:
404
435
  ignore: |-
405
436
  Om du inte vill acceptera inbjudan, ignorerar du detta email.<br /> Ditt konto kommer inte att skapas förrän du öppnar länken ovan och anger ditt lösenord.
406
437
  invited_you_as_admin: "%{invited_by} har bjudit in dig som administratör av %{application}. Du kan acceptera det via länken nedan."
438
+ invited_you_as_private_user: "%{invited_by} har bjudit in dig som privatperson av %{application}. Du kan acceptera det via länken nedan."
407
439
  someone_invited_you: Någon har bjudit in dig till %{application}. Du kan acceptera det via länken nedan.
408
440
  someone_invited_you_as_admin: Någon har bjudit in dig som administratör av %{application}, du kan acceptera den via länken nedan.
441
+ someone_invited_you_as_private_user: Någon har bjudit in dig som privat_användare av %{application}, du kan acceptera den via länken nedan.
409
442
  invite_admin:
410
443
  subject: Du har blivit inbjuden att hantera %{organization}
411
444
  invite_collaborator:
412
445
  subject: Du har blivit inbjuden att samarbeta på %{organization}
446
+ invite_private_user:
447
+ subject: Du har blivit inbjuden till en privat deltagande process på %{organization}
413
448
  organization_admin_invitation_instructions:
414
449
  subject: Du har blivit inbjuden att hantera %{organization}
415
450
  password_change:
416
451
  greeting: Hej %{recipient}!
417
452
  message: Vi kontaktar dig för att meddela dig att ditt lösenord har ändrats.
418
453
  subject: Lösenord ändrat
454
+ doorkeeper:
455
+ scopes:
456
+ public: Din offentliga information.
419
457
  errors:
420
458
  messages:
421
459
  content_type_whitelist_error: Filtypen är inte giltig
@@ -495,6 +533,7 @@ sv:
495
533
  answers_count: Avslutade Undersökningar
496
534
  assemblies_count: Assemblies
497
535
  comments_count: Kommentarer
536
+ debates_count: Debatter
498
537
  endorsements_count: påskrifter
499
538
  headline: Aktuellt tillstånd %{organization}
500
539
  meetings_count: Möten
@@ -8,7 +8,6 @@ uk:
8
8
  user:
9
9
  email: Адреса вашої електронної пошти
10
10
  name: Ваше ім’я
11
- nickname: Ваш короткий, унікальний псевдонім в Десідім
12
11
  password: Новий пароль
13
12
  password_confirmation: Підтвердьте свій новий пароль
14
13
  remove_avatar: Видалити аватар
@@ -54,9 +53,6 @@ uk:
54
53
  success: Вашу обліковку успішно оновлено.
55
54
  success_with_email_confirmation: Ваш обліковий запис успішно оновлено. Ви отримаєте електронний лист для підтвердження адреси електронної пошти.
56
55
  admin_log:
57
- feature:
58
- create: "%{user_name} додав складову %{resource_name} до простору %{space_name}"
59
- delete: "%{user_name} вилучив складову %{resource_name} з простору %{space_name}"
60
56
  moderation:
61
57
  hide: "%{user_name} приховав ресурс типу %{resource_type} у просторі %{space_name}"
62
58
  unreport: "%{user_name} відкликав скаргу на ресурс типу %{resource_type} у просторі %{space_name}"
@@ -121,7 +117,6 @@ uk:
121
117
  email_already_exists: Інший обліковий запис використовує ту ж саму адресу електронної пошти
122
118
  new:
123
119
  complete_profile: Заповнити профіль
124
- nickname_help: Ваш короткий, унікальний псевдонім в Десідім
125
120
  sign_up: Будь ласка, заповніть свій профіль
126
121
  subtitle: Щоб завершити реєстрацію, заповніть наступну форму
127
122
  username_help: Загальнодоступне ім'я, яке відображається у ваших публікаціях. З метою гарантування анонімності, може бути будь-яким.
@@ -129,7 +124,6 @@ uk:
129
124
  new:
130
125
  already_have_an_account?: Вже маєте обліковий запис?
131
126
  newsletter: Отримувати іноді розсилання з цього приводу
132
- nickname_help: Ваш короткий, унікальний псевдонім в Десідім
133
127
  sign_in: Увійти
134
128
  sign_up: Зареєструватися
135
129
  sign_up_as:
@@ -179,12 +173,6 @@ uk:
179
173
  export:
180
174
  ready: Нижче додається стиснута в архів версія вашого збереженого файлу.
181
175
  subject: Ваш збережений файл "%{name}" готовий
182
- features:
183
- dummy:
184
- actions:
185
- bar: Приклад змінної 1
186
- foo: Приклад змінної 2
187
- name: Приклад складової
188
176
  filters:
189
177
  linked_classes:
190
178
  all: Усі
@@ -357,7 +345,6 @@ uk:
357
345
  invitations:
358
346
  edit:
359
347
  header: Встановіть свій пароль
360
- nickname_help: Ваш унікальний псевдонім в Десідім.
361
348
  submit_button: Зберегти
362
349
  mailer:
363
350
  invitation_instructions:
data/config/routes.rb CHANGED
@@ -67,5 +67,13 @@ Decidim::Core::Engine.routes.draw do
67
67
  get :unsubscribe, on: :collection
68
68
  end
69
69
 
70
+ use_doorkeeper do
71
+ skip_controllers :applications, :authorized_applications
72
+ end
73
+
74
+ scope :oauth do
75
+ get "/me" => "doorkeeper/credentials#me"
76
+ end
77
+
70
78
  root to: "pages#show", id: "home"
71
79
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateParticipatorySpacePrivateUsers < ActiveRecord::Migration[5.1]
4
+ def change
5
+ create_table :decidim_participatory_space_private_users do |t|
6
+ t.references :decidim_user, index: { name: "index_decidim_spaces_users_on_private_user_id" }
7
+ t.integer :privatable_to_id
8
+ t.string :privatable_to_type
9
+
10
+ t.timestamps
11
+ end
12
+
13
+ add_index(:decidim_participatory_space_private_users, [:privatable_to_type, :privatable_to_id], name: "space_privatable_to_privatable_id")
14
+ end
15
+ end
@@ -6,14 +6,13 @@ class FixNicknameIndex < ActiveRecord::Migration[5.1]
6
6
  end
7
7
 
8
8
  def change
9
- Decidim::User.where(nickname: nil)
10
- .where(deleted_at: nil)
11
- .where(managed: false)
12
- .find_each { |u| u.update(nickname: Decidim::User.nicknamize(u.name)) }
9
+ User.where(nickname: nil)
10
+ .where(deleted_at: nil)
11
+ .where(managed: false)
12
+ .find_each { |u| u.update(nickname: User.nicknamize(u.name)) }
13
13
 
14
14
  # rubocop:disable Rails/SkipsModelValidations
15
- Decidim::User.where(nickname: nil)
16
- .update_all("nickname = ''")
15
+ User.where(nickname: nil).update_all("nickname = ''")
17
16
  # rubocop:enable Rails/SkipsModelValidations
18
17
 
19
18
  change_column_default :decidim_users, :nickname, ""
@@ -1,10 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class AddVersionToActionLogs < ActiveRecord::Migration[5.1]
4
+ class ActionLog < ApplicationRecord
5
+ self.table_name = :decidim_action_logs
6
+ end
7
+
4
8
  def up
5
9
  add_column :decidim_action_logs, :version_id, :integer, index: true
6
10
 
7
- Decidim::ActionLog.find_each do |action_log|
11
+ ActionLog.find_each do |action_log|
8
12
  version_id = action_log.extra.dig("version", "id")
9
13
  next unless version_id
10
14
  # rubocop:disable Rails/SkipsModelValidations
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateParticipatorySpaceLinks < ActiveRecord::Migration[5.0]
4
+ def change
5
+ create_table :decidim_participatory_space_links do |t|
6
+ t.references :from, null: false, polymorphic: true, index: { name: "index_participatory_space_links_on_from" }
7
+ t.references :to, null: false, polymorphic: true, index: { name: "index_participatory_space_links_on_to" }
8
+ t.string :name, null: false, index: { name: "index_participatory_space_links_name" }
9
+ t.jsonb :data
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RenameFeaturesToComponents < ActiveRecord::Migration[5.1]
4
+ def change
5
+ rename_table :decidim_features, :decidim_components
6
+ rename_column :decidim_action_logs, :decidim_feature_id, :decidim_component_id
7
+ rename_index :decidim_action_logs, "index_action_logs_on_feature_id", "index_action_logs_on_component_id"
8
+
9
+ if index_name_exists?(:decidim_components, "index_decidim_features_on_decidim_participatory_space")
10
+ rename_index :decidim_components, "index_decidim_features_on_decidim_participatory_space", "index_decidim_components_on_decidim_participatory_space"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DoorkeeperModels < ActiveRecord::Migration[5.1]
4
+ def change
5
+ create_table :oauth_applications do |t|
6
+ t.string :name, null: false
7
+ t.string :organization_name, null: false
8
+ t.string :organization_url, null: false
9
+ t.string :organization_logo, null: false
10
+ t.string :uid, null: false
11
+ t.string :secret, null: false
12
+ t.text :redirect_uri, null: false
13
+ t.string :scopes, null: false, default: ""
14
+ t.references :decidim_organization, foreign_key: true, index: true
15
+ t.timestamps null: false
16
+ t.string :type
17
+ end
18
+
19
+ add_index :oauth_applications, :uid, unique: true
20
+
21
+ create_table :oauth_access_grants do |t|
22
+ t.integer :resource_owner_id, null: false
23
+ t.references :application, null: false
24
+ t.string :token, null: false
25
+ t.integer :expires_in, null: false
26
+ t.text :redirect_uri, null: false
27
+ t.datetime :created_at, null: false
28
+ t.datetime :revoked_at
29
+ t.string :scopes
30
+ end
31
+
32
+ add_index :oauth_access_grants, :token, unique: true
33
+ add_foreign_key(
34
+ :oauth_access_grants,
35
+ :oauth_applications,
36
+ column: :application_id
37
+ )
38
+
39
+ create_table :oauth_access_tokens do |t|
40
+ t.integer :resource_owner_id
41
+ t.references :application
42
+
43
+ # If you use a custom token generator you may need to change this column
44
+ # from string to text, so that it accepts tokens larger than 255
45
+ # characters. More info on custom token generators in:
46
+ # https://github.com/doorkeeper-gem/doorkeeper/tree/v3.0.0.rc1#custom-access-token-generator
47
+ #
48
+ # t.text :token, null: false
49
+ t.string :token, null: false
50
+
51
+ t.string :refresh_token
52
+ t.integer :expires_in
53
+ t.datetime :revoked_at
54
+ t.datetime :created_at, null: false
55
+ t.string :scopes
56
+
57
+ # If there is a previous_refresh_token column,
58
+ # refresh tokens will be revoked after a related access token is used.
59
+ # If there is no previous_refresh_token column,
60
+ # previous tokens are revoked as soon as a new access token is created.
61
+ # Comment out this line if you'd rather have refresh tokens
62
+ # instantly revoked.
63
+ t.string :previous_refresh_token, null: false, default: ""
64
+ end
65
+
66
+ add_index :oauth_access_tokens, :token, unique: true
67
+ add_index :oauth_access_tokens, :resource_owner_id
68
+ add_index :oauth_access_tokens, :refresh_token, unique: true
69
+ add_foreign_key(
70
+ :oauth_access_tokens,
71
+ :oauth_applications,
72
+ column: :application_id
73
+ )
74
+ add_foreign_key(
75
+ :oauth_access_tokens,
76
+ :decidim_users,
77
+ column: :resource_owner_id
78
+ )
79
+ add_foreign_key(
80
+ :oauth_access_grants,
81
+ :decidim_users,
82
+ column: :resource_owner_id
83
+ )
84
+ end
85
+ end
@@ -3,7 +3,7 @@
3
3
  class RenameMaximumVotesPerProposalToThresholdPerProposal < ActiveRecord::Migration[5.1]
4
4
  def up
5
5
  execute <<~SQL
6
- UPDATE decidim_features
6
+ UPDATE decidim_components
7
7
  SET settings = jsonb_set(
8
8
  settings::jsonb,
9
9
  array['global'],
@@ -15,7 +15,7 @@ class RenameMaximumVotesPerProposalToThresholdPerProposal < ActiveRecord::Migrat
15
15
 
16
16
  def down
17
17
  execute <<~SQL
18
- UPDATE decidim_features
18
+ UPDATE decidim_components
19
19
  SET settings = jsonb_set(
20
20
  settings::jsonb,
21
21
  array['global'],
data/db/seeds.rb CHANGED
@@ -87,7 +87,7 @@ if !Rails.env.production? || ENV["SEED"]
87
87
 
88
88
  admin.update!(
89
89
  name: Faker::Name.name,
90
- nickname: Faker::Lorem.unique.characters(rand(1..20)),
90
+ nickname: Faker::Twitter.unique.screen_name,
91
91
  password: "decidim123456",
92
92
  password_confirmation: "decidim123456",
93
93
  organization: organization,
@@ -103,7 +103,7 @@ if !Rails.env.production? || ENV["SEED"]
103
103
 
104
104
  regular_user.update!(
105
105
  name: Faker::Name.name,
106
- nickname: Faker::Lorem.unique.characters(rand(1..20)),
106
+ nickname: Faker::Twitter.unique.screen_name,
107
107
  password: "decidim123456",
108
108
  password_confirmation: "decidim123456",
109
109
  confirmed_at: Time.current,
@@ -136,4 +136,14 @@ if !Rails.env.production? || ENV["SEED"]
136
136
  )
137
137
  end
138
138
  end
139
+
140
+ Decidim::OAuthApplication.create!(
141
+ name: "Test OAuth application",
142
+ organization_name: "Example organization",
143
+ organization_url: "http://www.example.org",
144
+ organization_logo: File.new(File.join(seeds_root, "homepage_image.jpg")),
145
+ redirect_uri: "https://www.example.org/oauth/decidim",
146
+ scopes: "public",
147
+ organization: organization
148
+ )
139
149
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Core
5
+ # This interface represents a commentable object.
6
+ AttachableInterface = GraphQL::InterfaceType.define do
7
+ name "AttachableInterface"
8
+ description "An interface that can be used in objects with attachments"
9
+
10
+ field :attachments, !types[Decidim::Core::AttachmentType], "This object's attachments"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Core
5
+ # This interface represents a commentable object.
6
+ AuthorableInterface = GraphQL::InterfaceType.define do
7
+ name "AuthorableInterface"
8
+ description "An interface that can be used in authorable objects."
9
+
10
+ field :author, !Decidim::Core::AuthorInterface, "The comment's author", property: :normalized_author
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Core
5
+ # This interface represents a commentable object.
6
+ CategorizableInterface = GraphQL::InterfaceType.define do
7
+ name "CategorizableInterface"
8
+ description "An interface that can be used in categorizable objects."
9
+
10
+ field :category, !Decidim::Core::CategoryType, "The object's category"
11
+ end
12
+ end
13
+ end
@@ -14,7 +14,7 @@ module Decidim
14
14
  description "Lists the components this space contains."
15
15
 
16
16
  resolve ->(participatory_space, _args, _ctx) {
17
- Decidim::Feature.where(
17
+ Decidim::Component.where(
18
18
  participatory_space: participatory_space
19
19
  ).published
20
20
  }
@@ -22,10 +22,10 @@ module Decidim
22
22
 
23
23
  field :stats, types[Decidim::Core::StatisticType] do
24
24
  resolve ->(participatory_space, _args, _ctx) {
25
- published_features = Feature.where(participatory_space: participatory_space).published
25
+ published_components = Component.where(participatory_space: participatory_space).published
26
26
 
27
- stats = Decidim.feature_manifests.map do |feature_manifest|
28
- feature_manifest.stats.with_context(published_features).map { |name, data| [name, data] }.flatten
27
+ stats = Decidim.component_manifests.map do |component_manifest|
28
+ component_manifest.stats.with_context(published_components).map { |name, data| [name, data] }.flatten
29
29
  end
30
30
 
31
31
  stats.reject(&:empty?)
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Core
5
+ # This interface represents a commentable object.
6
+ ScopableInterface = GraphQL::InterfaceType.define do
7
+ name "ScopableInterface"
8
+ description "An interface that can be used in scopable objects."
9
+
10
+ field :scope, !Decidim::Core::ScopeApiType, "The object's scope"
11
+ end
12
+ end
13
+ end
@@ -20,6 +20,14 @@ module Decidim
20
20
  author == user || user.user_groups.include?(user_group)
21
21
  end
22
22
 
23
+ # Returns the normalized author, whether it's a user group or a user. Ideally this should be
24
+ # the *author* method, but it's pending a refactor.
25
+ #
26
+ # Returns an Author, a UserGroup or nil.
27
+ def normalized_author
28
+ user_group || author
29
+ end
30
+
23
31
  private
24
32
 
25
33
  def verified_user_group