decidim-decidim_awesome 0.8.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +363 -0
- data/README.md +375 -100
- data/Rakefile +2 -1
- data/app/cells/concerns/decidim/decidim_awesome/global_menu_cell_override.rb +20 -0
- data/app/cells/concerns/decidim/decidim_awesome/proposal_l_cell_override.rb +26 -0
- data/app/cells/decidim/decidim_awesome/content_blocks/map/show.erb +5 -12
- data/app/cells/decidim/decidim_awesome/content_blocks/map_cell.rb +7 -7
- data/app/cells/decidim/decidim_awesome/voting/proposal_metadata_cell.rb +69 -0
- data/app/cells/decidim/decidim_awesome/voting/voting_cards_base_cell.rb +40 -0
- data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/modal.erb +18 -0
- data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/show.erb +40 -0
- data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/vote_block_for.erb +16 -0
- data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal_cell.rb +90 -0
- data/app/commands/concerns/decidim/decidim_awesome/admin/needs_constraint_helpers.rb +2 -2
- data/app/commands/concerns/decidim/decidim_awesome/proposals/admin/update_proposal_override.rb +31 -0
- data/app/commands/concerns/decidim/decidim_awesome/proposals/create_collaborative_draft_override.rb +27 -0
- data/app/commands/concerns/decidim/decidim_awesome/proposals/create_proposal_override.rb +27 -0
- data/app/commands/concerns/decidim/decidim_awesome/proposals/update_collaborative_draft_override.rb +27 -0
- data/app/commands/concerns/decidim/decidim_awesome/proposals/update_proposal_override.rb +26 -0
- data/app/commands/concerns/decidim/decidim_awesome/system/create_organization_override.rb +29 -0
- data/app/commands/concerns/decidim/decidim_awesome/system/update_organization_override.rb +35 -0
- data/app/commands/concerns/decidim/decidim_awesome/update_account_override.rb +30 -0
- data/app/commands/decidim/decidim_awesome/admin/create_constraint.rb +3 -3
- data/app/commands/decidim/decidim_awesome/admin/create_custom_redirect.rb +1 -1
- data/app/commands/decidim/decidim_awesome/admin/create_menu_hack.rb +1 -1
- data/app/commands/decidim/decidim_awesome/admin/create_proposal_custom_field.rb +5 -4
- data/app/commands/decidim/decidim_awesome/admin/create_scoped_admin.rb +1 -1
- data/app/commands/decidim/decidim_awesome/admin/create_scoped_style.rb +4 -3
- data/app/commands/decidim/decidim_awesome/admin/destroy_constraint.rb +1 -1
- data/app/commands/decidim/decidim_awesome/admin/destroy_custom_redirect.rb +2 -2
- data/app/commands/decidim/decidim_awesome/admin/destroy_menu_hack.rb +2 -2
- data/app/commands/decidim/decidim_awesome/admin/destroy_proposal_custom_field.rb +7 -4
- data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_admin.rb +1 -1
- data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_style.rb +7 -5
- data/app/commands/decidim/decidim_awesome/admin/rename_scope_label.rb +2 -2
- data/app/commands/decidim/decidim_awesome/admin/update_config.rb +2 -3
- data/app/commands/decidim/decidim_awesome/admin/update_constraint.rb +3 -3
- data/app/commands/decidim/decidim_awesome/admin/update_custom_redirect.rb +3 -3
- data/app/commands/decidim/decidim_awesome/admin/update_menu_hack.rb +1 -1
- data/app/commands/decidim/decidim_awesome/command.rb +8 -0
- data/app/commands/decidim/decidim_awesome/create_editor_image.rb +2 -2
- data/app/controllers/concerns/decidim/decidim_awesome/admin/maintenance_context.rb +43 -0
- data/app/controllers/concerns/decidim/decidim_awesome/admin_accountability/admin/filterable.rb +67 -0
- data/app/controllers/concerns/decidim/decidim_awesome/admin_accountability/admin/filterable_helper.rb +38 -0
- data/app/controllers/concerns/decidim/decidim_awesome/check_login_authorizations.rb +60 -0
- data/app/controllers/concerns/decidim/decidim_awesome/content_security_policy.rb +34 -0
- data/app/controllers/concerns/decidim/decidim_awesome/limit_pending_amendments.rb +35 -0
- data/app/controllers/concerns/decidim/decidim_awesome/needs_awesome_config.rb +0 -2
- data/app/controllers/concerns/decidim/decidim_awesome/not_found_redirect.rb +3 -3
- data/app/controllers/concerns/decidim/decidim_awesome/proposals/memoize_extra_fields.rb +23 -0
- data/app/controllers/concerns/decidim/decidim_awesome/proposals/orderable_override.rb +94 -0
- data/app/controllers/concerns/decidim/decidim_awesome/proposals/proposal_votes_controller_override.rb +64 -0
- data/app/controllers/concerns/decidim/decidim_awesome/use_user_time_zone.rb +32 -0
- data/app/controllers/decidim/decidim_awesome/admin/admin_accountability_controller.rb +72 -0
- data/app/controllers/decidim/decidim_awesome/admin/admin_authorizations_controller.rb +122 -0
- data/app/controllers/decidim/decidim_awesome/admin/application_controller.rb +2 -0
- data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +21 -17
- data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +17 -8
- data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +27 -20
- data/app/controllers/decidim/decidim_awesome/admin/custom_redirects_controller.rb +6 -8
- data/app/controllers/decidim/decidim_awesome/admin/maintenance_controller.rb +76 -0
- data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +6 -8
- data/app/controllers/decidim/decidim_awesome/admin/proposal_custom_fields_controller.rb +14 -6
- data/app/controllers/decidim/decidim_awesome/admin/scoped_admins_controller.rb +2 -2
- data/app/controllers/decidim/decidim_awesome/admin/scoped_styles_controller.rb +14 -6
- data/app/controllers/decidim/decidim_awesome/blank_component_controller.rb +8 -3
- data/app/controllers/decidim/decidim_awesome/editor_images_controller.rb +3 -5
- data/app/controllers/decidim/decidim_awesome/iframe_component/iframe_controller.rb +18 -5
- data/app/controllers/decidim/decidim_awesome/required_authorizations_controller.rb +58 -0
- data/app/forms/concerns/decidim/decidim_awesome/account_form_override.rb +25 -0
- data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_customizations.rb +57 -0
- data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb +21 -0
- data/app/forms/concerns/decidim/decidim_awesome/system/organization_form_override.rb +34 -0
- data/app/forms/decidim/decidim_awesome/admin/config_form.rb +88 -20
- data/app/forms/decidim/decidim_awesome/admin/custom_redirect_form.rb +3 -3
- data/app/forms/decidim/decidim_awesome/admin/intergram_form.rb +4 -0
- data/app/forms/decidim/decidim_awesome/admin/menu_form.rb +5 -5
- data/app/helpers/concerns/decidim/decidim_awesome/amendments_helper_override.rb +65 -0
- data/app/helpers/concerns/decidim/decidim_awesome/breadcrumb_helper_override.rb +23 -0
- data/app/helpers/concerns/decidim/decidim_awesome/proposals/application_helper_override.rb +110 -0
- data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +12 -29
- data/app/helpers/decidim/decidim_awesome/admin/system_checker_helpers.rb +4 -0
- data/app/helpers/decidim/decidim_awesome/map_helper.rb +38 -52
- data/app/jobs/decidim/decidim_awesome/destroy_private_data_job.rb +22 -0
- data/app/jobs/decidim/decidim_awesome/export_admin_actions_job.rb +28 -0
- data/app/models/concerns/decidim/decidim_awesome/has_proposal_extra_fields.rb +80 -0
- data/app/models/concerns/decidim/decidim_awesome/has_vote_weight.rb +30 -0
- data/app/models/decidim/decidim_awesome/awesome_config.rb +1 -2
- data/app/models/decidim/decidim_awesome/config_constraint.rb +0 -2
- data/app/models/decidim/decidim_awesome/editor_image.rb +0 -3
- data/app/models/decidim/decidim_awesome/paper_trail_version.rb +117 -0
- data/app/models/decidim/decidim_awesome/proposal_extra_field.rb +45 -0
- data/app/models/decidim/decidim_awesome/vote_weight.rb +30 -0
- data/app/overrides/decidim/account/show/add_timezone_select.html.erb.deface +3 -0
- data/app/overrides/decidim/admin/officializations/index/add_modal.html.erb.deface +3 -0
- data/app/overrides/decidim/admin/officializations/index/add_td.html.erb.deface +5 -0
- data/app/overrides/decidim/admin/officializations/index/add_th.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/admin/proposals/_form/replace_editor.html.erb.deface +3 -0
- data/app/overrides/decidim/proposals/admin/proposals/show/add_private_body.html.erb.deface +7 -0
- data/app/overrides/decidim/proposals/admin/proposals/show/replace_body.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/proposals/_proposal_aside/limit_amendments_modal.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/proposals/_vote_button/replace_vote_button.html.erb.deface +7 -0
- data/app/overrides/decidim/proposals/proposals/_votes_count/replace_counter.html.erb.deface +10 -0
- data/app/overrides/decidim/system/organizations/_advanced_settings/add_awesome_config.html.erb.deface +9 -0
- data/app/{views/layouts/decidim/_head.html.erb → overrides/layouts/decidim/_decidim_javascript/add_awesome_tags.html.erb.deface} +2 -1
- data/app/overrides/layouts/decidim/_head/add_awesome_tags.html.erb.deface +7 -0
- data/app/overrides/layouts/decidim/admin/_header/add_awesome_custom_styles.html.erb.deface +3 -0
- data/app/overrides/layouts/decidim/admin/_header/add_awesome_tags.html.erb.deface +10 -0
- data/app/packs/entrypoints/decidim_admin_decidim_awesome.js +2 -2
- data/app/packs/entrypoints/decidim_admin_decidim_awesome_global.js +4 -0
- data/app/packs/entrypoints/decidim_admin_decidim_awesome_global.scss +1 -0
- data/app/packs/entrypoints/decidim_admin_decidim_awesome_search_form.scss +1 -0
- data/app/packs/entrypoints/decidim_decidim_awesome.js +2 -2
- data/app/packs/entrypoints/decidim_decidim_awesome_map.scss +1 -1
- data/app/packs/entrypoints/decidim_editor.js +14 -0
- data/app/packs/images/decidim/decidim_awesome/handcard.svg +14 -0
- data/app/packs/images/decidim/decidim_awesome/handcheck.svg +17 -0
- data/app/packs/images/decidim/decidim_awesome/pokecode-logo.png +0 -0
- data/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js +96 -69
- data/app/packs/src/decidim/decidim_awesome/admin/check_redirections.js +46 -41
- data/app/packs/src/decidim/decidim_awesome/admin/codemirror.js +3 -3
- data/app/packs/src/decidim/decidim_awesome/admin/constraint_form_events.js +115 -0
- data/app/packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js +19 -14
- data/app/packs/src/decidim/decidim_awesome/admin/form_exit_warn.js +23 -11
- data/app/packs/src/decidim/decidim_awesome/admin/proposal_sortings.js +26 -0
- data/app/packs/src/decidim/decidim_awesome/admin/tabs_change.js +31 -0
- data/app/packs/src/decidim/decidim_awesome/admin/user_picker.js +34 -20
- data/app/packs/src/decidim/decidim_awesome/admin/verification_selects.js +21 -0
- data/app/packs/src/decidim/decidim_awesome/admin/verifications.js +43 -0
- data/app/packs/src/decidim/decidim_awesome/amendments/show_modal_on_limits.js +28 -0
- data/app/packs/src/decidim/decidim_awesome/awesome_admin.js +7 -16
- data/app/packs/src/decidim/decidim_awesome/awesome_admin_global.js +2 -0
- data/app/packs/src/decidim/decidim_awesome/awesome_application.js +2 -15
- data/app/packs/src/decidim/decidim_awesome/awesome_map/api/fetcher.js +48 -23
- data/app/packs/src/decidim/decidim_awesome/awesome_map/api/meetings_fetcher.js +9 -12
- data/app/packs/src/decidim/decidim_awesome/awesome_map/api/proposals_fetcher.js +28 -0
- data/app/packs/src/decidim/decidim_awesome/awesome_map/awesome_map.js +15 -15
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/controller.js +70 -37
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/meetings_controller.js +11 -7
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/proposals_controller.js +9 -16
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controls_ui.js +75 -45
- data/app/packs/src/decidim/decidim_awesome/awesome_map/load_map.js +28 -18
- data/app/packs/src/decidim/decidim_awesome/editor/index.js +94 -0
- data/app/packs/src/decidim/decidim_awesome/forms/autosave.js +29 -28
- data/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js +55 -42
- data/app/packs/src/decidim/decidim_awesome/forms/rich_text_plugin.js +30 -32
- data/app/packs/src/decidim/decidim_awesome/proposals/custom_fields.js +32 -16
- data/app/packs/src/decidim/decidim_awesome/proposals/images.js +16 -10
- data/app/packs/src/decidim/decidim_awesome/voting/voting_cards.js +72 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/admin_accountability.scss +67 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/auto_edits.scss +11 -12
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/check_redirections.scss +15 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/codemirror.scss +24 -12
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/constraints.scss +49 -29
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/custom_fields.scss +28 -71
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/custom_styles.scss +48 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/intergram_fixes.scss +11 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/user_picker.scss +17 -26
- data/app/packs/stylesheets/decidim/decidim_awesome/admin/verifications.scss +99 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/amendments/modal.scss +5 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/awesome_admin.scss +14 -49
- data/app/packs/stylesheets/decidim/decidim_awesome/awesome_admin_global.scss +20 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/awesome_application.scss +4 -18
- data/app/packs/stylesheets/decidim/decidim_awesome/awesome_iframe/iframe.scss +1 -1
- data/app/packs/stylesheets/decidim/decidim_awesome/awesome_map/map.scss +41 -35
- data/app/packs/stylesheets/decidim/decidim_awesome/forms/autosave.scss +6 -6
- data/app/packs/stylesheets/decidim/decidim_awesome/forms/custom_fields.scss +118 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/shared/spinner.scss +26 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/voting/voting_cards.scss +205 -0
- data/app/permissions/decidim/decidim_awesome/admin/permissions.rb +57 -1
- data/app/permissions/decidim/decidim_awesome/permissions.rb +11 -6
- data/app/presenters/concerns/decidim/decidim_awesome/breadcrumb_root_menu_item_presenter_override.rb +23 -0
- data/app/presenters/{decidim → concerns/decidim}/decidim_awesome/menu_item_presenter_override.rb +10 -2
- data/app/presenters/{decidim → concerns/decidim}/decidim_awesome/menu_presenter_override.rb +8 -0
- data/app/presenters/concerns/decidim/decidim_awesome/proposals/proposal_presenter_override.rb +20 -0
- data/app/presenters/decidim/decidim_awesome/admin_log/component_presenter_override.rb +28 -0
- data/app/presenters/decidim/decidim_awesome/admin_log/user_presenter_override.rb +46 -0
- data/app/presenters/decidim/decidim_awesome/paper_trail_base_presenter.rb +28 -0
- data/app/presenters/decidim/decidim_awesome/participatory_space_role_presenter.rb +45 -0
- data/app/presenters/decidim/decidim_awesome/private_data_presenter.rb +70 -0
- data/app/presenters/decidim/decidim_awesome/role_base_presenter.rb +102 -0
- data/app/presenters/decidim/decidim_awesome/user_entity_presenter.rb +50 -0
- data/app/queries/decidim/decidim_awesome/private_data_finder.rb +19 -0
- data/app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_methods.rb +72 -0
- data/app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_override.rb +38 -0
- data/app/serializers/decidim/decidim_awesome/paper_trail_version_serializer.rb +37 -0
- data/app/serializers/decidim/decidim_awesome/proposals/private_proposal_serializer.rb +34 -0
- data/app/types/concerns/decidim/decidim_awesome/add_proposal_type_custom_fields.rb +59 -0
- data/app/types/concerns/decidim/decidim_awesome/add_proposal_type_vote_weights.rb +20 -0
- data/app/uploaders/decidim/decidim_awesome/image_uploader.rb +12 -0
- data/app/validators/concerns/decidim/decidim_awesome/etiquette_validator_override.rb +41 -0
- data/app/views/decidim/decidim_awesome/account/_timezone_select.html.erb +3 -0
- data/app/views/decidim/decidim_awesome/admin/admin_accountability/index.html.erb +71 -0
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/authorization.html.erb +20 -0
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/callout.html.erb +3 -0
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/conflict.html.erb +5 -0
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/edit.html.erb +41 -0
- data/app/views/decidim/decidim_awesome/admin/checks/_assets_tester.html.erb +2 -0
- data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +51 -48
- data/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb +7 -2
- data/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb +25 -18
- data/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb +7 -6
- data/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb +12 -16
- data/app/views/decidim/decidim_awesome/admin/config/_form_livechat.html.erb +39 -23
- data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb +35 -17
- data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_private_custom_fields.html.erb +1 -0
- data/app/views/decidim/decidim_awesome/admin/config/_form_proposals.html.erb +92 -6
- data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_admin_styles.html.erb +1 -0
- data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_styles.html.erb +48 -0
- data/app/views/decidim/decidim_awesome/admin/config/_form_surveys.html.erb +16 -6
- data/app/views/decidim/decidim_awesome/admin/config/_form_verifications.html.erb +15 -0
- data/app/views/decidim/decidim_awesome/admin/config/show.html.erb +22 -12
- data/app/views/decidim/decidim_awesome/admin/constraints/_form.html.erb +1 -49
- data/app/views/decidim/decidim_awesome/admin/constraints/new.html.erb +14 -9
- data/app/views/decidim/decidim_awesome/admin/constraints/no_permissions.html.erb +6 -0
- data/app/views/decidim/decidim_awesome/admin/constraints/show.html.erb +14 -9
- data/app/views/decidim/decidim_awesome/admin/custom_redirects/_form.html.erb +20 -5
- data/app/views/decidim/decidim_awesome/admin/custom_redirects/edit.html.erb +5 -5
- data/app/views/decidim/decidim_awesome/admin/custom_redirects/index.html.erb +14 -13
- data/app/views/decidim/decidim_awesome/admin/custom_redirects/new.html.erb +5 -5
- data/app/views/decidim/decidim_awesome/admin/maintenance/_private_data.html.erb +44 -0
- data/app/views/decidim/decidim_awesome/admin/maintenance/show.html.erb +44 -0
- data/app/views/decidim/decidim_awesome/admin/menu_hacks/_form.html.erb +6 -6
- data/app/views/decidim/decidim_awesome/admin/menu_hacks/edit.html.erb +21 -12
- data/app/views/decidim/decidim_awesome/admin/menu_hacks/index.html.erb +39 -42
- data/app/views/decidim/decidim_awesome/admin/menu_hacks/new.html.erb +21 -12
- data/app/views/decidim/decidim_awesome/admin/officializations/_participants_td.html.erb +25 -0
- data/app/views/decidim/decidim_awesome/admin/officializations/_participants_th.html.erb +1 -0
- data/app/views/decidim/decidim_awesome/admin/officializations/_verification_modal.html.erb +9 -0
- data/app/views/decidim/decidim_awesome/admin/proposals/_editor.html.erb +8 -5
- data/app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb +20 -0
- data/app/views/decidim/decidim_awesome/admin/shared/_filters_with_date.html.erb +61 -0
- data/app/views/decidim/decidim_awesome/amendments/_modal.html.erb +23 -0
- data/app/views/decidim/decidim_awesome/custom_fields/_form_render.html.erb +8 -2
- data/app/views/decidim/decidim_awesome/iframe_component/iframe/show.html.erb +7 -12
- data/app/views/decidim/decidim_awesome/map_component/map/_map_template.html.erb +53 -37
- data/app/views/decidim/decidim_awesome/map_component/map/show.html.erb +14 -5
- data/app/views/decidim/decidim_awesome/required_authorizations/index.html.erb +66 -0
- data/app/views/decidim/decidim_awesome/system/organizations/_admin_allowed_authorizations.html.erb +5 -0
- data/app/views/decidim/decidim_awesome/voting/voting_cards/_show_vote_button.html.erb +3 -0
- data/app/views/decidim/decidim_awesome/voting/voting_cards/_show_votes_count.html.erb +1 -0
- data/app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb +11 -8
- data/app/views/layouts/decidim/decidim_awesome/_custom_styles.html.erb +1 -1
- data/app/views/layouts/decidim/decidim_awesome/_intergram_widget.html.erb +9 -6
- data/app/views/layouts/decidim/decidim_awesome/admin/_base.html.erb +12 -0
- data/app/views/layouts/decidim/decidim_awesome/admin/_custom_styles.html.erb +3 -0
- data/app/views/layouts/decidim/decidim_awesome/admin/admin_authorizations.html.erb +7 -0
- data/app/views/layouts/decidim/decidim_awesome/admin/application.html.erb +3 -0
- data/app/views/layouts/decidim/decidim_awesome/admin/maintenance.html.erb +19 -0
- data/config/assets.rb +5 -34
- data/config/i18n-tasks.yml +30 -0
- data/config/locales/ca.yml +335 -26
- data/config/locales/cs.yml +331 -22
- data/config/locales/de.yml +642 -0
- data/config/locales/en.yml +403 -33
- data/config/locales/es.yml +333 -24
- data/config/locales/eu.yml +623 -20
- data/config/locales/fr.yml +282 -23
- data/config/locales/hu.yml +268 -0
- data/config/locales/it.yml +155 -24
- data/config/locales/ja.yml +334 -25
- data/config/locales/lt.yml +94 -0
- data/config/locales/nl.yml +20 -19
- data/config/locales/pt-BR.yml +31 -24
- data/config/locales/ro-RO.yml +152 -0
- data/config/locales/sv.yml +28 -12
- data/config/rubocop/disabled.yml +11 -0
- data/config/rubocop/faker.yml +480 -0
- data/config/rubocop/rails.yml +88 -0
- data/config/rubocop/rspec.yml +65 -0
- data/config/rubocop/ruby.yml +1210 -0
- data/db/migrate/20231006113837_create_decidim_awesome_vote_weights.rb +13 -0
- data/db/migrate/20231006113841_create_decidim_awesome_proposal_extra_fields.rb +14 -0
- data/db/migrate/20240306175331_rename_editor_images_awesome_config.rb +18 -0
- data/db/migrate/20240531224204_add_decidim_awesome_proposal_private_fields.rb +29 -0
- data/db/migrate/20240729164227_add_decidim_awesome_proposal_private_fields_date.rb +20 -0
- data/db/seeds.rb +4 -4
- data/lib/decidim/decidim_awesome/admin_engine.rb +41 -6
- data/lib/decidim/decidim_awesome/api/types/localized_custom_fields_type.rb +22 -0
- data/lib/decidim/decidim_awesome/api/types/translated_custom_fields_type.rb +51 -0
- data/lib/decidim/decidim_awesome/authorizator.rb +34 -0
- data/lib/decidim/decidim_awesome/awesome.rb +236 -29
- data/lib/decidim/decidim_awesome/awesome_helpers.rb +57 -17
- data/lib/decidim/decidim_awesome/checksums.yml +95 -20
- data/lib/decidim/decidim_awesome/config.rb +25 -17
- data/lib/decidim/decidim_awesome/context_analyzers/request_analyzer.rb +3 -3
- data/lib/decidim/decidim_awesome/custom_fields.rb +13 -5
- data/lib/decidim/decidim_awesome/engine.rb +250 -19
- data/lib/decidim/decidim_awesome/iframe_component/component.rb +4 -4
- data/lib/decidim/decidim_awesome/lock.rb +47 -0
- data/lib/decidim/decidim_awesome/map_component/component.rb +2 -2
- data/lib/decidim/decidim_awesome/menu.rb +201 -0
- data/lib/decidim/decidim_awesome/menu_hacker.rb +7 -5
- data/{app/middleware/decidim/decidim_awesome → lib/decidim/decidim_awesome/middleware}/current_config.rb +5 -3
- data/lib/decidim/decidim_awesome/request_memoizer.rb +16 -0
- data/lib/decidim/decidim_awesome/system_checker.rb +6 -2
- data/lib/decidim/decidim_awesome/test/factories.rb +31 -9
- data/lib/decidim/decidim_awesome/test/initializer.rb +22 -6
- data/lib/decidim/decidim_awesome/test/layouts/decidim/_head.html.erb +2 -2
- data/lib/decidim/decidim_awesome/test/layouts/decidim/admin/_header.html.erb +2 -2
- data/lib/decidim/decidim_awesome/test/shared_examples/action_log_presenter_examples.rb +61 -0
- data/lib/decidim/decidim_awesome/test/shared_examples/{box_label_editor.rb → box_label_editor_examples.rb} +22 -22
- data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +24 -6
- data/lib/decidim/decidim_awesome/test/shared_examples/custom_fields_examples.rb +155 -0
- data/lib/decidim/decidim_awesome/test/shared_examples/custom_redirects_contexts.rb +7 -7
- data/lib/decidim/decidim_awesome/test/shared_examples/custom_styles_examples.rb +156 -0
- data/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb +42 -58
- data/lib/decidim/decidim_awesome/test/shared_examples/menu_hack_contexts.rb +9 -8
- data/lib/decidim/decidim_awesome/test/shared_examples/scoped_admins_examples.rb +40 -29
- data/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +129 -38
- data/lib/decidim/decidim_awesome/version.rb +2 -2
- data/lib/decidim/decidim_awesome/voting_manifest.rb +55 -0
- data/lib/decidim/decidim_awesome.rb +1 -3
- data/lib/tasks/decidim_awesome_upgrade_tasks.rake +9 -0
- data/lib/tasks/decidim_awesome_webpacker_tasks.rake +2 -0
- data/package.json +54 -0
- metadata +192 -86
- data/app/forms/decidim/decidim_awesome/proposals/proposal_wizard_create_step_form_override.rb +0 -38
- data/app/helpers/decidim/decidim_awesome/amendments_helper_override.rb +0 -48
- data/app/helpers/decidim/decidim_awesome/proposals/application_helper_override.rb +0 -78
- data/app/jobs/decidim/decidim_awesome/migrate_legacy_images_job.rb +0 -106
- data/app/packs/entrypoints/decidim_admin_decidim_awesome_custom_fields.js +0 -2
- data/app/packs/entrypoints/decidim_decidim_awesome_admin_form_exit_warn.js +0 -1
- data/app/packs/images/decidim/decidim_awesome/platoniq-logo.png +0 -0
- data/app/packs/src/decidim/decidim_awesome/admin/constraints.js +0 -55
- data/app/packs/src/decidim/decidim_awesome/editors/editor.js +0 -190
- data/app/packs/src/decidim/decidim_awesome/editors/tabs_focus.js +0 -22
- data/app/packs/src/vendor/image-resize.min.js +0 -1
- data/app/packs/src/vendor/image-upload.min.js +0 -6
- data/app/packs/src/vendor/leaflet.featuregroup.subgroup.js +0 -184
- data/app/packs/stylesheets/decidim/decidim_awesome/editors/markdown_editor.scss +0 -19
- data/app/packs/stylesheets/decidim/decidim_awesome/editors/quill_editor.scss +0 -58
- data/app/packs/stylesheets/vendor/select2-foundation-theme.scss +0 -348
- data/app/uploaders/decidim/cw/decidim_awesome/image_uploader.rb +0 -26
- data/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb +0 -26
- data/app/views/decidim/decidim_awesome/admin/config/_modal.html.erb +0 -11
- data/app/views/decidim/proposals/admin/proposals/_form.html.erb +0 -101
- data/app/views/decidim/proposals/collaborative_drafts/_edit_form_fields.html.erb +0 -83
- data/app/views/decidim/proposals/collaborative_drafts/show.html.erb +0 -1
- data/app/views/layouts/decidim/admin/_header.html.erb +0 -5
- data/app/views/layouts/decidim/admin/decidim_awesome.html.erb +0 -75
- data/app/views/v0.25/decidim/proposals/collaborative_drafts/_show.html.erb +0 -128
- data/app/views/v0.25/layouts/decidim/_head.html.erb +0 -41
- data/app/views/v0.25/layouts/decidim/admin/_header.html.erb +0 -11
- data/app/views/v0.26/decidim/proposals/collaborative_drafts/_show.html.erb +0 -128
- data/app/views/v0.26/layouts/decidim/_head.html.erb +0 -45
- data/app/views/v0.26/layouts/decidim/admin/_header.html.erb +0 -11
- data/lib/decidim/decidim_awesome/content_parsers/editor_images_parser.rb +0 -39
- data/lib/tasks/decidim_awesome_active_storage_migrations_tasks.rake +0 -37
- /data/app/models/{decidim → concerns/decidim}/decidim_awesome/user_override.rb +0 -0
@@ -3,14 +3,15 @@
|
|
3
3
|
module Decidim
|
4
4
|
module DecidimAwesome
|
5
5
|
module Admin
|
6
|
-
class CreateProposalCustomField <
|
6
|
+
class CreateProposalCustomField < Command
|
7
7
|
include NeedsConstraintHelpers
|
8
8
|
|
9
9
|
# Public: Initializes the command.
|
10
10
|
#
|
11
|
-
def initialize(organization)
|
11
|
+
def initialize(organization, config_var = :proposal_custom_fields)
|
12
12
|
@organization = organization
|
13
13
|
@ident = rand(36**8).to_s(36)
|
14
|
+
@config_var = config_var
|
14
15
|
end
|
15
16
|
|
16
17
|
# Executes the command. Broadcasts these events:
|
@@ -20,13 +21,13 @@ module Decidim
|
|
20
21
|
#
|
21
22
|
# Returns nothing.
|
22
23
|
def call
|
23
|
-
fields = AwesomeConfig.find_or_initialize_by(var:
|
24
|
+
fields = AwesomeConfig.find_or_initialize_by(var: @config_var, organization: @organization)
|
24
25
|
fields.value = {} unless fields.value.is_a? Hash
|
25
26
|
# TODO: prevent (unlikely) colisions with exisiting values
|
26
27
|
fields.value[@ident] = default_definition
|
27
28
|
fields.save!
|
28
29
|
|
29
|
-
create_constraint_never(:proposal_custom_field)
|
30
|
+
create_constraint_never(@config_var == :proposal_custom_fields ? :proposal_custom_field : :proposal_private_custom_field)
|
30
31
|
|
31
32
|
broadcast(:ok, @ident)
|
32
33
|
rescue StandardError => e
|
@@ -3,12 +3,13 @@
|
|
3
3
|
module Decidim
|
4
4
|
module DecidimAwesome
|
5
5
|
module Admin
|
6
|
-
class CreateScopedStyle <
|
6
|
+
class CreateScopedStyle < Command
|
7
7
|
# Public: Initializes the command.
|
8
8
|
#
|
9
|
-
def initialize(organization)
|
9
|
+
def initialize(organization, config_var = :scoped_styles)
|
10
10
|
@organization = organization
|
11
11
|
@ident = rand(36**8).to_s(36)
|
12
|
+
@config_var = config_var
|
12
13
|
end
|
13
14
|
|
14
15
|
# Executes the command. Broadcasts these events:
|
@@ -18,7 +19,7 @@ module Decidim
|
|
18
19
|
#
|
19
20
|
# Returns nothing.
|
20
21
|
def call
|
21
|
-
styles = AwesomeConfig.find_or_initialize_by(var:
|
22
|
+
styles = AwesomeConfig.find_or_initialize_by(var: @config_var, organization: @organization)
|
22
23
|
styles.value = {} unless styles.value.is_a? Hash
|
23
24
|
# TODO: prevent (unlikely) colisions with exisiting values
|
24
25
|
styles.value[@ident] = ""
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Decidim
|
4
4
|
module DecidimAwesome
|
5
5
|
module Admin
|
6
|
-
class DestroyCustomRedirect <
|
6
|
+
class DestroyCustomRedirect < Command
|
7
7
|
# Public: Initializes the command.
|
8
8
|
#
|
9
9
|
# item - the redirections item to destroy
|
@@ -11,7 +11,7 @@ module Decidim
|
|
11
11
|
def initialize(item, organization)
|
12
12
|
@item = item
|
13
13
|
@organization = organization
|
14
|
-
@redirections = AwesomeConfig.find_by(var: :custom_redirects, organization:
|
14
|
+
@redirections = AwesomeConfig.find_by(var: :custom_redirects, organization:)
|
15
15
|
end
|
16
16
|
|
17
17
|
# Executes the command. Broadcasts these events:
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Decidim
|
4
4
|
module DecidimAwesome
|
5
5
|
module Admin
|
6
|
-
class DestroyMenuHack <
|
6
|
+
class DestroyMenuHack < Command
|
7
7
|
# Public: Initializes the command.
|
8
8
|
#
|
9
9
|
# item - the menu item to destroy
|
@@ -11,7 +11,7 @@ module Decidim
|
|
11
11
|
def initialize(item, menu_name, organization)
|
12
12
|
@item = item
|
13
13
|
@organization = organization
|
14
|
-
@menu = AwesomeConfig.find_by(var: menu_name, organization:
|
14
|
+
@menu = AwesomeConfig.find_by(var: menu_name, organization:)
|
15
15
|
end
|
16
16
|
|
17
17
|
# Executes the command. Broadcasts these events:
|
@@ -3,14 +3,15 @@
|
|
3
3
|
module Decidim
|
4
4
|
module DecidimAwesome
|
5
5
|
module Admin
|
6
|
-
class DestroyProposalCustomField <
|
6
|
+
class DestroyProposalCustomField < Command
|
7
7
|
# Public: Initializes the command.
|
8
8
|
#
|
9
9
|
# key - the key to destroy inise proposal_custom_fields
|
10
10
|
# organization
|
11
|
-
def initialize(key, organization)
|
11
|
+
def initialize(key, organization, config_var = :proposal_custom_fields)
|
12
12
|
@key = key
|
13
13
|
@organization = organization
|
14
|
+
@config_var = config_var
|
14
15
|
end
|
15
16
|
|
16
17
|
# Executes the command. Broadcasts these events:
|
@@ -20,14 +21,16 @@ module Decidim
|
|
20
21
|
#
|
21
22
|
# Returns nothing.
|
22
23
|
def call
|
23
|
-
fields = AwesomeConfig.find_by(var:
|
24
|
+
fields = AwesomeConfig.find_by(var: @config_var, organization: @organization)
|
24
25
|
return broadcast(:invalid, "Not a hash") unless fields&.value.is_a? Hash
|
25
26
|
return broadcast(:invalid, "#{key} key invalid") unless fields.value.has_key?(@key)
|
26
27
|
|
27
28
|
fields.value.except!(@key)
|
28
29
|
fields.save!
|
30
|
+
|
29
31
|
# remove constrains associated (a new config var is generated automatically, by removing it, it will trigger destroy on dependents)
|
30
|
-
constraint =
|
32
|
+
constraint = @config_var == :proposal_custom_fields ? :proposal_custom_field : :proposal_private_custom_field
|
33
|
+
constraint = AwesomeConfig.find_by(var: "#{constraint}_#{@key}", organization: @organization)
|
31
34
|
constraint.destroy! if constraint.present?
|
32
35
|
|
33
36
|
broadcast(:ok, @key)
|
@@ -3,14 +3,15 @@
|
|
3
3
|
module Decidim
|
4
4
|
module DecidimAwesome
|
5
5
|
module Admin
|
6
|
-
class DestroyScopedStyle <
|
6
|
+
class DestroyScopedStyle < Command
|
7
7
|
# Public: Initializes the command.
|
8
8
|
#
|
9
|
-
# key - the key to destroy inside scoped_styles
|
9
|
+
# key - the key to destroy inside scoped_styles/scoped_admin_styles
|
10
10
|
# organization
|
11
|
-
def initialize(key, organization)
|
11
|
+
def initialize(key, organization, config_var = :scoped_styles)
|
12
12
|
@key = key
|
13
13
|
@organization = organization
|
14
|
+
@config_var = config_var
|
14
15
|
end
|
15
16
|
|
16
17
|
# Executes the command. Broadcasts these events:
|
@@ -20,14 +21,15 @@ module Decidim
|
|
20
21
|
#
|
21
22
|
# Returns nothing.
|
22
23
|
def call
|
23
|
-
styles = AwesomeConfig.find_by(var:
|
24
|
+
styles = AwesomeConfig.find_by(var: @config_var, organization: @organization)
|
24
25
|
return broadcast(:invalid, "Not a hash") unless styles&.value.is_a? Hash
|
25
26
|
return broadcast(:invalid, "#{key} key invalid") unless styles.value.has_key?(@key)
|
26
27
|
|
27
28
|
styles.value.except!(@key)
|
28
29
|
styles.save!
|
29
30
|
# remove constrains associated (a new config var is generated automatically, by removing it, it will trigger destroy on dependents)
|
30
|
-
constraint =
|
31
|
+
constraint = @config_var == :scoped_styles ? :scoped_style : :scoped_admin_style
|
32
|
+
constraint = AwesomeConfig.find_by(var: "#{constraint}_#{@key}", organization: @organization)
|
31
33
|
constraint.destroy! if constraint.present?
|
32
34
|
|
33
35
|
broadcast(:ok, @key)
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Decidim
|
4
4
|
module DecidimAwesome
|
5
5
|
module Admin
|
6
|
-
class RenameScopeLabel <
|
6
|
+
class RenameScopeLabel < Command
|
7
7
|
# Public: Initializes the command.
|
8
8
|
#
|
9
9
|
# params - A constraint params
|
@@ -34,7 +34,7 @@ module Decidim
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
broadcast(:ok, { scope
|
37
|
+
broadcast(:ok, { scope:, key: @text })
|
38
38
|
rescue StandardError => e
|
39
39
|
broadcast(:invalid, e.message)
|
40
40
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Decidim
|
4
4
|
module DecidimAwesome
|
5
5
|
module Admin
|
6
|
-
class UpdateConfig <
|
6
|
+
class UpdateConfig < Command
|
7
7
|
# Public: Initializes the command.
|
8
8
|
#
|
9
9
|
# form - A config form
|
@@ -27,10 +27,9 @@ module Decidim
|
|
27
27
|
begin
|
28
28
|
form.attributes.each do |key, val|
|
29
29
|
# ignore nil attributes (must specifically be set to false if necessary)
|
30
|
-
next unless form.valid_keys.include?(key)
|
30
|
+
next unless form.valid_keys.include?(key.to_sym)
|
31
31
|
|
32
32
|
setting = AwesomeConfig.find_or_initialize_by(var: key, organization: form.current_organization)
|
33
|
-
|
34
33
|
setting.value = val.respond_to?(:attributes) ? val.attributes : val
|
35
34
|
setting.save!
|
36
35
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Decidim
|
4
4
|
module DecidimAwesome
|
5
5
|
module Admin
|
6
|
-
class UpdateConstraint <
|
6
|
+
class UpdateConstraint < Command
|
7
7
|
# Public: Initializes the command.
|
8
8
|
#
|
9
9
|
# form - A constraint form
|
@@ -18,7 +18,7 @@ module Decidim
|
|
18
18
|
#
|
19
19
|
# Returns nothing.
|
20
20
|
def call
|
21
|
-
return broadcast(:invalid) if form.invalid?
|
21
|
+
return broadcast(:invalid, form.errors.full_messages.join(". ")) if form.invalid?
|
22
22
|
return broadcast(:invalid) if attributes.blank?
|
23
23
|
|
24
24
|
begin
|
@@ -36,7 +36,7 @@ module Decidim
|
|
36
36
|
attr_reader :form
|
37
37
|
|
38
38
|
def attributes
|
39
|
-
form.attributes.filter { |
|
39
|
+
form.attributes.filter { |key, val| key != "id" && val.present? }
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Decidim
|
4
4
|
module DecidimAwesome
|
5
5
|
module Admin
|
6
|
-
class UpdateCustomRedirect <
|
6
|
+
class UpdateCustomRedirect < Command
|
7
7
|
# Public: Initializes the command.
|
8
8
|
#
|
9
9
|
def initialize(form, item)
|
@@ -38,8 +38,8 @@ module Decidim
|
|
38
38
|
delegate :to_params, to: :form
|
39
39
|
|
40
40
|
def url_exists?
|
41
|
-
return unless redirects
|
42
|
-
return unless redirects.value.is_a? Hash
|
41
|
+
return false unless redirects
|
42
|
+
return false unless redirects.value.is_a? Hash
|
43
43
|
|
44
44
|
redirects.value[item.origin].present?
|
45
45
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Decidim
|
4
4
|
module DecidimAwesome
|
5
|
-
class CreateEditorImage <
|
5
|
+
class CreateEditorImage < Decidim::Command
|
6
6
|
# Creates a blueprint.
|
7
7
|
#
|
8
8
|
# form - The form with the data.
|
@@ -13,7 +13,7 @@ module Decidim
|
|
13
13
|
# Executes the command. Broadcasts these events:
|
14
14
|
#
|
15
15
|
# - :ok when everything is valid
|
16
|
-
# - :invalid if the form wasn't valid and we couldn't proceed.
|
16
|
+
# - :invalid if the form wasn't valid, and we couldn't proceed.
|
17
17
|
#
|
18
18
|
# Returns nothing.
|
19
19
|
def call
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module DecidimAwesome
|
5
|
+
module Admin
|
6
|
+
module MaintenanceContext
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
layout "decidim/decidim_awesome/admin/maintenance"
|
11
|
+
helper_method :current_view, :available_views, :present_private_data
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def present_private_data(model)
|
16
|
+
PrivateDataPresenter.new(model)
|
17
|
+
end
|
18
|
+
|
19
|
+
def current_view
|
20
|
+
return params[:id] if available_views.include?(params[:id])
|
21
|
+
|
22
|
+
available_views.keys.first
|
23
|
+
end
|
24
|
+
|
25
|
+
def available_views
|
26
|
+
{
|
27
|
+
"private_data" => {
|
28
|
+
title: I18n.t("private_data", scope: "decidim.decidim_awesome.admin.menu.maintenance"),
|
29
|
+
icon: "spy-line",
|
30
|
+
path: decidim_admin_decidim_awesome.maintenance_path("private_data")
|
31
|
+
},
|
32
|
+
"checks" => {
|
33
|
+
title: I18n.t("checks", scope: "decidim.decidim_awesome.admin.menu.maintenance"),
|
34
|
+
icon: "pulse",
|
35
|
+
path: decidim_admin_decidim_awesome.checks_maintenance_index_path
|
36
|
+
}
|
37
|
+
}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/app/controllers/concerns/decidim/decidim_awesome/admin_accountability/admin/filterable.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support/concern"
|
4
|
+
|
5
|
+
module Decidim
|
6
|
+
module DecidimAwesome
|
7
|
+
module AdminAccountability
|
8
|
+
module Admin
|
9
|
+
module Filterable
|
10
|
+
extend ActiveSupport::Concern
|
11
|
+
|
12
|
+
included do
|
13
|
+
include Decidim::Admin::Filterable
|
14
|
+
|
15
|
+
helper Decidim::DecidimAwesome::AdminAccountability::Admin::FilterableHelper
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def base_query
|
20
|
+
collection
|
21
|
+
end
|
22
|
+
|
23
|
+
def filters
|
24
|
+
[:role_type_eq, :participatory_space_type_eq]
|
25
|
+
end
|
26
|
+
|
27
|
+
def filters_with_values
|
28
|
+
return { admin_role_type: [] } if global?
|
29
|
+
|
30
|
+
{ role_type_eq: role_types, participatory_space_type_eq: participatory_space_types }
|
31
|
+
end
|
32
|
+
|
33
|
+
def dynamically_translated_filters
|
34
|
+
[:role_type_eq, :participatory_space_type_eq]
|
35
|
+
end
|
36
|
+
|
37
|
+
def extra_allowed_params
|
38
|
+
[:per_page, :admins, :admin_role_type]
|
39
|
+
end
|
40
|
+
|
41
|
+
def translated_role_type_eq(role)
|
42
|
+
I18n.t(role, scope: "decidim.decidim_awesome.admin.admin_accountability.roles")
|
43
|
+
end
|
44
|
+
|
45
|
+
def translated_participatory_space_type_eq(item_type)
|
46
|
+
item_type.gsub("UserRole", "").safe_constantize&.model_name&.human&.pluralize || item_type
|
47
|
+
end
|
48
|
+
|
49
|
+
def search_field_predicate
|
50
|
+
:user_name_or_user_email_cont
|
51
|
+
end
|
52
|
+
|
53
|
+
def participatory_space_types
|
54
|
+
@participatory_space_types ||= collection.pluck(:item_type).uniq.sort
|
55
|
+
end
|
56
|
+
|
57
|
+
def role_types
|
58
|
+
@role_types ||= PaperTrailVersion.safe_user_roles.map do |role_class|
|
59
|
+
role_class.safe_constantize.select(:role).distinct.pluck(:role)
|
60
|
+
end.union.flatten.sort
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module DecidimAwesome
|
5
|
+
module AdminAccountability
|
6
|
+
module Admin
|
7
|
+
module FilterableHelper
|
8
|
+
def extra_dropdown_submenu_options_items(_filter, _i18n_scope)
|
9
|
+
Decidim.user_roles.sort.map do |role_type|
|
10
|
+
link_to(I18n.t(role_type, scope: "decidim.decidim_awesome.admin.admin_accountability.admin_roles"),
|
11
|
+
url_for(export_params.merge({ admin_role_type: role_type })))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def applied_filters_tags(i18n_ctx)
|
16
|
+
admin_role_type = PaperTrailVersion.safe_admin_role_type(params[:admin_role_type])
|
17
|
+
if global? && admin_role_type.present?
|
18
|
+
content_tag(:span, class: "label secondary") do
|
19
|
+
concat "#{i18n_filter_label(:admin_role_type, filterable_i18n_scope_from_ctx(i18n_ctx))}: "
|
20
|
+
concat t("decidim.decidim_awesome.admin.admin_accountability.admin_roles.#{admin_role_type}", default: admin_role_type)
|
21
|
+
concat icon_link_to(
|
22
|
+
"close-circle-line",
|
23
|
+
url_for(export_params.except(:admin_role_type)),
|
24
|
+
t("decidim.admin.actions.cancel"),
|
25
|
+
class: "action-icon--remove"
|
26
|
+
)
|
27
|
+
end
|
28
|
+
else
|
29
|
+
ransack_params.slice(*filters).map do |filter, value|
|
30
|
+
applied_filter_tag(filter, value, filterable_i18n_scope_from_ctx(i18n_ctx))
|
31
|
+
end.join.html_safe
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module DecidimAwesome
|
5
|
+
module CheckLoginAuthorizations
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
include ::Decidim::DecidimAwesome::NeedsAwesomeConfig
|
10
|
+
before_action :check_required_login_authorizations
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def check_required_login_authorizations
|
16
|
+
return unless user_signed_in?
|
17
|
+
return unless current_user.confirmed?
|
18
|
+
return if current_user.blocked?
|
19
|
+
return if allowed_controllers.include?(controller_name)
|
20
|
+
|
21
|
+
unless user_is_authorized?
|
22
|
+
flash[:alert] = I18n.t("decidim.decidim_awesome.session.authorization_is_required",
|
23
|
+
authorizations: required_authorizations.map(&:fullname).join(", "))
|
24
|
+
redirect_to decidim_decidim_awesome.required_authorizations_path(redirect_url: request.fullpath)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def user_is_authorized?
|
29
|
+
return true if required_authorizations.blank?
|
30
|
+
|
31
|
+
@user_is_authorized ||= if awesome_config[:force_authorization_with_any_method]
|
32
|
+
current_authorizations.any?
|
33
|
+
else
|
34
|
+
current_authorizations.count == required_authorizations.count
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def required_authorizations
|
39
|
+
return unless awesome_config[:force_authorization_after_login].is_a?(Array)
|
40
|
+
|
41
|
+
@required_authorizations ||= Decidim::Verifications::Adapter.from_collection(
|
42
|
+
awesome_config[:force_authorization_after_login] & current_organization.available_authorizations & Decidim.authorization_workflows.map(&:name)
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
def current_authorizations
|
47
|
+
@current_authorizations ||= Decidim::Verifications::Authorizations.new(
|
48
|
+
organization: current_organization,
|
49
|
+
user: current_user,
|
50
|
+
name: required_authorizations.map(&:name),
|
51
|
+
granted: true
|
52
|
+
)
|
53
|
+
end
|
54
|
+
|
55
|
+
def allowed_controllers
|
56
|
+
%w(required_authorizations authorizations upload_validations timeouts editor_images locales pages tos) + awesome_config[:force_authorization_allowed_controller_names].to_a
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module DecidimAwesome
|
5
|
+
module ContentSecurityPolicy
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
after_action :append_awesome_csp_directives
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def append_awesome_csp_directives
|
15
|
+
# this is necessary for custom fields
|
16
|
+
content_security_policy.append_csp_directive("font-src", "data:") if DecidimAwesome.enabled?(:proposal_custom_fields)
|
17
|
+
append_awesome_intergram_directives
|
18
|
+
end
|
19
|
+
|
20
|
+
def append_awesome_intergram_directives
|
21
|
+
return unless DecidimAwesome.enabled?(:intergram_for_admins) || DecidimAwesome.enabled?(:intergram_for_public)
|
22
|
+
|
23
|
+
intergram = URI.parse(DecidimAwesome.intergram_url)
|
24
|
+
if intergram.host && intergram.scheme
|
25
|
+
content_security_policy.append_csp_directive("script-src", "#{intergram.scheme}://#{intergram.host}")
|
26
|
+
content_security_policy.append_csp_directive("frame-src", "#{intergram.scheme}://#{intergram.host}")
|
27
|
+
# this script is in the intergram code, but does not look necessary to work
|
28
|
+
# content_security_policy.append_csp_directive("frame-src", "http://www.loadmill.com")
|
29
|
+
# content_security_policy.append_csp_directive("frame-src", "http://app.loadmill.com")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module DecidimAwesome
|
5
|
+
module LimitPendingAmendments
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
# rubocop:disable Rails/LexicallyScopedActionFilter
|
10
|
+
before_action :limit_pending_amendments, only: [:new, :create]
|
11
|
+
# rubocop:enable Rails/LexicallyScopedActionFilter
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def limit_pending_amendments
|
16
|
+
return unless amendable&.amendments && amendable&.component&.settings.try(:limit_pending_amendments)
|
17
|
+
return unless amendable.component.settings.try(:amendments_enabled)
|
18
|
+
return unless amendable.component.current_settings.try(:amendment_creation_enabled)
|
19
|
+
|
20
|
+
return unless existing_emendations.any?
|
21
|
+
|
22
|
+
flash[:alert] = t("pending_limit_reached", scope: "decidim.decidim_awesome.amendments", emendation: translated_attribute(existing_emendations.first.title))
|
23
|
+
redirect_back(fallback_location: Decidim::ResourceLocatorPresenter.new(amendable).path)
|
24
|
+
end
|
25
|
+
|
26
|
+
def existing_emendations
|
27
|
+
@existing_emendations ||= begin
|
28
|
+
existing = amendable.amendments.where(state: :evaluating)
|
29
|
+
existing.filter_map { |amendment| !amendment.emendation&.hidden? && amendment.emendation }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -43,14 +43,14 @@ module Decidim
|
|
43
43
|
return unless redirects.is_a? Hash
|
44
44
|
|
45
45
|
path, query = fullpath.split("?")
|
46
|
-
destination = redirects.dig(path
|
47
|
-
pass_query = redirects.dig(path
|
46
|
+
destination = redirects.dig(path, "destination")
|
47
|
+
pass_query = redirects.dig(path, "pass_query")
|
48
48
|
if pass_query.present?
|
49
49
|
union = destination.include?("?") ? "&" : "?"
|
50
50
|
destination = "#{destination}#{union}#{query}"
|
51
51
|
end
|
52
52
|
|
53
|
-
|
53
|
+
destination.strip if destination.present?
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|