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.
- checksums.yaml +5 -5
- data/README.md +1 -1
- data/app/assets/images/decidim/decidim-logo.svg +23 -23
- data/app/assets/images/decidim/default-avatar.svg +7 -7
- data/app/assets/images/decidim/icons.svg +1 -0
- data/app/assets/javascripts/decidim.js.es6 +5 -2
- data/app/assets/javascripts/decidim/append_redirect_url_to_modals.js.es6 +84 -0
- data/app/assets/javascripts/decidim/data_picker.js.es6 +177 -0
- data/app/assets/javascripts/decidim/form_filter.component.js.es6 +25 -20
- data/app/assets/javascripts/decidim/form_filter.component.test.js +24 -13
- data/app/assets/javascripts/decidim/history.js.es6 +3 -3
- data/app/assets/stylesheets/decidim/_decidim.scss +1 -4
- data/app/assets/stylesheets/decidim/_variables.scss +4 -4
- data/app/assets/stylesheets/decidim/editor.scss +13 -0
- data/app/assets/stylesheets/decidim/email.css +9 -1
- data/app/assets/stylesheets/decidim/extras/_add_comments.scss +3 -3
- data/app/assets/stylesheets/decidim/extras/_announcement.scss +1 -1
- data/app/assets/stylesheets/decidim/extras/_collection-sort-controls.scss +2 -2
- data/app/assets/stylesheets/decidim/extras/_embed.scss +6 -5
- data/app/assets/stylesheets/decidim/extras/_impersonation-bar.scss +4 -0
- data/app/assets/stylesheets/decidim/extras/_label-required.scss +1 -1
- data/app/assets/stylesheets/decidim/extras/_leaflet.scss +6 -4
- data/app/assets/stylesheets/decidim/extras/_meeting-registrations.scss +4 -4
- data/app/assets/stylesheets/decidim/extras/_process_stats.scss +11 -4
- data/app/assets/stylesheets/decidim/extras/_proposal_form.scss +3 -3
- data/app/assets/stylesheets/decidim/extras/_quill.scss +1 -1
- data/app/assets/stylesheets/decidim/extras/_reference.scss +3 -3
- data/app/assets/stylesheets/decidim/extras/_register_form.scss +3 -3
- data/app/assets/stylesheets/decidim/extras/_results-per-page.scss +10 -10
- data/app/assets/stylesheets/decidim/extras/_social_icons_mini.scss +4 -3
- data/app/assets/stylesheets/decidim/layouts/_highlighted_banner.scss +38 -0
- data/app/assets/stylesheets/decidim/layouts/_home.scss +33 -3
- data/app/assets/stylesheets/decidim/layouts/_user.scss +33 -5
- data/app/assets/stylesheets/decidim/layouts/_view.scss +1 -2
- data/app/assets/stylesheets/decidim/map.css +5 -3
- data/app/assets/stylesheets/decidim/modules/_address.scss +1 -0
- data/app/assets/stylesheets/decidim/modules/_author-avatar.scss +24 -9
- data/app/assets/stylesheets/decidim/modules/_buttons.scss +24 -10
- data/app/assets/stylesheets/decidim/modules/_callout.scss +5 -1
- data/app/assets/stylesheets/decidim/modules/_card-grid.scss +1 -1
- data/app/assets/stylesheets/decidim/modules/_cards.scss +102 -31
- data/app/assets/stylesheets/decidim/modules/_comments.scss +21 -20
- data/app/assets/stylesheets/decidim/modules/_cookie-bar.scss +4 -0
- data/app/assets/stylesheets/decidim/modules/_data-picker.scss +159 -0
- data/app/assets/stylesheets/decidim/modules/_datepicker.scss +36 -36
- data/app/assets/stylesheets/decidim/modules/_definition-data.scss +12 -9
- data/app/assets/stylesheets/decidim/modules/_extra.scss +4 -1
- data/app/assets/stylesheets/decidim/modules/_filter-tags.scss +3 -0
- data/app/assets/stylesheets/decidim/modules/_filters.scss +9 -5
- data/app/assets/stylesheets/decidim/modules/_flag.scss +1 -0
- data/app/assets/stylesheets/decidim/modules/_footer.scss +10 -0
- data/app/assets/stylesheets/decidim/modules/_forms.scss +2 -1
- data/app/assets/stylesheets/decidim/modules/_help.scss +2 -0
- data/app/assets/stylesheets/decidim/modules/_icons.scss +1 -0
- data/app/assets/stylesheets/decidim/modules/_layout.scss +4 -0
- data/app/assets/stylesheets/decidim/modules/_list-docs.scss +3 -0
- data/app/assets/stylesheets/decidim/modules/_main-container.scss +13 -7
- data/app/assets/stylesheets/decidim/modules/_map.scss +13 -1
- data/app/assets/stylesheets/decidim/modules/_margins.scss +1 -0
- data/app/assets/stylesheets/decidim/modules/_messages.scss +2 -1
- data/app/assets/stylesheets/decidim/modules/_modules.scss +3 -0
- data/app/assets/stylesheets/decidim/modules/_navbar.scss +36 -16
- data/app/assets/stylesheets/decidim/modules/_omnipresent_banner.scss +26 -0
- data/app/assets/stylesheets/decidim/modules/_opinion-toggle.scss +5 -0
- data/app/assets/stylesheets/decidim/modules/_order-by.scss +10 -10
- data/app/assets/stylesheets/decidim/modules/_pagination.scss +3 -2
- data/app/assets/stylesheets/decidim/modules/_process-header.scss +11 -2
- data/app/assets/stylesheets/decidim/modules/_process-info.scss +9 -1
- data/app/assets/stylesheets/decidim/modules/_process-nav.scss +20 -3
- data/app/assets/stylesheets/decidim/modules/_process-phase.scss +12 -3
- data/app/assets/stylesheets/decidim/modules/_progress-bar.scss +69 -0
- data/app/assets/stylesheets/decidim/modules/_reference.scss +1 -2
- data/app/assets/stylesheets/decidim/modules/_reveal.scss +1 -1
- data/app/assets/stylesheets/decidim/modules/_share.scss +2 -0
- data/app/assets/stylesheets/decidim/modules/_signup.scss +5 -1
- data/app/assets/stylesheets/decidim/modules/_static-pages.scss +6 -0
- data/app/assets/stylesheets/decidim/modules/_status-labels.scss +2 -0
- data/app/assets/stylesheets/decidim/modules/_tags.scss +3 -1
- data/app/assets/stylesheets/decidim/modules/_timeline.scss +41 -30
- data/app/assets/stylesheets/decidim/modules/_title-action.scss +2 -1
- data/app/assets/stylesheets/decidim/modules/_typography.scss +13 -4
- data/app/assets/stylesheets/decidim/modules/_user-form.scss +1 -0
- data/app/assets/stylesheets/decidim/modules/_video.scss +2 -2
- data/app/assets/stylesheets/decidim/utils/_fontface.scss +22 -20
- data/app/assets/stylesheets/decidim/utils/_helpers.scss +6 -6
- data/app/assets/stylesheets/decidim/utils/_keyframes.scss +6 -6
- data/app/assets/stylesheets/decidim/utils/_mixins.scss +24 -7
- data/app/assets/stylesheets/decidim/utils/_settings.scss +50 -52
- data/app/assets/stylesheets/decidim/utils/_toggle-expand.scss +1 -0
- data/app/commands/decidim/create_omniauth_registration.rb +3 -0
- data/app/commands/decidim/create_registration.rb +3 -1
- data/app/commands/decidim/destroy_account.rb +1 -0
- data/app/commands/decidim/invite_user_again.rb +1 -1
- data/app/commands/decidim/messaging/reply_to_conversation.rb +1 -3
- data/app/commands/decidim/unsubscribe_settings.rb +29 -0
- data/app/commands/decidim/update_account.rb +16 -3
- data/app/controllers/concerns/decidim/action_authorization.rb +1 -1
- data/app/controllers/concerns/decidim/devise_controllers.rb +10 -0
- data/app/controllers/concerns/decidim/form_factory.rb +2 -1
- data/app/controllers/concerns/decidim/impersonate_users.rb +13 -8
- data/app/controllers/concerns/decidim/participatory_space_context.rb +1 -1
- data/app/controllers/decidim/application_controller.rb +16 -0
- data/app/controllers/decidim/cookie_policy_controller.rb +2 -0
- data/app/controllers/decidim/devise/invitations_controller.rb +9 -1
- data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +10 -1
- data/app/controllers/decidim/devise/sessions_controller.rb +9 -1
- data/app/controllers/decidim/locales_controller.rb +2 -3
- data/app/controllers/decidim/messaging/conversations_controller.rb +2 -2
- data/app/controllers/decidim/newsletters_controller.rb +60 -0
- data/app/controllers/decidim/pages_controller.rb +1 -0
- data/app/controllers/decidim/profiles_controller.rb +23 -0
- data/app/controllers/decidim/scopes_controller.rb +19 -20
- data/app/events/decidim/profile_updated_event.rb +27 -0
- data/app/forms/decidim/account_form.rb +34 -0
- data/app/forms/decidim/form.rb +1 -0
- data/app/forms/decidim/messaging/conversation_form.rb +5 -2
- data/app/forms/decidim/omniauth_registration_form.rb +5 -0
- data/app/forms/decidim/registration_form.rb +8 -1
- data/app/helpers/decidim/action_authorization_helper.rb +2 -2
- data/app/helpers/decidim/application_helper.rb +8 -0
- data/app/helpers/decidim/feature_path_helper.rb +12 -2
- data/app/helpers/decidim/feature_reference_helper.rb +1 -1
- data/app/helpers/decidim/messaging/conversation_helper.rb +27 -9
- data/app/helpers/decidim/newsletters_helper.rb +49 -0
- data/app/helpers/decidim/scopes_helper.rb +43 -2
- data/app/helpers/decidim/translations_helper.rb +6 -2
- data/app/mailers/decidim/decidim_devise_mailer.rb +1 -3
- data/app/mailers/decidim/messaging/conversation_mailer.rb +1 -1
- data/app/mailers/decidim/newsletter_mailer.rb +7 -8
- data/app/models/decidim/abilities/everyone_ability.rb +1 -0
- data/app/models/decidim/authorization.rb +19 -5
- data/app/models/decidim/impersonation_log.rb +2 -1
- data/app/models/decidim/messaging/conversation.rb +2 -0
- data/app/models/decidim/messaging/message.rb +4 -0
- data/app/models/decidim/organization.rb +1 -0
- data/app/models/decidim/scope.rb +10 -2
- data/app/models/decidim/user.rb +10 -2
- data/app/presenters/decidim/home_stats_presenter.rb +10 -4
- data/app/presenters/decidim/user_group_presenter.rb +28 -0
- data/app/presenters/decidim/user_presenter.rb +42 -0
- data/app/services/decidim/action_authorizer.rb +32 -68
- data/app/services/decidim/notification_generator_for_recipient.rb +8 -3
- data/app/uploaders/decidim/avatar_uploader.rb +2 -2
- data/app/views/decidim/account/delete.html.erb +1 -1
- data/app/views/decidim/account/show.html.erb +4 -1
- data/app/views/decidim/devise/invitations/edit.html.erb +2 -0
- data/app/views/decidim/devise/omniauth_registrations/new.html.erb +7 -1
- data/app/views/decidim/devise/registrations/new.html.erb +7 -1
- data/app/views/decidim/messaging/conversations/_message.html.erb +6 -12
- data/app/views/decidim/messaging/conversations/_reply.html.erb +1 -1
- data/app/views/decidim/messaging/conversations/index.html.erb +1 -1
- data/app/views/decidim/messaging/conversations/update.js.erb +1 -0
- data/app/views/decidim/newsletter_mailer/newsletter.html.erb +11 -0
- data/app/views/decidim/newsletters/show.html.erb +11 -0
- data/app/views/decidim/newsletters/unsubscribe.html.erb +4 -0
- data/app/views/decidim/notifications/_notification.html.erb +1 -1
- data/app/views/decidim/profiles/show.html.erb +64 -0
- data/app/views/decidim/scopes/_scopes_picker_input.html.erb +6 -0
- data/app/views/decidim/scopes/picker.html.erb +36 -0
- data/app/views/decidim/shared/_action_authorization_modal.html.erb +25 -51
- data/app/views/decidim/shared/_author.html.erb +21 -0
- data/app/views/decidim/shared/_author_reference.html.erb +12 -0
- data/app/views/layouts/decidim/_application.html.erb +1 -0
- data/app/views/layouts/decidim/_impersonation_warning.html.erb +1 -1
- data/app/views/layouts/decidim/_mailer_logo.html.erb +6 -1
- data/app/views/layouts/decidim/_omnipresent_banner.html.erb +14 -0
- data/app/views/layouts/decidim/_user_menu.html.erb +3 -0
- data/app/views/layouts/decidim/mailer.html.erb +16 -4
- data/app/views/layouts/decidim/widget.html.erb +14 -9
- data/app/views/pages/home.html.erb +2 -0
- data/app/views/pages/home/_highlighted_content_banner.html.erb +26 -0
- data/config/initializers/devise.rb +1 -3
- data/config/locales/ca.yml +67 -9
- data/config/locales/en.yml +65 -4
- data/config/locales/es.yml +74 -14
- data/config/locales/eu.yml +66 -4
- data/config/locales/fi.yml +87 -25
- data/config/locales/fr.yml +71 -9
- data/config/locales/gl.yml +493 -0
- data/config/locales/it.yml +79 -17
- data/config/locales/nl.yml +71 -9
- data/config/locales/pl.yml +66 -4
- data/config/locales/pt-BR.yml +493 -0
- data/config/locales/pt.yml +99 -37
- data/config/locales/ru.yml +85 -13
- data/config/locales/sv.yml +493 -0
- data/config/locales/uk.yml +78 -16
- data/config/routes.rb +11 -1
- data/db/migrate/20171212103803_create_unique_nicknames.rb +29 -0
- data/db/migrate/20180115090038_extend_user_profile.rb +8 -0
- data/db/migrate/20180123125308_add_enable_omnipresent_banner_to_decidim_organizations.rb +7 -0
- data/db/migrate/20180123125409_add_omnipresent_banner_title_to_decidim_organizations.rb +7 -0
- data/db/migrate/20180123125432_add_omnipresent_banner_short_description_to_decidim_organizations.rb +7 -0
- data/db/migrate/20180123125452_add_omnipresent_banner_url_to_decidim_organizations.rb +7 -0
- data/db/migrate/20180125063433_add_highlighted_content_banner_to_decidim_organizations.rb +13 -0
- data/db/seeds.rb +8 -2
- data/lib/decidim/abilities/participatory_process_role_ability.rb +1 -3
- data/lib/decidim/content_parsers.rb +8 -0
- data/lib/decidim/content_parsers/base_parser.rb +58 -0
- data/lib/decidim/content_parsers/user_parser.rb +46 -0
- data/lib/decidim/content_processor.rb +84 -0
- data/lib/decidim/content_renderers.rb +8 -0
- data/lib/decidim/content_renderers/base_renderer.rb +37 -0
- data/lib/decidim/content_renderers/user_renderer.rb +32 -0
- data/lib/decidim/core.rb +66 -1
- data/lib/decidim/core/api/author_interface.rb +3 -3
- data/lib/decidim/core/api/user_group_type.rb +10 -8
- data/lib/decidim/core/api/user_type.rb +13 -7
- data/lib/decidim/core/engine.rb +7 -5
- data/lib/decidim/core/test.rb +1 -1
- data/lib/decidim/core/test/factories.rb +21 -45
- data/lib/decidim/core/test/shared_examples/announcements_examples.rb +3 -2
- data/lib/decidim/core/test/shared_examples/comments_examples.rb +5 -2
- data/lib/decidim/core/test/shared_examples/scope_helper_examples.rb +40 -3
- data/lib/decidim/core/test/shared_examples/simple_event.rb +73 -0
- data/lib/decidim/core/version.rb +1 -1
- data/lib/decidim/events.rb +2 -0
- data/lib/decidim/events/author_event.rb +41 -0
- data/lib/decidim/events/base_event.rb +28 -3
- data/lib/decidim/events/email_event.rb +1 -1
- data/lib/decidim/events/notification_event.rb +1 -1
- data/lib/decidim/events/simple_event.rb +79 -0
- data/lib/decidim/filter_form_builder.rb +2 -3
- data/lib/decidim/form_builder.rb +39 -27
- data/lib/decidim/friendly_dates.rb +26 -0
- data/lib/decidim/has_feature.rb +1 -0
- data/lib/decidim/has_reference.rb +1 -1
- data/lib/decidim/i18n_exceptions.rb +1 -3
- data/lib/decidim/menu.rb +1 -1
- data/lib/decidim/newsletter_encryptor.rb +22 -0
- data/lib/decidim/nicknamizable.rb +56 -0
- data/lib/decidim/participable.rb +8 -0
- data/lib/decidim/participatory_space_manifest.rb +10 -1
- data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.gl.js +13 -0
- data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.pt-br.js +14 -0
- data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.pt.js +5 -1
- data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.ru.js +4 -1
- data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.sv.js +14 -0
- data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.uk.js +4 -1
- data/vendor/assets/javascripts/form_datepicker.js.es6 +4 -2
- data/vendor/assets/javascripts/foundation-datepicker.js +42 -26
- metadata +124 -84
- data/app/assets/javascripts/decidim/select2.field.js.es6 +0 -47
- data/app/assets/javascripts/decidim/select2.js.es6 +0 -11
- data/app/assets/stylesheets/decidim/editor.sass +0 -4
- data/app/assets/stylesheets/decidim/plugins/_select2.scss +0 -63
- data/app/helpers/decidim/datetime_helper.rb +0 -23
- data/app/queries/decidim/freetext_scopes.rb +0 -39
- data/lib/decidim/core/test/shared_examples/manage_moderations_examples.rb +0 -64
data/config/locales/uk.yml
CHANGED
@@ -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:
|
72
|
-
foo:
|
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:
|
131
|
-
foo:
|
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:
|
137
|
-
dummy_global_attribute_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
|
-
|
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: "« Перша"
|
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/
|
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,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,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
|