decidim-reporting_proposals 0.4.2 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/lint.yml +2 -2
- data/.github/workflows/test_integration.yml +2 -2
- data/.github/workflows/test_unit.yml +2 -2
- data/.rubocop-disabled.yml +11 -0
- data/.rubocop.yml +1 -0
- data/.rubocop_rails.yml +3 -0
- data/.rubocop_ruby.yml +24 -10
- data/.ruby-version +1 -1
- data/.simplecov +2 -2
- data/Gemfile.lock +286 -264
- data/README.md +2 -2
- data/Rakefile +2 -0
- data/app/commands/concerns/decidim/reporting_proposals/gallery_methods_override.rb +18 -0
- data/app/commands/decidim/reporting_proposals/admin/update_proposal_note.rb +1 -1
- data/app/commands/decidim/reporting_proposals/create_reporting_proposal.rb +2 -0
- data/app/commands/decidim/templates/admin/copy_proposal_answer_template.rb +1 -1
- data/app/commands/decidim/templates/admin/create_proposal_answer_template.rb +1 -1
- data/app/commands/decidim/templates/admin/update_proposal_answer_template.rb +1 -1
- data/app/controllers/concerns/decidim/reporting_proposals/admin/needs_header_snippets.rb +5 -7
- data/app/controllers/concerns/decidim/reporting_proposals/needs_proposal_extra_validations_snippets.rb +1 -1
- data/app/controllers/concerns/decidim/reporting_proposals/proposals_controller_override.rb +5 -5
- data/app/controllers/decidim/templates/admin/proposal_answer_templates_controller.rb +8 -6
- data/app/forms/concerns/decidim/reporting_proposals/form_builder_override.rb +9 -8
- data/app/forms/concerns/decidim/reporting_proposals/map_builder_override.rb +6 -4
- data/app/helpers/concerns/decidim/reporting_proposals/proposal_wizard_helper_override.rb +4 -4
- data/app/overrides/decidim/proposals/admin/proposal_answers/_form/add_template_chooser.html.erb.deface +1 -1
- data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_valuators_name.html.erb.deface +3 -3
- data/app/overrides/decidim/proposals/admin/proposals/show/add_photo_management.html.erb.deface +1 -1
- data/app/overrides/decidim/proposals/admin/proposals/show/add_send_email_btn.html.erb.deface +1 -1
- data/app/overrides/decidim/proposals/admin/proposals/show/add_valuators_form.html.erb.deface +1 -1
- data/app/overrides/decidim/proposals/admin/proposals/show/remove_photos.html.erb.deface +0 -1
- data/app/overrides/decidim/proposals/proposals/_edit_form_fields/replace_add_photos.html.erb.deface +37 -0
- data/app/overrides/decidim/proposals/proposals/_proposal_similar/add_distance_badge.html.erb.deface +1 -1
- data/app/overrides/decidim/proposals/proposals/_wizard_header/replace_title.html.erb.deface +9 -9
- data/app/overrides/decidim/proposals/proposals/edit/add_css.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/proposals/edit/replace_javascript.html.erb.deface +0 -1
- data/app/overrides/decidim/proposals/proposals/edit_draft/add_css.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/proposals/new/add_css.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/proposals/new/replace_javascript.html.erb.deface +0 -1
- data/app/overrides/decidim/reported_mailer/report/add_link_to_admin.html.erb.deface +1 -1
- data/app/overrides/layouts/decidim/_process_header_steps/always_show_new_proposals.html.erb.deface +1 -1
- data/app/packs/stylesheets/decidim/reporting_proposals/geocoding_addons.scss +8 -8
- data/app/packs/stylesheets/decidim/reporting_proposals/list_component_admin.scss +5 -5
- data/app/packs/stylesheets/decidim/reporting_proposals/manage_component_admin.scss +10 -10
- data/app/packs/stylesheets/decidim/reporting_proposals/proposals/add_proposal.scss +3 -3
- data/app/packs/stylesheets/decidim/reporting_proposals/user_camera_inputs.scss +5 -5
- data/app/permissions/decidim/templates/admin/extra_permissions.rb +37 -0
- data/app/queries/decidim/reporting_proposals/nearby_proposals.rb +1 -1
- data/app/validators/concerns/decidim/reporting_proposals/component_validator_override.rb +2 -2
- data/app/views/decidim/proposals/proposals/index.js.erb +1 -1
- data/app/views/decidim/reporting_proposals/proposals/_reporting_proposal_fields.html.erb +9 -21
- data/babel.config.json +25 -0
- data/config/locales/ca.yml +2 -0
- data/config/locales/de.yml +2 -0
- data/config/locales/en.yml +2 -0
- data/config/locales/es.yml +2 -0
- data/db/migrate/20230404103706_add_target_and_field_values_to_decidim_templates_templates.rb +2 -6
- data/decidim-reporting_proposals.gemspec +2 -1
- data/lib/decidim/reporting_proposals/component.rb +0 -9
- data/lib/decidim/reporting_proposals/engine.rb +27 -3
- data/lib/decidim/reporting_proposals/version.rb +3 -3
- data/package-lock.json +161 -142
- data/package.json +4 -163
- metadata +58 -49
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Templates
|
5
|
+
module Admin
|
6
|
+
class ExtraPermissions < Decidim::DefaultPermissions
|
7
|
+
# this should go to the standard templates/permissions class but to avoid hacking it we put it here
|
8
|
+
# to be removed when proposal templates is accepted into core
|
9
|
+
def permissions
|
10
|
+
return permission_action if permission_action.scope != :admin
|
11
|
+
return permission_action unless user
|
12
|
+
return permission_action if context[:current_organization] != user.organization
|
13
|
+
|
14
|
+
allow! if user_has_a_role? && (permission_action.subject == :template && permission_action.action == :read)
|
15
|
+
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def participatory_space
|
22
|
+
@participatory_space ||= context[:proposal].try(:participatory_space)
|
23
|
+
end
|
24
|
+
|
25
|
+
def user_roles
|
26
|
+
@user_roles ||= participatory_space.try(:user_roles)
|
27
|
+
end
|
28
|
+
|
29
|
+
def user_has_a_role?
|
30
|
+
return unless user_roles
|
31
|
+
|
32
|
+
user_roles.exists?(user: user)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Decidim
|
4
4
|
module ReportingProposals
|
5
5
|
# Class used to retrieve similar proposals.
|
6
|
-
class NearbyProposals <
|
6
|
+
class NearbyProposals < Decidim::Query
|
7
7
|
# Syntactic sugar to initialize the class and return the queried objects.
|
8
8
|
#
|
9
9
|
# components - Decidim::CurrentComponent
|
@@ -11,13 +11,13 @@ module Decidim
|
|
11
11
|
# over all the validators.
|
12
12
|
def validate_each(record, attribute, component)
|
13
13
|
unless component
|
14
|
-
record.errors
|
14
|
+
record.errors.add(attribute, :blank)
|
15
15
|
return
|
16
16
|
end
|
17
17
|
manifests = [options[:manifest].to_s]
|
18
18
|
manifests << "reporting_proposals" if manifests.first == "proposals"
|
19
19
|
|
20
|
-
record.errors
|
20
|
+
record.errors.add(attribute, :invalid) unless component.manifest_name.to_s.in?(manifests)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -8,7 +8,7 @@ $orderFilterInput.val('<%= order %>');
|
|
8
8
|
var $dropdownMenu = $('.dropdown.menu', $proposals);
|
9
9
|
$dropdownMenu.foundation();
|
10
10
|
|
11
|
-
var markerData = JSON.parse('<%= escape_javascript proposals_data_for_map(search.
|
11
|
+
var markerData = JSON.parse('<%= escape_javascript proposals_data_for_map(search.result.select(&:geocoded_and_valid?))
|
12
12
|
.to_json.html_safe %>');
|
13
13
|
|
14
14
|
var $map = $("#map");
|
@@ -12,8 +12,8 @@
|
|
12
12
|
<%= image_tag photo.thumbnail_url, class: "thumbnail", alt: photo.file.filename %>
|
13
13
|
<%= form.hidden_field :photos, multiple: true, value: photo.id, id: "photo-#{photo.id}" %>
|
14
14
|
<button class="close-button"
|
15
|
-
aria-label="<%= t("delete_image", scope: "decidim.
|
16
|
-
title="<%= t("delete_image", scope: "decidim.
|
15
|
+
aria-label="<%= t("delete_image", scope: "decidim.reporting_proposals.proposals.edit") %>"
|
16
|
+
title="<%= t("delete_image", scope: "decidim.reporting_proposals.proposals.edit") %>"
|
17
17
|
type="button"
|
18
18
|
data-close>
|
19
19
|
<span aria-hidden="true">×</span>
|
@@ -87,27 +87,15 @@
|
|
87
87
|
<% end %>
|
88
88
|
|
89
89
|
<% if component_settings.attachments_allowed? && !component_settings.only_photo_attachments? %>
|
90
|
-
|
90
|
+
<fieldset class="attachments_container gallery__container documents_container">
|
91
91
|
<legend><%= t("attachment_legend", scope: "decidim.proposals.proposals.edit") %></legend>
|
92
|
-
|
93
|
-
<% if @form.documents.any? %>
|
94
|
-
<% @form.documents.each do |document| %>
|
95
|
-
<div class="callout" id="attachment_<%= document.id %>" data-closable>
|
96
|
-
<%= link_to translated_attribute(document.title), document.url %>
|
97
|
-
<small><%= document.file_type %> <%= number_to_human_size(document.file_size) %></small>
|
98
|
-
<%= form.hidden_field :documents, multiple: true, value: document.id, id: "document-#{document.id}" %>
|
99
|
-
<button class="close-button"
|
100
|
-
aria-label="<%= t("delete_document", scope: "decidim.proposals.proposals.edit") %>"
|
101
|
-
title="<%= t("delete_document", scope: "decidim.proposals.proposals.edit") %>"
|
102
|
-
type="button" data-close>
|
103
|
-
<span aria-hidden="true">×</span>
|
104
|
-
</button>
|
105
|
-
</div>
|
106
|
-
<% end %>
|
107
|
-
<% end %>
|
108
|
-
|
109
92
|
<div class="row column">
|
110
|
-
<%= form.
|
93
|
+
<%= form.attachment :documents,
|
94
|
+
multiple: true,
|
95
|
+
label: t("decidim.proposals.proposals.edit.add_documents"),
|
96
|
+
button_label: t("decidim.proposals.proposals.edit.add_documents"),
|
97
|
+
button_edit_label: t("decidim.proposals.proposals.edit.edit_documents"),
|
98
|
+
help_i18n_scope: "decidim.forms.file_help.file" %>
|
111
99
|
</div>
|
112
100
|
</fieldset>
|
113
101
|
<% end %>
|
data/babel.config.json
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
{
|
2
|
+
"presets": [
|
3
|
+
[
|
4
|
+
"@babel/preset-env", {
|
5
|
+
"forceAllTransforms": true,
|
6
|
+
"useBuiltIns": "entry",
|
7
|
+
"corejs": 3,
|
8
|
+
"modules": false
|
9
|
+
}
|
10
|
+
],
|
11
|
+
["@babel/preset-react"]
|
12
|
+
],
|
13
|
+
"plugins": [
|
14
|
+
"@babel/plugin-transform-classes",
|
15
|
+
[
|
16
|
+
"@babel/plugin-transform-runtime",
|
17
|
+
{
|
18
|
+
"helpers": false,
|
19
|
+
"regenerator": true,
|
20
|
+
"corejs": false
|
21
|
+
}
|
22
|
+
],
|
23
|
+
["@babel/plugin-transform-regenerator", { "async": false }]
|
24
|
+
]
|
25
|
+
}
|
data/config/locales/ca.yml
CHANGED
@@ -414,6 +414,8 @@ ca:
|
|
414
414
|
away: "%{meters} de distància"
|
415
415
|
description: Aquestes són propostes que es troben en un radi de %{meters} respecte a la que esteu creant. En cas que trobeu un altra proposta d'informe en la mateixa situació, podeu optar per donar-li una adhesió en comptes de crear-ne un de nou.
|
416
416
|
title: Propostes properes
|
417
|
+
edit:
|
418
|
+
delete_image: Esborra la imatge
|
417
419
|
form:
|
418
420
|
image: Imatge/fotografia
|
419
421
|
templates:
|
data/config/locales/de.yml
CHANGED
@@ -414,6 +414,8 @@ de:
|
|
414
414
|
away: "%{meters} entfernt"
|
415
415
|
description: Dies sind Vorschläge, die in einem Radius von %{meters} zu dem von Ihnen erstellten sind. Allenfalls hat eine andere Person die die gleiche Situation gemeldet. In diesem Fall können Sie die bestehende Meldung Unterstützen, anstatt eine neue zu erstellen.
|
416
416
|
title: Bestehende Meldungen in der Umgebung
|
417
|
+
edit:
|
418
|
+
delete_image: Bild löschen
|
417
419
|
form:
|
418
420
|
image: Foto
|
419
421
|
templates:
|
data/config/locales/en.yml
CHANGED
data/config/locales/es.yml
CHANGED
@@ -414,6 +414,8 @@ es:
|
|
414
414
|
away: "A %{meters} de distancia"
|
415
415
|
description: Estas son propuestas que están en un radio de %{meters} a la que estás creando. En caso de que encuentres otra reportando la misma situación, puedes elegir apoyarla en lugar de crear una nueva.
|
416
416
|
title: Propuestas cercanas
|
417
|
+
edit:
|
418
|
+
delete_image: Eliminar imagen
|
417
419
|
form:
|
418
420
|
image: Imágen/foto
|
419
421
|
templates:
|
data/db/migrate/20230404103706_add_target_and_field_values_to_decidim_templates_templates.rb
CHANGED
@@ -2,11 +2,7 @@
|
|
2
2
|
|
3
3
|
class AddTargetAndFieldValuesToDecidimTemplatesTemplates < ActiveRecord::Migration[6.0]
|
4
4
|
def change
|
5
|
-
unless ActiveRecord::Base.connection.column_exists?(:decidim_templates_templates, :field_values)
|
6
|
-
|
7
|
-
end
|
8
|
-
unless ActiveRecord::Base.connection.column_exists?(:decidim_templates_templates, :target)
|
9
|
-
add_column :decidim_templates_templates, :target, :string
|
10
|
-
end
|
5
|
+
add_column :decidim_templates_templates, :field_values, :json, default: {} unless ActiveRecord::Base.connection.column_exists?(:decidim_templates_templates, :field_values)
|
6
|
+
add_column :decidim_templates_templates, :target, :string unless ActiveRecord::Base.connection.column_exists?(:decidim_templates_templates, :target)
|
11
7
|
end
|
12
8
|
end
|
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.description = "A module for Decidim that facilitates the creation of proposals related to geolocated issues in a city"
|
15
15
|
spec.license = "AGPL-3.0"
|
16
16
|
spec.homepage = "https://github.com/openpoke/decidim-module-reporting_proposals"
|
17
|
-
spec.required_ruby_version = ">=
|
17
|
+
spec.required_ruby_version = ">= 3.0"
|
18
18
|
|
19
19
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
20
20
|
f.match(%r{^(test|spec|features)/})
|
@@ -36,4 +36,5 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.add_development_dependency "decidim-elections", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
|
37
37
|
spec.add_development_dependency "decidim-meetings", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
|
38
38
|
spec.add_development_dependency "decidim-templates", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
|
39
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
39
40
|
end
|
@@ -96,15 +96,6 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
96
96
|
settings.attribute :suggested_hashtags, type: :text, editor: false, required: false
|
97
97
|
end
|
98
98
|
|
99
|
-
component.register_resource(:reporting_proposal) do |resource|
|
100
|
-
resource.model_class_name = "Decidim::Proposals::Proposal"
|
101
|
-
resource.template = "decidim/proposals/proposals/linked_proposals"
|
102
|
-
resource.card = "decidim/proposals/proposal"
|
103
|
-
resource.reported_content_cell = "decidim/proposals/reported_content"
|
104
|
-
resource.actions = %w(endorse vote amend comment vote_comment)
|
105
|
-
resource.searchable = true
|
106
|
-
end
|
107
|
-
|
108
99
|
component.register_resource(:collaborative_draft) do |resource|
|
109
100
|
resource.model_class_name = "Decidim::Proposals::CollaborativeDraft"
|
110
101
|
resource.card = "decidim/proposals/collaborative_draft"
|
@@ -20,6 +20,7 @@ module Decidim
|
|
20
20
|
Decidim::ResourceHelper.include(Decidim::ReportingProposals::ResourceHelperOverride)
|
21
21
|
Decidim::Map::Autocomplete::Builder.include(Decidim::ReportingProposals::MapBuilderOverride)
|
22
22
|
Decidim::CreateReport.include(Decidim::ReportingProposals::CreateReportOverride)
|
23
|
+
Decidim::GalleryMethods.include(Decidim::ReportingProposals::GalleryMethodsOverride)
|
23
24
|
Decidim::Proposals::ProposalSerializer.include(Decidim::ReportingProposals::ProposalSerializerOverride)
|
24
25
|
Decidim::Proposals::ProposalsPickerCell.include(Decidim::ReportingProposals::ProposalsPickerCellOverride)
|
25
26
|
Decidim::Proposals::PublishProposal.include(Decidim::Proposals::PublishProposalOverride)
|
@@ -48,10 +49,33 @@ module Decidim
|
|
48
49
|
|
49
50
|
# port of https://github.com/openpoke/decidim/pull/31,23,29,24,43
|
50
51
|
Decidim::ReportedMailer.include(Decidim::ReportedMailerOverride)
|
51
|
-
|
52
|
+
|
53
|
+
# since version 0.27 Decidim uses its own version of attribute validation (used to be Rectify::Forms)
|
54
|
+
# To patch the ResourceManifest directly does not work now as the class is initialized by the proposals module on requiring the file component.rb
|
55
|
+
# So we remove the manifest and create it again after patching the class ResourceManifest
|
52
56
|
Decidim::ResourceManifest.include(Decidim::ResourceManifestOverride)
|
53
|
-
Decidim
|
54
|
-
Decidim.
|
57
|
+
Decidim.resource_manifests.delete(Decidim.find_resource_manifest(:proposal))
|
58
|
+
component = Decidim.find_component_manifest(:proposals)
|
59
|
+
component.register_resource(:proposal) do |resource|
|
60
|
+
resource.model_class_name = "Decidim::Proposals::Proposal"
|
61
|
+
resource.template = "decidim/proposals/proposals/linked_proposals"
|
62
|
+
resource.card = "decidim/proposals/proposal"
|
63
|
+
resource.reported_content_cell = "decidim/proposals/reported_content"
|
64
|
+
resource.actions = %w(endorse vote amend comment vote_comment)
|
65
|
+
resource.searchable = true
|
66
|
+
resource.admin_route_name = "proposal"
|
67
|
+
end
|
68
|
+
component = Decidim.find_component_manifest(:reporting_proposals)
|
69
|
+
component.register_resource(:reporting_proposal) do |resource|
|
70
|
+
resource.model_class_name = "Decidim::Proposals::Proposal"
|
71
|
+
resource.template = "decidim/proposals/proposals/linked_proposals"
|
72
|
+
resource.card = "decidim/proposals/proposal"
|
73
|
+
resource.reported_content_cell = "decidim/proposals/reported_content"
|
74
|
+
resource.actions = %w(endorse vote amend comment vote_comment)
|
75
|
+
resource.searchable = true
|
76
|
+
resource.admin_route_name = "proposal"
|
77
|
+
end
|
78
|
+
Decidim::ResourceLocatorPresenter.include(Decidim::ResourceLocatorPresenterOverride)
|
55
79
|
Decidim::Proposals::PublishProposalEvent.include(Decidim::Proposals::PublishProposalEventOverride)
|
56
80
|
Decidim::Proposals::Admin::AssignProposalsToValuator.include(Decidim::Proposals::Admin::AssignProposalsToValuatorOverride)
|
57
81
|
Decidim::Admin::HideResource.include(Decidim::Admin::HideResourceOverride)
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
module Decidim
|
4
4
|
module ReportingProposals
|
5
|
-
VERSION = "0.
|
6
|
-
DECIDIM_VERSION = "0.
|
5
|
+
VERSION = "0.5.1"
|
6
|
+
DECIDIM_VERSION = "0.27.4"
|
7
7
|
|
8
|
-
COMPAT_DECIDIM_VERSION = [">= 0.
|
8
|
+
COMPAT_DECIDIM_VERSION = [">= 0.27.0", "< 0.28"].freeze
|
9
9
|
end
|
10
10
|
end
|