decidim-core 0.13.1 → 0.14.1

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 (236) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/decidim_core_manifest.js +1 -1
  3. data/app/assets/images/decidim/gamification/badges/invitations.svg +117 -0
  4. data/app/assets/javascripts/decidim.js.es6 +4 -1
  5. data/app/assets/javascripts/decidim/ajax_modals.js.es6 +17 -0
  6. data/app/assets/javascripts/decidim/conferences.js.es6 +16 -0
  7. data/app/assets/javascripts/decidim/input_hashtags.js.es6 +115 -0
  8. data/app/assets/javascripts/decidim/input_mentions.js.es6 +2 -3
  9. data/app/assets/javascripts/decidim/vizzs/areachart.js.es6 +226 -0
  10. data/app/assets/javascripts/decidim/vizzs/metrics.js.es6 +26 -0
  11. data/app/assets/javascripts/decidim/vizzs/orgchart.js.es6 +701 -0
  12. data/app/assets/javascripts/decidim/vizzs/renders.js.es6 +11 -0
  13. data/app/assets/stylesheets/decidim/extras/_proposal_form.scss +3 -1
  14. data/app/assets/stylesheets/decidim/layouts/_home.scss +1 -1
  15. data/app/assets/stylesheets/decidim/modules/_areachart.scss +74 -0
  16. data/app/assets/stylesheets/decidim/modules/_badges.scss +116 -0
  17. data/app/assets/stylesheets/decidim/modules/_buttons.scss +5 -0
  18. data/app/assets/stylesheets/decidim/modules/_cards.scss +21 -4
  19. data/app/assets/stylesheets/decidim/modules/_chart-tooltip.scss +42 -0
  20. data/app/assets/stylesheets/decidim/modules/_collapsible-list.scss +12 -8
  21. data/app/assets/stylesheets/decidim/modules/_conference-nav.scss +31 -0
  22. data/app/assets/stylesheets/decidim/modules/_conference-programme.scss +110 -0
  23. data/app/assets/stylesheets/decidim/modules/_conference-speaker.scss +86 -0
  24. data/app/assets/stylesheets/decidim/modules/_conversation.scss +58 -0
  25. data/app/assets/stylesheets/decidim/modules/_help.scss +38 -0
  26. data/app/assets/stylesheets/decidim/modules/_hover-section.scss +29 -0
  27. data/app/assets/stylesheets/decidim/modules/_icons.scss +10 -4
  28. data/app/assets/stylesheets/decidim/modules/_input-hashtags.scss +124 -0
  29. data/app/assets/stylesheets/decidim/modules/_loading-spinner.scss +12 -0
  30. data/app/assets/stylesheets/decidim/modules/_margins.scss +2 -2
  31. data/app/assets/stylesheets/decidim/modules/_modules.scss +15 -0
  32. data/app/assets/stylesheets/decidim/modules/_navbar.scss +9 -0
  33. data/app/assets/stylesheets/decidim/modules/_orgchart.scss +62 -0
  34. data/app/assets/stylesheets/decidim/modules/_status-labels.scss +2 -1
  35. data/app/assets/stylesheets/decidim/modules/_typography.scss +9 -0
  36. data/app/assets/stylesheets/decidim/utils/_helpers.scss +28 -0
  37. data/app/assets/stylesheets/decidim/utils/_mixins.scss +63 -0
  38. data/app/cells/decidim/author/withdraw.erb +1 -1
  39. data/app/cells/decidim/author_cell.rb +1 -1
  40. data/app/cells/decidim/badge/show.erb +36 -0
  41. data/app/cells/decidim/badge_cell.rb +53 -0
  42. data/app/cells/decidim/badges/show.erb +6 -0
  43. data/app/cells/decidim/badges_cell.rb +14 -0
  44. data/app/cells/decidim/card_m/header.erb +1 -1
  45. data/app/cells/decidim/card_m/show.erb +1 -2
  46. data/app/cells/decidim/card_m/top.erb +7 -0
  47. data/app/cells/decidim/card_m_cell.rb +14 -17
  48. data/app/cells/decidim/coauthorships_cell.rb +77 -0
  49. data/app/cells/decidim/collapsible_authors/show.erb +0 -1
  50. data/app/cells/decidim/collapsible_authors_cell.rb +4 -4
  51. data/app/cells/decidim/collapsible_list/show.erb +12 -4
  52. data/app/cells/decidim/collapsible_list_cell.rb +14 -12
  53. data/app/cells/decidim/content_blocks/footer_sub_hero/show.erb +14 -0
  54. data/app/cells/decidim/content_blocks/footer_sub_hero_cell.rb +12 -0
  55. data/app/{views/decidim/pages/home/_hero.html.erb → cells/decidim/content_blocks/hero/show.erb} +4 -4
  56. data/app/cells/decidim/content_blocks/hero_cell.rb +25 -0
  57. data/app/cells/decidim/content_blocks/hero_settings_form/show.erb +7 -0
  58. data/app/cells/decidim/content_blocks/hero_settings_form_cell.rb +13 -0
  59. data/app/cells/decidim/content_blocks/highlighted_content_banner/show.erb +24 -0
  60. data/app/cells/decidim/content_blocks/highlighted_content_banner_cell.rb +16 -0
  61. data/app/{views/decidim/pages/home/_extended.html.erb → cells/decidim/content_blocks/how_to_participate/show.erb} +10 -10
  62. data/app/cells/decidim/content_blocks/how_to_participate_cell.rb +9 -0
  63. data/app/{views/decidim/pages/home/_statistics.html.erb → cells/decidim/content_blocks/stats/show.erb} +2 -2
  64. data/app/cells/decidim/content_blocks/stats_cell.rb +18 -0
  65. data/app/{views/decidim/pages/home/_sub_hero.html.erb → cells/decidim/content_blocks/sub_hero/show.erb} +2 -2
  66. data/app/cells/decidim/content_blocks/sub_hero_cell.rb +17 -0
  67. data/app/cells/decidim/conversation/show.erb +18 -0
  68. data/app/cells/decidim/conversation_cell.rb +23 -0
  69. data/app/cells/decidim/conversation_header/show.erb +17 -0
  70. data/app/cells/decidim/conversation_header_cell.rb +16 -0
  71. data/app/cells/decidim/conversations/show.erb +45 -0
  72. data/app/cells/decidim/conversations_cell.rb +24 -0
  73. data/app/cells/decidim/follow_button/show.erb +3 -3
  74. data/app/cells/decidim/follow_button_cell.rb +1 -5
  75. data/app/cells/decidim/following_cell.rb +1 -7
  76. data/app/cells/decidim/message/show.erb +15 -0
  77. data/app/cells/decidim/message_cell.rb +23 -0
  78. data/app/cells/decidim/new_conversation/show.erb +19 -0
  79. data/app/cells/decidim/new_conversation_cell.rb +19 -0
  80. data/app/cells/decidim/notifications/show.erb +1 -1
  81. data/app/cells/decidim/profile/show.erb +27 -0
  82. data/app/cells/decidim/profile_cell.rb +33 -0
  83. data/app/cells/decidim/profile_sidebar/show.erb +57 -0
  84. data/app/cells/decidim/profile_sidebar_cell.rb +31 -0
  85. data/app/cells/decidim/tos_page_cell.rb +0 -4
  86. data/app/cells/decidim/user_profile/header.erb +1 -1
  87. data/app/controllers/concerns/decidim/action_authorization.rb +13 -38
  88. data/app/controllers/concerns/decidim/needs_permission.rb +15 -6
  89. data/app/controllers/decidim/application_controller.rb +1 -0
  90. data/app/controllers/decidim/authorization_modals_controller.rb +35 -0
  91. data/app/controllers/decidim/components/base_controller.rb +0 -1
  92. data/app/controllers/decidim/devise/invitations_controller.rb +2 -1
  93. data/app/controllers/decidim/messaging/conversations_controller.rb +2 -11
  94. data/app/controllers/decidim/newsletters_controller.rb +4 -6
  95. data/app/controllers/decidim/notifications_controller.rb +4 -0
  96. data/app/controllers/decidim/pages_controller.rb +3 -7
  97. data/app/controllers/decidim/profiles_controller.rb +17 -7
  98. data/app/forms/decidim/notifications_settings_form.rb +1 -1
  99. data/app/forms/decidim/registration_form.rb +1 -1
  100. data/app/helpers/decidim/action_authorization_helper.rb +51 -46
  101. data/app/helpers/decidim/application_helper.rb +18 -0
  102. data/app/helpers/decidim/card_helper.rb +1 -1
  103. data/app/helpers/decidim/cells_helper.rb +6 -2
  104. data/app/helpers/decidim/resource_helper.rb +8 -1
  105. data/app/helpers/decidim/searches_helper.rb +5 -4
  106. data/app/helpers/decidim/traceability_helper.rb +5 -1
  107. data/app/models/decidim/authorization.rb +2 -2
  108. data/app/models/decidim/content_block.rb +144 -0
  109. data/app/models/decidim/gamification/badge_score.rb +13 -0
  110. data/app/models/decidim/messaging/message.rb +1 -1
  111. data/app/models/decidim/messaging/receipt.rb +1 -1
  112. data/app/models/decidim/organization.rb +1 -5
  113. data/app/models/decidim/resource_permission.rb +8 -0
  114. data/app/models/decidim/searchable_resource.rb +1 -1
  115. data/app/models/decidim/user.rb +17 -1
  116. data/app/permissions/decidim/default_permissions.rb +4 -3
  117. data/app/permissions/decidim/permissions.rb +33 -1
  118. data/app/presenters/decidim/hashtag_presenter.rb +32 -0
  119. data/app/presenters/decidim/resource_locator_presenter.rb +13 -0
  120. data/app/presenters/decidim/user_presenter.rb +1 -1
  121. data/app/queries/decidim/messaging/user_conversations.rb +1 -1
  122. data/app/resolvers/decidim/hashtags_resolver.rb +15 -0
  123. data/app/services/decidim/action_authorizer.rb +9 -8
  124. data/app/types/decidim/core/date_time_type.rb +1 -1
  125. data/app/types/decidim/core/hashtag_type.rb +13 -0
  126. data/app/uploaders/decidim/homepage_image_uploader.rb +1 -1
  127. data/app/uploaders/decidim/image_uploader.rb +1 -0
  128. data/app/views/decidim/authorization_modals/show.html.erb +32 -0
  129. data/app/views/decidim/messaging/conversations/create.js.erb +1 -1
  130. data/app/views/decidim/messaging/conversations/index.html.erb +1 -51
  131. data/app/views/decidim/messaging/conversations/new.html.erb +1 -5
  132. data/app/views/decidim/messaging/conversations/show.html.erb +1 -9
  133. data/app/views/decidim/messaging/conversations/update.js.erb +1 -1
  134. data/app/views/decidim/notifications/index.html.erb +1 -0
  135. data/app/views/decidim/pages/decidim_page.html.erb +9 -0
  136. data/app/views/decidim/pages/home.html.erb +12 -16
  137. data/app/views/decidim/pages/index.html.erb +8 -0
  138. data/app/views/decidim/profiles/_user_follow.erb +2 -2
  139. data/app/views/decidim/profiles/show.html.erb +1 -37
  140. data/app/views/decidim/searches/_results.html.erb +1 -1
  141. data/app/views/decidim/shared/_author_reference.html.erb +1 -1
  142. data/app/views/decidim/shared/_authorization_modal.html.erb +1 -0
  143. data/app/views/decidim/shared/_tags.html.erb +1 -1
  144. data/app/views/kaminari/decidim/_page.html.erb +1 -1
  145. data/app/views/layouts/decidim/_application.html.erb +6 -1
  146. data/app/views/layouts/decidim/_edit_link.html.erb +8 -0
  147. data/app/views/layouts/decidim/_impersonation_warning.html.erb +1 -1
  148. data/app/views/layouts/decidim/_user_menu.html.erb +2 -2
  149. data/app/views/layouts/decidim/_wrapper.html.erb +14 -1
  150. data/config/initializers/carrierwave.rb +15 -0
  151. data/config/locales/ca.yml +78 -30
  152. data/config/locales/en.yml +78 -30
  153. data/config/locales/es-PY.yml +78 -30
  154. data/config/locales/es.yml +78 -30
  155. data/config/locales/eu.yml +78 -30
  156. data/config/locales/fi.yml +262 -214
  157. data/config/locales/fr.yml +78 -30
  158. data/config/locales/gl.yml +78 -30
  159. data/config/locales/hu.yml +781 -0
  160. data/config/locales/it.yml +78 -30
  161. data/config/locales/nl.yml +78 -30
  162. data/config/locales/pl.yml +78 -30
  163. data/config/locales/pt-BR.yml +106 -58
  164. data/config/locales/pt.yml +78 -30
  165. data/config/locales/ru.yml +52 -32
  166. data/config/locales/sv.yml +183 -135
  167. data/config/locales/uk.yml +60 -40
  168. data/config/routes.rb +8 -6
  169. data/db/migrate/20180705091019_create_decidim_resource_permissions.rb +12 -0
  170. data/db/migrate/20180706104107_add_nickname_to_managed_users.rb +14 -0
  171. data/db/migrate/20180706111847_fix_result_follows.rb +9 -0
  172. data/db/migrate/20180724103814_add_content_blocks.rb +22 -0
  173. data/db/migrate/20180726112510_create_decidim_hashtags.rb +17 -0
  174. data/db/migrate/20180730071851_add_core_content_blocks.rb +28 -0
  175. data/db/migrate/20180802132147_rename_content_block_options_to_settings.rb +7 -0
  176. data/db/migrate/20180806095628_add_badge_scores.rb +11 -0
  177. data/db/migrate/20180808135006_add_images_to_content_blocks.rb +7 -0
  178. data/db/migrate/20180810092428_move_organization_fields_to_hero_content_block.rb +23 -0
  179. data/db/seeds.rb +10 -2
  180. data/lib/decidim/api/authorable_interface.rb +1 -1
  181. data/lib/decidim/coauthorable.rb +1 -0
  182. data/lib/decidim/content_block_manifest.rb +58 -0
  183. data/lib/decidim/content_block_registry.rb +87 -0
  184. data/lib/decidim/content_parsers.rb +1 -0
  185. data/lib/decidim/content_parsers/hashtag_parser.rb +36 -0
  186. data/lib/decidim/content_processor.rb +11 -0
  187. data/lib/decidim/content_renderers.rb +1 -0
  188. data/lib/decidim/content_renderers/hashtag_renderer.rb +43 -0
  189. data/lib/decidim/core.rb +28 -6
  190. data/lib/decidim/core/api.rb +1 -0
  191. data/lib/decidim/core/engine.rb +52 -1
  192. data/lib/decidim/core/test.rb +3 -0
  193. data/lib/decidim/core/test/factories.rb +32 -17
  194. data/lib/decidim/core/test/shared_examples/authorable_interface_examples.rb +10 -0
  195. data/lib/decidim/core/test/shared_examples/coauthorable.rb +3 -0
  196. data/lib/decidim/core/test/shared_examples/edit_link_shared_examples.rb +30 -0
  197. data/lib/decidim/core/test/shared_examples/has_space_in_mcell_examples.rb +15 -0
  198. data/lib/decidim/core/test/shared_examples/publicable.rb +1 -1
  199. data/lib/decidim/core/test/shared_examples/railtie_examples.rb +15 -0
  200. data/lib/decidim/core/test/shared_examples/scope_helper_examples.rb +1 -0
  201. data/lib/decidim/core/version.rb +1 -1
  202. data/lib/decidim/events/base_event.rb +2 -1
  203. data/lib/decidim/form_builder.rb +9 -3
  204. data/lib/decidim/friendly_dates.rb +1 -1
  205. data/lib/decidim/gamification.rb +109 -0
  206. data/lib/decidim/gamification/badge.rb +54 -0
  207. data/lib/decidim/gamification/badge_earned_event.rb +9 -0
  208. data/lib/decidim/gamification/badge_registry.rb +63 -0
  209. data/lib/decidim/gamification/badge_scorer.rb +118 -0
  210. data/lib/decidim/gamification/badge_status.rb +41 -0
  211. data/lib/decidim/gamification/base_event.rb +40 -0
  212. data/lib/decidim/gamification/level_up_event.rb +9 -0
  213. data/lib/decidim/hashtag.rb +15 -0
  214. data/lib/decidim/hashtaggable.rb +20 -0
  215. data/lib/decidim/query_extensions.rb +10 -0
  216. data/lib/decidim/resource_manifest.rb +10 -0
  217. data/lib/decidim/resourceable.rb +13 -0
  218. data/lib/decidim/search_resource_fields_mapper.rb +8 -3
  219. data/lib/decidim/searchable.rb +8 -0
  220. data/lib/decidim/translatable_attributes.rb +6 -18
  221. data/lib/decidim/view_model.rb +6 -0
  222. data/lib/devise/models/decidim_newsletterable.rb +1 -1
  223. data/vendor/assets/javascripts/d3.js +17813 -0
  224. metadata +125 -27
  225. data/app/cells/decidim/card_m/author.erb +0 -3
  226. data/app/cells/decidim/card_m/authors.erb +0 -9
  227. data/app/views/decidim/messaging/conversations/_message.html.erb +0 -14
  228. data/app/views/decidim/messaging/conversations/_reply.html.erb +0 -11
  229. data/app/views/decidim/messaging/conversations/_show.html.erb +0 -21
  230. data/app/views/decidim/messaging/conversations/_start.html.erb +0 -12
  231. data/app/views/decidim/pages/home/_footer_sub_hero.html.erb +0 -14
  232. data/app/views/decidim/pages/home/_highlighted_content_banner.html.erb +0 -26
  233. data/app/views/decidim/pages/home/_highlighted_processes.html.erb +0 -7
  234. data/app/views/decidim/profiles/_user.html.erb +0 -59
  235. data/app/views/decidim/shared/_action_authorization_modal.html.erb +0 -39
  236. data/app/views/layouts/decidim/_component_authorization_modals.html.erb +0 -5
@@ -165,6 +165,31 @@ uk:
165
165
  name: Приклад підтвердження своєї особи
166
166
  granted_at: 'Надано: %{timestamp}'
167
167
  started_at: 'Розпочато: %{timestamp}'
168
+ authorization_modals:
169
+ show:
170
+ expired:
171
+ authorize: Знову підтвердити свою особу за допомогою "%{authorization}"
172
+ explanation: Строк дії підтвердження вашої особи вичерпався. Щоб виконати цю дію, вам потрібно знову підтвердити свою особу за допомогою "%{authorization}".
173
+ title: Строк дії підтвердження особи вичерпався
174
+ incomplete:
175
+ cancel: Скасувати
176
+ explanation: 'Незважаючи на те, що ви наразі підтвердили свою особу за допомогою "%{authorization}", ми просимо вас знову підтвердити свою особу, оскільки нам не вистачає наступних даних:'
177
+ invalid_field: "Поле %{field}"
178
+ reauthorize: Заново підтвердити свою особу
179
+ title: Будь ласка, заново підтвердіть свою особу
180
+ missing:
181
+ authorize: Підтвердити свою особу за допомогою "%{authorization}"
182
+ explanation: Щоб виконати цю дію, потрібно підтвердити свою особу за допомогою "%{authorization}".
183
+ title: Необхідне підтвердження своєї особи
184
+ pending:
185
+ explanation: Щоб виконати цю дію, потрібно підтвердити особу за допомогою "%{authorization}", але ваше підтвердження особи все ще триває
186
+ resume: Відстежте перебіг підтвердження особи "%{authorization}"
187
+ title: Підтвердження особи все ще триває
188
+ unauthorized:
189
+ explanation: Вибачте, ви не можете виконати цю дію, оскільки деякі з ваших даних підтвердження особи не збігаються.
190
+ invalid_field: "Для поля %{field} значення %{value} неприпустиме."
191
+ ok: Гаразд
192
+ title: Недостатньо прав через відсутність підтвердження особи
168
193
  collapsible_list:
169
194
  hidden_elements_count:
170
195
  one: і ще 1
@@ -184,11 +209,25 @@ uk:
184
209
  comments_enabled: Коментарі увімкнено
185
210
  dummy_global_attribute_1: Приклад властивості 1
186
211
  dummy_global_attribute_2: Приклад властивості 2
212
+ resources_permissions_enabled: Дозволи ресурсів увімкнуто
187
213
  step:
188
214
  comments_blocked: Коментарі вимкнено
189
215
  dummy_step_attribute_1: Приклад 1 властивості кроку
190
216
  dummy_step_attribute_2: Приклад 2 властивості кроку
191
217
  contact: Зв'язатися
218
+ content_blocks:
219
+ footer_sub_hero:
220
+ name: Нижній колонтитул під-багатирського банера
221
+ hero:
222
+ name: Багатирський банер
223
+ highlighted_content_banner:
224
+ name: Банер висвітленого вмісту
225
+ how_to_participate:
226
+ name: Як взяти участь
227
+ stats:
228
+ name: Статистика організації
229
+ sub_hero:
230
+ name: Під-багатирський банер
192
231
  core:
193
232
  actions:
194
233
  unauthorized: Ви не маєте прав на виконання цієї дії
@@ -212,7 +251,7 @@ uk:
212
251
  registrations:
213
252
  new:
214
253
  already_have_an_account?: Вже маєте обліковий запис?
215
- newsletter: Отримувати іноді розсилання з доречними відомостями
254
+ newsletter: Отримувати іноді розсилання зі свіжими новинами
216
255
  newsletter_title: Дозвіл на зв'язок
217
256
  nickname_help: Ваш короткий, унікальний псевдонім в %{organization}
218
257
  sign_in: Увійти
@@ -300,9 +339,9 @@ uk:
300
339
  filters:
301
340
  linked_classes:
302
341
  all: Усі
303
- dummyresource: Приклади ресурсів
342
+ dummy_resource: Приклади ресурсів
304
343
  meeting: Зустрічі
305
- project: Задуми
344
+ project: Проекти
306
345
  proposal: Пропозиції
307
346
  result: Підсумки
308
347
  fingerprint:
@@ -370,7 +409,7 @@ uk:
370
409
  messaging:
371
410
  conversation_mailer:
372
411
  new_conversation:
373
- greeting: Доброго дня, %{recipient}!
412
+ greeting: Вітаємо, %{recipient}!
374
413
  intro: "%{sender} почав з вами нову бесіду. Клацніть тут, щоб прочитати її:"
375
414
  outro: Насолоджуйтесь Десідім!
376
415
  subject: "%{sender} почав з вами бесіду"
@@ -383,13 +422,13 @@ uk:
383
422
  create:
384
423
  error: Бесіда не розпочата. Спробуйте ще раз пізніше
385
424
  index:
425
+ from: Від
426
+ last_message_html: Останнє повідомлення <strong>%{time} тому</strong>
386
427
  no_conversations: У вас ще немає бесід
387
- title: Бесіда з
388
- reply:
389
- send: Надіслати
390
- title: Відповісти
391
428
  show:
392
- title: Бесіда з %{usernames}
429
+ conversation_with_html: Бесіда з <strong>%{name}</strong>
430
+ reply: Відповісти
431
+ send: Надіслати
393
432
  start:
394
433
  send: Надіслати
395
434
  title: Почати бесіду
@@ -414,11 +453,11 @@ uk:
414
453
  success: Розсилання новин успішно оновлено
415
454
  newsletters_opt_in_mailer:
416
455
  notify:
417
- body_1: Обробка особистих даних та їх захист стають дедалі важливішими для всіх нас. З новим "Загальним положенням про захист даних" (GDPR) від 25 травня 2018 року люди мають змогу керувати своїми особистими даними. Тому ми потребуємо вашої згоди, щоб продовжувати надсилати вам доречні відомості про діяльність %{organization_name}.
456
+ body_1: Обробка особистих даних та їх захист стають дедалі важливішими для всіх нас. За новим "Загальним положенням про захист даних" (GDPR) від 25 травня 2018 року люди мають змогу керувати своїми особистими даними. Тому ми потребуємо вашої згоди, щоб продовжувати надсилати вам свіжі новини про діяльність %{organization_name}.
418
457
  body_2: 'Як ви можете дати нам свою згоду? Просто натисніть цю кнопку:'
419
458
  body_3: Погодившись, ви зможете продовжувати отримувати відомості про послуги нашого майданчику. Якщо ж ми не отримаємо вашої згоди, ми припинимо надсилати вам наші повідомлення. Якщо ви підтвердите, що хочете продовжувати отримувати новини, ви зможете потім в будь-який момент від них відмовитись.
420
- button: Так, я хочу продовжувати отримувати доречні відомості
421
- greetings: Вітаємо,<br/>%{organization_name}<br/><a href="%{organization_url}">%{organization_url}</a>
459
+ button: Так, я хочу продовжувати отримувати новини
460
+ greetings: Добридень,<br/>%{organization_name}<br/><a href="%{organization_url}">%{organization_url}</a>!
422
461
  hello: Вітаємо,
423
462
  subject: Бажаєте продовжити отримувати свіжі новини про %{organization_name}?
424
463
  notifications:
@@ -465,7 +504,7 @@ uk:
465
504
  orders_count: Голосів
466
505
  pages_count: Сторінок
467
506
  processes_count: Рухів
468
- projects_count: Задумів
507
+ projects_count: Проектів
469
508
  proposals_accepted: Прийняті пропозиції
470
509
  proposals_count: Пропозицій
471
510
  results_count: Підсумків
@@ -502,6 +541,7 @@ uk:
502
541
  profiles:
503
542
  default_officialization_text: Особу цього учасника прилюдно підтверджено, його ім'я чи роль перевірено на відповідність його справжньому імені та ролі
504
543
  show:
544
+ conversations: Бесіди
505
545
  followers: Ті, хто стежить
506
546
  following: 'Стежить за:'
507
547
  notifications: Сповіщення
@@ -523,7 +563,7 @@ uk:
523
563
  error: Під час створення скарги сталася помилка. Будь ласка, спробуйте зробити це знову.
524
564
  success: Скарга була успішно створена, і вона буде розглянута адміністратором.
525
565
  scopes:
526
- global: Всеохоплюючий обсяг
566
+ global: Всеохопний обсяг
527
567
  picker:
528
568
  cancel: Скасувати
529
569
  choose: Оберіть
@@ -545,30 +585,6 @@ uk:
545
585
  filter_by: 'Відібрати за ознакою:'
546
586
  unfold: Розгорнути
547
587
  shared:
548
- action_authorization_modal:
549
- expired:
550
- authorize: Знову підтвердити свою особу за допомогою "%{authorization}"
551
- explanation: Строк дії підтвердження вашої особи вичерпався. Щоб виконати цю дію, вам потрібно знову підтвердити свою особу за допомогою "%{authorization}".
552
- title: Строк дії підтвердження особи вичерпався
553
- incomplete:
554
- cancel: Скасувати
555
- explanation: 'Незважаючи на те, що ви наразі підтвердили свою особу за допомогою "%{authorization}", ми просимо вас знову підтвердити свою особу, оскільки нам не вистачає наступних даних:'
556
- invalid_field: "Поле %{field}"
557
- reauthorize: Заново підтвердити свою особу
558
- title: Будь ласка, заново підтвердіть свою особу
559
- missing:
560
- authorize: Підтвердити свою особу за допомогою "%{authorization}"
561
- explanation: Щоб виконати цю дію, потрібно підтвердити свою особу за допомогою "%{authorization}".
562
- title: Необхідне підтвердження своєї особи
563
- pending:
564
- explanation: Щоб виконати цю дію, потрібно підтвердити особу за допомогою "%{authorization}", але ваше підтвердження особи все ще триває
565
- resume: Відстежте перебіг підтвердження особи "%{authorization}"
566
- title: Підтвердження особи все ще триває
567
- unauthorized:
568
- explanation: Вибачте, ви не можете виконати цю дію, оскільки деякі з ваших даних підтвердження особи не збігаються.
569
- invalid_field: "Для поля %{field} значення %{value} неприпустиме."
570
- ok: Гаразд
571
- title: Недостатньо прав через відсутність підтвердження особи
572
588
  embed_modal:
573
589
  close_window: Закрити вікно
574
590
  embed: Будь ласка, вставте цей код на свою сторінку
@@ -590,7 +606,7 @@ uk:
590
606
  reference:
591
607
  reference: 'Посилання на джерело: %{reference}'
592
608
  results_per_page:
593
- label: 'Підсумків на сторінку:'
609
+ label: 'Результатів на сторінку:'
594
610
  share_modal:
595
611
  close_window: Закрити вікно
596
612
  share: Поділитися
@@ -608,6 +624,7 @@ uk:
608
624
  invitation_instructions:
609
625
  accept: Прийняти запрошення
610
626
  accept_until: Строк дії цього запрошення закінчується %{due_date}.
627
+ decline: Відхилити запрошення
611
628
  hello: Доброго дня, %{email}%!
612
629
  ignore: |-
613
630
  Якщо ви не бажаєте приймати запрошення, проігноруйте цей лист.<br /> Ваш обліковий запис не буде створено, доки ви не перейдете за наведеним вище посиланням та встановите свій псевдонім та пароль.
@@ -643,7 +660,7 @@ uk:
643
660
  file_size_is_less_than_or_equal_to: розмір файлу має бути меншим або рівним %{count}
644
661
  long_words: містить занадто довгі слова
645
662
  must_start_with_caps: має починатися з великих літер
646
- nesting_too_deep: не може бути всередині підрозряду
663
+ nesting_too_deep: не може бути всередині підкатегорії
647
664
  too_many_marks: містить забагато знаків оклику або питання
648
665
  too_much_caps: містить забагато великих літер
649
666
  too_short: занадто короткий
@@ -658,6 +675,8 @@ uk:
658
675
  description_html: На цьому сайті використовуються реп'яшки (куки). Продовжуючи переглядати сайт, ви погоджуєтеся з нашим використанням реп'яшків. Дізнайтеся про це більше %{link}.
659
676
  link_label: тут
660
677
  ok: Я погоджуюся
678
+ edit_link:
679
+ edit: Редагувати
661
680
  footer:
662
681
  made_with_open_source: Цей веб-сайт створено за допомогою <a target="_blank" href="https://github.com/decidim/decidim">безкоштовного програмного забезпечення</a>.
663
682
  header:
@@ -725,6 +744,7 @@ uk:
725
744
  formats:
726
745
  day_of_month: "%b %d"
727
746
  day_of_week: "%a"
747
+ day_of_week_long: "%a %e"
728
748
  day_of_year: "%d.%m.%y"
729
749
  decidim_day_of_year: "%d %B %Y"
730
750
  decidim_short: "%H:%M %d.%m.%Y"
data/config/routes.rb CHANGED
@@ -40,7 +40,7 @@ Decidim::Core::Engine.routes.draw do
40
40
  resources :invitations, only: [:index, :create]
41
41
  end
42
42
  resources :conversations, only: [:new, :create, :index, :show, :update], controller: "messaging/conversations"
43
- resources :notifications, only: [:destroy] do
43
+ resources :notifications, only: [:index, :destroy] do
44
44
  collection do
45
45
  delete :read_all
46
46
  end
@@ -56,13 +56,15 @@ Decidim::Core::Engine.routes.draw do
56
56
  get :download_file
57
57
  end
58
58
  end
59
+
60
+ get "/authorization_modals/:authorization_action/f/:component_id(/:resource_name/:resource_id)", to: "authorization_modals#show", as: :authorization_modal
59
61
  end
60
62
 
61
- resources :profiles, only: [:show], param: :nickname
62
- scope "/profiles/:nickname" do
63
- get "notifications", to: "profiles#show", as: "profile_notifications", active: "notifications"
64
- get "following", to: "profiles#show", as: "profile_following", active: "following"
65
- get "followers", to: "profiles#show", as: "profile_followers", active: "followers"
63
+ resources :profiles, only: [:show], param: :nickname, constraints: { nickname: %r{[^\/]+} }, format: false
64
+ scope "/profiles/:nickname", format: false, constraints: { nickname: %r{[^\/]+} } do
65
+ get "following", to: "profiles#following", as: "profile_following"
66
+ get "followers", to: "profiles#followers", as: "profile_followers"
67
+ get "badges", to: "profiles#badges", as: "profile_badges"
66
68
  end
67
69
 
68
70
  resources :pages, only: [:index, :show], format: false
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateDecidimResourcePermissions < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :decidim_resource_permissions do |t|
6
+ t.belongs_to :resource, polymorphic: true, index: { name: "index_decidim_resource_permissions_on_r_type_and_r_id", unique: true }
7
+ t.jsonb :permissions, default: {}
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddNicknameToManagedUsers < ActiveRecord::Migration[5.2]
4
+ class User < ApplicationRecord
5
+ self.table_name = :decidim_users
6
+ end
7
+
8
+ def up
9
+ User.where(managed: true, nickname: nil).includes(:organization).find_each do |user|
10
+ user.nickname = User.nicknamize(user.name, organization: user.organization)
11
+ user.save
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class FixResultFollows < ActiveRecord::Migration[5.2]
4
+ def change
5
+ # rubocop:disable Rails/SkipsModelValidations
6
+ Decidim::Follow.where(decidim_followable_type: "Decidim::Results::Result").update_all(decidim_followable_type: "Decidim::Accountability::Result")
7
+ # rubocop:enable Rails/SkipsModelValidations
8
+ end
9
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddContentBlocks < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :decidim_content_blocks do |t|
6
+ t.integer :decidim_organization_id, null: false, index: true
7
+ t.string :manifest_name, null: false, index: true
8
+ t.string :scope, null: false, index: true
9
+ t.jsonb :options
10
+ t.datetime :published_at, index: true
11
+ t.integer :weight
12
+ t.references
13
+ end
14
+
15
+ add_index(
16
+ :decidim_content_blocks,
17
+ [:decidim_organization_id, :scope, :manifest_name],
18
+ unique: true,
19
+ name: "idx_dcdm_content_blocks_uniq_org_id_scope_manifest_name"
20
+ )
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateDecidimHashtags < ActiveRecord::Migration[5.2]
4
+ def self.up
5
+ create_table :decidim_hashtags do |t|
6
+ t.references :decidim_organization
7
+
8
+ t.string :name, index: true
9
+
10
+ t.timestamps
11
+ end
12
+ end
13
+
14
+ def self.down
15
+ drop_table :decidim_hashtags
16
+ end
17
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddCoreContentBlocks < ActiveRecord::Migration[5.2]
4
+ class Organization < ApplicationRecord
5
+ self.table_name = :decidim_organizations
6
+ end
7
+
8
+ class ContentBlock < ApplicationRecord
9
+ self.table_name = :decidim_content_blocks
10
+ end
11
+
12
+ def change
13
+ default_blocks = [:hero, :sub_hero, :highlighted_content_banner, :how_to_participate, :stats, :footer_sub_hero]
14
+
15
+ Organization.pluck(:id).each do |organization_id|
16
+ default_blocks.each_with_index do |manifest_name, index|
17
+ weight = (index + 1) * 10
18
+ ContentBlock.create(
19
+ decidim_organization_id: organization_id,
20
+ weight: weight,
21
+ scope: :homepage,
22
+ manifest_name: manifest_name,
23
+ published_at: Time.current
24
+ )
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RenameContentBlockOptionsToSettings < ActiveRecord::Migration[5.2]
4
+ def change
5
+ rename_column :decidim_content_blocks, :options, :settings
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddBadgeScores < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :decidim_gamification_badge_scores do |t|
6
+ t.references :user, null: false
7
+ t.string :badge_name, null: false
8
+ t.integer :value, null: false, default: 0
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddImagesToContentBlocks < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_column :decidim_content_blocks, :images, :jsonb, default: {}
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ class MoveOrganizationFieldsToHeroContentBlock < ActiveRecord::Migration[5.2]
4
+ class ::Decidim::Organization < ApplicationRecord
5
+ mount_uploader :homepage_image, ::Decidim::HomepageImageUploader
6
+ end
7
+
8
+ def change
9
+ Decidim::Organization.find_each do |organization|
10
+ content_block = Decidim::ContentBlock.find_by(organization: organization, scope: :homepage, manifest_name: :hero)
11
+ settings = {}
12
+ welcome_text = organization.welcome_text
13
+ settings = welcome_text.inject(settings) { |acc, (k, v)| acc.update("welcome_text_#{k}" => v) }
14
+
15
+ content_block.settings = settings
16
+ content_block.images_container.background_image = organization.homepage_image.file
17
+ content_block.save!
18
+ end
19
+
20
+ remove_column :decidim_organizations, :welcome_text
21
+ remove_column :decidim_organizations, :homepage_image
22
+ end
23
+ end
data/db/seeds.rb CHANGED
@@ -15,11 +15,9 @@ if !Rails.env.production? || ENV["SEED"]
15
15
  youtube_handler: Faker::Hipster.word,
16
16
  github_handler: Faker::Hipster.word,
17
17
  host: ENV["DECIDIM_HOST"] || "localhost",
18
- welcome_text: Decidim::Faker::Localized.sentence(5),
19
18
  description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
20
19
  Decidim::Faker::Localized.sentence(15)
21
20
  end,
22
- homepage_image: File.new(File.join(seeds_root, "homepage_image.jpg")),
23
21
  default_locale: Decidim.default_locale,
24
22
  available_locales: Decidim.available_locales,
25
23
  reference_prefix: Faker::Name.suffix,
@@ -153,4 +151,14 @@ if !Rails.env.production? || ENV["SEED"]
153
151
  scopes: "public",
154
152
  organization: organization
155
153
  )
154
+
155
+ Decidim::System::CreateDefaultContentBlocks.call(organization)
156
+
157
+ hero_content_block = Decidim::ContentBlock.find_by(organization: organization, manifest_name: :hero, scope: :homepage)
158
+ hero_content_block.images_container.background_image = File.new(File.join(seeds_root, "homepage_image.jpg"))
159
+ settings = {}
160
+ welcome_text = Decidim::Faker::Localized.sentence(5)
161
+ settings = welcome_text.inject(settings) { |acc, (k, v)| acc.update("welcome_text_#{k}" => v) }
162
+ hero_content_block.settings = settings
163
+ hero_content_block.save!
156
164
  end
@@ -7,7 +7,7 @@ module Decidim
7
7
  name "AuthorableInterface"
8
8
  description "An interface that can be used in authorable objects."
9
9
 
10
- field :author, !Decidim::Core::AuthorInterface, "The comment's author" do
10
+ field :author, Decidim::Core::AuthorInterface, "The resource author" do
11
11
  # can be an Authorable or a Coauthorable
12
12
  resolve ->(authorable, _, _) {
13
13
  if authorable.respond_to?(:normalized_author)