decidim-core 0.8.4 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (249) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +1 -1
  3. data/app/assets/images/decidim/decidim-logo.svg +23 -23
  4. data/app/assets/images/decidim/default-avatar.svg +7 -7
  5. data/app/assets/images/decidim/icons.svg +1 -0
  6. data/app/assets/javascripts/decidim.js.es6 +5 -2
  7. data/app/assets/javascripts/decidim/append_redirect_url_to_modals.js.es6 +84 -0
  8. data/app/assets/javascripts/decidim/data_picker.js.es6 +177 -0
  9. data/app/assets/javascripts/decidim/form_filter.component.js.es6 +25 -20
  10. data/app/assets/javascripts/decidim/form_filter.component.test.js +24 -13
  11. data/app/assets/javascripts/decidim/history.js.es6 +3 -3
  12. data/app/assets/stylesheets/decidim/_decidim.scss +1 -4
  13. data/app/assets/stylesheets/decidim/_variables.scss +4 -4
  14. data/app/assets/stylesheets/decidim/editor.scss +13 -0
  15. data/app/assets/stylesheets/decidim/email.css +9 -1
  16. data/app/assets/stylesheets/decidim/extras/_add_comments.scss +3 -3
  17. data/app/assets/stylesheets/decidim/extras/_announcement.scss +1 -1
  18. data/app/assets/stylesheets/decidim/extras/_collection-sort-controls.scss +2 -2
  19. data/app/assets/stylesheets/decidim/extras/_embed.scss +6 -5
  20. data/app/assets/stylesheets/decidim/extras/_impersonation-bar.scss +4 -0
  21. data/app/assets/stylesheets/decidim/extras/_label-required.scss +1 -1
  22. data/app/assets/stylesheets/decidim/extras/_leaflet.scss +6 -4
  23. data/app/assets/stylesheets/decidim/extras/_meeting-registrations.scss +4 -4
  24. data/app/assets/stylesheets/decidim/extras/_process_stats.scss +11 -4
  25. data/app/assets/stylesheets/decidim/extras/_proposal_form.scss +3 -3
  26. data/app/assets/stylesheets/decidim/extras/_quill.scss +1 -1
  27. data/app/assets/stylesheets/decidim/extras/_reference.scss +3 -3
  28. data/app/assets/stylesheets/decidim/extras/_register_form.scss +3 -3
  29. data/app/assets/stylesheets/decidim/extras/_results-per-page.scss +10 -10
  30. data/app/assets/stylesheets/decidim/extras/_social_icons_mini.scss +4 -3
  31. data/app/assets/stylesheets/decidim/layouts/_highlighted_banner.scss +38 -0
  32. data/app/assets/stylesheets/decidim/layouts/_home.scss +33 -3
  33. data/app/assets/stylesheets/decidim/layouts/_user.scss +33 -5
  34. data/app/assets/stylesheets/decidim/layouts/_view.scss +1 -2
  35. data/app/assets/stylesheets/decidim/map.css +5 -3
  36. data/app/assets/stylesheets/decidim/modules/_address.scss +1 -0
  37. data/app/assets/stylesheets/decidim/modules/_author-avatar.scss +24 -9
  38. data/app/assets/stylesheets/decidim/modules/_buttons.scss +24 -10
  39. data/app/assets/stylesheets/decidim/modules/_callout.scss +5 -1
  40. data/app/assets/stylesheets/decidim/modules/_card-grid.scss +1 -1
  41. data/app/assets/stylesheets/decidim/modules/_cards.scss +102 -31
  42. data/app/assets/stylesheets/decidim/modules/_comments.scss +21 -20
  43. data/app/assets/stylesheets/decidim/modules/_cookie-bar.scss +4 -0
  44. data/app/assets/stylesheets/decidim/modules/_data-picker.scss +159 -0
  45. data/app/assets/stylesheets/decidim/modules/_datepicker.scss +36 -36
  46. data/app/assets/stylesheets/decidim/modules/_definition-data.scss +12 -9
  47. data/app/assets/stylesheets/decidim/modules/_extra.scss +4 -1
  48. data/app/assets/stylesheets/decidim/modules/_filter-tags.scss +3 -0
  49. data/app/assets/stylesheets/decidim/modules/_filters.scss +9 -5
  50. data/app/assets/stylesheets/decidim/modules/_flag.scss +1 -0
  51. data/app/assets/stylesheets/decidim/modules/_footer.scss +10 -0
  52. data/app/assets/stylesheets/decidim/modules/_forms.scss +2 -1
  53. data/app/assets/stylesheets/decidim/modules/_help.scss +2 -0
  54. data/app/assets/stylesheets/decidim/modules/_icons.scss +1 -0
  55. data/app/assets/stylesheets/decidim/modules/_layout.scss +4 -0
  56. data/app/assets/stylesheets/decidim/modules/_list-docs.scss +3 -0
  57. data/app/assets/stylesheets/decidim/modules/_main-container.scss +13 -7
  58. data/app/assets/stylesheets/decidim/modules/_map.scss +13 -1
  59. data/app/assets/stylesheets/decidim/modules/_margins.scss +1 -0
  60. data/app/assets/stylesheets/decidim/modules/_messages.scss +2 -1
  61. data/app/assets/stylesheets/decidim/modules/_modules.scss +3 -0
  62. data/app/assets/stylesheets/decidim/modules/_navbar.scss +36 -16
  63. data/app/assets/stylesheets/decidim/modules/_omnipresent_banner.scss +26 -0
  64. data/app/assets/stylesheets/decidim/modules/_opinion-toggle.scss +5 -0
  65. data/app/assets/stylesheets/decidim/modules/_order-by.scss +10 -10
  66. data/app/assets/stylesheets/decidim/modules/_pagination.scss +3 -2
  67. data/app/assets/stylesheets/decidim/modules/_process-header.scss +11 -2
  68. data/app/assets/stylesheets/decidim/modules/_process-info.scss +9 -1
  69. data/app/assets/stylesheets/decidim/modules/_process-nav.scss +20 -3
  70. data/app/assets/stylesheets/decidim/modules/_process-phase.scss +12 -3
  71. data/app/assets/stylesheets/decidim/modules/_progress-bar.scss +69 -0
  72. data/app/assets/stylesheets/decidim/modules/_reference.scss +1 -2
  73. data/app/assets/stylesheets/decidim/modules/_reveal.scss +1 -1
  74. data/app/assets/stylesheets/decidim/modules/_share.scss +2 -0
  75. data/app/assets/stylesheets/decidim/modules/_signup.scss +5 -1
  76. data/app/assets/stylesheets/decidim/modules/_static-pages.scss +6 -0
  77. data/app/assets/stylesheets/decidim/modules/_status-labels.scss +2 -0
  78. data/app/assets/stylesheets/decidim/modules/_tags.scss +3 -1
  79. data/app/assets/stylesheets/decidim/modules/_timeline.scss +41 -30
  80. data/app/assets/stylesheets/decidim/modules/_title-action.scss +2 -1
  81. data/app/assets/stylesheets/decidim/modules/_typography.scss +13 -4
  82. data/app/assets/stylesheets/decidim/modules/_user-form.scss +1 -0
  83. data/app/assets/stylesheets/decidim/modules/_video.scss +2 -2
  84. data/app/assets/stylesheets/decidim/utils/_fontface.scss +22 -20
  85. data/app/assets/stylesheets/decidim/utils/_helpers.scss +6 -6
  86. data/app/assets/stylesheets/decidim/utils/_keyframes.scss +6 -6
  87. data/app/assets/stylesheets/decidim/utils/_mixins.scss +24 -7
  88. data/app/assets/stylesheets/decidim/utils/_settings.scss +50 -52
  89. data/app/assets/stylesheets/decidim/utils/_toggle-expand.scss +1 -0
  90. data/app/commands/decidim/create_omniauth_registration.rb +3 -0
  91. data/app/commands/decidim/create_registration.rb +3 -1
  92. data/app/commands/decidim/destroy_account.rb +1 -0
  93. data/app/commands/decidim/invite_user_again.rb +1 -1
  94. data/app/commands/decidim/messaging/reply_to_conversation.rb +1 -3
  95. data/app/commands/decidim/unsubscribe_settings.rb +29 -0
  96. data/app/commands/decidim/update_account.rb +16 -3
  97. data/app/controllers/concerns/decidim/action_authorization.rb +1 -1
  98. data/app/controllers/concerns/decidim/devise_controllers.rb +10 -0
  99. data/app/controllers/concerns/decidim/form_factory.rb +2 -1
  100. data/app/controllers/concerns/decidim/impersonate_users.rb +13 -8
  101. data/app/controllers/concerns/decidim/participatory_space_context.rb +1 -1
  102. data/app/controllers/decidim/application_controller.rb +16 -0
  103. data/app/controllers/decidim/cookie_policy_controller.rb +2 -0
  104. data/app/controllers/decidim/devise/invitations_controller.rb +9 -1
  105. data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +10 -1
  106. data/app/controllers/decidim/devise/sessions_controller.rb +9 -1
  107. data/app/controllers/decidim/locales_controller.rb +2 -3
  108. data/app/controllers/decidim/messaging/conversations_controller.rb +2 -2
  109. data/app/controllers/decidim/newsletters_controller.rb +60 -0
  110. data/app/controllers/decidim/pages_controller.rb +1 -0
  111. data/app/controllers/decidim/profiles_controller.rb +23 -0
  112. data/app/controllers/decidim/scopes_controller.rb +19 -20
  113. data/app/events/decidim/profile_updated_event.rb +27 -0
  114. data/app/forms/decidim/account_form.rb +34 -0
  115. data/app/forms/decidim/form.rb +1 -0
  116. data/app/forms/decidim/messaging/conversation_form.rb +5 -2
  117. data/app/forms/decidim/omniauth_registration_form.rb +5 -0
  118. data/app/forms/decidim/registration_form.rb +8 -1
  119. data/app/helpers/decidim/action_authorization_helper.rb +2 -2
  120. data/app/helpers/decidim/application_helper.rb +8 -0
  121. data/app/helpers/decidim/feature_path_helper.rb +12 -2
  122. data/app/helpers/decidim/feature_reference_helper.rb +1 -1
  123. data/app/helpers/decidim/messaging/conversation_helper.rb +27 -9
  124. data/app/helpers/decidim/newsletters_helper.rb +49 -0
  125. data/app/helpers/decidim/scopes_helper.rb +43 -2
  126. data/app/helpers/decidim/translations_helper.rb +6 -2
  127. data/app/mailers/decidim/decidim_devise_mailer.rb +1 -3
  128. data/app/mailers/decidim/messaging/conversation_mailer.rb +1 -1
  129. data/app/mailers/decidim/newsletter_mailer.rb +7 -8
  130. data/app/models/decidim/abilities/everyone_ability.rb +1 -0
  131. data/app/models/decidim/authorization.rb +19 -5
  132. data/app/models/decidim/impersonation_log.rb +2 -1
  133. data/app/models/decidim/messaging/conversation.rb +2 -0
  134. data/app/models/decidim/messaging/message.rb +4 -0
  135. data/app/models/decidim/organization.rb +1 -0
  136. data/app/models/decidim/scope.rb +10 -2
  137. data/app/models/decidim/user.rb +10 -2
  138. data/app/presenters/decidim/home_stats_presenter.rb +10 -4
  139. data/app/presenters/decidim/user_group_presenter.rb +28 -0
  140. data/app/presenters/decidim/user_presenter.rb +42 -0
  141. data/app/services/decidim/action_authorizer.rb +32 -68
  142. data/app/services/decidim/notification_generator_for_recipient.rb +8 -3
  143. data/app/uploaders/decidim/avatar_uploader.rb +2 -2
  144. data/app/views/decidim/account/delete.html.erb +1 -1
  145. data/app/views/decidim/account/show.html.erb +4 -1
  146. data/app/views/decidim/devise/invitations/edit.html.erb +2 -0
  147. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +7 -1
  148. data/app/views/decidim/devise/registrations/new.html.erb +7 -1
  149. data/app/views/decidim/messaging/conversations/_message.html.erb +6 -12
  150. data/app/views/decidim/messaging/conversations/_reply.html.erb +1 -1
  151. data/app/views/decidim/messaging/conversations/index.html.erb +1 -1
  152. data/app/views/decidim/messaging/conversations/update.js.erb +1 -0
  153. data/app/views/decidim/newsletter_mailer/newsletter.html.erb +11 -0
  154. data/app/views/decidim/newsletters/show.html.erb +11 -0
  155. data/app/views/decidim/newsletters/unsubscribe.html.erb +4 -0
  156. data/app/views/decidim/notifications/_notification.html.erb +1 -1
  157. data/app/views/decidim/profiles/show.html.erb +64 -0
  158. data/app/views/decidim/scopes/_scopes_picker_input.html.erb +6 -0
  159. data/app/views/decidim/scopes/picker.html.erb +36 -0
  160. data/app/views/decidim/shared/_action_authorization_modal.html.erb +25 -51
  161. data/app/views/decidim/shared/_author.html.erb +21 -0
  162. data/app/views/decidim/shared/_author_reference.html.erb +12 -0
  163. data/app/views/layouts/decidim/_application.html.erb +1 -0
  164. data/app/views/layouts/decidim/_impersonation_warning.html.erb +1 -1
  165. data/app/views/layouts/decidim/_mailer_logo.html.erb +6 -1
  166. data/app/views/layouts/decidim/_omnipresent_banner.html.erb +14 -0
  167. data/app/views/layouts/decidim/_user_menu.html.erb +3 -0
  168. data/app/views/layouts/decidim/mailer.html.erb +16 -4
  169. data/app/views/layouts/decidim/widget.html.erb +14 -9
  170. data/app/views/pages/home.html.erb +2 -0
  171. data/app/views/pages/home/_highlighted_content_banner.html.erb +26 -0
  172. data/config/initializers/devise.rb +1 -3
  173. data/config/locales/ca.yml +67 -9
  174. data/config/locales/en.yml +65 -4
  175. data/config/locales/es.yml +74 -14
  176. data/config/locales/eu.yml +66 -4
  177. data/config/locales/fi.yml +87 -25
  178. data/config/locales/fr.yml +71 -9
  179. data/config/locales/gl.yml +493 -0
  180. data/config/locales/it.yml +79 -17
  181. data/config/locales/nl.yml +71 -9
  182. data/config/locales/pl.yml +66 -4
  183. data/config/locales/pt-BR.yml +493 -0
  184. data/config/locales/pt.yml +99 -37
  185. data/config/locales/ru.yml +85 -13
  186. data/config/locales/sv.yml +493 -0
  187. data/config/locales/uk.yml +78 -16
  188. data/config/routes.rb +11 -1
  189. data/db/migrate/20171212103803_create_unique_nicknames.rb +29 -0
  190. data/db/migrate/20180115090038_extend_user_profile.rb +8 -0
  191. data/db/migrate/20180123125308_add_enable_omnipresent_banner_to_decidim_organizations.rb +7 -0
  192. data/db/migrate/20180123125409_add_omnipresent_banner_title_to_decidim_organizations.rb +7 -0
  193. data/db/migrate/20180123125432_add_omnipresent_banner_short_description_to_decidim_organizations.rb +7 -0
  194. data/db/migrate/20180123125452_add_omnipresent_banner_url_to_decidim_organizations.rb +7 -0
  195. data/db/migrate/20180125063433_add_highlighted_content_banner_to_decidim_organizations.rb +13 -0
  196. data/db/seeds.rb +8 -2
  197. data/lib/decidim/abilities/participatory_process_role_ability.rb +1 -3
  198. data/lib/decidim/content_parsers.rb +8 -0
  199. data/lib/decidim/content_parsers/base_parser.rb +58 -0
  200. data/lib/decidim/content_parsers/user_parser.rb +46 -0
  201. data/lib/decidim/content_processor.rb +84 -0
  202. data/lib/decidim/content_renderers.rb +8 -0
  203. data/lib/decidim/content_renderers/base_renderer.rb +37 -0
  204. data/lib/decidim/content_renderers/user_renderer.rb +32 -0
  205. data/lib/decidim/core.rb +66 -1
  206. data/lib/decidim/core/api/author_interface.rb +3 -3
  207. data/lib/decidim/core/api/user_group_type.rb +10 -8
  208. data/lib/decidim/core/api/user_type.rb +13 -7
  209. data/lib/decidim/core/engine.rb +7 -5
  210. data/lib/decidim/core/test.rb +1 -1
  211. data/lib/decidim/core/test/factories.rb +21 -45
  212. data/lib/decidim/core/test/shared_examples/announcements_examples.rb +3 -2
  213. data/lib/decidim/core/test/shared_examples/comments_examples.rb +5 -2
  214. data/lib/decidim/core/test/shared_examples/scope_helper_examples.rb +40 -3
  215. data/lib/decidim/core/test/shared_examples/simple_event.rb +73 -0
  216. data/lib/decidim/core/version.rb +1 -1
  217. data/lib/decidim/events.rb +2 -0
  218. data/lib/decidim/events/author_event.rb +41 -0
  219. data/lib/decidim/events/base_event.rb +28 -3
  220. data/lib/decidim/events/email_event.rb +1 -1
  221. data/lib/decidim/events/notification_event.rb +1 -1
  222. data/lib/decidim/events/simple_event.rb +79 -0
  223. data/lib/decidim/filter_form_builder.rb +2 -3
  224. data/lib/decidim/form_builder.rb +39 -27
  225. data/lib/decidim/friendly_dates.rb +26 -0
  226. data/lib/decidim/has_feature.rb +1 -0
  227. data/lib/decidim/has_reference.rb +1 -1
  228. data/lib/decidim/i18n_exceptions.rb +1 -3
  229. data/lib/decidim/menu.rb +1 -1
  230. data/lib/decidim/newsletter_encryptor.rb +22 -0
  231. data/lib/decidim/nicknamizable.rb +56 -0
  232. data/lib/decidim/participable.rb +8 -0
  233. data/lib/decidim/participatory_space_manifest.rb +10 -1
  234. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.gl.js +13 -0
  235. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.pt-br.js +14 -0
  236. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.pt.js +5 -1
  237. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.ru.js +4 -1
  238. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.sv.js +14 -0
  239. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.uk.js +4 -1
  240. data/vendor/assets/javascripts/form_datepicker.js.es6 +4 -2
  241. data/vendor/assets/javascripts/foundation-datepicker.js +42 -26
  242. metadata +124 -84
  243. data/app/assets/javascripts/decidim/select2.field.js.es6 +0 -47
  244. data/app/assets/javascripts/decidim/select2.js.es6 +0 -11
  245. data/app/assets/stylesheets/decidim/editor.sass +0 -4
  246. data/app/assets/stylesheets/decidim/plugins/_select2.scss +0 -63
  247. data/app/helpers/decidim/datetime_helper.rb +0 -23
  248. data/app/queries/decidim/freetext_scopes.rb +0 -39
  249. data/lib/decidim/core/test/shared_examples/manage_moderations_examples.rb +0 -64
@@ -60,17 +60,25 @@ uk:
60
60
  related_photos: Супутні світлини
61
61
  authorization_handlers:
62
62
  dummy_authorization_handler:
63
+ explanation: Підтвердьте особу, ввівши номер документа, що закінчується символом "X"
63
64
  fields:
64
65
  document_number: Номер документа
65
66
  postal_code: Поштовий індекс
66
67
  name: Приклад підтвердження своєї особи
68
+ dummy_authorization_workflow:
69
+ name: Приклад шляху підтвердження особи
67
70
  errors:
68
71
  duplicate_authorization: Інший учасник вже підтвердив свою особу з такими ж даними.
72
+ expired_at: Термін дії закінчився %{timestamp}
73
+ expires_at: Термін дії закінчується %{timestamp}
69
74
  foo_authorization:
70
75
  fields:
71
- bar: Неробоча псевдо-змінна 1
72
- foo: Неробоча псевдо-змінна 2
73
- name: Неробоче псевдо-підтвердження своєї особи
76
+ bar: Приклад змінної 1
77
+ foo: Приклад змінної 2
78
+ name: Приклад підтвердження своєї особи
79
+ granted_at: 'Надано: %{timestamp}'
80
+ started_at: 'Розпочато: %{timestamp}'
81
+ contact: Зв'язатися
74
82
  core:
75
83
  actions:
76
84
  unauthorized: Ви не маєте прав на виконання цієї дії
@@ -86,7 +94,6 @@ uk:
86
94
  registrations:
87
95
  new:
88
96
  already_have_an_account?: Вже маєте обліковий запис?
89
- newsletter_notifications: Отримувати повідомлення про пов'язані події
90
97
  sign_in: Увійти
91
98
  sign_up: Зареєструватися
92
99
  sign_up_as:
@@ -127,22 +134,22 @@ uk:
127
134
  features:
128
135
  dummy:
129
136
  actions:
130
- bar: Неробоча псевдо-змінна 1
131
- foo: Неробоча псевдо-змінна 2
132
- name: Неробоча складова
137
+ bar: Приклад змінної 1
138
+ foo: Приклад змінної 2
139
+ name: Приклад складової
133
140
  settings:
134
141
  global:
135
142
  comments_enabled: Коментарі дозволено
136
- dummy_global_attribute_1: Неробоча властивість 1
137
- dummy_global_attribute_2: Неробоча властивість 2
143
+ dummy_global_attribute_1: Приклад властивості 1
144
+ dummy_global_attribute_2: Приклад властивості 2
138
145
  step:
139
146
  comments_blocked: Коментарі вимкнено
140
- dummy_step_attribute_1: 1 властивість неробочого кроку
141
- dummy_step_attribute_2: 2 властивість неробочого кроку
147
+ dummy_step_attribute_1: Приклад 1 властивості кроку
148
+ dummy_step_attribute_2: Приклад 2 властивості кроку
142
149
  filters:
143
150
  linked_classes:
144
151
  all: Усі
145
- dummyresource: Неробочі псевдо-ресурси
152
+ dummyresource: Приклади ресурсів
146
153
  meeting: Зустрічі
147
154
  project: Проекти
148
155
  proposal: Пропозиції
@@ -166,13 +173,40 @@ uk:
166
173
  menu:
167
174
  home: Головна
168
175
  more_information: Дізнатися більше
176
+ messaging:
177
+ conversation_mailer:
178
+ new_conversation:
179
+ greeting: Доброго дня, %{recipient}!
180
+ intro: "%{sender} почав з вами нову бесіду. Клацніть тут, щоб прочитати її:"
181
+ outro: Насолоджуйтесь Десідім!
182
+ subject: "%{sender} почав з вами бесіду"
183
+ new_message:
184
+ greeting: Доброго дня, %{recipient}!
185
+ intro: "%{sender} написав нові повідомлення у вашій бесіді. Клацніть тут, щоб побачити їх:"
186
+ outro: Насолоджуйтесь Десідім!
187
+ subject: Ви отримали нові повідомлення від %{sender}
188
+ conversations:
189
+ create:
190
+ error: Бесіда не розпочата. Спробуйте ще раз пізніше
191
+ index:
192
+ no_conversations: У вас ще немає бесід
193
+ title: Бесіда з
194
+ reply:
195
+ send: Надіслати
196
+ title: Відповісти
197
+ show:
198
+ title: Бесіда з %{usernames}
199
+ start:
200
+ send: Надіслати
201
+ title: Почати бесіду
202
+ update:
203
+ error: Повідомлення не надіслано. Спробуйте ще раз пізніше
169
204
  newsletter_mailer:
170
205
  newsletter:
171
206
  note: Ви отримали цього електронного листа, оскільки ви підписалися на новини щодо %{organization_name}. Ви можете змінити свої налаштування на <a href="%{link}">сторінці сповіщень</a>.
172
207
  notifications_settings:
173
208
  show:
174
209
  email_on_notification: Я хочу отримувати листа електронною поштою кожного разу, коли отримую сповіщення.
175
- newsletter_notifications: Я хочу отримувати повідомлення про пов'язані з цим події
176
210
  update_notifications_settings: Зберегти зміни
177
211
  update:
178
212
  error: При оновленні налаштувань сповіщень сталася помилка.
@@ -185,6 +219,8 @@ uk:
185
219
  pages:
186
220
  index:
187
221
  title: Дізнатися більше
222
+ profiles:
223
+ default_officialization_text: Особу цього учасника публічно підтверджено, його ім'я чи роль перевірено на відповідність його справжньому імені та ролі
188
224
  reported_mailer:
189
225
  hide:
190
226
  hello: Доброго дня, %{name}%!
@@ -200,8 +236,20 @@ uk:
200
236
  create:
201
237
  error: Під час створення скарги сталася помилка. Будь ласка, спробуйте зробити це знову.
202
238
  success: Скарга була успішно створена, і вона буде розглянута адміністратором.
239
+ scopes:
240
+ global: Загальний терен
241
+ picker:
242
+ cancel: Скасувати
243
+ choose: Оберіть
244
+ title: Оберіть %{field}
245
+ prompt: Оберіть терен
246
+ scopes: Терени
203
247
  shared:
204
248
  action_authorization_modal:
249
+ expired:
250
+ authorize: Знову підтвердити свою особу за допомогою "%{authorization}"
251
+ explanation: Термін дії підтвердження вашої особи вичерпався. Щоб виконати цю дію, вам потрібно знову підтвердити свою особу за допомогою "%{authorization}".
252
+ title: Термін дії підтвердження особи вичерпався
205
253
  incomplete:
206
254
  cancel: Скасувати
207
255
  explanation: 'Незважаючи на те, що ви наразі підтвердили свою особу за допомогою "%{authorization}", ми просимо вас знову підтвердити свою особу, оскільки нам не вистачає наступних даних:'
@@ -211,11 +259,16 @@ uk:
211
259
  authorize: Підтвердити свою особу за допомогою "%{authorization}"
212
260
  explanation: Щоб виконати цю дію, потрібно підтвердити свою особу за допомогою "%{authorization}".
213
261
  title: Необхідне підтвердження своєї особи
262
+ pending:
263
+ explanation: Щоб виконати цю дію, потрібно підтвердити особу за допомогою "%{authorization}", але ваше підтвердження особи все ще триває
264
+ resume: Відстежте перебіг підтвердження особи "%{authorization}"
265
+ title: Підтвердження особи все ще триває
214
266
  unauthorized:
215
267
  explanation: Вибачте, ви не можете виконати цю дію, оскільки деякі з ваших даних підтвердження особи не збігаються.
216
- invalid: "%{field} не є дійсним."
217
268
  ok: Гаразд
218
269
  title: Недостатньо прав через відсутність підтвердження особи
270
+ author:
271
+ deleted: Видалений учасник
219
272
  embed_modal:
220
273
  close_window: Закрити вікно
221
274
  embed: Будь ласка, вставте цей код на свою сторінку
@@ -248,6 +301,7 @@ uk:
248
301
  invitations:
249
302
  edit:
250
303
  header: Встановіть свій пароль
304
+ nickname_help: Ваш унікальний псевдонім в Десідім.
251
305
  submit_button: Зберегти
252
306
  mailer:
253
307
  invitation_instructions:
@@ -310,8 +364,10 @@ uk:
310
364
  title: Сповіщення
311
365
  user_menu:
312
366
  admin_dashboard: Приладна дошка адміністрування
367
+ conversations: Бесіди
313
368
  notifications: Сповіщення
314
369
  profile: Мій обліковий запис
370
+ public_profile: Мій загальнодоступний профіль
315
371
  sign_out: Вийти
316
372
  user_profile:
317
373
  account: Обліковий запис
@@ -343,7 +399,8 @@ uk:
343
399
  participate: Взяти участь
344
400
  welcome: Ласкаво просимо до %{organization}!
345
401
  statistics:
346
- answers_count: Відповіді
402
+ answers_count: Пройдено опитувань
403
+ assemblies_count: Збори
347
404
  comments_count: Коментарі
348
405
  headline: Поточний стан %{organization}
349
406
  meetings_count: Зустрічі
@@ -351,6 +408,7 @@ uk:
351
408
  pages_count: Сторінки
352
409
  processes_count: Рухи
353
410
  projects_count: Проекти
411
+ proposals_accepted: Прийняті пропозиції
354
412
  proposals_count: Пропозиції
355
413
  results_count: Підсумки
356
414
  surveys_count: Опитування
@@ -380,7 +438,11 @@ uk:
380
438
  xing: Xing
381
439
  time:
382
440
  formats:
383
- decidim_short: "%H:%M %d/%m/%Y "
441
+ day_of_month: "%b %d"
442
+ day_of_week: "%a"
443
+ day_of_year: "%d.%m.%y"
444
+ decidim_short: "%H:%M %d.%m.%Y"
445
+ time_of_day: "%H:%M"
384
446
  views:
385
447
  pagination:
386
448
  first: "&laquo; Перша"
data/config/routes.rb CHANGED
@@ -28,6 +28,10 @@ Decidim::Core::Engine.routes.draw do
28
28
 
29
29
  mount Decidim::Verifications::Engine, at: "/", as: "decidim_verifications"
30
30
 
31
+ Decidim.global_engines.each do |name, engine_data|
32
+ mount engine_data[:engine], at: engine_data[:at], as: name
33
+ end
34
+
31
35
  authenticate(:user) do
32
36
  resource :account, only: [:show, :update, :destroy], controller: "account" do
33
37
  member do
@@ -44,9 +48,11 @@ Decidim::Core::Engine.routes.draw do
44
48
  resources :own_user_groups, only: [:index]
45
49
  end
46
50
 
51
+ resources :profiles, only: [:show], param: :nickname
52
+
47
53
  resources :pages, only: [:index, :show], format: false
48
54
 
49
- get "/scopes/search", to: "scopes#search", as: :scopes_search
55
+ get "/scopes/picker", to: "scopes#picker", as: :scopes_picker
50
56
 
51
57
  get "/static_map", to: "static_map#show", as: :static_map
52
58
  get "/cookies/accept", to: "cookie_policy#accept", as: :accept_cookies
@@ -57,5 +63,9 @@ Decidim::Core::Engine.routes.draw do
57
63
  resource :follow, only: [:create, :destroy]
58
64
  resource :report, only: [:create]
59
65
 
66
+ resources :newsletters, only: [:show] do
67
+ get :unsubscribe, on: :collection
68
+ end
69
+
60
70
  root to: "pages#show", id: "home"
61
71
  end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateUniqueNicknames < ActiveRecord::Migration[5.1]
4
+ class User < ApplicationRecord
5
+ include Decidim::Nicknamizable
6
+
7
+ self.table_name = :decidim_users
8
+ end
9
+
10
+ def up
11
+ add_column :decidim_users, :nickname, :string, limit: 20
12
+
13
+ User.where.not(name: nil).find_each do |user|
14
+ user.update!(nickname: User.nicknamize(user.name))
15
+ end
16
+
17
+ add_index :decidim_users,
18
+ %w(nickname decidim_organization_id),
19
+ where: "(deleted_at IS NULL) AND (managed = 'f')",
20
+ name: "index_decidim_users_on_nickame_and_decidim_organization_id",
21
+ unique: true
22
+ end
23
+
24
+ def down
25
+ remove_index :decidim_users, %w(nickname decidim_organization_id)
26
+
27
+ remove_column :decidim_users, :nickname
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ExtendUserProfile < ActiveRecord::Migration[5.1]
4
+ def change
5
+ add_column :decidim_users, :personal_url, :string
6
+ add_column :decidim_users, :about, :text
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddEnableOmnipresentBannerToDecidimOrganizations < ActiveRecord::Migration[5.1]
4
+ def change
5
+ add_column :decidim_organizations, :enable_omnipresent_banner, :boolean, null: false, default: false
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddOmnipresentBannerTitleToDecidimOrganizations < ActiveRecord::Migration[5.1]
4
+ def change
5
+ add_column :decidim_organizations, :omnipresent_banner_title, :jsonb
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddOmnipresentBannerShortDescriptionToDecidimOrganizations < ActiveRecord::Migration[5.1]
4
+ def change
5
+ add_column :decidim_organizations, :omnipresent_banner_short_description, :jsonb
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddOmnipresentBannerUrlToDecidimOrganizations < ActiveRecord::Migration[5.1]
4
+ def change
5
+ add_column :decidim_organizations, :omnipresent_banner_url, :string
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddHighlightedContentBannerToDecidimOrganizations < ActiveRecord::Migration[5.1]
4
+ def change
5
+ add_column :decidim_organizations, :highlighted_content_banner_enabled, :boolean, null: false, default: false
6
+ add_column :decidim_organizations, :highlighted_content_banner_title, :jsonb
7
+ add_column :decidim_organizations, :highlighted_content_banner_short_description, :jsonb
8
+ add_column :decidim_organizations, :highlighted_content_banner_action_title, :jsonb
9
+ add_column :decidim_organizations, :highlighted_content_banner_action_subtitle, :jsonb
10
+ add_column :decidim_organizations, :highlighted_content_banner_action_url, :string
11
+ add_column :decidim_organizations, :highlighted_content_banner_image, :string
12
+ end
13
+ end
data/db/seeds.rb CHANGED
@@ -59,25 +59,31 @@ if !Rails.env.production? || ENV["SEED"]
59
59
 
60
60
  admin.update!(
61
61
  name: Faker::Name.name,
62
+ nickname: Faker::Lorem.unique.characters(rand(1..20)),
62
63
  password: "decidim123456",
63
64
  password_confirmation: "decidim123456",
64
65
  organization: organization,
65
66
  confirmed_at: Time.current,
66
67
  locale: I18n.default_locale,
67
68
  admin: true,
68
- tos_agreement: true
69
+ tos_agreement: true,
70
+ personal_url: Faker::Internet.url,
71
+ about: Faker::Lorem.paragraph(2)
69
72
  )
70
73
 
71
74
  regular_user = Decidim::User.find_or_initialize_by(email: "user@example.org")
72
75
 
73
76
  regular_user.update!(
74
77
  name: Faker::Name.name,
78
+ nickname: Faker::Lorem.unique.characters(rand(1..20)),
75
79
  password: "decidim123456",
76
80
  password_confirmation: "decidim123456",
77
81
  confirmed_at: Time.current,
78
82
  locale: I18n.default_locale,
79
83
  organization: organization,
80
- tos_agreement: true
84
+ tos_agreement: true,
85
+ personal_url: Faker::Internet.url,
86
+ about: Faker::Lorem.paragraph(2)
81
87
  )
82
88
 
83
89
  Decidim::Messaging::Conversation.start!(
@@ -14,9 +14,7 @@ module Decidim
14
14
  if not_admin? && has_manageable_processes?
15
15
  define_abilities
16
16
 
17
- if current_participatory_process && can_manage_process?(current_participatory_process)
18
- define_participatory_process_abilities
19
- end
17
+ define_participatory_process_abilities if current_participatory_process && can_manage_process?(current_participatory_process)
20
18
  end
21
19
  end
22
20
 
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ContentParsers
5
+ autoload :BaseParser, "decidim/content_parsers/base_parser"
6
+ autoload :UserParser, "decidim/content_parsers/user_parser"
7
+ end
8
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ContentParsers
5
+ # Abstract base class for content parsers, so they have the same contract
6
+ #
7
+ # @example How to use a content parser class
8
+ # parser = Decidim::ContentParsers::CustomParser.new(content)
9
+ # parser.rewrite # returns the content rewritten
10
+ # parser.metadata # returns a Metadata object
11
+ #
12
+ # @abstract Subclass and override {#rewrite} and {#metadata} to implement a content parser
13
+ class BaseParser
14
+ # Class used as a container for metadata
15
+ Metadata = Class.new
16
+
17
+ # @return [String] the content to be rewritten
18
+ attr_reader :content
19
+
20
+ # Gets initialized with the `content` to parse
21
+ #
22
+ # @param content [String] already rewritten content or regular content
23
+ def initialize(content)
24
+ @content = content || ""
25
+ end
26
+
27
+ # Parse the `content` and return it modified
28
+ #
29
+ # @example Implementation for search and mark prohibited words
30
+ # def rewrite
31
+ # content.gsub('foo', '~~foo~~')
32
+ # end
33
+ #
34
+ # @abstract Subclass is expected to implement it
35
+ # @return [String] the content rewritten
36
+ def rewrite
37
+ content
38
+ end
39
+
40
+ # Collects and returns metadata. This metadata is accessible at parsing time
41
+ # so it can be acted upon (sending emails to the users) or maybe even stored
42
+ # at the DB for later consultation.
43
+ #
44
+ # @example Implementation for return a counter of prohibited words found
45
+ # Metadata = Struct.new(:count)
46
+ #
47
+ # def metadata
48
+ # Metadata.new(content.scan('foo').size)
49
+ # end
50
+ #
51
+ # @abstract Subclass is expected to implement it
52
+ # @return [Metadata] a Metadata object that holds extra information
53
+ def metadata
54
+ Metadata.new
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ContentParsers
5
+ # A parser that searches user 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. If the `@` is
9
+ # followed with an underscore, then it is not considered.
10
+ #
11
+ # @see BaseParser Examples of how to use a content parser
12
+ class UserParser < BaseParser
13
+ # Class used as a container for metadata
14
+ #
15
+ # @!attribute users
16
+ # @return [Array] an array of Decidim::User mentioned in content
17
+ Metadata = Struct.new(:users)
18
+
19
+ # Matches a nickname if they start with a letter or number
20
+ # and only contains letters, numbers or underscores.
21
+ MENTION_REGEX = /(^|\s)@([a-zA-Z0-9]\w*)/
22
+
23
+ # Replaces found mentions matching a nickname of an existing
24
+ # user with a global id. Other mentions found that doesn't
25
+ # match an existing user are returned as is.
26
+ #
27
+ # @return [String] the content with the valid mentions replaced by a global id
28
+ def rewrite
29
+ content.gsub(MENTION_REGEX) do |match|
30
+ if (user = Decidim::User.find_by(nickname: Regexp.last_match[2]))
31
+ Regexp.last_match[1] + user.to_global_id.to_s
32
+ else
33
+ match
34
+ end
35
+ end
36
+ end
37
+
38
+ # (see BaseParser#metadata)
39
+ def metadata
40
+ Metadata.new(
41
+ Decidim::User.where(nickname: content.scan(MENTION_REGEX).flatten)
42
+ )
43
+ end
44
+ end
45
+ end
46
+ end