decidim-decidim_awesome 0.6.6 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +93 -36
- data/Rakefile +11 -12
- data/app/cells/decidim/decidim_awesome/content_blocks/map/error.erb +11 -0
- data/app/cells/decidim/decidim_awesome/content_blocks/map/show.erb +14 -0
- data/app/cells/decidim/decidim_awesome/content_blocks/map_cell.rb +65 -0
- data/app/cells/decidim/decidim_awesome/content_blocks/map_form/show.erb +65 -0
- data/app/cells/decidim/decidim_awesome/content_blocks/map_form_cell.rb +19 -0
- data/app/commands/concerns/decidim/decidim_awesome/admin/needs_constraint_helpers.rb +32 -0
- data/app/commands/decidim/decidim_awesome/admin/create_custom_redirect.rb +51 -0
- data/app/commands/decidim/decidim_awesome/admin/create_proposal_custom_field.rb +45 -0
- data/app/commands/decidim/decidim_awesome/admin/create_scoped_admin.rb +38 -0
- data/app/commands/decidim/decidim_awesome/admin/destroy_constraint.rb +4 -0
- data/app/commands/decidim/decidim_awesome/admin/destroy_custom_redirect.rb +47 -0
- data/app/commands/decidim/decidim_awesome/admin/destroy_proposal_custom_field.rb +40 -0
- data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_admin.rb +40 -0
- data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_style.rb +1 -1
- data/app/commands/decidim/decidim_awesome/admin/rename_scope_label.rb +58 -0
- data/app/commands/decidim/decidim_awesome/admin/update_config.rb +5 -1
- data/app/commands/decidim/decidim_awesome/admin/update_custom_redirect.rb +49 -0
- data/app/commands/decidim/decidim_awesome/create_editor_image.rb +12 -5
- data/app/controllers/concerns/decidim/decidim_awesome/not_found_redirect.rb +58 -0
- data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +15 -22
- data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +41 -20
- data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +4 -0
- data/app/controllers/decidim/decidim_awesome/admin/custom_redirects_controller.rb +91 -0
- data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +7 -10
- data/app/controllers/decidim/decidim_awesome/admin/proposal_custom_fields_controller.rb +38 -0
- data/app/controllers/decidim/decidim_awesome/admin/scoped_admins_controller.rb +38 -0
- data/app/controllers/decidim/decidim_awesome/admin/scoped_styles_controller.rb +38 -0
- data/app/controllers/decidim/decidim_awesome/blank_component_controller.rb +19 -0
- data/app/controllers/decidim/decidim_awesome/editor_images_controller.rb +2 -3
- data/app/controllers/decidim/decidim_awesome/iframe_component/iframe_controller.rb +1 -1
- data/app/controllers/decidim/decidim_awesome/map_component/map_controller.rb +2 -9
- data/app/forms/decidim/decidim_awesome/admin/config_form.rb +52 -0
- data/app/forms/decidim/decidim_awesome/admin/constraint_form.rb +3 -1
- data/app/forms/decidim/decidim_awesome/admin/custom_redirect_form.rb +45 -0
- data/app/forms/decidim/decidim_awesome/editor_image_form.rb +3 -2
- data/app/forms/decidim/decidim_awesome/proposals/proposal_wizard_create_step_form_override.rb +38 -0
- data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +32 -15
- data/app/helpers/decidim/decidim_awesome/admin/system_checker_helpers.rb +36 -0
- data/app/helpers/decidim/decidim_awesome/amendments_helper_override.rb +48 -0
- data/app/helpers/decidim/decidim_awesome/map_helper.rb +76 -57
- data/app/helpers/decidim/decidim_awesome/proposals/application_helper_override.rb +78 -0
- data/app/jobs/decidim/decidim_awesome/migrate_legacy_images_job.rb +106 -0
- data/app/middleware/decidim/decidim_awesome/current_config.rb +182 -0
- data/app/models/decidim/decidim_awesome/awesome_config.rb +15 -0
- data/app/models/decidim/decidim_awesome/editor_image.rb +4 -9
- data/app/models/decidim/decidim_awesome/user_override.rb +25 -0
- data/app/packs/entrypoints/decidim_admin_decidim_awesome.js +5 -0
- data/app/packs/entrypoints/decidim_admin_decidim_awesome.scss +1 -0
- data/app/packs/entrypoints/decidim_admin_decidim_awesome_custom_fields.js +2 -0
- data/app/packs/entrypoints/decidim_decidim_awesome.js +9 -0
- data/app/packs/entrypoints/decidim_decidim_awesome.scss +1 -0
- data/app/packs/entrypoints/decidim_decidim_awesome_admin_form_exit_warn.js +1 -0
- data/app/packs/entrypoints/decidim_decidim_awesome_custom_fields.js +1 -0
- data/app/packs/entrypoints/decidim_decidim_awesome_iframe.scss +1 -0
- data/app/packs/entrypoints/decidim_decidim_awesome_map.js +5 -0
- data/app/packs/entrypoints/decidim_decidim_awesome_map.scss +1 -0
- data/app/{assets → packs}/images/decidim/decidim_awesome/platoniq-logo.png +0 -0
- data/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js +82 -0
- data/app/packs/src/decidim/decidim_awesome/admin/check_redirections.js +48 -0
- data/app/packs/src/decidim/decidim_awesome/admin/codemirror.js +14 -0
- data/app/packs/src/decidim/decidim_awesome/admin/constraints.js +55 -0
- data/app/packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js +77 -0
- data/app/{assets/javascripts/decidim/decidim_awesome/admin/form_exit_warn.js.es6 → packs/src/decidim/decidim_awesome/admin/form_exit_warn.js} +0 -2
- data/app/packs/src/decidim/decidim_awesome/admin/user_picker.js +24 -0
- data/app/packs/src/decidim/decidim_awesome/awesome_admin.js +23 -0
- data/app/packs/src/decidim/decidim_awesome/awesome_application.js +17 -0
- data/app/{assets/javascripts/decidim/decidim_awesome/awesome_map/api_fetcher.js.es6 → packs/src/decidim/decidim_awesome/awesome_map/api/api_fetcher.js} +1 -15
- data/app/packs/src/decidim/decidim_awesome/awesome_map/api/fetcher.js +131 -0
- data/app/packs/src/decidim/decidim_awesome/awesome_map/api/meetings_fetcher.js +59 -0
- data/app/packs/src/decidim/decidim_awesome/awesome_map/api/proposals_fetcher.js +52 -0
- data/app/packs/src/decidim/decidim_awesome/awesome_map/awesome_map.js +130 -0
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/controller.js +112 -0
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/meetings_controller.js +31 -0
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/proposals_controller.js +88 -0
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controls_ui.js +221 -0
- data/app/packs/src/decidim/decidim_awesome/awesome_map/load_map.js +51 -0
- data/app/packs/src/decidim/decidim_awesome/editors/editor.js +190 -0
- data/app/packs/src/decidim/decidim_awesome/editors/tabs_focus.js +22 -0
- data/app/{assets/javascripts/decidim/decidim_awesome/forms/autosave.js.es6 → packs/src/decidim/decidim_awesome/forms/autosave.js} +20 -17
- data/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js +207 -0
- data/app/packs/src/decidim/decidim_awesome/forms/rich_text_plugin.js +107 -0
- data/app/packs/src/decidim/decidim_awesome/proposals/custom_fields.js +22 -0
- data/app/packs/src/decidim/decidim_awesome/proposals/images.js +25 -0
- data/{vendor/assets/javascripts → app/packs/src/vendor}/image-resize.min.js +0 -0
- data/{vendor/assets/javascripts → app/packs/src/vendor}/image-upload.min.js +0 -0
- data/app/packs/src/vendor/jquery.truncate.js +105 -0
- data/app/packs/src/vendor/leaflet.featuregroup.subgroup.js +184 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/auto_edits.scss +16 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/check_redirections.scss +28 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/codemirror.scss +29 -0
- data/app/{assets → packs}/stylesheets/decidim/decidim_awesome/admin/constraints.scss +21 -9
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/custom_fields.scss +93 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/user_picker.scss +41 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/awesome_admin.scss +71 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/awesome_application.scss +19 -0
- data/app/{assets → packs}/stylesheets/decidim/decidim_awesome/awesome_iframe/iframe.scss +3 -3
- data/app/packs/stylesheets/decidim/decidim_awesome/awesome_map/map.scss +176 -0
- data/app/{assets → packs}/stylesheets/decidim/decidim_awesome/editors/markdown_editor.scss +6 -4
- data/app/packs/stylesheets/decidim/decidim_awesome/editors/quill_editor.scss +58 -0
- data/app/{assets → packs}/stylesheets/decidim/decidim_awesome/forms/autosave.scss +2 -2
- data/app/packs/stylesheets/vendor/select2-foundation-theme.scss +348 -0
- data/app/permissions/decidim/decidim_awesome/admin/permissions.rb +2 -0
- data/app/presenters/decidim/decidim_awesome/menu_item_presenter_override.rb +25 -0
- data/app/presenters/decidim/decidim_awesome/menu_presenter_override.rb +23 -0
- data/app/uploaders/decidim/cw/decidim_awesome/image_uploader.rb +26 -0
- data/app/uploaders/decidim/decidim_awesome/image_uploader.rb +4 -21
- data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +28 -22
- data/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb +7 -0
- data/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb +3 -3
- data/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb +21 -0
- data/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb +1 -3
- data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb +25 -0
- data/app/views/decidim/decidim_awesome/admin/config/_form_proposals.html.erb +0 -2
- data/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb +11 -12
- data/app/views/decidim/decidim_awesome/admin/config/_modal.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/admin/config/show.html.erb +3 -4
- data/app/views/decidim/decidim_awesome/admin/constraints/new.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/admin/custom_redirects/_form.html.erb +6 -0
- data/app/views/decidim/decidim_awesome/admin/custom_redirects/edit.html.erb +13 -0
- data/app/views/decidim/decidim_awesome/admin/custom_redirects/index.html.erb +37 -0
- data/app/views/decidim/decidim_awesome/admin/custom_redirects/new.html.erb +13 -0
- data/app/views/decidim/decidim_awesome/admin/menu_hacks/edit.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/admin/menu_hacks/new.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/admin/proposals/_editor.html.erb +6 -0
- data/app/views/decidim/decidim_awesome/custom_fields/_form_render.html.erb +6 -0
- data/app/views/decidim/decidim_awesome/iframe_component/iframe/show.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/map_component/map/_api_ready.html.erb +3 -0
- data/app/views/decidim/decidim_awesome/map_component/map/_map_template.html.erb +68 -0
- data/app/views/decidim/decidim_awesome/map_component/map/{error.erb → error.html.erb} +2 -0
- data/app/views/decidim/decidim_awesome/map_component/map/show.html.erb +3 -96
- data/app/views/decidim/proposals/admin/proposals/_form.html.erb +101 -0
- data/app/views/decidim/proposals/collaborative_drafts/_edit_form_fields.html.erb +83 -0
- data/app/views/decidim/proposals/collaborative_drafts/show.html.erb +1 -0
- data/app/views/layouts/decidim/admin/decidim_awesome.html.erb +34 -16
- data/app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb +6 -1
- data/app/views/layouts/decidim/decidim_awesome/_custom_styles.html.erb +1 -1
- data/app/views/v0.25/decidim/proposals/collaborative_drafts/_show.html.erb +128 -0
- data/app/views/{v0.23 → v0.25}/layouts/decidim/_head.html.erb +12 -10
- data/app/views/v0.25/layouts/decidim/admin/_header.html.erb +11 -0
- data/app/views/v0.26/decidim/proposals/collaborative_drafts/_show.html.erb +128 -0
- data/app/views/{v0.22 → v0.26}/layouts/decidim/_head.html.erb +18 -10
- data/app/views/v0.26/layouts/decidim/admin/_header.html.erb +11 -0
- data/config/assets.rb +46 -0
- data/config/i18n-tasks.yml +6 -0
- data/config/locales/ca.yml +147 -13
- data/config/locales/cs.yml +137 -3
- data/config/locales/en.yml +170 -11
- data/config/locales/es.yml +136 -2
- data/config/locales/eu.yml +1 -161
- data/config/locales/fr.yml +276 -142
- data/config/locales/it.yml +346 -0
- data/config/locales/ja.yml +345 -0
- data/config/locales/nl.yml +167 -136
- data/config/locales/pt-BR.yml +346 -0
- data/config/locales/pt-PT.yml +7 -0
- data/config/locales/pt.yml +7 -0
- data/config/locales/sv.yml +109 -152
- data/db/migrate/20210628150825_change_awesome_config_var_type.rb +12 -0
- data/lib/decidim/decidim_awesome/admin_engine.rb +19 -12
- data/lib/decidim/decidim_awesome/awesome.rb +214 -0
- data/lib/decidim/decidim_awesome/awesome_helpers.rb +17 -17
- data/lib/decidim/decidim_awesome/checksums.yml +23 -16
- data/lib/decidim/decidim_awesome/config.rb +55 -9
- data/lib/decidim/decidim_awesome/content_parsers/editor_images_parser.rb +39 -0
- data/lib/decidim/decidim_awesome/context_analyzers/request_analyzer.rb +27 -21
- data/lib/decidim/decidim_awesome/custom_fields.rb +94 -0
- data/lib/decidim/decidim_awesome/engine.rb +42 -14
- data/lib/decidim/decidim_awesome/iframe_component/admin_engine.rb +23 -0
- data/lib/decidim/decidim_awesome/iframe_component/component.rb +6 -6
- data/lib/decidim/decidim_awesome/map_component/admin_engine.rb +23 -0
- data/lib/decidim/decidim_awesome/map_component/component.rb +13 -6
- data/lib/decidim/decidim_awesome/map_component/engine.rb +34 -0
- data/lib/decidim/decidim_awesome/menu_hacker.rb +2 -1
- data/lib/decidim/decidim_awesome/system_checker.rb +1 -1
- data/lib/decidim/decidim_awesome/test/factories.rb +2 -2
- data/lib/decidim/decidim_awesome/test/initializer.rb +25 -0
- data/lib/decidim/decidim_awesome/test/layouts/decidim/_head.html.erb +30 -2
- data/lib/decidim/decidim_awesome/test/layouts/decidim/admin/_header.html.erb +7 -2
- data/lib/decidim/decidim_awesome/test/shared_examples/box_label_editor.rb +116 -0
- data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +18 -0
- data/lib/decidim/decidim_awesome/test/shared_examples/controller_examples.rb +13 -0
- data/lib/decidim/decidim_awesome/test/shared_examples/current_config_examples.rb +143 -0
- data/lib/decidim/decidim_awesome/test/shared_examples/custom_redirects_contexts.rb +47 -0
- data/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb +4 -0
- data/lib/decidim/decidim_awesome/test/shared_examples/menu_hack_contexts.rb +0 -17
- data/lib/decidim/decidim_awesome/test/shared_examples/scoped_admins_examples.rb +420 -0
- data/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +202 -0
- data/lib/decidim/decidim_awesome/version.rb +2 -2
- data/lib/decidim/decidim_awesome.rb +4 -119
- data/lib/tasks/decidim_awesome_active_storage_migrations_tasks.rake +37 -0
- data/lib/tasks/decidim_awesome_webpacker_tasks.rake +62 -0
- metadata +148 -83
- data/app/assets/config/decidim_admin_decidim_awesome_manifest.css +0 -3
- data/app/assets/config/decidim_admin_decidim_awesome_manifest.js +0 -2
- data/app/assets/config/decidim_decidim_awesome_manifest.css +0 -5
- data/app/assets/config/decidim_decidim_awesome_manifest.js +0 -3
- data/app/assets/images/decidim/decidim_awesome/loading.gif +0 -0
- data/app/assets/javascripts/decidim/decidim_awesome/admin/constraints.js.es6 +0 -54
- data/app/assets/javascripts/decidim/decidim_awesome/admin.js +0 -2
- data/app/assets/javascripts/decidim/decidim_awesome/application.js +0 -4
- data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/categories.js.es6 +0 -25
- data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/legacy_map.js.es6 +0 -225
- data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/legacy_proposals.js.es6 +0 -82
- data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/map.js.es6 +0 -215
- data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/meetings.js.es6 +0 -131
- data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/proposals.js.es6 +0 -94
- data/app/assets/javascripts/decidim/decidim_awesome/editors/markdown_view.js.es6 +0 -12
- data/app/assets/javascripts/decidim/decidim_awesome/editors/quill_editor.js.es6 +0 -160
- data/app/assets/javascripts/decidim/decidim_awesome/proposals/images.js.es6 +0 -25
- data/app/assets/stylesheets/decidim/decidim_awesome/admin.scss +0 -49
- data/app/assets/stylesheets/decidim/decidim_awesome/application.scss +0 -8
- data/app/assets/stylesheets/decidim/decidim_awesome/awesome_map/leaflet.scss.erb +0 -9
- data/app/assets/stylesheets/decidim/decidim_awesome/awesome_map/map.scss +0 -66
- data/app/assets/stylesheets/decidim/decidim_awesome/editors/markdown_view.scss +0 -27
- data/app/assets/stylesheets/decidim/decidim_awesome/editors/quill_editor.scss +0 -7
- data/app/awesome_overrides/presenters/decidim/menu_presenter_override.rb +0 -39
- data/app/awesome_overrides/presenters/decidim/proposals/proposal_presenter_override.rb +0 -64
- data/app/controllers/decidim/decidim_awesome/iframe_component/application_controller.rb +0 -15
- data/app/controllers/decidim/decidim_awesome/map_component/application_controller.rb +0 -15
- data/app/views/v0.22/layouts/decidim/admin/_header.html.erb +0 -11
- data/app/views/v0.23/layouts/decidim/admin/_header.html.erb +0 -12
- data/lib/decidim/decidim_awesome/content_renderers/markdown_renderer.rb +0 -18
- data/lib/decidim/decidim_awesome/content_renderers.rb +0 -9
- data/lib/decidim/decidim_awesome/test/themes/css.lvh.me.css +0 -3
- data/lib/decidim/decidim_awesome/test/themes/erb.lvh.me.scss.erb +0 -2
- data/lib/decidim/decidim_awesome/test/themes/scss.lvh.me.scss +0 -1
- data/lib/decidim/decidim_awesome/test/themes/test-theme/body.scss +0 -4
- data/vendor/assets/images/layers-2x.png +0 -0
- data/vendor/assets/images/layers.png +0 -0
- data/vendor/assets/images/marker-icon.png +0 -0
- data/vendor/assets/javascripts/codemirror-4.inline-attachment.js +0 -89
- data/vendor/assets/javascripts/form-storage.js +0 -824
- data/vendor/assets/javascripts/highlight.min.js +0 -44
- data/vendor/assets/javascripts/inline-attachment.js +0 -399
- data/vendor/assets/javascripts/inscrybmde.min.js +0 -7
- data/vendor/assets/javascripts/jquery.inline-attachment.js +0 -66
- data/vendor/assets/javascripts/jsrender.min.js +0 -4
- data/vendor/assets/javascripts/leaflet.featuregroup.subgroup.js +0 -6
- data/vendor/assets/stylesheets/default.min.css +0 -1
- data/vendor/assets/stylesheets/foundation.min.css +0 -1
- data/vendor/assets/stylesheets/github.min.css +0 -2
- data/vendor/assets/stylesheets/inscrybmde.min.css +0 -8
@@ -5,13 +5,23 @@ module Decidim
|
|
5
5
|
module MapHelper
|
6
6
|
include Decidim::MapHelper
|
7
7
|
|
8
|
+
def api_ready?
|
9
|
+
Decidim::Api::Schema.max_complexity >= 1300
|
10
|
+
end
|
11
|
+
|
12
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
13
|
+
# rubocop:disable Metrics/PerceivedComplexity:
|
8
14
|
def awesome_map_for(components, &block)
|
9
|
-
return
|
15
|
+
return unless map_utility_dynamic
|
10
16
|
|
11
|
-
map =
|
12
|
-
|
17
|
+
map = awesome_builder.map_element({ class: "google-map", id: "awesome-map-container" }, &block)
|
18
|
+
help = content_tag(:div, class: "map__help") do
|
19
|
+
sr_content = content_tag(:p, t("screen_reader_explanation", scope: "decidim.map.dynamic"), class: "show-for-sr")
|
20
|
+
|
21
|
+
sr_content
|
22
|
+
end
|
13
23
|
|
14
|
-
|
24
|
+
html_options = {
|
15
25
|
"class" => "awesome-map",
|
16
26
|
"id" => "awesome-map",
|
17
27
|
"data-components" => components.map do |component|
|
@@ -23,69 +33,53 @@ module Decidim
|
|
23
33
|
amendments: component.manifest.name == :proposals ? Decidim::Proposals::Proposal.where(component: component).only_emendations.count : 0
|
24
34
|
}
|
25
35
|
end.to_json,
|
26
|
-
"data-
|
27
|
-
"data-
|
28
|
-
"data-
|
29
|
-
"data-
|
30
|
-
"data-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
class: "google-map",
|
42
|
-
id: "map",
|
43
|
-
"data-components" => components.map do |component|
|
44
|
-
{
|
45
|
-
id: component.id,
|
46
|
-
type: component.manifest.name,
|
47
|
-
name: translated_attribute(component.name),
|
48
|
-
url: Decidim::EngineRouter.main_proxy(component).root_path,
|
49
|
-
amendments: component.manifest.name == :proposals ? Decidim::Proposals::Proposal.where(component: component).only_emendations.count : 0
|
50
|
-
}
|
51
|
-
end.to_json,
|
52
|
-
"data-collapsed" => current_component.settings.collapse,
|
53
|
-
"data-show-not-answered" => current_component.current_settings.show_not_answered,
|
54
|
-
"data-show-accepted" => current_component.current_settings.show_accepted,
|
55
|
-
"data-show-withdrawn" => current_component.current_settings.show_withdrawn,
|
56
|
-
"data-show-evaluating" => current_component.current_settings.show_evaluating,
|
57
|
-
# "data-show-rejected" => current_component.current_settings.show_rejected,
|
58
|
-
"data-markers-data" => [].to_json
|
36
|
+
"data-hide-controls" => settings_source.try(:hide_controls),
|
37
|
+
"data-collapsed" => global_settings.collapse,
|
38
|
+
"data-truncate" => global_settings.truncate || 255,
|
39
|
+
"data-map-center" => global_settings.map_center,
|
40
|
+
"data-map-zoom" => global_settings.map_zoom || 8,
|
41
|
+
"data-menu-merge-components" => global_settings.menu_merge_components,
|
42
|
+
"data-menu-amendments" => global_settings.menu_amendments,
|
43
|
+
"data-menu-meetings" => global_settings.menu_meetings,
|
44
|
+
"data-menu-categories" => global_settings.menu_categories,
|
45
|
+
"data-menu-hashtags" => global_settings.menu_hashtags,
|
46
|
+
"data-show-not-answered" => step_settings&.show_not_answered,
|
47
|
+
"data-show-accepted" => step_settings&.show_accepted,
|
48
|
+
"data-show-withdrawn" => step_settings&.show_withdrawn,
|
49
|
+
"data-show-evaluating" => step_settings&.show_evaluating,
|
50
|
+
"data-show-rejected" => step_settings&.show_rejected
|
59
51
|
}
|
60
52
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
map_html_options["data-here-app-id"] = Decidim.geocoder[:here_app_id]
|
66
|
-
map_html_options["data-here-app-code"] = Decidim.geocoder[:here_app_code]
|
53
|
+
content_tag(:div, html_options) do
|
54
|
+
content_tag :div, class: "row column" do
|
55
|
+
help + map
|
56
|
+
end
|
67
57
|
end
|
58
|
+
end
|
59
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
60
|
+
# rubocop:enable Metrics/PerceivedComplexity:
|
68
61
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
73
|
-
content_tag :div, class: "awesome-map" do
|
74
|
-
map = content_tag(:div, "", map_html_options)
|
62
|
+
def step_settings
|
63
|
+
settings_source.try(:current_settings)
|
64
|
+
end
|
75
65
|
|
76
|
-
|
77
|
-
|
66
|
+
def global_settings
|
67
|
+
settings_source.try(:settings)
|
68
|
+
end
|
69
|
+
|
70
|
+
def settings_source
|
71
|
+
try(:current_component) || self
|
78
72
|
end
|
79
73
|
|
80
74
|
# rubocop:disable Rails/HelperInstanceVariable
|
81
|
-
def current_categories
|
75
|
+
def current_categories(categories)
|
82
76
|
return @current_categories if @current_categories
|
83
77
|
|
84
78
|
@golden_ratio_conjugate = 0.618033988749895
|
85
79
|
# @h = rand # use random start value
|
86
|
-
@h = 0.
|
80
|
+
@h = 0.41
|
87
81
|
@current_categories = []
|
88
|
-
|
82
|
+
categories.first_class.each do |category|
|
89
83
|
append_category category
|
90
84
|
category.subcategories.each do |subcat|
|
91
85
|
append_category subcat
|
@@ -96,11 +90,35 @@ module Decidim
|
|
96
90
|
|
97
91
|
private
|
98
92
|
|
93
|
+
def awesome_builder
|
94
|
+
options = {
|
95
|
+
popup_template_id: "marker-popup",
|
96
|
+
markers: []
|
97
|
+
}
|
98
|
+
builder = map_utility_dynamic.create_builder(self, options)
|
99
|
+
|
100
|
+
# We need awesome map listeners before initialize the official map
|
101
|
+
unless snippets.any?(:awesome_map)
|
102
|
+
snippets.add(:awesome_map, javascript_pack_tag("decidim_decidim_awesome_map", defer: false))
|
103
|
+
snippets.add(:awesome_map, stylesheet_pack_tag("decidim_decidim_awesome_map"))
|
104
|
+
snippets.add(:head, snippets.for(:awesome_map))
|
105
|
+
end
|
106
|
+
|
107
|
+
unless snippets.any?(:map)
|
108
|
+
snippets.add(:map, builder.stylesheet_snippets)
|
109
|
+
snippets.add(:map, builder.javascript_snippets)
|
110
|
+
snippets.add(:head, snippets.for(:map))
|
111
|
+
end
|
112
|
+
|
113
|
+
builder
|
114
|
+
end
|
115
|
+
|
116
|
+
# rubocop:disable Style/FormatStringToken
|
99
117
|
def append_category(category)
|
100
118
|
@h += @golden_ratio_conjugate
|
101
119
|
@h %= 1
|
102
120
|
# r,g,b = hsv_to_rgb(@h, 0.5, 0.95)
|
103
|
-
r, g, b = hsv_to_rgb(@h, 0.99, 0.
|
121
|
+
r, g, b = hsv_to_rgb(@h, 0.99, 0.95)
|
104
122
|
@current_categories.append(
|
105
123
|
id: category.id,
|
106
124
|
name: translated_attribute(category.name),
|
@@ -108,11 +126,12 @@ module Decidim
|
|
108
126
|
color: format("#%02x%02x%02x", r, g, b)
|
109
127
|
)
|
110
128
|
end
|
129
|
+
# rubocop:enable Style/FormatStringToken
|
111
130
|
# rubocop:enable Rails/HelperInstanceVariable
|
112
131
|
|
113
|
-
# rubocop:disable Naming/UncommunicativeMethodParamName
|
114
132
|
# HSV values in [0..1[
|
115
133
|
# returns [r, g, b] values from 0 to 255
|
134
|
+
# rubocop:disable Naming/MethodParameterName
|
116
135
|
def hsv_to_rgb(h, s, v)
|
117
136
|
h_i = (h * 6).to_i
|
118
137
|
f = h * 6 - h_i
|
@@ -151,7 +170,7 @@ module Decidim
|
|
151
170
|
end
|
152
171
|
[(r * 256).to_i, (g * 256).to_i, (b * 256).to_i]
|
153
172
|
end
|
154
|
-
# rubocop:enable Naming/UncommunicativeMethodParamName
|
155
173
|
end
|
174
|
+
# rubocop:enable Naming/MethodParameterName
|
156
175
|
end
|
157
176
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module DecidimAwesome
|
5
|
+
module Proposals
|
6
|
+
module ApplicationHelperOverride
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
alias_method :decidim_text_editor_for_proposal_body, :text_editor_for_proposal_body
|
11
|
+
alias_method :decidim_safe_content?, :safe_content?
|
12
|
+
|
13
|
+
# replace safe content to consider all custom fields save (then embeded html will be rendered)
|
14
|
+
def safe_content?
|
15
|
+
awesome_proposal_custom_fields.present? || decidim_safe_content?
|
16
|
+
end
|
17
|
+
|
18
|
+
# replace normal method to draw the editor
|
19
|
+
def text_editor_for_proposal_body(form)
|
20
|
+
custom_fields = awesome_proposal_custom_fields
|
21
|
+
|
22
|
+
return decidim_text_editor_for_proposal_body(form) if custom_fields.blank?
|
23
|
+
|
24
|
+
render_proposal_custom_fields_override(custom_fields, form, :body)
|
25
|
+
end
|
26
|
+
|
27
|
+
# replace admin method to draw the editor (multi lang)
|
28
|
+
def admin_editor_for_proposal_body(form)
|
29
|
+
custom_fields = awesome_proposal_custom_fields
|
30
|
+
|
31
|
+
return form.translated(:editor, :body, hashtaggable: true) if custom_fields.blank?
|
32
|
+
|
33
|
+
locales = form.send(:locales)
|
34
|
+
|
35
|
+
return render_proposal_custom_fields_override(custom_fields, form, "body_#{locales.first}", locales.first) if locales.length == 1
|
36
|
+
|
37
|
+
tabs_id = form.send(:sanitize_tabs_selector, form.options[:tabs_id] || "#{form.object_name}-body-tabs")
|
38
|
+
|
39
|
+
label_tabs = form.content_tag(:div, class: "label--tabs") do
|
40
|
+
field_label = form.send(:label_i18n, "body", form.label_for("proposal_custom_fields"))
|
41
|
+
|
42
|
+
language_selector = "".html_safe
|
43
|
+
language_selector = form.create_language_selector(locales, tabs_id, "body") if form.options[:label] != false
|
44
|
+
|
45
|
+
safe_join [field_label, language_selector]
|
46
|
+
end
|
47
|
+
|
48
|
+
tabs_content = form.content_tag(:div, class: "tabs-content", data: { tabs_content: tabs_id }) do
|
49
|
+
locales.each_with_index.inject("".html_safe) do |string, (locale, index)|
|
50
|
+
tab_content_id = "#{tabs_id}-body-panel-#{index}"
|
51
|
+
string + content_tag(:div, class: form.send(:tab_element_class_for, "panel", index), id: tab_content_id) do
|
52
|
+
render_proposal_custom_fields_override(custom_fields, form, "body_#{locale}", locale)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
safe_join [label_tabs, tabs_content]
|
58
|
+
end
|
59
|
+
|
60
|
+
def render_proposal_custom_fields_override(fields, form, name, locale = nil)
|
61
|
+
custom_fields = Decidim::DecidimAwesome::CustomFields.new(fields)
|
62
|
+
custom_fields.translate!
|
63
|
+
|
64
|
+
body = if form_presenter.proposal.body.is_a?(Hash) && locale.present?
|
65
|
+
form_presenter.body(extras: false, all_locales: true).with_indifferent_access[locale]
|
66
|
+
else
|
67
|
+
form_presenter.body(extras: false)
|
68
|
+
end
|
69
|
+
|
70
|
+
custom_fields.apply_xml(body) if body.present?
|
71
|
+
form.object.errors.add(name, custom_fields.errors) if custom_fields.errors
|
72
|
+
render partial: "decidim/decidim_awesome/custom_fields/form_render", locals: { spec: custom_fields.to_json, form: form, name: name }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module DecidimAwesome
|
5
|
+
class MigrateLegacyImagesJob < ApplicationJob
|
6
|
+
queue_as :default
|
7
|
+
|
8
|
+
def perform(organization_id, mappings = [], logger = Rails.logger)
|
9
|
+
@organization_id = organization_id
|
10
|
+
@routes_mappings = mappings
|
11
|
+
@logger = logger
|
12
|
+
|
13
|
+
migrate_all!
|
14
|
+
transform_images_urls
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_reader :routes_mappings, :logger
|
20
|
+
|
21
|
+
def migrate_all!
|
22
|
+
Decidim::CarrierWaveMigratorService.migrate_attachment!(
|
23
|
+
klass: Decidim::DecidimAwesome::EditorImage,
|
24
|
+
cw_attribute: "image",
|
25
|
+
cw_uploader: Decidim::Cw::DecidimAwesome::ImageUploader,
|
26
|
+
as_attribute: "file",
|
27
|
+
logger: @logger,
|
28
|
+
routes_mappings: routes_mappings
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
def transform_images_urls
|
33
|
+
mappings = routes_mappings.map do |mapping|
|
34
|
+
klass, id = mapping[:instance].split("#")
|
35
|
+
next unless klass == "Decidim::DecidimAwesome::EditorImage"
|
36
|
+
|
37
|
+
instance = Decidim::DecidimAwesome::EditorImage.find_by(id: id)
|
38
|
+
|
39
|
+
next if instance.blank?
|
40
|
+
|
41
|
+
mapping.merge!(instance: instance)
|
42
|
+
end.compact
|
43
|
+
|
44
|
+
editor_images_available_attributes.each do |model, attributes|
|
45
|
+
model.all.each do |item|
|
46
|
+
attributes.each do |attribute|
|
47
|
+
item.update(attribute => rewrite_value(item.send(attribute), mappings))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
@logger.info "Updated model #{model.name} (attributes: #{attributes.join(", ")})"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def rewrite_value(value, mappings)
|
55
|
+
if value.is_a?(Hash)
|
56
|
+
value.transform_values do |nested_value|
|
57
|
+
rewrite_value(nested_value, mappings)
|
58
|
+
end
|
59
|
+
else
|
60
|
+
parser = Decidim::DecidimAwesome::ContentParsers::EditorImagesParser.new(value, routes_mappings: mappings)
|
61
|
+
parser.rewrite
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def editor_images_available_attributes
|
66
|
+
{
|
67
|
+
"Decidim::Accountability::Result" => %w(description),
|
68
|
+
"Decidim::Proposals::Proposal" => %w(body answer cost_report execution_period),
|
69
|
+
"Decidim::Votings::Voting" => %w(description),
|
70
|
+
"Decidim::Elections::Question" => %w(description),
|
71
|
+
"Decidim::Elections::Answer" => %w(description),
|
72
|
+
"Decidim::Elections::Election" => %w(description),
|
73
|
+
"Decidim::Initiative" => %w(description answer),
|
74
|
+
"Decidim::InitiativesType" => %w(description extra_fields_legal_information),
|
75
|
+
"Decidim::Assembly" => %w(short_description description purpose_of_action composition internal_organisation announcement closing_date_reason special_features),
|
76
|
+
"Decidim::Forms::Questionnaire" => %w(description tos),
|
77
|
+
"Decidim::Forms::Question" => %w(description),
|
78
|
+
"Decidim::Organization" => %w(welcome_notification_body admin_terms_of_use_body description highlighted_content_banner_short_description id_documents_explanation_text),
|
79
|
+
"Decidim::StaticPage" => %w(content),
|
80
|
+
"Decidim::ContextualHelpSection" => %w(content),
|
81
|
+
"Decidim::Category" => %w(description),
|
82
|
+
"Decidim::Blogs::Post" => %w(body),
|
83
|
+
"Decidim::Pages::Page" => %w(body),
|
84
|
+
"Decidim::Sortitions::Sortition" => %w(additional_info witnesses cancel_reason),
|
85
|
+
"Decidim::Consultations::Question" => %w(title question_context what_is_decided instructions),
|
86
|
+
"Decidim::Consultation" => %w(description),
|
87
|
+
"Decidim::Debates::Debate" => %w(description instructions information_updates conclusions),
|
88
|
+
"Decidim::Budgets::Budget" => %w(description),
|
89
|
+
"Decidim::Budgets::Project" => %w(description),
|
90
|
+
"Decidim::ConferenceSpeaker" => %w(short_bio),
|
91
|
+
"Decidim::Conferences::RegistrationType" => %w(description),
|
92
|
+
"Decidim::Conference" => %w(short_description description objectives registration_terms),
|
93
|
+
"Decidim::ParticipatoryProcessGroup" => %w(description),
|
94
|
+
"Decidim::ParticipatoryProcess" => %w(short_description description announcement),
|
95
|
+
"Decidim::ParticipatoryProcessStep" => %w(description),
|
96
|
+
"Decidim::Meetings::AgendaItem" => %w(description),
|
97
|
+
"Decidim::Meetings::Meeting" => %w(registration_terms description registration_email_custom_content closing_report)
|
98
|
+
}.each_with_object({}) do |(main_model, attributes), hash|
|
99
|
+
hash[main_model.constantize] = attributes
|
100
|
+
rescue NameError
|
101
|
+
hash
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module DecidimAwesome
|
5
|
+
# A middleware that stores the current awesome context by parsing the request
|
6
|
+
class CurrentConfig
|
7
|
+
# Initializes the Rack Middleware.
|
8
|
+
#
|
9
|
+
# app - The Rack application
|
10
|
+
def initialize(app)
|
11
|
+
@app = app
|
12
|
+
end
|
13
|
+
|
14
|
+
# Main entry point for a Rack Middleware.
|
15
|
+
#
|
16
|
+
# env - A Hash.
|
17
|
+
def call(env)
|
18
|
+
@request = Rack::Request.new(env)
|
19
|
+
if @request.env["decidim.current_organization"] && processable_path?
|
20
|
+
@config = awesome_config_instance
|
21
|
+
env["decidim_awesome.current_config"] = @config
|
22
|
+
tamper_user_model
|
23
|
+
add_flash_message_from_request(env)
|
24
|
+
|
25
|
+
# puts "requested path: #{env["PATH_INFO"]}"
|
26
|
+
# puts "current_organization: #{@request.env["decidim.current_organization"]&.id}"
|
27
|
+
# puts "potential_admins: #{Decidim::User.awesome_potential_admins}"
|
28
|
+
# puts "scoped admins: #{Decidim::User.awesome_admins_for_current_scope}"
|
29
|
+
else
|
30
|
+
reset_user_model
|
31
|
+
end
|
32
|
+
|
33
|
+
@app.call(env)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# a workaround to set a flash message if comming from the error controller (route not found)
|
39
|
+
def add_flash_message_from_request(env)
|
40
|
+
return unless scoped_admins_active?
|
41
|
+
return unless @request.params.has_key? "unauthorized"
|
42
|
+
|
43
|
+
env["rack.session"]["flash"] = ActionDispatch::Flash::FlashHash.new(alert: I18n.t("decidim.core.actions.unauthorized")).to_session_value
|
44
|
+
end
|
45
|
+
|
46
|
+
def awesome_config_instance
|
47
|
+
@awesome_config_instance = Config.new @request.env["decidim.current_organization"]
|
48
|
+
@awesome_config_instance.context_from_request @request
|
49
|
+
@awesome_config_instance
|
50
|
+
end
|
51
|
+
|
52
|
+
def reset_user_model
|
53
|
+
return unless scoped_admins_active?
|
54
|
+
|
55
|
+
Decidim::User.awesome_potential_admins = []
|
56
|
+
Decidim::User.awesome_admins_for_current_scope = []
|
57
|
+
end
|
58
|
+
|
59
|
+
def tamper_user_model
|
60
|
+
return unless scoped_admins_active?
|
61
|
+
|
62
|
+
Decidim::User.awesome_potential_admins = potential_admins
|
63
|
+
|
64
|
+
Decidim::User.awesome_admins_for_current_scope = if safe_get_route? || safe_post_route?
|
65
|
+
Decidim::User.awesome_potential_admins
|
66
|
+
else
|
67
|
+
valid_admins
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def potential_admins
|
72
|
+
@config.collect_sub_configs_values("scoped_admin") do |subconfig|
|
73
|
+
subconfig&.constraints&.detect { |c| c.settings["participatory_space_manifest"] == "none" } ? false : true
|
74
|
+
end.flatten.uniq.map(&:to_i)
|
75
|
+
end
|
76
|
+
|
77
|
+
def valid_admins
|
78
|
+
@config.collect_sub_configs_values("scoped_admin") do |subconfig|
|
79
|
+
# allow index controllers if scoped to a subspace/component
|
80
|
+
constraints = subconfig&.constraints || []
|
81
|
+
additional_constraints = additional_get_constraints(constraints) + additional_post_constraints(constraints)
|
82
|
+
# inject additional constraints here for further use
|
83
|
+
@config.inject_sub_config_constraints("scoped_admin", subconfig.var[13..], additional_constraints) if subconfig
|
84
|
+
@config.valid_in_context?(constraints + additional_constraints)
|
85
|
+
end.flatten.uniq.map(&:to_i)
|
86
|
+
end
|
87
|
+
|
88
|
+
# avoid unnecessary processing for non-user routes
|
89
|
+
def processable_path?
|
90
|
+
return true if safe_get_route?
|
91
|
+
|
92
|
+
spaces = ContextAnalyzers::RequestAnalyzer.participatory_spaces_routes.keys.join("|^(/admin){0,1}/")
|
93
|
+
case @request.path
|
94
|
+
when %r{"|^(/admin){0,1}/#{spaces}}
|
95
|
+
true
|
96
|
+
when %r{^/admin/}
|
97
|
+
true
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def safe_get_route?
|
102
|
+
return unless @request.get?
|
103
|
+
|
104
|
+
case @request.path
|
105
|
+
when "/"
|
106
|
+
true
|
107
|
+
when "/admin/"
|
108
|
+
true
|
109
|
+
when %r{^/admin/admin_terms}
|
110
|
+
true
|
111
|
+
when %r{^/profiles/|^/notifications/|^/conversations/|^/pages/}
|
112
|
+
true
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def safe_post_route?
|
117
|
+
return unless @request.post? || @request.put? || @request.patch?
|
118
|
+
|
119
|
+
case @request.path
|
120
|
+
when %r{^/admin/admin_terms}
|
121
|
+
true
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
# to access certain deeper routes it requires first to click on a parent route, even without Post permissions in there
|
126
|
+
# this adds this additional routes to these cases
|
127
|
+
# For instance:
|
128
|
+
# accessing /admin/participatory_processes/som-procress requires access first to /admin/participatory_processes
|
129
|
+
def additional_get_constraints(constraints)
|
130
|
+
return [] unless @request.get?
|
131
|
+
|
132
|
+
additions = []
|
133
|
+
constraints.each do |constraint|
|
134
|
+
next if constraint.settings["participatory_space_manifest"].blank?
|
135
|
+
|
136
|
+
# processes groups must give access to processes generic url
|
137
|
+
if constraint.settings["participatory_space_manifest"] == "process_groups"
|
138
|
+
additions << OpenStruct.new(settings: { "participatory_space_manifest" => "participatory_processes", "match" => "exclusive" })
|
139
|
+
end
|
140
|
+
|
141
|
+
# adds a exclusive constraint to the parent participatory space (so index page can be accessed)
|
142
|
+
next unless constraint.settings.size > 1
|
143
|
+
|
144
|
+
additions << OpenStruct.new(settings: {
|
145
|
+
"participatory_space_manifest" => constraint.settings["participatory_space_manifest"],
|
146
|
+
"match" => "exclusive"
|
147
|
+
})
|
148
|
+
end
|
149
|
+
|
150
|
+
additions
|
151
|
+
end
|
152
|
+
|
153
|
+
# adds access to REST routes with id instead of the slug ot allow editing
|
154
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
155
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
156
|
+
def additional_post_constraints(constraints)
|
157
|
+
return [] unless @request.post? || @request.patch?
|
158
|
+
|
159
|
+
constraints.filter_map do |constraint|
|
160
|
+
settings = constraint.settings.dup
|
161
|
+
next unless settings["participatory_space_manifest"].present? && settings["participatory_space_slug"].present?
|
162
|
+
|
163
|
+
# replicate the constraint with the id of the participatory space
|
164
|
+
manifest = Decidim.participatory_space_manifests.find { |s| s.name.to_s == settings["participatory_space_manifest"] }
|
165
|
+
next unless manifest
|
166
|
+
|
167
|
+
model = manifest.model_class_name.try(:constantize)
|
168
|
+
next unless model
|
169
|
+
|
170
|
+
settings["participatory_space_slug"] = model.find_by(slug: settings["participatory_space_slug"])&.id
|
171
|
+
OpenStruct.new(settings: settings) if settings["participatory_space_slug"]
|
172
|
+
end
|
173
|
+
end
|
174
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
175
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
176
|
+
|
177
|
+
def scoped_admins_active?
|
178
|
+
Decidim::User.respond_to?(:awesome_admins_for_current_scope) && Decidim::User.respond_to?(:awesome_potential_admins)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
@@ -15,9 +15,24 @@ module Decidim
|
|
15
15
|
validates :organization, presence: true
|
16
16
|
validates :var, uniqueness: { scope: :decidim_organization_id }
|
17
17
|
|
18
|
+
def additional_constraints
|
19
|
+
@additional_constraints ||= []
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_constraints(constraints)
|
23
|
+
return if constraints.blank?
|
24
|
+
|
25
|
+
additional_constraints.concat(constraints.respond_to?(:each) ? constraints : [constraints])
|
26
|
+
end
|
27
|
+
|
18
28
|
def self.for_organization(organization)
|
19
29
|
where(organization: organization)
|
20
30
|
end
|
31
|
+
|
32
|
+
# use this instead of "constraints" to evaluate dynamically added constants
|
33
|
+
def all_constraints
|
34
|
+
constraints + additional_constraints
|
35
|
+
end
|
21
36
|
end
|
22
37
|
end
|
23
38
|
end
|
@@ -3,6 +3,8 @@
|
|
3
3
|
module Decidim
|
4
4
|
module DecidimAwesome
|
5
5
|
class EditorImage < ApplicationRecord
|
6
|
+
include Decidim::HasUploadValidations
|
7
|
+
|
6
8
|
self.table_name = "decidim_awesome_editor_images"
|
7
9
|
|
8
10
|
belongs_to :author, foreign_key: :decidim_author_id, class_name: "Decidim::User"
|
@@ -11,15 +13,8 @@ module Decidim
|
|
11
13
|
validates :organization, presence: true
|
12
14
|
validates :author, presence: true
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
-
# file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } },
|
17
|
-
# file_content_type: { allow: ["image/jpeg", "image/png"] }
|
18
|
-
|
19
|
-
mount_uploader :image, Decidim::DecidimAwesome::ImageUploader
|
20
|
-
|
21
|
-
delegate :url, to: :image
|
22
|
-
delegate :thumbnail, to: :image
|
16
|
+
has_one_attached :file
|
17
|
+
validates_upload :file, uploader: Decidim::DecidimAwesome::ImageUploader
|
23
18
|
end
|
24
19
|
end
|
25
20
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module DecidimAwesome
|
5
|
+
module UserOverride
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
class << self
|
10
|
+
attr_accessor :awesome_admins_for_current_scope, :awesome_potential_admins
|
11
|
+
end
|
12
|
+
|
13
|
+
def admin
|
14
|
+
return self["admin"] if self["admin"]
|
15
|
+
|
16
|
+
Decidim::User.awesome_admins_for_current_scope&.include?(id)
|
17
|
+
end
|
18
|
+
|
19
|
+
def admin?
|
20
|
+
admin.present?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
@import "stylesheets/decidim/decidim_awesome/awesome_admin";
|
@@ -0,0 +1 @@
|
|
1
|
+
@import "stylesheets/decidim/decidim_awesome/awesome_application";
|
@@ -0,0 +1 @@
|
|
1
|
+
import "src/decidim/decidim_awesome/admin/form_exit_warn"
|
@@ -0,0 +1 @@
|
|
1
|
+
import "src/decidim/decidim_awesome/proposals/custom_fields"
|