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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/lint.yml +2 -2
  3. data/.github/workflows/test_integration.yml +2 -2
  4. data/.github/workflows/test_unit.yml +2 -2
  5. data/.rubocop-disabled.yml +11 -0
  6. data/.rubocop.yml +1 -0
  7. data/.rubocop_rails.yml +3 -0
  8. data/.rubocop_ruby.yml +24 -10
  9. data/.ruby-version +1 -1
  10. data/.simplecov +2 -2
  11. data/Gemfile.lock +286 -264
  12. data/README.md +2 -2
  13. data/Rakefile +2 -0
  14. data/app/commands/concerns/decidim/reporting_proposals/gallery_methods_override.rb +18 -0
  15. data/app/commands/decidim/reporting_proposals/admin/update_proposal_note.rb +1 -1
  16. data/app/commands/decidim/reporting_proposals/create_reporting_proposal.rb +2 -0
  17. data/app/commands/decidim/templates/admin/copy_proposal_answer_template.rb +1 -1
  18. data/app/commands/decidim/templates/admin/create_proposal_answer_template.rb +1 -1
  19. data/app/commands/decidim/templates/admin/update_proposal_answer_template.rb +1 -1
  20. data/app/controllers/concerns/decidim/reporting_proposals/admin/needs_header_snippets.rb +5 -7
  21. data/app/controllers/concerns/decidim/reporting_proposals/needs_proposal_extra_validations_snippets.rb +1 -1
  22. data/app/controllers/concerns/decidim/reporting_proposals/proposals_controller_override.rb +5 -5
  23. data/app/controllers/decidim/templates/admin/proposal_answer_templates_controller.rb +8 -6
  24. data/app/forms/concerns/decidim/reporting_proposals/form_builder_override.rb +9 -8
  25. data/app/forms/concerns/decidim/reporting_proposals/map_builder_override.rb +6 -4
  26. data/app/helpers/concerns/decidim/reporting_proposals/proposal_wizard_helper_override.rb +4 -4
  27. data/app/overrides/decidim/proposals/admin/proposal_answers/_form/add_template_chooser.html.erb.deface +1 -1
  28. data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_valuators_name.html.erb.deface +3 -3
  29. data/app/overrides/decidim/proposals/admin/proposals/show/add_photo_management.html.erb.deface +1 -1
  30. data/app/overrides/decidim/proposals/admin/proposals/show/add_send_email_btn.html.erb.deface +1 -1
  31. data/app/overrides/decidim/proposals/admin/proposals/show/add_valuators_form.html.erb.deface +1 -1
  32. data/app/overrides/decidim/proposals/admin/proposals/show/remove_photos.html.erb.deface +0 -1
  33. data/app/overrides/decidim/proposals/proposals/_edit_form_fields/replace_add_photos.html.erb.deface +37 -0
  34. data/app/overrides/decidim/proposals/proposals/_proposal_similar/add_distance_badge.html.erb.deface +1 -1
  35. data/app/overrides/decidim/proposals/proposals/_wizard_header/replace_title.html.erb.deface +9 -9
  36. data/app/overrides/decidim/proposals/proposals/edit/add_css.html.erb.deface +5 -0
  37. data/app/overrides/decidim/proposals/proposals/edit/replace_javascript.html.erb.deface +0 -1
  38. data/app/overrides/decidim/proposals/proposals/edit_draft/add_css.html.erb.deface +5 -0
  39. data/app/overrides/decidim/proposals/proposals/new/add_css.html.erb.deface +5 -0
  40. data/app/overrides/decidim/proposals/proposals/new/replace_javascript.html.erb.deface +0 -1
  41. data/app/overrides/decidim/reported_mailer/report/add_link_to_admin.html.erb.deface +1 -1
  42. data/app/overrides/layouts/decidim/_process_header_steps/always_show_new_proposals.html.erb.deface +1 -1
  43. data/app/packs/stylesheets/decidim/reporting_proposals/geocoding_addons.scss +8 -8
  44. data/app/packs/stylesheets/decidim/reporting_proposals/list_component_admin.scss +5 -5
  45. data/app/packs/stylesheets/decidim/reporting_proposals/manage_component_admin.scss +10 -10
  46. data/app/packs/stylesheets/decidim/reporting_proposals/proposals/add_proposal.scss +3 -3
  47. data/app/packs/stylesheets/decidim/reporting_proposals/user_camera_inputs.scss +5 -5
  48. data/app/permissions/decidim/templates/admin/extra_permissions.rb +37 -0
  49. data/app/queries/decidim/reporting_proposals/nearby_proposals.rb +1 -1
  50. data/app/validators/concerns/decidim/reporting_proposals/component_validator_override.rb +2 -2
  51. data/app/views/decidim/proposals/proposals/index.js.erb +1 -1
  52. data/app/views/decidim/reporting_proposals/proposals/_reporting_proposal_fields.html.erb +9 -21
  53. data/babel.config.json +25 -0
  54. data/config/locales/ca.yml +2 -0
  55. data/config/locales/de.yml +2 -0
  56. data/config/locales/en.yml +2 -0
  57. data/config/locales/es.yml +2 -0
  58. data/db/migrate/20230404103706_add_target_and_field_values_to_decidim_templates_templates.rb +2 -6
  59. data/decidim-reporting_proposals.gemspec +2 -1
  60. data/lib/decidim/reporting_proposals/component.rb +0 -9
  61. data/lib/decidim/reporting_proposals/engine.rb +27 -3
  62. data/lib/decidim/reporting_proposals/version.rb +3 -3
  63. data/package-lock.json +161 -142
  64. data/package.json +4 -163
  65. 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 < Rectify::Query
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[attribute] << :blank
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[attribute] << :invalid unless component.manifest_name.to_s.in?(manifests)
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.results.select(&:geocoded_and_valid?))
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.proposals.proposals.edit") %>"
16
- title="<%= t("delete_image", scope: "decidim.proposals.proposals.edit") %>"
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">&times;</span>
@@ -87,27 +87,15 @@
87
87
  <% end %>
88
88
 
89
89
  <% if component_settings.attachments_allowed? && !component_settings.only_photo_attachments? %>
90
- <fieldset class="attachments_container gallery__container documents_container">
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">&times;</span>
104
- </button>
105
- </div>
106
- <% end %>
107
- <% end %>
108
-
109
92
  <div class="row column">
110
- <%= form.file_field :add_documents, multiple: true, label: t("add_documents", scope: "decidim.proposals.proposals.edit") %>
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
+ }
@@ -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:
@@ -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:
@@ -483,6 +483,8 @@ en:
483
483
  same situation, you can choose to support it instead of creating a new
484
484
  one.
485
485
  title: Nearby proposals
486
+ edit:
487
+ delete_image: Delete image
486
488
  form:
487
489
  image: Image/photo
488
490
  templates:
@@ -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:
@@ -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
- add_column :decidim_templates_templates, :field_values, :json, default: {}
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 = ">= 2.7"
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
- Decidim::ResourceLocatorPresenter.include(Decidim::ResourceLocatorPresenterOverride)
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::Proposals::PublishProposal.include(Decidim::Proposals::PublishProposalOverride)
54
- Decidim.find_resource_manifest(:proposal).admin_route_name = "proposal"
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.4.2"
6
- DECIDIM_VERSION = "0.26.5"
5
+ VERSION = "0.5.1"
6
+ DECIDIM_VERSION = "0.27.4"
7
7
 
8
- COMPAT_DECIDIM_VERSION = [">= 0.25.0", "< 0.27"].freeze
8
+ COMPAT_DECIDIM_VERSION = [">= 0.27.0", "< 0.28"].freeze
9
9
  end
10
10
  end